You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Each character is a sequence of codepoints (one or more) - this is the so-called grapheme cluster. Using a font, this sequence is translated into a glyph run. The final scaling and rasterization of the glyph run is done into a rectangular terminal cell matrix, defined either implicitly based on the Unicode properties of the cluster codepoints, or explicitly using a modifier codepoint from the Unicode codepoint range 0xD0000-0xD02A2.
22
+
Each character is a sequence of codepoints (one or more) - this is the so-called grapheme cluster. Using a font, this sequence is translated into a glyph run. The final scaling and rasterization of the glyph run is done into a rectangular terminal cell matrix, defined either implicitly based on the Unicode properties of the cluster codepoints, or explicitly using a modifier codepoint from the Unicode codepoint range 0xD0000-0xD08F6.
23
23
24
24
Matrix fragments up to 16x4 cells require at least four associated integer values, which can be packed into Unicode codepoint space by enumerating "wh_xy" values:
25
25
- w: Character matrix width.
@@ -28,34 +28,43 @@ Matrix fragments up to 16x4 cells require at least four associated integer value
28
28
- y: Vertical fragment selector inside the matrix.
29
29
- For character matrices larger than 16x4, pixel graphics should be used.
Terminals can annotate each scrollback cell with character matrix metadata and use it to display either the entire character image or a specific fragment within the cell.
34
36
35
37
Users can explicitly specify the size of the character matrix (by zeroing `_xy`) or select any fragment of it (non-zero `_xy`) by placing a specific modifier character after the grapheme cluster.
36
38
37
-
### //todo geometry modifiers are outdated since v0.9.99.67
38
-
39
-
- Example 1. Output a 3x1 character:
39
+
- Example 1. Output a 3x1 (31_00) character:
40
+
-`pwsh`
41
+
```pwsh
42
+
"👩👩👧👧`u{D009F}"
43
+
```
44
+
- `wsl/bash`
45
+
```bash
46
+
printf "👩👩👧👧\UD009F\n"
47
+
```
48
+
- Example 2. Output a 6x2 character (by stacking two 6x1 fragments 62_01 and 62_02 on top of each other):
40
49
- `pwsh`
41
50
```pwsh
42
-
"👩👩👧👧`u{D0033}"
51
+
"👩👩👧👧`u{D0279}`n👩👩👧👧`u{D0312}"
43
52
```
44
53
- `wsl/bash`
45
54
```bash
46
-
printf "👩👩👧👧\UD0033\n"
55
+
printf "👩👩👧👧\UD0279\n👩👩👧👧\UD0312\n"
47
56
```
48
-
- Example 2. Output a 6x2 character (by stacking two 6x1 fragments on top of each other due to the linear nature of the terminal):
57
+
- Example 3. Output the longest word in the Hindi language 16x1 (G1_00):
@@ -103,7 +112,7 @@ To set arbitrary boundaries, the C0 control character `ASCII 0x02 STX` is used,
103
112
104
113
## Another brick in the wall
105
114
106
-
> At present only standardized variation sequences with VS1, VS2, VS3, VS15 and VS16 have been defined; VS15 and VS16 are reserved to request that a character should be displayed as text or as an emoji) respectively.
115
+
> At present only standardized variation sequences with VS1, VS2, VS3, VS15 and VS16 have been defined; VS15 and VS16 are reserved to request that a character should be displayed as text or as an emoji respectively.
107
116
108
117
> VS4–VS14 (U+FE03–U+FE0D) are not used for any variation sequences
109
118
@@ -152,4 +161,4 @@ int get_hflip(int state) { int hflip = state >> 2; return hflip; }
0 commit comments