summaryrefslogtreecommitdiff
path: root/language/burmese/birm.pl
diff options
context:
space:
mode:
Diffstat (limited to 'language/burmese/birm.pl')
-rw-r--r--language/burmese/birm.pl306
1 files changed, 306 insertions, 0 deletions
diff --git a/language/burmese/birm.pl b/language/burmese/birm.pl
new file mode 100644
index 0000000000..7c0f5cb908
--- /dev/null
+++ b/language/burmese/birm.pl
@@ -0,0 +1,306 @@
+#!/usr/bin/perl -w
+#
+# preprocessor for Burmese transliterated text preparing it to be typeset as Burmese by
+# LaTeX
+# author: Johannes Reese
+# date: 6 July 2002
+# version: 0.003 (5 August 2002)
+# bug reports and comments to: reese@linguist.de
+#
+# Usage: perl birm.pl <FILE> (without ending; takes <FILE>.bir, produces <FILE>.tex)
+#
+# description: changes transcribed Burmese syllables into the right character
+# numbers for processing them with LaTeX, only those inside an environment
+# started with {\birm. TeX commands inside such an environment will be left
+# unchanged, only the arguments of \textbf, \emph, \textsc, and \textsf
+# will be changed, too; however, at present, these commands have no effect,
+# as only one script style is provided so far.
+# warnings: syllables must end with a space (or punctuation sign plus space)
+#
+#
+# Copyright (c) Joh. Reese 2002
+#
+# This file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# IMPORTANT COPYRIGHT NOTICE:
+#
+# Permission is granted to copy this file to another file with a clearly
+# different name and to customize the declarations in that copy to serve
+# the needs of your installation, provided that you do not remove this
+# notice or original copyright notice.
+
+# However, NO PERMISSION is granted to produce or to distribute a
+# modified version of this file or the ones bound with the package
+# under its original name.
+
+# You are NOT ALLOWED to change this file.
+#
+#
+if("$ARGV[0].tex") # protects possibly existing files
+{
+ print "The file to be produced already exists! Shall it be destroyed, press y\n";
+ $Eingabe = <STDIN>;
+ if($Eingabe eq "y\n")
+ {
+ unlink("$ARGV[0].tex");
+ print "done!\n";
+ }
+ else
+ {
+ print "Okay, don't worry! Nothing happened\n";
+ die;
+ }
+}
+open(IN, "$ARGV[0].bir"); # the file with the transliterated text
+open(OUT, ">>$ARGV[0].tex"); # the tex-file with the input for Burmese; non-Burmese
+# text is left unchanged
+$Schalter = 0; # as long as this is 0, nothing will be changed
+while(<IN>)
+{
+ $Line = $_;
+ $CharPos = 0;
+ $Letzt = 0;
+ @Zeile = ();
+ $LineLen = length($Line);
+ until($CharPos == $LineLen)
+ {
+ if(substr($Line,$CharPos,1) eq " " || substr($Line,$CharPos,1) eq "\n")
+ {
+ # hopefully, you put a space between each syllable
+ $Laenge = $CharPos - $Letzt;
+ $zeile = substr($Line,$Letzt,$Laenge); # this is one syllable
+ $Letzt = $CharPos;
+ push(@Zeile,$zeile); # get a list in order
+#to handle every syllable independently
+ }
+ $CharPos++;
+ }
+ for($i=0;$i<=$#Zeile;$i++)
+ {
+ if($Zeile[$i] =~ /\{\\birm/)
+ {
+ $Zeile[$i] =~ s/\\birm/\\birm\\relsize\{+1\}/g; # the original Burmese font
+ # is a bit small
+ $Schalter = 1; # puts the substitution routine on
+ }
+ elsif($Schalter > 0)
+ {
+ $ZeilPos = 0;
+ $ZeilLen = length($Zeile[$i]);
+ until($ZeilPos == $ZeilLen) # allows environments inside a Burmese one
+ {
+ if(substr($Zeile[$i],$ZeilPos,1) eq "\{")
+ {
+ $Schalter++;
+ }
+ elsif(substr($Zeile[$i],$ZeilPos,1) eq "\}")
+ {
+ $Schalter--;
+ }
+ $ZeilPos++;
+ }
+ $Zeile[$i] =~ s/\\large/\\relsize\{\+1\}/g;#original Burmese font is small
+ $Zeile[$i] =~ s/\\Large/\\relsize\{\+2\}/g;#original Burmese font is small
+ $Zeile[$i] =~ s/\\LARGE/\\relsize\{\+3\}/g;#original Burmese font is small
+ $Zeile[$i] =~ s/\\huge/\\relsize\{\+4\}/g;#original Burmese font is small
+ $Zeile[$i] =~ s/\\Huge/\\relsize\{\+5\}/g;#original Burmese font is small
+ $Zeile[$i] =~ s/\\small/\\relsize\{\-1\}/g;#original Burmese font is small
+ $Zeile[$i] =~ s/\\footnotesize/\\relsize\{\-2\}/g;#original Burmese font is small
+ $Zeile[$i] =~ s/\\scriptsize/\\relsize\{\-3\}/g;#original Burmese font is small
+ $Zeile[$i] =~ s/\\tiny/\\relsize\{\-4\}/g;#original Burmese font is small
+ unless($Zeile[$i] =~ /\\/) # don't touch TeX commands;
+ ## unfortunately, arguments to TeX commands
+ ## will be left unchanged, too
+ {
+ &tausch; # run the substitution subroutine
+ }
+################## begin of list of commands the arguments of which must be changed
+ elsif($Zeile[$i] =~ /\\textbf/) # change the arguments of TeX commands,
+ # but not the commands themselves
+ {
+ $spalter = index($Zeile[$i],"\{"); # where the argument starts
+ $antispalter = length($Zeile[$i]) - $spalter; #the length of the argument
+ $Rest = substr($Zeile[$i],0,$spalter); # the TeX command
+ $Zeile[$i] = substr($Zeile[$i],$spalter,$antispalter); # the argument
+ &tausch; # substitute the argument by the right Burmese characters
+ $Zeile[$i] = $Rest . $Zeile[$i]; # put both together again
+ }
+ elsif($Zeile[$i] =~ /\\emph/) # change the arguments of TeX commands,
+ # but not the commands themselves
+ {
+ $spalter = index($Zeile[$i],"\{"); # where the argument starts
+ $antispalter = length($Zeile[$i]) - $spalter; #the length of the argument
+ $Rest = substr($Zeile[$i],0,$spalter); # the TeX command
+ $Zeile[$i] = substr($Zeile[$i],$spalter,$antispalter); # the argument
+ &tausch; # substitute the argument by the right Burmese characters
+ $Zeile[$i] = $Rest . $Zeile[$i]; # put both together again
+ }
+ elsif($Zeile[$i] =~ /\\textsc/) # change the arguments of TeX commands,
+ # but not the commands themselves
+ {
+ $spalter = index($Zeile[$i],"\{"); # where the argument starts
+ $antispalter = length($Zeile[$i]) - $spalter; #the length of the argument
+ $Rest = substr($Zeile[$i],0,$spalter); # the TeX command
+ $Zeile[$i] = substr($Zeile[$i],$spalter,$antispalter); # the argument
+ &tausch; # substitute the argument by the right Burmese characters
+ $Zeile[$i] = $Rest . $Zeile[$i]; # put both together again
+ }
+ elsif($Zeile[$i] =~ /\\textsf/) # change the arguments of TeX commands,
+ # but not the commands themselves
+ {
+ $spalter = index($Zeile[$i],"\{"); # where the argument starts
+ $antispalter = length($Zeile[$i]) - $spalter; #the length of the argument
+ $Rest = substr($Zeile[$i],0,$spalter); # the TeX command
+ $Zeile[$i] = substr($Zeile[$i],$spalter,$antispalter); # the argument
+ &tausch; # substitute the argument by the right Burmese characters
+ $Zeile[$i] = $Rest . $Zeile[$i]; # put both together again
+ }
+######################### end of repeatable list of commands the arguments of which must be changed
+ }
+ }
+print OUT @Zeile;
+print OUT "\n"; # well, everything should appear in the output unchanged now,
+ # but the words inside the Burmese environment
+}
+close(IN);
+close(OUT);
+1;
+
+
+## The substitution subroutine
+
+sub tausch{
+# exchange the syllable rhyme with the correct Burmese character or character combination
+# together with Character 116, the "dummy consonant"
+# an 'h' signals the third tone, a '-sign the fourth tone,
+# a double vowel indicates the second tone, the first tone is unmarked
+# "N" stands for nasalized vowels
+# cf. burmguide.ps
+
+$Zeile[$i] =~ s/HNAI\'/XXX89/;
+$Zeile[$i] =~ s/YWEI/XXX737/;
+
+$Zeile[$i] =~ s/^ w/ W/;
+$Zeile[$i] =~ s/^ y/ Y/;
+$Zeile[$i] =~ s/aaN/XXX116XXX114XXX102\{\}/;
+$Zeile[$i] =~ s/ahN/XXX116XXX114XXX102XXX59\{\}/;
+$Zeile[$i] =~ s/aN/XXX116XXX114XXX102XXX104\{\}/;
+$Zeile[$i] =~ s/aaiN/XXX116XXX100XXX107XXX105XXX102\{\}/;
+$Zeile[$i] =~ s/aihN/XXX116XXX100XXX107XXX105XXX102XXX59\{\}/;
+$Zeile[$i] =~ s/aiN/XXX116XXX100XXX107XXX105XXX102XXX104\{\}/;
+$Zeile[$i] =~ s/eeiN/XXX116XXX100XXX114XXX102\{\}/;
+$Zeile[$i] =~ s/eihN/XXX116XXX100XXX114XXX102XXX59\{\}/;
+$Zeile[$i] =~ s/eiN/XXX116XXX100XXX114XXX102XXX104\{\}/;
+$Zeile[$i] =~ s/iiN/XXX116XXX105XXX102\{\}/;
+$Zeile[$i] =~ s/ihN/XXX116\{\}XXX105\{\}XXX102\{\}XXX59\{\}\{\}/;
+$Zeile[$i] =~ s/iN/XXX116XXX105XXX102XXX104\{\}/;
+$Zeile[$i] =~ s/oouN/XXX116XXX107XXX114XXX102\{\}/;
+$Zeile[$i] =~ s/ouhN/XXX116XXX107XXX114XXX102XXX59\{\}/;
+$Zeile[$i] =~ s/ouN/XXX116XXX107XXX114XXX102XXX104\{\}/;
+$Zeile[$i] =~ s/aauN/XXX97XXX116XXX109XXX105XXX102\{\}/;
+$Zeile[$i] =~ s/auhN/XXX97XXX116XXX109XXX105XXX102XXX59\{\}/;
+$Zeile[$i] =~ s/auN/XXX97XXX116XXX109XXX105XXX102XXX104\{\}/;
+$Zeile[$i] =~ s/uuN/XXX116XXX71XXX114XXX102\{\}/;
+$Zeile[$i] =~ s/uhN/XXX116XXX71XXX114XXX102XXX59\{\}/;
+$Zeile[$i] =~ s/uN/XXX116XXX71XXX114\{\}/;
+$Zeile[$i] =~ s/ai\'/XXX116XXX100XXX107XXX117XXX102\{\}/;
+$Zeile[$i] =~ s/ei\'/XXX116XXX100XXX121XXX102\{\}/;
+$Zeile[$i] =~ s/ou\'/XXX116XXX107XXX121XXX102\{\}/;
+$Zeile[$i] =~ s/au\'/XXX97XXX116XXX109XXX117XXX102\{\}/;
+$Zeile[$i] =~ s/eei/XXX97XXX116\{\}/;
+$Zeile[$i] =~ s/eih/XXX97XXX116XXX59\{\}/;
+$Zeile[$i] =~ s/ei/XXX97XXX116XXX104\{\}/;
+$Zeile[$i] =~ s/ee/XXX116XXX44XXX102\{\}/;
+$Zeile[$i] =~ s/eh/XXX116XXX74\{\}/;
+$Zeile[$i] =~ s/e\'/XXX116XXX117XXX102\{\}/;
+$Zeile[$i] =~ s/ii/XXX116XXX68\{\}/;
+$Zeile[$i] =~ s/ih/XXX116XXX68XXX59\{\}/;
+$Zeile[$i] =~ s/i\'/XXX116XXX112XXX102\{\}/;
+$Zeile[$i] =~ s/i/XXX116XXX100\{\}/;
+$Zeile[$i] =~ s/e/XXX116XXX74XXX104\{\}/;
+$Zeile[$i] =~ s/aa/XXX116XXX109\{\}/;
+$Zeile[$i] =~ s/ah/XXX116XXX109XXX59\{\}/;
+$Zeile[$i] =~ s/a\'/XXX116XXX121XXX102\{\}/;
+$Zeile[$i] =~ s/a/XXX116\{\}/;
+$Zeile[$i] =~ s/oh/XXX97XXX116\{\}/;
+$Zeile[$i] =~ s/ouh/XXX116XXX100XXX107XXX59\{\}/;
+$Zeile[$i] =~ s/ou/XXX116XXX100XXX107XXX104\{\}/;
+$Zeile[$i] =~ s/oou/XXX116XXX100XXX107\{\}/;
+$Zeile[$i] =~ s/oo/XXX97XXX116XXX102\{\}/;
+$Zeile[$i] =~ s/o/XXX97XXX116XXX109\{\}/;
+$Zeile[$i] =~ s/uu/XXX116XXX108\{\}/;
+$Zeile[$i] =~ s/uh/XXX116XXX108XXX59\{\}/;
+$Zeile[$i] =~ s/u\'/XXX116XXX71XXX121XXX102\{\}/;
+$Zeile[$i] =~ s/u/XXX116XXX107\{\}/;
+$Zeile[$i] =~ s/w/üXXX71/;
+$Zeile[$i] =~ s/y/äXXX115/;
+
+$Zeile[$i] =~ s/üXXX71XXX116/XXX116XXX71/g;
+$Zeile[$i] =~ s/äXXX115XXX116/XXX116XXX115/g;
+$Zeile[$i] =~ s/üXXX71XXX97XXX116/XXX97XXX116XXX71/g;
+$Zeile[$i] =~ s/äXXX115XXX97XXX116/XXX97XXX116XXX115/g;
+
+
+$Zeile[$i] =~ s/II/XXX84\{\}/;
+$Zeile[$i] =~ s/I/XXX117XXX85XXX107\{\}/;
+$Zeile[$i] =~ s/\./XXX47XXX47\{\}/;
+$Zeile[$i] =~ s/,/XXX47\{\}/;
+$Zeile[$i] =~ s/I2/XXX116\.\{\}/;
+$Zeile[$i] =~ s/EI\'/XXX116XXX123\{\}/;
+$Zeile[$i] =~ s/OO/XXX116XXX97XXX45XXX111XXX109XXX102/;
+$Zeile[$i] =~ s/Oh/XXX116XXX45XXX111/;
+$Zeile[$i] =~ s/O/XXX116XXX97XXX45XXX111XXX109XXX104/;
+$Zeile[$i] =~ s/UU/XXX116XXX79XXX68/;
+$Zeile[$i] =~ s/Uh/XXX116XXX79XXX68XXX59/;
+$Zeile[$i] =~ s/U/XXX116XXX79/;
+
+
+# look if there is a consonant to substitute Character 116, the "dummy consonant"
+if($Zeile[$i] =~ /^ Y/){$Zeile[$i] =~ s/XXX116/XXX44/g;$Zeile[$i] =~ s/^ Y/ /g;} # oder XXX38
+elsif($Zeile[$i] =~ /^ W/){$Zeile[$i] =~ s/XXX116/XXX48/g;$Zeile[$i] =~ s/^ W/ /g;}
+#elsif($Zeile[$i] =~ /y/){$Zeile[$i] =~ s/y/XXX115/g;} # oder XXX106
+#elsif($Zeile[$i] =~ /w/){$Zeile[$i] =~ s/w/XXX71/g;}
+
+elsif($Zeile[$i] =~ /hw/){$Zeile[$i] =~ s/XXX116/XXX44XXX83/g;$Zeile[$i] =~ s/hw//g;}
+elsif($Zeile[$i] =~ /hl/){$Zeile[$i] =~ s/XXX116/XXX118XXX83/g;$Zeile[$i] =~ s/hl//g;}
+elsif($Zeile[$i] =~ /hng/){$Zeile[$i] =~ s/XXX116/XXX105XXX83/g;$Zeile[$i] =~ s/hng//g;}
+elsif($Zeile[$i] =~ /hny/){$Zeile[$i] =~ s/XXX116/XXX110XXX83/g;$Zeile[$i] =~ s/hny//g;}
+elsif($Zeile[$i] =~ /hn/){$Zeile[$i] =~ s/XXX116/XXX101XXX83/g;$Zeile[$i] =~ s/hn//g;}
+elsif($Zeile[$i] =~ /hm/){$Zeile[$i] =~ s/XXX116/XXX114XXX83/g;$Zeile[$i] =~ s/hm//g;}
+elsif($Zeile[$i] =~ /^h/){$Zeile[$i] =~ s/XXX116/XXX91/g;$Zeile[$i] =~ s/^h//g;}
+elsif($Zeile[$i] =~ /ph/){$Zeile[$i] =~ s/XXX116/XXX122/g;$Zeile[$i] =~ s/ph//g;}
+elsif($Zeile[$i] =~ /p/){$Zeile[$i] =~ s/XXX116/XXX121/g;$Zeile[$i] =~ s/p//g;}
+elsif($Zeile[$i] =~ /b/){$Zeile[$i] =~ s/XXX116/XXX65/g;$Zeile[$i] =~ s/b//g;} # oder XXX98
+#elsif($Zeile[$i] =~ /t2/){$Zeile[$i] =~ s/XXX116/XXX64/g;$Zeile[$i] =~ s/t2//g;}
+#elsif($Zeile[$i] =~ /d2/){$Zeile[$i] =~ s/XXX116/XXX89/g;$Zeile[$i] =~ s/d2//g;}
+elsif($Zeile[$i] =~ /g2/){$Zeile[$i] =~ s/XXX116/XXX67/g;$Zeile[$i] =~ s/g2//g;}
+elsif($Zeile[$i] =~ /n2/){$Zeile[$i] =~ s/XXX116/XXX37/g;$Zeile[$i] =~ s/n2//g;}
+elsif($Zeile[$i] =~ /ny2/){$Zeile[$i] =~ s/XXX116/XXX79/g;$Zeile[$i] =~ s/ny2//g;}
+elsif($Zeile[$i] =~ /th/){$Zeile[$i] =~ s/XXX116/XXX120/g;$Zeile[$i] =~ s/th//g;} # oder XXX88
+elsif($Zeile[$i] =~ /t/){$Zeile[$i] =~ s/XXX116/XXX119/g;$Zeile[$i] =~ s/t//g;}
+elsif($Zeile[$i] =~ /d/){$Zeile[$i] =~ s/XXX116/XXX34/g;$Zeile[$i] =~ s/d//g;} # oder gibts nicht
+elsif($Zeile[$i] =~ /kh/){$Zeile[$i] =~ s/XXX116/XXX99/g;$Zeile[$i] =~ s/kh//g;}
+elsif($Zeile[$i] =~ /k/){$Zeile[$i] =~ s/XXX116/XXX117/g;$Zeile[$i] =~ s/k//g;}
+elsif($Zeile[$i] =~ /g/){$Zeile[$i] =~ s/XXX116/XXX42/g;$Zeile[$i] =~ s/g//g;}
+elsif($Zeile[$i] =~ /T/){$Zeile[$i] =~ s/XXX116/XXX111/g;$Zeile[$i] =~ s/T//g;}
+elsif($Zeile[$i] =~ /sh/){$Zeile[$i] =~ s/XXX116/XXX113/g;$Zeile[$i] =~ s/sh//g;}
+elsif($Zeile[$i] =~ /s/){$Zeile[$i] =~ s/XXX116/XXX112/g;$Zeile[$i] =~ s/s//g;}
+elsif($Zeile[$i] =~ /z/){$Zeile[$i] =~ s/XXX116/XXX90/g;$Zeile[$i] =~ s/z//g;} # oder XXX112XXX115
+elsif($Zeile[$i] =~ /Sw/){$Zeile[$i] =~ s/XXX116/XXX38XXX36/g;$Zeile[$i] =~ s/Sw//g;}
+elsif($Zeile[$i] =~ /S/){$Zeile[$i] =~ s/XXX116/XXX38XXX83/g;$Zeile[$i] =~ s/S//g;}
+elsif($Zeile[$i] =~ /ch/){$Zeile[$i] =~ s/XXX116/XXX99XXX115/g;$Zeile[$i] =~ s/ch//g;} #oder XXX99XXX106
+elsif($Zeile[$i] =~ /c/){$Zeile[$i] =~ s/XXX116/XXX117XXX115/g;$Zeile[$i] =~ s/c//g;} #oder XXX117XXX125
+elsif($Zeile[$i] =~ /j/){$Zeile[$i] =~ s/XXX116/XXX42XXX115/g;$Zeile[$i] =~ s/j//g;} #oder XXX42XXX106
+elsif($Zeile[$i] =~ /m/){$Zeile[$i] =~ s/XXX116/XXX114/g;$Zeile[$i] =~ s/m//g;}
+elsif($Zeile[$i] =~ /ny/){$Zeile[$i] =~ s/XXX116/XXX110/g;$Zeile[$i] =~ s/ny//g;}
+elsif($Zeile[$i] =~ /ng/){$Zeile[$i] =~ s/XXX116/XXX105/g;$Zeile[$i] =~ s/ng//g;}
+elsif($Zeile[$i] =~ /n/){$Zeile[$i] =~ s/XXX116/XXX101/g;$Zeile[$i] =~ s/n//g;}
+elsif($Zeile[$i] =~ /l/){$Zeile[$i] =~ s/XXX116/XXX118/g;$Zeile[$i] =~ s/l//g;}
+elsif($Zeile[$i] =~ /I/ || $Zeile[$i] =~ /O/ || $Zeile[$i] =~ /U/)
+ {$Zeile[$i] =~ s/XXX116//g;}
+
+$Zeile[$i] =~ s/XXX/\\char/g;
+}
+#EOF