| //////////////////////////////////////////////////////////////////////////////// |
| // |
| // 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. |
| // |
| //////////////////////////////////////////////////////////////////////////////// |
| package flashx.textLayout.elements |
| { |
| import flashx.textLayout.tlf_internal; |
| use namespace tlf_internal; |
| |
| /** Configuration that applies to all TextFlow objects. |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| */ |
| public class GlobalSettings |
| { |
| /** |
| * Specifies the callback used for font mapping. |
| * The callback takes a <code>flash.text.engine.FontDescription</code> object and updates it as needed. |
| * |
| * After setting a new font mapping callback, or changing the behavior of the exisiting font mapping callback, |
| * the client must explicitly call <code>flashx.textLayout.elements.TextFlow.invalidateAllFormats</code> for each impacted text flow. |
| * This ensures that whenever a leaf element in the text flow is next recomposed, the FontDescription applied to it is recalculated, and the the callback is invoked. |
| * |
| * @see flash.text.engine.FontDescription FontDescription |
| * @see TextFlow.invalidateAllFormats invalidateAllFormats |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| public static function get fontMapperFunction():Function |
| { |
| return _fontMapperFunction; |
| } |
| public static function set fontMapperFunction(val:Function):void |
| { |
| _fontMapperFunction = val; |
| } |
| |
| private static var _fontMapperFunction:Function |
| |
| /** Controls whether the text will be visible to a search engine indexer. Defaults to <code>true</code>. |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| public static function get enableSearch():Boolean |
| { |
| return _enableSearch; |
| } |
| public static function set enableSearch(value:Boolean):void |
| { |
| _enableSearch = value; |
| } |
| |
| private static var _enableSearch:Boolean = true; |
| |
| /** |
| * Specifies the callback used for changing the FontLookup based on swfcontext. The function will be called each time an ElementFormat is computed. |
| * It gives the client the opportunity to modify the FontLookup setting. The function is called with two parameters an ISWFContext and an ITextLayoutFormat. |
| * It must return a valid FontLookup. |
| * |
| * @see flashx.textLayout.compose.ISWFContext |
| * @see flashx.textLayout.formats.ITextLayoutFormat |
| * @see flash.text.engine.ElementFormat |
| * @see flash.text.engine.FontLookup |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| public static function get resolveFontLookupFunction():Function |
| { |
| return _resolveFontLookupFunction; |
| } |
| public static function set resolveFontLookupFunction(val:Function):void |
| { |
| _resolveFontLookupFunction = val; |
| } |
| private static var _resolveFontLookupFunction:Function |
| |
| /** Function that takes two parameters, a resource id and an optional array of parameters to substitute into the string. |
| * The string is of form "Content {0} more content {1}". The parameters are read from the optional array and substituted for the bracketed substrings. |
| * TLF provides a default implementation with |
| * default strings. Clients may replace this function with their own implementation for localization. |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| public static function get resourceStringFunction():Function |
| { |
| return _resourceStringFunction; |
| } |
| public static function set resourceStringFunction(val:Function):void |
| { |
| _resourceStringFunction = val; |
| } |
| |
| private static var _resourceStringFunction:Function = defaultResourceStringFunction; |
| |
| /** @private */ |
| |
| private static const resourceDict:Object = |
| { |
| missingStringResource: "No string for resource {0}", |
| // core errors |
| invalidFlowElementConstruct: "Attempted construct of invalid FlowElement subclass", |
| invalidSplitAtPosition: "Invalid parameter to splitAtPosition", |
| badMXMLChildrenArgument: "Bad element of type {0} passed to mxmlChildren", |
| badReplaceChildrenIndex: "Out of range index to FlowGroupElement.replaceChildren", |
| invalidChildType: "NewElement not of a type that this can be parent of", |
| badRemoveChild: "Child to remove not found", |
| invalidSplitAtIndex: "Invalid parameter to splitAtIndex", |
| badShallowCopyRange: "Bad range in shallowCopy", |
| badSurrogatePairCopy: "Copying only half of a surrogate pair in SpanElement.shallowCopy", |
| invalidReplaceTextPositions: "Invalid positions passed to SpanElement.replaceText", |
| invalidSurrogatePairSplit: "Invalid splitting of a surrogate pair", |
| badPropertyValue: "Property {0} value {1} is out of range", |
| // selection/editing |
| illegalOperation: "Illegal attempt to execute {0} operation", |
| // shared import errors |
| unexpectedXMLElementInSpan: "Unexpected element {0} within a span", |
| unexpectedNamespace: "Unexpected namespace {0}", |
| unknownElement: "Unknown element {0}", |
| unknownAttribute: "Attribute {0} not permitted in element {1}", |
| // html format import errors |
| malformedTag: "Malformed tag {0}", |
| malformedMarkup: "Malformed markup {0}", |
| // textlayoutformat import errors |
| missingTextFlow: "No TextFlow to parse", |
| expectedExactlyOneTextLayoutFormat: "Expected one and only one TextLayoutFormat in {0}", |
| expectedExactlyOneListMarkerFormat: "Expected one and only one ListMarkerFormat in {0}", |
| unsupportedVersion: "Version {0} is unsupported", |
| // shared import/export errors |
| unsupportedProperty: "Property {0} is unsupported" |
| }; |
| |
| /** @private */ |
| tlf_internal static function defaultResourceStringFunction(resourceName:String, parameters:Array = null):String |
| { |
| var value:String = String(resourceDict[resourceName]); |
| |
| if (value == null) |
| { |
| value = String(resourceDict["missingStringResource"]); |
| parameters = [ resourceName ]; |
| } |
| |
| if (parameters) |
| value = substitute(value, parameters); |
| |
| return value; |
| } |
| |
| /** @private */ |
| tlf_internal static function substitute(str:String, ... rest):String |
| { |
| if (str == null) |
| return ''; |
| |
| // Replace all of the parameters in the msg string. |
| var len:uint = rest.length; |
| var args:Array; |
| if (len == 1 && rest[0] is Array) |
| { |
| args = rest[0] as Array; |
| len = args.length; |
| } |
| else |
| { |
| args = rest; |
| } |
| |
| for (var i:int = 0; i < len; i++) |
| { |
| str = str.replace(new RegExp("\\{"+i+"\\}", "g"), args[i]); |
| } |
| |
| return str; |
| } |
| |
| |
| private static var _enableDefaultTabStops:Boolean = false; |
| /** |
| * @private Player versions prior to 10.1 do not set up any default tabStops. As a workaround, if enableDefaultTabs |
| * is true, TLF will set up default tabStops in the case where there are no tabs defined. |
| * |
| */ |
| tlf_internal static function get enableDefaultTabStops():Boolean |
| { |
| return _enableDefaultTabStops; |
| } |
| /** |
| * @private |
| */ |
| tlf_internal static function set enableDefaultTabStops(val:Boolean):void |
| { |
| _enableDefaultTabStops = val; |
| } |
| |
| private static var _alwaysCalculateWhitespaceBounds:Boolean = false; |
| /** |
| * @private If this is true, we will always calculate whitespace width in line bounds. |
| * if this is false, we will see if lineBreak="explicit" or when the logical width is NaN, |
| * the content bounds includes the spaces at the end of the line. With lineBreak="toFit" |
| * the spaces are not included. |
| * |
| */ |
| tlf_internal static function get alwaysCalculateWhitespaceBounds():Boolean |
| { |
| return _alwaysCalculateWhitespaceBounds; |
| } |
| /** |
| * @private |
| */ |
| tlf_internal static function set alwaysCalculateWhitespaceBounds(val:Boolean):void |
| { |
| _alwaysCalculateWhitespaceBounds = val; |
| } |
| } |
| } |