blob: c99185c2e79a4247c68eff5298fe38a1795019b0 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// 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;
}
}
}