package unicodize;

###################################################################
# (c) fabien van mook
#
# 6-3-2001, 9-3-2001, 18-3-2001 (eerste versie)
#
# 15-2-2002  - toevoeging extra tekens uit latex-package fontenc.sty en wel
#              uit /usr/lib/texmf/tex/latex/base/t1enc.def
#            - \ol etc. omgezet in \xl.
#            - \Lx etc. verwijderd.
#            - toevoegen &base2tex(), let op dat later iets met <...> moet
#              gebeuren.
# 17-2-2002  - afschaffen \2xy en omzetten in <Lxy/>.
#            - invoering van de verschillende tabellen symbol, cyrillisch...
#            - gebruik afkorting skf (= sepbita kodigo de fabien).
#            - invoering \unicode{...} en <Uxxx/>.
#            - toevoegen funkties set8 en unset8.
#            - resultaten van find-combi2.pl ingevoegd.
# 18-2-2002  - toevoegen funktie sortkey.
#            - verbeteren funkties set8 en unset8.
#            - aanpassing <LAe/> ipv <LAE/> etc in $latin_alphabet.
#            - aanvulling overige letters in $latin_alphabet.
# 21-2-2002  - toevoegen sectie tsjechisch in sortkey().
#            - verbeteren in skf2tex() en $latin_alphabet, {\a<forigumin/>b}
#              en regel \z\y{\a<forigumin/>b} => \z{\y{...}}.
#            - toevoegen regel in skf2tex() ivm \u<Ci/> etc meteen herkennen.
#              Tevens: \u<Ci/> => \u{i<forigumin/>} in tabel.
#              Dit betekent niet dat \u<Ci/> automatisch het volgnummer uit
#              %letternumber krijgt bij sortkey(). Dit zou dus met een taal-
#              afhankelijke regels nog moeten gebeuren.
# 22-2-2002  - verbetering in skf2tex: invoering genereren <cyr>...</cyr> en
#              \begin{cyr}....\end{cyr}.
#            - toevoeging {} bij verschillende tex-expansies in 
#              $cyrillic_alphabet, bv. <Ct/> => t{}, ivm <Ct/><Cs/> vs. <Cts/>.
#            - toevoegin in skf2html: 2a rondo por <Zz/>.
#            - explanation bijgewerkt.
#            - in sortkey toegevoegd dat elementen uit $symbol_table en de
#              cijfers de waarde <Ajnasimbolo/> krijgen.
# 25-2-2002  - de tags <U1234/> worden <Ajnasimbolo/> in &sortkey.
#            - meerdere <Ajnasimbolo/> worden gereduceerd tot 1 maal in 
#              &sortkey!!!
#            - toevoegen tags voor formules.
#            - toevoegen alfabetisering voor eo in &sortkey().
# 26-2-2002  - fouten in $typography_table verbeterd.
#            - toevoegen verwijderen loze spaties in &sortkey().
#            - verbeteren fout: <forigumin/> toevoegen bij <Lae/> etc.
# 27-2-2002  - toevoegen \protect bij \begin{cyr}....\end{cyr}, om expansie
#              in funktie \indeks{}{}{} uit ventolado.sty te voorkomen.
#            - besloten dat --, --- en \- geen onderdeel van skf zijn.
# 2-3-2002   Typefoutje verbeterd.
# 5-6-2002   In &sortkey() toegevoegd omzetten <mrk/> en <frk/>.
#
# Te doen:
# - explanation verbeteren, automatisch genereren uit tabellen?
# - in &sortkey() verbeteren alfabetiseren van tags <U1234/>, cijfers en 
#   andere symbolen? Het kan door $klas (zie &sortkey) een waarde van 020 
#   tot 099 te geven voor cijfers en symbolen uit $symbol_table. (De waarde
#   voor $klas springt steeds 10 per letter, net als nu: 100, 110, 120, etc.)
# - funktie omzetten tex-cirilisch in skf. cyrtex2skf() [GEEN PRIORITEIT].
#

###################################################################
# Aanroepingen in Perl-programma's:
#
# $y = &unicodize::explanation;
#
# $y = &unicodize::tex2skf($x);
# $y = &unicodize::skf2tex($x);
#
# $y = &unicodize::skf2html($x);
#
# $y = &unicodize::sortkey($x);
#
# $y = &unicodize::packin($x);
# $y = &unicodize::packout($x);
#
# $y = &unicodize::set8($x);
# $y = &unicodize::unset8($x);
#

###################################################################
# De tags hebben de volgende vorm:
#
# -alfabettags: "<" + [A-TV-Z]{1,1}           (naam alfabet) 
#                   + [A-Z]{1,1}[a-z0-9]{0,}  (naam hoofdletter)   + "/>"
#
#           of: "<" + [A-TV-Z]{1,1}           (naam alfabet) 
#                   + [a-z]{1,}[0-9]{0,}      (naam kleine letter) + "/>"
#
#           of: "<U"  + [0-9]{1,}       (dec unicode nummer) + "/>" 
#           of: "<Ux" + [A-Fa-f0-9]{1,} (hex unicode nummer) + "/>" 
#
# -typografietags:  "<"  + [a-z!?]{1,} + "/>"
#              of:  "<"  + [a-z!?]{1,} + ">" 
#              en:  "</" + [a-z!?]{1,} + ">" 
#
# -accenttags: "\" + [A-Za-z?]{1,1} (precies 1 hoofd- of kleine letter of ?)
#
#     huidig gebruik: ageUtlpuvHcdbrk?xs
#
#     alleen voor intern gebruik (zie &unicodize::sortkey()): 
#              \A \B \C \D \E (tbv voor herdefinitie accenttags bij 
#                              alfabetisering naar accenten voor een taal)
#              \K \M          (tbv kapitaal of minuskel)
#              \0...\9        (om een letter bij een (sub)lettergroep toe te 
#                              voegen; default is 5, dus kleiner zet ervoor,
#                              groter zet erna tov de lettergroep)
#
# -formuletags. De vorm is als typografietags, maar meestal beginnen zij met
#     een f, en worden altijd omringd met <f>...</f> of <falineo>...<falineo/>.
#     Voorbeelden:
#     -- een grootheid: <f><grando>U</grando></f>-waarde.
#     -- een aantal met eenheid: 
#             <f>10<sup>-3</sup> <unuo>m</unuo><sup>2</sup></f>
#     -- een wiskundeformule: 
# <f><grando>a</grando><plus/><grando>b</grando><egalas/><grando>c</grando></f>
#     -- een scheikundeformule: <f><hhem>H<sub>2</sub>O</hhem></f>
#     Let op dat symbolen in $symbol_table thuis horen!
#
#
# Niet standaard latex-def's:
# -- \g{...}
# -- \gg{...}
# -- \begin{cyr}...\end{cyr}
# -- \unicode{...}
#
# Let op bij html-bronteksten:
#
# -- vergeet niet eerst ondubbelzinnig omzetten ' --> <apostrofo/>
# -- ivm \ => <retrostreko/>, vergeet niet eerst accenten om te zetten
#
# Diferencoj inter la malnova (unua versio de unicodize.pm) kaj nuna SKF:
#
# $a =~ s!\\2(\w)(\w)!"<L$1" . lc($2) . "/>"!gse;
# $a =~ s!\\o!\\x!gs;
# $a =~ s!\\L!\\k!gs;
#

###################################################################
# formaat tabellen:
#
#<...>      |html|statuso|latex|statuso|ascii|statuso|klarigo|
#

