http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/SuggestionManager.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/SuggestionManager.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/SuggestionManager.as deleted file mode 100644 index f792b5d..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/SuggestionManager.as +++ /dev/null @@ -1,1026 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core -{ - import com.adobe.linguistics.spelling.core.env.InternalConstants; - import com.adobe.linguistics.spelling.core.rule.PrefixEntry; - import com.adobe.linguistics.spelling.core.rule.SuffixEntry; - import com.adobe.linguistics.spelling.core.utils.*; - - import flash.utils.Dictionary; - import flash.utils.getTimer; - - public class SuggestionManager - { - - private var _attributeMgr:LinguisticRule; - private var _maxSug:int; - private var _languageCode:String; - private var _ckey:String; - private var _cUpperTry:String; - private var _cLowerTry:String; - private var _cAllTry:String; - private var _maxngramsugs:int; - private var _fastMode:Boolean; - - private var _word:String; - private var _guessSuggestions:SuggestionsResult; - private var _guessWordList:SuggestionsResult; - private var guess:Array = new Array (InternalConstants.MAX_GUESS); - private var gscore:Array = new Array ( InternalConstants.MAX_GUESS); - - public function SuggestionManager( attrMgr:LinguisticRule, fastMode:Boolean = true ) - { - this._maxSug = InternalConstants.MAXSUGGESTION; - this._attributeMgr = attrMgr; - this._ckey = this._attributeMgr.keyString; - - this._cAllTry = this._attributeMgr.tryString; - this._cUpperTry = ""; - this._cLowerTry = ""; // lower and netual... - for ( var i:int = 0; (this._attributeMgr.tryString != null)&&(i < this._attributeMgr.tryString.length); ++i ) { - if ( this._attributeMgr.tryString.charAt(i) == this._attributeMgr.tryString.charAt(i).toLocaleLowerCase() ) { - this._cLowerTry+=this._attributeMgr.tryString.charAt(i); - } else { - this._cUpperTry+= this._attributeMgr.tryString.charAt(i); - } - - } - - this._maxngramsugs = InternalConstants.MAXNGRAMSUGS; - this._fastMode = fastMode; - - //initialized viriable for performance... - _word=null; - _guessSuggestions = new SuggestionsResult(InternalConstants.MAX_ROOTS, compareSuggestion ); - _guessWordList = new SuggestionsResult( InternalConstants.MAX_GUESS, compareSuggestion ); - if ( this._attributeMgr.maxNgramSuggestions > 0 ) this._maxngramsugs = this._attributeMgr.maxNgramSuggestions; - } - - public function get fastMode():Boolean { - return this._fastMode; - } - - public function set fastMode( value:Boolean ) :void { - this._fastMode = value; - } - - private static function compareSuggestion( obj1:*, obj2:*):int { - return (obj1.score-obj2.score); - } - - - public function set languageCode(value:String) :void { - this._languageCode = value; - } - - public function get languageCode():String { - return this._languageCode; - } - - public function nsuggest( result:Array, word:String ):int { - - if ( !((result.length+this._maxngramsugs) <= this._maxSug) ) return result.length; - - - var nsug:int = result.length; - var i:int,j:int,sc:int, opt:int, n:int = word.length; - var arr:Array; - var sd:SquigglyDictionary; - var dict:Dictionary; - _word = word; - var initCap:Boolean = (word.charAt(0) == word.charAt(0).toLocaleLowerCase() )? false:true; - var wordCapValue:int = word.charAt(0).toLocaleUpperCase().charCodeAt(0); - _guessSuggestions.clear(); - - /* A filter based on string length, it could be */ - var rangeOffset:int =5; - var endRange:int = word.length + (rangeOffset-2); - var startRange:int = (word.length>(rangeOffset+2)) ? (word.length-rangeOffset):2 ; - - var counter:Number=0 - var startTime:Number = getTimer(); - - // exhaustively search through all root words - // keeping track of the MAX_ROOTS most similar root words - - // word reversing wrapper for complex prefixes - - // set character based ngram suggestion for words with non-BMP Unicode characters - - //a filter for performance improvement... - var firstCodeValue:Number =word.charCodeAt(0), lastCodeValue:Number = word.charCodeAt(word.length-1); - - - for ( i=0;i<this._attributeMgr.dictionaryManager.dictonaryList.length; ++i ) { - sd = this._attributeMgr.dictionaryManager.dictonaryList[i]; - dict = sd.dictionary; - - var lowerS:String; - var he:HashEntry; - opt = InternalConstants.NGRAM_LONGER_WORSE + InternalConstants.NGRAM_LOWERING; - for( var key:String in dict ) { - if ( (key.length < startRange) || (key.length > endRange) ) continue; - if ( (this._fastMode) && (firstCodeValue != key.charCodeAt(0)) && (lastCodeValue != key.charCodeAt(key.length-1)) ) continue; - counter++; - - sc = ngram( 3, _word,key,opt) + leftCommonSubString(_word, key, initCap, wordCapValue); - - if ( sc > 0 ) { - if ( _guessSuggestions.size < InternalConstants.MAX_ROOTS ) { - if ( dict[key].affixFlagVector && - (dict[key].testAffix( this._attributeMgr.forbiddenWord ) || - dict[key].testAffix( this._attributeMgr.onlyInCompound) || - dict[key].testAffix( this._attributeMgr.noSuggest ) || - dict[key].testAffix( InternalConstants.ONLYUPCASEFLAG ) - )) continue; - _guessSuggestions.insert( new SuggestionEntry(sc,key, dict[key] ) ); - if ( _guessSuggestions.size == InternalConstants.MAX_ROOTS ) { - _guessSuggestions.buildheap(); - } - }else { - if ( sc > _guessSuggestions.front.score ) { - _guessSuggestions.front.score = sc; - _guessSuggestions.front.key = key; - _guessSuggestions.front.hashEntry = dict[key]; - _guessSuggestions.updateFront(); - } - } - } - } - } - - var thresh:int = 0; - var mw:String; - for ( var sp:int = 1; sp < 4; ++sp) { - mw = word; - for ( var k:int=sp; k<n; k+=4) { - mw = mw.substring(0,k) + "*" + mw.substring(k+1); - } - thresh = thresh + ngram( n, word, mw, InternalConstants.NGRAM_ANY_MISMATCH + InternalConstants.NGRAM_LOWERING); - } - thresh = thresh /3; - thresh --; - - // now expand affixes on each of these root words and - // and use length adjusted ngram scores to select - // possible suggestions - _guessWordList.clear(); - - - //work arround for inconsitent ordered Dictionary table. bof - if ( _guessSuggestions.isEmpty() ) return result.length; - var lowestScore:int = _guessSuggestions.front.score; - var indexArr:Array; - if ( _guessSuggestions.size != _guessSuggestions.maxSize ){ - indexArr=_guessSuggestions.data.slice(0,_guessSuggestions.size).sortOn("key",Array.DESCENDING | Array.RETURNINDEXEDARRAY); - }else{ - indexArr=_guessSuggestions.data.sortOn("key",Array.DESCENDING | Array.RETURNINDEXEDARRAY); - } - //work arround for inconsitent ordered Dictionary table. bof - - // root list; - for each ( i in indexArr ) { - //work arround for inconsitent ordered Dictionary table. bof - if ( i==0 || _guessSuggestions.data[i].score == lowestScore ) continue; - //work arround for inconsitent ordered Dictionary table. bof - - var candList:Array = new Array(); - var candOriginalList:Array = new Array(); - expandRootWord(candList,candOriginalList, InternalConstants.MAX_WORDS, _guessSuggestions.data[i].key, _guessSuggestions.data[i].hashEntry, word ); - for ( j=0; j < candList.length; ++j) { - sc = ngram ( n, word, candList[j], InternalConstants.NGRAM_ANY_MISMATCH + InternalConstants.NGRAM_LOWERING) + leftCommonSubString(word, candList[j],initCap, wordCapValue); - if ( (sc>thresh) ) { - if ( _guessWordList.size < InternalConstants.MAX_GUESS ) { - _guessWordList.insert( new GuessWord(sc,candList[j], null ) ); - if ( _guessWordList.size == InternalConstants.MAX_GUESS ) { - _guessWordList.buildheap(); - } - }else { - if ( sc > _guessWordList.front.score ) { - _guessWordList.front.score = sc; - _guessWordList.front.key = candList[j]; - _guessWordList.front.original = null; - _guessWordList.updateFront(); - } - } - - } - } - } - - // now we are done generating guesses - // sort in order of decreasing score - var guessArr:Array = _guessWordList.toArray().sortOn("score",Array.NUMERIC | Array.DESCENDING); - - - // weight suggestions with a similarity index, based on - // the longest common subsequent algorithm and resort - var refobj:RefObject = new RefObject(0); - var gl:String; - for ( i=guessArr.length-1;i>= 0; --i ) { - gl = guessArr[i].key.toLocaleLowerCase(); - var _lcs:int = StringUtils.lcslen(word, gl); - // same characters with different casing - if ( (n==gl.length) && (n == _lcs) ) { - guessArr[i].score += 2000; - break; - } - // heuristic weigthing of ngram scores - guessArr[i].score += - // length of longest common subsequent minus length difference - 2 * _lcs - Math.abs((int) (n - guessArr[i].key.length)) + - // weight length of the left common substring - leftCommonSubString(word, gl,initCap, wordCapValue) + - // weight equal character positions - ((_lcs == StringUtils.commonCharacterPositions(word, gl, refobj)) ? 1: 0) + - // swap character (not neighboring) - ((refobj.ref) ? 1000 : 0); - } - - guessArr = guessArr.sortOn("score", Array.NUMERIC | Array.DESCENDING); - - - // copy over - var oldnsug:int = nsug; - var same:int = 0; - for ( i=0;i< guessArr.length; ++i ) { - if ( (nsug < this._maxSug) && (result.length < (oldnsug + this._maxngramsugs)) && (!same || (guessArr[i].score > 1000)) ) { - var unique:int = 1; - // leave only excellent suggestions, if exists - if ( guessArr[i].score > 1000 ) same = 1; - // don't suggest previous suggestions or a previous suggestion with prefixes or affixes - for ( j=0;j< result.length; ++j) { - if ( ( guessArr[i].key.indexOf(result[j]) != -1) || !checkWord(guessArr[i].key) ) unique = 0; - } - if ( unique ) { - result.push( guessArr[i].key ); - } - } - - } - - var endTime:Number = getTimer(); - return nsug; - } - - private function testValidSuggestion(element:*, gw:GuessWord):Boolean { - if ( gw.key.indexOf( element ) ) - return false; - if ( !checkWord(element) ) return false; - return true; - } - - private function expandRootWord(guessWordList:Array, guessOriginalList:Array, maxn:int, root:String, he:HashEntry, badWord:String) :void { - // first add root word to list - var nh:int = 0, i:int, j:int; - var sfx:SuffixEntry; - var pfx:PrefixEntry; - var newWord:String; - var crossFlagArray:Array = new Array(); - if ( (guessWordList.length < maxn) && - !( (he.affixFlagVector != null) && - ( (this._attributeMgr.needAffix && he.testAffix(this._attributeMgr.needAffix)) || ( this._attributeMgr.onlyInCompound && he.testAffix(this._attributeMgr.onlyInCompound)))) - ){ - guessWordList[nh] = root; - guessOriginalList[nh] = root; - crossFlagArray[nh] = false; - nh++; - } - - // handle suffixes - for ( i=0; (he.affixFlagVector !=null) && (i<he.affixFlagVector.length);++i) { - sfx= this._attributeMgr.suffixFlagTable[he.affixFlagVector.charAt(i)]; - while( sfx ) { - var index:int = badWord.lastIndexOf(sfx.affixKey); - if ( (index != -1) && ( index== (badWord.length-sfx.affixKey.length)) ) { - newWord = sfx.add(root); - if ( newWord) { - guessWordList[nh] = newWord; - guessOriginalList[nh] = root; - crossFlagArray[nh] = sfx.permissionToCombine; - nh++; - } - } - sfx = sfx.nextElementWithFlag; - } - } - - // handle cross products of prefixes and suffixes - var n:int = nh; - for ( j=1;j<n;++j) { - if( crossFlagArray[j] ) { - for ( i=0;(he.affixFlagVector !=null) && (i<he.affixFlagVector.length);++i) { - pfx = this._attributeMgr.prefixFlagTable[he.affixFlagVector.charAt(i)]; - while( pfx ) { - if ( badWord.indexOf(pfx.affixKey)== 0 ) { - newWord = pfx.add(guessWordList[j]); - if ( newWord) { - guessWordList[nh] = newWord; - guessOriginalList[nh] = root; - crossFlagArray[nh] = pfx.permissionToCombine; - nh++; - } - } - pfx = pfx.nextElementWithFlag; - } - } - } - } - - // now handle pure prefixes - for ( i=0; (he.affixFlagVector !=null) && (i<he.affixFlagVector.length);++i) { - pfx= this._attributeMgr.prefixFlagTable[he.affixFlagVector.charAt(i)]; - while( pfx ) { - if ( badWord.indexOf(pfx.affixKey) == 0 ) { - newWord = pfx.add(root); - if ( newWord) { - guessWordList[nh] = newWord; - guessOriginalList[nh] = root; - crossFlagArray[nh] = pfx.permissionToCombine; - nh++; - } - } - pfx = pfx.nextElementWithFlag; - } - } - - } - - /* - * ToDo: Since this is a generic algorithm, we might want move this code to StringUtils class. - */ - private function ngram(n:int, s1:String, s2:String, opt:int):int { - - var i:int,j:int,k:int,m:int,n:int; - var nscore:int = 0, ns:int, l1:int, l2:int; - - l1 = s1.length; - l2 = s2.length; - if ( opt & InternalConstants.NGRAM_LOWERING ) s2=s2.toLowerCase(); - for ( i = 0; i<l1; i++ ) { - if ( s2.indexOf( s1.charAt(i) ) != -1 ) ns++; - } - nscore = nscore + ns; - if ( ns >= 2 ) { - for ( j = 2; j<=n; j++ ) { - ns = 0; - for ( i = 0; i <=(l1-j); i++ ) { - // var tmp:String = s1.substr(i,i+j); - // tmp = s1.substring(i,i+j); - if ( s2.indexOf( s1.substring(i,i+j) ) != -1 ) ns++; // it could be signaficantly optimized If we can avoid to use substr() function.... - } - nscore = nscore + ns; - if (ns < 2) break; - } - } - ns = 0; - if (opt & InternalConstants.NGRAM_LONGER_WORSE) ns = (l2-l1)-2; - if (opt & InternalConstants.NGRAM_ANY_MISMATCH) ns = Math.abs(l2-l1)-2; - ns = (nscore - ((ns > 0) ? ns : 0)); - return ns; - return 1; - } - - - /* - * Deprecated function for now... - * History: - * A pre-version of implementation for error correction. After I optimized the code for performance, - * I drop this function by that time, but you know performance meassuring is a tricky problem... - * ToDo: Need a revisit when we implementing complex-affix support and compound-word support. - */ - private function ngram1(n:int, s1:String, s2:String, opt:int):int { - var nscore:int = 0, ns:int, l1:int, l2:int; - - var i:int,j:int,k:int,m:int,n:int; - - l1 = s1.length; - l2 = s2.length; - if ( opt & InternalConstants.NGRAM_LOWERING ) s2=s2.toLowerCase(); - for ( j = 1; j<=n; j++ ) { - ns = 0; - for ( i = 0; i <=(l1-j); i++ ) { -// var tmp:String = s1.substr(i,i+j); -// tmp = s1.substring(i,i+j); - if ( s2.indexOf( s1.substring(i,i+j) ) != -1 ) ns++; // it could be signaficantly optimized If we can avoid to use substr() function.... - } - nscore = nscore + ns; - if (ns < 2) break; - } - ns = 0; - if (opt & InternalConstants.NGRAM_LONGER_WORSE) ns = (l2-l1)-2; - if (opt & InternalConstants.NGRAM_ANY_MISMATCH) ns = Math.abs(l2-l1)-2; - ns = (nscore - ((ns > 0) ? ns : 0)); - return ns; - return 1; - } - - /* - * ToDo: since this is a generic algorithm, we might want to move this function to StringUtils class. - */ - private function leftCommonSubString(s1:String,s2:String, initCap:Boolean, s1CapValue:int):int { - var res:int = 1; - if ( s1.charCodeAt(0) != s2.charCodeAt(0) && ( !initCap ) && (s1CapValue != s2.charCodeAt(0)) ) return 0; - for( var i:int=1; (i< s1.length) && (s1.charCodeAt(i) == s2.charCodeAt(i)); ++i ) { - res++; - } - return res; - } - - - public function suggest( result:Array, word:String, capType:int):int { - var nsug:int = 0; - - // suggestions for an uppercase word (html -> HTML) - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = capchars(result,word,nsug); - } - - // perhaps we made a typical fault of spelling - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = replchars( result, word, nsug ); - } - - // perhaps we made chose the wrong char from a related set - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = mapchars( result, word, nsug ); - } - - // did we swap the order of chars by mistake - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = swapchar( result, word, nsug ); - } - - // did we swap the order of non adjacent chars by mistake - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = longswapchar( result, word, nsug ); - } - - // did we just hit the wrong key in place of a good char (case and keyboard) - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = badcharkey( result, word, nsug ); - } - // did we add a char that should not be there - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = extrachar( result, word, nsug ); - } - - // did we forgot a char - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = forgotchar( result, word, nsug, capType ); - } - - // did we move a char - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = movechar( result, word, nsug ); - } - - // did we just hit the wrong key in place of a good char - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = badchar( result, word, nsug, capType ); - } - - // did we double two characters - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = doubletwochars( result, word, nsug ); - } - - // perhaps we forgot to hit space and two words ran together - if ( (nsug < this._maxSug) && (nsug > -1 ) ) { - nsug = twowords( result, word, nsug ); - } - - return nsug; - } - - - - private function mapchars( result:Array, word:String, nsug:int ) :int { - if (word.length < 2) return nsug; - if ( (nsug == this._maxSug) || (this._attributeMgr.mapFilterTable.length == 0) ) return nsug; - var mapTable:Array = this._attributeMgr.mapFilterTable; - var counter:int = 0; - nsug = map_related(result, word, nsug, 0 ,mapTable, counter); - - return nsug; - } - - private function map_related( result:Array, word:String, nsug:int, startIndex:int, mapTable:Array, counter:int) :int { - var totalCheckCount:int = 8; // for performance issue only... 8 means four level detection... - var candidate:String; - var in_map:int = 0; - var j:int; - counter++; - if ( counter > totalCheckCount ) return nsug; // for performance issue only... - if ( nsug == this._maxSug ) return nsug; - if ( startIndex == word.length ) { - var cwrd:int = 1; - for ( j=0; j < result.length; ++j ) { - if ( result[j]== word ) cwrd=0; - } - if ( cwrd && checkWord(word) ) { - result.push(word); - nsug++; - } - return nsug; - - } - for ( var i:int = 0;i<mapTable.length ;++i ) { - if ( mapTable[i].mapCharSet.indexOf(word.charAt(startIndex)) != -1 ) { - in_map= 1; - for ( j =0; j< mapTable[i].mapCharSet.length; ++j ) { - candidate = word.substring(0,startIndex) +mapTable[i].mapCharSet.charAt(j)+word.substring(startIndex+1); - nsug = map_related(result,candidate,nsug,(startIndex+1),mapTable, counter); - } - } - } - - if( !in_map) { - nsug = map_related(result,word,nsug,(startIndex+1),mapTable, counter); - } - return nsug; - } - - private function twowords( result:Array, word:String, nsug:int ) :int { - var candidate:String; - var cwrd:int=1; - var count:int=0; - if (word.length < 3) return result.length; - if ( result.length >= this._maxSug ) return result.length; - - for( var i:int=1;i<word.length;++i) { - candidate = word.substring(0,i); - if ( !checkWord(candidate) ) continue; - candidate = word.substring(i); - if ( checkWord(candidate) ) { - candidate = word.substring(0,i) +" " + word.substring(i); - for ( var j:int=0; j < result.length; ++j ) { - if ( result[j]== candidate ) cwrd=0; - } - if ( cwrd ) { - if ( result.length >= this._maxSug ) return result.length; - result.push(candidate); - nsug++; - } - } - } - - return nsug; - } - - private function doubletwochars( result:Array, word:String, nsug:int ) :int { - var candidate:String; - var nstate:int=0; - if (word.length < 5) return nsug; - for (var i:int=2;i<word.length;++i) { - if( word.charCodeAt(i) == word.charCodeAt(i-2) ) { - nstate++; - if ( nstate==3) { - candidate = word.substring(0,i-1)+word.substring(i+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - nstate = 0; - } - }else { - nstate=0; - } - } - return nsug; - } - - private function badchar( result:Array, word:String, nsug:int, capType:int ) :int { - if ( this._cAllTry == null ) return nsug; - if (word.length < 2) return nsug; - var candidate:String; - var i:int, j:int; - switch(capType) { - case InternalConstants.NOCAP: { - // first for init capticalized case... - for ( i = 0; i< this._cAllTry.length;++i) { - candidate = this._cAllTry.charAt(i)+word.substring(1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - // for the rest of the word... - for ( i = 0; i< this._cLowerTry.length;++i) { - for ( j=1;j<word.length;++j) { - candidate = word.substring(0,j)+this._cLowerTry.charAt(i)+word.substring(j+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - } - break; - } - case InternalConstants.INITCAP:{ - // first for init capticalized case... - for ( i = 0; i< this._cAllTry.length;++i) { - candidate = this._cAllTry.charAt(i)+word.substring(1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - // for the rest of the word... - for ( i = 0; i< this._cLowerTry.length;++i) { - for ( j=1;j<word.length;++j) { - candidate = word.substring(0,j)+this._cLowerTry.charAt(i)+word.substring(j+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - } - break; - } - case InternalConstants.HUHCAP: { - } - case InternalConstants.HUHINITCAP:{ - for ( i = 0; i< this._cAllTry.length;++i) { - for ( j=0;j<word.length;++j) { - candidate = word.substring(0,j)+this._cAllTry.charAt(i)+word.substring(j+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - } - break; - } - case InternalConstants.ALLCAP: { - for ( i = 0; i< this._cUpperTry.length;++i) { - for ( j=0;j<word.length;++j) { - candidate = word.substring(0,j)+this._cUpperTry.charAt(i)+word.substring(j+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - } - break; - } - } - - return nsug; - } - - // did we move a char - private function movechar( result:Array, word:String, nsug:int ) :int { - var candidate:String; - var i:int,j:int; - var char:String; - if (word.length < 3) return nsug; - for ( i=0;i<word.length-2;++i) { - char = word.charAt(i); - for ( j=i+2;j<word.length;++j) { - candidate = word.substring(0,i)+word.substring(i+1,j+1)+char+word.substring(j+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - } - - for ( i=word.length-1;i>=2;--i) { - char = word.charAt(i); - for ( j=i-2;j>=0; --j) { - candidate = word.substring(0,j)+char+word.substring(j,i)+word.substring(i+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - } - - return nsug; - } - - private function forgotchar( result:Array, word:String, nsug:int, capType:int ) :int { - if ( this._cAllTry == null ) return nsug; - var candidate:String; - var i:int, j:int; - if (word.length < 2) return nsug; - switch(capType) { - case InternalConstants.NOCAP: { - for (i =0; i< this._cAllTry.length; ++i ) { - candidate= _cAllTry.charAt(i) + word.substring(0); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - - for (i =0; i< this._cLowerTry.length; ++i ) { - for ( j=1; j< word.length;j++) { - candidate= word.substring(0,j)+_cLowerTry.charAt(i) + word.substring(j); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - candidate= word+_cLowerTry.charAt(i); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - break; - } - case InternalConstants.INITCAP:{ - // first for init capticalized case... - for (i =0; i< this._cAllTry.length; ++i ) { - candidate= _cAllTry.charAt(i) + word.substring(0); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - - for (i =0; i< this._cLowerTry.length; ++i ) { - for ( j=1; j< word.length;j++) { - candidate= word.substring(0,j)+_cLowerTry.charAt(i) + word.substring(j); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - candidate= word+_cLowerTry.charAt(i); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - break; - } - case InternalConstants.HUHCAP: { - } - case InternalConstants.HUHINITCAP:{ - for (i =0; i< this._cAllTry.length; ++i ) { - for ( j=1; j< word.length;j++) { - candidate= word.substring(0,j)+_cAllTry.charAt(i) + word.substring(j); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - candidate= word+_cAllTry.charAt(i); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - break; - } - case InternalConstants.ALLCAP: { - for (i =0; i< this._cUpperTry.length; ++i ) { - for ( j=0; j< word.length;j++) { - candidate= word.substring(0,j)+_cUpperTry.charAt(i) + word.substring(j); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - candidate= word+_cUpperTry.charAt(i); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - break; - } - } - return nsug; - } - - // error is word has an extra letter it does not need - private function extrachar( result:Array, word:String, nsug:int ) :int { - var candidate:String; - if (word.length < 2) return nsug; - for ( var i:int=0; i< word.length ; ++i ) { - candidate = word.substring(0,i) + word.substring(i+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - return nsug; - } - - // error is wrong char in place of correct one (case and keyboard related version) - private function badcharkey( result:Array, word:String, nsug:int ) :int { - var candidate:String; - if (word.length < 2) return nsug; - var startIndex:int = 0; - // swap out each char one by one and try uppercase and neighbor - // keyboard chars in its place to see if that makes a good word - for ( var i:int =0; i<word.length; ++i) { - // check with uppercase letters - if ( word.charAt(i).toLocaleUpperCase() != word.charAt(i) ) { - candidate = word.substring(0,i)+word.charAt(i).toLocaleUpperCase()+word.substring(i+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - // check neighbor characters in keyboard string - if ( this._ckey == null ) continue; - startIndex = this._ckey.indexOf(word.charAt(i),startIndex); - while ( startIndex != -1 ) { - if ( (startIndex!=0) && (_ckey.charAt(startIndex-1) != "|" ) ) { - candidate = word.substring(0,i)+_ckey.charAt(startIndex-1)+word.substring(i+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - if ( (_ckey.charAt(startIndex+1)!="|") && (startIndex != _ckey.length - 1) ) { - candidate = word.substring(0,i)+_ckey.charAt(startIndex+1) + word.substring(i+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - startIndex = this._ckey.indexOf(word.charAt(i),startIndex+1); - } - } - - return nsug; - } - - private function longswapchar( result:Array, word:String, nsug:int ) :int { - var candidate:String; - if (word.length < 2) return nsug; - for ( var i:int =0 ; i< word.length-2; ++i ) { - for ( var j:int = i+2;j< word.length;++j) { - candidate = word.substring(0,i)+ word.charAt(j) + word.substring(i+1,j) + word.charAt(i) + word.substring(j+1); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - } - return nsug; - } - - private function swapchar( result:Array, word:String, nsug:int ) :int { - var candidate:String; - if (word.length < 2) return nsug; - var i:int; - var wl:int = word.length; - // try swapping adjacent chars one by one - for (i=0;i< wl-1;++i) { - candidate = word.substring(0,i)+word.charAt(i+1)+word.charAt(i) + word.substring(i+2); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - - if ( wl == 4 || wl == 5 ) { - candidate = word.charAt(1) + word.charAt(0); - if ( wl == 5) candidate +=word.charAt(2); - candidate += word.charAt(wl - 1) + word.charAt(wl - 2); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - if ( wl == 5 ) { - candidate = word.charAt(0) + word.charAt(2) + word.charAt(1) + candidate.substr(3); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - } - return nsug; - - } - private function replchars( result:Array, word:String, nsug:int ) :int { - var candidate:String; - if (word.length < 2) return nsug; - var searchIndex:int=0; - if ( (this._attributeMgr.simpleFilterTable==null) || (this._attributeMgr.simpleFilterTable.length == 0) ) return nsug; - for ( var i:int = 0; i < this._attributeMgr.simpleFilterTable.length; ++i ) { - while ( (searchIndex = word.indexOf( this._attributeMgr.simpleFilterTable[i].matchString,searchIndex)) != -1 ){ - searchIndex = searchIndex + this._attributeMgr.simpleFilterTable[i].matchString.length; - candidate = word.substr(0, searchIndex-this._attributeMgr.simpleFilterTable[i].matchString.length) + - this._attributeMgr.simpleFilterTable[i].replacement + - word.substr(searchIndex); - nsug = testSuggestion( result,candidate, nsug); - if ( nsug == -1 || nsug == this._maxSug ) return nsug; - } - - } - return nsug; - } - - private function capchars( result:Array, word:String, nsug:int) : int { - var candidate:String = word.toLocaleUpperCase(); - return testSuggestion(result,candidate,nsug); - } - - private function testSuggestion(result:Array, word:String, nsug:int):int { - var cwrd:int=1; - if ( result.length >= this._maxSug ) return nsug; - for ( var i:int=0; i < result.length; ++i ) { - if ( result[i]== word ) cwrd=0; - } - - if ( (cwrd) && checkWord(word) ) { - result.push(word); - nsug++; - } - return nsug; - } - - // see if a candidate suggestion is spelled correctly - // needs to check both root words and words with affixes - - // ToDo the following in next release... - // obsolote MySpell-HU modifications: - // return value 2 and 3 marks compounding with hyphen (-) - // `3' marks roots without suffix - - private function checkWord(word:String):int { - var rv:HashEntry = null; - var nosuffix:int =0; - if ( this._attributeMgr ) { - rv = _attributeMgr.lookup(word); - if ( rv ) { - if ( (rv.affixFlagVector) && ( rv.testAffix(this._attributeMgr.forbiddenWord) || rv.testAffix(this._attributeMgr.noSuggest) ) ){ - return 0; - } - while ( rv ) { - if ( (rv.affixFlagVector) && ( rv.testAffix(this._attributeMgr.needAffix) || rv.testAffix(InternalConstants.ONLYUPCASEFLAG) || rv.testAffix(this._attributeMgr.onlyInCompound) ) ) { - rv = rv.next - }else break; - } - }else rv = _attributeMgr.optPrefixCheck2(word, 0,0) // only prefix, and prefix + suffix XXX - - if ( rv ) { - nosuffix = 1; - }else { - rv = _attributeMgr.optSuffixCheck2(word,0,null,0,0); - } - //this is added after we have two level suffix stripping - if (!rv && this._attributeMgr.haveContClass) { - rv = this._attributeMgr.optTwoSuffixCheck(word, 0, null, 0); - if (!rv) rv = this._attributeMgr.optTwoPrefixCheck(word,1, 0); - } - - // check forbidden words - if ( (rv) && (rv.affixFlagVector) && ( rv.testAffix(this._attributeMgr.forbiddenWord) || rv.testAffix(InternalConstants.ONLYUPCASEFLAG) - || rv.testAffix(this._attributeMgr.noSuggest) || rv.testAffix(this._attributeMgr.onlyInCompound) ) ) { - return 0; - } - if ( rv ) { - //// XXX obsolote ToDo - return 1; - } - - } - return 0; - } - - } -} - - -internal class GuessWord { - private var _score:int; - private var _key:String; - private var _original:String; - - public function GuessWord(score:int, key:String, original:String){ - this.key = key; - this.score = score; - this.original = original; - } - - public function get score():int { - return this._score; - } - public function set score(value:int) :void { - this._score = value; - } - - public function get key():String { - return this._key; - } - public function set key(value:String) :void { - this._key = value; - } - public function get original():String { - return this._original; - } - public function set original(value:String) :void { - this._original = value; - } -} - -internal class SuggestionEntry { - import com.adobe.linguistics.spelling.core.HashEntry; - private var _score:int; - private var _key:String; - private var _hashEntry:HashEntry; - - public function SuggestionEntry(score:int, key:String, hashEntry:HashEntry) { - this.key = key; - this.score = score; - this.hashEntry = hashEntry; - - } - - public function get score():int { - return this._score; - } - public function set score(value:int) :void { - this._score = value; - } - - public function get key():String { - return this._key; - } - public function set key(value:String) :void { - this._key = value; - } - - public function get hashEntry():HashEntry { - return this._hashEntry; - } - - public function set hashEntry(value:HashEntry ) :void { - this._hashEntry = value; - } - -}
http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/UserDictionaryEngine.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/UserDictionaryEngine.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/UserDictionaryEngine.as deleted file mode 100644 index 93ba707..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/UserDictionaryEngine.as +++ /dev/null @@ -1,71 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core -{ - import com.adobe.linguistics.spelling.UserDictionaryInternal; - - public class UserDictionaryEngine - { - // Private properties - private var _dictionaryList:Array; // get only - private var _userDict:UserDictionaryInternal; - - public function UserDictionaryEngine(ud:UserDictionaryInternal=null) - { - _dictionaryList = new Array(); - } - public function addDictionary(userDictionary:UserDictionaryInternal):Boolean - { - if ( (userDictionary == null) ) return false; - - for ( var i:int = 0;i < _dictionaryList.length; ++i ) { - if ( userDictionary == _dictionaryList[i] ) - return false; - } - _dictionaryList.push(userDictionary); - return true; - } - - public function removeDictionary(userDictionary:UserDictionaryInternal):Boolean - { - - for ( var i:int =0; i < _dictionaryList.length; ++i ) { - if ( userDictionary == _dictionaryList[i] ) { - _dictionaryList.splice(i,1); - return true; - } - } - return false; - } - - public function spell( word:String ) :Boolean { - var result:Boolean = false; - for ( var i:int =0; (i < _dictionaryList.length) && (!result);++i ) { - _userDict = _dictionaryList[i]; - if ( _userDict ) { - result = (_userDict._wordList.lookup(word) != -1); - } - } - return result; - } - - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Collection.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Collection.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Collection.as deleted file mode 100644 index 5954c21..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Collection.as +++ /dev/null @@ -1,89 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - - - -package com.adobe.linguistics.spelling.core.container -{ - /** - * public interface Collection The root interface in the collection - * hierarchy. A collection represents a group of objects, known as - * its elements. Some collections allow duplicate elements and others - * do not. Some are ordered and others unordered. The SDK does not - * provide any direct implementations of this interface: it provides - * implementations of more specific subinterfaces like Set and List. - */ - - /** - * ToDo: add hashCode() function - * add remove()/add() function - */ - - public interface Collection - { - - /** - * The number of elements in this collection. - * @Returns the number of elements in this collection. - */ - function get size():int; - - /** - * Tests if the collection is empty. - * - * @ Returns true if this collection contains no elements. - */ - function isEmpty():Boolean - - /** - * Determines if the collection contains the specified element. - * - * @ obj: element whose presence in this collection is to be tested. - * - * @ Returns true if this collection contains the specified element. - */ - function contains( obj:* ) : Boolean - - /** - * Removes all of the elements from this collection (optional operation). - */ - function clear():void - - /** - * Returns an iterator over the elements in this collection. There are - * no guarantees concerning the order in which the elements are returned - * (unless this collection is an instance of some class that provides a guarantee). - * - * @an Iterator over the elements in this collection - */ - function getIterator():Iterator - - /** - * Returns an array containing all of the elements in this collection. - * If the collection makes any guarantees as to what order its elements - * are returned by its iterator, this method must return the elements - * in the same order. - * - * @return An array. - */ - function toArray():Array - - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Enumeration.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Enumeration.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Enumeration.as deleted file mode 100644 index 16611ad..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Enumeration.as +++ /dev/null @@ -1,28 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core.container -{ - public interface Enumeration - { - function hasMoreElements():Boolean; - function nextElement():*; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/HashTable.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/HashTable.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/HashTable.as deleted file mode 100644 index cf38c81..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/HashTable.as +++ /dev/null @@ -1,179 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core.container -{ - import flash.utils.Dictionary; - - /** - * A hash table - */ - public class HashTable implements Collection - { - protected var _map:Dictionary; - protected var _elementNum:int; - - /** - * Initializes a new hash table. - * - * @param size The size of the hash table. - * @param hash A hashing function. - */ - public function HashTable(useWeakReferences:Boolean = true) - { - _map = new Dictionary( useWeakReferences ); - _elementNum = 0; - } - - public function put(key:*, value:*) : void - { - _map[key] = value; - ++_elementNum; - } - - public function remove(key:*) : void - { - delete _map[key]; - --_elementNum; - } - - public function containsKey(key:*) : Boolean - { - return _map.hasOwnProperty( key ); - } - - public function containsValue(value:*) : Boolean - { - for ( var key:* in _map ) - { - if ( _map[key] == value ) - { - return true; - } - } - return false; - } - - public function contains(value:*):Boolean { - return containsValue(value); - } - - public function getElement(key:* ):* { - return _map[key]; - } - - /** - * @inheritDoc - */ - public function clear() : void - { - for ( var key:* in _map ) - { - remove( key ); - } - } - - /** - * @inheritDoc - */ - public function getIterator():Iterator - { - return null; - } - - /** - * @inheritDoc - */ - public function get size():int - { - return _elementNum; - } - - /** - * @inheritDoc - */ - public function isEmpty():Boolean - { - return _elementNum == 0; - } - - public function get keys() : Array - { - var _keys:Array = []; - - for (var key:* in _map) - { - _keys.push( key ); - } - return _keys; - } - - public function get elements() : Array - { - var _values:Array = []; - - for each ( var value:* in _map ) { - _values.push( value ); - } - return _values; - } - - /** - * @inheritDoc - */ - public function toArray():Array - { - return keys; - } - - /** - * Prints out a string representing the current object. - * - * @return A string representing the current object. - */ - public function toString():String - { - return "[HashTable, size=" + size + "]"; - } - - public function get hashMap():Dictionary { - return this._map; - } - - /** - * Need refine... Possible solution is that we can use two function paramter to control the input and output. - * - * - */ - public function watchEntries(func:Function=null):Array { - if ( func == null ) - return null; - var res:Array = new Array(); - for (var curKey:* in _map) - { - if ( func( curKey, _map[curKey] ) ) { - res.push( curKey ); - } - } - return (res.length == 0)? null: res; - } - - } -} http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Heap.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Heap.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Heap.as deleted file mode 100644 index 555d6a3..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Heap.as +++ /dev/null @@ -1,263 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - - -package com.adobe.linguistics.spelling.core.container -{ - /** - * BinaryHeap implementation of priority queue. The heap is either a - * minimum or maximum heap as determined by parameters passed to constructor. - * - */ - public final class Heap implements Collection - { - private var __size:int; - private var __count:int; - private var __compare:Function; - public var __heap:Array; - - /** - * Create a new heap. - * - * @param size The heap's maximum capacity. - * @param compare A comparison function for sorting the heap's data. - * If no function is passed, the heap uses default function. - */ - public function Heap(size:int=1000, compare:Function = null) - { - __count = 0; - __heap = new Array(__size = size + 1); - - if (compare == null) - __compare = function(a:int, b:int):int { return a - b; }; - else - __compare = compare; - } - - /** - * The maximum capacity. - */ - public function get maxSize():int - { - return __size; - } - - public function isEmpty():Boolean - { - return false; - } - - public function toArray():Array - { - return __heap.slice(1, __count + 1); - } - - public function toString():String - { - return "[Heap, size=" + __size +"]"; - } - - public function dump():String - { - var k:int = __count + 1; - var s:String = "Heap\n{\n"; - for (var i:int = 1; i < k; i++) - s += "\t" + __heap[i] + "\n"; - s += "\n}"; - return s; - } - - /** - * The front item. - */ - public function get front():* - { - return __heap[1]; - } - - /** - * Enqueues. - * @param obj The data to enqueue. - * @return False if the queue is full, otherwise true. - */ - public function enqueue(obj:*):Boolean - { - if (__count + 1 < __size){ - __heap[++__count] = obj; - - var i:int = __count; - var tmp:* = __heap[i]; - var v:*; - var parent:int = i >> 1; - - if (__compare != null) - { - while (parent > 0){ - v = __heap[parent]; - if (__compare(tmp, v) < 0){ - __heap[i] = v; - i = parent; - parent >>= 1; - } - else break; - } - }else{ - while (parent > 0){ - v = __heap[parent]; - if (tmp - v < 0){ - __heap[i] = v; - i = parent; - parent >>= 1; - } - else break; - } - } - __heap[i] = tmp; - return true; - } - return false; - } - - /** - * Dequeues. - * @return The heap's front item or null if it is empty. - */ - public function dequeue():* - { - if (__count >= 1){ - var o:* = __heap[1]; - - __heap[1] = __heap[__count]; - delete __heap[__count]; - - var tmp:* = __heap[i]; - var i:int = 1; - var v:*; - var child:int = i << 1; - - if (__compare != null) { - while (child < __count) { - if (child < __count - 1) { - if (__compare(__heap[child], __heap[int(child + 1)]) > 0) - child++; - } - v = __heap[child]; - if (__compare(tmp, v) > 0){ - __heap[i] = v; - i = child; - child <<= 1; - } - else break; - } - }else{ - while (child < __count){ - if (child < __count - 1){ - if (__heap[child] - __heap[int(child + 1)] > 0) - child++; - } - v = __heap[child]; - if (tmp - v > 0){ - __heap[i] = v; - i = child; - child <<= 1; - } - else break; - } - } - __count--; - __heap[i] = tmp; - return o; - } - return null; - } - - /** - * Tests if a given item exists. - */ - public function contains(obj:*):Boolean - { - for (var i:int = 1; i <= __count; i++){ - if (__heap[i] === obj) - return true; - } - return false; - } - - public function clear():void - { - __heap = new Array(__size); - __count = 0; - } - - public function getIterator():Iterator - { - return new HeapIterator(this); - } - - public function get size():int - { - return __count; - } - - } -} - -import com.adobe.linguistics.spelling.core.container.Heap; -import com.adobe.linguistics.spelling.core.container.Iterator; - -internal class HeapIterator implements Iterator -{ - private var __values:Array; - private var __length:int; - private var __cursor:int; - - public function HeapIterator(heap:Heap) - { - __values = heap.toArray(); - __cursor = 0; - __length = __values.length; - } - - public function get data():* - { - return __values[__cursor]; - } - - public function set data(obj:*):void - { - __values[__cursor] = obj; - } - - public function start():void - { - __cursor = 0; - } - - public function hasNext():Boolean - { - return __cursor < __length; - } - - public function next():* - { - return __values[__cursor++]; - } -} - http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Iterator.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Iterator.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Iterator.as deleted file mode 100644 index 4abe889..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Iterator.as +++ /dev/null @@ -1,64 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - - - -package com.adobe.linguistics.spelling.core.container -{ - /** - * public interface Iterator - * An iterator over a collection. Iterator takes the place of Enumeration - * in the AS collections framework. Iterators differ from enumerations in - * two ways: - * Iterators allow the caller to remove elements from the underlying - * collection during the iteration with well-defined semantics. - * Method names have been improved. - */ - public interface Iterator - { - - /** - * Grants access to the current item being referenced by the iterator. - * This provides a quick way to read or write the current data. - * Dirty interface, will remove in next version. - */ - function get data():* - function set data(obj:*):void - - /** - * Seek the iterator to the first item in the collection. - */ - function start():void - - /** - * Returns the next element in the iteration. - * - */ - function next():* - - /** - * Returns true if the iteration has more elements. - * - * @Returns true if the iteration has more elements. - */ - function hasNext():Boolean - - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Set.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Set.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Set.as deleted file mode 100644 index 32525e7..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/Set.as +++ /dev/null @@ -1,195 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - - - -package com.adobe.linguistics.spelling.core.container -{ - import flash.utils.Dictionary; - - /** - * A collection that contains no duplicate elements. More formally, sets - * contain no pair of elements e1 and e2 such that e1.equals(e2), and at - * most one null element. As implied by its name, this interface models - * the mathematical set abstraction. - */ - public final class Set implements Collection - { - private var __size:int; - private var __set:Dictionary = new Dictionary(true); - - /** - * Creates a empty set. - */ - public function Set() - { - __set = new Dictionary(); - } - - - public function contains(obj:*):Boolean - { - return __set[obj] != undefined; - } - - public function clear():void - { - __set = new Dictionary(); - __size = 0; - } - - public function get data():Dictionary { - return this.__set; - } - - public function getIterator():Iterator - { - return new SetIterator(this); - } - - public function get size():int - { - return __size; - } - - public function isEmpty():Boolean - { - return __size == 0; - } - - /** - * Reads an item from the set. - * - * @param obj The item to retrieve. - * @return The item matching the obj parameter or null. - */ - public function lookup(obj:*):* - { - var val:* = __set[obj]; - return val != undefined ? val : null; - } - - /** - * Adds the specified element to this set if it is not already present (optional operation). - * - * @param obj The item to be added. - */ - public function insert(obj:*):void - { - if (obj == null) return; - if (obj == undefined) return; - if (__set[obj]) return; - - __set[obj] = obj; - __size++; - } - - /** - * Removes the specified element from this set if it is present (optional operation). - * - * @param obj The item to be removed - * @return The removed item or null. - */ - public function remove(obj:*):Boolean - { - if (__set[obj] != undefined) - { - delete __set[obj]; - __size--; - return true; - } - return false; - } - - public function toArray():Array - { - var a:Array = new Array(__size); - var j:int; - for (var i:* in __set) a[j++] = i; - return a; - } - - /** - * Return a string representing the current object. - */ - public function toString():String - { - return "[Set, size=" + size + "]"; - } - - /** - * Prints out all elements (debug use only). - */ - public function dump():String - { - var s:String = "Set:\n"; - for each (var i:* in __set) - s += "[val: " + i + "]\n"; - return s; - } - } - -} - - -import com.adobe.linguistics.spelling.core.container.Iterator -import com.adobe.linguistics.spelling.core.container.Set; - -internal class SetIterator implements Iterator -{ - private var __cursor:int; - private var __size:int; - private var __s:Set; - private var __a:Array; - - public function start():void - { - __cursor = 0; - } - - public function get data():* - { - return __a[__cursor]; - } - - public function set data(obj:*):void - { - __s.remove(__a[__cursor]); - __s.insert(obj); - } - - public function SetIterator(s:Set) - { - __cursor = 0; - __size = s.size; - __s = s; - __a = s.toArray(); - } - - public function next():* - { - return __a[__cursor++]; - } - - public function hasNext():Boolean - { - return __cursor < __size; - } -} http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/SparseHashTable.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/SparseHashTable.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/SparseHashTable.as deleted file mode 100644 index 3a0e8d1..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/container/SparseHashTable.as +++ /dev/null @@ -1,283 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core.container -{ - import com.adobe.linguistics.spelling.core.utils.*; - public final class SparseHashTable implements Collection - { - - private var _keyTable:Array; - private var _elementTable:Array; - private var _hashSize:int; - private var _tableCapacity:int; - private var _loadFactor:Number; - private var _elementNum:int; - private var _deletedObject:Object = new Object(); - - /** - * A simple function for hashing strings. - */ - private function hashString(s:String):int - { - var hash:int = 0, i:int, k:int = s.length, ROTATE_LEN:int = 5; - for ( i =0; i < 4 && !isNaN(s.charCodeAt(i)); ++i ) { - hash = ( hash << 8 ) | ( s.charCodeAt(i) ) - } - while ( !isNaN(s.charCodeAt(i)) ) { - (hash) = ((hash) << (ROTATE_LEN)) | (((hash) >> (32 - ROTATE_LEN)) & ((1 << (ROTATE_LEN))-1)); - hash ^= ( s.charCodeAt(i) ); - ++i; - } - return (hash > 0) ? hash : -hash; // or use uint conversion to convert minus number to plus number.... still debate// - } -// private function hashString(s:String):int -// { -// var hash:int = 0, i:int, k:int = s.length; -// for (i = 0; i < k; i++) hash += (i + 1) * s.charCodeAt(i); -// return hash; -// } - - /** - * A simple function for hashing integers. - */ - private function hashNumber(n:Number):int - { - var i:int = int(n); - return int(i>0? i:-i); - } - - private function hash(key:*):int { - if (key is Number ) { - return hashNumber(key); - }else if (key is String ) { - return hashString(key); - } - - if (key.hasOwnProperty("hashCode")) - return key.hashCode()>0 ? key.hashCode() : -key.hashCode(); - else - return int(key)>0 ? int(key) : -int(key); - } - - public function SparseHashTable(initialCapacity:int = 128, loadFactor:Number = 0.75) - { - initHash(initialCapacity, loadFactor); - } - - private function initHash(initialCapacity:int = 128, loadFactor:Number = 0.75):void { - if ( !(initialCapacity > 0) || !( loadFactor > 0 && loadFactor < 1) ) - return; //input is invalid, should through exception or ... - _loadFactor = loadFactor; - _hashSize = initialCapacity; - _tableCapacity = MathUtils.nextPrime( int(_hashSize/loadFactor) ); - _keyTable = new Array(_tableCapacity); - _elementTable = new Array(_tableCapacity); - _elementNum = 0; - clear(); - } - - private function getKeyPosition(key:*):int { - var hashValue:int = hash(key); - var pos:int; - if ( hashValue < 0 ) { - trace ( "hashValue shouldn't be negative integer" ); - return -1; - } - //Quadratic Probing - for ( var i:int =0; i < _tableCapacity; ++i ) { - pos = (hashValue+i*i)%_tableCapacity ; //hi=(h(key)+i*i)%m 0â¤iâ¤m-1 - if ( _keyTable[pos] == null ) - break; - if ( _keyTable[pos] == key ) { - return pos; - } - } - return -1; - } - - private function calculateKeyPostion(key:*):int { - var hashValue:int = hash(key); - var pos:int; - if ( hashValue < 0 ) { - trace ( "Position shouldn't be negative" ); - return -1; - } - //Quadratic Probing - for ( var i:int =0; i < _tableCapacity; ++i ) { - pos = (hashValue+i*i)%_tableCapacity ; //hi=(h(key)+i*i)%m 0â¤iâ¤m-1 - if ( (_keyTable[pos] == null ) || - ( _keyTable[pos] == _deletedObject ) ) { - // insert successfully - return pos; - } - } - return -1; // hash table is full now. it should never happen. - - } - - - protected function rehash():void { - if ( _hashSize == _elementNum ) { - var oldKeyTable:Array = _keyTable; - var oldElementTable:Array = _elementTable; - initHash(_hashSize*2, _loadFactor); - for ( var i:int =0 ; i < oldKeyTable.length; ++i ) { - if (oldKeyTable[i]==null - || oldKeyTable[i] == _deletedObject) { - continue; - } - put(oldKeyTable[i],oldElementTable[i] ); - } - oldKeyTable=null; - oldElementTable=null; - } - } - - public function put( key:*, value:* ) :Boolean { - if ( _hashSize == _elementNum ) { - rehash(); - } - - if ( containsKey(key) ) { - trace ( "Contains the same Key in the table" ); - return false; - } - - var pos:int = calculateKeyPostion(key); - if ( pos < 0 ) { - trace ( "SparseHash internal error." ); - return false; - } - - ++_elementNum; - _keyTable[pos] = key; - _elementTable[pos] = value; - return true; - } - - public function remove(key:*):* { - var pos:int = getKeyPosition(key); - var res:* = (pos < 0) ? null:_elementTable[pos]; - if ( pos >= 0 ) { - --_elementNum; - _keyTable[pos] =_deletedObject; - _elementTable[pos] = _deletedObject; - } - return res; - } - - public function contains(value:*):Boolean { - return containsValue(value); - } - - /** - * Determines if the collection contains the specified element. - * - * @ obj: element whose presence in this collection is to be tested. - * - * @ Returns true if this collection contains the specified element. - */ - public function containsKey(key:*):Boolean { - var pos:int = getKeyPosition(key); - return (pos >= 0); - } - - public function containsValue(value:*):Boolean { - for ( var i:int =0; i < _tableCapacity; ++i ) { - if ( (_keyTable[i] == null ) || - ( _keyTable[i] == _deletedObject ) ) { - continue; - } - if ( _elementTable[i].value == value ) - return true; - } - return false; - } - - public function getElement(key:* ):* { - var pos:int = getKeyPosition(key); - return (pos < 0) ? null:_elementTable[pos]; - - } - - /** - * The number of elements in this collection. - * @Returns the number of elements in this collection. - */ - public function get size():int { - return _elementNum; - } - - public function get elements():Enumeration { - return null; - } - - public function get keys():Enumeration { - return null; - } - - /** - * Tests if the collection is empty. - * - * @ Returns true if this collection contains no elements. - */ - public function isEmpty():Boolean { - return (_elementNum==0); - } - - - /** - * Removes all of the elements from this collection (optional operation). - */ - public function clear():void { - var i:int; - for( i=0;i< _tableCapacity;++i) { - _keyTable[i] = null; - _elementTable[i] = null; - } - } - - /** - * Returns an iterator over the elements in this collection. There are - * no guarantees concerning the order in which the elements are returned - * (unless this collection is an instance of some class that provides a guarantee). - * - * @an Iterator over the elements in this collection - */ - public function getIterator():Iterator { - return null; - } - - /** - * Returns an array containing all of the elements in this collection. - * If the collection makes any guarantees as to what order its elements - * are returned by its iterator, this method must return the elements - * in the same order. - * - * @return An array. - */ - public function toArray():Array { - return _keyTable; - } - - } -} - http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/env/ExternalConstants.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/env/ExternalConstants.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/env/ExternalConstants.as deleted file mode 100644 index e38052e..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/env/ExternalConstants.as +++ /dev/null @@ -1,47 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core.env -{ - /* - * External-Internal public Constant properties... - * In the future, we might want to merge this class with InternalConstant class... - */ - - public class ExternalConstants - { - - // casing - static public const NOCAP:int = 0; - static public const INITCAP:int = 1; - - - static public const SPELL_COMPOUND:int= (1 << 0); - static public const SPELL_FORBIDDEN:int= (1 << 1); - static public const SPELL_ALLCAP:int= (1 << 2); - static public const SPELL_NOCAP:int= (1 << 3); - static public const SPELL_INITCAP:int= (1 << 4); - - public function ExternalConstants() - { - } - - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/env/InternalConstants.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/env/InternalConstants.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/env/InternalConstants.as deleted file mode 100644 index e14fc31..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/env/InternalConstants.as +++ /dev/null @@ -1,87 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core.env -{ - /* - * Internal-Internal public Constant properties... - * In the future, we might want to merge this class with ExternalConstant class... - * This one is sharing by HunSpell related algorithm... - */ - public class InternalConstants - { - // casing - static public const NOCAP:int = 1; - static public const INITCAP:int = 2; - static public const ALLCAP:int = 4; - static public const HUHCAP:int = 8; - static public const HUHINITCAP:int = 16; - - - static public const FLAG_LONG:int = 1; - static public const FLAG_NUM:int = 2; - static public const FLAG_UNI:int = 3; - static public const FLAG_CHAR:int = 0; - - // default flags - static public const DEFAULTFLAGS:int = 65510; - static public const FORBIDDENWORD:int = 65511; - static public const ONLYUPCASEFLAG:int = 65511; - - static public const MAXWORDLEN:int = 100; - - static public const FLAG_NULL:int = 0x00; - - // affentry options - static public const aeXPRODUCT:int = (1 << 0); - - static public const SPELL_KEYSTRING:String = "qwertyuiop|asdfghjkl|zxcvbnm"; - - // internal const for ngram algorithm. - public static const NGRAM_LOWERING:int = (1 << 2); - public static const NGRAM_LONGER_WORSE:int = (1 << 0); - public static const NGRAM_ANY_MISMATCH:int = (1 << 1); - - static public const MAX_ROOTS:int = 100; - static public const MAX_WORDS:int = 100; - static public const MAX_GUESS:int = 200; - static public const MAXNGRAMSUGS:int= 4; - static public const MAXPHONSUGS:int= 2; - - static public const DEFAULTENCODING:String = "utf-8"; - - - static public const MAXSUGGESTION:int = 10; - // internal const for ICONV or OCONV RULE. - static public const CONV_ICONV:Boolean= true; - static public const CONV_OCONV:Boolean= false; - - //Maximum word breaks allowed - static public const MAX_WORD_BREAKS:int= 10; - - //Constants for Loading of Dictionaries in Parts - static public const DICT_LOAD_DELAY:int= 10; //this is timeout delay between loading of two parts of dictionaries. In milliseconds - static public const WORDS_PER_SPLIT:int= 20000;// this is the default value of number of words to be loaded in each split. - public function InternalConstants() - { - } - - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/error/ContentError.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/error/ContentError.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/error/ContentError.as deleted file mode 100644 index 239b031..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/error/ContentError.as +++ /dev/null @@ -1,39 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core.error -{ - /* - *@private - * Deprecated class for now... - * History: - * In the beginning, I would like to have our own error class for critical exception. - * After sharing this with Xie, I was convinced to drop this idea by discussing with Xie. - * ToDo: Need a revisit after we have compound word support. - */ - public class ContentError extends Error - { - public function ContentError(message:String, errorID:int) - { - super(message, errorID); - } - - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/error/ErrorTable.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/error/ErrorTable.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/error/ErrorTable.as deleted file mode 100644 index d2dba8a..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/error/ErrorTable.as +++ /dev/null @@ -1,41 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core.error -{ - /* - *@private - * Deprecated class for now... - * History: - * In the beginning, I would like to have our own error class for critical exception. - * After sharing this with Xie, I was convinced to drop this idea by discussing with Xie. - * ToDo: Need a revisit after we have compound word support. - */ - public class ErrorTable - { - - static public const CONTENTPARSINGERROR_ID:int=11235; - static public const CONTENTPARSINGERROR_MSG:String="null cannot be parsed to a squiggly dictionary"; - public function ErrorTable() - { - } - - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/4e4f9830/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/logging/AbstractTarget.as ---------------------------------------------------------------------- diff --git a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/logging/AbstractTarget.as b/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/logging/AbstractTarget.as deleted file mode 100644 index 52e5dd6..0000000 --- a/Squiggly/main/AdobeSpellingEngine/src/com/adobe/linguistics/spelling/core/logging/AbstractTarget.as +++ /dev/null @@ -1,167 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Licensed to the Apache Software Foundation (ASF) under one or more -// contributor license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright ownership. -// The ASF licenses this file to You under the Apache License, Version 2.0 -// (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//////////////////////////////////////////////////////////////////////////////// - - -package com.adobe.linguistics.spelling.core.logging -{ - import flash.errors.IllegalOperationError; -public class AbstractTarget implements ILoggingTarget -{ - private var _usingLevelMaskMode:Boolean; - public function AbstractTarget(usingLevelMaskMode:Boolean = false) - { - super(); - this._usingLevelMaskMode = usingLevelMaskMode; - -// _id = UIDUtil.createUID(); - } - - private var _loggerCount:uint = 0; - - private var _filters:Array = [ "*" ]; - - public function get filters():Array - { - return _filters; - } - - public function set filters(value:Array):void - { - if (value && value.length > 0) - { - // a valid filter value will be fully qualified or have a wildcard - // in it. the wild card can only be located at the end of the - // expression. valid examples xx*, xx.*, * - var filter:String; - var index:int; - var message:String; - for (var i:uint = 0; i<value.length; i++) - { - filter = value[i]; - // check for invalid characters - if (Log.hasIllegalCharacters(filter)) - { - throw new IllegalOperationError("Please check for invalid characters."); - } - - index = filter.indexOf("*"); - if ((index >= 0) && (index != (filter.length -1))) - { - throw new IllegalOperationError("Please check for invalid filters."); - } - } // for - } - else - { - // if null was specified then default to all - value = ["*"]; - } - - if (_loggerCount > 0) - { - Log.removeTarget(this); - _filters = value; - Log.addTarget(this); - } - else - { - _filters = value; - } - } - - private var _id:String; - - public function get id():String - { - return _id; - } - - private var _level:int = LogEventLevel.ALL; - - public function get level():int - { - return _level; - } - - /** - * @private - */ - public function set level(value:int):void - { - if ( this._usingLevelMaskMode == false ) { - if ( !LogEventLevel.isValidLevel(value) ) { - throw new IllegalOperationError("Please set an valid level in the level setter."); - } - - this._mask = LogEventLevel.getUpperMask(value); - }else { - if ( !LogEventLevel.isValidMask(value) ) { - throw new IllegalOperationError("Please set an valid mask in the mask setter."); - } - this._mask = value; - } - // A change of level may impact the target level for Log. - Log.removeTarget(this); - _level = value; - Log.addTarget(this); - } - - - private var _mask:int = LogEventLevel.ALL; - public function get mask():int { - return this._mask; - } - - - public function addLogger(logger:ILogger):void - { - if (logger) - { - _loggerCount++; - logger.addEventListener(LogEvent.eventID, logHandler); - } - } - - public function removeLogger(logger:ILogger):void - { - if (logger) - { - _loggerCount--; - logger.removeEventListener(LogEvent.eventID, logHandler); - } - } - - public function initialized(document:Object, id:String):void - { - _id = id; - Log.addTarget(this); - } - - public function logEvent(event:LogEvent):void - { - } - - private function logHandler(event:LogEvent):void - { - if ( (event.level & mask) != 0) - logEvent(event); - } -} - -}
