diff options
author | janus_wel | 2008-11-20 07:16:54 +0000 |
---|---|---|
committer | janus_wel | 2008-11-20 07:16:54 +0000 |
commit | db1508ce1032aae20b608384aac7be69996f412f (patch) | |
tree | 9fd746fcf956a0f3e5b46ccb5e2030aff3fa4c5b | |
parent | cc6d2b299c11b9a9b75ca8bec6f6b24660a79a2f (diff) | |
download | vimperator-plugins-db1508ce1032aae20b608384aac7be69996f412f.tar.bz2 |
import
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@24445 d0d07461-0603-4401-acd4-de1884942a52
-rw-r--r-- | spellchecker.js | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/spellchecker.js b/spellchecker.js new file mode 100644 index 0000000..de521a8 --- /dev/null +++ b/spellchecker.js @@ -0,0 +1,124 @@ +/* + * ==VimperatorPlugin== + * @name spellchecker.js + * @description provide the object for spell check. + * @description-ja スペルチェック用のオブジェクトを提供する。 + * @author janus_wel <janus_wel@fb3.so-net.ne.jp> + * @version 0.10 + * @minversion 2.0pre 2008/10/16 + * ==/VimperatorPlugin== + * + * LICENSE + * New BSD License + * + * USAGE + * the object is available in liberator.modules.plugins.spellchecker. + * set the dictionary and call check or suggest method. + * you can use :availabledictionaries and :adict commands + * to know available dictionaries. + * all 'set' method is return the reference of spellchecker object itself, + * so you can connect methods. + * + * METHOD + * setDictionary(dict) set dictionary to check the spell + * setBeginningWith(bool) set + * getDictionaryList() get available dictionaries + * getDictionary() return dictionary name to use for spell checking + * check(word) if word exists in dictionary, return true, not exists, return false + * suggest(word) word suggestion. return generator of iterator + * + * EXAMPLE + * 1. plugins.spellchecker.setDictionary('en-US').suggest('liberater'); + * -> liberate + * liberate r + * liberated + * liberates + * liberator + * + * 2. plugins.spellchecker.check('liberater'); + * -> false + * */ + +( function () { + +// SpellChecker +function SpellChecker() { + this._initialize.apply(this, arguments); +} + +SpellChecker.prototype = { + _initialize: function (dict) { + // refer: https://developer.mozilla.org/En/Using_spell_checking_in_XUL + const MOZILLA = '@mozilla.org/spellchecker/'; + const MYSPELL = MOZILLA + 'myspell;1'; + const HUNSPELL = MOZILLA + 'hunspell;1'; + const ENGINE = MOZILLA + 'engine;1'; + const Cc = Components.classes; + const Ci = Components.interfaces; + + let spellclass = MYSPELL; + if (HUNSPELL in Cc) spellclass = HUNSPELL; + if (ENGINE in Cc) spellclass = ENGINE; + this._engine = Cc[spellclass].createInstance(Ci.mozISpellCheckingEngine); + + // if dictionary is assigned, set it. + if (dict) this.setDictionary(dict); + }, + + // list of available dictionaries + getDictionaryList: function () { + let dictionaries = {}; + this._engine.getDictionaryList(dictionaries, {}); + for (let [, v] in Iterator(dictionaries.value)) yield v; + }, + + setDictionary: function (dict) { + for (let d in this.getDictionaryList()) { + if (d === dict) { + this._engine.dictionary = dict; + return this; + } + } + throw new Error('the assigned dictionary is unavailable.'); + }, + + getDictionary: function () { + let dict; + try { dict = this._engine.dictionary; } + catch (e) {} + return dict || null; + }, + + setBeginningWith: function (isBeginningWith) { + this.isBeginningWith = isBeginningWith; + return this; + }, + + check: function (spell) this._engine.check(spell), + + suggest: function (spell) { + let suggestions = {}; + this._engine.suggest(spell, suggestions, {}); + suggestions = suggestions.value; + + if (this.isBeginningWith) { + suggestions = suggestions.filter( function (cand) { + return (cand.toLowerCase().indexOf(spell) === 0); + }); + } + + for (let [, v] in Iterator(suggestions)) yield v; + }, +}; + +plugins.spellchecker = new SpellChecker(); +commands.addUserCommand( + ['availabledictionaries', 'adict'], + 'display available dictionaries', + function () liberator.echo('available dictionaries: ' + [a for (a in plugins.spellchecker.getDictionaryList())].join(', ')), + {} +); + +})(); + +// vim: sw=4 sts=4 ts=4 et |