# PropertyValueAliases-5.1.0.txt
# Date: 2008-03-03, 21:58:08 GMT [MD]
#
# Unicode Character Database
# Copyright (c) 1991-2008 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see UCD.html
#
# This file contains aliases for property values used in the UCD.
# These names can be used for XML formats of UCD data, for regular-expression
# property tests, and other programmatic textual descriptions of Unicode data.
# For information on which properties are normative, see UCD.html.
#
# The names may be translated in appropriate environments, and additional
# aliases may be useful.
#
# FORMAT
#
# Each line describes a property value name.
# This consists of three or more fields, separated by semicolons.
#
# First Field: The first field describes the property for which that
# property value name is used.
#
# Second Field: The second field is an abbreviated name.
# If there is no abbreviated name available, the field is marked with "n/a".
#
# Third Field: The third field is a long name.
#
# In the case of ccc, there are 4 fields. The second field is numeric, third
# is abbreviated, and fourth is long.
#
# The above are the preferred aliases. Other aliases may be listed in additional fields.
#
# Loose matching should be applied to all property names and property values, with
# the exception of String Property values. With loose matching of property names and
# values, the case distinctions, whitespace, and '_' are ignored. For Numeric Property
# values, numeric equivalencies are applied: thus "01.00" is equivalent to "1".
#
# NOTE: Property value names are NOT unique across properties. For example:
#
#   AL means Arabic Letter for the Bidi_Class property, and
#   AL means Alpha_Left for the Combining_Class property, and
#   AL means Alphabetic for the Line_Break property.
#
# In addition, some property names may be the same as some property value names.
# For example:
#
#   sc means the Script property, and
#   Sc means the General_Category property value Currency_Symbol (Sc)
#
# The combination of property value and property name is, however, unique.
#
# For more information, see UTS #18: Regular Expression Guidelines
# ================================================


# ASCII_Hex_Digit (AHex)

AHex; N        ; No                               ; F                                ; False
AHex; Y        ; Yes                              ; T                                ; True

# Age (age)

age; n/a       ; 1.1
age; n/a       ; 2.0
age; n/a       ; 2.1
age; n/a       ; 3.0
age; n/a       ; 3.1
age; n/a       ; 3.2
age; n/a       ; 4.0
age; n/a       ; 4.1
age; n/a       ; 5.0
age; n/a       ; 5.1
age; n/a       ; unassigned

# Alphabetic (Alpha)

Alpha; N       ; No                               ; F                                ; False
Alpha; Y       ; Yes                              ; T                                ; True

# Bidi_Class (bc)

bc ; AL        ; Arabic_Letter
bc ; AN        ; Arabic_Number
bc ; B         ; Paragraph_Separator
bc ; BN        ; Boundary_Neutral
bc ; CS        ; Common_Separator
bc ; EN        ; European_Number
bc ; ES        ; European_Separator
bc ; ET        ; European_Terminator
bc ; L         ; Left_To_Right
bc ; LRE       ; Left_To_Right_Embedding
bc ; LRO       ; Left_To_Right_Override
bc ; NSM       ; Nonspacing_Mark
bc ; ON        ; Other_Neutral
bc ; PDF       ; Pop_Directional_Format
bc ; R         ; Right_To_Left
bc ; RLE       ; Right_To_Left_Embedding
bc ; RLO       ; Right_To_Left_Override
bc ; S         ; Segment_Separator
bc ; WS        ; White_Space

# Bidi_Control (Bidi_C)

Bidi_C; N      ; No                               ; F                                ; False
Bidi_C; Y      ; Yes                              ; T                                ; True

# Bidi_Mirrored (Bidi_M)

Bidi_M; N      ; No                               ; F                                ; False
Bidi_M; Y      ; Yes                              ; T                                ; True

# Bidi_Mirroring_Glyph (bmg)

# @missing: 0000..10FFFF; Bidi_Mirroring_Glyph; <none>

# Block (blk)

