<?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>

    <js-external-library-path>
#foreach($artifact in $jsExternalLibraries)            <path-element>$artifact.file</path-element>
#end
    </js-external-library-path>
    
    <swf-external-library-path>
#foreach($artifact in $swfExternalLibraries)            <path-element>$artifact.file</path-element>
#end
    </swf-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>

    <js-library-path>
#foreach($artifact in $jsLibraries)            <path-element>$artifact.file</path-element>
#end
    </js-library-path>

    <swf-library-path>
#foreach($artifact in $swfLibraries)            <path-element>$artifact.file</path-element>
#end
    </swf-library-path>

    <allow-subclass-overrides>$allowSubclassOverrides</allow-subclass-overrides>

    <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>
    <binding-event-handler-interface>org.apache.flex.events.IEventDispatcher</binding-event-handler-interface>
    <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>
