
  Apache Flex Squiggly is a ActionScript spell checking library.
	 
  This application is based on work donated by Adobe.
  
==========================================================================================
Initial Setup Required
==========================================================================================            
  
    The environment variable FLEX_HOME needs to be set to the absolute path of the Apache
    Flex SDK. If you prefer you can set this in env.properties.
  
==========================================================================================
How to build Squiggly using ant (no IDE is required)
==========================================================================================

1.  On Linux or Mac un tar/gzip the source distribution:
	    tar -zxvf apache-flex-squiggly-1.1.tar.gz
	Or if on windows unzip 
		apache-flex-squiggly-1.1.zip

2.  In the base directory, run:
        ant compile

3. The compiled swcs can be found in the main/libs directory 
        
4. To optionally create a release source package, run:
 		ant package

5. To remove all of the compiled swcs:
 		ant clean
 		
==========================================================================================
Some other useful ant targets
========================================================================================== 		
	
There are several other useful ant targets.

	 compile-swc         compile squiggly swcs
	 package             package up all source files
	 generate-docs       generate asdocs
	 package-binary-tar  tar up all source files and swcs
	 package-binary-zip  zip up all source files and swcs
	 package-source-tar  tar up all source files
	 package-source-zip  zip up all source files
 		
==========================================================================================
How to check the code out of Git
==========================================================================================

1.  Check out the the code from the Apache Flex utilities project
	 git clone https://git-wip-us.apache.org/repos/asf/flex-utilities.git flex-utilities
	 cd flex-utilities
	 git checkout develop 

2.  Change directory to:
	cd Squiggly
	
==========================================================================================
How to use the Squiggly SDK
==========================================================================================

Please read the ASDocs (found in docs directory) first to understand the
classes in Squiggly.

If you are using the SpellChecker class directly, you need.
- SpellingEngine.swc in [YourProject]/libs folder, you can find it from ./libs
- Dictionary files in [YourProject]/src folder

You can obtain en_US, en_CA and en_GB dictionaries under a BSD/MIT-like license
from SCOWL (and friends):
   http://wordlist.aspell.net/dicts
   https://github.com/kevina/wordlist
   
For your convenience the en_US and en_GB dictionaries have been included in the
source and binary releases.  

You can obtain other dictionary files from:
    http://wordlist.aspell.net/other-dicts
    http://extensions.openoffice.org
    http://hunspell.sourceforge.net

But note that many of these dictionaries are under LPGL licenses.

If you are using the simple UI integration feature (SpellUI class), in addition
to what mentioned above, you also need:
- SpellingConfig.xml in [YourProject]/src
- SpellingUI.swc in [YourProject]/src
- SpellingUIEx.swc (if you need spark support in Flex 4) in [YourProject]/libs 

You can download dictionaries and use those by editing SpellingConfig.xml.

The default name of the config file has changed from AdobeSpellingConfig.xml to
SpellingConfig.xml.

Here's the content of SpellingConfig.xml, each entry maps the languageCode with
the relative path for resource files. 

<SpellingConfig>
  <LanguageResource language="English" languageCode="en_US"
    ruleFile="dict/en_US/en_US.aff" dictionaryFile="dict/en_US/en_US.dic"/>
</SpellingConfig>

So if you are adding Spanish, you just need to get the dictionary files es_ES.aff
and es_ES.dic and add one line to your config file.
  <LanguageResource language="Spanish" languageCode="es_ES"
     ruleFile="dict/es_ES/es_ES.aff" dictionaryFile="dict/es_ES/es_ES.dic"/>

Note that you can put the dictionaries in any location as long as you update
the config file, but the config file itself MUST be in [YourProject]/src folder.


Thanks for using Apache Flex.  Enjoy!

       The Apache Flex Project
       <http://flex.apache.org>



	
