Apache Flex Squiggly
====================

   	Apache Flex Squiggly is a ActionScript spell checking library.
	    
    For detailed information about Apache Flex Squiggly and other Apache Flex
    projects please visit:
    http://flex.apache.org/


Contributing
============

    Apache Flex is for the community and we would like to see more
    community involvement.

    The community can help the Apache Flex project by helping out in the
    following areas.
      - Testing / Fixing bugs. Providing patches.
      - Assisting other users with their requests for help.
      - Helping out with release candidates.
      - Wiki / Documentation.
      - Translations into other languages.
      - Public relations.
      - Examples of code and components.
      
    All contributions are welcome. Continued involvement in the project may
    warrant you being selected as a committer by the Apache Flex PMC.
    
    For more details information please visit:
    https://cwiki.apache.org/confluence/display/FLEX/Helping+Out
    
Mailing Lists
=============

    The two main mailing list are the user list for discussing how to code in
    Flex and any issues you run into and the dev list for discussing ongoing
    development of the SDK.
    
    You can subscribe to the mailing lists by sending an email to:
    users-subscribe@flex.apache.org
    dev-subscribe@flex.apache.org
    
    Note that both mailing lists have are mid-high volume lists.
    
    For those who prefer forums:
    http://s.apache.org/flex-users-forum
    http://s.apache.org/flex-dev-forum
    
Reporting Bugs
==============
   
    The bug base for Apache Flex can be found here:
    https://issues.apache.org/jira/browse/FLEX
    
    You need to set up a JIRA account to submit a bug report but can browse
    and search the bug base without an account.
    https://cwiki.apache.org/confluence/display/FLEX/3.1+JIRA+Account
    
    When reporting an issue the follow information is helpful:
    - OS, browser and Flash Player version or AIR version
    - Screen shots
    - Small sample application showing the issue
    - Steps on how to reproduce the issue
         
    Please search through JIRA before submitting new bugs. It may be that the
    bug you've found has already been reported.

Contributing Code
=================
    
    If you have a bug fix, new component or other code you which to give to
    Apache Flex please open a JIRA ticket and attach the code to it.
    
    A committer will take a look, review and test it and help you get the code
    into the SDK.
    
    If the code is a significant size we may ask you to sign an license
    agreement (ICLA) or software grant.
    

Thanks for using Apache Flex.  Enjoy!

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