Написал класс для работы с хтмл-текстом (он где тот тут на форуме уже фигурировал).
Сейчас столкнулся с такой мулькой. У меня есть в этом классе набор методов:
Вот собственно класс (поубирал лишние функции из кода, для моего вопроса этого достаточно, и работать будет, если кому скомпилировать охота)

Код AS3:
public class AdvTextField extends TextField
{
private static const HEX:String = "0123456789ABCDEF";
private var _htmlColor:String;
private var _htmlFont:String;
private var _htmlSize:String;
private var _htmlAlign:String;
//у всех этих переменных есть геттеры и сеттеры, но они без интересностей,
//втупую возвращают значения. В дальнейшем хочу сделать что-то попродвинутее,
//сейчас пока руки не дошли
private var htmlStyle:HtmlStyles = new HtmlStyles();//тут по сути просто пакет шрифтов
public function AdvTextField()
{
super();
embedFonts = true;
selectable = false;
wordWrap = true;
multiline = true;
width = 200;
height = 30;
this.antiAliasType = AntiAliasType.ADVANCED;
this.setHtmlFormat("HelveticaR", 0x000000, 12);
}
override public function set text(_text:String): void {
super.text = _text;
refresh();
}
private function refresh():void {
this.htmlText = '<font face="' + htmlFont + '" color="' + htmlColor + '" size="' + htmlSize + '"><p align = "' + htmlAlign + '">' + this.text + '</p></font>';
}
public function setHtmlFormat(font:String="HelveticaR",color:uint=0x000000,size:Number=12, align:String = "left"):void {
_htmlColor = stringARGB(color);
_htmlFont = font;
_htmlSize = String(size);
_htmlAlign = align;
refresh();
}
//**********************
Ниже кому интересно посмотрит, но к вопросу это не относится.
//**********************
private static function getColor(num:Number):Object {
var ob:Object = {};
ob.a = num >> 24 & 0xFF;
ob.r = num >> 16 & 0xFF;
ob.g = num >> 8 & 0xFF;
ob.b = num & 0xFF;
return ob;
}
private static function getHex(n:Number):String {
return HEX.charAt((n >> 4) & 0xf) + HEX.charAt(n & 0xf);
}
private static function stringARGB(num:Number):String {
var col:Object = getColor(num);
//var a:String = getHex(col.a);
var r:String = getHex(col.r);
var g:String = getHex(col.g);
var b:String = getHex(col.b);
return String("#" + r.concat(g, b));
}
}
Вобщем в конструкторе задаются базовые параметры. Там же задается формат шрифта по-умолчанию.
Переопределен сеттер text.
Теперь если я делаю так:

Код AS3:
var text:AdvTextField = new AdvTextField();
text.setHtmlFormat("HelveticaR", 0x000000, 14, "left");
text.text = "1 абзац
2 абзац
4 абзац";
То в htmlText попадает следующее:

Код:
<P ALIGN="LEFT">
<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0">1 абзац</FONT>
</P>
<P ALIGN="LEFT">
<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0">2 абзац</FONT>
<P ALIGN="LEFT">
<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0"></FONT>
</P>
<P ALIGN="LEFT">
<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0">4 абзац<FONT FACE="Times New Roman" SIZE="12"></FONT></FONT>
</P>
И это круто, этого результата я и хотел добиться. НО, если я сначала присваиваю текст, а потом уже устанавливаю формат, то всё выводится в строку:

Код AS3:
var text:AdvTextField = new AdvTextField();
text.text = "1 абзац
2 абзац
4 абзац";
text.setHtmlFormat("HelveticaR", 0x000000, 14, "left");

Код:
<P ALIGN="LEFT">
<FONT FACE="HelveticaR" SIZE="14" COLOR="#000000" LETTERSPACING="0" KERNING="0">1 абзац2 абзац4 абзац</FONT>
</P>
<P ALIGN="LEFT">
<FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0"></FONT>
</P>
Хотя поидее результат должен быть идентичен в обоих случаях. И сеттер текста и функция установки нового формата заканчиваются одной и той же функцией "refresh()".
Нипанятна. Кто может объяснить и подсказать?