$symbol_table = << 'END_TABLE' ;
<apostrofo/>|&apos;||{}'||'||apostrofo: '|
-           |-||-||-||streketo por dividi vort(er)ojn|
<en/>       |--||--||-||streketo por dividi ciferojn|
<em/>       |---||---||--||longa (pauza) streketo|
<tildo/>    |~||\~{}||~||signo ~|
<dolaro/>   |$||\${}||$||signo $|
<pundo/>    |&pound;||\pounds{}||(pound)||pundo-signo|
<dieso/>    |#||\#{}||#||signo #|
<kaj/>      |&amp;||\&{}||&||signo &|
<elcento/>  |%||\%{}||%||signo %|
<kopirajto/>|&copy;||\copyright{}||(c)||kopirajt-signo|
<alinesigno/>|&para;||\P{}||(P)||alinesigno|
<paragrafsigno/>|&sect;||\S{}||(S)||paragrafsigno|
<mrk/>      |[||[||[||malferma rekta krampo: [|
<frk/>      |]||]||]||ferma rekta krampo: ]|
<mv/>       |{||\{ ||{||malferma vinkulo: {|
<fv/>       |}||\} ||}||ferma vinkulo: }|
<substreko/>|_||\_{}||_||signo _|
<inversa!/> |&iexcl;||!`||(!)||inversa !|
<inversa?/> |&iquest;||?`||(?)||inversa ?|
<heliko/>   |@||@||@||signo @|
<plus/>     |+||+||+||plussigno: +|
<minus/>    |-||-||-||minussigno: -|
<egalas/>   |=||=||=||egalsigno: =|
<malpli/>   |&lt;||\ensuremath{<}||<||malplio-signo: <|
<pli/>      |&gt;||\ensuremath{>}||>||plio-signo: >|
<retrostreko/>|\||\backslash{}||\||signo \|
<grado/>    |<sup>o</sup>||\ensuremath{^o}||(o)||grado-signo|
<ghiraforeloj/>|&quot;||\"{}||"|signo "|
<tubo/>     |<tubobeta/>||<tubobeta/>||<tubobeta/>||signo <tubobeta/>|
<steleto/>  |*||*||*||signo *|
<d-citilo/> |&laquo;||``||||
<md-citilo/>|&raquo;||''||||
<spaco/>    | || || |||
<fln/>       |ln||\ln||ln||natura logaritmo|
<flog/>      |log||\log||log||dekapotenca logaritmo|
END_TABLE

$typography_table = << 'END_TABLE' ;
<divideblo/>|<forigumin/>||\-||<forigumin/>||ebligo dividi vort(er)ojn|
<nl/>       |||{}||<forigumin/>||neligo: malebligu estighon de ligata litero|
<nrs/>      |&nbsp;||~||||ne rompebla spaco|
<c>         |&laquo;||\gg{||``||komenco de citajho|
</c>        |&raquo;||}||''||fino de citajho|
<s>         |<i>||\g{||`||komenco de io lau nekutima senco|
</s>        |</i>||}||'||fino de io lau nekutima senco|
<t>         |<i>||{\it ||"||komenco de verktitolo|
</t>        |</i>||}||"||fino de verktitolo|
<e>         |<em>||{\em ||_||komenco de io emfazata|
</e>        |</em>||}||_||fino de io emfazata|
END_TABLE

$extra_typography_table = << 'END_TABLE' ;
<gg>        |&laquo;||\gg{||``||komencaj duoblaj citiloj|
</gg>       |&raquo;||}||''||finaj duoblaj citiloj|
<g>         |&laquo;||\g{||`||komencaj unuopaj citiloj|
</g>        |&raquo;||}||'||finaj unuopaj citiloj|
<p>         |<p>||<forigumin/>||||komenco de alineo|
</p>        |</p>||\par{}||||fino de alineo|
<calineo>   |<BLOCKQUOTE>||\begin{quote}|||||
</calineo>  |</BLOCKQUOTE>||\end{quote}|||||
<ekz>       |<i>||{\it |||||
</ekz>      |</i>||}|||||
<ekzalineo> |<BLOCKQUOTE>||\begin{quote}|||||
</ekzalineo>|</BLOCKQUOTE>||\end{quote}|||||
<kursive>   |<i>||{\it |||||
</kursive>  |</i>||}|||||
<grase>     |<b>||{\bf |||||
</grase>    |</b>||}|||||
<egalspace>  |<tt>||{\tt |||||
</egalspacee>|</tt>||}|||||
<orte>      |<forigumin/>||{\rm |||||
</orte>     |<forigumin/>||}|||||
<oblikve>   |<forigumin/>||{\sl |||||
</oblikve>  |<forigumin/>||}|||||
<listo>       |<ul>||\begin{itemize}|||||
</listo>      |</ul>||\end{itemize}|||||
<numerlisto>  |<ol>||\begin{enumerate}|||||
</numerlisto> |</ol>||\end{enumerate}|||||
<listpunkto>  |<li>||\item |||||
</listpunkto> |</li>||<forigumin/>|||||
<kolore>    |<b class="kolore">|||||||
</kolore>   |</b>|||||||
<f>          |<forigumin/>||$||||komenco de enlinia formulo matematika, hhemia, de unuo, ktp|
</f>         |<forigumin/>||$||||fino de enlinia formulo|
<falineo>   |<BLOCKQUOTE>||$$||||komenco de alinea formulo matematika, hhemia, de unuo, ktp|
</falineo>  |</BLOCKQUOTE>||$$||||fino de alinea formulo|
<sub>       |<sub>||\ensuremath{_{||||subskribajho (en formulo)|
</sub>      |</sub>||}}|||||
<sup>       |<sup>||\ensuremath{^{||||superskribajho (en formulo)|
</sup>      |</sup>||}}|||||
<grando>    |<i>||<forigumin/>||||grando au variablo (en formulo)|
</grando>   |</i>||<forigumin/>|||||
<unuo>      |<forigumin/>||\text{||||unuo (en formulo) (**)|
</unuo>     |<forigumin/>||}|||||
<hhem>      |<forigumin/>||\text{||||hhemia strukturo (en formulo) (**)|
</hhem>     |<forigumin/>||}|||||
<grupo>     |<forigumin/>||{||||komenco de grupigo (en formulo)|
</grupo>    |<forigumin/>||}|||||
<teksto>    |<forigumin/>||\text{||||komenco de normala teksto (en formulo)|
</teksto>   |<forigumin/>||}|||||
END_TABLE

# (**) Nur uzebla en Latex se oni ordonas: \usepackage{amsmath}

$latin_alphabet = << 'END_TABLE' ;
<La/>|a||a||a|||
<LA/>|A||A||A|||
<Lb/>|b||b||b|||
<LB/>|B||B||B|||
<Lc/>|c||c||c|||
<LC/>|C||C||C|||
<Ld/>|d||d||d|||
<LD/>|D||D||D|||
<Le/>|e||e||e|||
<LE/>|E||E||E|||
<Lf/>|f||f||f|||
<LF/>|F||F||F|||
<Lg/>|g||g||g|||
<LG/>|G||G||G|||
<Lh/>|h||h||h|||
<LH/>|H||H||H|||
<Li/>|i||i||i|||
<LI/>|I||I||I|||
<Lj/>|j||j||j|||
<LJ/>|J||J||J|||
<Lk/>|k||k||k|||
<LK/>|K||K||K|||
<Ll/>|l||l||l|||
<LL/>|L||L||L|||
<Lm/>|m||m||m|||
<LM/>|M||M||M|||
<Ln/>|n||n||n|||
<LN/>|N||N||N|||
<Lo/>|o||o||o|||
<LO/>|O||O||O|||
<Lp/>|p||p||p|||
<LP/>|P||P||P|||
<Lq/>|q||q||q|||
<LQ/>|Q||Q||Q|||
<Lr/>|r||r||r|||
<LR/>|R||R||R|||
<Ls/>|s||s||s|||
<LS/>|S||S||S|||
<Lt/>|t||t||t|||
<LT/>|T||T||T|||
<Lu/>|u||u||u|||
<LU/>|U||U||U|||
<Lv/>|v||v||v|||
<LV/>|V||V||V|||
<Lw/>|w||w||w|||
<LW/>|W||W||W|||
<Lx/>|x||x||x|||
<LX/>|X||X||X|||
<Ly/>|y||y||y|||
<LY/>|Y||Y||Y|||
<Lz/>|z||z||z|||
<LZ/>|Z||Z||Z|||
<Lss/>|&#223;||{\s<forigumin/>s}||ss|||
<LSs/>|SS||{\SS}||SS|||
<Lae/>|&#230;||{\a<forigumin/>e}||ae|||
<LAe/>|&#198;||{\A<forigumin/>E}||AE|||
<Loe/>|&#339;||{\o<forigumin/>e}||oe|||
<LOe/>|&#338;||{\O<forigumin/>E}||OE|||
\ra|&#229;||{\a<forigumin/>a}||aa|||
\rA|&#197;||{\A<forigumin/>A}||AA|||
\xd|&#273;||{\d<forigumin/>j}||dj|||
\xD|&#272;||{\D<forigumin/>J}||DJ|||
\xl|&#322;||{\l}||l|||
\xL|&#321;||{\L}||L|||
\xo|&#248;||{\o}||o/|||
\xO|&#216;||{\O}||o/|||
\sd|&#240;||{\d<forigumin/>h}||dh|||
\sD|&#208;||{\D<forigumin/>H}||DH|||
\si|&#305;||{\i}||i|||
\sj|j||{\j}||j|||
\sn|&#331;||{\n<forigumin/>g}||ng|||
\sN|&#330;||{\N<forigumin/>G}||NG|||
\st|&#254;||{\t<forigumin/>h}||th|||
\sT|&#222;||{\T<forigumin/>H}||TH|||
END_TABLE

