Adobe Labs
 
 

cap bottom

Squiggly Release Notes

Updated: June 20, 2011

Welcome to the preview release of codename "Squiggly." This release note documents known issues related to Squiggly version 0.6 (prerelease 6).

Overview

Squiggly is an Action Script spell checking library for developers who work in Adobe® Flash® Professional, Adobe Flex® Builder™, or other IDEs that support ActionScript. The Squiggly package contains six .swc files – three of which integration convenience classes called SpellUI, one for Flex 3, another for Flex 4, and a third one for TLF. The integration convenience classes bundle a context menu UI, the spelling engine, and user dictionary functionality, all in a single package to enable a one line integration of spell checking functionality into any Flex or ActionScript application. The spell checking engine of Squiggly is written in ActionScript 3.0 and does not have a specific dependency on Flash CS4 Professional, Flex or any other framework. The UI class for Squiggly requires the Flex 3 SDK or Flex 4 SDK, but it is possible for developers to write their own UI controls without a dependency on the Flex SDK.

We encourage you to be as active as possible in reporting any issues that you may find on the Discussion Forum. Please carefully read these release notes, prior to installation. This document contains late-breaking product information, updates, and troubleshooting tips related to this library and its usage with Flash CS4 Professional, Flex®, Flash Player and AIR.

System Requirements

The Squiggly library has been tested with Adobe Flash Player 10.3 and AIR 2.7. General system requirements for Flash Player are available on Adobe.com. General system requirements for AIR are also available on Adobe.com.

Squiggly does not contain any platform specific code. As such, it should work similarly across all platforms that the Flash Player 10 runs on.

Installation and Setup

Prerelease software may be unstable. While we know of no major issues running these builds on machines where you are currently using previous versions of the required applications, we advise you to save your work frequently and avoid leaving open documents unsaved in any application.

Squiggly ZIP Folder Contents

