All Downloads are FREE. Search and download functionalities are using the official Maven repository.

core.common.transforms.my-t-my-s0-zawgyi.xml Maven / Gradle / Ivy

The newest version!
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
<!--
Copyright © 1991-2013 Unicode, Inc.
CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
For terms of use, see http://www.unicode.org/copyright.html
-->
<supplementalData>
	<version number="$Revision: 12858 $"/>
	<transforms>
		<transform source="Zawgyi" target="my" direction="forward" alias="my-t-my-s0-zawgyi">
			<tRule><![CDATA[
# This transform converts Zawgyi "encoded" Burmese into proper
# unicode. Zawgyi is a popular encoding scheme in Myanmar. It uses
# the Myanmar unicode range but assigns different characters or
# glyphs to some codepoints. In addition to the character mapping,
# there is reordering of codepoints needed to match the expected
# unicode order. This reordering is context-based.
#
# This transform is done in two main stages:
# (1) Map all Zawgyi codepoints to their Unicode counterpart.
# (2) Perform reordering.

# Modern Burmese digits & Unicode code points.
$nondigits = [^\u1040-\u1049];
$consonant = [\u1000-\u1021];
$vowelsign = [\u102B-\u1030\u1032];  # Unicode vowel signs except E (1031)
$umedial = [\u103B-\u103E];    # Medial codepoints in Unicode
$vowelmedial = [\u102B-\u1030\u1032\u103B-\u103F];  # Union of vowel signs and medials
$ukinzi = \u1004\u103A\u1039;  # Codepoints representing kinzi in Unicode

# ZAWGYI MYANMAR CONSONANT SIGN MEDIAL RA
# This character has multiple representations in the Zawgyi font.
$zmedialra = [\u103B\u107E-\u1084];

####
#### STAGE (1): CODEPOINT MAPPING FROM ZAWGYI TO UNICODE
####

# Kinzi (predefined ligatures)
# Move base character to the right
($consonant) \u103A \u1064 → $ukinzi $1 \u103B;
($consonant) \u1064 → $ukinzi $1;
\u1064 → $ukinzi;

# Special cases moving base character to right before
($consonant) \u108b → $ukinzi $1 \u102D;
($consonant) \u108C → $ukinzi $1 \u102E;
($consonant) \u108D → $ukinzi $1 \u1036;

# Special cases moving Kinzi block to left
($consonant) \u103A \u1033 \u108B → $ukinzi $1 \u103B \u102D \u102F;
($consonant) \u103A \u108b → $ukinzi $1 \u103B \u102D ;
($consonant) \u103A \u108C \u1033 → $ukinzi $1 \u103B \u102E \u102F;
($consonant) \u103A \u108C → $ukinzi $1 \u103B \u102E ;
($consonant) \u103A \u108D → $ukinzi $1 \u103B \u1036 ;
($consonant) \u103A \u108e → $1 \u103B \u102D \u1036 ;

\u108B → $ukinzi \u102D ;
\u108C → $ukinzi \u102E ;
\u108D → $ukinzi \u1036 ;

# Consonants (only the ones that have to change)
\u106A ($vowelsign) \u1038 → \u1025 $1 \u1038 ;  # U sound
\u106A → \u1009 ;  # NYA
\u106B → \u100A ;
\u108F → \u1014 ;
\u1090 → \u101B ;
\u1086 → \u103F ;

# yapin
\u103A → \u103B ;
\u107D → \u103B ;

# wasway
\u103C \u108A → \u103D \u103E;  # To avoid duplicate medials
\u103C → \u103D ;
\u108A → \u103D \u103E ;

# hatoh
\u103D → \u103E ;
\u1087 → \u103E ;
\u1088 → \u103E \u102F ;
\u1089 → \u103E \u1030 ;

# Single diacritics with space - use non-breaking
# TODO(ccornelius): determine if this breaks transliteration

# asat
\u1039 → \u103A ;

# Vowels
\u1033 → \u102F ;
\u1034 → \u1030 ;
\u105A → \u102B \u103A ;
\u108E → \u102D \u1036 ;

# lDot
# Special cases to move dot to right of base consonant
\u1031 \u1094 ($consonant) \u103D → $1 \u103E \u1031 \u1037 ;
\u1094 → \u1037 ;
\u1095 → \u1037 ;

# Special cases for 1025 vs 1009
\u1025 \u1061 → \u1009 \u1039 \u1001;
\u1025 \u1062 → \u1009 \u1039 \u1002;
\u1025 \u1065 → \u1009 \u1039 \u1005;
\u1025 \u1068 → \u1009 \u1039 \u1007;
\u1025 \u1076 → \u1009 \u1039 \u1013;
\u1025 \u1078 → \u1009 \u1039 \u1015;
\u1025 \u107A → \u1009 \u1039 \u1017;
\u1025 \u1079 → \u1009 \u1039 \u1016;

($consonant) \u103A \u1039 → $1 \u103A \u103B;

# Stacked Consonants
\u1060 → \u1039 \u1000 ;
\u1061 → \u1039 \u1001 ;
\u1062 → \u1039 \u1002 ;
\u1063 → \u1039 \u1003 ;
\u1065 → \u1039 \u1005 ;
\u1066 → \u1039 \u1006 ;
\u1067 → \u1039 \u1006 ;
\u1068 → \u1039 \u1007 ;
\u1069 → \u1039 \u1008 ;
\u106C → \u1039 \u100B ;
\u106D → \u1039 \u100C ;
\u1070 → \u1039 \u100F ;
\u1071 → \u1039 \u1010 ;
\u1072 → \u1039 \u1010 ;
\u1096 → \u1039 \u1010 \u103D;
\u1073 → \u1039 \u1011 ;
\u1074 → \u1039 \u1011 ;
\u1075 → \u1039 \u1012 ;
\u1076 → \u1039 \u1013 ;
\u1077 → \u1039 \u1014 ;
\u1078 → \u1039 \u1015 ;
\u1079 → \u1039 \u1016 ;
\u107A → \u1039 \u1017 ;
\u107B → \u1039 \u1018 ;
\u1093 → \u1039 \u1018 ;
\u107C → \u1039 \u1019 ;
\u1085 → \u1039 \u101C ;

# Pre-defined ligatures
\u106E → \u100D\u1039\u100D ;
\u106F → \u100D\u1039\u100E ;
\u1091 → \u100F\u1039\u100D ;
\u1092 → \u100B\u1039\u100C ;
\u1097 → \u100B\u1039\u100B ;
\u104E → \u104E\u1004\u103A\u1038 ;

# yayit
$zmedialra → \u103C ;


####
#### STAGE (2): POST REORDERING RULES FOR UNICODE RENDERING
#### Now every codepoint is Unicode.  This starts conversion
#### from semi-visual order to logical order.
####
::Null;

# Case of MYANMAR digit being used instead of a letter
\u1044 \u103a → | \u104E \u103A ;
# Lone zero with diacritic mark
\u1031 \u1040 ($nondigits) → \u1031 \u101D $1;
($nondigits) \u1040 ([\u102B-\u103F]) → $1 \u101D $2;

# cwc: Simpler replacements for Zawgyi 1025
\u1025 \u103A → \u1009 \u103A;
\u1025 \u102E → \u1026;

# Asat and dot below reordering.
\u1037\u103A → \u103A\u1037;

# Reorder some vowel signs
\u1036 ($umedial*) ($vowelsign+) → $1 $2 \u1036 ;
([\u102B\u102C\u102F\u1030]) ([\u102D\u102E\u1032]) → $2 $1;

# Move ra medial, but not others.
\u103C ($consonant) → $1 \u103C;

####
#### Stage 3
#### Move \u1031, \u1036, and \u103C after consonants.

::Null;

# 1031 moved after consonant, with and without kinzi or medials
([\u1031]+) $ukinzi ($consonant) → $ukinzi $2 $1;

([\u1031]+) ($consonant) ($umedial+) → $2 $3 $1;
([\u1031]+) ($consonant) } [^\u103B\u103C\u103D\u103E] → $2 $1;

\u103C \u103A \u1039 ($consonant) → \u103A \u1039 $1 \u103C;

\u1036 ($umedial+) → $1 \u1036;


####
#### Stage 4
#### Reordering medials, dot below, contractions, E sign, and asat.

::Null;

# Reorder the medials
([\u103C\u103D\u103E]+) \u103B → \u103B $1;
([\u103D\u103E]+) \u103C → \u103C $1;
\u103E\u103D → \u103D\u103E ;

# Contractions with vowel signs
([\u1031]+) ($vowelsign*) \u1039 ($consonant) → \u1039 $3 $1 $2;
($vowelsign+) \u1039 ($consonant) → \u1039 $2 $1;

# Move vowel sign E \u1031 after medials, but not across consonants
($umedial*) ([\u1031]+) ($umedial*) → $1 $3 $2;

# Reorder dot below after medials and vowel diacritics
\u1037 ([\u102D-\u1030\u1032\u1036]) → $1 \u1037;
\u1037 ($umedial+) → $1 \u1037;

# Move vowel signs after medials
($vowelsign+) ($umedial+) → $2 $1;

# Reorder modifiers and asat
($consonant) ([\u102B-\u1032\u1036\u103B-\u103E]) \u103A ($consonant) → $1 \u103A $2 $3;

####
#### Stage 5.  More reorderings
#### Vowel signs after medials, sort medials, 
####
::Null;

([\u1031]+) ($umedial+) → $2 $1;

# More moving vowel signs after medials
($vowelsign) ($umedial) → $2 $1;

# Sort the medials
([\u103C\u103D\u103E]) \u103B → \u103B $1;
([\u103D\u103E]) \u103C → \u103C $1;
\u103E\u103D → \u103D\u103E ;

# Move visarga (\u1038) after other signs
\u1038 ([$vowelmedial]) → $1 \u1038;
\u1038 ([\u1036\u1037\u103A]) → $1 \u1038;

###
### Stage 6
### Finish medial sorting, fix conflicting and extra diacritics
###

::Null;

# Fix 103B/103A order for asat.
($consonant) \u103B \u103A → $1 \u103A \u103B;
			]]></tRule>
		</transform>
	</transforms>
</supplementalData>




© 2015 - 2025 Weber Informatics LLC | Privacy Policy