blk; n/a       ; Aegean_Numbers
blk; n/a       ; Alphabetic_Presentation_Forms
blk; n/a       ; Ancient_Greek_Musical_Notation
blk; n/a       ; Ancient_Greek_Numbers
blk; n/a       ; Ancient_Symbols
blk; n/a       ; Arabic
blk; n/a       ; Arabic_Presentation_Forms_A      ; Arabic_Presentation_Forms-A
blk; n/a       ; Arabic_Presentation_Forms_B
blk; n/a       ; Arabic_Supplement
blk; n/a       ; Armenian
blk; n/a       ; Arrows
blk; n/a       ; Balinese
blk; n/a       ; Basic_Latin                      ; ASCII
blk; n/a       ; Bengali
blk; n/a       ; Block_Elements
blk; n/a       ; Bopomofo
blk; n/a       ; Bopomofo_Extended
blk; n/a       ; Box_Drawing
blk; n/a       ; Braille_Patterns
blk; n/a       ; Buginese
blk; n/a       ; Buhid
blk; n/a       ; Byzantine_Musical_Symbols
blk; n/a       ; Carian
blk; n/a       ; Cham
blk; n/a       ; Cherokee
blk; n/a       ; CJK_Compatibility
blk; n/a       ; CJK_Compatibility_Forms
blk; n/a       ; CJK_Compatibility_Ideographs
blk; n/a       ; CJK_Compatibility_Ideographs_Supplement
blk; n/a       ; CJK_Radicals_Supplement
blk; n/a       ; CJK_Strokes
blk; n/a       ; CJK_Symbols_And_Punctuation
blk; n/a       ; CJK_Unified_Ideographs
blk; n/a       ; CJK_Unified_Ideographs_Extension_A
blk; n/a       ; CJK_Unified_Ideographs_Extension_B
blk; n/a       ; Combining_Diacritical_Marks
blk; n/a       ; Combining_Diacritical_Marks_For_Symbols; Combining_Marks_For_Symbols
blk; n/a       ; Combining_Diacritical_Marks_Supplement
blk; n/a       ; Combining_Half_Marks
blk; n/a       ; Control_Pictures
blk; n/a       ; Coptic
blk; n/a       ; Counting_Rod_Numerals
blk; n/a       ; Cuneiform
blk; n/a       ; Cuneiform_Numbers_And_Punctuation
blk; n/a       ; Currency_Symbols
blk; n/a       ; Cypriot_Syllabary
blk; n/a       ; Cyrillic
blk; n/a       ; Cyrillic_Extended_A
blk; n/a       ; Cyrillic_Extended_B
blk; n/a       ; Cyrillic_Supplement              ; Cyrillic_Supplementary
blk; n/a       ; Deseret
blk; n/a       ; Devanagari
blk; n/a       ; Dingbats
blk; n/a       ; Domino_Tiles
blk; n/a       ; Enclosed_Alphanumerics
blk; n/a       ; Enclosed_CJK_Letters_And_Months
blk; n/a       ; Ethiopic
blk; n/a       ; Ethiopic_Extended
blk; n/a       ; Ethiopic_Supplement
blk; n/a       ; General_Punctuation
blk; n/a       ; Geometric_Shapes
blk; n/a       ; Georgian
blk; n/a       ; Georgian_Supplement
blk; n/a       ; Glagolitic
blk; n/a       ; Gothic
blk; n/a       ; Greek_And_Coptic                 ; Greek
blk; n/a       ; Greek_Extended
blk; n/a       ; Gujarati
blk; n/a       ; Gurmukhi
blk; n/a       ; Halfwidth_And_Fullwidth_Forms
blk; n/a       ; Hangul_Compatibility_Jamo
blk; n/a       ; Hangul_Jamo
blk; n/a       ; Hangul_Syllables
blk; n/a       ; Hanunoo
blk; n/a       ; Hebrew
blk; n/a       ; High_Private_Use_Surrogates
blk; n/a       ; High_Surrogates
blk; n/a       ; Hiragana
blk; n/a       ; Ideographic_Description_Characters
blk; n/a       ; IPA_Extensions
blk; n/a       ; Kanbun
blk; n/a       ; Kangxi_Radicals
blk; n/a       ; Kannada
blk; n/a       ; Katakana
blk; n/a       ; Katakana_Phonetic_Extensions
blk; n/a       ; Kayah_Li
blk; n/a       ; Kharoshthi
blk; n/a       ; Khmer
blk; n/a       ; Khmer_Symbols
blk; n/a       ; Lao
blk; n/a       ; Latin_1_Supplement               ; Latin_1
blk; n/a       ; Latin_Extended_A
blk; n/a       ; Latin_Extended_Additional
blk; n/a       ; Latin_Extended_B
blk; n/a       ; Latin_Extended_C
blk; n/a       ; Latin_Extended_D
blk; n/a       ; Lepcha
blk; n/a       ; Letterlike_Symbols
blk; n/a       ; Limbu
blk; n/a       ; Linear_B_Ideograms
blk; n/a       ; Linear_B_Syllabary
blk; n/a       ; Low_Surrogates
blk; n/a       ; Lycian
blk; n/a       ; Lydian
blk; n/a       ; Mahjong_Tiles
blk; n/a       ; Malayalam
blk; n/a       ; Mathematical_Alphanumeric_Symbols
blk; n/a       ; Mathematical_Operators
blk; n/a       ; Miscellaneous_Mathematical_Symbols_A
blk; n/a       ; Miscellaneous_Mathematical_Symbols_B
blk; n/a       ; Miscellaneous_Symbols
blk; n/a       ; Miscellaneous_Symbols_And_Arrows
blk; n/a       ; Miscellaneous_Technical
blk; n/a       ; Modifier_Tone_Letters
blk; n/a       ; Mongolian
blk; n/a       ; Musical_Symbols
blk; n/a       ; Myanmar
blk; n/a       ; New_Tai_Lue
blk; n/a       ; NKo
blk; n/a       ; No_Block
blk; n/a       ; Number_Forms
blk; n/a       ; Ogham
blk; n/a       ; Ol_Chiki
blk; n/a       ; Old_Italic
blk; n/a       ; Old_Persian
blk; n/a       ; Optical_Character_Recognition
blk; n/a       ; Oriya
blk; n/a       ; Osmanya
blk; n/a       ; Phags_Pa
blk; n/a       ; Phaistos_Disc
blk; n/a       ; Phoenician
blk; n/a       ; Phonetic_Extensions
blk; n/a       ; Phonetic_Extensions_Supplement
blk; n/a       ; Private_Use_Area                 ; Private_Use
blk; n/a       ; Rejang
blk; n/a       ; Runic
blk; n/a       ; Saurashtra
blk; n/a       ; Shavian
blk; n/a       ; Sinhala
blk; n/a       ; Small_Form_Variants
blk; n/a       ; Spacing_Modifier_Letters
blk; n/a       ; Specials
blk; n/a       ; Sundanese
blk; n/a       ; Superscripts_And_Subscripts
blk; n/a       ; Supplemental_Arrows_A
blk; n/a       ; Supplemental_Arrows_B
blk; n/a       ; Supplemental_Mathematical_Operators
blk; n/a       ; Supplemental_Punctuation
blk; n/a       ; Supplementary_Private_Use_Area_A
blk; n/a       ; Supplementary_Private_Use_Area_B
blk; n/a       ; Syloti_Nagri
blk; n/a       ; Syriac
blk; n/a       ; Tagalog
blk; n/a       ; Tagbanwa
blk; n/a       ; Tags
blk; n/a       ; Tai_Le
blk; n/a       ; Tai_Xuan_Jing_Symbols
blk; n/a       ; Tamil
blk; n/a       ; Telugu
blk; n/a       ; Thaana
blk; n/a       ; Thai
blk; n/a       ; Tibetan
blk; n/a       ; Tifinagh
blk; n/a       ; Ugaritic
blk; n/a       ; Unified_Canadian_Aboriginal_Syllabics; Canadian_Syllabics
blk; n/a       ; Vai
blk; n/a       ; Variation_Selectors
blk; n/a       ; Variation_Selectors_Supplement
blk; n/a       ; Vertical_Forms
blk; n/a       ; Yi_Radicals
blk; n/a       ; Yi_Syllables
blk; n/a       ; Yijing_Hexagram_Symbols

