Что такое проект "Squiggly"?
Это набор .swc-библиотек для работы с орфографией во Flash, Flex и AIR проектах. Название переводится как "волнистые" с намеком на то, что неправильные слова подчеркиваются именно этой линией.
Что он дает?
Возможности анализа текста в ActionScript 3.0.
Какие возможности?
Проверка орфографии и правил языка, варианты исправления неправильных слов.
На чем основан проект?
За основу взят проект "Hunspell".
Что это означает?
Это означает, что нам можно использовать уже готовые словари из других программ, основанных на этой же основе. Таких как: OpenOffice, Mozilla FireFox, Opera и многих других. Например, словари от Mozill'ы можно найти здесь. Но прежде чем использовать словари сторонних программ, пожалуйста ознакомьтесь с лицензионными соглашениями.
Как это работает?
Рассмотрим по-подробнее чистый ActionScript 3.0 проект. Загружаем архив с библиотеками. Нам понадобиться только одна из них: AdobeSpellingEngine.swc (Остальные предназначены для Flex-проектов). Подключаем её у нашему проекту.
Первым делом нужно загрузить словари с орфографией и правилами.
// // Создаем экземпляр словаря dictionary = new HunSpellDictionary(); // // Добавляем обработчик события загрузки библиотек dictionary.addEventListener(Event.COMPLETE, onDictanionaryComplete, false, 0, true); // // Грузим библиотеки dictionary.load("dictionaries/en_US/en_US.aff", "dictionaries/en_US/en_US.dic");
После того, как словари загружены, в обработчике нужно создать объект который будет проверять орфографию слов.
/** * Метод обрабатывает событие успешной загрузки библиотек для словаря * Создает экземпляр объекта для проверки слов */ private function onDictanionaryComplete (e:Event):void { // // Создаем экземпляр объекта для проверки слов, в параметре указываем ссылку на словарь spell_checker = new SpellChecker(dictionary); }
Чтобы проверить какое-то слов нужно вызвать у проверяющего объекта метод checkWord();
spell_checker.checkWord("heloo");
Чтобы получить список возможных исправлений для слова имеется метод getSuggestions();
spell_checker.getSuggestions("heloo");
А как проверить содержимое текстового поля и подчеркнуть неправильные слова?
Алгоритм примерно такой:
- Разбиваем строку содержимого на список слов (В элементах списка нужно иметь значение слова, индекс первого символа и последнего).
- В цикле пробежаться по списку.
- Определить ошибочное слово.
- Зная индексы крайних символов с помощью метода TextField.getCharBoundaries() вычислить координаты слова
- Наложить на текстовое поле новый слой, в котором нарисовать волниcтые линии.
А пример?
Дополнительная информация
Пример к сожалению работать не будет. Дело в том, что файлы с правилами для словаря грузятся с сервера. Сейчас у меня нет возможности выложить эти файлы на сервер, где crossdomain.xml разрешал бы их забрать. Если у вас есть возможность выложить эти файлы на своем сервере, я с радостью поправлю ссылки в примере.
ОтветитьУдалитьСуперский пост. Спасибо что наглядно показал способ работы с либой. У нас в проекте, правда, на сервере есть свой спеллчеккер, но у этого преимущество - нет задержки при проверке.
ОтветитьУдалитьЗато есть задержка при разборе загруженных правил для словарей :)
ОтветитьУдалитьСпасибо за новость!
ОтветитьУдалитьУже работал с этой либой. Ну почему даже в такой компании как Adobe люди забывают про "Ленивые вычисления"? (это риторический вопрос)
Единственный пост в гугле по запросу орфография as3 :)
ОтветитьУдалитьхотя может я плохо искал, спасибо большое