# PropertyAliases-5.1.0.txt
# Date: 2008-02-28, 12:28:00 PST [KW]
#
# 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 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
# ================================================
ccc       ; Canonical_Combining_Class
nv        ; Numeric_Value

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

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

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

# ================================================
# Enumerated Properties
# ================================================
bc        ; Bidi_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
