# PropertyAliases-4.1.0.txt
# Date: 2005-02-26, 11:13:41 GMT [MD]
#
# Unicode Character Database
# Copyright (c) 1991-2005 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