Once you unzip this file you will see a Squiggly folder which contains the following files and sub-folders:

  • Examples: This folder contains developer focused SDK level implementation examples
    • Flex: Contains Flex based example implementations
    • AIR: Contains AIR based example implementations
    • ActionScript: Contains TLF example implementations
  • libs: The Squiggly .swc files for use with AIR or Flex.
    • AdobeSpellingUI.swc
      UI plug-in supporting mx components (for use with Flex SDK 3). This is an integration convenience class that bundles the context menu UI, the spelling engine, and user dictionary functionality, all in a single package to enable a one line integration of Squiggly functionality into any Flex application.
    • AdobeSpellingUIEx.swc
      Extended UI plug-in supporting both mx and Spark components (for use with Flex SDK 4). As above, this is an integration convenience class, but specifically for Flex SDK 4.
    • AdobeSpellingUITLF.swc
      Extended UI plug-in supporting TLF Textflow. As above, this is an integration convenience class, but specifically for ActionScript applications using TLF.
    • AdobeSpellingEngine.swc
      The spell checking engine that checks words against a dictionary. This is a pure ActionScript class that has no UI, and as such, no dependency on Flex.
    • AdobeSpellingFramework.swc
      A class that facilitates the drawing of squiggly lines below words for various text components.
    • AdobeLinguisticUtils.swc
      Contains the TextTokenizer class that locates the boundaries of words in a block of text.
  • src: Contains dictionaries and the dictionary configuration file. While the dictionaries will not be compiled into the application, we have placed them here for your convenience so that Flex Builder will automatically copy them to the deployment directory.
    • AdobeSpellingConfig.xml: the configuration file where you specify the location of the available dictionaries
    • dictionaries/en_US: Hunspell word list and rule files for US English (Copyright 2000-2004 by Kevin Atkinson, http://sourceforge.net/projects/wordlist/), along with licensing information

Expand the ZIP archive into your Flash development environment and review the Squiggly ASDoc, along with the sample code.

Language Support

Starting with version 0.3, Squiggly has moved to the Hunspell algorithm. By moving to Hunspell, Squiggly is now capable of handling more than just English. As one of the most widely used spell checking algorithms in the industry, Hunspell benefits from having a broad array of language dictionaries that are regularly updated by the linguistic community.

Over time, Squiggly will be able to take advantage of all of these dictionaries to offer a wide coverage of languages for your application. However, this release of Squiggly is still only a partial implementation of the Hunspell algorithm, and as such, cannot support all Hunspell languages at this time. There are three pieces to the puzzle that determines the list of languages that can be supported by Squiggly – the implementation of the "Hunspell language rules" in the spelling engine, support for language specific tokenizers, and the availability of relevant language dictionaries. The final point is already handled by the Hunspell community, and will be explained in further detail below. The first two points – support for language rules in the engine and the support for language specific tokenizers in the Squiggly UI – are where the Squiggly implementation is not yet complete.

This release of Squiggly has only been validated against English (US), French (new in 0.6), Spanish (Spain), Italian, and Portuguese (Brazilian and Portugal). Implementation of additional language rules to enable German support will be addressed in a future release of Squiggly. We highly discourage developers from experimenting with additional languages until the language rules have been implemented, as you will surely be disappointed by the poor quality of the suggestions that Squiggly will offer.

You can learn more about Hunspell at: http://hunspell.sourceforge.net/ and http://en.wikipedia.org/wiki/Hunspell

How to install spelling dictionaries for Squiggly

Each Hunspell language dictionary is governed by its own open source license. As such, we advise you to read the licensing terms carefully before deciding to bundle any dictionary with your application. Adobe is bundling a sample American English dictionary to allow developers to experiment with Squiggly’s spell checking capabilities. However, you will need to download your own dictionaries to get the most up-to-date content and for the other languages supported by this release.

The most convenient locations for downloading Hunspell dictionaries are:

You will notice that both OpenOffice and Mozilla package the dictionaries in their own file formats – .oxt and .xpi. While these extensions may appear to be proprietary, they are just zip files. Download the dictionary of your choice, rename them to *.zip, and extract the content to your local machine.

The two files Squiggly depends upon are the *.dic file (word list) and the *.aff file (language rules). While some dictionary bundles may contain other files, such as hyphenation pattern files or thesaurus files, those are not material to Squiggly. Copy the *.dic and *.aff files into your development project, and edit the AdobeSpellingConfig.xml file (found in [YourProject]/src/) to specify their location. A sample AdobeSpellingConfig.xml will look as follows:

 <?xml version="1.0" encoding='UTF-8'?>
 <SpellingConfig>
  <LanguageResource 
    language="English" 
    languageCode="en_US" 
    ruleFile="src/dictionaries/en_US/en_US.aff" 
    dictionaryFile="src/dictionaries/en_US/en_US.dic"/>
 </SpellingConfig>

Note: The languageCode can be an arbitrary value, as long as you are consistent when passing them to the Squiggly classes. However, we highly encourage you to follow the two part Unicode language identifier format. For more information, please consult the latest Unicode Technical Standard that can be found at: http://unicode.org/reports/tr35/.

How to Enhance or create new dictionaries

Please refer to the OpenOffice Lingucomponent page for instructions on how to build new dictionary files. Detailed instructions can be found at:

http://lingucomponent.openoffice.org/dictionary.html

General Announcements

Please note that the main focus of this prerelease program at this time is on getting early feedback on features/APIs and receiving bug reports.

The APIs should be considered Alpha quality and still under definition. There are likely to be changes to these APIs in the future.

Features

Introduced in prerelease 6 (v0.6)
Features

This release has the following three new features:

  1. Support for the fr_FR locale, via the addition of the following Hunspell dictionary rules:
    • Complex affix stripping, and the implementation of the AF, ICONV, OCONV, and BREAK rules.
  2. Added two new properties which if used can enable loading of dictionaries in parts. This should be used when UI freeze is observed after calling squiggly spell checking. (Enhancement request 2802354)  Properties added are:
    • enableDictionarySplit
    • wordsPerDictionarySplit
  3. Support for the Spark:RichEditableText control. (Enhancement request 2609230)

Introduced in prerelease 5 (v0.5)
Features

This release introduces a new library AdobeSpellingUITLF.swc, which adds support for TLF TextFlow through the new public class SpellUIForTLF. Please see the ASDocs for further information on how to enable spell checking in ActionScript applications using TLF. With the addition of TLF support, spell checking can now be added to the following 6 component types:

  • MX components: TextArea, TextInput and RichTextEditor
  • Spark components: TextArea and TextInput
  • TLF TextFlow

Several new classes have been exposed that were previously hidden under SpellUI, such as the Highlighter, the Tokenizer, and configuration related classes. These classes will offer developers greater customizing of how Squiggly behaves in their Flex and ActionScript applications. Please see the ASDocs for further information on the new classes.

Finally, text field event handling has been added to SpellUI for FOCUS_OUT, FOCUS_IN, SCROLL, RENDER and CHANGE events.

Bug Fixes

  • 2762239: Squiggly doesn't work well (throws exception) with TLF SelectionManager
  • 2759466: TLF: Formatting is lost when suggestion of a misspelled word is selected from the suggestion list

Introduced in prerelease 4 (v0.4)
Features

A new spellingConfigUrl property has been added to allow users to specify the location of the AdobeSpellingConfig.xml file (Enhancement 2707630). To use this, set the following:

 SpellUI.spellingConfigUrl ="../data/AdobeSpellingConfig.xml";

Note that the path here is relative to your application swf file. You can also use an HTTP URL, though https is not supported as of v0.4. Please make sure that valid locations are specified, as no validation is done by Squiggly.

Bug Fixes

  • 2544029: UI bug with embedded fonts
  • 2607226: [Forum] Incorrect underlining of misspelled words when text aligned to center
  • 2630524: [forum] FocusIn invoked but shouldn't
  • 2602864: Forum: 'SpellChecker/getSuggestions() Error' in Squiggly
  • 2591827: SpellChecker.getSuggestions() throws an exception when unrecognized characters are given
  • 2578732: Build optimization

Introduced in prerelease 3 (v0.3)

Features

  • Support for new languages: Spanish, Italian, and Portuguese
  • Support for Hunspell format dictionaries (Note: Please read limitations listed in the "Language Support" section below)
  • Ability to translate or customize the context menu strings

Bug Fixes

  • 2521048: Error #1009 when there is more than one spell checking component enabled
  • 2518877: checkWord method from SpellChecker does not handle the accent. It cuts the word
  • 2544029: The squiggly line is shifted left/right/top/bottom by 1 or more characters when padding* stylesheet is enabling on TextArea/TextInput/RichTextEdit
  • 2521040: Error #2134 when the dictionary is in different folder as the swf file

Introduced in prerelease 2 (v0.2)

Features

  • Support for Flex 4 Spark components that are based on the Adobe Text Layout Framework (TLF).
  • Support for a local in-session user dictionary. To add a word to a user dictionary, simply right click a misspelled word and select "Add "[word]" to Dictionary." The current release stores these words locally in a Flash SharedObject, allowing for the list of words to persist between sessions.

Bug Fixes

  • 2440764: SpellUI calls need to be called before a widget is drawn/initialized for the context menu to work
  • 2443341: When calling SpellUI.enableSpelling for one component, 9MB of memory is used and not released
  • 2445413: Examples don't compile with current SWC
  • 2459570: IOErrorEvent cannot be caught. Pops up all the way to the user
  • 2467505: Developer should be able to disable the spell checking feature programmatically

Introduced in prerelease 1 (v0.1)

Core Spell Checking Engine (pure Action Script)

  • Checks a given word against a dictionary to see if it is correctly spelled or not.
  • For words that cannot be found in the dictionary, returns a list of spelling suggestions.
  • An AIR utility to create your very own spelling dictionary from a text based word list.

UI Class (requires Flex 3 SDK or Flex 4 SDK)

  • Misspelling detection in any Flex 3 or Flex 4 text control.
  • The indication of a misspelled word through……a red squiggly line!
  • Right mouse context menu display of spelling suggestions.
  • Check as you type: the spelling of a word can be checked as soon as the user hits the space bar.

Known Issues

General

  • The languages supported in v0.6 are: English, French, Spanish, Italian, and Portuguese. Please see section titled "Language Support" for more information on the limitations of Squiggly with regard to supporting other languages.
  • Only one dictionary can be loaded per control during runtime. Due to this limitation, it is not possible to perform mixed language spell checking in a single text control. However, it is possible to load a different dictionary for each control within a single application.
  • Each spelling dictionary will be downloaded to the client and loaded into memory at the time the first text control receives focus. The application may become momentarily unresponsive during this time. If the same dictionary is shared between controls, the loading will only happen with the first control that uses the dictionary. Please keep in mind that the load time is proportionate to the size of the dictionary. The larger the dictionary, the slower the load time will be. If you observe this issue, use the enableDictionarySplit property to load the dictionary incrementally.  This will resolve the UI freeze.
  • Spark controls seem to perform must faster on larger amounts of text than MX controls. If you find the application freezing on large amounts of text in MX controls, try implementing the code using Spark controls. (Bug 2695689)
  • Compared to the size of a dictionary on disk, its memory footprint will be significantly larger due to its conversion into UTF-16 and the in-memory creation of its index. If you are concerned about the runtime memory footprint of the dictionaries, enable spelling only when text editing is allowed. By disabling spelling when not necessary, you will be able to free up the memory that was occupied by the spelling dictionary.

Coding Issues

  • When compiling your own dictionaries, please make sure you use valid end of line characters in the file. Squiggly supports LF (Unix), CR (Mac), and CR&LF (Windows). An invalid line ending character can result in a Null Pointer Exception when calling SpellUI.enableSpelling. (Bug 2617139)
  • UITextfields are currently not supported by Squiggly. (Bug 2867253)
  • Disappearance of user created right-click context menus in TLF: In order to display Squiggly's right-click context menu, SpellUIForTLF extends TLF ContainerController class and overrides createContextMenu() method of ContainerController. If an application has a custom context menu that inherits from ContainerController class, the Squiggly context menu will override that. In other words, once SpellUIForTLF.enableSpelling() is called, a client's own custom right-click menu items will become inaccessible. Also note that the custom right-click menu items will not return even after disabling spelling. (Bug 2788961)

Detection

  • There is no special handling for URLs nor e-mail addresses. These will be flagged as misspelled words without suggestions. Please ignore them. (2756833, 2756836)
  • Many two or three letter combinations are registered in the bundled sample dictionary as valid acronyms or abbreviations. As such, an accidental insertion of a space within a word may not be detected by the system as being misspelled. For example "sis ter" will not be detected as being a misspelling of "sister."
  • The current implementation of Squiggly treats any punctuation, including hyphens, as word separators. As such, hyphenated words are not treated as single entities. In addition to punctuation, superscript and subscript characters also are not recognized as parts of a valid word. (2550471) Specifically, this release of Squiggly only supports the following scripts: basic Latin, Latin-1 supplement, Latin Extended-A, and Latin Extended B.
  • The current implementation of Squiggly does not recognize soft hyphens, and will mark any word with soft hyphens as being misspelled. (2813672)
  • Vertical text and right-to-left (RTL) text flow is not supported in the current release of Squiggly. (2872937, 2872937)

Suggestions

  • Due to the algorithm used, different suggestions may be made for the same word depending on whether the original word is capitalized or not. If the suggestions contain too many proper nouns, try converting the word to lower case and re-check.
  • Words added to the User Dictionary will not show up in spelling suggestions.
  • The current Squiggly implementation does not allow you to Undo (CTRL+Z) a correction. (2506853)

User Dictionary

  • The current release of the Spelling UI class stores the user dictionary in a local Flash SharedObject, which cannot be programmatically accessed. In a future release of Squiggly, developers will be given more flexibility around where and how the words get stored.
  • The current release of the user dictionary functionality does not offer any way for a user to remove a word once it is stored. This capability will be provided in a future release.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

© 2010 Adobe Systems Incorporated. All rights reserved.

Adobe, the Adobe Logo, ActionScript, Flash and Flex are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries. Macintosh and TrueType are trademarks of Apple Computer Inc., registered in the United States and other countries. Microsoft Windows, Windows Vista, Windows Internet Explorer and OpenType are a trademarks or registered trademarks of Microsoft Corporation in the United States and/or other countries. Linux is the registered trademark of Linux Torvalds in the U.S. and other countries. Updated Information/Additional Third Party Code Information available at http://www.adobe.com/go/thirdparty/.

Top Technologies


Technology Groups