요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Unicode support
===============
Last update: 2005-01-17, version 1.4
Note: The original version of this document, which was maintained at
lanana.org as part of the Linux Assigned Names And Numbers Authority
(LANANA) project, is no longer existent. So, this version in the
mainline Linux kernel is now the maintained main document.
Introduction
------------
The Linux kernel code has been rewritten to use Unicode to map
characters to fonts. By downloading a single Unicode-to-font table,
both the eight-bit character sets and UTF-8 mode are changed to use
the font as indicated.
This changes the semantics of the eight-bit character tables subtly.
The four character tables are now:
=============== =============================== ================
Map symbol Map name Escape code (G0)
=============== =============================== ================
LAT1_MAP Latin-1 (ISO 8859-1) ESC ( B
GRAF_MAP DEC VT100 pseudographics ESC ( 0
IBMPC_MAP IBM code page 437 ESC ( U
USER_MAP User defined ESC ( K
=============== =============================== ================
In particular, ESC ( U is no longer "straight to font", since the font
might be completely different than the IBM character set. This
permits for example the use of block graphics even with a Latin-1 font
loaded.
Note that although these codes are similar to ISO 2022, neither the
codes nor their uses match ISO 2022; Linux has two 8-bit codes (G0 and
G1), whereas ISO 2022 has four 7-bit codes (G0-G3).
In accordance with the Unicode standard/ISO 10646 the range U+F000 to
U+F8FF has been reserved for OS-wide allocation (the Unicode Standard
refers to this as a "Corporate Zone", since this is inaccurate for
Linux we call it the "Linux Zone"). U+F000 was picked as the starting
point since it lets the direct-mapping area start on a large power of
two (in case 1024- or 2048-character fonts ever become necessary).
This leaves U+E000 to U+EFFF as End User Zone.
[v1.2]: The Unicodes range from U+F000 and up to U+F7FF have been
hard-coded to map directly to the loaded font, bypassing the
translation table. The user-defined map now defaults to U+F000 to
U+F0FF, emulating the previous behaviour. In practice, this range
might be shorter; for example, vgacon can only handle 256-character
(U+F000..U+F0FF) or 512-character (U+F000..U+F1FF) fonts.
Actual characters assigned in the Linux Zone
--------------------------------------------
In addition, the following characters not present in Unicode 1.1.4
have been defined; these are used by the DEC VT graphics map. [v1.2]
THIS USE IS OBSOLETE AND SHOULD NO LONGER BE USED; PLEASE SEE BELOW.
====== ======================================
U+F800 DEC VT GRAPHICS HORIZONTAL LINE SCAN 1
U+F801 DEC VT GRAPHICS HORIZONTAL LINE SCAN 3
U+F803 DEC VT GRAPHICS HORIZONTAL LINE SCAN 7
U+F804 DEC VT GRAPHICS HORIZONTAL LINE SCAN 9
====== ======================================
The DEC VT220 uses a 6x10 character matrix, and these characters form
a smooth progression in the DEC VT graphics character set. I have
omitted the scan 5 line, since it is also used as a block-graphics
character, and hence has been coded as U+2500 FORMS LIGHT HORIZONTAL.
[v1.3]: These characters have been officially added to Unicode 3.2.0;
they are added at U+23BA, U+23BB, U+23BC, U+23BD. Linux now uses the
new values.
[v1.2]: The following characters have been added to represent common
keyboard symbols that are unlikely to ever be added to Unicode proper
since they are horribly vendor-specific. This, of course, is an
excellent example of horrible design.
====== ======================================
U+F810 KEYBOARD SYMBOL FLYING FLAG
U+F811 KEYBOARD SYMBOL PULLDOWN MENU
U+F812 KEYBOARD SYMBOL OPEN APPLE
U+F813 KEYBOARD SYMBOL SOLID APPLE
====== ======================================
Klingon language support
------------------------
In 1996, Linux was the first operating system in the world to add
support for the artificial language Klingon, created by Marc Okrand
for the "Star Trek" television series. This encoding was later
adopted by the ConScript Unicode Registry and proposed (but ultimately
rejected) for inclusion in Unicode Plane 1. Thus, it remains as a
Linux/CSUR private assignment in the Linux Zone.
This encoding has been endorsed by the Klingon Language Institute.
For more information, contact them at:
http://www.kli.org/
Since the characters in the beginning of the Linux CZ have been more
of the dingbats/symbols/forms type and this is a language, I have
located it at the end, on a 16-cell boundary in keeping with standard
Unicode practice.
.. note::
This range is now officially managed by the ConScript Unicode
Registry. The normative reference is at:
https://www.evertype.com/standards/csur/klingon.html
Klingon has an alphabet of 26 characters, a positional numeric writing
system with 10 digits, and is written left-to-right, top-to-bottom.
Several glyph forms for the Klingon alphabet have been proposed.
However, since the set of symbols appear to be consistent throughout,
with only the actual shapes being different, in keeping with standard
Unicode practice these differences are considered font variants.
====== =======================================================
U+F8D0 KLINGON LETTER A
U+F8D1 KLINGON LETTER B
U+F8D2 KLINGON LETTER CH
U+F8D3 KLINGON LETTER D
U+F8D4 KLINGON LETTER E
U+F8D5 KLINGON LETTER GH
U+F8D6 KLINGON LETTER H
U+F8D7 KLINGON LETTER I
U+F8D8 KLINGON LETTER J
U+F8D9 KLINGON LETTER L
U+F8DA KLINGON LETTER M
U+F8DB KLINGON LETTER N
U+F8DC KLINGON LETTER NG
U+F8DD KLINGON LETTER O
U+F8DE KLINGON LETTER P
U+F8DF KLINGON LETTER Q
- Written <q> in standard Okrand Latin transliteration
U+F8E0 KLINGON LETTER QH
- Written <Q> in standard Okrand Latin transliteration
U+F8E1 KLINGON LETTER R
U+F8E2 KLINGON LETTER S
U+F8E3 KLINGON LETTER T
U+F8E4 KLINGON LETTER TLH
U+F8E5 KLINGON LETTER U
U+F8E6 KLINGON LETTER V
U+F8E7 KLINGON LETTER W
U+F8E8 KLINGON LETTER Y
U+F8E9 KLINGON LETTER GLOTTAL STOP
U+F8F0 KLINGON DIGIT ZERO
U+F8F1 KLINGON DIGIT ONE
U+F8F2 KLINGON DIGIT TWO
U+F8F3 KLINGON DIGIT THREE
U+F8F4 KLINGON DIGIT FOUR
U+F8F5 KLINGON DIGIT FIVE
U+F8F6 KLINGON DIGIT SIX
U+F8F7 KLINGON DIGIT SEVEN
U+F8F8 KLINGON DIGIT EIGHT
U+F8F9 KLINGON DIGIT NINE
U+F8FD KLINGON COMMA
U+F8FE KLINGON FULL STOP
U+F8FF KLINGON SYMBOL FOR EMPIRE
====== =======================================================
Other Fictional and Artificial Scripts
--------------------------------------
Since the assignment of the Klingon Linux Unicode block, a registry of
fictional and artificial scripts has been established by John Cowan
<jcowan@reutershealth.com> and Michael Everson <everson@evertype.com>.
The ConScript Unicode Registry is accessible at:
https://www.evertype.com/standards/csur/
The ranges used fall at the low end of the End User Zone and can hence
not be normatively assigned, but it is recommended that people who
wish to encode fictional scripts use these codes, in the interest of
interoperability. For Klingon, CSUR has adopted the Linux encoding.
The CSUR people are driving adding Tengwar and Cirth into Unicode
Plane 1; the addition of Klingon to Unicode Plane 1 has been rejected
and so the above encoding remains official.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Unicode support
1-10마지막 갱신은 2005-01-17, version 1.4입니다. LANANA(Linux Assigned Names And Numbers Authority) project의 lanana.org에서 관리하던 원본은 사라졌으므로 mainline Linux kernel의 이 version이 현재 유지되는 주 문서입니다.
Introduction
11-55Linux kernel code는 character를 font에 map할 때 Unicode를 사용하도록 다시 작성됐습니다. Unicode-to-font table 하나를 load하면 8-bit character set과 UTF-8 mode 모두 지정 font를 사용합니다.
| Map symbol | Map name | Escape code(G0) |
|---|---|---|
| LAT1_MAP | Latin-1 (ISO 8859-1) | ESC ( B |
| GRAF_MAP | DEC VT100 pseudographics | ESC ( 0 |
| IBMPC_MAP | IBM code page 437 | ESC ( U |
| USER_MAP | User defined | ESC ( K |
특히 `ESC ( U`는 font가 IBM character set과 완전히 다를 수 있어 더 이상 straight-to-font가 아닙니다. 따라서 Latin-1 font를 load해도 block graphic을 사용할 수 있습니다.
code가 ISO 2022와 비슷하지만 code와 용법 모두 일치하지 않습니다. Linux에는 G0·G1 두 8-bit code가 있고 ISO 2022에는 G0~G3 네 7-bit code가 있습니다.
Unicode standard/ISO 10646에 따라 U+F000~U+F8FF를 OS-wide allocation용 Linux Zone으로 예약했습니다. Unicode 명칭은 Corporate Zone이지만 Linux에는 부정확합니다. U+F000은 1024·2048-character font에 대비해 direct-mapping area를 큰 2의 거듭제곱 경계에서 시작하게 하며 U+E000~U+EFFF는 End User Zone으로 남습니다.
version 1.2부터 U+F000~U+F7FF는 translation table을 우회해 loaded font에 직접 map합니다. user-defined map 기본값은 U+F000~U+F0FF이며 vgacon은 256-character(U+F000..U+F0FF) 또는 512-character(U+F000..U+F1FF) font만 처리할 수 있어 실제 범위가 더 짧을 수 있습니다.
Actual characters assigned in the Linux Zone
56-90Unicode 1.1.4에 없던 다음 DEC VT graphics map character를 정의했지만 version 1.2부터 이 사용은 obsolete이며 더 이상 사용하면 안 됩니다.
| Code point | 이름 |
|---|---|
| U+F800 | DEC VT GRAPHICS HORIZONTAL LINE SCAN 1 |
| U+F801 | DEC VT GRAPHICS HORIZONTAL LINE SCAN 3 |
| U+F803 | DEC VT GRAPHICS HORIZONTAL LINE SCAN 7 |
| U+F804 | DEC VT GRAPHICS HORIZONTAL LINE SCAN 9 |
DEC VT220의 6x10 character matrix에서 부드러운 progression을 만듭니다. scan 5 line은 block graphic에도 사용되어 U+2500 FORMS LIGHT HORIZONTAL로 coding했으므로 생략했습니다. Unicode 3.2.0은 이들을 U+23BA, U+23BB, U+23BC, U+23BD에 공식 추가했고 Linux도 새 값을 사용합니다.
Unicode 본체에 들어가기 어려운 vendor-specific keyboard symbol은 version 1.2에서 다음처럼 추가됐습니다.
| Code point | 이름 |
|---|---|
| U+F810 | KEYBOARD SYMBOL FLYING FLAG |
| U+F811 | KEYBOARD SYMBOL PULLDOWN MENU |
| U+F812 | KEYBOARD SYMBOL OPEN APPLE |
| U+F813 | KEYBOARD SYMBOL SOLID APPLE |
Klingon language support
91-171Linux는 1996년에 Marc Okrand가 Star Trek을 위해 만든 artificial language Klingon을 지원한 최초의 operating system입니다. 이 encoding은 ConScript Unicode Registry(CSUR)가 채택했고 Unicode Plane 1 제안은 거부되어 Linux Zone의 Linux/CSUR private assignment로 남았습니다.
Klingon Language Institute가 endorse했으며 정보는 `http://www.kli.org/`에서 얻을 수 있습니다. language block이므로 Linux Corporate Zone 끝의 16-cell boundary에 배치했습니다. 현재 normative reference는 `https://www.evertype.com/standards/csur/klingon.html`입니다.
Klingon은 26-letter alphabet, 10-digit positional numeric system을 가지며 left-to-right, top-to-bottom으로 씁니다. 제안된 glyph 형태는 여러 가지지만 symbol set은 같고 shape만 달라 Unicode 관례상 font variant로 봅니다.
| Code point | 이름·비고 |
|---|---|
| U+F8D0 | KLINGON LETTER A |
| U+F8D1 | KLINGON LETTER B |
| U+F8D2 | KLINGON LETTER CH |
| U+F8D3 | KLINGON LETTER D |
| U+F8D4 | KLINGON LETTER E |
| U+F8D5 | KLINGON LETTER GH |
| U+F8D6 | KLINGON LETTER H |
| U+F8D7 | KLINGON LETTER I |
| U+F8D8 | KLINGON LETTER J |
| U+F8D9 | KLINGON LETTER L |
| U+F8DA | KLINGON LETTER M |
| U+F8DB | KLINGON LETTER N |
| U+F8DC | KLINGON LETTER NG |
| U+F8DD | KLINGON LETTER O |
| U+F8DE | KLINGON LETTER P |
| U+F8DF | KLINGON LETTER Q, Okrand Latin transliteration `<q>` |
| U+F8E0 | KLINGON LETTER QH, Okrand Latin transliteration `<Q>` |
| U+F8E1 | KLINGON LETTER R |
| U+F8E2 | KLINGON LETTER S |
| U+F8E3 | KLINGON LETTER T |
| U+F8E4 | KLINGON LETTER TLH |
| U+F8E5 | KLINGON LETTER U |
| U+F8E6 | KLINGON LETTER V |
| U+F8E7 | KLINGON LETTER W |
| U+F8E8 | KLINGON LETTER Y |
| U+F8E9 | KLINGON LETTER GLOTTAL STOP |
| U+F8F0 | KLINGON DIGIT ZERO |
| U+F8F1 | KLINGON DIGIT ONE |
| U+F8F2 | KLINGON DIGIT TWO |
| U+F8F3 | KLINGON DIGIT THREE |
| U+F8F4 | KLINGON DIGIT FOUR |
| U+F8F5 | KLINGON DIGIT FIVE |
| U+F8F6 | KLINGON DIGIT SIX |
| U+F8F7 | KLINGON DIGIT SEVEN |
| U+F8F8 | KLINGON DIGIT EIGHT |
| U+F8F9 | KLINGON DIGIT NINE |
| U+F8FD | KLINGON COMMA |
| U+F8FE | KLINGON FULL STOP |
| U+F8FF | KLINGON SYMBOL FOR EMPIRE |
Other Fictional and Artificial Scripts
172-188Klingon Linux Unicode block 뒤 John Cowan과 Michael Everson이 fictional·artificial script registry인 ConScript Unicode Registry를 만들었습니다. `https://www.evertype.com/standards/csur/`에서 볼 수 있습니다.
사용 range는 End User Zone 아래쪽이라 normative assignment는 할 수 없지만 interoperability를 위해 fictional script encoding에 이 code 사용을 권장합니다. CSUR는 Klingon에 Linux encoding을 채택했습니다. Tengwar와 Cirth를 Unicode Plane 1에 추가하려는 작업은 진행됐지만 Klingon 추가는 거부되어 위 encoding이 공식 상태로 남습니다.
요약과 해설
unicode.rst:1-188이 문서는 console font mapping과 Unicode Private Use Area의 역사적 Linux assignment를 기록합니다. DEC VT scan-line code는 Unicode 3.2의 공식 code point로 대체됐고 Klingon block은 CSUR private assignment로 유지됩니다.