# De volgende tabel heeft een ekstra veld dat gebruikt wordt in
# find-combi2.pl en is een citaat uit de beschrijving uit de grote
# Unicode-database. 

$cyrillic_alphabet = << 'END_TABLE' ;
<Ca/>|&#1072;||a||a|||a|
<CA/>|&#1040;||A||A|||A|
<Cb/>|&#1073;||b||b|||be|
<CB/>|&#1041;||B||B|||BE|
<Cv/>|&#1074;||v||v|||ve|
<CV/>|&#1042;||V||V|||VE|
<Cg/>|&#1075;||g||g|||ghe|
<CG/>|&#1043;||G||G|||GHE|
\a<Cg/>|&#1107;||\'{g}||'g|||gje|
\a<CG/>|&#1027;||\'{G}||'G|||GJE|
<Cd/>|&#1076;||d{}||d|||de|
<CD/>|&#1044;||D{}||D|||DE|
<Cdj/>|&#1106;||dj||dj|||dje|
<CDj/>|&#1026;||Dj||Dj|||DJE|
<Ce/>|&#1077;||e||e|||ie|
<CE/>|&#1045;||E||E|||IE|
\U<Ce/>|&#1105;||\"{e}||"e|||io|
\U<CE/>|&#1025;||\"{E}||"E|||IO|
<Cee/>|&#1108;||{\ee}||ee|||ukrainian ie|
<CEe/>|&#1028;||{\EE}||EE|||UKRAINIAN IE|
<Czh/>|&#1078;||zh||zh|||zhe|
<CZh/>|&#1046;||Zh||Zh|||ZHE|
<Cz/>|&#1079;||z||z|||ze|
<CZ/>|&#1047;||Z||Z|||ZE|
<Cdz/>|&#1109;||{\Dz}||dz|||dze|
<CDz/>|&#1029;||{\Dz}||Dz|||DZE|
<Ci/>|&#1080;||i||i|||i|
<CI/>|&#1048;||I||I|||I|
<Ci2/>|&#1110;||{\i}||i|||byelorussian-ukrainian i|
<CI2/>|&#1030;||{\I}||I|||BYELORUSSIAN-UKRAINIAN I|
\U<Ci2/>|&#1111;||\"{\i}||"i|||yi|
\U<CI2/>|&#1031;||\"{\I}||"I|||YI|
\u<Ci/>|&#1081;||\u{i<forigumin/>}||i|||short i|
\u<CI/>|&#1049;||\u{I<forigumin/>}||I|||SHORT I|
<Ck/>|&#1082;||k||k|||ka|
<CK/>|&#1050;||K||K|||KA|
\a<Ck/>|&#1116;||\'{k}||'k|||kje|
\a<CK/>|&#1036;||\'{K}||'K|||KJE|
<Cl/>|&#1083;||l{}||l|||el|
<CL/>|&#1051;||L{}||L|||EL|
<Clj/>|&#1113;||lj||lj|||lje|
<CLj/>|&#1033;||Lj||Lj|||LJE|
<Cm/>|&#1084;||m||m|||em|
<CM/>|&#1052;||M||M|||EM|
<Cn/>|&#1085;||n{}||n|||en|
<CN/>|&#1053;||N{}||N|||EN|
<Cnj/>|&#1114;||nj||nj|||nje|
<CNj/>|&#1034;||Nj||Nj|||NJE|
<Co/>|&#1086;||o||o|||o|
<CO/>|&#1054;||O||O|||O|
<Cp/>|&#1087;||p||p|||pe|
<CP/>|&#1055;||P||P|||PE|
<Cr/>|&#1088;||r||r|||er|
<CR/>|&#1056;||R||R|||ER|
<Cs/>|&#1089;||s||s|||es|
<CS/>|&#1057;||S||S|||ES|
<Ct/>|&#1090;||t{}||t|||te|
<CT/>|&#1058;||T{}||T|||TE|
<Ctj/>|&#1115;||\'{c}||'c|||tshe|
<CTj/>|&#1035;||\'{C}||'C|||TSHE|
<Cu/>|&#1091;||u||u|||u|
<CU/>|&#1059;||U||U|||U|
\u<Cu/>|&#1118;||\u{u}||"u|||short u|
\u<CU/>|&#1038;||\u{U}||"U|||SHORT U|
<Cf/>|&#1092;||f||f|||ef|
<CF/>|&#1060;||F||F|||EF|
<Ckh/>|&#1093;||kh||kh|||ha|
<CKh/>|&#1061;||Kh||Kh|||HA|
<Cts/>|&#1094;||ts||ts|||tse|
<CTs/>|&#1062;||Ts||Ts|||TSE|
<Cch/>|&#1095;||ch||ch|||che|
<CCh/>|&#1063;||Ch||Ch|||CHE|
<Cdzh/>|&#1119;||dzh||dzh|||dzhe|
<CDzh/>|&#1039;||Dzh||Dzh|||DZHE|
<Csh/>|&#1096;||sh{}||sh|||sha|
<CSh/>|&#1064;||Sh{}||Sh|||SHA|
<Cshch/>|&#1097;||shch||shch|||shcha|
<CShch/>|&#1065;||Shch||Shch|||SHCHA|
<Chard/>|&#1098;||{\hard}||(hard)|||hard sign|
<CHard/>|&#1066;||{\Hard}||(Hard)|||HARD SIGN|
<Cy/>|&#1099;||y{}||y|||yeru|
<CY/>|&#1067;||Y{}||Y|||YERU|
<Csoft/>|&#1100;||{\soft}||(soft)|||soft sign|
<CSoft/>|&#1068;||{\Soft}||(Soft)|||SOFT SIGN|
<Ce2/>|&#1101;||{\e}||e|||e|
<CE2/>|&#1069;||{\E}||e|||E|
<Cyu/>|&#1102;||yu||yu|||yu|
<CYu/>|&#1070;||Yu||Yu|||YU|
<Cya/>|&#1103;||ya||ya|||ya|
<CYa/>|&#1071;||Ya||Ya|||YA|
END_TABLE

#######################################################################
#######################################################################
#######################################################################

%symboltags2html = ();
%symboltags2tex = ();