# Canonical_Combining_Class (ccc)

ccc;   0; NR   ; Not_Reordered
ccc;   1; OV   ; Overlay
ccc;   7; NK   ; Nukta
ccc;   8; KV   ; Kana_Voicing
ccc;   9; VR   ; Virama
ccc; 200; ATBL ; Attached_Below_Left
ccc; 202; ATB  ; Attached_Below
ccc; 216; ATAR ; Attached_Above_Right
ccc; 218; BL   ; Below_Left
ccc; 220; B    ; Below
ccc; 222; BR   ; Below_Right
ccc; 224; L    ; Left
ccc; 226; R    ; Right
ccc; 228; AL   ; Above_Left
ccc; 230; A    ; Above
ccc; 232; AR   ; Above_Right
ccc; 233; DB   ; Double_Below
ccc; 234; DA   ; Double_Above
ccc; 240; IS   ; Iota_Subscript

# Case_Folding (cf)

# @missing: 0000..10FFFF; Case_Folding; <code point>

# Composition_Exclusion (CE)

CE ; N         ; No                               ; F                                ; False
CE ; Y         ; Yes                              ; T                                ; True

# Dash (Dash)

Dash; N        ; No                               ; F                                ; False
Dash; Y        ; Yes                              ; T                                ; True

# Decomposition_Mapping (dm)

# @missing: 0000..10FFFF; Decomposition_Mapping; <code point>

