Блог от AS3Coder'a о JavaScript, HTML, CSS... и немного о Flash.

среда, 6 октября 2010 г.

Проверка орфографии в ActionScript 3.0

24 сентября 2010 года на сайте лаборатории Adobe обновился проект "Squiggly". Обновили проект до 4-ой пререлизной версии. О нем я услышал впервые, и очень им заинтересовался. Теперь хочу подделиться с вами.

Что такое проект "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");

А как проверить содержимое текстового поля и подчеркнуть неправильные слова?

Алгоритм примерно такой:
  1. Разбиваем строку содержимого на список слов (В элементах списка нужно иметь значение слова, индекс первого символа и последнего).
  2. В цикле пробежаться по списку.
  3. Определить ошибочное слово.
  4. Зная индексы крайних символов с помощью метода TextField.getCharBoundaries() вычислить координаты слова
  5. Наложить на текстовое поле новый слой, в котором нарисовать волниcтые линии.

А пример?



Дополнительная информация

5 комментариев:

  1. Пример к сожалению работать не будет. Дело в том, что файлы с правилами для словаря грузятся с сервера. Сейчас у меня нет возможности выложить эти файлы на сервер, где crossdomain.xml разрешал бы их забрать. Если у вас есть возможность выложить эти файлы на своем сервере, я с радостью поправлю ссылки в примере.

    ОтветитьУдалить
  2. Суперский пост. Спасибо что наглядно показал способ работы с либой. У нас в проекте, правда, на сервере есть свой спеллчеккер, но у этого преимущество - нет задержки при проверке.

    ОтветитьУдалить
  3. Зато есть задержка при разборе загруженных правил для словарей :)

    ОтветитьУдалить
  4. Спасибо за новость!

    Уже работал с этой либой. Ну почему даже в такой компании как Adobe люди забывают про "Ленивые вычисления"? (это риторический вопрос)

    ОтветитьУдалить
  5. Единственный пост в гугле по запросу орфография as3 :)
    хотя может я плохо искал, спасибо большое

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например <b>, <i>, <a>

Поиск по блогу

Обо мне



Farid Shamsutdinov (AS3Coder)
Russia, Tatarstan, Kazan
as3coder@gmail.com

Подробнее...

Постоянные читатели

© 2014 Farid Shamsutdinov. При копировании материалов, ссылка на источник обязательна. Технологии Blogger.