openfl
Version:
A fast, productive library for 2D cross-platform development.
368 lines (351 loc) • 12.1 kB
JavaScript
// Class: openfl.text.StyleSheet
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
var $extend = require("./../../extend_stub").default;
function openfl_events_EventDispatcher() {return require("./../../openfl/events/EventDispatcher");}
function haxe_ds_StringMap() {return require("./../../haxe/ds/StringMap");}
function openfl_text__$internal_CSSParser() {return require("./../../openfl/text/_internal/CSSParser");}
function Std() {return require("./../../Std");}
function Reflect() {return require("./../../Reflect");}
function StringTools() {return require("./../../StringTools");}
function openfl_text_TextFormat() {return require("./../../openfl/text/TextFormat");}
function EReg() {return require("./../../EReg");}
function openfl_utils__$Object_Object_$Impl_$() {return require("./../../openfl/utils/_Object/Object_Impl_");}
function HxOverrides() {return require("./../../HxOverrides");}
// Constructor
var StyleSheet = function() {
(openfl_events_EventDispatcher().default).call(this);
this.clear();
}
// Meta
StyleSheet.__name__ = "openfl.text.StyleSheet";
StyleSheet.__isInterface__ = false;
StyleSheet.__super__ = (openfl_events_EventDispatcher().default);
StyleSheet.prototype = $extend((openfl_events_EventDispatcher().default).prototype, {
clear: function() {
this.__styleNamesDirty = false;
this.__styleNames = null;
this.__styles = new (haxe_ds_StringMap().default)();
},
getStyle: function(styleName) {
styleName = styleName.toLowerCase();
if(this.__styles.exists(styleName)) {
return this.__styles.get(styleName);
} else {
return null;
}
},
parseCSS: function(CSSText) {
var _g = new (haxe_ds_StringMap().default)();
_g.set("silent",true);
var parser = new (openfl_text__$internal_CSSParser().default)(_g);
var ast = parser.parse(CSSText);
if(ast != null) {
var rules = ast.get("rules");
var _g1 = 0;
while(_g1 < rules.length) {
var rule = rules[_g1];
++_g1;
var styleName = rule.exists("selectors") ? rule.get("selectors") : null;
if(styleName != null) {
styleName = styleName.toLowerCase();
if(!this.__styles.exists(styleName)) {
var this1 = { };
this.__styles.set(styleName,this1);
this.__styleNamesDirty = true;
}
var object = this.__styles.get(styleName);
var declarations = rule.get("declarations");
if(declarations != null) {
var _g11 = 0;
while(_g11 < declarations.length) {
var declaration = declarations[_g11];
++_g11;
var property = declaration.get("property");
var value = (Std().default).string(declaration.get("value"));
if(property != null) {
if(property == null) {
(Reflect().default).setField(object,property,value);
} else {
switch(property) {
case "font-family":
var value1 = (StringTools().default).replace(value,"\"","");
var this2 = object;
if(this2 != null) {
(Reflect().default).setProperty(this2,"fontFamily",value1);
}
break;
case "font-size":
var this3 = object;
if(this3 != null) {
(Reflect().default).setProperty(this3,"fontSize",value);
}
break;
case "font-style":
var this4 = object;
if(this4 != null) {
(Reflect().default).setProperty(this4,"fontStyle",value);
}
break;
case "font-weight":
var this5 = object;
if(this5 != null) {
(Reflect().default).setProperty(this5,"fontWeight",value);
}
break;
case "letter-spacing":
var this6 = object;
if(this6 != null) {
(Reflect().default).setProperty(this6,"letterSpacing",value);
}
break;
case "margin-left":
var this7 = object;
if(this7 != null) {
(Reflect().default).setProperty(this7,"marginLeft",value);
}
break;
case "text-align":
var this8 = object;
if(this8 != null) {
(Reflect().default).setProperty(this8,"textAlign",value);
}
break;
case "text-decoration":
var this9 = object;
if(this9 != null) {
(Reflect().default).setProperty(this9,"textDecoration",value);
}
break;
case "text-indent":
var this10 = object;
if(this10 != null) {
(Reflect().default).setProperty(this10,"textIndent",value);
}
break;
default:
(Reflect().default).setField(object,property,value);
}
}
}
}
}
}
}
}
},
setStyle: function(styleName,styleObject) {
styleName = styleName.toLowerCase();
if(styleObject == null) {
if(this.__styles.exists(styleName)) {
this.__styles.remove(styleName);
}
} else {
var this1 = { };
var object = this1;
var _g = 0;
var _g1 = (Reflect().default).fields(styleObject);
while(_g < _g1.length) {
var field = _g1[_g];
++_g;
(Reflect().default).setField(object,field,(Reflect().default).field(styleObject,field));
}
this.__styles.set(styleName,object);
}
},
transform: function(formatObject) {
var format = new (openfl_text_TextFormat().default)();
this.__applyStyleObject(formatObject,format);
return format;
},
__applyStyle: function(styleName,textFormat) {
styleName = styleName.toLowerCase();
if(this.__styles.exists(styleName)) {
var style = this.__styles.get(styleName);
this.__applyStyleObject(style,textFormat);
}
},
__applyStyleObject: function(styleObject,textFormat) {
if(styleObject != null) {
var hex = new (EReg().default)("[0-9A-Fa-f]+","");
var numeric = new (EReg().default)("[0-9]+","");
var tmp;
var this1 = styleObject;
if(this1 != null && (Reflect().default).hasField(this1,"color")) {
var this2 = (openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"color");
tmp = hex.match(this2 == null ? null : (Std().default).string(this2));
} else {
tmp = false;
}
if(tmp) {
textFormat.color = (Std().default).parseInt("0x" + hex.matched(0));
}
var this3 = styleObject;
if(this3 != null && (Reflect().default).hasField(this3,"fontFamily")) {
var this4 = (openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"fontFamily");
textFormat.font = this.__parseFont(this4 == null ? null : (Std().default).string(this4));
}
var tmp1;
var this5 = styleObject;
if(this5 != null && (Reflect().default).hasField(this5,"fontSize")) {
var this6 = (openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"fontSize");
tmp1 = numeric.match(this6 == null ? null : (Std().default).string(this6));
} else {
tmp1 = false;
}
if(tmp1) {
textFormat.size = (Std().default).parseInt(numeric.matched(0));
}
var this7 = styleObject;
if(this7 != null && (Reflect().default).hasField(this7,"fontStyle")) {
switch((openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"fontStyle")) {
case "italic":
textFormat.italic = true;
break;
case "normal":
textFormat.italic = false;
break;
default:
}
}
var this8 = styleObject;
if(this8 != null && (Reflect().default).hasField(this8,"fontWeight")) {
switch((openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"fontWeight")) {
case "bold":
textFormat.bold = true;
break;
case "normal":
textFormat.bold = false;
break;
default:
}
}
var tmp2;
var this9 = styleObject;
if(this9 != null && (Reflect().default).hasField(this9,"leading")) {
var this10 = (openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"leading");
tmp2 = numeric.match(this10 == null ? null : (Std().default).string(this10));
} else {
tmp2 = false;
}
if(tmp2) {
textFormat.leading = (Std().default).parseInt(numeric.matched(0));
}
var tmp3;
var this11 = styleObject;
if(this11 != null && (Reflect().default).hasField(this11,"letterSpacing")) {
var this12 = (openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"letterSpacing");
tmp3 = numeric.match(this12 == null ? null : (Std().default).string(this12));
} else {
tmp3 = false;
}
if(tmp3) {
textFormat.letterSpacing = (Std().default).parseFloat(numeric.matched(0));
}
var tmp4;
var this13 = styleObject;
if(this13 != null && (Reflect().default).hasField(this13,"marginLeft")) {
var this14 = (openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"marginLeft");
tmp4 = numeric.match(this14 == null ? null : (Std().default).string(this14));
} else {
tmp4 = false;
}
if(tmp4) {
textFormat.leftMargin = (Std().default).parseInt(numeric.matched(0));
}
var tmp5;
var this15 = styleObject;
if(this15 != null && (Reflect().default).hasField(this15,"marginRight")) {
var this16 = (openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"marginRight");
tmp5 = numeric.match(this16 == null ? null : (Std().default).string(this16));
} else {
tmp5 = false;
}
if(tmp5) {
textFormat.rightMargin = (Std().default).parseInt(numeric.matched(0));
}
var this17 = styleObject;
if(this17 != null && (Reflect().default).hasField(this17,"textAlign")) {
switch((openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"textAlign")) {
case "center":
textFormat.align = "center";
break;
case "justify":
textFormat.align = "justify";
break;
case "left":
textFormat.align = "left";
break;
case "right":
textFormat.align = "right";
break;
default:
}
}
var this18 = styleObject;
if(this18 != null && (Reflect().default).hasField(this18,"textDecoration")) {
switch((openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"textDecoration")) {
case "none":
textFormat.underline = false;
break;
case "underline":
textFormat.underline = true;
break;
default:
}
}
var tmp6;
var this19 = styleObject;
if(this19 != null && (Reflect().default).hasField(this19,"textIndent")) {
var this20 = (openfl_utils__$Object_Object_$Impl_$().default).__get(styleObject,"textIndent");
tmp6 = numeric.match(this20 == null ? null : (Std().default).string(this20));
} else {
tmp6 = false;
}
if(tmp6) {
textFormat.blockIndent = (Std().default).parseInt(numeric.matched(0));
}
}
},
__parseFont: function(fontFamily) {
if(fontFamily == null) {
return null;
}
if(fontFamily.indexOf(",") > -1) {
fontFamily = (HxOverrides().default).substr(fontFamily,0,fontFamily.indexOf(","));
}
switch(fontFamily) {
case "mono":
return "_typewriter";
case "sans-serif":
return "_sans";
case "serif":
return "_serif";
default:
return fontFamily;
}
},
get_styleNames: function() {
if(this.__styleNames == null || this.__styleNamesDirty) {
this.__styleNames = [];
var style = this.__styles.keys();
while(style.hasNext()) {
var style1 = style.next();
this.__styleNames.push(style1);
}
this.__styleNamesDirty = false;
}
return this.__styleNames;
}
});
StyleSheet.prototype.__class__ = StyleSheet.prototype.constructor = $hxClasses["openfl.text.StyleSheet"] = StyleSheet;
// Init
// Statics
StyleSheet.__supportedStyles = ["color","display","font-family","font-size","font-style","font-weight","kerning","leading","letter-spacing","margin-left","margin-right","text-align","text-decoration","text-indent"]
// Export
exports.default = StyleSheet;