# Decomposition_Type (dt)

dt ; Can       ; Canonical                        ; can
dt ; Com       ; Compat                           ; com
dt ; Enc       ; Circle                           ; enc
dt ; Fin       ; Final                            ; fin
dt ; Font      ; font
dt ; Fra       ; Fraction                         ; fra
dt ; Init      ; Initial                          ; init
dt ; Iso       ; Isolated                         ; iso
dt ; Med       ; Medial                           ; med
dt ; Nar       ; Narrow                           ; nar
dt ; Nb        ; Nobreak                          ; nb
dt ; None      ; none
dt ; Sml       ; Small                            ; sml
dt ; Sqr       ; Square                           ; sqr
dt ; Sub       ; sub
dt ; Sup       ; Super                            ; sup
dt ; Vert      ; Vertical                         ; vert
dt ; Wide      ; wide

# Default_Ignorable_Code_Point (DI)

DI ; N         ; No                               ; F                                ; False
DI ; Y         ; Yes                              ; T                                ; True

# Deprecated (Dep)

Dep; N         ; No                               ; F                                ; False
Dep; Y         ; Yes                              ; T                                ; True

# Diacritic (Dia)

Dia; N         ; No                               ; F                                ; False
Dia; Y         ; Yes                              ; T                                ; True

# East_Asian_Width (ea)

ea ; A         ; Ambiguous
ea ; F         ; Fullwidth
ea ; H         ; Halfwidth
ea ; N         ; Neutral
ea ; Na        ; Narrow
ea ; W         ; Wide

# Expands_On_NFC (XO_NFC)

XO_NFC; N      ; No                               ; F                                ; False
XO_NFC; Y      ; Yes                              ; T                                ; True

# Expands_On_NFD (XO_NFD)

XO_NFD; N      ; No                               ; F                                ; False
XO_NFD; Y      ; Yes                              ; T                                ; True

# Expands_On_NFKC (XO_NFKC)

XO_NFKC; N     ; No                               ; F                                ; False
XO_NFKC; Y     ; Yes                              ; T                                ; True

# Expands_On_NFKD (XO_NFKD)

XO_NFKD; N     ; No                               ; F                                ; False
XO_NFKD; Y     ; Yes                              ; T                                ; True

# Extender (Ext)

Ext; N         ; No                               ; F                                ; False
Ext; Y         ; Yes                              ; T                                ; True

# FC_NFKC_Closure (FC_NFKC)

# @missing: 0000..10FFFF; FC_NFKC_Closure; <code point>

# Full_Composition_Exclusion (Comp_Ex)

Comp_Ex; N     ; No                               ; F                                ; False
Comp_Ex; Y     ; Yes                              ; T                                ; True

# General_Category (gc)

gc ; C         ; Other                            # Cc | Cf | Cn | Co | Cs
gc ; Cc        ; Control                          ; cntrl
gc ; Cf        ; Format
gc ; Cn        ; Unassigned
gc ; Co        ; Private_Use
gc ; Cs        ; Surrogate
gc ; L         ; Letter                           # Ll | Lm | Lo | Lt | Lu
gc ; LC        ; Cased_Letter                     # Ll | Lt | Lu
gc ; Ll        ; Lowercase_Letter
gc ; Lm        ; Modifier_Letter
gc ; Lo        ; Other_Letter
gc ; Lt        ; Titlecase_Letter
gc ; Lu        ; Uppercase_Letter
gc ; M         ; Mark                             # Mc | Me | Mn
gc ; Mc        ; Spacing_Mark
gc ; Me        ; Enclosing_Mark
gc ; Mn        ; Nonspacing_Mark
gc ; N         ; Number                           # Nd | Nl | No
gc ; Nd        ; Decimal_Number                   ; digit
gc ; Nl        ; Letter_Number
gc ; No        ; Other_Number
gc ; P         ; Punctuation                      ; punct                            # Pc | Pd | Pe | Pf | Pi | Po | Ps
gc ; Pc        ; Connector_Punctuation
gc ; Pd        ; Dash_Punctuation
gc ; Pe        ; Close_Punctuation
gc ; Pf        ; Final_Punctuation
gc ; Pi        ; Initial_Punctuation
gc ; Po        ; Other_Punctuation
gc ; Ps        ; Open_Punctuation
gc ; S         ; Symbol                           # Sc | Sk | Sm | So
gc ; Sc        ; Currency_Symbol
gc ; Sk        ; Modifier_Symbol
gc ; Sm        ; Math_Symbol
gc ; So        ; Other_Symbol
gc ; Z         ; Separator                        # Zl | Zp | Zs
gc ; Zl        ; Line_Separator
gc ; Zp        ; Paragraph_Separator
gc ; Zs        ; Space_Separator

