---
name: "Structured Text"
type: topic
aliases: ["Text"]
source: https://community.bistudio.com/wiki/Structured_Text
revid: 364507
updated: 2024-05-16T20:42:02Z
---

# Structured Text

Structured Text is a Data Type that has been introduced with Armed Assault. It is a **rich text**, which is able to include images and formatting. It can be created using XML-like syntax, as seen [below](../topics/Structured_Text.md#markup). However, using XML-like syntax alone is not going to turn a normal string into structured text, it should be converted to TEXT first.

> [!IMPORTANT]
> This type is not meant to be used with remote execution. Executing `[parseText "test"] remoteExec ["hint"];` will result in the following rpt message:
>
> `Performance warning: SimpleSerialization::Write 'params' is using type of ',TEXT' which is not optimized by simple serialization, falling back to generic serialization, use generic type or ask for optimizations for these types`
>
> Parse the text on the receiving client instead.

### Commands

- See Command Group: Structured Text for all related commands.

### Markups

#### Syntax

All attribute values should be encapsulated in double `"..."` or single `'...'` quotes. Both of the following are correct:

```html
<t size="2.0">Large text</t>
<t size='2.0'>Large text</t>
```

> [!WARNING]
> The following will log an *.rpt* error `Unknown attribute .0` and only number 2 would be taken into account:
>
> ```html
> <t size=2.0>Large text</t>
> ```

#### Text

Texts could be created with the following markup:

```html
<t>Hello World!</t>
```

Or could also be inserted via the [composeText](../commands/composeText.md) / [formatText](../commands/formatText.md) and [text](../commands/text.md) commands.

##### Special characters

To insert special characters, such as `<`, `>`, etc. you can use the [HTML representation](https://dev.w3.org/html5/html-author/charref) of that character, e.g.:

| Character | HTML |
|---|---|
| < | `<` |
| > | `>` |
| non-breaking space |  |
| ... | ... |

> [!IMPORTANT]
> Using a special character directly will result in it being displayed as "?" or, in the case of writing "<TEXT>", will result in an error in the RPT: `Wrong text element 'TEXT'`

#### Line break

Line breaks could be created with either of the following markups:

```html
<br/>
<br />
<br></br>
```

Or could also be inserted via the [composeText](../commands/composeText.md) / [formatText](../commands/formatText.md) and [lineBreak](../commands/lineBreak.md) commands.

#### Image

Images could be created with either of the following markups:

```html
<img image='\a3\Data_f\Flags\flag_Altis_co.paa'/>
<img image='\a3\Data_f\Flags\flag_Altis_co.paa' />
<img image='\a3\Data_f\Flags\flag_Altis_co.paa'></img>
```

Or could also be inserted via the [composeText](../commands/composeText.md) / [formatText](../commands/formatText.md) and [image](../commands/image.md) commands.

#### Hyperlink (Arma 3)

Clickable links, similar to HTML hyperlinks, could be created with the following markup:

```html
<a href='http://arma3.com'>Arma 3</a>
```

By default the links are not underlined or have a different color to stand out. These attributes should be added separately.

Note: *&* should be escaped by *&amp;*.

```html
<a href='https://arma3.com/?foo&bar'>Example URL A</a> <!-- will not work -->
<a href='https://arma3.com/?foo&bar'>Example URL B</a> <!-- will work -->
```

### Attributes

The following inline attributes are supported:
- `size`
- `color`
- `font`
- `align`
- `valign`
- `underline`
- `shadow`
- `shadowColor`
- `shadowOffset`
- `colorLink`
- `href`
- `image`

#### Size

The structured text `size` attribute is a multiplier for the value of control config property `size`. Default is 1, meaning that the height of letters will be equal to the value set in config. Setting this to 2 will make letters 2 times the size, 0.5 will make them half the size, etc. If the control is defined as follows:

```cpp
class MyStructuredText : RscStructuredText 
{
    ...
    text = "Hello!";
    size = 0.04;
    ...
};
```

Then the structured text:

```sqf
_control ctrlSetStructuredText parseText "<t size='2'>Hello!</t>";
```

Will result in a total text size of 0.04 * 2 = 0.08. Unfortunately, there is no script command to set or get the value of config `size` property dynamically.

#### Color

The `color` attribute is similar to HTML hex color and could either have format [#RRGGBB](https://en.wikipedia.org/wiki/RGB) or [#AARRGGBB](https://en.wikipedia.org/wiki/ARGB).

```html
<t color='#ff0000'>Red text</t>
<t color='#99ffffff'>Semi-transparent white text</t>
```

#### Font

The value for the `font` attribute could be found in `CfgFontFamilies` config. Some of the Arma 3 fonts:
- `EtelkaMonospacePro`
- `EtelkaMonospaceProBold`
- `EtelkaNarrowMediumPro`
- `LCD14`
- `LucidaConsoleB`
- `PuristaBold`
- `PuristaLight`
- `PuristaMedium`
- `PuristaSemibold`
- `RobotoCondensed`
- `RobotoCondensedBold`
- `RobotoCondensedLight`
- `TahomaB`

```html
<t font='PuristaBold'>Bold Text</t>
<t font='LCD14'>Wicked looking text</t>
```

#### Horizontal Alignment

The `align` attribute controls horizontal text alignment and could be one of the following:
- `left`
- `center`
- `right`

```html
<t align='right'>Text displayed to the right</t>
```

#### Vertical Alignment

The `valign` attribute controls vertical text alignment and could be one of the following:
- `top`
- `middle`
- `bottom`

```html
<t valign='bottom'>Text displayed at the bottom</t>
```

#### Underline

The `underline` attribute underlines each individual word in text. The normal spaces are not underlined.

```html
<t underline='1'>Underlined Text</t>
```

> [!NOTE]
> If you would like to have a continuous underline between words, use non-breaking spaces. This could be achieved in several ways:
> - Insertion from keyboard: [Alt+255](https://en.wikipedia.org/wiki/Non-breaking_space#Keyboard_entry_methods)
> - Scripted method:
>
> ```sqf
> hint parseText format ["<t underline='1'>%1</t>", "Underlined Text" splitString " " joinString toString [160]]
> ```
>
> - Using HTML code:
>
> ```sqf
> hint parseText "<t underline='1'>Underlined&#160;Text</t>";
> ```

#### Shadow

The `shadow` attribute controls the appearance of shadow/outline around text and could be one of the following:
- `0` - normal text
- `1` - classic shadow (text ghosting below and to the right)
- `2` - outline (slight, always black, outline around characters)

```html
<t shadow='0'>Text with no shadow</t>
<t shadow='1'>Text with default black shadow</t>
<t shadow='2'>Text with default black outline</t>
```

#### Shadow Color

The `shadowColor` attribute controls the color of the shadow (not the outline, which is always black for some reason)

```html
<t shadow='1' shadowColor='#ff0000'>Text with red shadow</t>
```

#### Shadow Offset

The `shadowOffset` attribute controls how far is the shadow offset from the text source (has no effect on the outline)

```html
<t shadow='1' shadowColor='#ff0000' shadowOffset='0.5'>Text with red shadow, which is offset by half character size</t>
```

#### Link Color

Will change the color of the text if the text is a link, otherwise the text color is unaffected.

```html
<t colorLink='#0000ff'><a href='http://www.arma3.com/'>Blue text</a></t>
<a colorLink='#0000ff' href='http://www.arma3.com/'>Blue text too</a>
<t colorLink='#0000ff'>Normal text color</t>
```

#### Hyperlink Reference

The `href` attribute is essential part of the `<a>` tag and should contain URL of the destination (See [Hyperlink](../topics/Structured_Text.md#hyperlink)).

#### Image Reference

The `image` attribute is essential part of the `<img>` tag and should contain filepath to the image (See [Image](../topics/Structured_Text.md#image)).

### SQF Code Examples

`align` `valign` demo:

```sqf
hint parseText "<t size='3'><t size='1' valign='top' align='right'>Top Right</t> <t size='1' valign='middle' align='center'>Middle Center</t> <t size='1' valign='bottom' align='left'>Bottom Left</t></t>";
```

> [!NOTE]
> Sometimes an extra space is required when outputting to [hint](../commands/hint.md). In the above example spaces between `<t>`s inside another `<t>` wrapper ensure that the hint will be 3 lines tall

Create clickable image:

```sqf
_ctrl = findDisplay 46 createDisplay "RscDisplayEmpty" ctrlCreate ["RscStructuredText", -1];
_ctrl ctrlSetPosition [0,0,1,1];
_ctrl ctrlCommit 0;
_ctrl ctrlSetStructuredText parseText "<a color='#00FF00' size='5' href='http://arma3.com'><img image='\A3\weapons_f\ammoBoxes\data\ui\map_AmmoBox_F_CA.paa' /></a>";
```

The use of [composeText](../commands/composeText.md):

```sqf
_separator = parseText "<br />------------------------<br />";
_image = "\a3\Data_f\Flags\flag_Altis_co.paa";
_txt1 = text "left";
_txt1 setAttributes ["align", "left"];
_txt2 = text "right";
_txt2 setAttributes ["align", "right"];
_structuredText = composeText [image _image, lineBreak, lineBreak, text "Heading Text", _separator, _txt1, _txt2];
hint _structuredText;
```

<sub>Source: [BI Community Wiki — Structured Text](https://community.bistudio.com/wiki/Structured_Text) (revision 364507).</sub>