foreach $x (split(/\n/,$symbol_table)) {
    @fields = split(/\|/,$x);
    $fields[0] =~ s/ //gs;

    $symboltags2html{$fields[0]} = $fields[1];
    $symboltags2tex{$fields[0]} = $fields[3];
}

%typotags2html = ();
%typotags2tex = ();

foreach $x (split(/\n/,$typography_table . $extra_typography_table)) {
    @fields = split(/\|/,$x);
    $fields[0] =~ s/ //gs;

    $typotags2html{$fields[0]} = $fields[1];
    $typotags2tex{$fields[0]} = $fields[3];
}


%letternumber = ();
$i = 10;
$letternumber{'<Spaco/>'} = '01';
$letternumber{'<Ajnasimbolo/>'} = '05';

%alphabet2html = ();
%alphabet2tex = ();

foreach $x (split(/\n/,$latin_alphabet . $cyrillic_alphabet)) {
    @fields = split(/\|/,$x);
    $fields[0] =~ s/ //gs;

    $alphabet2html{$fields[0]} = $fields[1];
    $alphabet2tex{$fields[0]} = $fields[3];

    # nur minuskloj iras en %letternumber:

    if ($fields[0] =~ /<[A-Z][a-z0-9]{1,}\/>/ ) {
       $i += 1;
       $letternumber{$fields[0]} = sprintf("%02d",$i);
    }
}

($i <= 99) or die "\$i is $i, dus groter dan 99; er zijn dus te veel letters!";


%texdouble2skf = ();

foreach $x (split(/\n/,$latin_alphabet)) {
    @fields = split(/\|/,$x);
    $fields[0] =~ s/ //gs;

    $texdouble2skf{$fields[3]} = $fields[0];
}


#################################################################
#################################################################

sub explanation {
    return << 'STOP';
Citiloj k.s.
======================================================================

                   <c>...</c>       citajho
                   <s>...</s>       speciala uzo/signifo
                   <t>...</t>       titolo de filmo, de gazeto ktp.
                   <e>...</e>       emfazo


Uzeblaj interpunkciiloj el ASCII (aliajn vidu sube)
LaTeX-kodoj       SKF
======================================================================
.                 .                 punkto
!                 !                 krisigno
?                 ?                 demandsigno
/                 /                 oblikva streko
-                 -                 streketo por videbla divido inter 
                                          vort(er)oj
--                <en/>             streketo por dividi ciferojn
---               <em/>             longa (pauza) streketo
,                 ,                 komo
:                 :                 dupunkto
;                 ;                 punkto-komo
(                 (                 malfermaa ronda krampo
)                 )                 ferma ronda krampo
{}'               '                 apostrofo
(spaco)           (spaco)           spaco


Esperantaj literoj (LaTex-kodoj)
======================================================================
 ^C ^G ^H ^J ^S ^U
 ^c ^g ^h ^j ^s ^u


LaTeX-kodoj       SKF               klarigo/ekzemplo
======================================================================

\'{x}   \'x       \ax               x kun akuta akcento (ACUTE)
\`{x}   \`x       \gx               x kun grava akcento (GRAVE)
\^{x}   \^x       \ex               x kun chapelo (CIRCUMFLEX)
\"{x}   \"x       \Ux               x kun umlauto/tremao (DIAERESIS)
\~{x}   \~x       \tx               x kun tildo (TILDE)
\={x}   \=x       \lx               x kun horizontala streketo supra 
                                          (MACRON)
\.{x}   \.x       \px               x kun punkto supra (DOT ABOVE)
\u{x}             \ux               x kun arketo supra (BREVE)
\v{x}             \vx               x kun v supra (CARON)
\H{x}             \Hx               x kun hungara umlauto (DOUBLE ACUTE)
\c{x}             \cx               x kun cedilo (CEDILLA)
\d{x}             \dx               x kun punkto malsupra (DOT BELOW)
\b{x}             \bx               x kun horizontala streketo
                                          malsupra (LINE BELOW)
\r{x}             \rx               x kun ringo supra (RING ABOVE)
                  \xy               y kun trastrekigo (STROKE)
\k{x}             \kx               x kun suba vosteto (OGONEK)
                  \?x               x kun ?-forma supersigno au angulo,
                                          supra (HOOK ABOVE)

{\ss}             <Lss/>            germana ligita ss
                  <LSs/>            germana ligita SS
{\ae}             <Lae/>            ligita ae
{\AE}             <LAe/>            ligita Ae
{\oe}             <Loe/>            ligita oe
{\OE}             <LOe/>            ligita Oe

{\aa}             \ra               a kun ringo supra
{\AA}             \rA               A kun ringo supra
{\dj}             \xd               d kun trastrekigo (*)
{\DJ}             \xD               D kun trastrekigo (*)
{\l}              \xl               l kun trastrekigo
{\L}              \xL               L kun trastrekigo
{\o}              \xo               o kun trastrekigo
{\O}              \xO               O kun trastrekigo
                  
{\dh}             \sd               edh islanda (*)
{\DH}             \sD               EDH islanda (*)
{\i}              \si               i sen punkto
{\j}              \sj               j sen punkto
{\ng}             \sn               eng (*)
{\NG}             \sN               ENG (*)
{\th}             \st               thorn islanda (*)
{\TH}             \sT               THORN islanda (*)

\~{ }   \~{}      <tildo/>          signo ~
\$                <dolaro/>         signo $
\pounds           <pundo/>          pundo-signo
\#                <dieso/>          signo #
\&                <kaj/>            signo &
\%                <elcento/>        signo %
\copyright        <kopirajto/>      kopirajt-signo
\P                <alinesigno/>     alinesigno
\S                <paragrafsigno/>  paragrafsigno
~                 <nrs/>            ne rompebla spaco
[                 <mrk/>            malferma rekta krampo: [
]                 <frk/>            ferma rekta krampo: ]
\{                <mv/>             malferma vinkulo: {
\}                <fv/>             ferma vinkulo: }
\_                <substreko/>      signo _
!`                <inversa!/>       inversa !
?`                <inversa?/>       inversa ?
@                 <heliko/>         signo @
                  <plus/>           plussigno: +
                  <minus/>          minussigno: -
*                 <steleto/>        signo *
                  <egalas/>         egalsigno: =
                  <malpli/>         malplio-signo: <
                  <pli/>            plio-signo: >
\backslash        <retrostreko/>    signo \
                  <grado/>          grado-signo             
                  <ghiraforeloj/>   signo "
                  <tubo/>           signo |
--                <en/>             streketo por dividi ciferojn
---               <em/>             longa (pauza) streketo
\-                <divideblo/>      ebligo dividi vort(er)ojn
{}'               <apostrofo/>      apostrofo
``....''          <gg>....</gg>     duoblaj citiloj
`....'            <g>....</g>       unuopaj citiloj
{}                <nl/>             neligo: malebligu estighon de ligata litero

0...9             0....9            arabaj ciferoj

\unicode{....}    <U..../>          simbolo indikata per unikoda numero 10uma
\unicode{x....}   <Ux..../>         simbolo indikata per unikoda numero 16uma

Rimarko:

(*) Nur uzebla en Latex se oni ordonas: \usepackage[T1]{fontenc}

STOP

# Escapes in html: 
#   <  &gt;
#   >  &lt;
#   &  &amp;
#   "  &quot;  (alleen binnen attr. omringd met "")
#   '  &apos;  (alleen binnen attr. omringd met '') <---- alleen xml ??

}