# Grapheme_Base (Gr_Base)

Gr_Base; N     ; No                               ; F                                ; False
Gr_Base; Y     ; Yes                              ; T                                ; True

# Grapheme_Cluster_Break (GCB)

GCB; CN        ; Control
GCB; CR        ; CR
GCB; EX        ; Extend
GCB; L         ; L
GCB; LF        ; LF
GCB; LV        ; LV
GCB; LVT       ; LVT
GCB; PP        ; Prepend
GCB; SM        ; SpacingMark
GCB; T         ; T
GCB; V         ; V
GCB; XX        ; Other

# Grapheme_Extend (Gr_Ext)

Gr_Ext; N      ; No                               ; F                                ; False
Gr_Ext; Y      ; Yes                              ; T                                ; True

# Grapheme_Link (Gr_Link)

Gr_Link; N     ; No                               ; F                                ; False
Gr_Link; Y     ; Yes                              ; T                                ; True

# Hangul_Syllable_Type (hst)

hst; L         ; Leading_Jamo
hst; LV        ; LV_Syllable
hst; LVT       ; LVT_Syllable
hst; NA        ; Not_Applicable
hst; T         ; Trailing_Jamo
hst; V         ; Vowel_Jamo

# Hex_Digit (Hex)

Hex; N         ; No                               ; F                                ; False
Hex; Y         ; Yes                              ; T                                ; True

# Hyphen (Hyphen)

Hyphen; N      ; No                               ; F                                ; False
Hyphen; Y      ; Yes                              ; T                                ; True

# IDS_Binary_Operator (IDSB)

IDSB; N        ; No                               ; F                                ; False
IDSB; Y        ; Yes                              ; T                                ; True

# IDS_Trinary_Operator (IDST)

IDST; N        ; No                               ; F                                ; False
IDST; Y        ; Yes                              ; T                                ; True

# ID_Continue (IDC)

IDC; N         ; No                               ; F                                ; False
IDC; Y         ; Yes                              ; T                                ; True

# ID_Start (IDS)

IDS; N         ; No                               ; F                                ; False
IDS; Y         ; Yes                              ; T                                ; True

# ISO_Comment (isc)

# @missing: 0000..10FFFF; ISO_Comment; <none>

# Ideographic (Ideo)

Ideo; N        ; No                               ; F                                ; False
Ideo; Y        ; Yes                              ; T                                ; True

# Jamo_Short_Name (JSN)

# @missing: 0000..10FFFF; Jamo_Short_Name; <none>
JSN; A         ; A
JSN; AE        ; AE
JSN; B         ; B
JSN; BB        ; BB
JSN; BS        ; BS
JSN; C         ; C
JSN; D         ; D
JSN; DD        ; DD
JSN; E         ; E
JSN; EO        ; EO
JSN; EU        ; EU
JSN; G         ; G
JSN; GG        ; GG
JSN; GS        ; GS
JSN; H         ; H
JSN; I         ; I
JSN; J         ; J
JSN; JJ        ; JJ
JSN; K         ; K
JSN; L         ; L
JSN; LB        ; LB
JSN; LG        ; LG
JSN; LH        ; LH
JSN; LM        ; LM
JSN; LP        ; LP
JSN; LS        ; LS
JSN; LT        ; LT
JSN; M         ; M
JSN; N         ; N
JSN; NG        ; NG
JSN; NH        ; NH
JSN; NJ        ; NJ
JSN; O         ; O
JSN; OE        ; OE
JSN; P         ; P
JSN; R         ; R
JSN; S         ; S
JSN; SS        ; SS
JSN; T         ; T
JSN; U         ; U
JSN; WA        ; WA
JSN; WAE       ; WAE
JSN; WE        ; WE
JSN; WEO       ; WEO
JSN; WI        ; WI
JSN; YA        ; YA
JSN; YAE       ; YAE
JSN; YE        ; YE
JSN; YEO       ; YEO
JSN; YI        ; YI
JSN; YO        ; YO
JSN; YU        ; YU

# Join_Control (Join_C)

Join_C; N      ; No                               ; F                                ; False
Join_C; Y      ; Yes                              ; T                                ; True

# Joining_Group (jg)

