# PropertyAliases-4.0.1.txt
# Date: 2004-03-02, 19:47:55 GMT [MD]
#
# Unicode Character Database
# Copyright (c) 1991-2004 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 properties 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 has two or more fields, separated by semicolons.
#
# First Field: The first field is an abbreviated name for the property.
#
# Second Field: The second field is a long name
#
# 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
# ================================================


# ================================================
# Numeric Properties
# ================================================
nv        ; Numeric_Value

# ================================================
# String Properties
# ================================================
bmg       ; Bidi_Mirroring_Glyph
cf        ; Case_Folding
dm        ; Decomposition_Mapping
FC_NFKC   ; FC_NFKC_Closure
lc        ; Lowercase_Mapping
scc       ; Special_Case_Condition
sfc       ; Simple_Case_Folding
slc       ; Simple_Lowercase_Mapping
stc       ; Simple_Titlecase_Mapping
suc       ; Simple_Uppercase_Mapping
tc        ; Titlecase_Mapping
uc        ; Uppercase_Mapping

# ================================================
# Miscellaneous Properties
# ================================================
isc       ; ISO_Comment
na        ; Name
na1       ; Unicode_1_Name
URS       ; Unicode_Radical_Stroke

# ================================================
# Catalog Properties
# ================================================
age       ; Age
blk       ; Block
sc        ; Script

# ================================================
# Enumerated Properties
# ================================================
bc        ; Bidi_Class
ccc       ; Canonical_Combining_Class
dt        ; Decomposition_Type
ea        ; East_Asian_Width
gc        ; General_Category
hst       ; Hangul_Syllable_Type
jg        ; Joining_Group
jt        ; Joining_Type
lb        ; Line_Break
NFC_QC    ; NFC_Quick_Check
NFD_QC    ; NFD_Quick_Check
NFKC_QC   ; NFKC_Quick_Check
NFKD_QC   ; NFKD_Quick_Check
nt        ; Numeric_Type

# ================================================
# Binary Properties
# ================================================
AHex      ; ASCII_Hex_Digit
Alpha     ; Alphabetic
Bidi_C    ; Bidi_Control
Bidi_M    ; Bidi_Mirrored
CE        ; Composition_Exclusion
Comp_Ex   ; Full_Composition_Exclusion
Dash      ; Dash
Dep       ; Deprecated
DI        ; Default_Ignorable_Code_Point
Dia       ; Diacritic
Ext       ; Extender
Gr_Base   ; Grapheme_Base
Gr_Ext    ; Grapheme_Extend
Gr_Link   ; Grapheme_Link
Hex       ; Hex_Digit
Hyphen    ; Hyphen
IDC       ; ID_Continue
Ideo      ; Ideographic
IDS       ; ID_Start
IDSB      ; IDS_Binary_Operator
IDST      ; IDS_Trinary_Operator
Join_C    ; Join_Control
LOE       ; Logical_Order_Exception
Lower     ; Lowercase
Math      ; Math
NChar     ; Noncharacter_Code_Point
OAlpha    ; Other_Alphabetic
ODI       ; Other_Default_Ignorable_Code_Point
OGr_Ext   ; Other_Grapheme_Extend
OIDS      ; Other_ID_Start
OLower    ; Other_Lowercase
OMath     ; Other_Math
OUpper    ; Other_Uppercase
QMark     ; Quotation_Mark
Radical   ; Radical
SD        ; Soft_Dotted
STerm     ; STerm
Term      ; Terminal_Punctuation
UIdeo     ; Unified_Ideograph
Upper     ; Uppercase
VS        ; Variation_Selector
WSpace    ; White_Space
XIDC      ; XID_Continue
XIDS      ; XID_Start
XO_NFC    ; Expands_On_NFC
XO_NFD    ; Expands_On_NFD
XO_NFKC   ; Expands_On_NFKC
XO_NFKD   ; Expands_On_NFKD

# ================================================
# Total:    82

