Richard Parnaby-King
Richard Parnaby-King

Reputation: 14891

AS3 TextField not applying <b> tag

Using AS3 I am dynamically creating, sizing, positioning and formatting a textfield. I am dynamically setting the content of the textfield from the contents of an xml file. I am trying to use the bold tag and noticed that it is not working. After a bit of searching the best I could come up with is "Flash CS4 tag in with htmlText". Bottom line: I have to embed an emboldened fontface.

As an example, let's say I want to use Tahoma. In my .fla file (using Flash CS4) I embed Tahoma and export it for use in actionscript. This lets me use Tahoma as a font in my textfield. If I try to use the b tag (textfield.htmlText="not bold, <b>bold</b>";) the bold text does not get emboldened. Based on the above question I have now embedded the Bold version of Tahoma as well.

How do I link the bold version of Tahoma with the regular version of Tahoma so that when using the bold tag I get bold text in my textfield?

Upvotes: 2

Views: 5638

Answers (3)

Rajneesh Gaikwad
Rajneesh Gaikwad

Reputation: 1193

In Flash, place Dynamic TextField with instance name "myTextField" and place the following code on timeline. (For testing purpose only otherwise timeline code is not recommended),

 var str:String = <![CDATA[ <font face='Arial' size='18' align='left'> This is my <b>BOLD</b>  text </font>]]>;
 myTextField.htmlText = str;

Upvotes: 0

Marty
Marty

Reputation: 39466

For setting certain sections of text bold you have to do it the annoying way: TextFormats.

Like so;

var t:TextField = new TextField();
t.text = "this is bold";

var f:TextFormat = new TextFormat();
f.bold = true;

t.setTextFormat(f, 0, 4); // start at character 0, end at character 4

addChild(t);

This would output the following: this is bold.

EDIT This should make it easier:

/**
 * Render a given portion of a String as bold
 * @param field The target TextField
 * @param needle The section of text to render bold
 */
function bolden(field:TextField, needle:String):void
{
    var tf:TextFormat = new TextFormat();
    tf.bold = true;

    var pos:uint = field.text.indexOf(needle);
    field.setTextFormat(tf, pos, pos + needle.length);
}


// example below
var t:TextField = new TextField();
t.text = "i like iced tea";

bolden(t, "iced");

addChild(t);

EDIT What up.

/**
 * Apply <b> tags
 * @param field The target TextField
 */
function bolden(field:TextField):void
{
    var tf:TextFormat = new TextFormat();
    tf.bold = true;

    var pos:int = 0;
    var cls:int = 0;

    while(true)
    {
        pos = field.text.indexOf("<b>", pos);
        cls = field.text.indexOf("</b>", pos);

        if(pos == -1) break;

        field.setTextFormat(tf, pos+3, cls);
        pos = cls;
    }
}


// example below
var t:TextField = new TextField();

t.width = stage.stageWidth;
t.htmlText = "i like <b>iced</b> tea and <b>showbags</b>";

bolden(t);

addChild(t);

Yields : I like iced tea and showbags.

Upvotes: 4

Richard Parnaby-King
Richard Parnaby-King

Reputation: 14891

Based on @Marty Wallace's answer:

I have set up my textformat earlier in the code. It loads the font, size, etc.

What I am doing is applying the font to my text field, then setting the textformat bold attribute as true if the string contains a bold tag. Placing the code above the setTextFormat makes the entire textfield bold. For some reason setting it below the textfield makes just the tagged text bold.

textfield.setTextFormat(textformat);
if(xmlText.search('<b>')){
    textformat.bold = true;
}

[edit]

Don't need the if:

textfield.setTextFormat(textformat);
textformat.bold = true;

[edit]

You also need the emboldened font embedded for this to work. I removed it from my library and couldn't get the bold to work again >.< In my tahoma example, the font name needs to be 'Tahoma bold'.

So now I need to embed the emboldened and italicised versions of all my fonts if I want to use <b> and <i> in my htmlText

Upvotes: 0

Related Questions