<?xml version="1.0"?>

<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->


<flex-config>

  <js-output-type>FLEXJS</js-output-type>
  <!-- Specifies the version of the compiled SWF -->
  <swf-version>14</swf-version>

  <output>${output}</output>

  <compiler>

    <!-- Turn on generation of accessible SWFs. -->
    <accessible>true</accessible>

    <!-- Specifies the locales for internationalization. -->
    <locale>
      <locale-element>en_US</locale-element>
    </locale>

    <!-- List of path elements that form the roots of ActionScript class hierarchies. -->
    <source-path>
#foreach($sourcePath in $sourcePaths)           <path-element>$sourcePath</path-element>
#end
    </source-path>

    <!-- Allow the source-path to have path-elements which contain other path-elements -->
    <allow-source-path-overlap>false</allow-source-path-overlap>

    <!-- Run the AS3 compiler in a mode that detects legal but potentially incorrect -->
    <!-- code.                                                                       -->
    <show-actionscript-warnings>true</show-actionscript-warnings>

    <!-- Turn on generation of debuggable SWFs. False by default for mxmlc, -->
    <debug>$debug</debug>

    <!-- List of SWC files or directories to compile against but to omit from -->
    <!-- linking.                                                             -->
    <external-library-path>
#foreach($artifact in $externalLibraries)            <path-element>$artifact.file</path-element>
#end
    </external-library-path>

    <!-- Turn on writing of generated/*.as files to disk. These files are generated by -->
    <!-- the compiler during mxml translation and are helpful with understanding and   -->
    <!-- debugging Flex applications.                                                  -->
    <keep-generated-actionscript>false</keep-generated-actionscript>

    <!-- not set -->
    <!--
    <include-libraries>
       <library>string</library>
    </include-libraries>
    -->

    <!-- List of SWC files or directories that contain SWC files. -->
    <library-path>
#foreach($artifact in $libraries)            <path-element>$artifact.file</path-element>
#end
    </library-path>

    <mxml>
      <children-as-data>true</children-as-data>
      <imports>
        <implicit-import>org.apache.flex.events.*</implicit-import>
        <implicit-import>org.apache.flex.geom.*</implicit-import>
        <implicit-import>org.apache.flex.core.ClassFactory</implicit-import>
        <implicit-import>org.apache.flex.core.IFactory</implicit-import>
      </imports>
    </mxml>
    <binding-value-change-event>org.apache.flex.events.ValueChangeEvent</binding-value-change-event>
    <binding-value-change-event-kind>org.apache.flex.events.ValueChangeEvent</binding-value-change-event-kind>
    <binding-value-change-event-type>valueChange</binding-value-change-event-type>
    <binding-event-handler-event>org.apache.flex.events.Event</binding-event-handler-event>
    <binding-event-handler-class>org.apache.flex.events.EventDispatcher</binding-event-handler-class>
    <states-class>org.apache.flex.states.State</states-class>
    <states-instance-override-class>org.apache.flex.states.AddItems</states-instance-override-class>
    <states-property-override-class>org.apache.flex.states.SetProperty</states-property-override-class>
    <states-event-override-class>org.apache.flex.states.SetEventHandler</states-event-override-class>
    <component-factory-class>org.apache.flex.core.ClassFactory</component-factory-class>
    <component-factory-interface>org.apache.flex.core.IFactory</component-factory-interface>

    <namespaces>
#foreach($namespace in $namespaces)      <namespace>
        <uri>$namespace.uri</uri>
        <manifest>$namespace.manifest</manifest>
      </namespace>
#end
    </namespaces>

    <!-- Enable post-link SWF optimization. -->
    <optimize>true</optimize>

    <!-- Enable trace statement omission. -->
    <omit-trace-statements>true</omit-trace-statements>

    <!-- Keep the following AS3 metadata in the bytecodes.                                             -->
    <!-- Warning: For the data binding feature in the Flex framework to work properly,                 -->
    <!--          the following metadata must be kept:                                                 -->
    <!--          1. Bindable                                                                          -->
    <!--          2. Managed                                                                           -->
    <!--          3. ChangeEvent                                                                       -->
    <!--          4. NonCommittingChangeEvent                                                          -->
    <!--          5. Transient                                                                         -->
    <!--
    <keep-as3-metadata>
        <name>Bindable</name>
        <name>Managed</name>
        <name>ChangeEvent</name>
        <name>NonCommittingChangeEvent</name>
        <name>Transient</name>
    </keep-as3-metadata>
    -->

    <!-- Turn on reporting of data binding warnings. For example: Warning: Data binding -->
    <!-- will not be able to detect assignments to "foo".                               -->
    <show-binding-warnings>true</show-binding-warnings>

    <!-- toggle whether warnings generated from unused type selectors are displayed -->
    <show-unused-type-selector-warnings>true</show-unused-type-selector-warnings>

    <!-- Run the AS3 compiler in strict error checking mode. -->
    <strict>true</strict>

    <!-- Use the ActionScript 3 class based object model for greater performance and better error reporting. -->
    <!-- In the class based object model most built-in functions are implemented as fixed methods of classes -->
    <!-- (-strict is recommended, but not required, for earlier errors) -->
    <as3>true</as3>

    <!-- Use the ECMAScript edition 3 prototype based object model to allow dynamic overriding of prototype -->
    <!-- properties. In the prototype based object model built-in functions are implemented as dynamic      -->
    <!-- properties of prototype objects (-strict is allowed, but may result in compiler errors for         -->
    <!-- references to dynamic properties) -->
    <es>false</es>

    <!-- List of CSS or SWC files to apply as a theme. -->
    <theme>
    </theme>

    <!-- Turns on the display of stack traces for uncaught runtime errors. -->
    <verbose-stacktraces>false</verbose-stacktraces>

    <!-- Defines the AS3 file encoding. -->
    <!-- not set -->
    <!--
    <actionscript-file-encoding></actionscript-file-encoding>
    -->

    <fonts>

      <!-- Enables advanced anti-aliasing for embedded fonts, which provides greater clarity for small -->
      <!-- fonts. This setting can be overriden in CSS for specific fonts. -->
      <!-- NOTE: flash-type has been deprecated. Please use advanced-anti-aliasing <flash-type>true</flash-type> -->
      <advanced-anti-aliasing>true</advanced-anti-aliasing>

      <!-- The number of embedded font faces that are cached. -->
      <max-cached-fonts>20</max-cached-fonts>

      <!-- The number of character glyph outlines to cache for each font face. -->
      <max-glyphs-per-face>1000</max-glyphs-per-face>

      <!-- Defines ranges that can be used across multiple font-face declarations. -->
      <!-- See flash-unicode-table.xml for more examples. -->
      <!-- not set -->
      <!--
      <languages>
          <language-range>
              <lang>englishRange</lang>
              <range>U+0020-007E</range>
          </language-range>
      </languages>
      -->

      <!-- Compiler font manager classes, in policy resolution order -->
      <!-- NOTE: For Apache Flex -->
      <!-- AFEFontManager and CFFFontManager both use proprietary technology.  -->
      <!-- You must install the optional font jars if you wish to use embedded fonts  -->
      <!-- directly or you can use fontswf to precompile the font as a swf.  -->
      <managers>
        <manager-class>flash.fonts.JREFontManager</manager-class>
        <manager-class>flash.fonts.BatikFontManager</manager-class>
        <manager-class>flash.fonts.AFEFontManager</manager-class>
        <manager-class>flash.fonts.CFFFontManager</manager-class>
      </managers>

      <!-- File containing cached system font licensing information produced via
           java -cp mxmlc.jar flex2.tools.FontSnapshot (fontpath)
           Will default to winFonts.ser on Windows XP and
           macFonts.ser on Mac OS X, so is commented out by default.

      <local-fonts-snapshot>localFonts.ser</local-fonts-snapshot>
      -->

    </fonts>

    <!-- Array.toString() format has changed. -->
    <warn-array-tostring-changes>false</warn-array-tostring-changes>

    <!-- Assignment within conditional. -->
    <warn-assignment-within-conditional>true</warn-assignment-within-conditional>

    <!-- Possibly invalid Array cast operation. -->
    <warn-bad-array-cast>true</warn-bad-array-cast>

    <!-- Non-Boolean value used where a Boolean value was expected. -->
    <warn-bad-bool-assignment>true</warn-bad-bool-assignment>

    <!-- Invalid Date cast operation. -->
    <warn-bad-date-cast>true</warn-bad-date-cast>

    <!-- Unknown method. -->
    <warn-bad-es3-type-method>true</warn-bad-es3-type-method>

    <!-- Unknown property. -->
    <warn-bad-es3-type-prop>true</warn-bad-es3-type-prop>

    <!-- Illogical comparison with NaN. Any comparison operation involving NaN will evaluate to false because NaN != NaN. -->
    <warn-bad-nan-comparison>true</warn-bad-nan-comparison>

    <!-- Impossible assignment to null. -->
    <warn-bad-null-assignment>true</warn-bad-null-assignment>

    <!-- Illogical comparison with null. -->
    <warn-bad-null-comparison>true</warn-bad-null-comparison>

    <!-- Illogical comparison with undefined. Only untyped variables (or variables of type *) can be undefined. -->
    <warn-bad-undefined-comparison>true</warn-bad-undefined-comparison>

    <!-- Boolean() with no arguments returns false in ActionScript 3.0. Boolean() returned undefined in ActionScript 2.0. -->
    <warn-boolean-constructor-with-no-args>false</warn-boolean-constructor-with-no-args>

    <!-- __resolve is no longer supported. -->
    <warn-changes-in-resolve>false</warn-changes-in-resolve>

    <!-- Class is sealed. It cannot have members added to it dynamically. -->
    <warn-class-is-sealed>true</warn-class-is-sealed>

    <!-- Constant not initialized. -->
    <warn-const-not-initialized>true</warn-const-not-initialized>

    <!-- Function used in new expression returns a value. Result will be what the -->
    <!-- function returns, rather than a new instance of that function.           -->
    <warn-constructor-returns-value>false</warn-constructor-returns-value>

    <!-- EventHandler was not added as a listener. -->
    <warn-deprecated-event-handler-error>false</warn-deprecated-event-handler-error>

    <!-- Unsupported ActionScript 2.0 function. -->
    <warn-deprecated-function-error>true</warn-deprecated-function-error>

    <!-- Unsupported ActionScript 2.0 property. -->
    <warn-deprecated-property-error>true</warn-deprecated-property-error>

    <!-- More than one argument by the same name. -->
    <warn-duplicate-argument-names>true</warn-duplicate-argument-names>

    <!-- Duplicate variable definition -->
    <warn-duplicate-variable-def>true</warn-duplicate-variable-def>

    <!-- ActionScript 3.0 iterates over an object's properties within a "for x in target" statement in random order. -->
    <warn-for-var-in-changes>false</warn-for-var-in-changes>

    <!-- Importing a package by the same name as the current class will hide that class identifier in this scope. -->
    <warn-import-hides-class>true</warn-import-hides-class>

    <!-- Use of the instanceof operator. -->
    <warn-instance-of-changes>true</warn-instance-of-changes>

    <!-- Internal error in compiler. -->
    <warn-internal-error>true</warn-internal-error>

    <!-- _level is no longer supported. For more information, see the flash.display package. -->
    <warn-level-not-supported>true</warn-level-not-supported>

    <!-- Missing namespace declaration (e.g. variable is not defined to be public, private, etc.). -->
    <warn-missing-namespace-decl>true</warn-missing-namespace-decl>

    <!-- Negative value will become a large positive value when assigned to a uint data type. -->
    <warn-negative-uint-literal>true</warn-negative-uint-literal>

    <!-- Missing constructor. -->
    <warn-no-constructor>false</warn-no-constructor>

    <!-- The super() statement was not called within the constructor. -->
    <warn-no-explicit-super-call-in-constructor>false</warn-no-explicit-super-call-in-constructor>

    <!-- Missing type declaration. -->
    <warn-no-type-decl>true</warn-no-type-decl>

    <!-- In ActionScript 3.0, white space is ignored and '' returns 0. Number() returns -->
    <!-- NaN in ActionScript 2.0 when the parameter is '' or contains white space.      -->
    <warn-number-from-string-changes>false</warn-number-from-string-changes>

    <!-- Change in scoping for the this keyword. Class methods extracted from an  -->
    <!-- instance of a class will always resolve this back to that instance. In   -->
    <!-- ActionScript 2.0 this is looked up dynamically based on where the method -->
    <!-- is invoked from.                                                         -->
    <warn-scoping-change-in-this>false</warn-scoping-change-in-this>

    <!-- Inefficient use of += on a TextField.-->
    <warn-slow-text-field-addition>true</warn-slow-text-field-addition>

    <!-- Possible missing parentheses. -->
    <warn-unlikely-function-value>true</warn-unlikely-function-value>

    <!-- Possible usage of the ActionScript 2.0 XML class. -->
    <warn-xml-class-has-changed>false</warn-xml-class-has-changed>

#foreach($define in $defines)    <define>
      <name>$define.name</name>
      <value>$define.value</value>
    </define>
#end

  </compiler>

#if($includeSources)
  <include-sources>
#foreach($sourcePath in $sourcePaths)    <path-element>$sourcePath</path-element>
#end
  </include-sources>
#end

#if($includeClasses)
  <include-classes>
#foreach($includeClass in $includeClasses)    <class>$includeClass</class>
#end
  </include-classes>
#end

  <!-- compute-digest: writes a digest to the catalog.xml of a library. Use this when the library will be used as a
                       cross-domain rsl.-->
  <!-- compute-digest usage:
  <compute-digest>boolean</compute-digest>
  -->

  <!-- remove circular dependencies -->
  <remove-circulars>$removeCirculars</remove-circulars>

  <!-- remove-unused-rsls: remove RSLs that are not being used by the application-->
  <remove-unused-rsls>true</remove-unused-rsls>

  <!-- static-link-runtime-shared-libraries: statically link the libraries specified by the -runtime-shared-libraries-path option.-->
  <static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>

  <!-- target-player: specifies the version of the player the application is targeting.
                      Features requiring a later version will not be compiled into the application.
                      The minimum value supported is "9.0.0".-->
  <target-player>${targetPlayer}</target-player>

  <!-- Enables SWFs to access the network. -->
  <use-network>true</use-network>

#if($htmlTemplate)
  <html-template>${htmlTemplate}</html-template>
#end

  <!-- Metadata added to SWFs via the SWF Metadata tag. -->
  <metadata>
    <title>Apache FlexJS Application</title>
    <description>http://flex.apache.org/</description>
    <publisher>Apache Software Foundation</publisher>
    <creator>unknown</creator>
    <language>EN</language>
  </metadata>

</flex-config>