jg ; n/a       ; Ain
jg ; n/a       ; Alaph
jg ; n/a       ; Alef
jg ; n/a       ; Beh
jg ; n/a       ; Beth
jg ; n/a       ; Burushaski_Yeh_Barree
jg ; n/a       ; Dal
jg ; n/a       ; Dalath_Rish
jg ; n/a       ; E
jg ; n/a       ; Fe
jg ; n/a       ; Feh
jg ; n/a       ; Final_Semkath
jg ; n/a       ; Gaf
jg ; n/a       ; Gamal
jg ; n/a       ; Hah
jg ; n/a       ; Hamza_On_Heh_Goal
jg ; n/a       ; He
jg ; n/a       ; Heh
jg ; n/a       ; Heh_Goal
jg ; n/a       ; Heth
jg ; n/a       ; Kaf
jg ; n/a       ; Kaph
jg ; n/a       ; Khaph
jg ; n/a       ; Knotted_Heh
jg ; n/a       ; Lam
jg ; n/a       ; Lamadh
jg ; n/a       ; Meem
jg ; n/a       ; Mim
jg ; n/a       ; No_Joining_Group
jg ; n/a       ; Noon
jg ; n/a       ; Nun
jg ; n/a       ; Pe
jg ; n/a       ; Qaf
jg ; n/a       ; Qaph
jg ; n/a       ; Reh
jg ; n/a       ; Reversed_Pe
jg ; n/a       ; Sad
jg ; n/a       ; Sadhe
jg ; n/a       ; Seen
jg ; n/a       ; Semkath
jg ; n/a       ; Shin
jg ; n/a       ; Swash_Kaf
jg ; n/a       ; Syriac_Waw
jg ; n/a       ; Tah
jg ; n/a       ; Taw
jg ; n/a       ; Teh_Marbuta
jg ; n/a       ; Teth
jg ; n/a       ; Waw
jg ; n/a       ; Yeh
jg ; n/a       ; Yeh_Barree
jg ; n/a       ; Yeh_With_Tail
jg ; n/a       ; Yudh
jg ; n/a       ; Yudh_He
jg ; n/a       ; Zain
jg ; n/a       ; Zhain

# Joining_Type (jt)

jt ; C         ; Join_Causing
jt ; D         ; Dual_Joining
jt ; L         ; Left_Joining
jt ; R         ; Right_Joining
jt ; T         ; Transparent
jt ; U         ; Non_Joining

# Line_Break (lb)

lb ; AI        ; Ambiguous
lb ; AL        ; Alphabetic
lb ; B2        ; Break_Both
lb ; BA        ; Break_After
lb ; BB        ; Break_Before
lb ; BK        ; Mandatory_Break
lb ; CB        ; Contingent_Break
lb ; CL        ; Close_Punctuation
lb ; CM        ; Combining_Mark
lb ; CR        ; Carriage_Return
lb ; EX        ; Exclamation
lb ; GL        ; Glue
lb ; H2        ; H2
lb ; H3        ; H3
lb ; HY        ; Hyphen
lb ; ID        ; Ideographic
lb ; IN        ; Inseparable                      ; Inseperable
lb ; IS        ; Infix_Numeric
lb ; JL        ; JL
lb ; JT        ; JT
lb ; JV        ; JV
lb ; LF        ; Line_Feed
lb ; NL        ; Next_Line
lb ; NS        ; Nonstarter
lb ; NU        ; Numeric
lb ; OP        ; Open_Punctuation
lb ; PO        ; Postfix_Numeric
lb ; PR        ; Prefix_Numeric
lb ; QU        ; Quotation
lb ; SA        ; Complex_Context
lb ; SG        ; Surrogate
lb ; SP        ; Space
lb ; SY        ; Break_Symbols
lb ; WJ        ; Word_Joiner
lb ; XX        ; Unknown
lb ; ZW        ; ZWSpace

# Logical_Order_Exception (LOE)

LOE; N         ; No                               ; F                                ; False
LOE; Y         ; Yes                              ; T                                ; True

# Lowercase (Lower)

Lower; N       ; No                               ; F                                ; False
Lower; Y       ; Yes                              ; T                                ; True

# Lowercase_Mapping (lc)

# @missing: 0000..10FFFF; Lowercase_Mapping; <code point>

# Math (Math)

Math; N        ; No                               ; F                                ; False
Math; Y        ; Yes                              ; T                                ; True

# NFC_Quick_Check (NFC_QC)

NFC_QC; M      ; Maybe
NFC_QC; N      ; No
NFC_QC; Y      ; Yes

# NFD_Quick_Check (NFD_QC)

NFD_QC; N      ; No
NFD_QC; Y      ; Yes

# NFKC_Quick_Check (NFKC_QC)

NFKC_QC; M     ; Maybe
NFKC_QC; N     ; No
NFKC_QC; Y     ; Yes

