# PropertyAliases-5.0.0.txt
# Date: 2006-03-03, 08:23:34 GMT [MD]
#
# Unicode Character Database
# Copyright (c) 1991-2006 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
GCB       ; Grapheme_Cluster_Break
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
SB        ; Sentence_Break
WB        ; Word_Break

# ================================================
# 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
OIDC      ; Other_ID_Continue
OIDS      ; Other_ID_Start
OLower    ; Other_Lowercase
OMath     ; Other_Math
OUpper    ; Other_Uppercase
Pat_Syn   ; Pattern_Syntax
Pat_WS    ; Pattern_White_Space
QMark     ; Quotation_Mark
Radical   ; Radical
SD        ; Soft_Dotted
STerm     ; STerm
Term      ; Terminal_Punctuation
UIdeo     ; Unified_Ideograph
Upper     ; Uppercase
VS        ; Variation_Selector
WSpace    ; White_Space                 ; 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:    88

# EOF
