Как получить отформатированный текст во Flash? - PullRequest
0 голосов
/ 31 января 2010

Форматировать текст просто с помощью setTextFormat . Но есть ли какой-нибудь аффективный метод для извлечения всех стилей, которые были сделаны в тексте? getTextFormat известен, но он не работает с текстом, который отличается по форматированию. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 31 января 2010

Как вы сказали, getTextFormat(beginIndex:int = -1, endIndex:int = -1) просто возвращает объект TextFormat, заполненный информацией о форматировании для указанного диапазона текста (только свойства, общие для всего указанного текста, устанавливаются в результирующий TextFormat объект).

Если вам нужна информация о форматировании всего текста , прочитайте свойство htmlText TextField после вызова setTextFormat. Он содержит HTML-представление содержимого текстового поля.

var str:String = "The quick brown fox jumps over the lazy dog\n";
var tf:TextField = new TextField();
tf.multiline = true;
tf.text = str + str + str;
var f:TextFormat = new TextFormat("Arial", 15, 0xFF0000, true, false, 
    true, null, null, TextFormatAlign.CENTER);
tf.setTextFormat(f, 0, str.length);
f = new TextFormat("Courier New", 12, 0x00FF00, false, false, 
    false, "http://www.google.com", null, TextFormatAlign.LEFT);
tf.setTextFormat(f, str.length, 2 * str.length);
f = new TextFormat("Times New Roman", 12, 0x0000FF, false, true, 
    true, null, null, TextFormatAlign.RIGHT);
tf.setTextFormat(f, 2 * str.length, str.length * 3);
tf.width = 400;
tf.height = 300
addChild(tf);
trace(tf.htmlText);

Вывод:

<P ALIGN="CENTER">
    <FONT FACE="Arial" SIZE="15" COLOR="#FF0000" LETTERSPACING="0" KERNING="0">
        <B>
            <U>The quick brown fox jumps over the lazy dog</U>
        </B>
    </FONT>
</P>
<P ALIGN="LEFT">
    <FONT FACE="Courier New" SIZE="12" COLOR="#00FF00" LETTERSPACING="0" KERNING="0">
        <A HREF="http://www.google.com" TARGET="">The quick brown fox jumps over the lazy dog</A>
    </FONT>
</P>
<P ALIGN="RIGHT">
    <FONT FACE="Times New Roman" SIZE="12" COLOR="#0000FF" LETTERSPACING="0" KERNING="0">
        <I>
            <U>The quick brown fox jumps over the lazy dog</U>
        </I>
    </FONT>
</P>
0 голосов
/ 31 января 2010

Это много работы, если не сказать больше.

Я рекомендую существующий форматированный текстовый редактор, который вы можете подключить к своему решению, например, obedit: http://www.oblius.com/projects/obedit/ (donationware)

Edit:

Хорошо, в ответ на ваш комментарий вы кодируете текстовый редактор, внедряя стандартный текстовый стиль, такой как text / enriched MIME content-type (http://tools.ietf.org/html/rfc1896) или, более вероятно, Rich Text Format (http://msdn.microsoft.com/en-us/library/aa140277(office.10).aspx). Вы также можете использовать HTML или создать собственный синтаксис.

Скажите, что пользователь печатает The quick brown fox jumps over the lazy dog. Пользователь выделяет «быстро» и нажимает кнопку «полужирный» (которую вы предоставляете), выделяет лису и меняет передний план на красный (с выбранным вами палитрой цветов). Скрытый от просмотра, вы изменяете значение поля данных на что-то вроде The \bquick\b brown \{color:red}fox\{\color} jumps over the lazy dog.

Теперь пользователь выделяет всю строку и устанавливает ее зеленым цветом. Вы измените скрытое значение на \{color:green}The \bquick\b brown fox jumps over the lazy dog.\{color} Обратите внимание, что вам пришлось проанализировать строку, чтобы определить и удалить конфликтующую разметку цвета. Что если пользователь захочет отменить это изменение? Вы сохранили версию с красной лисой? Когда пользователь вводит новый текст в конце строки, считаете ли вы, что курсор находится внутри или снаружи тега зеленого цвета?

Когда вы перезагружаете значение, вам снова нужно проанализировать строку, а затем преобразовать все форматирование во что-то, что может отображать Flash, удаляя теги.

Изобретать колесо не очень весело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...