# NFKD_Quick_Check (NFKD_QC)

NFKD_QC; N     ; No
NFKD_QC; Y     ; Yes

# Name (na)

# @missing: 0000..10FFFF; Name; <none>

# Noncharacter_Code_Point (NChar)

NChar; N       ; No                               ; F                                ; False
NChar; Y       ; Yes                              ; T                                ; True

# Numeric_Type (nt)

nt ; De        ; Decimal
nt ; Di        ; Digit
nt ; None      ; None
nt ; Nu        ; Numeric

# Numeric_Value (nv)

# @missing: 0000..10FFFF; Numeric_Value; NaN

# Other_Alphabetic (OAlpha)

OAlpha; N      ; No                               ; F                                ; False
OAlpha; Y      ; Yes                              ; T                                ; True

# Other_Default_Ignorable_Code_Point (ODI)

ODI; N         ; No                               ; F                                ; False
ODI; Y         ; Yes                              ; T                                ; True

# Other_Grapheme_Extend (OGr_Ext)

OGr_Ext; N     ; No                               ; F                                ; False
OGr_Ext; Y     ; Yes                              ; T                                ; True

# Other_ID_Continue (OIDC)

OIDC; N        ; No                               ; F                                ; False
OIDC; Y        ; Yes                              ; T                                ; True

# Other_ID_Start (OIDS)

OIDS; N        ; No                               ; F                                ; False
OIDS; Y        ; Yes                              ; T                                ; True

# Other_Lowercase (OLower)

OLower; N      ; No                               ; F                                ; False
OLower; Y      ; Yes                              ; T                                ; True

# Other_Math (OMath)

OMath; N       ; No                               ; F                                ; False
OMath; Y       ; Yes                              ; T                                ; True

# Other_Uppercase (OUpper)

OUpper; N      ; No                               ; F                                ; False
OUpper; Y      ; Yes                              ; T                                ; True

# Pattern_Syntax (Pat_Syn)

Pat_Syn; N     ; No                               ; F                                ; False
Pat_Syn; Y     ; Yes                              ; T                                ; True

# Pattern_White_Space (Pat_WS)

Pat_WS; N      ; No                               ; F                                ; False
Pat_WS; Y      ; Yes                              ; T                                ; True

# Quotation_Mark (QMark)

QMark; N       ; No                               ; F                                ; False
QMark; Y       ; Yes                              ; T                                ; True

# Radical (Radical)

Radical; N     ; No                               ; F                                ; False
Radical; Y     ; Yes                              ; T                                ; True

# STerm (STerm)

STerm; N       ; No                               ; F                                ; False
STerm; Y       ; Yes                              ; T                                ; True

# Script (sc)

sc ; Arab      ; Arabic
sc ; Armn      ; Armenian
sc ; Bali      ; Balinese
sc ; Beng      ; Bengali
sc ; Bopo      ; Bopomofo
sc ; Brai      ; Braille
sc ; Bugi      ; Buginese
sc ; Buhd      ; Buhid
sc ; Cans      ; Canadian_Aboriginal
sc ; Cari      ; Carian
sc ; Cham      ; Cham
sc ; Cher      ; Cherokee
sc ; Copt      ; Coptic                           ; Qaac
sc ; Cprt      ; Cypriot
sc ; Cyrl      ; Cyrillic
sc ; Deva      ; Devanagari
sc ; Dsrt      ; Deseret
sc ; Ethi      ; Ethiopic
sc ; Geor      ; Georgian
sc ; Glag      ; Glagolitic
sc ; Goth      ; Gothic
sc ; Grek      ; Greek
sc ; Gujr      ; Gujarati
sc ; Guru      ; Gurmukhi
sc ; Hang      ; Hangul
sc ; Hani      ; Han
sc ; Hano      ; Hanunoo
sc ; Hebr      ; Hebrew
sc ; Hira      ; Hiragana
sc ; Hrkt      ; Katakana_Or_Hiragana
sc ; Ital      ; Old_Italic
sc ; Kali      ; Kayah_Li
sc ; Kana      ; Katakana
sc ; Khar      ; Kharoshthi
sc ; Khmr      ; Khmer
sc ; Knda      ; Kannada
sc ; Laoo      ; Lao
sc ; Latn      ; Latin
sc ; Lepc      ; Lepcha
sc ; Limb      ; Limbu
sc ; Linb      ; Linear_B
sc ; Lyci      ; Lycian
sc ; Lydi      ; Lydian
sc ; Mlym      ; Malayalam
sc ; Mong      ; Mongolian
sc ; Mymr      ; Myanmar
sc ; Nkoo      ; Nko
sc ; Ogam      ; Ogham
sc ; Olck      ; Ol_Chiki
sc ; Orya      ; Oriya
sc ; Osma      ; Osmanya
sc ; Phag      ; Phags_Pa
sc ; Phnx      ; Phoenician
sc ; Qaai      ; Inherited
sc ; Rjng      ; Rejang
sc ; Runr      ; Runic
sc ; Saur      ; Saurashtra
sc ; Shaw      ; Shavian
sc ; Sinh      ; Sinhala
sc ; Sund      ; Sundanese
sc ; Sylo      ; Syloti_Nagri
sc ; Syrc      ; Syriac
sc ; Tagb      ; Tagbanwa
sc ; Tale      ; Tai_Le
sc ; Talu      ; New_Tai_Lue
sc ; Taml      ; Tamil
sc ; Telu      ; Telugu
sc ; Tfng      ; Tifinagh
sc ; Tglg      ; Tagalog
sc ; Thaa      ; Thaana
sc ; Thai      ; Thai
sc ; Tibt      ; Tibetan
sc ; Ugar      ; Ugaritic
sc ; Vaii      ; Vai
sc ; Xpeo      ; Old_Persian
sc ; Xsux      ; Cuneiform
sc ; Yiii      ; Yi
sc ; Zyyy      ; Common
sc ; Zzzz      ; Unknown

