localedata: Fix several issues with the set of characters considered 0-width [BZ #31370]

= `Default_Ignorable_Code_Point`s should have width 0 =

Unicode specifies (https://www.unicode.org/faq/unsup_char.html#3) that characters
with the `Default_Ignorable_Code_Point` property

> should be rendered as completely invisible (and non advancing, i.e. “zero width”),
if not explicitly supported in rendering.

Hence, `wcwidth()` should give them all a width of 0, with two exceptions:

- the soft hyphen (U+00AD SOFT HYPHEN) is assigned width 1 by longstanding precedent
- U+115F HANGUL CHOSEONG FILLER needs a carveout
  due to the unique behavior of the conjoining Korean jamo characters.
  One composed Hangul "syllable block" like 퓛
  is made up of two to three individual component characters, or "jamo".
  These are all assigned an `East_Asian_Width` of `Wide`
  by Unicode, which would normally mean they would all be assigned
  width 2 by glibc; a combination of (leading choseong jamo) +
  (medial jungseong jamo) + (trailing jongseong jamo) would then have width 2 + 2 + 2 = 6.
  However, glibc (and other wcwidth implementations) special-cases jungseong and jongseong,
  assigning them all width 0,
  to ensure that the complete block has width 2 + 0 + 0 = 2 as it should.
  U+115F is meant for use in syllable blocks
  that are intentionally missing a leading jamo;
  it must be assigned a width of 2 even though it has no visible display
  to ensure that the complete block has width 2.

However, `wcwidth()` currently (before this patch)
incorrectly assigns non-zero width to
U+3164 HANGUL FILLER and U+FFA0 HALFWIDTH HANGUL FILLER;
this commit fixes that.

Unicode spec references:
- Hangul:  §3.12 https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf#G24646 and
  §18.6 https://www.unicode.org/versions/Unicode15.0.0/ch18.pdf#G31028
- `Default_Ignorable_Code_Point`: §5.21 https://www.unicode.org/versions/Unicode15.0.0/ch05.pdf#G40095.

= Non-`Default_Ignorable_Code_Point` format controls should be visible =

The Unicode Standard, §5.21 - Characters Ignored for Display
(https://www.unicode.org/versions/Unicode15.0.0/ch05.pdf#G40095)
says the following:

> A small number of format characters (General_Category = Cf )
> are also not given the Default_Ignorable_Code_Point property.
> This may surprise implementers, who often assume
> that all format characters are generally ignored in fallback display.
> The exact list of these exceptional format characters
> can be found in the Unicode Character Database.
> There are, however, three important sets of such format characters to note:
>
> - prepended concatenation marks
> - interlinear annotation characters
> - Egyptian hieroglyph format controls
>
> The prepended concatenation marks always have a visible display.
> See “Prepended Concatenation Marks” in [*Section 23.2, Layout Controls*](https://www.unicode.org/versions/Unicode15.1.0/ch23.pdf#M9.35858.HeadingBreak.132.Layout.Controls)
> for more discussion of the use and display of these signs.
>
> The other two notable sets of format characters that exceptionally are not ignored
> in fallback display consist of the interlinear annotation characters,
> U+FFF9 INTERLINEAR ANNOTATION ANCHOR through
> U+FFFB INTERLINEAR ANNOTATION TERMINATOR,
> and the Egyptian hieroglyph format controls,
> U+13430 EGYPTIAN HIEROGLYPH VERTICAL JOINER through
> U+1343F EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE.
> These characters should have a visible glyph display for fallback rendering,
> because if they are not displayed,
> it is too easy to misread the resulting displayed text.
> See “Annotation Characters” in [*Section 23.8, Specials*](https://www.unicode.org/versions/Unicode15.1.0/ch23.pdf#M9.21335.Heading.133.Specials),
> as well as [*Section 11.4, Egyptian Hieroglyphs*](https://www.unicode.org/versions/Unicode15.1.0/ch11.pdf#M9.73291.Heading.1418.Egyptian.Hieroglyphs)
> for more discussion of the use and display of these characters.

glibc currently correctly assigns non-zero width to the prepended concatenation marks,
but it incorrectly gives zero width to the interlinear annotation characters
(which a generic terminal cannot interpret)
and the Egyptian hieroglyph format controls
(which are not widely supported in rendering implementations at present).
This commit fixes both these issues as well.

= Derive Hangul syllable type from Unicode data =

Previosuly, the jungseong and jongseong jamo ranges
were hard-coded into the script. With this commit, they are instead parsed
from the HangulSyllableType.txt data file published by Unicode.
This does not affect the end result.

Signed-off-by: Jules Bertholet <julesbertholet@quoi.xyz>
This commit is contained in:
Jules Bertholet 2024-02-23 20:54:57 +00:00 committed by Mike FABIAN
parent 1dbf2bef79
commit 25c9c3789e
6 changed files with 979 additions and 1898 deletions

View File

@ -175,7 +175,7 @@ unicode:
localedata/unicode-gen/unicode-license.txt
localedata/unicode-gen/DerivedCoreProperties.txt
localedata/unicode-gen/EastAsianWidth.txt
localedata/unicode-gen/PropList.txt
localedata/unicode-gen/HangulSyllableType.txt
# The following files are shared with the upstream tzcode project and must be
# updated regularly to stay in sync with the upstream releases.

View File

@ -49856,13 +49856,27 @@ CHARMAP
END CHARMAP
% Character width according to Unicode 15.1.0.
% - Default width is 1.
% Width is determined by the following rules, in order of decreasing precedence:
% - U+00AD SOFT HYPHEN has width 1, as a special case for compatibility (https://archive.is/b5Ck).
% - U+115F HANGUL CHOSEONG FILLER has width 2.
% This character stands in for an intentionally omitted leading consonant
% in a Hangul syllable block; as such it must be assigned width 2 despite its lack
% of visible display to ensure that the complete block has the correct width.
% (See below for more information on Hangul syllables.)
% - Combining jungseong and jongseong Hangul jamo have width 0; generated from
% "grep '^[^;]*;[VT]' HangulSyllableType.txt".
% One composed Hangul "syllable block" like 퓛 is made up of
% two to three individual component characters called "jamo".
% The complete block must have total width 2;
% to achieve this, we assign a width of 2 to leading "choseong" jamo,
% and of 0 to medial vowel "jungseong" and trailing "jongseong" jamo.
% - Non-spacing and enclosing marks have width 0; generated from
% "grep -E '^[^;]*;[^;]*;(Mn|Me);' UnicodeData.txt".
% - "Default_Ignorable_Code_Point"s have width 0; generated from
% "grep '^[^;]*;\s*Default_Ignorable_Code_Point' DerivedCoreProperties.txt".
% - Double-width characters have width 2; generated from
% "grep '^[^;]*;\s*[WF]' EastAsianWidth.txt"
% - Non-spacing characters have width 0; generated from PropList.txt or
% "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
% - Format control characters have width 0; generated from
% "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
% "grep '^[^;]*;[WF]' EastAsianWidth.txt".
% - Default width for all other characters is 1.
WIDTH
<U0300>...<U036F> 0
<U0483>...<U0489> 0
@ -50083,7 +50097,9 @@ WIDTH
<U3099>...<U309A> 0
<U309B>...<U30FF> 2
<U3105>...<U312F> 2
<U3131>...<U318E> 2
<U3131>...<U3163> 2
<U3164> 0
<U3165>...<U318E> 2
<U3190>...<U31E3> 2
<U31EF>...<U321E> 2
<U3220>...<UA48C> 2
@ -50138,8 +50154,8 @@ WIDTH
<UFE68>...<UFE6B> 2
<UFEFF> 0
<UFF01>...<UFF60> 2
<UFFA0> 0
<UFFE0>...<UFFE6> 2
<UFFF9>...<UFFFB> 0
<U000101FD> 0
<U000102E0> 0
<U00010376>...<U0001037A> 0
@ -50240,7 +50256,7 @@ WIDTH
<U00011F36>...<U00011F3A> 0
<U00011F40> 0
<U00011F42> 0
<U00013430>...<U00013440> 0
<U00013440> 0
<U00013447>...<U00013455> 0
<U00016AF0>...<U00016AF4> 0
<U00016B30>...<U00016B36> 0

View File

@ -0,0 +1,858 @@
# HangulSyllableType-15.1.0.txt
# Date: 2023-01-05, 20:34:42 GMT
# © 2023 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
# For documentation, see https://www.unicode.org/reports/tr44/
# ================================================
# Property: Hangul_Syllable_Type
# All code points not explicitly listed for Hangul_Syllable_Type
# have the value Not_Applicable (NA).
# @missing: 0000..10FFFF; Not_Applicable
# ================================================
# Hangul_Syllable_Type=Leading_Jamo
1100..115F ; L # Lo [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER
A960..A97C ; L # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
# Total code points: 125
# ================================================
# Hangul_Syllable_Type=Vowel_Jamo
1160..11A7 ; V # Lo [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE
D7B0..D7C6 ; V # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
# Total code points: 95
# ================================================
# Hangul_Syllable_Type=Trailing_Jamo
11A8..11FF ; T # Lo [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
D7CB..D7FB ; T # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
# Total code points: 137
# ================================================
# Hangul_Syllable_Type=LV_Syllable
AC00 ; LV # Lo HANGUL SYLLABLE GA
AC1C ; LV # Lo HANGUL SYLLABLE GAE
AC38 ; LV # Lo HANGUL SYLLABLE GYA
AC54 ; LV # Lo HANGUL SYLLABLE GYAE
AC70 ; LV # Lo HANGUL SYLLABLE GEO
AC8C ; LV # Lo HANGUL SYLLABLE GE
ACA8 ; LV # Lo HANGUL SYLLABLE GYEO
ACC4 ; LV # Lo HANGUL SYLLABLE GYE
ACE0 ; LV # Lo HANGUL SYLLABLE GO
ACFC ; LV # Lo HANGUL SYLLABLE GWA
AD18 ; LV # Lo HANGUL SYLLABLE GWAE
AD34 ; LV # Lo HANGUL SYLLABLE GOE
AD50 ; LV # Lo HANGUL SYLLABLE GYO
AD6C ; LV # Lo HANGUL SYLLABLE GU
AD88 ; LV # Lo HANGUL SYLLABLE GWEO
ADA4 ; LV # Lo HANGUL SYLLABLE GWE
ADC0 ; LV # Lo HANGUL SYLLABLE GWI
ADDC ; LV # Lo HANGUL SYLLABLE GYU
ADF8 ; LV # Lo HANGUL SYLLABLE GEU
AE14 ; LV # Lo HANGUL SYLLABLE GYI
AE30 ; LV # Lo HANGUL SYLLABLE GI
AE4C ; LV # Lo HANGUL SYLLABLE GGA
AE68 ; LV # Lo HANGUL SYLLABLE GGAE
AE84 ; LV # Lo HANGUL SYLLABLE GGYA
AEA0 ; LV # Lo HANGUL SYLLABLE GGYAE
AEBC ; LV # Lo HANGUL SYLLABLE GGEO
AED8 ; LV # Lo HANGUL SYLLABLE GGE
AEF4 ; LV # Lo HANGUL SYLLABLE GGYEO
AF10 ; LV # Lo HANGUL SYLLABLE GGYE
AF2C ; LV # Lo HANGUL SYLLABLE GGO
AF48 ; LV # Lo HANGUL SYLLABLE GGWA
AF64 ; LV # Lo HANGUL SYLLABLE GGWAE
AF80 ; LV # Lo HANGUL SYLLABLE GGOE
AF9C ; LV # Lo HANGUL SYLLABLE GGYO
AFB8 ; LV # Lo HANGUL SYLLABLE GGU
AFD4 ; LV # Lo HANGUL SYLLABLE GGWEO
AFF0 ; LV # Lo HANGUL SYLLABLE GGWE
B00C ; LV # Lo HANGUL SYLLABLE GGWI
B028 ; LV # Lo HANGUL SYLLABLE GGYU
B044 ; LV # Lo HANGUL SYLLABLE GGEU
B060 ; LV # Lo HANGUL SYLLABLE GGYI
B07C ; LV # Lo HANGUL SYLLABLE GGI
B098 ; LV # Lo HANGUL SYLLABLE NA
B0B4 ; LV # Lo HANGUL SYLLABLE NAE
B0D0 ; LV # Lo HANGUL SYLLABLE NYA
B0EC ; LV # Lo HANGUL SYLLABLE NYAE
B108 ; LV # Lo HANGUL SYLLABLE NEO
B124 ; LV # Lo HANGUL SYLLABLE NE
B140 ; LV # Lo HANGUL SYLLABLE NYEO
B15C ; LV # Lo HANGUL SYLLABLE NYE
B178 ; LV # Lo HANGUL SYLLABLE NO
B194 ; LV # Lo HANGUL SYLLABLE NWA
B1B0 ; LV # Lo HANGUL SYLLABLE NWAE
B1CC ; LV # Lo HANGUL SYLLABLE NOE
B1E8 ; LV # Lo HANGUL SYLLABLE NYO
B204 ; LV # Lo HANGUL SYLLABLE NU
B220 ; LV # Lo HANGUL SYLLABLE NWEO
B23C ; LV # Lo HANGUL SYLLABLE NWE
B258 ; LV # Lo HANGUL SYLLABLE NWI
B274 ; LV # Lo HANGUL SYLLABLE NYU
B290 ; LV # Lo HANGUL SYLLABLE NEU
B2AC ; LV # Lo HANGUL SYLLABLE NYI
B2C8 ; LV # Lo HANGUL SYLLABLE NI
B2E4 ; LV # Lo HANGUL SYLLABLE DA
B300 ; LV # Lo HANGUL SYLLABLE DAE
B31C ; LV # Lo HANGUL SYLLABLE DYA
B338 ; LV # Lo HANGUL SYLLABLE DYAE
B354 ; LV # Lo HANGUL SYLLABLE DEO
B370 ; LV # Lo HANGUL SYLLABLE DE
B38C ; LV # Lo HANGUL SYLLABLE DYEO
B3A8 ; LV # Lo HANGUL SYLLABLE DYE
B3C4 ; LV # Lo HANGUL SYLLABLE DO
B3E0 ; LV # Lo HANGUL SYLLABLE DWA
B3FC ; LV # Lo HANGUL SYLLABLE DWAE
B418 ; LV # Lo HANGUL SYLLABLE DOE
B434 ; LV # Lo HANGUL SYLLABLE DYO
B450 ; LV # Lo HANGUL SYLLABLE DU
B46C ; LV # Lo HANGUL SYLLABLE DWEO
B488 ; LV # Lo HANGUL SYLLABLE DWE
B4A4 ; LV # Lo HANGUL SYLLABLE DWI
B4C0 ; LV # Lo HANGUL SYLLABLE DYU
B4DC ; LV # Lo HANGUL SYLLABLE DEU
B4F8 ; LV # Lo HANGUL SYLLABLE DYI
B514 ; LV # Lo HANGUL SYLLABLE DI
B530 ; LV # Lo HANGUL SYLLABLE DDA
B54C ; LV # Lo HANGUL SYLLABLE DDAE
B568 ; LV # Lo HANGUL SYLLABLE DDYA
B584 ; LV # Lo HANGUL SYLLABLE DDYAE
B5A0 ; LV # Lo HANGUL SYLLABLE DDEO
B5BC ; LV # Lo HANGUL SYLLABLE DDE
B5D8 ; LV # Lo HANGUL SYLLABLE DDYEO
B5F4 ; LV # Lo HANGUL SYLLABLE DDYE
B610 ; LV # Lo HANGUL SYLLABLE DDO
B62C ; LV # Lo HANGUL SYLLABLE DDWA
B648 ; LV # Lo HANGUL SYLLABLE DDWAE
B664 ; LV # Lo HANGUL SYLLABLE DDOE
B680 ; LV # Lo HANGUL SYLLABLE DDYO
B69C ; LV # Lo HANGUL SYLLABLE DDU
B6B8 ; LV # Lo HANGUL SYLLABLE DDWEO
B6D4 ; LV # Lo HANGUL SYLLABLE DDWE
B6F0 ; LV # Lo HANGUL SYLLABLE DDWI
B70C ; LV # Lo HANGUL SYLLABLE DDYU
B728 ; LV # Lo HANGUL SYLLABLE DDEU
B744 ; LV # Lo HANGUL SYLLABLE DDYI
B760 ; LV # Lo HANGUL SYLLABLE DDI
B77C ; LV # Lo HANGUL SYLLABLE RA
B798 ; LV # Lo HANGUL SYLLABLE RAE
B7B4 ; LV # Lo HANGUL SYLLABLE RYA
B7D0 ; LV # Lo HANGUL SYLLABLE RYAE
B7EC ; LV # Lo HANGUL SYLLABLE REO
B808 ; LV # Lo HANGUL SYLLABLE RE
B824 ; LV # Lo HANGUL SYLLABLE RYEO
B840 ; LV # Lo HANGUL SYLLABLE RYE
B85C ; LV # Lo HANGUL SYLLABLE RO
B878 ; LV # Lo HANGUL SYLLABLE RWA
B894 ; LV # Lo HANGUL SYLLABLE RWAE
B8B0 ; LV # Lo HANGUL SYLLABLE ROE
B8CC ; LV # Lo HANGUL SYLLABLE RYO
B8E8 ; LV # Lo HANGUL SYLLABLE RU
B904 ; LV # Lo HANGUL SYLLABLE RWEO
B920 ; LV # Lo HANGUL SYLLABLE RWE
B93C ; LV # Lo HANGUL SYLLABLE RWI
B958 ; LV # Lo HANGUL SYLLABLE RYU
B974 ; LV # Lo HANGUL SYLLABLE REU
B990 ; LV # Lo HANGUL SYLLABLE RYI
B9AC ; LV # Lo HANGUL SYLLABLE RI
B9C8 ; LV # Lo HANGUL SYLLABLE MA
B9E4 ; LV # Lo HANGUL SYLLABLE MAE
BA00 ; LV # Lo HANGUL SYLLABLE MYA
BA1C ; LV # Lo HANGUL SYLLABLE MYAE
BA38 ; LV # Lo HANGUL SYLLABLE MEO
BA54 ; LV # Lo HANGUL SYLLABLE ME
BA70 ; LV # Lo HANGUL SYLLABLE MYEO
BA8C ; LV # Lo HANGUL SYLLABLE MYE
BAA8 ; LV # Lo HANGUL SYLLABLE MO
BAC4 ; LV # Lo HANGUL SYLLABLE MWA
BAE0 ; LV # Lo HANGUL SYLLABLE MWAE
BAFC ; LV # Lo HANGUL SYLLABLE MOE
BB18 ; LV # Lo HANGUL SYLLABLE MYO
BB34 ; LV # Lo HANGUL SYLLABLE MU
BB50 ; LV # Lo HANGUL SYLLABLE MWEO
BB6C ; LV # Lo HANGUL SYLLABLE MWE
BB88 ; LV # Lo HANGUL SYLLABLE MWI
BBA4 ; LV # Lo HANGUL SYLLABLE MYU
BBC0 ; LV # Lo HANGUL SYLLABLE MEU
BBDC ; LV # Lo HANGUL SYLLABLE MYI
BBF8 ; LV # Lo HANGUL SYLLABLE MI
BC14 ; LV # Lo HANGUL SYLLABLE BA
BC30 ; LV # Lo HANGUL SYLLABLE BAE
BC4C ; LV # Lo HANGUL SYLLABLE BYA
BC68 ; LV # Lo HANGUL SYLLABLE BYAE
BC84 ; LV # Lo HANGUL SYLLABLE BEO
BCA0 ; LV # Lo HANGUL SYLLABLE BE
BCBC ; LV # Lo HANGUL SYLLABLE BYEO
BCD8 ; LV # Lo HANGUL SYLLABLE BYE
BCF4 ; LV # Lo HANGUL SYLLABLE BO
BD10 ; LV # Lo HANGUL SYLLABLE BWA
BD2C ; LV # Lo HANGUL SYLLABLE BWAE
BD48 ; LV # Lo HANGUL SYLLABLE BOE
BD64 ; LV # Lo HANGUL SYLLABLE BYO
BD80 ; LV # Lo HANGUL SYLLABLE BU
BD9C ; LV # Lo HANGUL SYLLABLE BWEO
BDB8 ; LV # Lo HANGUL SYLLABLE BWE
BDD4 ; LV # Lo HANGUL SYLLABLE BWI
BDF0 ; LV # Lo HANGUL SYLLABLE BYU
BE0C ; LV # Lo HANGUL SYLLABLE BEU
BE28 ; LV # Lo HANGUL SYLLABLE BYI
BE44 ; LV # Lo HANGUL SYLLABLE BI
BE60 ; LV # Lo HANGUL SYLLABLE BBA
BE7C ; LV # Lo HANGUL SYLLABLE BBAE
BE98 ; LV # Lo HANGUL SYLLABLE BBYA
BEB4 ; LV # Lo HANGUL SYLLABLE BBYAE
BED0 ; LV # Lo HANGUL SYLLABLE BBEO
BEEC ; LV # Lo HANGUL SYLLABLE BBE
BF08 ; LV # Lo HANGUL SYLLABLE BBYEO
BF24 ; LV # Lo HANGUL SYLLABLE BBYE
BF40 ; LV # Lo HANGUL SYLLABLE BBO
BF5C ; LV # Lo HANGUL SYLLABLE BBWA
BF78 ; LV # Lo HANGUL SYLLABLE BBWAE
BF94 ; LV # Lo HANGUL SYLLABLE BBOE
BFB0 ; LV # Lo HANGUL SYLLABLE BBYO
BFCC ; LV # Lo HANGUL SYLLABLE BBU
BFE8 ; LV # Lo HANGUL SYLLABLE BBWEO
C004 ; LV # Lo HANGUL SYLLABLE BBWE
C020 ; LV # Lo HANGUL SYLLABLE BBWI
C03C ; LV # Lo HANGUL SYLLABLE BBYU
C058 ; LV # Lo HANGUL SYLLABLE BBEU
C074 ; LV # Lo HANGUL SYLLABLE BBYI
C090 ; LV # Lo HANGUL SYLLABLE BBI
C0AC ; LV # Lo HANGUL SYLLABLE SA
C0C8 ; LV # Lo HANGUL SYLLABLE SAE
C0E4 ; LV # Lo HANGUL SYLLABLE SYA
C100 ; LV # Lo HANGUL SYLLABLE SYAE
C11C ; LV # Lo HANGUL SYLLABLE SEO
C138 ; LV # Lo HANGUL SYLLABLE SE
C154 ; LV # Lo HANGUL SYLLABLE SYEO
C170 ; LV # Lo HANGUL SYLLABLE SYE
C18C ; LV # Lo HANGUL SYLLABLE SO
C1A8 ; LV # Lo HANGUL SYLLABLE SWA
C1C4 ; LV # Lo HANGUL SYLLABLE SWAE
C1E0 ; LV # Lo HANGUL SYLLABLE SOE
C1FC ; LV # Lo HANGUL SYLLABLE SYO
C218 ; LV # Lo HANGUL SYLLABLE SU
C234 ; LV # Lo HANGUL SYLLABLE SWEO
C250 ; LV # Lo HANGUL SYLLABLE SWE
C26C ; LV # Lo HANGUL SYLLABLE SWI
C288 ; LV # Lo HANGUL SYLLABLE SYU
C2A4 ; LV # Lo HANGUL SYLLABLE SEU
C2C0 ; LV # Lo HANGUL SYLLABLE SYI
C2DC ; LV # Lo HANGUL SYLLABLE SI
C2F8 ; LV # Lo HANGUL SYLLABLE SSA
C314 ; LV # Lo HANGUL SYLLABLE SSAE
C330 ; LV # Lo HANGUL SYLLABLE SSYA
C34C ; LV # Lo HANGUL SYLLABLE SSYAE
C368 ; LV # Lo HANGUL SYLLABLE SSEO
C384 ; LV # Lo HANGUL SYLLABLE SSE
C3A0 ; LV # Lo HANGUL SYLLABLE SSYEO
C3BC ; LV # Lo HANGUL SYLLABLE SSYE
C3D8 ; LV # Lo HANGUL SYLLABLE SSO
C3F4 ; LV # Lo HANGUL SYLLABLE SSWA
C410 ; LV # Lo HANGUL SYLLABLE SSWAE
C42C ; LV # Lo HANGUL SYLLABLE SSOE
C448 ; LV # Lo HANGUL SYLLABLE SSYO
C464 ; LV # Lo HANGUL SYLLABLE SSU
C480 ; LV # Lo HANGUL SYLLABLE SSWEO
C49C ; LV # Lo HANGUL SYLLABLE SSWE
C4B8 ; LV # Lo HANGUL SYLLABLE SSWI
C4D4 ; LV # Lo HANGUL SYLLABLE SSYU
C4F0 ; LV # Lo HANGUL SYLLABLE SSEU
C50C ; LV # Lo HANGUL SYLLABLE SSYI
C528 ; LV # Lo HANGUL SYLLABLE SSI
C544 ; LV # Lo HANGUL SYLLABLE A
C560 ; LV # Lo HANGUL SYLLABLE AE
C57C ; LV # Lo HANGUL SYLLABLE YA
C598 ; LV # Lo HANGUL SYLLABLE YAE
C5B4 ; LV # Lo HANGUL SYLLABLE EO
C5D0 ; LV # Lo HANGUL SYLLABLE E
C5EC ; LV # Lo HANGUL SYLLABLE YEO
C608 ; LV # Lo HANGUL SYLLABLE YE
C624 ; LV # Lo HANGUL SYLLABLE O
C640 ; LV # Lo HANGUL SYLLABLE WA
C65C ; LV # Lo HANGUL SYLLABLE WAE
C678 ; LV # Lo HANGUL SYLLABLE OE
C694 ; LV # Lo HANGUL SYLLABLE YO
C6B0 ; LV # Lo HANGUL SYLLABLE U
C6CC ; LV # Lo HANGUL SYLLABLE WEO
C6E8 ; LV # Lo HANGUL SYLLABLE WE
C704 ; LV # Lo HANGUL SYLLABLE WI
C720 ; LV # Lo HANGUL SYLLABLE YU
C73C ; LV # Lo HANGUL SYLLABLE EU
C758 ; LV # Lo HANGUL SYLLABLE YI
C774 ; LV # Lo HANGUL SYLLABLE I
C790 ; LV # Lo HANGUL SYLLABLE JA
C7AC ; LV # Lo HANGUL SYLLABLE JAE
C7C8 ; LV # Lo HANGUL SYLLABLE JYA
C7E4 ; LV # Lo HANGUL SYLLABLE JYAE
C800 ; LV # Lo HANGUL SYLLABLE JEO
C81C ; LV # Lo HANGUL SYLLABLE JE
C838 ; LV # Lo HANGUL SYLLABLE JYEO
C854 ; LV # Lo HANGUL SYLLABLE JYE
C870 ; LV # Lo HANGUL SYLLABLE JO
C88C ; LV # Lo HANGUL SYLLABLE JWA
C8A8 ; LV # Lo HANGUL SYLLABLE JWAE
C8C4 ; LV # Lo HANGUL SYLLABLE JOE
C8E0 ; LV # Lo HANGUL SYLLABLE JYO
C8FC ; LV # Lo HANGUL SYLLABLE JU
C918 ; LV # Lo HANGUL SYLLABLE JWEO
C934 ; LV # Lo HANGUL SYLLABLE JWE
C950 ; LV # Lo HANGUL SYLLABLE JWI
C96C ; LV # Lo HANGUL SYLLABLE JYU
C988 ; LV # Lo HANGUL SYLLABLE JEU
C9A4 ; LV # Lo HANGUL SYLLABLE JYI
C9C0 ; LV # Lo HANGUL SYLLABLE JI
C9DC ; LV # Lo HANGUL SYLLABLE JJA
C9F8 ; LV # Lo HANGUL SYLLABLE JJAE
CA14 ; LV # Lo HANGUL SYLLABLE JJYA
CA30 ; LV # Lo HANGUL SYLLABLE JJYAE
CA4C ; LV # Lo HANGUL SYLLABLE JJEO
CA68 ; LV # Lo HANGUL SYLLABLE JJE
CA84 ; LV # Lo HANGUL SYLLABLE JJYEO
CAA0 ; LV # Lo HANGUL SYLLABLE JJYE
CABC ; LV # Lo HANGUL SYLLABLE JJO
CAD8 ; LV # Lo HANGUL SYLLABLE JJWA
CAF4 ; LV # Lo HANGUL SYLLABLE JJWAE
CB10 ; LV # Lo HANGUL SYLLABLE JJOE
CB2C ; LV # Lo HANGUL SYLLABLE JJYO
CB48 ; LV # Lo HANGUL SYLLABLE JJU
CB64 ; LV # Lo HANGUL SYLLABLE JJWEO
CB80 ; LV # Lo HANGUL SYLLABLE JJWE
CB9C ; LV # Lo HANGUL SYLLABLE JJWI
CBB8 ; LV # Lo HANGUL SYLLABLE JJYU
CBD4 ; LV # Lo HANGUL SYLLABLE JJEU
CBF0 ; LV # Lo HANGUL SYLLABLE JJYI
CC0C ; LV # Lo HANGUL SYLLABLE JJI
CC28 ; LV # Lo HANGUL SYLLABLE CA
CC44 ; LV # Lo HANGUL SYLLABLE CAE
CC60 ; LV # Lo HANGUL SYLLABLE CYA
CC7C ; LV # Lo HANGUL SYLLABLE CYAE
CC98 ; LV # Lo HANGUL SYLLABLE CEO
CCB4 ; LV # Lo HANGUL SYLLABLE CE
CCD0 ; LV # Lo HANGUL SYLLABLE CYEO
CCEC ; LV # Lo HANGUL SYLLABLE CYE
CD08 ; LV # Lo HANGUL SYLLABLE CO
CD24 ; LV # Lo HANGUL SYLLABLE CWA
CD40 ; LV # Lo HANGUL SYLLABLE CWAE
CD5C ; LV # Lo HANGUL SYLLABLE COE
CD78 ; LV # Lo HANGUL SYLLABLE CYO
CD94 ; LV # Lo HANGUL SYLLABLE CU
CDB0 ; LV # Lo HANGUL SYLLABLE CWEO
CDCC ; LV # Lo HANGUL SYLLABLE CWE
CDE8 ; LV # Lo HANGUL SYLLABLE CWI
CE04 ; LV # Lo HANGUL SYLLABLE CYU
CE20 ; LV # Lo HANGUL SYLLABLE CEU
CE3C ; LV # Lo HANGUL SYLLABLE CYI
CE58 ; LV # Lo HANGUL SYLLABLE CI
CE74 ; LV # Lo HANGUL SYLLABLE KA
CE90 ; LV # Lo HANGUL SYLLABLE KAE
CEAC ; LV # Lo HANGUL SYLLABLE KYA
CEC8 ; LV # Lo HANGUL SYLLABLE KYAE
CEE4 ; LV # Lo HANGUL SYLLABLE KEO
CF00 ; LV # Lo HANGUL SYLLABLE KE
CF1C ; LV # Lo HANGUL SYLLABLE KYEO
CF38 ; LV # Lo HANGUL SYLLABLE KYE
CF54 ; LV # Lo HANGUL SYLLABLE KO
CF70 ; LV # Lo HANGUL SYLLABLE KWA
CF8C ; LV # Lo HANGUL SYLLABLE KWAE
CFA8 ; LV # Lo HANGUL SYLLABLE KOE
CFC4 ; LV # Lo HANGUL SYLLABLE KYO
CFE0 ; LV # Lo HANGUL SYLLABLE KU
CFFC ; LV # Lo HANGUL SYLLABLE KWEO
D018 ; LV # Lo HANGUL SYLLABLE KWE
D034 ; LV # Lo HANGUL SYLLABLE KWI
D050 ; LV # Lo HANGUL SYLLABLE KYU
D06C ; LV # Lo HANGUL SYLLABLE KEU
D088 ; LV # Lo HANGUL SYLLABLE KYI
D0A4 ; LV # Lo HANGUL SYLLABLE KI
D0C0 ; LV # Lo HANGUL SYLLABLE TA
D0DC ; LV # Lo HANGUL SYLLABLE TAE
D0F8 ; LV # Lo HANGUL SYLLABLE TYA
D114 ; LV # Lo HANGUL SYLLABLE TYAE
D130 ; LV # Lo HANGUL SYLLABLE TEO
D14C ; LV # Lo HANGUL SYLLABLE TE
D168 ; LV # Lo HANGUL SYLLABLE TYEO
D184 ; LV # Lo HANGUL SYLLABLE TYE
D1A0 ; LV # Lo HANGUL SYLLABLE TO
D1BC ; LV # Lo HANGUL SYLLABLE TWA
D1D8 ; LV # Lo HANGUL SYLLABLE TWAE
D1F4 ; LV # Lo HANGUL SYLLABLE TOE
D210 ; LV # Lo HANGUL SYLLABLE TYO
D22C ; LV # Lo HANGUL SYLLABLE TU
D248 ; LV # Lo HANGUL SYLLABLE TWEO
D264 ; LV # Lo HANGUL SYLLABLE TWE
D280 ; LV # Lo HANGUL SYLLABLE TWI
D29C ; LV # Lo HANGUL SYLLABLE TYU
D2B8 ; LV # Lo HANGUL SYLLABLE TEU
D2D4 ; LV # Lo HANGUL SYLLABLE TYI
D2F0 ; LV # Lo HANGUL SYLLABLE TI
D30C ; LV # Lo HANGUL SYLLABLE PA
D328 ; LV # Lo HANGUL SYLLABLE PAE
D344 ; LV # Lo HANGUL SYLLABLE PYA
D360 ; LV # Lo HANGUL SYLLABLE PYAE
D37C ; LV # Lo HANGUL SYLLABLE PEO
D398 ; LV # Lo HANGUL SYLLABLE PE
D3B4 ; LV # Lo HANGUL SYLLABLE PYEO
D3D0 ; LV # Lo HANGUL SYLLABLE PYE
D3EC ; LV # Lo HANGUL SYLLABLE PO
D408 ; LV # Lo HANGUL SYLLABLE PWA
D424 ; LV # Lo HANGUL SYLLABLE PWAE
D440 ; LV # Lo HANGUL SYLLABLE POE
D45C ; LV # Lo HANGUL SYLLABLE PYO
D478 ; LV # Lo HANGUL SYLLABLE PU
D494 ; LV # Lo HANGUL SYLLABLE PWEO
D4B0 ; LV # Lo HANGUL SYLLABLE PWE
D4CC ; LV # Lo HANGUL SYLLABLE PWI
D4E8 ; LV # Lo HANGUL SYLLABLE PYU
D504 ; LV # Lo HANGUL SYLLABLE PEU
D520 ; LV # Lo HANGUL SYLLABLE PYI
D53C ; LV # Lo HANGUL SYLLABLE PI
D558 ; LV # Lo HANGUL SYLLABLE HA
D574 ; LV # Lo HANGUL SYLLABLE HAE
D590 ; LV # Lo HANGUL SYLLABLE HYA
D5AC ; LV # Lo HANGUL SYLLABLE HYAE
D5C8 ; LV # Lo HANGUL SYLLABLE HEO
D5E4 ; LV # Lo HANGUL SYLLABLE HE
D600 ; LV # Lo HANGUL SYLLABLE HYEO
D61C ; LV # Lo HANGUL SYLLABLE HYE
D638 ; LV # Lo HANGUL SYLLABLE HO
D654 ; LV # Lo HANGUL SYLLABLE HWA
D670 ; LV # Lo HANGUL SYLLABLE HWAE
D68C ; LV # Lo HANGUL SYLLABLE HOE
D6A8 ; LV # Lo HANGUL SYLLABLE HYO
D6C4 ; LV # Lo HANGUL SYLLABLE HU
D6E0 ; LV # Lo HANGUL SYLLABLE HWEO
D6FC ; LV # Lo HANGUL SYLLABLE HWE
D718 ; LV # Lo HANGUL SYLLABLE HWI
D734 ; LV # Lo HANGUL SYLLABLE HYU
D750 ; LV # Lo HANGUL SYLLABLE HEU
D76C ; LV # Lo HANGUL SYLLABLE HYI
D788 ; LV # Lo HANGUL SYLLABLE HI
# Total code points: 399
# ================================================
# Hangul_Syllable_Type=LVT_Syllable
AC01..AC1B ; LVT # Lo [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH
AC1D..AC37 ; LVT # Lo [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH
AC39..AC53 ; LVT # Lo [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH
AC55..AC6F ; LVT # Lo [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH
AC71..AC8B ; LVT # Lo [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH
AC8D..ACA7 ; LVT # Lo [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH
ACA9..ACC3 ; LVT # Lo [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH
ACC5..ACDF ; LVT # Lo [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH
ACE1..ACFB ; LVT # Lo [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH
ACFD..AD17 ; LVT # Lo [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH
AD19..AD33 ; LVT # Lo [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH
AD35..AD4F ; LVT # Lo [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH
AD51..AD6B ; LVT # Lo [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH
AD6D..AD87 ; LVT # Lo [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH
AD89..ADA3 ; LVT # Lo [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH
ADA5..ADBF ; LVT # Lo [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH
ADC1..ADDB ; LVT # Lo [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH
ADDD..ADF7 ; LVT # Lo [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH
ADF9..AE13 ; LVT # Lo [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH
AE15..AE2F ; LVT # Lo [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH
AE31..AE4B ; LVT # Lo [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH
AE4D..AE67 ; LVT # Lo [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH
AE69..AE83 ; LVT # Lo [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH
AE85..AE9F ; LVT # Lo [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH
AEA1..AEBB ; LVT # Lo [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH
AEBD..AED7 ; LVT # Lo [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH
AED9..AEF3 ; LVT # Lo [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH
AEF5..AF0F ; LVT # Lo [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH
AF11..AF2B ; LVT # Lo [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH
AF2D..AF47 ; LVT # Lo [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH
AF49..AF63 ; LVT # Lo [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH
AF65..AF7F ; LVT # Lo [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH
AF81..AF9B ; LVT # Lo [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH
AF9D..AFB7 ; LVT # Lo [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH
AFB9..AFD3 ; LVT # Lo [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH
AFD5..AFEF ; LVT # Lo [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH
AFF1..B00B ; LVT # Lo [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH
B00D..B027 ; LVT # Lo [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH
B029..B043 ; LVT # Lo [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH
B045..B05F ; LVT # Lo [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH
B061..B07B ; LVT # Lo [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH
B07D..B097 ; LVT # Lo [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH
B099..B0B3 ; LVT # Lo [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH
B0B5..B0CF ; LVT # Lo [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH
B0D1..B0EB ; LVT # Lo [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH
B0ED..B107 ; LVT # Lo [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH
B109..B123 ; LVT # Lo [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH
B125..B13F ; LVT # Lo [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH
B141..B15B ; LVT # Lo [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH
B15D..B177 ; LVT # Lo [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH
B179..B193 ; LVT # Lo [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH
B195..B1AF ; LVT # Lo [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH
B1B1..B1CB ; LVT # Lo [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH
B1CD..B1E7 ; LVT # Lo [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH
B1E9..B203 ; LVT # Lo [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH
B205..B21F ; LVT # Lo [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH
B221..B23B ; LVT # Lo [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH
B23D..B257 ; LVT # Lo [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH
B259..B273 ; LVT # Lo [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH
B275..B28F ; LVT # Lo [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH
B291..B2AB ; LVT # Lo [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH
B2AD..B2C7 ; LVT # Lo [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH
B2C9..B2E3 ; LVT # Lo [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH
B2E5..B2FF ; LVT # Lo [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH
B301..B31B ; LVT # Lo [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH
B31D..B337 ; LVT # Lo [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH
B339..B353 ; LVT # Lo [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH
B355..B36F ; LVT # Lo [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH
B371..B38B ; LVT # Lo [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH
B38D..B3A7 ; LVT # Lo [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH
B3A9..B3C3 ; LVT # Lo [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH
B3C5..B3DF ; LVT # Lo [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH
B3E1..B3FB ; LVT # Lo [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH
B3FD..B417 ; LVT # Lo [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH
B419..B433 ; LVT # Lo [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH
B435..B44F ; LVT # Lo [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH
B451..B46B ; LVT # Lo [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH
B46D..B487 ; LVT # Lo [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH
B489..B4A3 ; LVT # Lo [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH
B4A5..B4BF ; LVT # Lo [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH
B4C1..B4DB ; LVT # Lo [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH
B4DD..B4F7 ; LVT # Lo [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH
B4F9..B513 ; LVT # Lo [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH
B515..B52F ; LVT # Lo [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH
B531..B54B ; LVT # Lo [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH
B54D..B567 ; LVT # Lo [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH
B569..B583 ; LVT # Lo [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH
B585..B59F ; LVT # Lo [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH
B5A1..B5BB ; LVT # Lo [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH
B5BD..B5D7 ; LVT # Lo [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH
B5D9..B5F3 ; LVT # Lo [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH
B5F5..B60F ; LVT # Lo [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH
B611..B62B ; LVT # Lo [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH
B62D..B647 ; LVT # Lo [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH
B649..B663 ; LVT # Lo [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH
B665..B67F ; LVT # Lo [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH
B681..B69B ; LVT # Lo [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH
B69D..B6B7 ; LVT # Lo [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH
B6B9..B6D3 ; LVT # Lo [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH
B6D5..B6EF ; LVT # Lo [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH
B6F1..B70B ; LVT # Lo [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH
B70D..B727 ; LVT # Lo [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH
B729..B743 ; LVT # Lo [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH
B745..B75F ; LVT # Lo [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH
B761..B77B ; LVT # Lo [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH
B77D..B797 ; LVT # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH
B799..B7B3 ; LVT # Lo [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH
B7B5..B7CF ; LVT # Lo [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH
B7D1..B7EB ; LVT # Lo [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH
B7ED..B807 ; LVT # Lo [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH
B809..B823 ; LVT # Lo [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH
B825..B83F ; LVT # Lo [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH
B841..B85B ; LVT # Lo [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH
B85D..B877 ; LVT # Lo [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH
B879..B893 ; LVT # Lo [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH
B895..B8AF ; LVT # Lo [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH
B8B1..B8CB ; LVT # Lo [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH
B8CD..B8E7 ; LVT # Lo [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH
B8E9..B903 ; LVT # Lo [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH
B905..B91F ; LVT # Lo [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH
B921..B93B ; LVT # Lo [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH
B93D..B957 ; LVT # Lo [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH
B959..B973 ; LVT # Lo [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH
B975..B98F ; LVT # Lo [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH
B991..B9AB ; LVT # Lo [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH
B9AD..B9C7 ; LVT # Lo [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH
B9C9..B9E3 ; LVT # Lo [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH
B9E5..B9FF ; LVT # Lo [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH
BA01..BA1B ; LVT # Lo [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH
BA1D..BA37 ; LVT # Lo [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH
BA39..BA53 ; LVT # Lo [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH
BA55..BA6F ; LVT # Lo [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH
BA71..BA8B ; LVT # Lo [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH
BA8D..BAA7 ; LVT # Lo [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH
BAA9..BAC3 ; LVT # Lo [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH
BAC5..BADF ; LVT # Lo [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH
BAE1..BAFB ; LVT # Lo [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH
BAFD..BB17 ; LVT # Lo [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH
BB19..BB33 ; LVT # Lo [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH
BB35..BB4F ; LVT # Lo [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH
BB51..BB6B ; LVT # Lo [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH
BB6D..BB87 ; LVT # Lo [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH
BB89..BBA3 ; LVT # Lo [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH
BBA5..BBBF ; LVT # Lo [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH
BBC1..BBDB ; LVT # Lo [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH
BBDD..BBF7 ; LVT # Lo [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH
BBF9..BC13 ; LVT # Lo [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH
BC15..BC2F ; LVT # Lo [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH
BC31..BC4B ; LVT # Lo [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH
BC4D..BC67 ; LVT # Lo [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH
BC69..BC83 ; LVT # Lo [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH
BC85..BC9F ; LVT # Lo [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH
BCA1..BCBB ; LVT # Lo [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH
BCBD..BCD7 ; LVT # Lo [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH
BCD9..BCF3 ; LVT # Lo [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH
BCF5..BD0F ; LVT # Lo [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH
BD11..BD2B ; LVT # Lo [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH
BD2D..BD47 ; LVT # Lo [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH
BD49..BD63 ; LVT # Lo [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH
BD65..BD7F ; LVT # Lo [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH
BD81..BD9B ; LVT # Lo [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH
BD9D..BDB7 ; LVT # Lo [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH
BDB9..BDD3 ; LVT # Lo [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH
BDD5..BDEF ; LVT # Lo [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH
BDF1..BE0B ; LVT # Lo [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH
BE0D..BE27 ; LVT # Lo [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH
BE29..BE43 ; LVT # Lo [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH
BE45..BE5F ; LVT # Lo [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH
BE61..BE7B ; LVT # Lo [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH
BE7D..BE97 ; LVT # Lo [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH
BE99..BEB3 ; LVT # Lo [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH
BEB5..BECF ; LVT # Lo [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH
BED1..BEEB ; LVT # Lo [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH
BEED..BF07 ; LVT # Lo [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH
BF09..BF23 ; LVT # Lo [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH
BF25..BF3F ; LVT # Lo [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH
BF41..BF5B ; LVT # Lo [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH
BF5D..BF77 ; LVT # Lo [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH
BF79..BF93 ; LVT # Lo [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH
BF95..BFAF ; LVT # Lo [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH
BFB1..BFCB ; LVT # Lo [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH
BFCD..BFE7 ; LVT # Lo [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH
BFE9..C003 ; LVT # Lo [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH
C005..C01F ; LVT # Lo [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH
C021..C03B ; LVT # Lo [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH
C03D..C057 ; LVT # Lo [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH
C059..C073 ; LVT # Lo [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH
C075..C08F ; LVT # Lo [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH
C091..C0AB ; LVT # Lo [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH
C0AD..C0C7 ; LVT # Lo [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH
C0C9..C0E3 ; LVT # Lo [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH
C0E5..C0FF ; LVT # Lo [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH
C101..C11B ; LVT # Lo [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH
C11D..C137 ; LVT # Lo [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH
C139..C153 ; LVT # Lo [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH
C155..C16F ; LVT # Lo [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH
C171..C18B ; LVT # Lo [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH
C18D..C1A7 ; LVT # Lo [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH
C1A9..C1C3 ; LVT # Lo [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH
C1C5..C1DF ; LVT # Lo [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH
C1E1..C1FB ; LVT # Lo [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH
C1FD..C217 ; LVT # Lo [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH
C219..C233 ; LVT # Lo [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH
C235..C24F ; LVT # Lo [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH
C251..C26B ; LVT # Lo [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH
C26D..C287 ; LVT # Lo [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH
C289..C2A3 ; LVT # Lo [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH
C2A5..C2BF ; LVT # Lo [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH
C2C1..C2DB ; LVT # Lo [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH
C2DD..C2F7 ; LVT # Lo [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH
C2F9..C313 ; LVT # Lo [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH
C315..C32F ; LVT # Lo [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH
C331..C34B ; LVT # Lo [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH
C34D..C367 ; LVT # Lo [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH
C369..C383 ; LVT # Lo [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH
C385..C39F ; LVT # Lo [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH
C3A1..C3BB ; LVT # Lo [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH
C3BD..C3D7 ; LVT # Lo [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH
C3D9..C3F3 ; LVT # Lo [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH
C3F5..C40F ; LVT # Lo [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH
C411..C42B ; LVT # Lo [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH
C42D..C447 ; LVT # Lo [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH
C449..C463 ; LVT # Lo [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH
C465..C47F ; LVT # Lo [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH
C481..C49B ; LVT # Lo [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH
C49D..C4B7 ; LVT # Lo [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH
C4B9..C4D3 ; LVT # Lo [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH
C4D5..C4EF ; LVT # Lo [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH
C4F1..C50B ; LVT # Lo [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH
C50D..C527 ; LVT # Lo [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH
C529..C543 ; LVT # Lo [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH
C545..C55F ; LVT # Lo [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH
C561..C57B ; LVT # Lo [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH
C57D..C597 ; LVT # Lo [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH
C599..C5B3 ; LVT # Lo [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH
C5B5..C5CF ; LVT # Lo [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH
C5D1..C5EB ; LVT # Lo [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH
C5ED..C607 ; LVT # Lo [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH
C609..C623 ; LVT # Lo [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH
C625..C63F ; LVT # Lo [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH
C641..C65B ; LVT # Lo [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH
C65D..C677 ; LVT # Lo [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH
C679..C693 ; LVT # Lo [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH
C695..C6AF ; LVT # Lo [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH
C6B1..C6CB ; LVT # Lo [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH
C6CD..C6E7 ; LVT # Lo [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH
C6E9..C703 ; LVT # Lo [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH
C705..C71F ; LVT # Lo [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH
C721..C73B ; LVT # Lo [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH
C73D..C757 ; LVT # Lo [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH
C759..C773 ; LVT # Lo [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH
C775..C78F ; LVT # Lo [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH
C791..C7AB ; LVT # Lo [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH
C7AD..C7C7 ; LVT # Lo [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH
C7C9..C7E3 ; LVT # Lo [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH
C7E5..C7FF ; LVT # Lo [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH
C801..C81B ; LVT # Lo [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH
C81D..C837 ; LVT # Lo [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH
C839..C853 ; LVT # Lo [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH
C855..C86F ; LVT # Lo [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH
C871..C88B ; LVT # Lo [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH
C88D..C8A7 ; LVT # Lo [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH
C8A9..C8C3 ; LVT # Lo [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH
C8C5..C8DF ; LVT # Lo [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH
C8E1..C8FB ; LVT # Lo [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH
C8FD..C917 ; LVT # Lo [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH
C919..C933 ; LVT # Lo [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH
C935..C94F ; LVT # Lo [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH
C951..C96B ; LVT # Lo [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH
C96D..C987 ; LVT # Lo [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH
C989..C9A3 ; LVT # Lo [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH
C9A5..C9BF ; LVT # Lo [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH
C9C1..C9DB ; LVT # Lo [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH
C9DD..C9F7 ; LVT # Lo [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH
C9F9..CA13 ; LVT # Lo [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH
CA15..CA2F ; LVT # Lo [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH
CA31..CA4B ; LVT # Lo [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH
CA4D..CA67 ; LVT # Lo [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH
CA69..CA83 ; LVT # Lo [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH
CA85..CA9F ; LVT # Lo [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH
CAA1..CABB ; LVT # Lo [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH
CABD..CAD7 ; LVT # Lo [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH
CAD9..CAF3 ; LVT # Lo [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH
CAF5..CB0F ; LVT # Lo [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH
CB11..CB2B ; LVT # Lo [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH
CB2D..CB47 ; LVT # Lo [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH
CB49..CB63 ; LVT # Lo [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH
CB65..CB7F ; LVT # Lo [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH
CB81..CB9B ; LVT # Lo [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH
CB9D..CBB7 ; LVT # Lo [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH
CBB9..CBD3 ; LVT # Lo [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH
CBD5..CBEF ; LVT # Lo [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH
CBF1..CC0B ; LVT # Lo [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH
CC0D..CC27 ; LVT # Lo [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH
CC29..CC43 ; LVT # Lo [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH
CC45..CC5F ; LVT # Lo [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH
CC61..CC7B ; LVT # Lo [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH
CC7D..CC97 ; LVT # Lo [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH
CC99..CCB3 ; LVT # Lo [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH
CCB5..CCCF ; LVT # Lo [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH
CCD1..CCEB ; LVT # Lo [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH
CCED..CD07 ; LVT # Lo [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH
CD09..CD23 ; LVT # Lo [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH
CD25..CD3F ; LVT # Lo [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH
CD41..CD5B ; LVT # Lo [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH
CD5D..CD77 ; LVT # Lo [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH
CD79..CD93 ; LVT # Lo [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH
CD95..CDAF ; LVT # Lo [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH
CDB1..CDCB ; LVT # Lo [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH
CDCD..CDE7 ; LVT # Lo [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH
CDE9..CE03 ; LVT # Lo [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH
CE05..CE1F ; LVT # Lo [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH
CE21..CE3B ; LVT # Lo [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH
CE3D..CE57 ; LVT # Lo [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH
CE59..CE73 ; LVT # Lo [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH
CE75..CE8F ; LVT # Lo [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH
CE91..CEAB ; LVT # Lo [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH
CEAD..CEC7 ; LVT # Lo [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH
CEC9..CEE3 ; LVT # Lo [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH
CEE5..CEFF ; LVT # Lo [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH
CF01..CF1B ; LVT # Lo [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH
CF1D..CF37 ; LVT # Lo [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH
CF39..CF53 ; LVT # Lo [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH
CF55..CF6F ; LVT # Lo [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH
CF71..CF8B ; LVT # Lo [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH
CF8D..CFA7 ; LVT # Lo [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH
CFA9..CFC3 ; LVT # Lo [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH
CFC5..CFDF ; LVT # Lo [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH
CFE1..CFFB ; LVT # Lo [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH
CFFD..D017 ; LVT # Lo [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH
D019..D033 ; LVT # Lo [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH
D035..D04F ; LVT # Lo [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH
D051..D06B ; LVT # Lo [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH
D06D..D087 ; LVT # Lo [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH
D089..D0A3 ; LVT # Lo [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH
D0A5..D0BF ; LVT # Lo [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH
D0C1..D0DB ; LVT # Lo [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH
D0DD..D0F7 ; LVT # Lo [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH
D0F9..D113 ; LVT # Lo [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH
D115..D12F ; LVT # Lo [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH
D131..D14B ; LVT # Lo [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH
D14D..D167 ; LVT # Lo [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH
D169..D183 ; LVT # Lo [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH
D185..D19F ; LVT # Lo [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH
D1A1..D1BB ; LVT # Lo [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH
D1BD..D1D7 ; LVT # Lo [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH
D1D9..D1F3 ; LVT # Lo [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH
D1F5..D20F ; LVT # Lo [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH
D211..D22B ; LVT # Lo [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH
D22D..D247 ; LVT # Lo [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH
D249..D263 ; LVT # Lo [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH
D265..D27F ; LVT # Lo [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH
D281..D29B ; LVT # Lo [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH
D29D..D2B7 ; LVT # Lo [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH
D2B9..D2D3 ; LVT # Lo [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH
D2D5..D2EF ; LVT # Lo [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH
D2F1..D30B ; LVT # Lo [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH
D30D..D327 ; LVT # Lo [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH
D329..D343 ; LVT # Lo [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH
D345..D35F ; LVT # Lo [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH
D361..D37B ; LVT # Lo [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH
D37D..D397 ; LVT # Lo [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH
D399..D3B3 ; LVT # Lo [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH
D3B5..D3CF ; LVT # Lo [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH
D3D1..D3EB ; LVT # Lo [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH
D3ED..D407 ; LVT # Lo [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH
D409..D423 ; LVT # Lo [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH
D425..D43F ; LVT # Lo [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH
D441..D45B ; LVT # Lo [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH
D45D..D477 ; LVT # Lo [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH
D479..D493 ; LVT # Lo [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH
D495..D4AF ; LVT # Lo [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH
D4B1..D4CB ; LVT # Lo [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH
D4CD..D4E7 ; LVT # Lo [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH
D4E9..D503 ; LVT # Lo [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH
D505..D51F ; LVT # Lo [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH
D521..D53B ; LVT # Lo [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH
D53D..D557 ; LVT # Lo [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH
D559..D573 ; LVT # Lo [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH
D575..D58F ; LVT # Lo [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH
D591..D5AB ; LVT # Lo [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH
D5AD..D5C7 ; LVT # Lo [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH
D5C9..D5E3 ; LVT # Lo [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH
D5E5..D5FF ; LVT # Lo [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH
D601..D61B ; LVT # Lo [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH
D61D..D637 ; LVT # Lo [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH
D639..D653 ; LVT # Lo [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH
D655..D66F ; LVT # Lo [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH
D671..D68B ; LVT # Lo [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH
D68D..D6A7 ; LVT # Lo [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH
D6A9..D6C3 ; LVT # Lo [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH
D6C5..D6DF ; LVT # Lo [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH
D6E1..D6FB ; LVT # Lo [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH
D6FD..D717 ; LVT # Lo [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH
D719..D733 ; LVT # Lo [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH
D735..D74F ; LVT # Lo [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH
D751..D76B ; LVT # Lo [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH
D76D..D787 ; LVT # Lo [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH
D789..D7A3 ; LVT # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH
# Total code points: 10773
# EOF

View File

@ -1,4 +1,5 @@
# Copyright (C) 2015-2024 Free Software Foundation, Inc.
# Copyright (C) 2015-2024 Free Software Foundation, Inc
# Copyright The GNU Toolchain Authors.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
@ -40,7 +41,7 @@ UNICODE_VERSION = 15.1.0
PYTHON3 = python3
WGET = wget
DOWNLOADS = UnicodeData.txt DerivedCoreProperties.txt EastAsianWidth.txt PropList.txt
DOWNLOADS = UnicodeData.txt DerivedCoreProperties.txt EastAsianWidth.txt HangulSyllableType.txt
LICENSE = unicode-license.txt
GENERATED = i18n_ctype tr_TR UTF-8 translit_combining translit_compat translit_circle translit_cjk_compat translit_font translit_fraction
REPORTS = i18n_ctype-report UTF-8-report
@ -91,10 +92,12 @@ tr_TR: gen_unicode_ctype.py
-d DerivedCoreProperties.txt -i ../locales/tr_TR -o $@ \
--unicode_version $(UNICODE_VERSION) --turkish
UTF-8: UnicodeData.txt EastAsianWidth.txt
UTF-8: UnicodeData.txt DerivedCoreProperties.txt EastAsianWidth.txt HangulSyllableType.txt
UTF-8: utf8_gen.py
$(PYTHON3) utf8_gen.py -u UnicodeData.txt \
-e EastAsianWidth.txt -p PropList.txt \
-d DerivedCoreProperties.txt \
-e EastAsianWidth.txt \
-k HangulSyllableType.txt \
--unicode_version $(UNICODE_VERSION)
UTF-8-report: UTF-8 ../charmaps/UTF-8

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,7 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Copyright (C) 2014-2024 Free Software Foundation, Inc.
# Copyright The GNU Toolchain Authors.
# This file is part of the GNU C Library.
#
# The GNU C Library is free software; you can redistribute it and/or
@ -28,7 +29,6 @@ It will output UTF-8 file
'''
import argparse
import sys
import re
import unicode_utils
@ -200,30 +200,40 @@ def write_header_charmap(outfile):
def write_header_width(outfile, unicode_version):
'''Writes the header on top of the WIDTH section to the output file'''
outfile.write('% Character width according to Unicode '
+ '{:s}.\n'.format(unicode_version))
outfile.write('% - Default width is 1.\n')
outfile.write('% Character width according to Unicode {:s}.\n'.format(unicode_version))
outfile.write('% Width is determined by the following rules, in order of decreasing precedence:\n')
outfile.write('% - U+00AD SOFT HYPHEN has width 1, as a special case for compatibility (https://archive.is/b5Ck).\n')
outfile.write('% - U+115F HANGUL CHOSEONG FILLER has width 2.\n')
outfile.write('% This character stands in for an intentionally omitted leading consonant\n')
outfile.write('% in a Hangul syllable block; as such it must be assigned width 2 despite its lack\n')
outfile.write('% of visible display to ensure that the complete block has the correct width.\n')
outfile.write('% (See below for more information on Hangul syllables.)\n')
outfile.write('% - Combining jungseong and jongseong Hangul jamo have width 0; generated from\n')
outfile.write('% "grep \'^[^;]*;[VT]\' HangulSyllableType.txt".\n')
outfile.write('% One composed Hangul "syllable block" like 퓛 is made up of\n')
outfile.write('% two to three individual component characters called "jamo".\n')
outfile.write('% The complete block must have total width 2;\n')
outfile.write('% to achieve this, we assign a width of 2 to leading "choseong" jamo,\n')
outfile.write('% and of 0 to medial vowel "jungseong" and trailing "jongseong" jamo.\n')
outfile.write('% - Non-spacing and enclosing marks have width 0; generated from\n')
outfile.write('% "grep -E \'^[^;]*;[^;]*;(Mn|Me);\' UnicodeData.txt".\n')
outfile.write('% - "Default_Ignorable_Code_Point"s have width 0; generated from\n')
outfile.write('% "grep \'^[^;]*;\\s*Default_Ignorable_Code_Point\' DerivedCoreProperties.txt".\n')
outfile.write('% - Double-width characters have width 2; generated from\n')
outfile.write('% "grep \'^[^;]*;\\s*[WF]\' EastAsianWidth.txt"\n')
outfile.write('% - Non-spacing characters have width 0; '
+ 'generated from PropList.txt or\n')
outfile.write('% "grep \'^[^;]*;[^;]*;[^;]*;[^;]*;NSM;\' '
+ 'UnicodeData.txt"\n')
outfile.write('% - Format control characters have width 0; '
+ 'generated from\n')
outfile.write("% \"grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt\"\n")
# Not needed covered by Cf
# outfile.write("% - Zero width characters have width 0; generated from\n")
# outfile.write("% \"grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt\"\n")
outfile.write('% "grep \'^[^;]*;[WF]\' EastAsianWidth.txt".\n')
outfile.write('% - Default width for all other characters is 1.\n')
outfile.write("WIDTH\n")
def process_width(outfile, ulines, elines, plines):
'''ulines are lines from UnicodeData.txt, elines are lines from
EastAsianWidth.txt containing characters with width W or F,
plines are lines from PropList.txt which contain characters
with the property Prepended_Concatenation_Mark.
def process_width(outfile, ulines, dlines, elines, klines):
'''ulines are lines from UnicodeData.txt.
elines are lines from EastAsianWidth.txt containing characters with width
W or F.
dlines are lines from DerivedCoreProperties.txt which contain
characters with the property Default_Ignorable_Code_Point.
klines are lines from HangulSyllableType.txt which contain characters
with syllable type V or T.
'''
# Wide and fullwidth characters have width 1
width_dict = {}
for line in elines:
fields = line.split(";")
@ -235,14 +245,14 @@ def process_width(outfile, ulines, elines, plines):
int(code_points[1], 16)+1):
width_dict[key] = 2
# Nonspacing and enclosing marks have width 0
for line in ulines:
fields = line.split(";")
if fields[4] == "NSM" or fields[2] in ("Cf", "Me", "Mn"):
if fields[4] == "NSM" or fields[2] in ("Me", "Mn"):
width_dict[int(fields[0], 16)] = 0
for line in plines:
# Characters with the property “Prepended_Concatenation_Mark”
# should have the width 1:
# Conjoining vowel and trailing jamo have width 0
for line in klines:
fields = line.split(";")
if not '..' in fields[0]:
code_points = (fields[0], fields[0])
@ -250,21 +260,26 @@ def process_width(outfile, ulines, elines, plines):
code_points = fields[0].split("..")
for key in range(int(code_points[0], 16),
int(code_points[1], 16)+1):
del width_dict[key] # default width is 1
width_dict[key] = 0
# “Default_Ignorable_Code_Point”s have width 0
for line in dlines:
fields = line.split(";")
if not '..' in fields[0]:
code_points = (fields[0], fields[0])
else:
code_points = fields[0].split("..")
for key in range(int(code_points[0], 16),
int(code_points[1], 16)+1):
width_dict[key] = 0 # default width is 1
# Special case: U+00AD SOFT HYPHEN
del width_dict[0x00AD]
# Special case: U+115F HANGUL CHOSEONG FILLER
width_dict[0x115F] = 2
# handle special cases for compatibility
for key in list((0x00AD,)):
# https://www.cs.tut.fi/~jkorpela/shy.html
if key in width_dict:
del width_dict[key] # default width is 1
for key in list(range(0x1160, 0x1200)):
# Hangul jungseong and jongseong:
if key in unicode_utils.UNICODE_ATTRIBUTES:
width_dict[key] = 0
for key in list(range(0xD7B0, 0xD800)):
# Hangul jungseong and jongseong:
if key in unicode_utils.UNICODE_ATTRIBUTES:
width_dict[key] = 0
for key in list(range(0x3248, 0x3250)):
# These are “A” which means we can decide whether to treat them
# as “W” or “N” based on context:
@ -302,7 +317,7 @@ def process_width(outfile, ulines, elines, plines):
if __name__ == "__main__":
PARSER = argparse.ArgumentParser(
description='''
Generate a UTF-8 file from UnicodeData.txt, EastAsianWidth.txt, and PropList.txt.
Generate a UTF-8 file from UnicodeData.txt, DerivedCoreProperties.txt, EastAsianWidth.txt, and HangulSyllableType.txt
''')
PARSER.add_argument(
'-u', '--unicode_data_file',
@ -311,6 +326,13 @@ if __name__ == "__main__":
default='UnicodeData.txt',
help=('The UnicodeData.txt file to read, '
+ 'default: %(default)s'))
PARSER.add_argument(
'-d', '--derived_core_properties_file',
nargs='?',
type=str,
default='DerivedCoreProperties.txt',
help=('The DerivedCoreProperties.txt file to read, '
+ 'default: %(default)s'))
PARSER.add_argument(
'-e', '--east_asian_with_file',
nargs='?',
@ -319,11 +341,11 @@ if __name__ == "__main__":
help=('The EastAsianWidth.txt file to read, '
+ 'default: %(default)s'))
PARSER.add_argument(
'-p', '--prop_list_file',
'-k', '--hangul_syllable_type_file',
nargs='?',
type=str,
default='PropList.txt',
help=('The PropList.txt file to read, '
default='HangulSyllableType.txt',
help=('The HangulSyllableType.txt file to read, '
+ 'default: %(default)s'))
PARSER.add_argument(
'--unicode_version',
@ -336,27 +358,35 @@ if __name__ == "__main__":
unicode_utils.fill_attributes(ARGS.unicode_data_file)
with open(ARGS.unicode_data_file, mode='r') as UNIDATA_FILE:
UNICODE_DATA_LINES = UNIDATA_FILE.readlines()
with open(ARGS.east_asian_with_file, mode='r') as EAST_ASIAN_WIDTH_FILE:
EAST_ASIAN_WIDTH_LINES = []
for LINE in EAST_ASIAN_WIDTH_FILE:
# If characters from EastAsianWidth.txt which are from
# reserved ranges (i.e. not yet assigned code points)
with open(ARGS.derived_core_properties_file, mode='r') as DERIVED_CORE_PROPERTIES_FILE:
DERIVED_CORE_PROPERTIES_LINES = []
for LINE in DERIVED_CORE_PROPERTIES_FILE:
# If characters which are from reserved ranges
# (i.e. not yet assigned code points)
# are added to the WIDTH section of the UTF-8 file, then
# “make check” produces “Unknown Character” errors for
# these code points because such unassigned code points
# are not in the CHARMAP section of the UTF-8 file.
#
# Therefore, we skip all reserved code points when reading
# the EastAsianWidth.txt file.
if re.match(r'.*<reserved-.+>\.\.<reserved-.+>.*', LINE):
# Therefore, we skip all reserved code points.
if re.match(r'.*<reserved-.+>', LINE):
continue
if re.match(r'^[^;]*;\s*Default_Ignorable_Code_Point', LINE):
DERIVED_CORE_PROPERTIES_LINES.append(LINE.strip())
with open(ARGS.east_asian_with_file, mode='r') as EAST_ASIAN_WIDTH_FILE:
EAST_ASIAN_WIDTH_LINES = []
for LINE in EAST_ASIAN_WIDTH_FILE:
if re.match(r'.*<reserved-.+>', LINE):
continue
if re.match(r'^[^;]*;\s*[WF]', LINE):
EAST_ASIAN_WIDTH_LINES.append(LINE.strip())
with open(ARGS.prop_list_file, mode='r') as PROP_LIST_FILE:
PROP_LIST_LINES = []
for LINE in PROP_LIST_FILE:
if re.match(r'^[^;]*;[\s]*Prepended_Concatenation_Mark', LINE):
PROP_LIST_LINES.append(LINE.strip())
with open(ARGS.hangul_syllable_type_file, mode='r') as HANGUL_SYLLABLE_TYPE_FILE:
HANGUL_SYLLABLE_TYPE_LINES = []
for LINE in HANGUL_SYLLABLE_TYPE_FILE:
if re.match(r'.*<reserved-.+>', LINE):
continue
if re.match(r'^[^;]*;\s*[VT]', LINE):
HANGUL_SYLLABLE_TYPE_LINES.append(LINE.strip())
with open('UTF-8', mode='w') as OUTFILE:
# Processing UnicodeData.txt and write CHARMAP to UTF-8 file
write_header_charmap(OUTFILE)
@ -366,6 +396,7 @@ if __name__ == "__main__":
write_header_width(OUTFILE, ARGS.unicode_version)
process_width(OUTFILE,
UNICODE_DATA_LINES,
DERIVED_CORE_PROPERTIES_LINES,
EAST_ASIAN_WIDTH_LINES,
PROP_LIST_LINES)
HANGUL_SYLLABLE_TYPE_LINES)
OUTFILE.write("END WIDTH\n")