@@ -319,11 +319,11 @@ } } return l; } - suggest (sWord, nSuggLimit=10) { + suggest (sWord, nSuggLimit=10, bSplitTrailingNumbers=false) { // returns a array of suggestions for //console.time("Suggestions for " + sWord); sWord = char_player.spellingNormalization(sWord); let sPfx = ""; let sSfx = ""; @@ -331,10 +331,13 @@ let nMaxSwitch = Math.max(Math.floor(sWord.length / 3), 1); let nMaxDel = Math.floor(sWord.length / 5); let nMaxHardRepl = Math.max(Math.floor((sWord.length - 5) / 4), 1); let nMaxJump = Math.max(Math.floor(sWord.length / 4), 1); let oSuggResult = new SuggResult(sWord); + if (bSplitTrailingNumbers) { + this._splitTrailingNumbers(oSuggResult, sWord); + } this._splitSuggest(oSuggResult, sWord); this._suggest(oSuggResult, sWord, nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump); let aSugg = oSuggResult.getSuggestions(nSuggLimit); if (sSfx || sPfx) { // we add what we removed @@ -342,16 +345,18 @@ } //console.timeEnd("Suggestions for " + sWord); return aSugg; } - _splitSuggest (oSuggResult, sWord) { - // split trailing numbers + _splitTrailingNumbers (oSuggResult, sWord) { let m = /^([a-zA-Zà-öÀ-Ö_ø-ÿØ-ßĀ-ʯfi-st][a-zA-Zà-öÀ-Ö_ø-ÿØ-ßĀ-ʯfi-st-]+)([0-9]+)$/.exec(sWord); if (m) { oSuggResult.addSugg(m[1] + " " + char_player.numbersToExponent(m[2])); } + } + + _splitSuggest (oSuggResult, sWord) { // split at apostrophes for (let cSplitter of "'’") { if (sWord.includes(cSplitter)) { let [sWord1, sWord2] = sWord.split(cSplitter, 2); if (this.isValid(sWord1) && this.isValid(sWord2)) {