# 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.

#FlexPrettyPrintSettings
#Mon May 18 16:11:58 CEST 2009
Actionscript.spacesBeforeComma=0
Actionscript.newLineAfterBindable=true
Actionscript.putCatchOnNewLine=true
MXML.spacesAroundEquals=0
Actionscript.wrapArrayDeclMode=8
Actionscript.useBraceStyle=false
Actionscript.advancedSpacesInsideLiteralBraces=0
MXML.attrWrapMode=52
Actionscript.alwaysGenerateIndent=false
MXML.keepBlankLines=true
MXML.attrsToKeepOnSameLine=1
MXML.spacesBeforeEmptyTagEnd=0
MXML.wrapIndentStyle=1000
Actionscript.spacesAfterLabel=1
Actionscript.advancedSpacesAroundEqualsInOptionalParameters=1
MXML.tagsCannotFormat=mx\:String,
Actionscript.breakLinesBeforeComma=false
Actionscript.collapseSpacesForAdjacentParens=false
Actionscript.advancedUseSpacesAroundEqualsInOptionalParameters=true
Actionscript.advancedSpacesInsideArrayRefBrackets=0
Actionscript.blankLinesBeforeFunctions=1
Actionscript.useGlobalSpacesInsideParens=true
MXML.sortAttrData=%namespace%\n%properties%\n%styles%\n%events%\n%effects%\n
Actionscript.wrapMethodDeclMode=8
Actionscript.blankLinesBeforeClasses=1
MXML.useAttrsToKeepOnSameLine=false
Actionscript.putElseOnNewLine=true
MXML.maxLineLength=100
Actionscript.spacesBeforeControlOpenParen=1
MXML.sortExtraAttrs=true
MXML.blankLinesBeforeTags=0
Actionscript.spacesInsideParens=1
Actionscript.maxLineLength=120
Actionscript.putEmptyStatementsOnNewLine=true
Flex.useTabs=false
Actionscript.keepSLCommentsOnColumn1=true
MXML.sortAttrMode=2
Actionscript.spacesAroundBinarySymbolicOperator=1
MXML.tagsToHaveBlankLinesAddedBeforeThem=
Actionscript.wrapEmbeddedXMLMode=2
Actionscript.spacesAfterComma=1
Actionscript.advancedSpacesInsideArrayDeclBrackets=0
Actionscript.advancedSpacesInsideParens=0
Actionscript.blankLinesBeforeControlStatements=1
Actionscript.wrapIndentStyle=1000
Actionscript.wrapExpressionMode=8
Actionscript.putOpenBraceOnNewLine=true
MXML.attrsPerLine=1
Actionscript.spacesAroundAssignment=1
Actionscript.spacesAroundColons=1
Actionscript.keepBlankLines=true
Actionscript.keepElseIfOnSameLine=true
MXML.attrGroups=name\=properties|sort\=13|wrap\=54|attrs\=id,width,height,styleName,label,text,allowDisjointSelection,allowMultipleSelection,allowThumbOverlap,allowTrackClick,autoLayout,autoRepeat,automationName,cachePolicy,class,clipContent,condenseWhite,conversion,creationIndex,creationPolicy,currentState,data,dataDescriptor,dataProvider,dataTipFormatFunction,dayNames,defaultButton,direction,disabledDays,disabledRanges,displayedMonth,displayedYear,doubleClickEnabled,emphasized,enabled,explicitHeight,explicitMaxHeight,explicitMaxWidth,explicitMinHeight,explicitMinWidth,explicitWidth,firstDayOfWeek,focusEnabled,fontContext,horizontalLineScrollSize,horizontalPageScrollSize,horizontalScrollBar,horizontalScrollPolicy,horizontalScrollPosition,htmlText,icon,iconField,imeMode,includeInLayout,indeterminate,labelField,labelFunction,labelPlacement,labels,layout,lineScrollSize,listData,liveDragging,maxChars,maxHeight,maxScrollPosition,maxWidth,maxYear,maximum,measuredHeight,measuredMinHeight,measuredMinWidth,measuredWidth,menuBarItemRenderer,menuBarItems,menus,minHeight,minScrollPosition,minWidth,minYear,minimum,mode,monthNames,monthSymbol,mouseFocusEnabled,pageScrollSize,pageSize,percentHeight,percentWidth,scaleX,scaleY,scrollPosition,selectable,selectableRange,selected,selectedDate,selectedField,selectedIndex,selectedRanges,showDataTip,showRoot,showToday,sliderDataTipClass,sliderThumbClass,snapInterval,source,states,stepSize,stickyHighlighting,text,thumbCount,tickInterval,tickValues,toggle,toolTip,transitions,truncateToFit,validationSubField,value,value,verticalLineScrollSize,verticalPageScrollSize,verticalScrollBar,verticalScrollPolicy,verticalScrollPosition,x,y,yearNavigationEnabled,yearSymbol,|\nname\=events|sort\=11|wrap\=54|attrs\=add,buttonDown,change,childAdd,childIndexChange,childRemove,clickHandler,complete,creationComplete,currentStateChange,currentStateChanging,dataChange,dragComplete,dragDrop,dragEnter,dragExit,dragOver,effectEnd,effectStart,enterState,exitState,hide,initialize,invalid,itemClick,itemRollOut,itemRollOver,menuHide,menuShow,mouseDownOutside,mouseWheelOutside,move,preinitialize,progress,record,remove,resize,scroll,show,thumbDrag,thumbPress,thumbRelease,toolTipCreate,toolTipEnd,toolTipHide,toolTipShow,toolTipShown,toolTipStart,updateComplete,valid,valueCommit,|\nname\=styles|sort\=11|wrap\=54|attrs\=backgroundAlpha,backgroundAttachment,backgroundColor,backgroundDisabledColor,backgroundImage,backgroundSize,backgroundSkin,barColor,barSkin,borderColor,borderSides,borderSkin,borderStyle,borderThickness,bottom,color,cornerRadius,dataTipOffset,dataTipPrecision,dataTipStyleName,disabledColor,disabledIcon,disabledIconColor,disabledSkin,disbledOverlayAlpha,downArrowDisabledSkin,downArrowDownSkin,downArrowOverSkin,downArrowUpSkin,downIcon,downSkin,dropShadowColor,dropShadowEnabled,errorColor,fillAlphas,fillColors,focusAlpha,focusBlendMode,focusRoundedCorners,focusSkin,focusThickness,fontAntiAliasType,fontFamily,fontGridFitType,fontSharpness,fontSize,fontStyle,fontThickness,fontWeight,fontfamily,headerColors,headerStyleName,highlightAlphas,horizontalAlign,horizontalCenter,horizontalGap,horizontalScrollBarStyleName,icon,iconColor,indeterminateMoveInterval,indeterminateSkin,itemDownSkin,itemOverSkin,itemUpSkin,kerning,labelOffset,labelStyleName,labelWidth,leading,left,letterSpacing,maskSkin,menuStyleName,nextMonthDisabledSkin,nextMonthDownSkin,nextMonthOverSkin,nextMonthSkin,nextMonthUpSkin,nextYearDisabledSkin,nextYearDownSkin,nextYearOverSkin,nextYearSkin,nextYearUpSkin,overIcon,overSkin,paddingBottom,paddingLeft,paddingRight,paddingTop,prevMonthDisabledSkin,prevMonthDownSkin,prevMonthOverSkin,prevMonthSkin,prevMonthUpSkin,prevYearDisabledSkin,prevYearDownSkin,prevYearOverSkin,prevYearSkin,prevYearUpSkin,repeatDelay,repeatInterval,right,rollOverColor,rollOverIndicatorSkin,selectedDisabledIcon,selectedDisabledSkin,selectedDownIcon,selectedDownSkin,selectedOverIcon,selectedOverSkin,selectedUpIcon,selectedUpSkin,selectionColor,selectionIndicatorSkin,shadowColor,shadowDirection,shadowDistance,showTrackHighlight,skin,slideDuration,slideEasingFunction,strokeColor,strokeWidth,textAlign,textDecoration,textIndent,textRollOverColor,textSelectedColor,themeColor,thumbDisabledSkin,thumbDownSkin,thumbIcon,thumbOffset,thumbOverSkin,thumbUpSkin,tickColor,tickLength,tickOffset,tickThickness,todayColor,todayIndicatorSkin,todayStyleName,top,tracHighlightSkin,trackColors,trackHeight,trackMargin,trackSkin,upArrowDisabledSkin,upArrowDownSkin,upArrowOverSkin,upArrowUpSkin,upIcon,upSkin,verticalAlign,verticalCenter,verticalGap,verticalScrollBarStyleName,weekDayStyleName,|\nname\=effects|sort\=11|wrap\=54|attrs\=addedEffect,completeEffect,creationCompleteEffect,focusInEffect,focusOutEffect,hideEffect,mouseDownEffect,mouseUpEffect,moveEffect,removedEffect,resizeEffect,rollOutEffect,rollOverEffect,showEffect,|\nname\=namespace|sort\=11|wrap\=54|attrs\=xmlns\:.*,|\n
MXML.addNewlineAfterLastAttr=true
Actionscript.braceStyle=5
Actionscript.wrapMethodCallMode=8
MXML.tagsCanFormat=mx\:List,