# Sentence_Break (SB)

SB ; AT        ; ATerm
SB ; CL        ; Close
SB ; CR        ; CR
SB ; EX        ; Extend
SB ; FO        ; Format
SB ; LE        ; OLetter
SB ; LF        ; LF
SB ; LO        ; Lower
SB ; NU        ; Numeric
SB ; SC        ; SContinue
SB ; SE        ; Sep
SB ; SP        ; Sp
SB ; ST        ; STerm
SB ; UP        ; Upper
SB ; XX        ; Other

# Simple_Case_Folding (scf)

# @missing: 0000..10FFFF; Simple_Case_Folding; <code point>

# Simple_Lowercase_Mapping (slc)

# @missing: 0000..10FFFF; Simple_Lowercase_Mapping; <code point>

# Simple_Titlecase_Mapping (stc)

# @missing: 0000..10FFFF; Simple_Titlecase_Mapping; <code point>

# Simple_Uppercase_Mapping (suc)

# @missing: 0000..10FFFF; Simple_Uppercase_Mapping; <code point>

# Soft_Dotted (SD)

SD ; N         ; No                               ; F                                ; False
SD ; Y         ; Yes                              ; T                                ; True

# Terminal_Punctuation (Term)

Term; N        ; No                               ; F                                ; False
Term; Y        ; Yes                              ; T                                ; True

# Titlecase_Mapping (tc)

# @missing: 0000..10FFFF; Titlecase_Mapping; <code point>

# Unicode_1_Name (na1)

# @missing: 0000..10FFFF; Unicode_1_Name; <none>

# Unicode_Radical_Stroke (URS)

# @missing: 0000..10FFFF; Unicode_Radical_Stroke; <none>

# Unified_Ideograph (UIdeo)

UIdeo; N       ; No                               ; F                                ; False
UIdeo; Y       ; Yes                              ; T                                ; True

# Uppercase (Upper)

Upper; N       ; No                               ; F                                ; False
Upper; Y       ; Yes                              ; T                                ; True

# Uppercase_Mapping (uc)

# @missing: 0000..10FFFF; Uppercase_Mapping; <code point>

# Variation_Selector (VS)

VS ; N         ; No                               ; F                                ; False
VS ; Y         ; Yes                              ; T                                ; True

# White_Space (WSpace)

WSpace; N      ; No                               ; F                                ; False
WSpace; Y      ; Yes                              ; T                                ; True

# Word_Break (WB)

WB ; CR        ; CR
WB ; EX        ; ExtendNumLet
WB ; Extend    ; Extend
WB ; FO        ; Format
WB ; KA        ; Katakana
WB ; LE        ; ALetter
WB ; LF        ; LF
WB ; MB        ; MidNumLet
WB ; ML        ; MidLetter
WB ; MN        ; MidNum
WB ; NL        ; Newline
WB ; NU        ; Numeric
WB ; XX        ; Other

# XID_Continue (XIDC)

XIDC; N        ; No                               ; F                                ; False
XIDC; Y        ; Yes                              ; T                                ; True

# XID_Start (XIDS)

XIDS; N        ; No                               ; F                                ; False
XIDS; Y        ; Yes                              ; T                                ; True

# EOF
