Locale:...:MACTHAI(3)
π Locale::RecodeData::MACTHAI(3) β the vibe
okay so, bestie, quick orientation: this is a page from the User Contributed Perl Documentation, section 3 β the manual name is Locale::RecodeData::MACTHAI. Yes the header line has a cute little Locale:...: ellipsis thing going on, but the actual module we're talking about is the MACTHAI one. Got it? Good. π«Ά
β¨ NAME β¨
Locale::RecodeData::MACTHAI β literally just the conversion routines for MACTHAI. That's the whole job. π
πΈ SYNOPSIS πΈ
β οΈ okay so this is the important bit, no cap:
This module is internal to libintl. Do not use directly!
Like, fr fr β it's giving backstage-pass-only energy. It's not for you, it's for libintl doing its thing. π
π¦ DESCRIPTION π¦
So this module is generated β nobody hand-wrote it, it just exists β and it contains the conversion tables and routines for MACTHAI. That's it. That's the whole personality. β¨
π COMMENTS π
The following comments have been extracted from the original charmap:
This charmap has been generated automatically from GNU libiconv
conversions.
So yeah, automatically generated from GNU libiconv conversions β icon, honestly. π
π tiny heads-up: please note that the aliases listed above are not necessarily valid! Like, don't just trust them blindly, bestie.
π₯ CHARACTER TABLE π₯
Here's the tea about the table that's coming: the following table is sorted in the same order as the original charmap. All character codes are in hexadecimal. And when your eyes hit 'ISO-10646', you read it as 'ISO-10646-UCS4'. Periodt. π
(...and that's the setup β the actual character table is up next, so stay tuned π)
okay bestie, deep breath π«Ά β this is the part where the page stops explaining and just drops the entire table on you. And honestly? It ate. Because this is literally every byte in the MACTHAI locale, what ISO-10646 code point it turns into, and the official Unicode name of that character. Three columns, no cap:
- Local β the actual byte, in hex, from
00all the way toFA. π - ISO-10646 β the code point it maps to, printed all 8 digits wide.
- Description β the character's official name, plus its abbreviation in parens when it's got one.
Same header, every chunk. Let's go. π
πΌ 00β1F β the control characters (invisible main character energy)
Nothing to see here, but everything to feel β these are your classic control codes, and every single one keeps its plain ASCII meaning. Also yes, 10 is DATALINK ESCAPE (DLE) and not the more common DATA LINK ESCAPE β that's what the table says, so that's what we're saying. π
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
00 | 00000000 | NULL (NUL)
01 | 00000001 | START OF HEADING (SOH)
02 | 00000002 | START OF TEXT (STX)
03 | 00000003 | END OF TEXT (ETX)
04 | 00000004 | END OF TRANSMISSION (EOT)
05 | 00000005 | ENQUIRY (ENQ)
06 | 00000006 | ACKNOWLEDGE (ACK)
07 | 00000007 | BELL (BEL)
08 | 00000008 | BACKSPACE (BS)
09 | 00000009 | CHARACTER TABULATION (HT)
0A | 0000000A | LINE FEED (LF)
0B | 0000000B | LINE TABULATION (VT)
0C | 0000000C | FORM FEED (FF)
0D | 0000000D | CARRIAGE RETURN (CR)
0E | 0000000E | SHIFT OUT (SO)
0F | 0000000F | SHIFT IN (SI)
10 | 00000010 | DATALINK ESCAPE (DLE)
11 | 00000011 | DEVICE CONTROL ONE (DC1)
12 | 00000012 | DEVICE CONTROL TWO (DC2)
13 | 00000013 | DEVICE CONTROL THREE (DC3)
14 | 00000014 | DEVICE CONTROL FOUR (DC4)
15 | 00000015 | NEGATIVE ACKNOWLEDGE (NAK)
16 | 00000016 | SYNCHRONOUS IDLE (SYN)
17 | 00000017 | END OF TRANSMISSION BLOCK (ETB)
18 | 00000018 | CANCEL (CAN)
19 | 00000019 | END OF MEDIUM (EM)
1A | 0000001A | SUBSTITUTE (SUB)
1B | 0000001B | ESCAPE (ESC)
1C | 0000001C | FILE SEPARATOR (IS4)
1D | 0000001D | GROUP SEPARATOR (IS3)
1E | 0000001E | RECORD SEPARATOR (IS2)
1F | 0000001F | UNIT SEPARATOR (IS1)
β¨ 20β7F β the classic ASCII era, fully iconic
This whole range is just regular ASCII, one for one β the byte 41 is LATIN CAPITAL LETTER A, periodt. The only little moment is at the end: 7F is DELETE (DEL), which is exactly where plain ASCII stops. π
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
20 | 00000020 | SPACE
21 | 00000021 | EXCLAMATION MARK
22 | 00000022 | QUOTATION MARK
23 | 00000023 | NUMBER SIGN
24 | 00000024 | DOLLAR SIGN
25 | 00000025 | PERCENT SIGN
26 | 00000026 | AMPERSAND
27 | 00000027 | APOSTROPHE
28 | 00000028 | LEFT PARENTHESIS
29 | 00000029 | RIGHT PARENTHESIS
2A | 0000002A | ASTERISK
2B | 0000002B | PLUS SIGN
2C | 0000002C | COMMA
2D | 0000002D | HYPHEN-MINUS
2E | 0000002E | FULL STOP
2F | 0000002F | SOLIDUS
30 | 00000030 | DIGIT ZERO
31 | 00000031 | DIGIT ONE
32 | 00000032 | DIGIT TWO
33 | 00000033 | DIGIT THREE
34 | 00000034 | DIGIT FOUR
35 | 00000035 | DIGIT FIVE
36 | 00000036 | DIGIT SIX
37 | 00000037 | DIGIT SEVEN
38 | 00000038 | DIGIT EIGHT
39 | 00000039 | DIGIT NINE
3A | 0000003A | COLON
3B | 0000003B | SEMICOLON
3C | 0000003C | LESS-THAN SIGN
3D | 0000003D | EQUALS SIGN
3E | 0000003E | GREATER-THAN SIGN
3F | 0000003F | QUESTION MARK
40 | 00000040 | COMMERCIAL AT
41 | 00000041 | LATIN CAPITAL LETTER A
42 | 00000042 | LATIN CAPITAL LETTER B
43 | 00000043 | LATIN CAPITAL LETTER C
44 | 00000044 | LATIN CAPITAL LETTER D
45 | 00000045 | LATIN CAPITAL LETTER E
46 | 00000046 | LATIN CAPITAL LETTER F
47 | 00000047 | LATIN CAPITAL LETTER G
48 | 00000048 | LATIN CAPITAL LETTER H
49 | 00000049 | LATIN CAPITAL LETTER I
4A | 0000004A | LATIN CAPITAL LETTER J
4B | 0000004B | LATIN CAPITAL LETTER K
4C | 0000004C | LATIN CAPITAL LETTER L
4D | 0000004D | LATIN CAPITAL LETTER M
4E | 0000004E | LATIN CAPITAL LETTER N
4F | 0000004F | LATIN CAPITAL LETTER O
50 | 00000050 | LATIN CAPITAL LETTER P
51 | 00000051 | LATIN CAPITAL LETTER Q
52 | 00000052 | LATIN CAPITAL LETTER R
53 | 00000053 | LATIN CAPITAL LETTER S
54 | 00000054 | LATIN CAPITAL LETTER T
55 | 00000055 | LATIN CAPITAL LETTER U
56 | 00000056 | LATIN CAPITAL LETTER V
57 | 00000057 | LATIN CAPITAL LETTER W
58 | 00000058 | LATIN CAPITAL LETTER X
59 | 00000059 | LATIN CAPITAL LETTER Y
5A | 0000005A | LATIN CAPITAL LETTER Z
5B | 0000005B | LEFT SQUARE BRACKET
5C | 0000005C | REVERSE SOLIDUS
5D | 0000005D | RIGHT SQUARE BRACKET
5E | 0000005E | CIRCUMFLEX ACCENT
5F | 0000005F | LOW LINE
60 | 00000060 | GRAVE ACCENT
61 | 00000061 | LATIN SMALL LETTER A
62 | 00000062 | LATIN SMALL LETTER B
63 | 00000063 | LATIN SMALL LETTER C
64 | 00000064 | LATIN SMALL LETTER D
65 | 00000065 | LATIN SMALL LETTER E
66 | 00000066 | LATIN SMALL LETTER F
67 | 00000067 | LATIN SMALL LETTER G
68 | 00000068 | LATIN SMALL LETTER H
69 | 00000069 | LATIN SMALL LETTER I
6A | 0000006A | LATIN SMALL LETTER J
6B | 0000006B | LATIN SMALL LETTER K
6C | 0000006C | LATIN SMALL LETTER L
6D | 0000006D | LATIN SMALL LETTER M
6E | 0000006E | LATIN SMALL LETTER N
6F | 0000006F | LATIN SMALL LETTER O
70 | 00000070 | LATIN SMALL LETTER P
71 | 00000071 | LATIN SMALL LETTER Q
72 | 00000072 | LATIN SMALL LETTER R
73 | 00000073 | LATIN SMALL LETTER S
74 | 00000074 | LATIN SMALL LETTER T
75 | 00000075 | LATIN SMALL LETTER U
76 | 00000076 | LATIN SMALL LETTER V
77 | 00000077 | LATIN SMALL LETTER W
78 | 00000078 | LATIN SMALL LETTER X
79 | 00000079 | LATIN SMALL LETTER Y
7A | 0000007A | LATIN SMALL LETTER Z
7B | 0000007B | LEFT CURLY BRACKET
7C | 0000007C | VERTICAL LINE
7D | 0000007D | RIGHT CURLY BRACKET
7E | 0000007E | TILDE
7F | 0000007F | DELETE (DEL)
π 80β9E β ok this is where it gets weird (affectionate)
High half time, and it's giving chaos in the best way. You've got your fancy punctuation β angle quotes, a HORIZONTAL ELLIPSIS, curly double and single quotes, a BULLET β and then a whole swarm of private-use code points in F88BβF899 that the page just labels E<lt>CJKE<gt>.
A little note on that: the E<lt> and E<gt> bits are just POD escaping for angle brackets, so in real life those labels read <CJKE>. Keeping them exactly as the page prints them though, because facts are facts. π
Also: there's no 90 row. The table just skips it. Not me making stuff up β it's genuinely not there. π
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
80 | 000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
81 | 000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
82 | 00002026 | HORIZONTAL ELLIPSIS
83 | 0000F88C | E<lt>CJKE<gt>
84 | 0000F88F | E<lt>CJKE<gt>
85 | 0000F892 | E<lt>CJKE<gt>
86 | 0000F895 | E<lt>CJKE<gt>
87 | 0000F898 | E<lt>CJKE<gt>
88 | 0000F88B | E<lt>CJKE<gt>
89 | 0000F88E | E<lt>CJKE<gt>
8A | 0000F891 | E<lt>CJKE<gt>
8B | 0000F894 | E<lt>CJKE<gt>
8C | 0000F897 | E<lt>CJKE<gt>
8D | 0000201C | LEFT DOUBLE QUOTATION MARK
8E | 0000201D | RIGHT DOUBLE QUOTATION MARK
8F | 0000F899 | E<lt>CJKE<gt>
91 | 00002022 | BULLET
92 | 0000F884 | E<lt>CJKE<gt>
93 | 0000F889 | E<lt>CJKE<gt>
94 | 0000F885 | E<lt>CJKE<gt>
95 | 0000F886 | E<lt>CJKE<gt>
96 | 0000F887 | E<lt>CJKE<gt>
97 | 0000F888 | E<lt>CJKE<gt>
98 | 0000F88A | E<lt>CJKE<gt>
99 | 0000F88D | E<lt>CJKE<gt>
9A | 0000F890 | E<lt>CJKE<gt>
9B | 0000F893 | E<lt>CJKE<gt>
9C | 0000F896 | E<lt>CJKE<gt>
9D | 00002018 | LEFT SINGLE QUOTATION MARK
9E | 00002019 | RIGHT SINGLE QUOTATION MARK
π¦ A0βDA β the Thai letter block, absolute queen behaviour π
A0 is a NO-BREAK SPACE (one last breather), and then from A1 onward it's wall-to-wall Thai characters, code points marching cleanly from 0E01 up to 0E3A. Consonants first β KO KAI through HO NOKHUK β then the vowel signs and marks from SARA A down to PHINTHU. Every one of these is named THAI CHARACTER something, and yes the names are in all caps, that's just how Unicode names roll. Periodt. π
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
A0 | 000000A0 | NO-BREAK SPACE
A1 | 00000E01 | THAI CHARACTER KO KAI
A2 | 00000E02 | THAI CHARACTER KHO KHAI
A3 | 00000E03 | THAI CHARACTER KHO KHUAT
A4 | 00000E04 | THAI CHARACTER KHO KHWAI
A5 | 00000E05 | THAI CHARACTER KHO KHON
A6 | 00000E06 | THAI CHARACTER KHO RAKHANG
A7 | 00000E07 | THAI CHARACTER NGO NGU
A8 | 00000E08 | THAI CHARACTER CHO CHAN
A9 | 00000E09 | THAI CHARACTER CHO CHING
AA | 00000E0A | THAI CHARACTER CHO CHANG
AB | 00000E0B | THAI CHARACTER SO SO
AC | 00000E0C | THAI CHARACTER CHO CHOE
AD | 00000E0D | THAI CHARACTER YO YING
AE | 00000E0E | THAI CHARACTER DO CHADA
AF | 00000E0F | THAI CHARACTER TO PATAK
B0 | 00000E10 | THAI CHARACTER THO THAN
B1 | 00000E11 | THAI CHARACTER THO NANGMONTHO
B2 | 00000E12 | THAI CHARACTER THO PHUTHAO
B3 | 00000E13 | THAI CHARACTER NO NEN
B4 | 00000E14 | THAI CHARACTER DO DEK
B5 | 00000E15 | THAI CHARACTER TO TAO
B6 | 00000E16 | THAI CHARACTER THO THUNG
B7 | 00000E17 | THAI CHARACTER THO THAHAN
B8 | 00000E18 | THAI CHARACTER THO THONG
B9 | 00000E19 | THAI CHARACTER NO NU
BA | 00000E1A | THAI CHARACTER BO BAIMAI
BB | 00000E1B | THAI CHARACTER PO PLA
BC | 00000E1C | THAI CHARACTER PHO PHUNG
BD | 00000E1D | THAI CHARACTER FO FA
BE | 00000E1E | THAI CHARACTER PHO PHAN
BF | 00000E1F | THAI CHARACTER FO FAN
C0 | 00000E20 | THAI CHARACTER PHO SAMPHAO
C1 | 00000E21 | THAI CHARACTER MO MA
C2 | 00000E22 | THAI CHARACTER YO YAK
C3 | 00000E23 | THAI CHARACTER RO RUA
C4 | 00000E24 | THAI CHARACTER RU
C5 | 00000E25 | THAI CHARACTER LO LING
C6 | 00000E26 | THAI CHARACTER LU
C7 | 00000E27 | THAI CHARACTER WO WAEN
C8 | 00000E28 | THAI CHARACTER SO SALA
C9 | 00000E29 | THAI CHARACTER SO RUSI
CA | 00000E2A | THAI CHARACTER SO SUA
CB | 00000E2B | THAI CHARACTER HO HIP
CC | 00000E2C | THAI CHARACTER LO CHULA
CD | 00000E2D | THAI CHARACTER O ANG
CE | 00000E2E | THAI CHARACTER HO NOKHUK
CF | 00000E2F | THAI CHARACTER PAIYANNOI
D0 | 00000E30 | THAI CHARACTER SARA A
D1 | 00000E31 | THAI CHARACTER MAI HAN-AKAT
D2 | 00000E32 | THAI CHARACTER SARA AA
D3 | 00000E33 | THAI CHARACTER SARA AM
D4 | 00000E34 | THAI CHARACTER SARA I
D5 | 00000E35 | THAI CHARACTER SARA II
D6 | 00000E36 | THAI CHARACTER SARA UE
D7 | 00000E37 | THAI CHARACTER SARA UEE
D8 | 00000E38 | THAI CHARACTER SARA U
D9 | 00000E39 | THAI CHARACTER SARA UU
DA | 00000E3A | THAI CHARACTER PHINTHU
πΈ DBβEF β zero-widths, dashes, and the rest of the Thai marks
Bestie, this stretch is a journey. It opens with two invisible legends β ZERO WIDTH NO-BREAK SPACE at FEFF and ZERO WIDTH SPACE at 200B β then hits you with EN DASH and EM DASH, then the THAI CURRENCY SYMBOL BAHT, then the vowel signs SARA E through SARA AI MAIMALAI, then the diacritic marks all the way to NIKHAHIT. And then, completely unbothered, two icons sneak in: TRADE MARK SIGN and, breathing hard at the end of the block, THAI CHARACTER FONGMAN. π₯
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
DB | 0000FEFF | ZERO WIDTH NO-BREAK SPACE
DC | 0000200B | ZERO WIDTH SPACE
DD | 00002013 | EN DASH
DE | 00002014 | EM DASH
DF | 00000E3F | THAI CURRENCY SYMBOL BAHT
E0 | 00000E40 | THAI CHARACTER SARA E
E1 | 00000E41 | THAI CHARACTER SARA AE
E2 | 00000E42 | THAI CHARACTER SARA O
E3 | 00000E43 | THAI CHARACTER SARA AI MAIMUAN
E4 | 00000E44 | THAI CHARACTER SARA AI MAIMALAI
E5 | 00000E45 | THAI CHARACTER LAKKHANGYAO
E6 | 00000E46 | THAI CHARACTER MAIYAMOK
E7 | 00000E47 | THAI CHARACTER MAITAIKHU
E8 | 00000E48 | THAI CHARACTER MAI EK
E9 | 00000E49 | THAI CHARACTER MAI THO
EA | 00000E4A | THAI CHARACTER MAI TRI
EB | 00000E4B | THAI CHARACTER MAI CHATTAWA
EC | 00000E4C | THAI CHARACTER THANTHAKHAT
ED | 00000E4D | THAI CHARACTER NIKHAHIT
EE | 00002122 | TRADE MARK SIGN
EF | 00000E4F | THAI CHARACTER FONGMAN
π’ F0βFA β Thai digits and the grand finale β
Last stretch, and it's a clean one: THAI DIGIT ZERO through THAI DIGIT NINE, ticking up 0E50 to 0E59 like a countdown. Then FA lands on REGISTERED SIGN at 000000AE β and that's it, the table just stops there, no FB, no FC, nothing. The page said what it said. π
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
F0 | 00000E50 | THAI DIGIT ZERO
F1 | 00000E51 | THAI DIGIT ONE
F2 | 00000E52 | THAI DIGIT TWO
F3 | 00000E53 | THAI DIGIT THREE
F4 | 00000E54 | THAI DIGIT FOUR
F5 | 00000E55 | THAI DIGIT FIVE
F6 | 00000E56 | THAI DIGIT SIX
F7 | 00000E57 | THAI DIGIT SEVEN
F8 | 00000E58 | THAI DIGIT EIGHT
F9 | 00000E59 | THAI DIGIT NINE
FA | 000000AE | REGISTERED SIGN
okay so that's the whole character table, every single byte of it, and there's still more page to get through β keep scrolling bestie π
FB | 000000A9 | COPYRIGHT SIGN
And thatβs the character table fully wrapped, bestie π β final row, no notes.
π AUTHOR π
Copyright vibes, all official: Copyright (C) 2002-2017 Guido Flohr <http://www.guido-flohr.net/> and (<mailto:guido.flohr@cantanea.com>) β all rights reserved π«Ά.
And yes, the page says to see the source code for details, with the exact text: See the source code for details!code for details! (the duplication is literally in there, ngl π).
π¦ SEE ALSO π
Thatβs a wrap on the whole man page, bestie! π Footer source/version and date, for the record: perl v5.42.0, dated 2025-01-22, with the footer page name Locale:...:MACTHAI(3). Periodt. π
π¦ where this page comes from
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 Β· GPL-3.0-or-later
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 Β· GPL-3.0-or-later
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 Β· GPL-3.0-or-later
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms