blob: 50c029461ceb27e96ea2a79ba393b0d91a64defa [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.utils
{
import flash.text.engine.JustificationStyle;
import flash.text.engine.TextBaseline;
import flash.utils.Dictionary;
import flashx.textLayout.debug.assert;
import flashx.textLayout.formats.JustificationRule;
import flashx.textLayout.formats.LeadingModel;
import flashx.textLayout.tlf_internal;
use namespace tlf_internal;
/**
* Utilities for managing and getting information about Locale based defaults.
* The methods of this class are static and must be called using
* the syntax <code>LocaleUtil.method(<em>parameter</em>)</code>.
*
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*/
[ExcludeClass]
public final class LocaleUtil
{
public function LocaleUtil()
{
}
/** @private */
static private var _localeSettings:Dictionary = null;
static private var _lastLocaleKey:String = "";
static private var _lastLocale:LocaleSettings = null;
static public function justificationRule(locale:String):String
{
var localeSet:LocaleSettings = fetchLocaleSet(locale);
CONFIG::debug{ assert(localeSet != null, "Failed to get LocaleSettings from locale! locale = " + locale); }
return localeSet.justificationRule;
}
static public function justificationStyle(locale:String):String
{
var localeSet:LocaleSettings = fetchLocaleSet(locale);
CONFIG::debug{ assert(localeSet != null, "Failed to get LocaleSettings from locale! locale = " + locale); }
return localeSet.justificationStyle;
}
static public function leadingModel(locale:String):String
{
var localeSet:LocaleSettings = fetchLocaleSet(locale);
CONFIG::debug{ assert(localeSet != null, "Failed to get LocaleSettings from locale! locale = " + locale); }
return localeSet.leadingModel;
}
static public function dominantBaseline(locale:String):String
{
var localeSet:LocaleSettings = fetchLocaleSet(locale);
CONFIG::debug{ assert(localeSet != null, "Failed to get LocaleSettings from locale! locale = " + locale); }
return localeSet.dominantBaseline;
}
/** @private */
static private function addLocale(locale:String):LocaleSettings
{
CONFIG::debug{ assert(_localeSettings[locale] == null, "Cannot add a new locale property set when it already exists. Locale == " + locale); }
_localeSettings[locale] = new LocaleSettings();
return _localeSettings[locale];
}
/** @private */
static private function initializeDefaultLocales():void
{
CONFIG::debug{ assert(_localeSettings == null, "Should not call initializeDefaultLocales when dictionary exists!"); }
_localeSettings = new Dictionary();
{
var locale:LocaleSettings = addLocale("en");
CONFIG::debug{ assert(locale != null, "Failed to create new locale for 'en'!"); }
locale.justificationRule = JustificationRule.SPACE;
locale.justificationStyle = JustificationStyle.PUSH_IN_KINSOKU;
locale.leadingModel = LeadingModel.ROMAN_UP;
locale.dominantBaseline = TextBaseline.ROMAN;
locale = addLocale("ja");
CONFIG::debug{ assert(locale != null, "Failed to create new locale for 'ja'!"); }
locale.justificationRule = JustificationRule.EAST_ASIAN;
locale.justificationStyle = JustificationStyle.PUSH_IN_KINSOKU;
locale.leadingModel = LeadingModel.IDEOGRAPHIC_TOP_DOWN;
locale.dominantBaseline = TextBaseline.IDEOGRAPHIC_CENTER;
locale = addLocale("zh");
CONFIG::debug{ assert(locale != null, "Failed to create new locale for 'zh'!"); }
locale.justificationRule = JustificationRule.EAST_ASIAN;
locale.justificationStyle = JustificationStyle.PUSH_IN_KINSOKU;
locale.leadingModel = LeadingModel.IDEOGRAPHIC_TOP_DOWN;
locale.dominantBaseline = TextBaseline.IDEOGRAPHIC_CENTER;
}
}
/** @private */
static private function getLocale(locale:String):LocaleSettings
{
var lowerLocale:String = locale.toLowerCase().substr(0,2);
var rslt:LocaleSettings = _localeSettings[lowerLocale];
return rslt == null ? _localeSettings["en"] : rslt;
}
/** @private */
static private function fetchLocaleSet(locale:String):LocaleSettings
{
if(_localeSettings == null)
initializeDefaultLocales();
if(locale == _lastLocaleKey)
return _lastLocale;
var localeSet:LocaleSettings = getLocale(locale);
//update the last locale data
_lastLocale = localeSet;
_lastLocaleKey = locale;
return localeSet;
}
}
}
import flashx.textLayout.formats.JustificationRule;
import flash.text.engine.JustificationStyle;
import flashx.textLayout.formats.LeadingModel;
import flash.text.engine.TextBaseline;
import flashx.textLayout.debug.assert;
import flashx.textLayout.tlf_internal;
import flashx.textLayout.formats.TextLayoutFormat;
use namespace tlf_internal;
internal class LocaleSettings
{
public function LocaleSettings()
{}
private var _justificationRule:String = null;
private var _justificationStyle:String = null;
private var _leadingModel:String = null;
private var _dominantBaseline:String = null;
public function get justificationRule():String { return _justificationRule; }
public function set justificationRule(newValue:String):void
{
var setValue:Object = TextLayoutFormat.justificationRuleProperty.setHelper(_justificationRule,newValue);
//don't assert if the newValue is null, only if it is invalid
CONFIG::debug{ assert(newValue == null || setValue != null, "LocaleUtil should never be providing an invalid JustificationRule!"); }
_justificationRule = setValue == null ? null : (setValue as String);
}
public function get justificationStyle():String { return _justificationStyle; }
public function set justificationStyle(newValue:String):void
{
var setValue:Object = TextLayoutFormat.justificationStyleProperty.setHelper(_justificationStyle,newValue);
//don't assert if the newValue is null, only if it is invalid
CONFIG::debug{ assert(newValue == null || setValue != null, "LocaleUtil should never be providing an invalid LeadingDirection!"); }
_justificationStyle = setValue == null ? null : (setValue as String);
}
public function get leadingModel():String { return _leadingModel; }
public function set leadingModel(newValue:String):void
{
var setValue:Object = TextLayoutFormat.leadingModelProperty.setHelper(_leadingModel,newValue);
//don't assert if the newValue is null, only if it is invalid
CONFIG::debug{ assert(newValue == null || setValue != null, "LocaleUtil should never be providing an invalid JustificationStyle!"); }
_leadingModel = setValue == null ? null : (setValue as String);
}
public function get dominantBaseline():String { return _dominantBaseline; }
public function set dominantBaseline(newValue:String):void
{
var setValue:Object = TextLayoutFormat.dominantBaselineProperty.setHelper(_dominantBaseline,newValue);
//don't assert if the newValue is null, only if it is invalid
CONFIG::debug{ assert(newValue == null || setValue != null, "LocaleUtil should never be providing an invalid TextBaseline!"); }
_dominantBaseline = setValue == null ? null : (setValue as String);
}
}