sub tex2skf {
    my($a) = @_;

    $a =~ s!\\ ! !gs;                  # \(spaco)  -->  (spaco)
    $a =~ s!\\,! !gs;                  # \,  -->  (spaco)
    $a =~ s!\\S!<paragrafsigno/>!gs;   # \S  -->  <paragrafsigno/>
    $a =~ s!\\P!<alinesigno/>!gs;      # \P  -->  <alinesigno/>
    $a =~ s!\\pounds!<pundo/>!gs;            # \pounds  -->  <pundo/>
    $a =~ s!\\backslash!<retrostreko/>!gs;   # \backslash  -->  <retrostreko/>
    $a =~ s!\\copyright!<kopirajto/>!gs;     # \copyright  -->  <kopirajtoo/>

    $a =~ s!\\unicode\{([xA-Fa-f0-9]{1,})\}!<U$1/>!gs;  # \unicode --> <U.../>

    $a =~ s!\{\}'!<apostrofo/>!gs;    # {}'  -->  <apostrofo/>
    $a =~ s!\\~\{ \}!<tildo/>!gs;     # \~{ } --> <tildo/>
    $a =~ s!\\~\{\}!<tildo/>!gs;      # \~{} --> <tildo/>
    $a =~ s!\\\$!<dolaro/>!gs;        # \$  --> <dolaro/> 
    $a =~ s!\\\#!<dieso/>!gs;         # \#  --> <dieso/> 
    $a =~ s!\\\&!<kaj/>!gs;           # \&  --> <kaj/>
    $a =~ s!\\\%!<elcento/>!gs;       # \%  --> <elcento/> 
    $a =~ s!\\\{!<mv/>!gs;            # \{  --> <mv/> 
    $a =~ s!\\\}!<fv/>!gs;            # \}  --> <fv/> 
    $a =~ s!\\\_!<substreko/>!gs;     # \_  --> <substreko/>
    $a =~ s!\\-!<divideblo/>!gs;      # \-  --> <divideblo/>

    $a =~ s!\!\`!<inversa\!/>!gs;          # !`  --> <inversa!/>
    $a =~ s!\?\`!<inversa\?/>!gs;          # ?`  --> <inversa?/>

    $a =~ s!---!<em/>!gs;                 # ---  --> <em/>
    $a =~ s!--!<en/>!gs;                  # --  --> <en/>

    $a =~ s!\\{0,0}\^([Uu])!\\u\{$1\}!g;         # ^u -->  \u{u}  (Esperanto)
    $a =~ s!\\{0,0}\^([CcGgHhJjSs])!\\e\{$1\}!g; # ^x -->  \e{x}  (Esperanto)

    $a =~ s!(\{\\[A-Za-z]{1,2}\})!$texdouble2skf{$1} or "$1"!gse;
                                                         # {\aa} --> \ra etc.
    $a =~ s!\\(['`\^"~\=\.])([A-Za-z])!\\$1\{$2\}!gs;    # \"x  --> \"{x} etc.
    $a =~ s!\\(['`\^"~\=\.])\{!"\\$texaccent2skf{$1}\{" or "\\$1\{"!gse;
                                                         # \"{ --> \U{ etc. 

    $a =~ s!\~!<nrs/>!gs;                 # ~  --> <nrs/>
    $a =~ s!\*!<steleto/>!gs;             # *  --> <steleto/>

    $a =~ s!``(.{1,}?)''!<gg>$1</gg>!gs;   # ``...'' --> <gg>...</gg>
    $a =~ s!`(.{1,}?)'!<g>$1</g>!gs;       # `...' --> <g>...</g>
    $a =~ s!"(.{1,}?)"!<gg>$1</gg>!gs;     # "..." --> <gg>...</gg>

    $a =~ s!\{\}!<nl/>!gs;                # {}  -->  <nl/>

    $a =~ s!\{!!g;                        # { --> (nenio)
    $a =~ s!\}!!g;                        # { --> (nenio)

    $a =~ s!<apostrofo/>!'!g;             # <apostrofo/> --> '

    return($a);
}

sub skf2html {
    my($a) = @_;

    # \az, \a\bz => &#00;
    $a =~ s!((\\[ageUtlpuvHcdbrxk?s]){1,}[A-Za-z])!$skfaccent2html{$1} or "$1"!gse;

    # \a<Zz/>, \a\b<Zz/> => &#00;
    $a =~ s!((\\[ageUtlpuvHcdbrxk?s]){0,}<[A-Z][A-Za-z0-9]{1,}/>)!$skfaccent2html{$1} or $alphabet2html{$1} or "$1"!gse;

    # 2a rondo por <Zz/> kiam evt. \a<Zz/> ne trovighis:
    $a =~ s!(<[A-Z][A-Za-z0-9]{1,}/>)!$alphabet2html{$1} or "$1"!gse;

    # <U.../> => &#...; (deze regel niet eerder want zo kan \a<U000/> nog 
    # door tabel $skfaccent2html worden opgevangen)
    $a =~ s!<U([xA-Fa-f0-9]{1,})/>!\&\#$1;!gs;

    # typografie- & symbooltags => html
    $a =~ s!(<[a-z/\!?]{1,}?>)!$typotags2html{$1} or "$1"!gse;
    $a =~ s!(<[a-z/\!?]{1,}?>)!$symboltags2html{$1} or "$1"!gse;

    $a =~ s!<tubobeta/>!|!g;
    $a =~ s!<forigumin/>!!g;

    return($a);
}

sub skf2tex {
    my($a) = @_;

    # ageUtlpuvHcdbrk?xs (bij x en s aparte kodes in tex)

    # \a\b<Cxx/> => <cyr>\a\b<Cxx/></cyr>
    $a =~ s!((\\[A-Za-z]){0,}<C[A-Za-z0-9]{1,}/>)!<cyr>$1</cyr>!gs;

    # \u<Ci/>, <Zz/>, \si, \xl => {...} (opzoeken)
    $a =~ s!(\\[A-Za-z]<[A-Z][A-Za-z0-9]{1,}/>)!$alphabet2tex{$1} or "$1"!gse;
    $a =~ s!(<[A-Z][A-Za-z0-9]{1,}/>)!$alphabet2tex{$1} or "$1"!gse;
    $a =~ s!(\\[xs][A-Za-z])!$alphabet2tex{$1} or "$1"!gse;

    # \yx => \y{x}
    $a =~ s!\\([ageUtlpuvHcdbrk?])([A-Za-z])!\\$1\{$2\}!gs;

    # \z\y{x} => \z{\y{...}}
    $a =~ s!\\([ageUtlpuvHcdbrk?])\\([ageUtlpuvHcdbrk?])\{([A-Za-z])\}!\\$1\{\\$2\{$3\}\}!gs;

    # \z\y{\a}, \z\y{\a<forigumin/>b} => \z{\y{...}}
    $a =~ s!\\([ageUtlpuvHcdbrk?])\\([ageUtlpuvHcdbrk?])\{(\\[A-Za-z](<forigumin/>[A-Za-z]){0,1})\}!\\$1\{\\$2\{$3\}\}!gs;

    # <U.../> => \unicode{...}
    $a =~ s!<U([xA-Fa-f0-9]{1,})/>!\\unicode\{$1\}!gs;

    # \a\unicode{...} en \a\b\unicode{...} laat ik voorlopig maar onbehandeld.

    # \y{i}, \y{j} => \y{\i}
    $a =~ s!\\([ageUtlpuvHr?])\{([ij])\}!\\$1\{\\$2\}!gs;

    # \a{ etc => \'{
    $a =~ s!\\([ageUtlp?])\{!"\\$skfaccent2tex{$1}\{" or "\\$1\{"!gse;

    # typografie- & symbooltags => latex
    $a =~ s!(<[a-z/\!?]{1,}?>)!$typotags2tex{$1} or "$1"!gse;
    $a =~ s!(<[a-z/\!?]{1,}?>)!$symboltags2tex{$1} or "$1"!gse;

    # cirila alfabeto: ...</cyr><cyr>... => (nenio), ktp:
    $a =~ s!</cyr><cyr>!!gs;
    $a =~ s!<cyr>!\\protect\\begin\{cyr\}!gs;
    $a =~ s!</cyr>!\\protect\\end\{cyr\}!gs;

    $a =~ s!<tubobeta/>!\|!gs;
    $a =~ s!<forigumin/>!!gs;

    return($a);
}

sub sortkey {
    my($l,$a) = @_;

    # shanghu <U1234/> al <Ajnasimbolo/>:
    $a =~ s!<U[xA-Fa-f0-9]{1,}/>!&set8("<Ajnasimbolo/>")!gse;

    # shanghu <nrs/> al spaco:
    $a =~ s!<nrs/>! !gs;

    # shanghu <mrk/> kaj <frk/> al nenio:
    $a =~ s!<[mf]rk/>!!gs;

    # shanghu simbolojn al <Ajnasimbolo/>:
    $a =~ s!(<[a-z\!?]{1,}/>)! defined($symboltags2html{$1}) ? &set8("<Ajnasimbolo/>") : "$1" !gse;

    # forigo de tipografiaj vinjetoj
    $a =~ s!<[a-z/\!?]{1,}>!!gs;

    # forigo de lozaj spacoj
    $a =~ s!^ {1,}!!gs;
    $a =~ s! {1,}$!!gs;
    $a =~ s! {2,}! !gs;

    # spacoj
    $a =~ s! !<Spaco/>!gs;

    # set8 akcentojn
    $a =~ s!(\\[A-Za-z?])!&set8($1)!gse;

    # set8 litervinjetojn
    $a =~ s!(<[A-Z][A-Za-z0-9]{1,}/>)!&set8($1)!gse;

    # forigo de \-
    $a =~ s!\\-!!gs;

    # forigo de interpunkcio
    $a =~ s![\(\)/\:\;\'\?\!\,\.\-]!!gs;

    # restas nun latinaj literoj kaj ciferoj.
    # shanghu ciferojn al <Ajnasimbolo/>:
    $a =~ s![0-9]!&set8("<Ajnasimbolo/>")!gse;

    # nun restas latinaj literoj, kaj transigu ilin:
    $a =~ s!([A-Za-z])!<L$1/>!gs;

    # unset8 chion
    $a = &unset8($a);

    # forigu plurajn sinsekvajn <Ajnasimbolo/>:
    $a =~ s!(<Ajnasimbolo/>){2,}!<Ajnasimbolo/>!gs;

    # aldonu \M che minuskloj:
    $a =~ s!(<[A-Z][a-z0-9]{1,}/>)!\\M$1!gs;

    # aldonu \K che majuskloj:
    $a =~ s!(<[A-Z])([A-Z][a-z0-9]{0,}/>)!"\\K$1" . lc($2)!gse;

    #######################
    ######
     ###
      #

    # dependas de lingvoj:

    $a =~ s!(\\[KM])<L([oa])e/>!$1<L$2/>$1<Le/>!gs;    # oe => o e
    $a =~ s!(\\[KM])<L[Ss]s/>!$1<Ls/>$1<Ls/>!gs;       # ss => s s

    if ($l eq 'cs') {
	$a =~ s!<Lc/>\\[KM]<Lh/>!<Lch/>!gs;              # c h => <Lch/>
	$a =~ s!\\v(\\[KM]<L[crsz]/>)!\\7$1!gs;          # \vc post c, same
                                                         # por r, s kaj z.
	$a =~ s!\\v\\([KM])<Lch/>!\\7$1<Lc/>\\M<Lh/>!gs; # \v<Lch/> => \7c h
        $a =~ s!<Lch/>!\\7<Lh/>!gs;                      # <Lch/> => \7h,
                                                         # do ch post h.
        # aliaj supersignoj jam automate venos en bona ordo, en duaranga 
        # ordigo:
        # \aa, \vd, \ae, \ve, \ai, \vn, \ao, \vt, \au, \ru, \ay.
        # teorie eblus fiksi:
        #  $a =~ s!\\a!\\A!gs;
        #  $a =~ s!\\r!\\B!gs;
        #  $a =~ s!\\v!\\C!gs;
    }

    $a =~ s!\\[eu]!\\7!gs if ($l eq 'eo');    # ordigo por eo

    # jen finfine produktu la shlosilon:
    my($klas) = '';
    my($acc) = '';
    my($uskl) = '';
    my($pre) = '';
    my($ltr) = '';
    my($x) = '';

    foreach $x ($a =~ m!\\[\\A-Za-z0-9?<]{1,}?/>!g) {

	$x =~ m!((\\[A-Za-z0-9?]){1,})!;
        $pre = $1;
	$x =~ m!(<[A-Z][a-z0-9]{1,}/>)!;
	$ltr = $1;

        # anstatauigu litervinjeton per numero 12 (tuj poste venos subklaso):
        if (defined($letternumber{$ltr})) {
	    $klas .= $letternumber{$ltr};
	} else {
	    $klas .= "01";
	}

        $pre =~ s/\\//g;

        # aldonu subklason lau \0...\9 (normalas \5):
	if ($pre =~ m/([0-9])/) {
	    $klas .= $1;
	} else {
	    $klas .= '5';
	}

        $pre =~ s/[0-9]//g;

        # trovu la uskleskon:
	if ($pre =~ m/M/) {
	    $uskl .= '1';
	} else {
	    $uskl .= '0';
	}

        $pre =~ s/[MK]//g;

        # nur maksimume du supersignoj estas uzataj che la alfabetigo:

        my($lng) = length($pre);

        if ($lng >= 2) {
	    $pre =~ m/([A-Za-z?])([A-Za-z?])$/;
	    $acc .= $2 . $1;
	}
        if ($lng == 1) {
	    $pre =~ m/([A-Za-z?])$/;
	    $acc .= $1 . "0";
	}
        if ($lng == 0) {
	    $acc .= "00";
	}
    }

    # la rezulto por chiu litero: 445.../a0.../1...
    # kun: 44 = numero de la litero (estas 01 se spaco), 
    #       5 = subklaso,
    #      a0 = du supersignoj (estas 0 se mankas),
    #       1 = minusklo (estas 0 se majusklo).

    $a = $klas . "/" . $acc . "/" . $uskl;

    return($a);
}


sub packin {
    my($a) = @_;

    $a =~ s!(.)!'%' . sprintf("%02x",ord($1))!eg;

    return($a);
}

sub packout {
    my($a) = @_;

    $a =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    return($a);
}


sub set8 {
    my($a) = @_;

    $a =~ s!(.)!if (ord($1) < 128) {pack("C", ord($1) | 128 )} else {"$1"}!gse;

    return($a);
}

sub unset8 {
    my($a) = @_;

    $a =~ s!(.)!if (ord($1) > 127) {pack("C", ord($1) ^ 128 )} else {"$1"}!gse;

    return($a);
}


%texaccent2skf = ( 
  "'" => 'a',
  '`' => 'g',
  '^' => 'e',
  '"' => 'U',
  '~' => 't',
  '=' => 'l',
  '.' => 'p'
);


%skfaccent2tex = ( 
  'a' => "'",
  'g' => '`',
  'e' => '^',
  'U' => '"',
  't' => '~',
  'l' => '=',
  'p' => '.',
  '?' => 'hook'
);

%skfaccent2html = ( 
  '\gA' => '&#192;',
  '\aA' => '&#193;',
  '\eA' => '&#194;',
  '\tA' => '&#195;',
  '\UA' => '&#196;',
  '\rA' => '&#197;',
  '<LAe/>' => '&#198;',
  '\cC' => '&#199;',
  '\gE' => '&#200;',
  '\aE' => '&#201;',
  '\eE' => '&#202;',
  '\UE' => '&#203;',
  '\gI' => '&#204;',
  '\aI' => '&#205;',
  '\eI' => '&#206;',
  '\UI' => '&#207;',
  '\sD' => '&#208;',
  '\tN' => '&#209;',
  '\gO' => '&#210;',
  '\aO' => '&#211;',
  '\eO' => '&#212;',
  '\tO' => '&#213;',
  '\UO' => '&#214;',
  '\xO' => '&#216;',
  '\gU' => '&#217;',
  '\aU' => '&#218;',
  '\eU' => '&#219;',
  '\UU' => '&#220;',
  '\aY' => '&#221;',
  '\sT' => '&#222;',
  '<Lss/>' => '&#223;',
  '\ga' => '&#224;',
  '\aa' => '&#225;',
  '\ea' => '&#226;',
  '\ta' => '&#227;',
  '\Ua' => '&#228;',
  '\ra' => '&#229;',
  '<Lae/>' => '&#230;',
  '\cc' => '&#231;',
  '\ge' => '&#232;',
  '\ae' => '&#233;',
  '\ee' => '&#234;',
  '\Ue' => '&#235;',
  '\gi' => '&#236;',
  '\ai' => '&#237;',
  '\ei' => '&#238;',
  '\Ui' => '&#239;',
  '\sd' => '&#240;',
  '\tn' => '&#241;',
  '\go' => '&#242;',
  '\ao' => '&#243;',
  '\eo' => '&#244;',
  '\to' => '&#245;',
  '\Uo' => '&#246;',
  '\xo' => '&#248;',
  '\gu' => '&#249;',
  '\au' => '&#250;',
  '\eu' => '&#251;',
  '\Uu' => '&#252;',
  '\ay' => '&#253;',
  '\st' => '&#254;',
  '\Uy' => '&#255;',
  '\lA' => '&#256;',
  '\la' => '&#257;',
  '\uA' => '&#258;',
  '\ua' => '&#259;',
  '\kA' => '&#260;',
  '\ka' => '&#261;',
  '\aC' => '&#262;',
  '\ac' => '&#263;',
  '\eC' => '&#264;',
  '\ec' => '&#265;',
  '\pC' => '&#266;',
  '\pc' => '&#267;',
  '\vC' => '&#268;',
  '\vc' => '&#269;',
  '\vD' => '&#270;',
  '\vd' => '&#271;',
  '\xD' => '&#272;',
  '\xd' => '&#273;',
  '\lE' => '&#274;',
  '\le' => '&#275;',
  '\uE' => '&#276;',
  '\ue' => '&#277;',
  '\pE' => '&#278;',
  '\pe' => '&#279;',
  '\kE' => '&#280;',
  '\ke' => '&#281;',
  '\vE' => '&#282;',
  '\ve' => '&#283;',
  '\eG' => '&#284;',
  '\eg' => '&#285;',
  '\uG' => '&#286;',
  '\ug' => '&#287;',
  '\pG' => '&#288;',
  '\pg' => '&#289;',
  '\cG' => '&#290;',
  '\cg' => '&#291;',
  '\eH' => '&#292;',
  '\eh' => '&#293;',
  '\xH' => '&#294;',
  '\xh' => '&#295;',
  '\tI' => '&#296;',
  '\ti' => '&#297;',
  '\lI' => '&#298;',
  '\li' => '&#299;',
  '\uI' => '&#300;',
  '\ui' => '&#301;',
  '\kI' => '&#302;',
  '\ki' => '&#303;',
  '\pI' => '&#304;',
  '\si' => '&#305;',
  '\eJ' => '&#308;',
  '\ej' => '&#309;',
  '\cK' => '&#310;',
  '\ck' => '&#311;',
  '\aL' => '&#313;',
  '\al' => '&#314;',
  '\cL' => '&#315;',
  '\cl' => '&#316;',
  '\vL' => '&#317;',
  '\vl' => '&#318;',
  '\xL' => '&#321;',
  '\xl' => '&#322;',
  '\aN' => '&#323;',
  '\an' => '&#324;',
  '\cN' => '&#325;',
  '\cn' => '&#326;',
  '\vN' => '&#327;',
  '\vn' => '&#328;',
  '\sN' => '&#330;',
  '\sn' => '&#331;',
  '\lO' => '&#332;',
  '\lo' => '&#333;',
  '\uO' => '&#334;',
  '\uo' => '&#335;',
  '\HO' => '&#336;',
  '\Ho' => '&#337;',
  '<LOe/>' => '&#338;',
  '<Loe/>' => '&#339;',
  '\aR' => '&#340;',
  '\ar' => '&#341;',
  '\cR' => '&#342;',
  '\cr' => '&#343;',
  '\vR' => '&#344;',
  '\vr' => '&#345;',
  '\aS' => '&#346;',
  '\as' => '&#347;',
  '\eS' => '&#348;',
  '\es' => '&#349;',
  '\cS' => '&#350;',
  '\cs' => '&#351;',
  '\vS' => '&#352;',
  '\vs' => '&#353;',
  '\cT' => '&#354;',
  '\ct' => '&#355;',
  '\vT' => '&#356;',
  '\vt' => '&#357;',
  '\xT' => '&#358;',
  '\xt' => '&#359;',
  '\tU' => '&#360;',
  '\tu' => '&#361;',
  '\lU' => '&#362;',
  '\lu' => '&#363;',
  '\uU' => '&#364;',
  '\uu' => '&#365;',
  '\rU' => '&#366;',
  '\ru' => '&#367;',
  '\HU' => '&#368;',
  '\Hu' => '&#369;',
  '\kU' => '&#370;',
  '\ku' => '&#371;',
  '\eW' => '&#372;',
  '\ew' => '&#373;',
  '\eY' => '&#374;',
  '\ey' => '&#375;',
  '\UY' => '&#376;',
  '\aZ' => '&#377;',
  '\az' => '&#378;',
  '\pZ' => '&#379;',
  '\pz' => '&#380;',
  '\vZ' => '&#381;',
  '\vz' => '&#382;',
  '\xb' => '&#384;',
  '\xI' => '&#407;',
  '\xZ' => '&#437;',
  '\xz' => '&#438;',
  '\vA' => '&#461;',
  '\va' => '&#462;',
  '\vI' => '&#463;',
  '\vi' => '&#464;',
  '\vO' => '&#465;',
  '\vo' => '&#466;',
  '\vU' => '&#467;',
  '\vu' => '&#468;',
  '\l\UU' => '&#469;',
  '\l\Uu' => '&#470;',
  '\a\UU' => '&#471;',
  '\a\Uu' => '&#472;',
  '\v\UU' => '&#473;',
  '\v\Uu' => '&#474;',
  '\g\UU' => '&#475;',
  '\g\Uu' => '&#476;',
  '\l\UA' => '&#478;',
  '\l\Ua' => '&#479;',
  '\l\pA' => '&#480;',
  '\l\pa' => '&#481;',
  '\l<LAe/>' => '&#482;',
  '\l<Lae/>' => '&#483;',
  '\xG' => '&#484;',
  '\xg' => '&#485;',
  '\vG' => '&#486;',
  '\vg' => '&#487;',
  '\vK' => '&#488;',
  '\vk' => '&#489;',
  '\kO' => '&#490;',
  '\ko' => '&#491;',
  '\l\kO' => '&#492;',
  '\l\ko' => '&#493;',
  '\vj' => '&#496;',
  '\aG' => '&#500;',
  '\ag' => '&#501;',
  '\gN' => '&#504;',
  '\gn' => '&#505;',
  '\a\rA' => '&#506;',
  '\a\ra' => '&#507;',
  '\a<LAe/>' => '&#508;',
  '\a<Lae/>' => '&#509;',
  '\a\xO' => '&#510;',
  '\a\xo' => '&#511;',
  '\vH' => '&#542;',
  '\vh' => '&#543;',
  '\pA' => '&#550;',
  '\pa' => '&#551;',
  '\cE' => '&#552;',
  '\ce' => '&#553;',
  '\l\UO' => '&#554;',
  '\l\Uo' => '&#555;',
  '\l\tO' => '&#556;',
  '\l\to' => '&#557;',
  '\pO' => '&#558;',
  '\po' => '&#559;',
  '\l\pO' => '&#560;',
  '\l\po' => '&#561;',
  '\lY' => '&#562;',
  '\ly' => '&#563;',
  '\pB' => '&#7682;',
  '\pb' => '&#7683;',
  '\dB' => '&#7684;',
  '\db' => '&#7685;',
  '\bB' => '&#7686;',
  '\bb' => '&#7687;',
  '\a\cC' => '&#7688;',
  '\a\cc' => '&#7689;',
  '\pD' => '&#7690;',
  '\pd' => '&#7691;',
  '\dD' => '&#7692;',
  '\dd' => '&#7693;',
  '\bD' => '&#7694;',
  '\bd' => '&#7695;',
  '\cD' => '&#7696;',
  '\cd' => '&#7697;',
  '\g\lE' => '&#7700;',
  '\g\le' => '&#7701;',
  '\a\lE' => '&#7702;',
  '\a\le' => '&#7703;',
  '\u\cE' => '&#7708;',
  '\u\ce' => '&#7709;',
  '\pF' => '&#7710;',
  '\pf' => '&#7711;',
  '\lG' => '&#7712;',
  '\lg' => '&#7713;',
  '\pH' => '&#7714;',
  '\ph' => '&#7715;',
  '\dH' => '&#7716;',
  '\dh' => '&#7717;',
  '\UH' => '&#7718;',
  '\Uh' => '&#7719;',
  '\cH' => '&#7720;',
  '\ch' => '&#7721;',
  '\a\UI' => '&#7726;',
  '\a\Ui' => '&#7727;',
  '\aK' => '&#7728;',
  '\ak' => '&#7729;',
  '\dK' => '&#7730;',
  '\dk' => '&#7731;',
  '\bK' => '&#7732;',
  '\bk' => '&#7733;',
  '\dL' => '&#7734;',
  '\dl' => '&#7735;',
  '\l\dL' => '&#7736;',
  '\l\dl' => '&#7737;',
  '\bL' => '&#7738;',
  '\bl' => '&#7739;',
  '\aM' => '&#7742;',
  '\am' => '&#7743;',
  '\pM' => '&#7744;',
  '\pm' => '&#7745;',
  '\dM' => '&#7746;',
  '\dm' => '&#7747;',
  '\pN' => '&#7748;',
  '\pn' => '&#7749;',
  '\dN' => '&#7750;',
  '\dn' => '&#7751;',
  '\bN' => '&#7752;',
  '\bn' => '&#7753;',
  '\a\tO' => '&#7756;',
  '\a\to' => '&#7757;',
  '\U\tO' => '&#7758;',
  '\U\to' => '&#7759;',
  '\g\lO' => '&#7760;',
  '\g\lo' => '&#7761;',
  '\a\lO' => '&#7762;',
  '\a\lo' => '&#7763;',
  '\aP' => '&#7764;',
  '\ap' => '&#7765;',
  '\pP' => '&#7766;',
  '\pp' => '&#7767;',
  '\pR' => '&#7768;',
  '\pr' => '&#7769;',
  '\dR' => '&#7770;',
  '\dr' => '&#7771;',
  '\l\dR' => '&#7772;',
  '\l\dr' => '&#7773;',
  '\bR' => '&#7774;',
  '\br' => '&#7775;',
  '\pS' => '&#7776;',
  '\ps' => '&#7777;',
  '\dS' => '&#7778;',
  '\ds' => '&#7779;',
  '\p\aS' => '&#7780;',
  '\p\as' => '&#7781;',
  '\p\vS' => '&#7782;',
  '\p\vs' => '&#7783;',
  '\p\dS' => '&#7784;',
  '\p\ds' => '&#7785;',
  '\pT' => '&#7786;',
  '\pt' => '&#7787;',
  '\dT' => '&#7788;',
  '\dt' => '&#7789;',
  '\bT' => '&#7790;',
  '\bt' => '&#7791;',
  '\a\tU' => '&#7800;',
  '\a\tu' => '&#7801;',
  '\U\lU' => '&#7802;',
  '\U\lu' => '&#7803;',
  '\tV' => '&#7804;',
  '\tv' => '&#7805;',
  '\dV' => '&#7806;',
  '\dv' => '&#7807;',
  '\gW' => '&#7808;',
  '\gw' => '&#7809;',
  '\aW' => '&#7810;',
  '\aw' => '&#7811;',
  '\UW' => '&#7812;',
  '\Uw' => '&#7813;',
  '\pW' => '&#7814;',
  '\pw' => '&#7815;',
  '\dW' => '&#7816;',
  '\dw' => '&#7817;',
  '\pX' => '&#7818;',
  '\px' => '&#7819;',
  '\UX' => '&#7820;',
  '\Ux' => '&#7821;',
  '\pY' => '&#7822;',
  '\py' => '&#7823;',
  '\eZ' => '&#7824;',
  '\ez' => '&#7825;',
  '\dZ' => '&#7826;',
  '\dz' => '&#7827;',
  '\bZ' => '&#7828;',
  '\bz' => '&#7829;',
  '\bh' => '&#7830;',
  '\Ut' => '&#7831;',
  '\rw' => '&#7832;',
  '\ry' => '&#7833;',
  '\dA' => '&#7840;',
  '\da' => '&#7841;',
  '\?A' => '&#7842;',
  '\?a' => '&#7843;',
  '\a\eA' => '&#7844;',
  '\a\ea' => '&#7845;',
  '\g\eA' => '&#7846;',
  '\g\ea' => '&#7847;',
  '\?\eA' => '&#7848;',
  '\?\ea' => '&#7849;',
  '\t\eA' => '&#7850;',
  '\t\ea' => '&#7851;',
  '\d\eA' => '&#7852;',
  '\d\ea' => '&#7853;',
  '\a\uA' => '&#7854;',
  '\a\ua' => '&#7855;',
  '\g\uA' => '&#7856;',
  '\g\ua' => '&#7857;',
  '\?\uA' => '&#7858;',
  '\?\ua' => '&#7859;',
  '\t\uA' => '&#7860;',
  '\t\ua' => '&#7861;',
  '\d\uA' => '&#7862;',
  '\d\ua' => '&#7863;',
  '\dE' => '&#7864;',
  '\de' => '&#7865;',
  '\?E' => '&#7866;',
  '\?e' => '&#7867;',
  '\tE' => '&#7868;',
  '\te' => '&#7869;',
  '\a\eE' => '&#7870;',
  '\a\ee' => '&#7871;',
  '\g\eE' => '&#7872;',
  '\g\ee' => '&#7873;',
  '\?\eE' => '&#7874;',
  '\?\ee' => '&#7875;',
  '\t\eE' => '&#7876;',
  '\t\ee' => '&#7877;',
  '\d\eE' => '&#7878;',
  '\d\ee' => '&#7879;',
  '\?I' => '&#7880;',
  '\?i' => '&#7881;',
  '\dI' => '&#7882;',
  '\di' => '&#7883;',
  '\dO' => '&#7884;',
  '\do' => '&#7885;',
  '\?O' => '&#7886;',
  '\?o' => '&#7887;',
  '\a\eO' => '&#7888;',
  '\a\eo' => '&#7889;',
  '\g\eO' => '&#7890;',
  '\g\eo' => '&#7891;',
  '\?\eO' => '&#7892;',
  '\?\eo' => '&#7893;',
  '\t\eO' => '&#7894;',
  '\t\eo' => '&#7895;',
  '\d\eO' => '&#7896;',
  '\d\eo' => '&#7897;',
  '\dU' => '&#7908;',
  '\du' => '&#7909;',
  '\?U' => '&#7910;',
  '\?u' => '&#7911;',
  '\gY' => '&#7922;',
  '\gy' => '&#7923;',
  '\dY' => '&#7924;',
  '\dy' => '&#7925;',
  '\?Y' => '&#7926;',
  '\?y' => '&#7927;',
  '\tY' => '&#7928;',
  '\ty' => '&#7929;',
);


1;
