summaryrefslogtreecommitdiff
path: root/language/tibetan/steiner
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /language/tibetan/steiner
Initial commit
Diffstat (limited to 'language/tibetan/steiner')
-rw-r--r--language/tibetan/steiner/acip.ttd92
-rw-r--r--language/tibetan/steiner/gedtest21
-rw-r--r--language/tibetan/steiner/input.ttd94
-rw-r--r--language/tibetan/steiner/install.how124
-rw-r--r--language/tibetan/steiner/latex.ttd205
-rw-r--r--language/tibetan/steiner/readme56
-rw-r--r--language/tibetan/steiner/tex.ttd206
-rw-r--r--language/tibetan/steiner/tplatex.tex114
-rw-r--r--language/tibetan/steiner/tptex.tex117
-rw-r--r--language/tibetan/steiner/ttt.c1121
-rw-r--r--language/tibetan/steiner/tttintro.ps828
-rw-r--r--language/tibetan/steiner/tttintro.tib243
12 files changed, 3221 insertions, 0 deletions
diff --git a/language/tibetan/steiner/acip.ttd b/language/tibetan/steiner/acip.ttd
new file mode 100644
index 0000000000..1fdc900cb7
--- /dev/null
+++ b/language/tibetan/steiner/acip.ttd
@@ -0,0 +1,92 @@
+c___ka K
+c___kha KH
+p___ga G
+c___nga NG
+c___ca C
+c___cha CH
+c___ja J
+c___nya NY
+c___ta T
+c___tha TH
+p___da D
+c___na N
+c___pa P
+c___pha PH
+p___ba B
+p___ma M
+c___tsa TZ
+c___tsha TS
+c___dza DZ
+b___wa W
+c___zha ZH
+c___za Z
+p___'a '
+b___ya Y
+b___ra R
+b___la L
+c___sha SH
+c___sa S
+b___ha H
+c___a
+v___a A
+v___gigu I
+v___shabkyu U
+v___drengbu E
+v___naro O
+v___anusvaara
+v___dummy -
+.___shad ,
+.___tsheg
+.___tshegshad
+.___swasti *
+.___0 0
+.___1 1
+.___2 2
+.___3 3
+.___4 4
+.___5 5
+.___6 6
+.___7 7
+.___8 8
+.___9 9
+
+x___active_init x___active_init
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/language/tibetan/steiner/gedtest b/language/tibetan/steiner/gedtest
new file mode 100644
index 0000000000..d27ee52bc2
--- /dev/null
+++ b/language/tibetan/steiner/gedtest
@@ -0,0 +1,21 @@
+#!/bin/sh
+ttt acip.ttd latex.ttd $0 test.tex; latex test; exit
+
+*, ,BSTAN BCOS MNGON PAR RTOGS PA'I RGYAN 'GREL PA DANG BCAS
+PA'I RNAM BSHAD RNAM PA GNYIS KYI DKA' GNAD GSAL BAR BYED PA
+LAGS BSHAD SKAL BZANG KLU DBANG GI ROL MTSO ZHES BYA BA LAS
+SKABS DANG PO'I SPYI DON GYI SMAD CHA BZHUGS SO, ,
+
+@01A #, ,GNYIS PA RTOGS DKA' BA BYE BRAG TU BSHAD PA LA, DBANG
+PO RTUL DANG RNON PO DAG, CES SOGS GSUNGS NA, GZHUNG 'DIS DGE
+'DUN DKON MCHOG 'CHAD TSUL GANG ZHE NA, 'DI LA MDO LAS GSUNGS
+
+TSUL DANG, BSTAN CHOS KYIS 'GREL TSUL GNYIS LAS, DANG PO NI,
+MDO LAS, SH'A RI'I BU BYANG CHEN SHER PHYIN 'DIS GNAS PA DE NI
+SANGS RGYAS KYI ZHING GZHAN NAS SHI 'PHOS NAS 'DIR SKYES
+PA'AM, ZHES SOGS KYIS BSTAN,
+
+GNYIS PA LA, MTSAMS SBYAR BA, RTZA BA, 'GREL PA DANG GSUM LAS,
+DANG PO NI, GDAMS YUL BCU YOD PA'I NANG NAS DGE 'DUN DKON
+MCHOG BYE BRAG TU 'CHAD PA'I RGYU MTSAN CI YIN ZHE NA, DE'I
+RGYU MTSAN YOD DE, DGE 'DUN DKON MCHOG
diff --git a/language/tibetan/steiner/input.ttd b/language/tibetan/steiner/input.ttd
new file mode 100644
index 0000000000..d437f38a29
--- /dev/null
+++ b/language/tibetan/steiner/input.ttd
@@ -0,0 +1,94 @@
+c___ka k
+c___kha kh
+p___ga g
+c___nga ng
+c___ca c
+c___cha ch
+c___ja j
+c___nya ny
+c___ta t
+c___tha th
+p___da d
+c___na n
+c___pa p
+c___pha ph
+p___ba b
+p___ma m
+c___tsa ts
+c___tsha tsh
+c___dza dz
+b___wa w
+c___zha zh
+c___za z
+p___'a '
+b___ya y
+b___ra r
+b___la l
+c___sha sh
+c___sa s
+b___ha h
+v___a a
+v___gigu i
+v___shabkyu u
+v___drengbu e
+v___naro o
+v___anusvaara *
+v___dummy -
+c___aa aa
+.___no_tsheg #
+.___visarga :
+.___shad /
+.___shad_space |
+.___tsheg ,
+.___tshegshad !
+.___swasti @@
+.___0 0
+.___1 1
+.___2 2
+.___3 3
+.___4 4
+.___5 5
+.___6 6
+.___7 7
+.___8 8
+.___9 9
+
+x___error ?
+x___transp_word \
+x___transp_char &
+x___transp_char }
+x___transp_line %
+
+x___active~ %%
+x___active{ \begin{Tibetan}
+x___active} \end{Tibetan}
+
+c___taX tx
+c___thaX thx
+c___daX dx
+c___naX nx
+c___shaX shx
+
+c___\swasti \swasti
+c___\ai \ai
+c___\om \om
+c___\dme \dme
+c___\hung \hung
+c___\hrih \hrih
+c___\endsym \endsym
+c___\altm{ \altm{
+c___\altmu{ \altmu{
+c___\subm{ \subm{
+c___\achung{ \achung{
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/language/tibetan/steiner/install.how b/language/tibetan/steiner/install.how
new file mode 100644
index 0000000000..f9e55ebabe
--- /dev/null
+++ b/language/tibetan/steiner/install.how
@@ -0,0 +1,124 @@
+IMPORTANT
+---------
+
+This Package only supplies the Tibetan Transcript Translator.
+You must have Sam Sirlin's font(*.mf), font metrics (*.tfm)
+and tibdef.tex installed! If you don't have Metafont or work
+on an old LaTeX version, follow the special instructions below.
+
+Please look at the remarks at the top of the c source code.
+
+
+IF YOU HAVE SAM SIRLIN'S PACKAGE ALREADY INSTALLED
+--------------------------------------------------
+
+The only thing you have to do is to compile the source ttt.c:
+
+ gcc ttt.c -o ttt
+
+that's it!
+
+If you want to LaTeX compile the file intro.tib, enter the following
+three lines. Maybe you have another viewer than xdvi.
+
+ ttt input.ttd tex.ttd intro.tib intro.tex
+ latex intro
+ xdvi intro &
+
+You still may have to adopt is the paper size: instead of a4paper,
+use letterpaper, a5paper, b5paper, executivepaper or legalpaper.
+
+
+WORKING WITHOUT METAFONT
+------------------------
+
+Jeff Sparkes supplies the *.pk files in the package called 'original'.
+Install the *.pk and *.tfm files there and compile ttt.c as above.
+Do not use any feature supplied by Sam Sirlin. You may even have
+to comment away or remove the
+ \input{tibdef.tex}
+in the files tptex.tex and tplatex.tex
+
+
+WORKING WITH OLD LATEX VERSIONS
+-------------------------------
+
+Change all \documentclass commands to \documentstyle
+and adapt the paper size names.
+
+ grep '\documentclass' *
+
+will help you doing so.
+
+
+INSTALLING THE FONTS
+--------------------
+
+A good question regulary occurs on where to put the TeX font files.
+Here are some suggestions where to put them (taken from my installations).
+Since the paths differ quite much among systems and distributions,
+I could not write an installation script saving you this setup work
+which is quite hard for beginners.
+
+Instead of copying the font files, you can set font path variables (see
+extract from my SET-TEX.BAT file for DOS below. Hopefully, the variable
+names are equal under Linux).
+
+If the directories mentioned do not exist, look for them using
+on UNIX and derivated systems:
+ find / -type f -name "*.mf" -print
+
+Under DOS, use
+ cd \
+ dir *.mf /s
+
+
+teTeX Font Path for Metafonts (*.mf) on SuSE Linux:
+/usr/lib/teTeX/texmf/fonts/source/public/tib
+
+teTeX Font Path for pk (*.300pk or *.pk) fonts on SuSE Linux:
+/var/texfonts/pk/deskjet/*.300pk
+emtex under DOS:
+\emtex\pixel.lj\300dpi\*.pk
+
+teTeX Font Path for (*.tfm) files on SuSE Linux:
+/var/texfonts/tfm
+DOS:
+/emtex/tfm
+
+teTeX inputs (*.tex) and style (*.sty) Path on SuSE Linux:
+/usr/lib/teTeX/texmf/tex/generic/tib
+
+
+Font and other path environment variables (at least for emtex under DOS):
+
+SET TEXINPUT=T:\EMTEX\TEXINPUT;T:\MYTEX
+SET TEXFMT=T:\EMTEX\TEXFMTS
+SET BTEXFMT=T:\EMTEX\BTEXFMTS
+SET TEXTFM=T:\EMTEX\TFM
+SET MFINPUT=T:\EMTEX\MFINPUT
+SET MFBAS=T:\EMTEX\MFBASES
+SET BMFBAS=T:\EMTEX\BMFBASES
+SET MFJOB=T:\EMTEX\MFJOB
+SET BIBINPUT=T:\EMTEX\BIBINPUT
+SET DVIDRVINPUT=T:\MYTEX;T:\EMTEX\DOC
+SET DVIDRVFONTS=T:\TEXFONTS
+
+
+Hope this helps.
+
+
+----------------------------
+
+Beat.Steiner@gseved.admin.ch
+March 1997
+
+
+
+
+
+
+
+
+
+
diff --git a/language/tibetan/steiner/latex.ttd b/language/tibetan/steiner/latex.ttd
new file mode 100644
index 0000000000..b748ba5134
--- /dev/null
+++ b/language/tibetan/steiner/latex.ttd
@@ -0,0 +1,205 @@
+c___ka \tibetan\char0
+c___kha \tibetan\char1
+p___ga \tibetan\char2
+c___nga \tibetan\char3
+c___ca \tibetan\char4
+c___cha \tibetan\char5
+c___ja \tibetan\char6
+c___nya \tibetan\char7
+c___ta \tibetan\char8
+c___tha \tibetan\char9
+p___da \tibetan\char10
+c___na \tibetan\char11
+c___pa \tibetan\char12
+c___pha \tibetan\char13
+p___ba \tibetan\char14
+p___ma \tibetan\char15
+c___tsa \tibetan\char16
+c___tsha \tibetan\char17
+c___dza \tibetan\char18
+b___wa \tibetan\char19
+c___zha \tibetan\char20
+c___za \tibetan\char21
+p___'a \tibetan\char22
+b___ya \tibetan\char23
+b___ra \tibetan\char24
+b___la \tibetan\char25
+c___sha \tibetan\char26
+c___sa \tibetan\char27
+b___ha \tibetan\char28
+c___a \tibetan\char29
+v___a{
+v___a}
+v___gigu{ \gigu{
+v___gigu} }
+v___shabkyu{ \shabkyu{
+v___shabkyu} }
+v___drengbu{ \drengbu{
+v___drengbu} }
+v___naro{ \naro{
+v___naro} }
+v___anusvaara{ \anusvaara{
+v___anusvaara} }
+v___dummy{
+v___dummy}
+.___shad \tibsp\char115
+.___shad_space \hskip1cm plus1cm minus.5cm
+.___tsheg \tibsp\char114{\rm\tiny\kern-0.35em\ }
+.___tshegshad \tibsp\char121
+.___swasti \tibsp\char116
+.___visarga \visarga
+.___0 \tibsp\char0
+.___1 \tibsp\char1
+.___2 \tibsp\char2
+.___3 \tibsp\char3
+.___4 \tibsp\char4
+.___5 \tibsp\char5
+.___6 \tibsp\char6
+.___7 \tibsp\char7
+.___8 \tibsp\char8
+.___9 \tibsp\char9
+x___preamble \input{tplatex}
+x___postamble \end{document}
+x___error \rm{\huge\bf ?}
+x___inner_box{ \hbox{
+x___inner_box} }
+x___outer_box{ \strut\baselineskip0pt\vtop{
+x___outer_box} }
+
+x___transp_word
+x___transp_char
+x___active_in~ %%
+x___active_in{ \begin{Tibetan}
+x___active_in} \end{Tibetan}
+x___active{ \parindent=0pt
+x___active} \rm
+
+.___no_tsheg
+
+c___aa \aa
+l___ha_ya \hya
+l___ra_ya \rya
+l___dza_ra \dzra
+
+c___\swasti \swasti
+c___\ai \ai
+c___\om \om
+c___\dme \dme
+c___\hung \hung
+c___\hrih \hrih
+c___\endsym \endsym
+c___\altm{ \altm{
+c___\altmu{ \altmu{
+c___\subm{ \subm{
+c___\achung{ \achung{
+
+l___ra_ka \tibetan\char30
+l___ra_ga \tibetan\char31
+l___ra_nga \tibetan\char32
+l___ra_ja \tibetan\char33
+l___ra_nya \tibetan\char34
+l___ra_ta \tibetan\char35
+l___ra_da \tibetan\char36
+l___ra_na \tibetan\char37
+l___ra_ba \tibetan\char38
+l___ra_ma \tibetan\char39
+l___ra_tsa \tibetan\char40
+l___ra_dza \tibetan\char41
+l___la_ka \tibetan\char42
+l___la_ga \tibetan\char43
+l___la_nga \tibetan\char44
+l___la_ca \tibetan\char45
+l___la_ja \tibetan\char46
+l___la_ta \tibetan\char47
+l___la_da \tibetan\char48
+l___la_pa \tibetan\char49
+l___la_ba \tibetan\char50
+l___la_ha \tibetan\char51
+l___sa_ka \tibetan\char52
+l___sa_ga \tibetan\char53
+l___sa_nga \tibetan\char54
+l___sa_nya \tibetan\char55
+l___sa_ta \tibetan\char56
+l___sa_da \tibetan\char57
+l___sa_na \tibetan\char58
+l___sa_pa \tibetan\char59
+l___sa_ba \tibetan\char60
+l___sa_ma \tibetan\char61
+l___sa_tsa \tibetan\char62
+l___ka_wa \tibetan\char63
+l___kha_wa \tibetan\char64
+l___ga_ra_wa \tibetan\char66
+l___ra_ga_wa \tibetan\char67
+l___nya_wa \tibetan\char68
+l___da_wa \tibetan\char69
+l___tsha_wa \tibetan\char70
+l___ra_tsa_wa \tibetan\char71
+l___zha_wa \tibetan\char72
+l___za_wa \tibetan\char73
+l___ra_wa \tibetan\char74
+l___la_wa \tibetan\char75
+l___sha_wa \tibetan\char76
+l___ha_wa \tibetan\char77
+l___pha_ya_wa \tibetan\char78
+l___ca_wa \tibetan\char79
+l___ka_ya \tibetan\char80
+l___kha_ya \tibetan\char81
+l___ga_ya \tibetan\char82
+l___pa_ya \tibetan\char83
+l___pha_ya \tibetan\char84
+l___ba_ya \tibetan\char85
+l___ma_ya \tibetan\char86
+l___ka_ra \tibetan\char87
+l___kha_ra \tibetan\char88
+l___ga_ra \tibetan\char89
+l___ta_ra \tibetan\char90
+l___tha_ra \tibetan\char91
+l___da_ra \tibetan\char92
+l___na_ra \tibetan\char93
+l___pa_ra \tibetan\char94
+l___pha_ra \tibetan\char95
+l___ba_ra \tibetan\char96
+l___ma_ra \tibetan\char97
+l___sha_ra \tibetan\char98
+l___sa_ra \tibetan\char99
+l___ha_ra \tibetan\char100
+l___ka_la \tibetan\char101
+l___ga_la \tibetan\char102
+l___ba_la \tibetan\char103
+l___za_la \tibetan\char104
+l___ra_la \tibetan\char105
+l___sa_la \tibetan\char106
+l___ra_ka_ya \tibetan\char107
+l___ra_ga_ya \tibetan\char108
+l___sa_ka_ya \tibetan\char109
+l___sa_ka_ra \tibetan\char110
+l___sa_ga_ya \tibetan\char111
+l___sa_ga_ra \tibetan\char112
+l___sa_pa_ya \tibetan\char113
+l___sa_pa_ra \tibetan\char114
+l___sa_ba_ya \tibetan\char115
+l___sa_ba_ra \tibetan\char116
+l___ra_ma_ya \tibetan\char117
+l___sa_ma_ya \tibetan\char118
+l___sa_ma_ra \tibetan\char119
+l___ta_wa \tibetan\char120
+l___tsa_wa \tibetan\char121
+l___sa_wa \tibetan\char122
+l___da_ha \tibsp\char20
+l___ga_ha \tibsp\char21
+l___daX_ha \tibsp\char22
+l___ba_ha \tibsp\char23
+l___dza_ha \tibsp\char24
+c___thaX \tibsp\char25
+c___taX \tibsp\char26
+c___daX \tibsp\char27
+c___naX \tibsp\char28
+l___ka_shaX \tibsp\char29
+c___shaX \tibsp\char30
+
+
+
+
+
+
+
diff --git a/language/tibetan/steiner/readme b/language/tibetan/steiner/readme
new file mode 100644
index 0000000000..ed04e899ec
--- /dev/null
+++ b/language/tibetan/steiner/readme
@@ -0,0 +1,56 @@
+
+README for ttt (Tibetan Transcript Translator)
+==============================================
+
+IMPORTANT
+---------
+
+This Package only supplies the Tibetan Transcript Translator.
+You must have Sam Sirlin's font(*.mf), font metrics (*.tfm)
+and tibdef.tex installed! If you don't have Metafont or work
+on an old LaTeX version, follow the special instructions in
+INSTALL.HOW.
+
+Please look at ...
+
+ the remarks at the top of the c source code.
+ INSTALL.HOW
+ tttintro.*
+ The documentation supplied with the other two packages.
+
+
+FEATURES
+--------
+
+This program is able to typeset many syllables which originate from
+Sanskrit. Tables and inline LaTeX commands are also supported.
+You can import ACIP transcribed texts into LaTeX.
+Look at tttintro.* for further info.
+
+
+DISADVANTAGES
+-------------
+
+More complex command line.
+The vovels on tsa, tsha and dza are not specially handled and don't
+look as nice as in the other implementations. The same applies to
+cu and tsu, which are not confused any more. You will have to
+remove such workarounds from your texts.
+
+
+THANKS
+------
+
+to Jeff Sparkes and Sam Sirlin for their previous implementations,
+which supplied me the fonts and some good ideas for the ttt program.
+
+
+ Beat.Steiner@gseved.admin.ch March 1997
+
+
+
+
+
+
+
+
diff --git a/language/tibetan/steiner/tex.ttd b/language/tibetan/steiner/tex.ttd
new file mode 100644
index 0000000000..91e8da2ede
--- /dev/null
+++ b/language/tibetan/steiner/tex.ttd
@@ -0,0 +1,206 @@
+c___ka \tibetan\char0
+c___kha \tibetan\char1
+p___ga \tibetan\char2
+c___nga \tibetan\char3
+c___ca \tibetan\char4
+c___cha \tibetan\char5
+c___ja \tibetan\char6
+c___nya \tibetan\char7
+c___ta \tibetan\char8
+c___tha \tibetan\char9
+p___da \tibetan\char10
+c___na \tibetan\char11
+c___pa \tibetan\char12
+c___pha \tibetan\char13
+p___ba \tibetan\char14
+p___ma \tibetan\char15
+c___tsa \tibetan\char16
+c___tsha \tibetan\char17
+c___dza \tibetan\char18
+b___wa \tibetan\char19
+c___zha \tibetan\char20
+c___za \tibetan\char21
+p___'a \tibetan\char22
+b___ya \tibetan\char23
+b___ra \tibetan\char24
+b___la \tibetan\char25
+c___sha \tibetan\char26
+c___sa \tibetan\char27
+b___ha \tibetan\char28
+c___a \tibetan\char29
+v___a{
+v___a}
+v___gigu{ \gigu{
+v___gigu} }
+v___shabkyu{ \shabkyu{
+v___shabkyu} }
+v___drengbu{ \drengbu{
+v___drengbu} }
+v___naro{ \naro{
+v___naro} }
+v___anusvaara{ \anusvaara{
+v___anusvaara} }
+v___dummy{
+v___dummy}
+.___shad \tibsp\char115
+.___shad_space \hskip1cm plus1cm minus.5cm
+.___tsheg \tibsp\char114{\rm\tiny\kern-0.35em\ }
+.___tshegshad \tibsp\char121
+.___swasti \tibsp\char116
+.___visarga \visarga
+.___0 \tibsp\char0
+.___1 \tibsp\char1
+.___2 \tibsp\char2
+.___3 \tibsp\char3
+.___4 \tibsp\char4
+.___5 \tibsp\char5
+.___6 \tibsp\char6
+.___7 \tibsp\char7
+.___8 \tibsp\char8
+.___9 \tibsp\char9
+x___preamble \input{tptex}
+x___postamble
+x___error \rm{\huge\bf ?}
+
+x___inner_box{ \hbox{
+x___inner_box} }
+x___outer_box{ \strut\baselineskip0pt\vtop{
+x___outer_box} }
+
+x___transp_word
+x___transp_char
+x___active_in~ %%
+x___active_in{ \begin{Tibetan}
+x___active_in} \end{Tibetan}
+x___active{ \parindent=0pt
+x___active} \rm
+
+.___no_tsheg
+
+c___aa \aa
+l___ha_ya \hya
+l___ra_ya \rya
+l___dza_ra \dzra
+
+c___\swasti \swasti
+c___\ai \ai
+c___\om \om
+c___\dme \dme
+c___\hung \hung
+c___\hrih \hrih
+c___\endsym \endsym
+c___\altm{ \altm{
+c___\altmu{ \altmu{
+c___\subm{ \subm{
+c___\achung{ \achung{
+
+l___ra_ka \tibetan\char30
+l___ra_ga \tibetan\char31
+l___ra_nga \tibetan\char32
+l___ra_ja \tibetan\char33
+l___ra_nya \tibetan\char34
+l___ra_ta \tibetan\char35
+l___ra_da \tibetan\char36
+l___ra_na \tibetan\char37
+l___ra_ba \tibetan\char38
+l___ra_ma \tibetan\char39
+l___ra_tsa \tibetan\char40
+l___ra_dza \tibetan\char41
+l___la_ka \tibetan\char42
+l___la_ga \tibetan\char43
+l___la_nga \tibetan\char44
+l___la_ca \tibetan\char45
+l___la_ja \tibetan\char46
+l___la_ta \tibetan\char47
+l___la_da \tibetan\char48
+l___la_pa \tibetan\char49
+l___la_ba \tibetan\char50
+l___la_ha \tibetan\char51
+l___sa_ka \tibetan\char52
+l___sa_ga \tibetan\char53
+l___sa_nga \tibetan\char54
+l___sa_nya \tibetan\char55
+l___sa_ta \tibetan\char56
+l___sa_da \tibetan\char57
+l___sa_na \tibetan\char58
+l___sa_pa \tibetan\char59
+l___sa_ba \tibetan\char60
+l___sa_ma \tibetan\char61
+l___sa_tsa \tibetan\char62
+l___ka_wa \tibetan\char63
+l___kha_wa \tibetan\char64
+l___ga_ra_wa \tibetan\char66
+l___ra_ga_wa \tibetan\char67
+l___nya_wa \tibetan\char68
+l___da_wa \tibetan\char69
+l___tsha_wa \tibetan\char70
+l___ra_tsa_wa \tibetan\char71
+l___zha_wa \tibetan\char72
+l___za_wa \tibetan\char73
+l___ra_wa \tibetan\char74
+l___la_wa \tibetan\char75
+l___sha_wa \tibetan\char76
+l___ha_wa \tibetan\char77
+l___pha_ya_wa \tibetan\char78
+l___ca_wa \tibetan\char79
+l___ka_ya \tibetan\char80
+l___kha_ya \tibetan\char81
+l___ga_ya \tibetan\char82
+l___pa_ya \tibetan\char83
+l___pha_ya \tibetan\char84
+l___ba_ya \tibetan\char85
+l___ma_ya \tibetan\char86
+l___ka_ra \tibetan\char87
+l___kha_ra \tibetan\char88
+l___ga_ra \tibetan\char89
+l___ta_ra \tibetan\char90
+l___tha_ra \tibetan\char91
+l___da_ra \tibetan\char92
+l___na_ra \tibetan\char93
+l___pa_ra \tibetan\char94
+l___pha_ra \tibetan\char95
+l___ba_ra \tibetan\char96
+l___ma_ra \tibetan\char97
+l___sha_ra \tibetan\char98
+l___sa_ra \tibetan\char99
+l___ha_ra \tibetan\char100
+l___ka_la \tibetan\char101
+l___ga_la \tibetan\char102
+l___ba_la \tibetan\char103
+l___za_la \tibetan\char104
+l___ra_la \tibetan\char105
+l___sa_la \tibetan\char106
+l___ra_ka_ya \tibetan\char107
+l___ra_ga_ya \tibetan\char108
+l___sa_ka_ya \tibetan\char109
+l___sa_ka_ra \tibetan\char110
+l___sa_ga_ya \tibetan\char111
+l___sa_ga_ra \tibetan\char112
+l___sa_pa_ya \tibetan\char113
+l___sa_pa_ra \tibetan\char114
+l___sa_ba_ya \tibetan\char115
+l___sa_ba_ra \tibetan\char116
+l___ra_ma_ya \tibetan\char117
+l___sa_ma_ya \tibetan\char118
+l___sa_ma_ra \tibetan\char119
+l___ta_wa \tibetan\char120
+l___tsa_wa \tibetan\char121
+l___sa_wa \tibetan\char122
+l___da_ha \tibsp\char20
+l___ga_ha \tibsp\char21
+l___daX_ha \tibsp\char22
+l___ba_ha \tibsp\char23
+l___dza_ha \tibsp\char24
+c___thaX \tibsp\char25
+c___taX \tibsp\char26
+c___daX \tibsp\char27
+c___naX \tibsp\char28
+l___ka_shaX \tibsp\char29
+c___shaX \tibsp\char30
+
+
+
+
+
+
+
diff --git a/language/tibetan/steiner/tplatex.tex b/language/tibetan/steiner/tplatex.tex
new file mode 100644
index 0000000000..f9ba6f179c
--- /dev/null
+++ b/language/tibetan/steiner/tplatex.tex
@@ -0,0 +1,114 @@
+%
+% LaTeX Preamble for the Tibetan Transcript Translator
+% Written and collected by Beat.Steiner@gseved.admin.ch
+%
+
+% Thanks to J. Sparkes and Sam Sirlin to give me the necessary ideas
+% to solve LaTeX boxing problems
+
+
+% Vovel Macros
+
+% Sorry for using such brute force to (almost) center the
+% vovels on their main letter. The \kern commands work around the
+% fact that a \hfil is never negative.
+% A further benefit is that the ligature boxes are only as
+% wide as the main letter even if the vovel is wider.
+% Unfortunately, an \accent can not be put on boxes (generic ligatures).
+
+
+\def\gigu#1{\strut
+ \vbox{\baselineskip0pt\ialign{##
+ \cr{\hfil\rm\kern-8.7em
+ \tibsp\accent126
+ \rm\kern-9em\hfil}
+ \cr{#1}\cr
+ }}}
+
+\def\shabkyu#1{\strut
+ \vtop{\baselineskip0pt\ialign{##
+ \cr{#1}
+ \cr{\hfil\rm\kern-9em
+ \tibsp\char123
+ \rm\kern-8.9em\hfil}
+ \cr
+ }}}
+
+
+\def\drengbu#1{\strut
+ \vbox{\baselineskip0pt\ialign{##
+ \cr{\hfil\rm\kern-9em
+ \tibsp\accent127
+ \rm\kern-9em\hfil}
+ \cr{#1}\cr
+ }}}
+
+\def\naro#1{\baselineskip0pt\strut
+ \vbox{\baselineskip0pt\ialign{##
+ \cr{\hfil\rm\kern-8.7em
+ \tibsp\accent125
+ \rm\kern-9em\hfil}
+ \cr{#1}\cr
+ }}}
+
+\def\anusvaara#1{\strut\baselineskip0pt
+ \vbox{\baselineskip0pt\ialign{##
+ \cr{\hfil\rm\kern-8.9em
+ \tibsp\char0
+ \rm\kern-9em\hfil}
+ \cr{#1}\cr
+ }}}
+
+
+
+% Fonts
+
+\font\tibetan=gtib
+\font\tibsp=gtibsp
+
+
+
+% Manual ligature definitions
+
+
+\def\aa{\strut
+ \vtop{\baselineskip0pt\ialign{##
+ \cr{\tibetan\char29}
+ \cr{\hfil\rm\kern-8.7em
+ \tibetan\char22
+ \rm\kern-9em\hfil}
+ \cr
+ }}}
+
+\def \rya{\vtop{\baselineskip0pt\hbox{\tibetan\char24}\hbox{\tibsp\char4}}}
+\def \hya{\vtop{\baselineskip0pt\hbox{\tibetan\char28}\hbox{\tibsp\char4}}}
+\def \dzra{\vtop{\baselineskip0pt\hbox{\tibetan\char18}\hbox{\tibsp\char127}}}
+
+
+
+% Sam Sirlin's \endsym
+\def \visarga{
+\vtop{\ialign{##\cr
+{\tibsp\char0}\cr
+\noalign{\kern -2pt\nointerlineskip}
+{\hskip1pt\bf-}\cr
+\noalign{\nointerlineskip}
+{\tibsp\char0}\cr }}
+}
+
+% From Sam Sirlin
+\input{tibdef.tex}
+
+% LaTeX Preamble
+
+\documentclass[a4paper]{article}
+\begin{document}
+
+\parindent=0pt
+\parskip=0pt
+\sloppy
+
+
+
+
+
diff --git a/language/tibetan/steiner/tptex.tex b/language/tibetan/steiner/tptex.tex
new file mode 100644
index 0000000000..bfd149a7d3
--- /dev/null
+++ b/language/tibetan/steiner/tptex.tex
@@ -0,0 +1,117 @@
+%
+% LaTeX Preamble for the Tibetan Transcript Translator
+% Written and collected by Beat.Steiner@gseved.admin.ch
+%
+
+% Thanks to J. Sparkes and Sam Sirlin to give me the necessary ideas
+% to solve LaTeX boxing problems
+
+
+% Vovel Macros
+
+% Sorry for using such brute force to (almost) center the
+% vovels on their main letter. The \kern commands work around the
+% fact that a \hfil is never negative.
+% A further benefit is that the ligature boxes are only as
+% wide as the main letter even if the vovel is wider.
+% Unfortunately, an \accent can not be put on boxes (generic ligatures).
+
+
+\def\gigu#1{\strut
+ \vbox{\baselineskip0pt\ialign{##
+ \cr{\hfil\rm\kern-8.7em
+ \tibsp\accent126
+ \rm\kern-9em\hfil}
+ \cr{#1}\cr
+ }}}
+
+\def\shabkyu#1{\strut
+ \vtop{\baselineskip0pt\ialign{##
+ \cr{#1}
+ \cr{\hfil\rm\kern-9em
+ \tibsp\char123
+ \rm\kern-8.9em\hfil}
+ \cr
+ }}}
+
+
+\def\drengbu#1{\strut
+ \vbox{\baselineskip0pt\ialign{##
+ \cr{\hfil\rm\kern-9em
+ \tibsp\accent127
+ \rm\kern-9em\hfil}
+ \cr{#1}\cr
+ }}}
+
+\def\naro#1{\baselineskip0pt\strut
+ \vbox{\baselineskip0pt\ialign{##
+ \cr{\hfil\rm\kern-8.7em
+ \tibsp\accent125
+ \rm\kern-9em\hfil}
+ \cr{#1}\cr
+ }}}
+
+\def\anusvaara#1{\strut\baselineskip0pt
+ \vbox{\baselineskip0pt\ialign{##
+ \cr{\hfil\rm\kern-8.9em
+ \tibsp\char0
+ \rm\kern-9em\hfil}
+ \cr{#1}\cr
+ }}}
+
+
+
+% Fonts
+
+\font\tibetan=gtib
+\font\tibsp=gtibsp
+
+% Manual ligature definitions
+
+\def\aa{\strut
+ \vtop{\baselineskip0pt\ialign{##
+ \cr{\tibetan\char29}
+ \cr{\hfil\rm\kern-8.7em
+ \tibetan\char22
+ \rm\kern-9em\hfil}
+ \cr
+ }}}
+
+\def \rya{\vtop{\baselineskip0pt\hbox{\tibetan\char24}\hbox{\tibsp\char4}}}
+\def \hya{\vtop{\baselineskip0pt\hbox{\tibetan\char28}\hbox{\tibsp\char4}}}
+\def \dzra{\vtop{\baselineskip0pt\hbox{\tibetan\char18}\hbox{\tibsp\char127}}}
+
+% Sam Sirlin's end symbol \endsym
+\def \visarga{
+\vtop{\ialign{##\cr
+{\tibsp\char0}\cr
+\noalign{\kern -2pt\nointerlineskip}
+{\hskip1pt\bf-}\cr
+\noalign{\nointerlineskip}
+{\tibsp\char0}\cr }}
+}
+
+
+% From Sam Sirlin
+\input{tibdef.tex}
+
+\parindent=0pt
+\parskip=0pt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/language/tibetan/steiner/ttt.c b/language/tibetan/steiner/ttt.c
new file mode 100644
index 0000000000..c5765dce58
--- /dev/null
+++ b/language/tibetan/steiner/ttt.c
@@ -0,0 +1,1121 @@
+/***********************************************************************/
+/***********************************************************************/
+/* */
+/* Tibetan Transcript Translator */
+/* */
+/***********************************************************************/
+/***********************************************************************/
+/*
+ (C) Dec 1996 / Jan, Feb 1997 by
+ Beat Steiner, Brunngasse 12, 3011 Bern, Switzerland
+ e-mail: Beat.Steiner@gseved.admin.ch
+ Version 0.1 alpha prerelease
+
+
+ LEGAL STUFF
+ -----------
+ Refer to GNU General Public License (feel free to use and distribute
+ this program at your own risk but at no cost, keeping copyright
+ notices intact).
+
+
+ DESCRIPTION
+ -----------
+ This program is intended to convert different transcript standards
+ of the Tibetan language or even to perform a transcript import into
+ a document processing system.
+
+ At present, it is able to convert transcripts to LaTeX, based
+ on Jeff sparkes' and / or Sam Sirlin's fonts and ideas. Since I
+ got into trouble to reverse engineer Sparkes' code, I have rewriten
+ the complete transcript translator, only picking some ideas from his
+ code.
+
+ The main additional feature is fully automatic ligature generation,
+ openness towards different transcript standards and inline LaTeX
+ command support.
+
+ The main disadvantages are:
+ ** Sparkes' and Sirlin's language mix handling is not supported yet.
+ ** vovels on tsa, tsha, dza (resp. TZA, TSA, DZA) do not look nice.
+
+ WARNING: the ttd file format is still subject to change.
+ If you create your own ttd files now, you risk to spend much work
+ on updating them.
+
+
+ INSTALLING
+ ----------
+ Install Sam Sirlin's fonts from the CTAN archive
+ tex/language/tibetan/sirlin
+ to the appropriate directory or set the Tex font path.
+ Do the same with the tfm files. Look at the README file
+ for help on this. If you dont have metafont, use Jeff Sparkes'
+ pk and tfm files.
+
+ This is a single file program which can be compiled without
+ complication by
+ gcc ttt.c -o ttt
+ or
+ cc ttt.c -o ttt
+ or whatever ANSI compliant C compiler you have.
+
+
+ STARTING THIS PROGRAM
+ ---------------------
+ In order to translate ACIP to LaTeX, use
+
+ ttt acip.ttd latex.ttd input.tib output.tex
+
+ where acip.ttd is the input transcript definition file
+ . latex.ttd is the output transcript definition file
+ . input.tib is your ACIP input text
+ . output.tex is the output file to be processed by latex
+
+ On Linux, you will enjoy the feature of magic line support:
+ In your input.tib file, add the following two lines at the
+ VERY TOP (replacing the respective filenames):
+
+ #!/bin/sh
+ ttt acip.ttd latex.ttd $0 output.tex; latex output; exit
+
+ Due to the magic line at the top, (ba)sh will think that your text
+ input.tib is a shell script, executing the 2nd line.
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ This program will ignore the FIRST AND THE SECOND
+ line if the FIRST line starts with #!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ Do not put anything, even not comments above these lines.
+ $0 is automatically replaced by the file name (e.g. input.tib).
+
+ Then turn your input.tib file into an executable by
+ chmod 755 input.tib
+
+ Now, you can start this program by entering
+ input.tib
+ at the shell command prompt.
+
+ DOS users, please write an apropriate *.BAT file (without $0).
+ Windows users may set the command line options as program properties.
+
+
+ RETURN VALUES
+ -------------
+ 0: Normal program completion.
+ 1: x___error occurred (unknown input key, missing output ligature
+ . and such)
+ 2: Could not open a file or bad number of command line arguments
+ 3: Static memory allocation overrun
+
+
+ IMPLEMENTATION NOTICE
+ ---------------------
+ This kind of implementation was motivated by the need of importing
+ texts typed at Sera Monastery into the ClearLook document
+ processing system and solving other conversion problems like
+ differences between ACIP and Wiley transcripts plus the need to
+ import both of them into LaTeX, ClearLook, Lout and other programs.
+
+ Therefore, a very flexible solution based on Tibetan Transcript
+ Definition (ttd) files has been chosen.
+ They map the different transcribed letters, control sequences
+ and ligatures (btags pa) to common keys.
+
+ example: ACIP --> LaTeX conversion for the letter 'tsa
+ the acip.ttd file says:
+ c___tsa TZ
+ which associates the key 'tsa' to the value 'TZ'
+ the tex.ttd file says:
+ c___tsa \tibetan\char16
+ which associates the key 'tsa' to the tex font chracter.
+
+ The magic characters before the transcript key have the following
+ meaning:
+
+ 1st char:
+ c: normal consonant
+ p: potential prefix (negative bias for ligature generation)
+ b: potential btagspa (simplified lower part of ligatureand ha,
+ positive bias for ligature generation)
+ .: punctuation (Terminates syllable and suppresses tsheg)
+ x: program control
+
+ 2nd char and 3rd char:
+ reserved for generic ligature generation (join styles,
+ character substitution)
+
+ 4th char:
+ _: just to increase readability of ttd file
+
+ Meaning of x___ keys:
+
+ General controls:
+ x___preamble Will be at top of output without being asked for
+ x___postamble Will be at bottom of output without being asked for
+ x___error Error message included to output file
+
+ Generic ligatures:
+ x___inner_box{ Encapsulation of individual characters (no vovels)
+ x___inner_box}
+ x___outer_box{ Encapsulation of whole ligature without vovel
+ x___outer_box}
+
+ Mixed language handling (subject to change, not fully implemented yet)
+ x___transp_word Input will be put out without modification til space
+ x___transp_char Unmodified character passing
+ x___transp_reg{ Unmodified region passing start
+ x___transp_reg} end
+ x___transp_reg~ toggle
+
+
+ WARNING: The values of the input ttd and the keys of the output
+ ttd file MUST be unique, otherwise the result is undefined.
+
+ The input stream is scanned for the largest matched value in the
+ input ttd file, giving the common key. A lookup in the output ttd
+ file generates the output stream.
+
+ The ligature generation is a special issue documented at the
+ rather complicated if construct in the main function.
+
+
+ To Do:
+ ------
+
+ ** Better char comparison in ttread
+ ** Write documentation
+ ** allow comments in ttd files
+ ** Warn on ambiguous transcript (gyin, gyas, ...)
+ ** Full support of Sirlin and Sparkes
+ ** Mixed language support
+ Two flags allow mixing Tibetan, other languages and control sequences:
+ 'active' says wether or not the lookup and ligature generation
+ . take place or not. If not,
+ 'transparent' says wether the input stream is passed unmodified to
+ . the output stream or simply be ignored (crunched).
+
+ ** Clean escape char handling for binary output
+
+ ** More intelligence for Generic Ligatures
+ ** Font: Character fragments for generic ligatures
+ ** Vertically stretched (50% or 75%) chars for generic ligatures
+ ** Mirrored gigu
+
+ ALMOST DONE
+ -----------
+ ** Clean up and update comments and program style
+ ** Read filenames from command line
+ . (unflexible, no default handling, magic lines for linux only)
+ ** Vovel support for generic ligatures (still a LaTeX problem to solve)
+ ** (Only) two vovels on a character supported
+
+ PERFORMANCE
+ -----------
+ The actual lookup process is performed by a binary search although
+ a hash table lookup is expected to be about 5 times faster. This is
+ just caused by my not being that much familiar with C++ and g++.
+ Furtheron, bsearch is better documented and available on more
+ compilers.
+ This program needs less than 1 second to produce 6 a4paper output pages
+ on my 5x86 machine. So there are more important problems to solve now.
+ */
+
+/***********************************************************************/
+/* May this program contribute to the */
+/* Dharma practice of many people */
+/***********************************************************************/
+
+/******************************/
+/******************************/
+/* */
+/* Includes */
+/* */
+/******************************/
+/******************************/
+
+#include <stdio.h>
+#include <stdlib.h> /* contians qsort and bsearch */
+#include <string.h>
+
+
+/******************************/
+/******************************/
+/* */
+/* Static Memory Allocations */
+/* */
+/******************************/
+/******************************/
+
+const int MAX_SYL_SIZE_LINE = __LINE__ + 1;
+#define MAX_SYL_SIZE 50
+/* maximum characters per syllable (ligature complexity)
+ very cheap and should be enough
+ */
+
+const int MAX_KEY_VAL_LENGTH_LINE = __LINE__ + 1;
+#define MAX_KEY_VAL_LENGTH 44
+/* maximum ttd key/value length
+ critical for output preamble
+ hint: try to include the preamble
+ */
+
+const int TTSIZE_LINE = __LINE__ + 1;
+#define TTSIZE 300
+/* transcript table size
+ critical for predefined ligatures
+ keep in mind that you add an appropriate command margin
+ to the number of characters in your font.
+ */
+
+const int INPUT_LINEBUFFER_LENGTH_LINE = __LINE__ + 1;
+#define INPUT_LINEBUFFER_LENGTH 180
+/* Maximum line length of input text file */
+
+
+/******************************/
+/******************************/
+/* */
+/* Global stuff */
+/* */
+/******************************/
+/******************************/
+
+typedef struct
+{
+ char key[MAX_KEY_VAL_LENGTH];
+ char val[MAX_KEY_VAL_LENGTH];
+} ttentry;
+
+char ESCAPE_CHAR='\xff';
+int KEY_LEN[MAX_KEY_VAL_LENGTH];
+int X_ERROR_OCCURRED = 0;
+static FILE *OUTTEXT;
+
+/******************************/
+/******************************/
+/* */
+/* Functions */
+/* */
+/******************************/
+/******************************/
+
+void trace(char *message)
+{
+ /*
+ if (message == NULL)
+ {
+ fprintf(stderr, "<NULL>");
+ fflush(stderr);
+ }else{
+ fprintf(stderr, "<%s>", message);
+ fflush(stderr);
+ }
+ */
+}
+
+
+/******************************/
+
+/* clean interface for strncmp */
+int ttcmp(const void *first, const void *second)
+{
+ return strncmp(((ttentry*)first)->key, ((ttentry*)second)->key,
+ MAX_KEY_VAL_LENGTH); }
+
+
+/******************************/
+
+void ttprepare(ttentry ttable[])
+{
+ qsort(&ttable[0], TTSIZE, sizeof(ttentry), ttcmp);
+}
+
+
+/******************************/
+
+char *ttlookup(const char *key, const ttentry ttable[])
+{
+ ttentry *found=NULL;
+
+ if (key)
+ {
+ found=(ttentry*)bsearch(key, ttable, TTSIZE,
+ sizeof(ttentry), ttcmp);
+
+ if (found)
+ {
+ return found->val;
+ }else{
+ return NULL;
+ }
+ }
+}
+
+
+/******************************/
+
+void ttread(const char *name, int swap, ttentry ttable[])
+{
+ /* This procedure reads the transcript definition files.
+ The first column MUST be strictly left aligned.
+ 'name' is the filenamae
+ 'swap' is a flag which swaps the key/value reading order:
+ file contents for swap=0:
+ <key> <value>
+ file contents for swap=1:
+ <value> <key>
+ 'ttable' is the transcript table where the file is read into.
+ 'TTSIZE' is allocated statically and needed to avoid an
+ index overflow
+ */
+ char c = ' '; /* not EOF */
+ char *cp = NULL;
+ char *cp_start = NULL; /* Needed for ptr range check */
+ FILE *ttd = NULL;
+ int idx = 0;
+
+ void CheckCP(void)
+ {
+ if ((cp - cp_start) >= (MAX_KEY_VAL_LENGTH - 1))
+ {
+ fprintf(stderr, "Insufficient static memory allocation. ");
+ fprintf(stderr, "Please increase MAX_KEY_VAL_LENGTH in ");
+ fprintf(stderr, "line %d of %s and compile again.\n",
+ MAX_KEY_VAL_LENGTH_LINE, __FILE__);
+ exit(3);
+ }
+ }
+
+ /* Clear array storing input ttd key length flags
+ for boosting performance in charparse() */
+ for (idx = 0; idx < MAX_KEY_VAL_LENGTH; idx++)
+ {
+ KEY_LEN[idx] = 0;
+ }
+ idx = 0;
+
+ /* Clear transcript table struct arrays */
+ for (idx = 0; idx < TTSIZE; idx++)
+ {
+ *ttable[idx].key = '\0';
+ *ttable[idx].val = '\0';
+ }
+ idx = 0;
+
+
+ if (!(ttd = fopen(name, "r") ))
+ {
+ fprintf(stderr, "%s %s\n", "could not open ttd file ", name);
+ exit(2);
+ }
+
+
+ /* ev. better with strpbrk() */
+ while (c != EOF && idx < TTSIZE)
+ {
+ /* Read ttd keys/values */
+ if (swap) cp = ttable[idx].val;
+ else cp = ttable[idx].key;
+
+ cp_start = cp;
+
+ c = fgetc(ttd);
+ while ( c != ' ' && c != '\t' && c != '\n' && c != EOF)
+ {
+ *cp++ = c; CheckCP();
+ c=fgetc(ttd);
+ }
+ *cp++ = '\0'; CheckCP();
+
+ /* Eliminate separtor garbage */
+ while ( c == ' ' || c == '\t' )
+ { c = fgetc(ttd);
+ }
+
+ /* Read ttd values/keys */
+ if (swap) cp = ttable[idx].key;
+ else cp = ttable[idx].val;
+
+ cp_start = cp;
+ while ( c != '\t' && c != '\n' && c != EOF )
+ /* ev. add comment char and spaces */
+ {
+ *cp++ = c; CheckCP();
+ c = fgetc(ttd);
+ }
+ *cp++ = '\0'; CheckCP();
+
+ /* Eliminate trailing garbage */
+ while ( c != '\n' && c != EOF )
+ { c = fgetc(ttd);
+ }
+
+ /* mark existing key lengths */
+ KEY_LEN[strlen(ttable[idx].key)] = !0;
+
+ idx++;
+ }
+ if (idx >= TTSIZE)
+ {
+ fprintf(stderr, "Insufficient memory allocation. Please increase");
+ fprintf(stderr,
+ " TTSIZE in line %d of %s and compile again.\n",
+ TTSIZE_LINE, __FILE__);
+ exit(3);
+ }
+}
+
+
+/******************************/
+
+void prepare_flags(ttentry inptrans[], ttentry outtrans[],
+ int *active, int *transparent)
+{
+ char *charptr;
+
+ /* Set activity flag according to INPUT ttd */
+ charptr=ttlookup("x___init_active", inptrans);
+ if (charptr)
+ {
+ if ( strcasecmp("yes", charptr) == 0 )
+ { *active = 1; }else{ *active = 0;
+ }
+ }
+
+ /* Set transparency flag according to OUTPUT ttd */
+ charptr=ttlookup("x___init_transprent", outtrans);
+ if (charptr)
+ {
+ if ( strcasecmp("yes", charptr) == 0 )
+ { *transparent = 1; }else{ *transparent = 0;
+ }
+ }
+
+
+ /* Set escape character
+ In this release, escapechar is only accepted if it is the first
+ char in the output ttd */
+
+ charptr=ttlookup("x___escape_char", outtrans);
+ if (charptr)
+ {
+ ESCAPE_CHAR = *charptr;
+ }
+}
+
+
+/******************************/
+
+char *charparse(const char *input, int *parsestep,
+ const ttentry *inptrans)
+{
+ char yigcpy[MAX_KEY_VAL_LENGTH+1];
+ char *charptr=NULL;
+ int parselen;
+ int yiglen;
+
+ strncpy(yigcpy, input, MAX_KEY_VAL_LENGTH);
+ parselen=strlen(input);
+ if (parselen > MAX_KEY_VAL_LENGTH) parselen=MAX_KEY_VAL_LENGTH;
+ yiglen=parselen;
+
+ while (yiglen > 0 && charptr == NULL)
+ {
+ yigcpy[yiglen] = '\0';
+ if (KEY_LEN[yiglen]) charptr = ttlookup(yigcpy, inptrans);
+ yiglen--;
+ }
+ *parsestep=yiglen+1;
+ return charptr;
+}
+
+
+/******************************/
+
+void yigprint(char *yig,
+ ttentry *outtrans)
+{
+ char *charptr=NULL;
+ if (yig != NULL)
+ {
+ charptr=ttlookup(yig, outtrans);
+ if (charptr)
+ {
+ /* DIRTY: detects escape char only if it is the first one. */
+ if (*charptr != ESCAPE_CHAR)
+ {
+ if (*charptr != '\0') fprintf(OUTTEXT, "%s", charptr);
+ /* fflush(OUTTEXT); */
+ }else{
+ charptr++; /* skip the escape char itself */
+ fprintf(OUTTEXT, "%c", (char)strtol(charptr, NULL, 0));
+ /* fflush(OUTTEXT); */
+ }
+ }else{ /* no output ttd match */
+ X_ERROR_OCCURRED = !0;
+ fprintf(OUTTEXT, "%s", ttlookup("x___error", outtrans));
+ fflush(OUTTEXT);
+ trace(yig);
+ }
+ }else{
+ /* trace("gugus"); */
+ }
+}
+
+
+/******************************/
+
+int vovel_left(char *syl[MAX_SYL_SIZE], int start, int syllength)
+{
+ int i;
+ int result = 0;
+
+ for (i=start; i<syllength; i++)
+ {
+ /* trace(syl[i]); */
+ if (*syl[i] == 'v') result = !0;
+ }
+ return result;
+}
+
+
+/**********************************************************************/
+/**********************************************************************/
+/********************* *********************/
+/********************* Main *********************/
+/********************* *********************/
+/**********************************************************************/
+/**********************************************************************/
+
+int main(int argc, char **argv)
+{
+ /* Trnscript tables
+ TTSIZE is #defined at the static memory allocations at top of code
+ */
+ ttentry inptrans[TTSIZE];
+ ttentry outtrans[TTSIZE];
+
+ /* Filter activity flag */
+ int active = 0; /* 0=non-Tibetan, 1=Tibetan text */
+
+ /* Filter transparency flag */
+ int transparent = 0; /* 0=crunch non-Tibetan, 1=pass non-Tibetan */
+
+ int pending_tsheg = 0; /* (c) by Jeff Sparkes */
+ int pending_shad_space = 0; /* (c) by Jeff Sparkes */
+
+ /* Char & syllable buffers */
+ char linebuf [INPUT_LINEBUFFER_LENGTH + 1];
+ char inner_vovel_key_buf [MAX_KEY_VAL_LENGTH + 2];
+ char outer_vovel_key_buf [MAX_KEY_VAL_LENGTH + 2];
+ char lig_key[MAX_SYL_SIZE * MAX_KEY_VAL_LENGTH];
+ char *charptr = NULL;
+ char *parseptr = NULL;
+ char *yig = NULL;
+/* char *yigbuf = NULL; */
+
+ char *syllable[MAX_SYL_SIZE];
+ int sylindex;
+ int sylend;
+ int parsestep;
+ int i;
+ int geni;
+ int firstline = !0;
+ int skipline = 0;
+
+ char *active_start = NULL;
+ char *active_end = NULL;
+ char *active_toggle = NULL;
+
+ int active_start_len = 0;
+ int active_end_len = 0;
+ int active_toggle_len = 0;
+
+
+ /* Input text file */
+ static FILE *inptext;
+ /* OUTTEXT is defined in the global section */
+
+
+/******************************/
+/* */
+/* Preparation */
+/* */
+/******************************/
+
+
+ if (argc != 5)
+ {
+ /* fprintf(stderr, "You gave %d arguments:\n", argc - 1);
+ fprintf(stderr, "Input ttd: %s\n", argv[1]);
+ fprintf(stderr, "Output ttd: %s\n", argv[2]); */
+ fprintf(stderr,
+ "USAGE: %s input.ttd output.ttd input.text output.text\n",
+ argv[0]);
+ exit(2);
+ }
+
+
+ /* Read transcript tables from files and prepare (sort) them
+ for binary search. Input ttd MUST be read last in order to
+ maintain the KEY_LEN array
+ */
+ ttread (argv[2], 0, outtrans);
+ ttread (argv[1], 1, inptrans);
+ ttprepare(inptrans);
+ ttprepare(outtrans);
+
+
+trace(ttlookup("c___ka", outtrans));
+
+trace("prepare activity flags");
+
+// active_start = ttlookup("x___active_in{", outtrans);
+// if (active_start != NULL) active_start_len = strlen(active_start);
+// trace(active_start);
+// active_end = ttlookup("x___active_in}", outtrans);
+// if (active_end != NULL) active_end_len = strlen(active_end);
+// trace(active_end);
+// active_toggle = ttlookup("x___active_in~", outtrans);
+// if (active_toggle != NULL) active_toggle_len = strlen(active_toggle);
+// trace(active_toggle);
+
+ if (ttlookup("x___active_init", inptrans) != NULL)
+ {
+ active = !0;
+ }else{
+ active = 0;
+ }
+
+/******************************/
+/* */
+/* Open Files */
+/* */
+/******************************/
+
+
+ /* Open input text file */
+ if (strncmp(argv[3], "-", 2) != 0)
+ {
+ if (!( inptext = fopen(argv[3], "r") ))
+ {
+ fprintf(stderr, "%s", "Could not open input text file");
+ exit(2);
+ }
+ }else{
+ inptext = stdin;
+ }
+
+ /* Open output text file (outtext is global)*/
+ if (strncmp(argv[4], "-", 2) != 0)
+ {
+ if (!( OUTTEXT = fopen(argv[4], "w") ))
+ {
+ fprintf(stderr, "%s", "Could not open output text file");
+ exit(2);
+ }
+ }else{
+ OUTTEXT = stdout;
+ }
+
+
+/******************************/
+/* */
+/* Start Output */
+/* */
+/******************************/
+
+ /* Output preamble */
+ yigprint("x___preamble", outtrans);
+
+ prepare_flags(inptrans, outtrans,
+ &active, &transparent);
+
+
+ /* read input text file */
+ while (fgets(linebuf, INPUT_LINEBUFFER_LENGTH, inptext) != NULL)
+ {
+ if (strlen(linebuf) >= (INPUT_LINEBUFFER_LENGTH-1))
+ {
+ fprintf(stderr, "Input file contains too long lines. ");
+ fprintf(stderr, "Please keep them shorter than %d ",
+ INPUT_LINEBUFFER_LENGTH);
+ fprintf(stderr, "characters or increase ");
+ fprintf(stderr, "INPUT_LINEBUFFER_LENGTH in line %d of %s",
+ INPUT_LINEBUFFER_LENGTH_LINE, __FILE__);
+ fprintf(stderr, " and compile again.\n");
+ exit(3);
+ }
+
+ if (skipline)
+ {
+ *linebuf = '\0';
+ skipline = 0;
+ }
+
+ /* Filter out magic lines for Linux */
+ parseptr = linebuf + 1;
+ if (firstline && (*linebuf == '#') && (*parseptr == '!'))
+ {
+ *linebuf = '\0';
+ skipline = !0;
+ }
+ firstline = 0;
+
+ parseptr = linebuf;
+
+ /* parse until end of line */
+ while (*parseptr != '\0' && *parseptr != '\n' && *parseptr != '\13')
+ {
+ yig = charparse(parseptr, &parsestep, inptrans);
+ if (yig != NULL)
+ {
+ if (*yig == 'x') trace(yig);
+
+ if (strncmp(yig, "x___active{", MAX_KEY_VAL_LENGTH) == 0)
+ {
+ parseptr += parsestep;
+ active = !0;
+ if (ttlookup("x___active{", outtrans))
+ {
+ yigprint("x___active{", outtrans);
+ }
+ }
+
+ if (strncmp(yig, "x___active}", MAX_KEY_VAL_LENGTH) == 0)
+ {
+ parseptr += parsestep;
+ active = 0;
+ if (ttlookup("x___active}", outtrans))
+ {
+ yigprint("x___active}", outtrans);
+ }
+ }
+
+ if (strncmp(yig, "x___active~", MAX_KEY_VAL_LENGTH) == 0)
+ {
+ parseptr += parsestep;
+ trace("active toggle");
+ active = !active;
+ if (active)
+ {
+ if (ttlookup("x___active{", outtrans))
+ {
+ yigprint("x___active{", outtrans);
+ }
+ }else{
+ if (ttlookup("x___active}", outtrans))
+ {
+ yigprint("x___active}", outtrans);
+ }
+ }
+ }
+ }
+ if (active)
+ {
+ /*** read one syllable ***/
+ sylindex = 0;
+
+ do{
+ yig = charparse(parseptr, &parsestep, inptrans);
+ if (yig == NULL)
+ {
+ sylend = !0;
+ if ( *parseptr == ' ' || *parseptr == '\x0D'
+ || *parseptr == '\0' || *parseptr == '\n'
+ || *parseptr == '\t' )
+ {
+ }else{
+ X_ERROR_OCCURRED = !0;
+ yigprint("x___error", outtrans);
+ /* fprintf(OUTTEXT, "Input not defined"); */
+ }
+ parseptr++;
+ }else{
+ if (*yig != '.' && *yig != 'x')
+ {
+ sylend = 0;
+ }else{
+ pending_tsheg = 0;
+ sylend = !0;
+ if (strncmp(yig, ".___shad", MAX_KEY_VAL_LENGTH) == 0)
+ {
+ pending_shad_space = !0;
+ }
+ if (strncmp(yig, ".___tshegshad",
+ MAX_KEY_VAL_LENGTH) == 0)
+ {
+ pending_shad_space = !0;
+ }
+ if (strncmp(yig, "x___transp_line",
+ MAX_KEY_VAL_LENGTH) == 0)
+ {
+ while(!( *parseptr == '\0'
+ || *parseptr == '\n'))
+ {
+ fprintf(OUTTEXT, "%c", *parseptr++);
+ }
+ }
+ if (strncmp(yig, "x___transp_word",
+ MAX_KEY_VAL_LENGTH) == 0)
+ {
+ while(!(*parseptr == ' '
+ || *parseptr == '\x0D'
+ || *parseptr == '\0'
+ || *parseptr == '\t'
+ || *parseptr == '\n'))
+ {
+ fprintf(OUTTEXT, "%c", *parseptr++);
+ }
+ }
+ if (strncmp(yig, "x___transp_char",
+ MAX_KEY_VAL_LENGTH) == 0)
+ {
+ fprintf(OUTTEXT, "%c", *parseptr++);
+ }
+ }
+ if ( *yig == 'v' || *yig == 'c'
+ || *yig == 'p' || *yig == 'b')
+ {
+ pending_tsheg = !0;
+ }
+ syllable[sylindex++] = yig;
+ if (parsestep > 0)
+ {
+ parseptr += parsestep;
+ }else{
+ X_ERROR_OCCURRED = !0;
+ yigprint("x___error", outtrans);
+ fprintf(OUTTEXT, "sylr 2");
+ parseptr++;
+ }
+ }
+ }
+ while (!sylend);
+
+ /*** trace("syllable read"); ***/
+
+ /******************************/
+ /* */
+ /* Syllable Analysis */
+ /* */
+ /******************************/
+
+
+ /* does syllable contain a prefix ? */
+ if (sylindex >= 3)
+ /* at least 2 chars + 1 (inherent)vovel */
+ {
+ if (*syllable[0] == 'p'
+ /* potential prefix marked as such in ttd */
+
+ && *syllable[1] != 'v'
+ /* vovel? -> pot. prefix is main letter */
+
+ /* is pot. prefix part of a ligature? */
+ && !(strncmp(syllable[0], "p___'a",
+ MAX_KEY_VAL_LENGTH) != 0
+ /* 'a is NEVER upper part of a ligature */
+ /* ( I at least hope so ) */
+
+ && *syllable[1] == 'b'
+ /* ya, ra, la, wa subjoined to pot. prefix */
+
+ && *syllable[2] == 'v'
+ /* ligature complete -> no prefix
+ examples: bya, gya ....
+ negative examples: brgyad ... */
+
+ /* WARNING: gyin, gyas ... give wrong result
+ (ambiguous transcript).
+ Work around this using the
+ dummy vovel (usually '-').
+ Examples: g-yin, g-yas, bu -ddha, ...
+ */
+ )
+ )
+ {
+ yigprint(syllable[0], outtrans); /* output prefix */
+ for (i = 0; i < sylindex; i++)
+ {
+ /* shift away prefix */
+ syllable[i] = syllable[i + 1];
+ }
+ sylindex--;
+ }
+ } /* min length for prefix */
+
+ /******************************/
+ /* */
+ /* Ligature Generation */
+ /* */
+ /******************************/
+
+ i = 0;
+ while (vovel_left(syllable, i, sylindex))
+ {
+ if (*syllable[i] == 'v' &&
+ strncmp(syllable[i], "v___dummy", MAX_KEY_VAL_LENGTH)
+ != 0)
+ {
+ strncpy(lig_key, "c___a", MAX_KEY_VAL_LENGTH);
+ }
+ else if(*syllable[i + 1] == 'v')
+ {
+ strncpy(lig_key, syllable[i++], MAX_KEY_VAL_LENGTH);
+ }
+ else
+ {
+ geni = i;
+ strncpy(lig_key, "l__", MAX_KEY_VAL_LENGTH);
+ while (i < sylindex && *syllable[i] != 'v')
+ /* compose ligature key */
+ {
+ charptr = syllable[i];
+ charptr += 3; /* cut off type */
+ /* example p___ba + b___ya => l___ba_ya */
+
+ strncat(lig_key, charptr, MAX_KEY_VAL_LENGTH);
+ i++;
+ }
+ }
+ strncpy(inner_vovel_key_buf, syllable[i++],
+ MAX_KEY_VAL_LENGTH);
+
+ if (i < sylindex)
+ {
+ if (*syllable[i] == 'v')
+ {
+ strncpy( outer_vovel_key_buf, syllable[i++],
+ MAX_KEY_VAL_LENGTH);
+ strncat( outer_vovel_key_buf, "{",
+ MAX_KEY_VAL_LENGTH);
+ yigprint(outer_vovel_key_buf, outtrans);
+ }else{
+ *outer_vovel_key_buf = '\0';
+ }
+ }else{
+ *outer_vovel_key_buf = '\0';
+ }
+ strncat( inner_vovel_key_buf, "{", MAX_KEY_VAL_LENGTH);
+ yigprint(inner_vovel_key_buf, outtrans);
+
+ if (ttlookup(lig_key, outtrans))
+ {
+ /* Predefined ligature */
+ yigprint(lig_key, outtrans);
+ }else{
+ /* Automatic ligature generation */
+ yigprint("x___outer_box{", outtrans);
+ while (*syllable[geni] != 'v')
+ {
+ yigprint("x___inner_box{", outtrans);
+
+
+ /* Look for predefined two-letter ligatures
+ within generic ligature */
+ charptr = NULL;
+ if (*syllable[geni+1] != 'v')
+ {
+ strncpy(lig_key, "l__", MAX_KEY_VAL_LENGTH);
+ charptr = syllable[geni];
+ charptr += 3;
+ strncat(lig_key, charptr, MAX_KEY_VAL_LENGTH);
+ charptr = syllable[geni+1];
+ charptr += 3;
+ strncat(lig_key, charptr, MAX_KEY_VAL_LENGTH);
+ charptr = ttlookup(lig_key, outtrans);
+ }
+
+ if (charptr)
+ {
+ yigprint(lig_key, outtrans);
+ geni += 2;
+ }else{
+ /* Single-letter generic ligature part */
+ yigprint(syllable[geni++], outtrans);
+ }
+ yigprint("x___inner_box}", outtrans);
+ }
+ yigprint("x___outer_box}", outtrans);
+ }
+
+ inner_vovel_key_buf[strlen(inner_vovel_key_buf) - 1] = '}';
+ yigprint(inner_vovel_key_buf, outtrans);
+
+ if (*outer_vovel_key_buf != '\0')
+ {
+ outer_vovel_key_buf[strlen(outer_vovel_key_buf) - 1]
+ = '}';
+ yigprint(outer_vovel_key_buf, outtrans);
+ }
+
+ } /* while vovel left */
+
+ while (i < sylindex) /* output suffix */
+ {
+ yigprint(syllable[i], outtrans);
+ i++;
+ }
+
+ if (pending_tsheg)
+ {
+ yigprint(".___tsheg", outtrans);
+ pending_tsheg = 0;
+ }
+
+ if (pending_shad_space && (*parseptr == ' '
+ || *parseptr == '\t'
+ || *parseptr == '\x0D'
+ || *parseptr == '\0'
+ || *parseptr == '\n'))
+ {
+ yigprint(".___shad_space", outtrans);
+ }
+ pending_shad_space = 0; /* MUST be after '}' */
+
+ }else{ /* not active */
+// if (strncmp(parseptr, "%%", 2) == 0)
+// {
+// active = !0;
+ fprintf(OUTTEXT, "%c", *parseptr++);
+ }
+
+ } /* while parseptr */
+
+ fprintf(OUTTEXT, "\n");
+
+ } /* while fgets */
+
+ yigprint("x___postamble", outtrans);
+ fprintf(OUTTEXT, "\n");
+
+ if (X_ERROR_OCCURRED)
+ {
+ exit(1);
+ }else{
+ exit(0);
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/language/tibetan/steiner/tttintro.ps b/language/tibetan/steiner/tttintro.ps
new file mode 100644
index 0000000000..abc6fac698
--- /dev/null
+++ b/language/tibetan/steiner/tttintro.ps
@@ -0,0 +1,828 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
+%%Title: test.dvi
+%%Pages: 4
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentPaperSizes: a4
+%%EndComments
+%DVIPSCommandLine: dvips -o tttintro.ps test.dvi
+%DVIPSParameters: dpi=300, compressed, comments removed
+%DVIPSSource: TeX output 1997.03.03:1017
+%%BeginProcSet: texc.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
+forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
+/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
+/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
+/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
+string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
+end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
+/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
+N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
+length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
+128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
+get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
+dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
+/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
+/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
+0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
+setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
+.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
+/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
+gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
+add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
+/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
+dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
+adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
+idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
+putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
+adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
+{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
+adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
+chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
+}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
+/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
+round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
+rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
+{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
+4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
+p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 39158280 55380996 1000 300 300 (test.dvi)
+@start /Fa 61 122 df<12C0A81200A312C0A2020D7C8C0B>33
+D<1236A312FFA21236127E126CA212FFA2126CA2080D7F8C0B>35
+D<1208123C124A128BA212C81278123E120F120912C9A2126A123C1208A208107F8D0B>
+I<1208121012201260124012C0A61240126012201210120805107D8D0B>40
+D<128012401220123012101218A61210123012201240128005107E8D0B>I<1218A212DB
+127E1218127E12DB1218A208097F8A0B>I<124012E0126012201240128003067C820B>
+44 D<12FFA208027F860B>I<124012E0124003037C820B>I<1203A212071206120E120C
+121C1218A2123812301270126012E012C0A208107F8D0B>I<123C1266A212C3A71266A2
+123C080D7F8C0B>I<123C126612C3A21203A21206120C120812101220124312FF080D7F
+8C0B>50 D<127E1260A4127C12461203A212C3A21246123C080D7F8C0B>53
+D<12FF12C21206120CA21218A31230A5080D7F8C0B>55 D<124012E012401200A3124012
+E0124003097C880B>58 D<124012E012401200A3124012E01260122012401280030C7C88
+0B>I<120CA2121E1212A41233A2123F1233A2EAF3C00A0D808C0B>65
+D<12FE12621263A31266127E1263A4126212FE080D7F8C0B>I<121D12271263124312C0
+A5124312631226121C080D7F8C0B>I<12FE1263A2EA6180A7EA6300A212FE090D808C0B>
+I<B4FC1263A21260A2126C127C126C1260A2EA6180A212FF090D7F8C0B>I<12FF1263A2
+1260A21266127E12661260A412F8080D7F8C0B>I<121D12271263124312C0A3EACF80EA
+C300124312631227121F090D7F8C0B>I<12E71266A5127E1266A512E7080D7F8C0B>I<12
+FF1218AB12FF080D7F8C0B>I<12F81260A91263A212FF080D7F8C0B>76
+D<EAF3C0EA7380A21261A3126DA31261A3EAF3C00A0D808C0B>I<12FF1276A21266A712
+6EA212FE080D7F8C0B>I<127E12E712C3A912E7127E080D7F8C0B>I<12FC12661263A312
+66127C1260A512F0080D7F8C0B>I<12F8126C1266A3126C1278126CA3EA6D80A2EAF700
+090D7F8C0B>82 D<123E124612C612C0A21278123E12071203A212C312C212FC080D7F8C
+0B>I<EAFFC012CCA2EA0C00A9123F0A0D808C0B>I<EAF3C0EA6180EA3300A51212A3121E
+A2120C0A0D808C0B>86 D<EAF3C0EA6180A4126DA2EA2D00122512211233A30A0D808C0B
+>I<EA7380EA3300123E121E121C120CA2121EA31233A2EAF3C00A0D808C0B>I<EAF3C0EA
+3300A3121EA3120CA5121E0A0D808C0B>I<127812C41206A2127E12C6A3EA7B8009097F
+880B>97 D<12F01230A3123E1233EA3180A5EA3300123E090D808C0B>I<1238126C12C0
+A5126C123806097E880B>I<121E1206A3123E126612C6A51266EA3F80090D7F8C0B>I<12
+38126412C6A212FE12C0A21266123C07097F880B>I<1207EA1980EA1800A2EAFF80EA18
+00A7B4FC090D808C0B>I<EA1DC01222EA6300A21222123C1260127FEA3F80EA41C012C0
+A3EA6180EA1E000A0F80880B>I<12F01230A31236123B1233A6EAFFC00A0D808C0B>I<12
+18A21200A312F81218A712FF080E7E8D0B>I<120CA21200A3127C120CAB12C812700613
+7F8D0B>I<12F01230A3EA3F80EA3600123E123C123E12361233A2EAFBC00A0D808C0B>I<
+12F81218AB12FF080D7F8C0B>I<12FBEA6D80A7EAFFC00A0980880B>I<12F6123B1233A6
+EAFFC00A0980880B>I<123C126612C3A51266123C08097F880B>I<12FE1233EA3180A5EA
+3300123E1230A412FC090E80880B>I<12F7EA3980EA3000A612FE09097F880B>114
+D<127C128CA212F01278120C12C4A212F806097E880B>I<1218A2B4FC1218A5EA1980A2
+EA0F00090B808A0B>I<B4FC1233A7EA1FC00A0980880B>I<EAF3C0EA3300A3123F121EA3
+120C0A0980880B>I<EAFFC0EA6180A2EA2100122DA2123F1237A20A0980880B>I<EAF380
+EA3300121E121C120C121EA21233EAF3C00A0980880B>I<EAF3C0EA3300A2123B121B12
+1A120EA3120CA2126C127812300A0E80880B>I E /Fb 36 121 df<EB0FF0EB7FFC3801
+F80E3803E01F48485AEA0F80A2141E140C91C7FCA4B6FCA2380F801FB2397FF0FFE0A21B
+237FA21F>12 D<1238127C12FEA3127C123807077C8610>46 D<13181378EA01F812FFA2
+1201B3A7387FFFE0A213207C9F1C>49 D<EA03FCEA0FFF383C1FC0387007E0007C13F0EA
+FE0314F8A21301127CEA3803120014F0A2EB07E014C0EB0F80EB1F00133E13385BEBE018
+EA01C0EA0380EA0700000E1338380FFFF05A5A5AB5FCA215207D9F1C>I<13FE3807FFC0
+380F07E0381E03F0123FEB81F8A3EA1F0314F0120014E0EB07C0EB1F803801FE007F3800
+07C0EB01F014F8EB00FCA2003C13FE127EB4FCA314FCEA7E01007813F8381E07F0380FFF
+C03801FE0017207E9F1C>I<14E013011303A21307130F131FA21337137713E7EA01C713
+87EA03071207120E120C12181238127012E0B6FCA2380007E0A790B5FCA218207E9F1C>
+I<D903FE138090381FFF819038FF01E33901F8003FD803E0131F4848130F48481307121F
+48C71203A2481401127EA200FE91C7FCA8127EED0180127F7E15036C6C1400120F6C6C13
+06D803F05B6C6C13386CB413F090381FFFC0D903FEC7FC21227DA128>67
+D<B612FCA23807F000153C151C150C150EA21506140CA31500141C143CEBFFFCA2EBF03C
+141C140CA21503A214001506A3150EA2151E153EEC01FCB6FCA220227EA125>69
+D<D903FE134090391FFFC0C090387F00F1D801F8133F4848130FD807C01307000F140348
+5A48C71201A2481400127EA200FE1500A791380FFFFC127E007F9038001FC0A27EA26C7E
+6C7E6C7E6C7ED801FC133F39007F80E790381FFFC30103130026227DA12C>71
+D<B53883FFFEA23A07F0001FC0AD90B6FCA29038F0001FAFB53883FFFEA227227EA12C>
+I<B512C0A2D807F0C7FCB31518A41538A21570A215F014011407B6FCA21D227EA122>76
+D<D8FFF0EC0FFF6D5C000716E0D806FC1437A3017E1467A26D14C7A290391F800187A290
+390FC00307A3903807E006A2903803F00CA2903801F818A3903800FC30A2EC7E60A2EC3F
+C0A2EC1F80A3EC0F00D8FFF091B5FC140630227EA135>I<D8FFF8EB1FFE7F0007EC00C0
+7FEA06FF6D7E6D7E6D7E130F806D7E6D7E6D7E130080EC7F80EC3FC0EC1FE0EC0FF01407
+15F8EC03FCEC01FEEC00FF157FA2153F151F150F15071503A2D8FFF01301150027227EA1
+2C>I<B6FC15E03907F007F0EC01FC1400157EA2157FA5157EA215FC1401EC07F090B512
+E0150001F0C7FCADB57EA220227EA126>80 D<3801FE023807FF86381F01FE383C007E00
+7C131E0078130EA200F81306A27E1400B4FC13E06CB4FC14C06C13F06C13F86C13FC0003
+13FEEA003F1303EB007F143FA200C0131FA36C131EA26C133C12FCB413F838C7FFE00080
+138018227DA11F>83 D<B5EB0FFEA2D807F0EB00C0A26C6CEB0180A26D1303000115007F
+000014067F6D5BA2EC801C013F1318ECC038011F133014E0010F5BA26D6C5AA214F90103
+5B14FD6DB4C7FCA26D5AA3147CA21438A227227FA12A>86 D<B53A0FFFF00FFEA2260FF0
+0090C712E000076E14C0A26C6C90393F800180A26D14C00001EE0300A26D496C5A000002
+6F1306A2017F9038C7F00CA2028113F8013F01835BA29139C301FC38011F153016FE9026
+0FE6005BA202FEEBFFE06D486D5AA26D486D5AA36D486DC7FCA36D48130EA237227FA13A
+>I<EA0FFC383FFF80387E07C0EB03E0130114F0123C1200A2133FEA03FDEA1FC1EA3F01
+127E12FCA4EA7E02EB0CF8381FF87F3807E03F18167E951B>97 D<EBFF80000713E0380F
+83F0EA1F03123E127E387C01E090C7FC12FCA6127C127EA2003E13186C1330380FC06038
+07FFC0C6130015167E9519>99 D<EB01FEA2EB003EABEA01FC3807FFBE380F81FE381F00
+7E003E133E127E127C12FCA8127CA26C137E6C13FE380F83BE3907FF3FC0EA01FC1A237E
+A21F>I<13FE3807FF80380F87C0381E01E0003E13F0EA7C0014F812FCA2B5FCA200FCC7
+FCA3127CA2127E003E13186C1330380FC0703803FFC0C6130015167E951A>I<3801FE0F
+3907FFBF80380F87C7381F03E7391E01E000003E7FA5001E5BEA1F03380F87C0EBFF80D8
+09FEC7FC0018C8FCA2121C381FFFE06C13F86C13FE001F7F383C003F48EB0F80481307A4
+0078EB0F006C131E001F137C6CB45A000113C019217F951C>103
+D<B4FCA2121FABEB07E0EB1FF8EB307CEB403CEB803EA21300AE39FFE1FFC0A21A237EA2
+1F>I<121C123E127FA3123E121CC7FCA7B4FCA2121FB2EAFFE0A20B247EA310>I<B4FCA2
+121FABECFF80A2EC38001460495A495A49C7FC130E5B137E13FF13CFEB0F806D7E6D7E13
+01806D7E147C143C39FFE0FFC0A21A237EA21E>107 D<B4FCA2121FB3ADEAFFE0A20B23
+7EA210>I<3AFF07F007F090391FFC1FFC3A1F303E303E01401340496C487EA201001300
+AE3BFFE0FFE0FFE0A22B167E9530>I<38FF07E0EB1FF8381F307CEB403CEB803EA21300
+AE39FFE1FFC0A21A167E951F>I<13FE3807FFC0380F83E0381E00F0003E13F848137CA3
+00FC137EA7007C137CA26C13F8381F01F0380F83E03807FFC03800FE0017167E951C>I<
+38FF0FE0EB3FF8381FE07CEB803E497E1580A2EC0FC0A8EC1F80A29038803F00EBC03EEB
+E0FCEB3FF8EB0FC090C8FCA8EAFFE0A21A207E951F>I<EAFE1FEB3FC0381E67E013C713
+87A2381F83C090C7FCADEAFFF0A213167E9517>114 D<EA0FF3EA3FFFEA781FEA6007EA
+E003A212F000FCC7FCEA7FE013F8EA3FFEEA0FFF120138000F80EAC007130312E0A238F0
+0700EAFC0EEAEFFCEAC7F011167E9516>I<487EA41203A21207A2120F123FB5FCA2EA0F
+80ABEB8180A5EB8300EA07C3EA03FEEA00F811207F9F16>I<38FF01FEA2381F003EAF14
+7E14FE380F81BE3907FF3FC0EA01FC1A167E951F>I<39FFE01FE0A2391F800700000F13
+06EBC00E0007130C13E000035BA26C6C5AA26C6C5AA2EB7CC0A2137F6D5AA26DC7FCA213
+0EA21B167F951E>I<39FFE07FC0A2390F801C006C6C5A6C6C5AEBF0606C6C5A3800F980
+137F6DC7FC7F80497E1337EB63E0EBC1F03801C0F848487E3807007E000E133E39FF80FF
+E0A21B167F951E>120 D E /Fc 33 101 df<001FB6FC4815C04815E0A216F0A390380F
+FC0F397E07F807EA7C030078EBF003A23A7001E001E012E0A212C015006D5AA4C7FCA791
+C7FCB11660A824357E9B28>0 D<000FB612FE003FEDFF805A17C0B8FC178001C3138190
+39007C007F4801F0EB3F00485B49487F007C49131EEA780391C7FCA21306161C49140CEB
+0FFCECFFC015F015FC4913FEEDFF8C02F913DC3A381E000FFC0110130390C8FC163C161C
+160493C7FCB11218A62A367E9B2E>I<0003B612FC001F15FF5A17805AA2381FE03F3A07
+800FF87F3A0E0007E03F120C001C02C01300001801037F5AA2007014801260EA7F80EAFF
+F813FE01FF141E14C314E314FB387800FFC7123F141F140F14071403140114001500160E
+B11606A529367D9B2E>I<001FB512C04814F05AB6FCA215C090C8FC12FC5A5AA25AABEA
+FFF8EBFFC014F814FF158015E015F0A239FC003FF8C71203EC00FC153C15041E237E9B22
+>I<90380FFFF0017F13FF48B612804815005DC614F8010013806EC7FC143EA2147E147F
+4A7E497FD8E00F7F007FB57E6C487F9038E03FFC391F800FFEEBC007000F6D7E6D7E0007
+6D13806D137FA26C6C133F6D1400A26C7E6C6C137E6D6C5A6DB45A010713C021217E9B25
+>I<0107B5FC013F14C05BA3011F1400010113C06D6CC7FC143E143C141C1418141E9038
+03FFE0013F13FC90B61280000315E04815F04815F8261FFC1C13FCD83FC0EB1FFE903800
+1803007C14000078153F161F48013C130FA3147E0070136F007801C7130E3A3E03C3801E
+3A1FFF81E03C3A07FE00FFF8D801F8EB3FF028237E9B2C>I<B512FC14FFA414FC00E0C8
+FCA6B512FE80A414FC00E0C8FCA7B512C014F814FE80158001C013C039E0000FE0C71201
+EC006015101C237E9B20>I<EB7FC03801FFF000077F5A5A5AEA3C07EA7803387001F0EA
+E0006C5BEAF80100FC5B397C03FFC0D8780713E0C64813F05B4913F8EB7E07EBF801EBF0
+00485A157813FE6D1338A249133000001470137890C7126015E0A2EC01C0A2EC0380EC07
+005C140E141E5C5CA25C495A495A13075C49C7FC131E5B5B5B485A48C8FC1D367E9B21>
+I<381FFFFC007F13FFB6FCA314FC90C8FC12F85A7EA27E7E7E13C0EBFFC014F014FCA280
+80EAFE0FEAE001C7EA7F80143F141F140FA21407A51500A35C140EA2141EA2141C143C14
+381478147014F05C495AA2495AA249C7FC130613045B19387E9B1D>I<48B512C0000714
+F0A24814F8A3EBFC03EB8001EA1F00001E1300A3003EEB01F0003F13031380391FC00770
+EBF018EBFFF06C13C06C13803801FE00EA007C13785B1201485A48481330EA0FF0EA1FFC
+48B4FC481380B512E014F0380003F8EB00FC143E140FEC07B0EC03F014011400A21570A3
+1D2D7E9B21>I<0007B512F04814FC485CA25D15C001FCC8FC13E05B6CC9FC120E121E12
+1C5AEA3FFF4813E014F814FEB6FC8181D8F8077FC77F143FEC0FF814036E7E1400157E15
+3E153F81A2ED0F80A21507A2ED03C0A3150116E0A21500A31660A223307E9B27>I<9038
+1FFFF8137F90B5FC15F05A15E0D8001F1380903807C00013036D7E130014703801FFF000
+077F001F7F487FEB1FFFD878031380EA70004814C0147F15E014EFECC7F0127038300183
+383C0781391F1F01F83807FC00EA01F0C81278A31538A51518A91508A41D337E9B21>I<
+9039FFFE03F80003140F4815F014FCA202F013E06CEB0007EA01FCD803F013034914C048
+5A5B48C7FC120E121E001C1401A25AEA3FFEEBFFC04813F014FC14FEB6128015C0D80001
+13E09038001FF0EC03F81400157D153F151F150F150715011500164025257E9B29>I<D8
+03FFEB0FC0000F9038C01FF04813E048EC3FF84813C0000F018013F03803FE0013F04848
+14E049137F4913FB3A0F0001E3C0000EEB078348EB0F01141C48133814F0387001E0387E
+07C0397FFF8000A2B57E14F86C13FE80D8001F13C09038007FE0EC07F9EC01FDEC007F15
+1F150F1507150315011500164025257E9B29>I<017FB5FC48B612C0A24815E0A3913800
+7FC001F8131FD807E0130F5B49130790C7FC120EA2120C001CEC03801218EA3F8013F848
+B4FC14C014F0B512FC14FEECFF83D8F80113C3C7EA1FF3EC07FBEC01FF80157F153F151F
+150F150715031501150023267E9B27>I<0003B513E0000FEC03F814FE16FC02FC13F86C
+EBE0013803FE006C4813001200137C133C01FE14782607FF8013704813E04813F84813FE
+487F1580D87C1F13C0D8F00FEBE0309038077FF800E0EB0FFC90380303FE913800FFB001
+06EB3FF000F0141FD8700E1307D87C3C1303D83FF813016C481300D803C01470C9123016
+1026217D9B2B>I<16F81507150F16F016E0ED1F80ED1C0015101518A290B512F85A5A5A
+A215E0C70030C7FCA214381478147C14FE497E5B010F7FD8F07F7F397FE07FE09038001F
+F06C6C6C7E001F1307EBC003000F6D7EEBE0000007147C7F15386C7E7F6C6C5B6C7E9038
+7F81E090383FFF80D907FEC7FC252B7EA529>I<167FED03FFED07FE150F16FC16F01600
+1508150C150E010FB5FC013F14805B90B6FC160015F8010390C7FCEB00FC14781470A214
+301438143C903803FFC0013F13FC48B6FC4815C0000F15E0261FF8F313F03A3FC0307FF8
+903900200FFC007EEB00030078140000F8153E480110131E1438160E1478007013FC2678
+01CC131C26380386133C261E070313783A0FFE01C1F03A03F800FFC0282D7EA52C>I<ED
+1F8015FF5C4A13005D15F815C00206C7FC140E141FB67EA2815DA24AC7FC00E0C9FCA6B5
+12FE6E7EA44AC7FC00E0C9FCA7B57E14F814FF81819038E01FE000FCC7FC212A7EA525>
+I<D9FFF8133E00079039FE01FFC0121F481680A24880D9007E140000FC013E7F48131E48
+010E137E480106133EA2161C5AA41618A30204131C1260A20020151EC648B6FC010F1580
+5B491500A25B9138F0007FD93F80133E6DC7121E131E131C160E13185BA21370A2136013
+E0EBFFF8ECFF804814F015FEEDFFCE2600FC3F13FE9038C0000790C71201ED003E160E2A
+357D9B2F>I<90381FFFE090B512F8488048804880EBF801390FC0003F90C7EA1F80001E
+140F001C14075AEB03FE393007FF8F4913EF4913FF00601500EB3C0FEB380301305B1401
+EAE018131CEB0E03903807FFBF396001FC1F90C7FC1270ED0F8012301238A26C1407A212
+1E7E6D13036C7E6C7EEA01F86C7E133FEB0F8090C7FC16C0A61501A522367E9B26>I<00
+07B512E04814F8A215FCA21203C8121CA60007B512FC5AA41203C8121CA5EB07E090B5FC
+000714FC121F127FB6FC143F387FC000003CC7121C1E207E9B22>I<EB7FFF0003B512C0
+48805A48805AEB8007387E0001007C13004814705A15305AA31570156015E0EC07C0EC7F
+E0396003FFF8010F13FE007080491480003015C016E02638000113F000189038001FF800
+081407C8EA03FC1501ED00FE167E163E161FA2160F1607A21603160228297E9B2C>I<00
+1E90391FC001F8267F807F130712FF01C013801380023F14F00100EB000380127E007C90
+380F8001127815C0913807E0000070804A7E810078804A7E4AEB8070007C4913C0007E90
+B512E03A3F87FC1FF0903AFFF807F860ECF0036C9038E000FC167E6C49133F6C49EB1FE0
+D801FEC7120FD80038140790C8FC1603A21601A21600A2176017202D277D9B32>I<90B5
+7E000714F0485C5A485C4AC7FC000F1380D801FEC8FC6C5A137C133C7F7FEB7F803807FF
+E0001F13FC007F13FF81B612E08101007F00F0EB0FFC0080EB01FEC8127FED1F80ED07C0
+1503ED01E0150016701630161024207D9B29>I<2601FFF013F000079038FC03FC001F14
+014813FEA2481400138038FE007E48011E13785A48010E1338A35AA2021E1318143F3960
+01FF80010713C04913E0D8701F13F04913FC003014FEEC03FF903978007F98D81840EB1F
+D80008C7EA07F8C812031501150016781638160826217E9B2B>I<92380FFF80033F13C0
+92B512E05C4A14F05C91380FF07FED801F91381E000F0218EB07E05C1603142014601440
+A314C06E1307A200E06D130F12FC007F01B8131FD9C08E133D3A3FE18780F13A1FF183FF
+C13B03F980FE01C0D8007D1300131F130F0107140013031301130091C8FCB3A32C377E9B
+30>I<2601FFFC133E000701FFEBFF80485BA2485B5CC66CC7130001FE806D147E6E133E
+4813E06E133C487F4801FE131C80D80F011380391C007FC00018EB1FE0003EEB0FF0397F
+C007F89038F001FC9038F800FE486C137E01FF133FED0F9C91388007DC3A003FC003FC90
+380FE001010313006D6C137CD90070133C0218130C29207E9B2E>I<48B512E0000714FC
+5AA34814F001FCC8FC13E0138090C9FC121E5A0038EB1FF00030EB7FFC007890B5FCD87F
+01148013C126FFFBF313C09038FFC07FEC803FEC001FEC800FC61407131F903807C00313
+03903801E001130014701410EC0003A216801507A3ED0F00A3151EA2151C153C15381578
+157015F05D14015D4A5A0206C7FC22347E9A26>I<003E903A1FFF8007C0267F807F9038
+F01FF000FF15E0A216C0496C1380913A07FE000FE0007E495A4A6C1307003C804A13804A
+EBC003003803E013C0001801E013F0903901C03FF89138F00FFC903903F803FE00109038
+FE00FF6EEB7F810018ED1FC19238800FE101001407001C90390FC001F10203EB00F9001E
+0101147C260F8000143E9026F00780131F90B5140F6C160792C7FC6C491403C613F8D93F
+C0140190C9FCA334247D9B3A>I<3801FFFC4813FFA35C6C13F8D8003EC8FC131E130E13
+06A20003B5EA80F048EC83FC5AED03FE4813FE14F80007EB80013800FE00017CEB00FC13
+3C013E147C7F3801FFC0000701F81378001F01FE133848EBFF8015C0D87F1F13E0D87E07
+13F0397C03BFF800F8EB87FCEC81FE0078EB807FED3FB89138000FD86C48EB07F8D83E0F
+1303D81FFE13016C481300D803F81478C91238A31618A2272E7E9B2B>39
+D<48B612F8000F15FE5A4815FFA39038F07FFD3A1FC01FF07F3A0F000FE03F001E903807
+C01F121C00181303160F12381230A2383FC001D87FFC140713FF14C114F1B512FD14FFEB
+007F0060130FC700071303140314011400A21500A71607A3160F161E0030153E001E157C
+D81FC0EB01F8D80FFEEB1FE001BFB51280D807C1EBF0006C6CC7121ED801F814FCD8007C
+EB07F090393F803FC06DB51200010713F8010113C028377E9B2C>82
+D<0003B512FC5AA2485CA215E001C0C8FC90C9FC120E5A1218EC0FE048EB3FFC0020EBFF
+FE003C80D87F811480EBE1F19039FBC07FC09038FF803FB5130F12F3D8003F1307010F13
+03EB03C001011301130014401400A31680A21503A216005DA2D80FE01306EA1FFC48B45B
+481380ECC01CECE018000313F039001FF838903803FC301300EC7E60EC3EE0EC0FC06E5A
+22337E9B26>100 D E /Fd 18 128 df<1370EA03FE487E4813804813C0383F03E03878
+006012704813205A14607E14E0387003C0EA7C0F383FFF806C13006C5AEA03F813137E9A
+17>0 D<1620ED01C0923807803092381F007015FE9026F80FFC13600007B54813E04891
+38E001C048EC000302F8EB07804890C7EA0F00D87FF05C90C8127E00F84A5A48EC07F800
+C0EC3FE000F0903803FFC0B7C7FC15FC6C14F06C14C06C49C8FC000313C02C177D9A31>
+4 D<3803FFF8001F13FE5A487FA301C0C7FC003EC8FC123C1238A212301270EA7FE0B5FC
+14C014F014FC80380001FF9038003F80EC0FC0EC03E0EC01F01400157815381518151C15
+0C90387FFFFC48B5FC4814FEA25AA2D80FF0C7FC138090C8FCA2EC0FC048EB3FF0903880
+FFF87F01F113FC13FB90B512FE000713C10001EB807E7E90383F003E6D131E7F7F6D130E
+7F90C7120C151CA31538A215301570156015E015C0EC018015001F457D9B24>20
+D<0007B612F0003F15FC5AB7FCA2EA7FE39039007FFC3C007EEB3FF0003CEB1FE0003814
+C0EC0F80A21407003E1400EA3F80EBE00313F813FEEBFF8302E31318380007FBEB01FF6D
+7E141F140391C7FCA6011FB512F0137F90B6FCA25AA2D803FCC8FC13E01380487E01F8EB
+0FC0486CEB7FF09039FF01FFF8028713FC4890B5FC16FED8001F13E1010313800100EB00
+7E6E133E80020E131E14060202131C91C7FC163C16381678A216F0ED01E01503ED07C0ED
+0F80ED1F00153C27437E9B2B>I<381FFFFC007F13FFB61280A215C0A2EB807F38FE001F
+481307007C1303A215E0A2127E007F1307387D800F3878E03F90383FFFC07F0107138039
+7003FE00EB01F86D5A0030137880143E80EC3F80ECFFC0010313E05B011F13F05B49C7FC
+EA31FCEA33F0EA37C0EA3F8090C8FC123E123C1238123012201C2C7D9B21>25
+D<003FB5FCB6FCA37E121FC7FC143F141F140FA2141FA2147FEB03FF90B5FC1203120F5A
+5AA2EBF81F387FC003EB8000007EC7FC127CA21278A21270A612301238A21218121CA27E
+A2120F7EA26C7EA26C7E12007F13607FA27F130818387D9B1D>I<0003B512F815FF1680
+7EA26C7EEB000714019138007F0081818181ED0380EC1FFF91B5FC13035B011F14C05B5B
+9038FFFC0302E0C7FC4813804848C8FC5B485A5B485A5B5B121F90C9FC121E123E123CA2
+127C1278A21270A3126012E01260A21240A222317D9A27>I<380FFFF0003F13FC80A280
+120FC613F0EB3FC06DC7FCA2131E131CEB3FFF49138090B512C015E048EBE3F048EB0070
+48481338491318120FA2EA1FEC13C401861338EA3F039038018070393E00F1E0EC7FC000
+3CEB1F80007C90C7FC1278A31270A5126012E0AD1D357E9B21>I<000FB612E0003F8148
+81B7FCA33A3FC3F80078EA0F81EA1F00121E001C1378123C003815381470481330A21260
+12405AC7FCA516181438A2143C380FFFFE8003C0C7FC9038F007F09038C000F890C7123C
+150E000E806F7EA36F7EA3000F1403A27F6D497E6D130F6D131F6D133F01FE137D90387F
+FFF9010F13E101001300000E90C7138016E316F716FF1700A25E167C16781640000692C7
+FC120229417E9B2D>I<EA3FFCB512C014F014FC808013E09038801F80EB0007007EEB01
+C0A2007C130015401560A21520123CA2003E1460A2003F027013606D9038F003E09039C0
+01B00F3A3BE003103F2638F80E137FD93FFC13FF903A07F019FE0090C7EA1BE0ED1FC05E
+93C7FC151E151C1518151092C8FCA31230B02B367D9B30>I<123812FEA4127C12300707
+7D9A0D>114 D<127812FEA9127E127CA5123C1238AB1218B3A707357D9B0D>I<DF01FC16
+78DF0FFF923807FF80073F01C04A13E096B56C91381E7FF0952701C03FF091383007F896
+26000FF891387803FC000F942603800392387C00FED87FF0716C6C167ED8FFFE932607E0
+00037E7FC66C6C70017C027F7FD93FE06F6C013C82D90FF870DC3F801380D903FE0301DA
+1C401507D900FF7002E0EB1FC0DA7FC002006F130FDA1FF0033E6E13076E6C92C7D818FC
+90C71300DA03FE187E6E6C6CDC307F5D9126007FE0047001C0140EDB3FF84C6C6C5CDB0F
+FF922701C01FF81478030301F0DA038001FF495A902603C001D9FFC090260F00079039E0
+0FE020902701FC007F9028FFC1FC078390B5EAC0406DB4011F9127FFF01FE1ED00809126
+3FC0039227C03FF07FEBFC0391271FF8007F9028FE0077FC0F9038F00700DA07FE010790
+28E001E3FE00EB000E912601FF80C82603C1FF90C75A9126007FE0DB0F8001C0143CDB1F
+F892273E003FF814F8DB03FFDA03F86DB4EB03E0030001F8D97FE001039038F83FC0040F
+B6C890B5C7FC040002F8030F13F8DD01FCCEFC7B257E997F>I<0010130800FC137EA26C
+137FA248137E0078133CC8FCA7131EEB3F80A2EB7FC0A6EB3F80A9131FA41400A57FA87F
+A97FAA18447D9B1D>121 D<7E12601270123C6C147F3A1F8001FF806C6C4813C0D807E0
+14E03903F0070F3A01FC0001F06C6CEB00E0D97F801360D93FE013E090390FFF1FC00103
+EBFF800100EBFE00EC1FF824117E7E28>123 D<19C01801F00380180F181FF07F00EF03
+FFEF1FFE4CB45A01FC020F5B2607FF80017F13E048D9E001B55A48D9F80349C7FC48D9FE
+0713F848D9FF1F138001F7D9BFFCC8FC3AF0007FFFE0C7001F90C9FCEC07FEEC03F8EC01
+E06E5A3A167E983E>125 D<EA07F8EA1FFF4813C04813F0B57E38F83FFE38C003FF9038
+007F806CEB1FC000F8EB07E000FE6D7E397FE000F8D83FFE137C6C48131E6C481307D803
+F0EB0180C9124022117D9427>I<EA0FE0EA3FF8EA7FFE6D7EB512E000077F38001FF8EB
+01FEEB003FEC0F80EC07C0EC01E0EC00F01570151815041E107E9322>I
+E /Fe 1 16 df<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E0
+10107E9115>15 D E /Ff 61 125 df<126012F0AF12601200A4126012F0A21260041977
+9816>33 D<EA0387A6B512E0A338070E00A3EA0F1EEA0E1CA3B512E0A3381C3800A61319
+7F9816>35 D<38380180EA7C03EAFE07140012EE5B130E131EEAFE1C133CEA7C381238EA
+0078137013F05BA212015B12035BEB8380380787C0EB0FE0EA0F0E120E121E121CA2EA3C
+0F383807C03818038013207F9C16>37 D<EA03C0487E120FEA1EF0EA1C70A3EBF7E013E7
+121F380FC7005B130E121FEA3F1EEA7F9CEAF3BCEAE3F812E138E0F0E0A2EAF1F8EA7FFF
+383F9FC0381F0F8013197F9816>I<12301278127C123C121CA3123C1238127812F012E0
+12C0060D789816>I<13E01201EA07C013005A121E5A123812781270A312F05AA77E1270
+A312781238123C7E7E7E13C0EA01E012000B217A9C16>I<12E07E127C121C121E7EEA07
+80120313C01201A313E01200A7120113C0A3120313801207EA0F00121E121C127C12F05A
+0B217C9C16>I<EA0380A4EAE38EEAF39EEAFFFEEA3FF8EA0FE0A2EA3FF8EAFFFEEAF39E
+EAE38EEA0380A40F127D9516>I<1238127C127EA2123E120E121E123C127C12F8126007
+0B798416>44 D<B51280A311037E8D16>I<127012F8A312700505788416>I<EB01801303
+130714005B130E131E131C133C13381378137013F05B12015BA212035B120790C7FC5A12
+0E121E121C123C12381278127012F05AA211207E9C16>I<127012F8A312701200A81270
+12F8A312700512789116>58 D<EA0FF0EA3FFE487E38F00F801303A2EA600738001F0013
+7E13F85B485A5BA45BC8FCA4487E487EA26C5A11197E9816>63 D<13E0487EA213B0A2EA
+03B8A31318EA071CA5EA0E0EA2EA0FFEA2487EEA1C07A3387E0FC038FF1FE0387E0FC013
+197F9816>65 D<EA7FF8EAFFFE6C7EEA1C0714801303A4EB0700EA1FFF5BA2EA1C1FEB03
+8014C01301A41303EB0780EA7FFFB51200EA7FFC12197F9816>I<3801F180EA07FF5AEA
+1F0FEA3C0712781303127000F0C7FC5AA77E387003801278A2EA3C07381F0F00EA0FFE6C
+5AEA01F011197E9816>I<EA7FF8EAFFFE6C7EEA1C0FEB0780EB03C01301A214E01300A8
+EB01C0A21303EB0780130F387FFF00485AEA7FF81319809816>I<387FFFC0B5FC7EEA1C
+01A490C7FCA2131CA2EA1FFCA3EA1C1CA290C7FC14E0A5EA7FFFB5FC7E13197F9816>I<
+3801F180EA07FF5AEA1F0FEA3C0712781303127000F0C7FC5AA4EB1FC014E014C038F003
+801270EA7807A2EA3C0FEA1E1FEA0FFFEA07FBEA01F313197F9816>71
+D<387F07F038FF8FF8387F07F0381C01C0A7EA1FFFA3EA1C01A9387F07F038FF8FF8387F
+07F01519809816>I<EA7FFCEAFFFEEA7FFCEA0380B3EA7FFCEAFFFEEA7FFC0F197D9816>
+I<48B4FC4813806C1300EA001CB0126012F0137CB45A6C5AEA1FC011197E9816>I<387F
+0FE038FF8FF0387F0FE0381C0780EB0F00131E131C133C5B5BEA1DE07F121F7F1338EA1E
+3C131CEA1C1E7F7F14801303387F07E038FF8FF0387F07E01419809816>I<B47E7F5B00
+1CC7FCAE144014E0A4B5FCA313197F9816>I<38FC07E0EAFE0FA2383A0B80EA3B1BA513
+BBEA39B3A413F3EA38E3A21303A538FE0FE0A313197F9816>I<387E07F038FF0FF8387F
+07F0381D81C0A313C1121C13E1A213611371A313311339A21319131D130DA3EA7F07EAFF
+87EA7F031519809816>I<EA1FFC487E487EEA780F38F00780EAE003AEEAF007A238780F
+00EA7FFF6C5A6C5A11197E9816>I<EA7FF8EAFFFE6C7E381C0F80130314C01301A31303
+1480130F381FFF005B13F8001CC7FCA7127F487E6CC7FC12197F9816>I<EA7FF0EAFFFC
+6C7EEA1C0FEB07801303A41307EB0F00EA1FFE5B7FEA1C1F1307A414101438A2007F13F8
+38FF83F0387F01E01519809816>82 D<EA07E3EA1FFF127FEA781F487E487EA290C7FC7E
+1278EA7F80EA1FF0EA07FCC67E130FEB07801303A212E0A2EAF00738F80F00EAFFFE5BEA
+C7F011197E9816>I<387FFFE0B5FCA2EAE0E0A400001300AFEA07FC487E6C5A13197F98
+16>I<387F07F038FF8FF8387F07F0381C01C0B0EA1E03000E1380EA0F8F3807FF006C5A
+EA00F81519809816>I<387E03F038FF07F8387E03F0383800E0A4381C01C0A3137113F9
+A213D9A2000C1380A3EA0DDD138DA338078F00A213071519809816>87
+D<38FE0FE0EAFF1FEAFE0F381C0700A2EA0E0EA26C5AA3EA03B8A2EA01F0A26C5AA8EA03
+F8487E6C5A13197F9816>89 D<387FFF80B5FCA238E007005B131E131CEA003C5B137013
+F0485A5B1203485A90C7FC5A381E0380121C123C12781270B5FCA311197E9816>I<12E0
+A27E127012781238123C121C121E120E120F7E7F12037F1201A27F12007F137013781338
+133C131C131E130E130F7F14801303130111207E9C16>92 D<EA1FE0EA7FF87FEA783EEA
+301EEA000EA2EA03FE121FEA7E0E12F012E0A2EAF01EEAF83E387FFFE0EA3FE7EA0F8313
+127E9116>97 D<12FCA3121CA4137CEA1DFF001F1380EB07C0EA1E03381C01E0A21300A4
+1301001E13C01303381F078013FF381DFE00EA0C7813197F9816>I<EA03F8EA0FFE121F
+EA3C1EEA780CEA700012F05AA47EEA70071278EA3E0FEA1FFEEA0FFCEA03F010127D9116
+>I<133FA31307A4EA03C7EA0FF7EA3FFFEA3C1F487EEA700712F012E0A412F05BEA781F
+EA7C3F383FFFE0EA1FF7EA07C713197F9816>I<EA03F0EA0FFC487EEA3E1FEA78070070
+1380EAF003B5FCA300E0C7FC7E387003801278EA3E0F381FFF006C5AEA03F811127E9116
+>I<3803E3C0380FFFE05A381E3CC0383C1E00EA380EA3EA3C1E6C5AEA1FFC5BEA3BE000
+38C7FCA2EA1FFC13FF4813C0EA780338F001E0EAE000A3EAF001387C07C0383FFF80380F
+FE00EA03F8131C7F9116>103 D<12FCA3121CA41378EA1DFEEA1FFF130FEA1E07A2121C
+A938FF8FE0139F138F13197F9816>I<1203EA0780A2EA0300C7FCA4EAFF80A31203ACEA
+FFFC13FE13FC0F1A7C9916>I<13301378A213301300A4EA0FF8121F120FEA0038B3EA60
+78EAF0F0EAFFE0EA7FC0EA3F800D237E9916>I<127E12FE127E120EA4EB7FE0A3EB0F00
+131E5B5B5BEA0FF8A213BC131EEA0E0E130FEB0780387F87F0EAFFCFEA7F871419809816
+>I<EA7FC012FF127F1201B3EA7FFFB512806C130011197E9816>I<38F9C38038FFEFC0EB
+FFE0EA3E7CEA3C78EA3870AA38FE7CF8A31512809116>I<EAFC78EAFDFEB5FCEA1F0FEA
+1E07A2121CA938FF8FE0139F138F13127F9116>I<EA03E0EA0FF8487EEA3C1E487EEA70
+0738E00380A5EAF00700701300EA780FEA3C1EEA1FFC6C5AEA03E011127E9116>I<EAFC
+7CEAFDFFB51280381F07C0EA1E03381C01E0A21300A41301001E13C01303381F078013FF
+381DFE00EA1C7890C7FCA6B47EA3131B7F9116>I<387F0FC038FF3FE0EA7F7F3807F040
+EBE0005B5BA290C7FCA7EA7FFC12FF127F13127F9116>114 D<EA0FECEA3FFC127FEAF0
+3CEAE01CA2EAF000EA7F80EA1FF0EA07FCEA003EEAE00EA212F0EAF81EEAFFFC13F8EAC7
+E00F127D9116>I<12035AA4EA7FFFB5FCA20007C7FCA75BEB0380A2130713873803FF00
+5BEA00F811177F9616>I<EAFC3FA3EA1C07AA5BEA1E1F381FFFE07EEA07C713127F9116>
+I<38FF1FE0A338380380A4EA39F3A20019130013B3A3EA1DB71317EA1F1FEA0F1EEA0E0E
+13127F9116>119 D<387F1FC0133F131F380F1E006C5AEA03B813F012016C5A12017FEA
+03B8EA073C131CEA0E0E387F1FC038FF3FE0387F1FC013127F9116>I<387F1FC038FF9F
+E0387F1FC0381C0700120E130EA212075BA2EA039CA21398EA01B8A2EA00F0A35BA3485A
+1279127BEA7F8090C7FC123C131B7F9116>I<383FFFC05AA238700780EB0F00131EC65A
+13F8485A485A485A48C7FC381E01C0123C1278B5FCA312127F9116>I<12E0B3AE032077
+9C16>124 D E /Fg 1 66 df<131CA2133EA2136FA2EBEF8013C700017F1383A2380301
+E013FF487FEA0600000E1378120C001C137C39FF01FF80A219147F931C>65
+D E /Fh 1 66 df<1330A21378A3139CA2EA019E130EA2EA0207A200061380EA07FFEA04
+03380801C0A2001813E0EA380038FE07FC16147F9319>65 D E /Fi
+58 123 df<EB7E1F3901C1B180390303E3C0000713C3000EEBC180903801C000A6B512FC
+380E01C0B0387F87FC1A1D809C18>11 D<137E3801C180EA0301380703C0120EEB018090
+C7FCA5B512C0EA0E01B0387F87F8151D809C17>I<126012F0A71260AD1200A5126012F0
+A21260041E7C9D0C>33 D<126012F012F812681208A31210A2122012401280050C7C9C0C
+>39 D<1380EA0100120212065AA25AA25AA35AA412E0AC1260A47EA37EA27EA27E12027E
+EA0080092A7C9E10>I<7E12407E12307EA27EA27EA37EA41380AC1300A41206A35AA25A
+A25A12205A5A092A7E9E10>I<126012F0A212701210A41220A212401280040C7C830C>
+44 D<126012F0A2126004047C830C>46 D<5A1207123F12C71207B3A5EAFFF80D1C7C9B
+15>49 D<EA07C0EA1830EA201CEA400C130EEAF00F12F81307A21270EA000F130EA2131C
+A213381370136013C0EA0180EA0300EA0601120C1218EA1002EA3FFE127F12FF101C7E9B
+15>I<EA07E0EA1830EA201CA2EA781E130E131E1238EA001CA2131813301360EA07C0EA
+0030131CA2130E130FA2127012F8A3EAF00EEA401C1220EA1830EA07C0101D7E9B15>I<
+130CA2131C133CA2135C13DC139CEA011C120312021204120C1208121012301220124012
+C0B512C038001C00A73801FFC0121C7F9B15>I<126012F0A212601200AA126012F0A212
+6004127C910C>58 D<EA0FE0EA3038EA401CEAE00E12F0A3EA000C131C1330136013C013
+8012011300A6C7FCA51203EA0780A2EA03000F1D7E9C14>63 D<1306A3130FA3EB1780A2
+EB37C01323A2EB43E01341A2EB80F0A338010078A2EBFFF83802003CA3487FA2000C131F
+80001E5BB4EBFFF01C1D7F9C1F>65 D<B512C0380F00788080140E140FA4140E141E5C14
+F8EBFFF0EB003C8080801580A5EC0F00A2141E1478B512E0191C7F9B1D>I<90381F8080
+EBE0613801801938070007000E13035A14015A00781300A2127000F01400A80070148012
+78A212386CEB0100A26C13026C5B380180083800E030EB1FC0191E7E9C1E>I<B512FC38
+0F003C140C1404A214061402A213011400A35B13FF13037FA3140113001402A31406A214
+0C143CB512FC181C7E9B1C>69 D<B512F8380F007814181408A2140C1404A213011400A3
+5B13FF13037FA490C7FCA8EAFFF8161C7E9B1B>I<EAFFF0EA0F00B3A8EAFFF00C1C7F9B
+0F>73 D<3807FF8038007C00133CB3127012F8A21338EA7078EA4070EA30E0EA0F80111D
+7F9B15>I<EAFFF8EA0F8090C7FCB01408A31418A2141014301470EB01F0B5FC151C7E9B
+1A>76 D<B4EB1FF0390F8003809038C00100120BEA09E0EA08F0A21378133C133E131E13
+0F14811307EB03C1EB01E114F113001479147D143D141FA2808080121CB46C7E1C1C7F9B
+1F>78 D<EB3F80EBE0E03803803848487E000E7F487F003C148000381303007814C0A200
+70130100F014E0A8007014C000781303A200381480003C1307001C14006C130E6C5B6C6C
+5A3800E0E0EB3F801B1E7E9C20>I<B51280380F00E01478143C141C141EA5141C143C14
+7814E0EBFF8090C7FCACEAFFF0171C7E9B1C>I<B5FC380F01E0EB007880141C141EA414
+1C143C5CEB01E001FFC7FCEB01E0EB0070147880A61510A2141CA239FFF00E20C7EA03C0
+1C1D7E9B1F>82 D<3807E080EA1C19EA30051303EA600112E01300A36C13007E127CEA7F
+C0EA3FF8EA1FFEEA07FFC61380130FEB07C0130313011280A300C01380A238E00300EAD0
+02EACC0CEA83F8121E7E9C17>I<007FB512C038700F010060130000401440A200C01420
+1280A300001400B1497E3803FFFC1B1C7F9B1E>I<39FFF01FF0390F000380EC0100B3A2
+6C1302138000035BEA01C03800E018EB7060EB0F801C1D7F9B1F>I<3AFFE1FFC0FF3A1F
+003E003C001E013C13186C6D1310A32607801F1320A33A03C0278040A33A01E043C080A3
+3A00F081E100A39038F900F3017913F2A2017E137E013E137CA2013C133C011C1338A201
+18131801081310281D7F9B2B>87 D<39FFF07FC0390FC01E003807800CEBC00800035B6C
+6C5A13F000005BEB7880137C013DC7FC133E7F7F80A2EB13C0EB23E01321EB40F0497E14
+783801007C00027F141E0006131F001F148039FF807FF01C1C7F9B1F>I<39FFF003FC39
+0F8001E00007EB00C06D13800003EB01006D5A000113026C6C5A13F8EB7808EB7C18EB3C
+10EB3E20131F6D5A14C06D5AABEB7FF81E1C809B1F>I<1208121012201240A21280A312
+B012F812781230050C7D9C0C>96 D<EA1FC0EA3070EA78387F12301200A2EA01FCEA0F1C
+12381270126000E01340A3EA603C38304E80381F870012127E9115>I<12FC121CAA137C
+EA1D87381E0180381C00C014E014601470A6146014E014C0381E018038190700EA10FC14
+1D7F9C17>I<EA03F8EA0C0CEA181E1230EA700CEA600012E0A61260EA70021230EA1804
+EA0C18EA03E00F127F9112>I<EB1F801303AAEA03F3EA0E0BEA1807EA30031270126012
+E0A6126012701230EA1807EA0E1B3803E3F0141D7F9C17>I<EA07E0EA0C30EA1818EA30
+0CEA700EEA600612E0EAFFFEEAE000A41260EA70021230EA1804EA0C18EA03E00F127F91
+12>I<13F8EA018CEA071E1206EA0E0C1300A6EAFFE0EA0E00B0EA7FE00F1D809C0D>I<EB
+03803807C4C0EA1C783838388038301800EA701CA4EA3018EA38386C5AEA27C00020C7FC
+A21230EA3FF86CB4FC1480EA2003386001C0EAC000A33860018038300300EA1C0EEA07F8
+121C7F9215>I<12FC121CAA137C1387EA1D03001E1380121CAD38FF9FF0141D7F9C17>I<
+1218123CA21218C7FCA712FC121CB0EAFF80091D7F9C0C>I<12FC121CAAEB0FE0EB0780
+EB06005B13105B5B13E0121DEA1E70EA1C781338133C131C7F130F148038FF9FE0131D7F
+9C16>107 D<12FC121CB3A9EAFF80091D7F9C0C>I<39FC7E07E0391C838838391D019018
+001EEBE01C001C13C0AD3AFF8FF8FF8021127F9124>I<EAFC7CEA1C87EA1D03001E1380
+121CAD38FF9FF014127F9117>I<EA03F0EA0E1CEA1806487E00701380EA600100E013C0
+A600601380EA700300301300EA1806EA0E1CEA03F012127F9115>I<EAFC7CEA1D87381E
+0180001C13C0EB00E0A21470A614E0A2EB01C0001E1380381D0700EA1CFC90C7FCA7B47E
+141A7F9117>I<3803E080EA0E19EA1805EA3807EA7003A212E0A61270A2EA38071218EA
+0E1BEA03E3EA0003A7EB1FF0141A7F9116>I<EAFCE0EA1D38EA1E78A2EA1C301300ACEA
+FFC00D127F9110>I<EA1F90EA2070EA4030EAC010A212E0EAF800EA7F80EA3FE0EA0FF0
+EA00F8EA8038131812C0A2EAE010EAD060EA8FC00D127F9110>I<1204A4120CA2121C12
+3CEAFFE0EA1C00A91310A5120CEA0E20EA03C00C1A7F9910>I<38FC1F80EA1C03AD1307
+120CEA0E1B3803E3F014127F9117>I<38FF07E0383C0380381C0100A2EA0E02A2EA0F06
+EA0704A2EA0388A213C8EA01D0A2EA00E0A3134013127F9116>I<39FF3FC7E0393C0703
+C0001CEB01801500130B000E1382A21311000713C4A213203803A0E8A2EBC06800011370
+A2EB8030000013201B127F911E>I<38FF0FE0381E0700EA1C06EA0E046C5AEA039013B0
+EA01E012007F12011338EA021C1204EA0C0E487E003C138038FE1FF014127F9116>I<38
+FF07E0383C0380381C0100A2EA0E02A2EA0F06EA0704A2EA0388A213C8EA01D0A2EA00E0
+A31340A25BA212F000F1C7FC12F312661238131A7F9116>I<EA7FFCEA70381260EA4070
+13F013E0EA41C012031380EA0700EA0F04120E121CEA3C0CEA380812701338EAFFF80E12
+7F9112>I E /Fj 31 122 df<127812FCA61278A81230A41200A4127812FCA41278061D
+7C9C0F>33 D<13201340EA0180120313001206120E5AA2123C1238A21278A312F85AA97E
+1278A31238A2123C121CA27E12067E13801201EA004013200B297C9E13>40
+D<7E12401230123812187E120E7EA213801203A213C0A313E01201A9120313C0A31380A2
+12071300A2120E120C5A1238123012405A0B297D9E13>I<EAFFF8A40D04808A10>45
+D<127812FCA412781200A6127812FCA4127806127D910D>58 D<EB0380A2497EA3497EA2
+497E131BEB3BF81331A2EB60FCA2EBE0FEEBC07EA248487E90B5FC481480EB001F4814C0
+0006130FA248EB07E0A239FF803FFEA21F1C7E9B24>65 D<90381FE0209038FFF8E03803
+F80F3807C003380F800148C7FC123E1560127E127C00FC1400A8007C1460127E123E15C0
+7E390F8001803907C003003803F80E3800FFFCEB1FE01B1C7D9B22>67
+D<B6FCA2380FC01F1407801580A214C1A39038C1C00013C313FFA213C313C113C01560A2
+EC00E015C0A21401A21403EC0F80B6FCA21B1C7E9B1F>69 D<90380FF00890387FFE3839
+01FC07F83807E001390F80007848C7FC481438123E007E1418127C00FC1400A6EC7FFFA2
+007CEB01F8127E123E123F7EEA0F80EA07E03801FC0739007FFE7890380FF818201C7D9B
+26>71 D<EAFFFCA2EA0FC0B3A6EAFFFCA20E1C7E9B12>73 D<EAFFFEA2EA0FC0AF1403A3
+1407A21406140E141E147EB512FEA2181C7E9B1D>76 D<EB3FE03801F07C3803C01E390F
+800F80391F0007C0A2003EEB03E0007E14F0007C1301A200FC14F8A8007C14F0A2007E13
+03003E14E01307391F08C7C0390F906F803903D03E003801F87C39003FF808EB0018EC1C
+18EC1FF8A2EC0FF0A2EC07E0EC03C01D247D9B24>81 D<007FB512E0A238781F81007013
+800060146000E0147000C01430A400001400B03807FFFEA21C1C7E9B21>84
+D<397FFE1FFEA23907F001803803F803000149C7FCEBFC066C6C5AEB7F1C6D5A14B0EB1F
+E0130FA26D7E6D7E1307497EEB0CFEEB187EEB387F496C7E9038601FC013C000016D7E48
+486C7EEB00033AFFF01FFF80A2211C7F9B24>88 D<EA0FF8EA1C1E383E0F80130714C012
+1C1200137FEA07E7EA1F07123C127C12F8A3EA780B383E13F8EA0FE115127F9117>97
+D<B4FCA2121FA9EB3F80EBE1E0EB8070EB0078143CA2143EA6143CA21478EB8070381EC1
+E0381C3F00171D7F9C1B>I<EA03FCEA0E0EEA1C1F123C1278130E00F8C7FCA61278EB01
+80123C381C0300EA0E0EEA03F811127E9115>I<EB0FF0A21301A9EA01F9EA0F07EA1C03
+EA3C011278A212F8A61278A2123CEA1C03380F0FFEEA03F9171D7E9C1B>I<EA03FCEA0F
+07381C0380383C01C0127814E012F8A2B5FC00F8C7FCA3127814607E6C13C0380F038038
+01FC0013127F9116>I<3803F0F0380E1F38EA3C0F3838073000781380A400381300EA3C
+0FEA1E1CEA33F00030C7FCA3EA3FFF14C06C13E014F0387801F838F00078A30070137000
+7813F0381E03C03807FF00151B7F9118>103 D<121E123FA4121EC7FCA6127FA2121FAE
+EAFFC0A20A1E7F9D0E>105 D<B4FCA2121FB3A7EAFFE0A20B1D7F9C0E>108
+D<39FF0FC07E903831E18F3A1F40F20780D980FC13C0A2EB00F8AB3AFFE7FF3FF8A22512
+7F9128>I<38FF0FC0EB31E0381F40F0EB80F8A21300AB38FFE7FFA218127F911B>I<EA01
+FC380F0780381C01C0003C13E0387800F0A200F813F8A6007813F0A2383C01E0381E03C0
+380F07803801FC0015127F9118>I<38FF3F80EBE1E0381F80F0EB0078147C143C143EA6
+143C147C1478EB80F0EBC1E0EB3F0090C7FCA6EAFFE0A2171A7F911B>I<EAFE3E134738
+1E8F80A3381F070090C7FCAAEAFFE0A211127F9114>114 D<EA1FD8EA3078EA601812E0
+A2EAF000EAFF80EA7FE013F0EA1FF8EA07FCEA007CEAC01CA212E01318EAF830EACFC00E
+127E9113>I<1203A45AA25AA2EA3FFC12FFEA1F00A9130CA4EA0F08EA0798EA03F00E1A
+7F9913>I<38FF07F8A2EA1F00AC1301120F380786FFEA01F818127F911B>I<38FFC1FCA2
+381F00601380000F13C0A23807C180A23803E300A213F7EA01F613FE6C5AA21378A21330
+A25B1270EAF8E05BEAF9800073C7FC123E161A7F9119>121 D E
+/Fk 25 121 df<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49
+D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2
+127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E4913E013
+705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB7F803803
+FFF04813FC380F81FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C495AEB07
+F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F48148000
+7CEB7F00383F01FE6CB45A000713F0C613801B277DA622>I<140FA25C5C5C5C5BA2EB03
+BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8
+A3C7EA7F00A890381FFFF8A31D277EA622>I<EC0780A24A7EA34A7EA24A7EA3EC77F8A2
+ECF7FC14E3A2903801C1FEA201037F1480A249486C7EA24980010E133FA2496D7EA2013F
+B57EA39039700007F8A201F080491303000181491301A2000381D8FFFE013F13FCA32E29
+7EA833>65 D<B712E0A33903FC001FED07F01501A215001670A3913801C0781638A30203
+1300A2140F90B5FCA3EBFC0F1403A20201130EA3161C91C7FCA3163C1638167816F81501
+1503151FB712F0A327297EA82C>69 D<B712C0A33903FC003FED0FE015031501A21500A3
+16F0913801C070A316001403A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA3
+24297EA82A>I<B5D8F00FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00F
+B5FCA330297EA835>72 D<007FB71280A39039807F807FD87C00140F00781507A2007015
+0300F016C0A2481501A5C791C7FCB3A490B612C0A32A287EA72F>84
+D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA
+0FE0EA1F80EA3F00127E5AA4145F007EEBDFC0393F839FFC381FFE0F3803FC031E1B7E9A
+21>97 D<EB3FF03801FFFC3803F03E380FC07FEA1F80EA3F00A248133E007E90C7FCA212
+FEA7127EA2127F6CEB03801380001FEB0700380FE00E3803F83C3801FFF838003FC0191B
+7E9A1E>99 D<EC7FF0A31407ACEB3F873801FFF73807F03F380FC00F381F8007EA3F00A2
+127EA312FEA8127EA27EA2381F800F380FC01F3907E07FFF3801FFE738007F87202A7EA9
+25>I<EB3FC03801FFF03807E07C48487E48487ED83F001380140F5A007E14C012FE1407
+A2B6FCA248C8FCA4127E127F6CEB01C01380001F1303390FC007803903F01F003800FFFC
+EB3FE01A1B7E9A1F>I<1207EA1FC0EA3FE0A5EA1FC0EA0700C7FCA7EAFFE0A3120FB3A3
+EAFFFEA30F2B7EAA12>105 D<EAFFE0A3120FB3B2EAFFFEA30F2A7EA912>108
+D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D80FC49038F101FC9039C803F200
+01D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1
+FF809038C30FC0D80FC413E0EBC80701D813F013D0A213E0B039FFFE3FFFA3201B7D9A25
+>I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0393F0007E0A2007EEB03F0A300
+FE14F8A8007E14F0A26CEB07E0A2391F800FC0390FC01F803907F07F003801FFFC38003F
+E01D1B7E9A22>I<38FFE1FE9038EFFF809038FE0FE0390FF803F09038F001F801E013FC
+140015FEA2157FA8157E15FEA215FC140101F013F89038F807F09038FC0FE09038EFFF80
+9038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FFC1F0EBC7FCEBC63E380FCC7F13
+D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 D<3803FE30380FFFF0EA3E03EA78
+00127000F01370A27E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FCEB07FC
+130000E0137C143C7E14387E6C137038FF01E038E7FFC000C11300161B7E9A1B>I<13E0
+A41201A31203A21207120F381FFFE0B5FCA2380FE000AD1470A73807F0E0000313C03801
+FF8038007F0014267FA51A>I<39FFE07FF0A3000F1307B2140FA2000713173903F067FF
+3801FFC738007F87201B7D9A25>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB03
+80A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC2600FE1C5B15FE9039FF387E
+3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2EC800701075CA22E1B7F
+9A31>119 D<39FFFC1FFEA33907F003803803F8079038FC0F003801FE1E00005BEB7F38
+14F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F803901E01FC0D803
+C013E0EB800F39FFF03FFFA3201B7F9A23>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+%%PaperSize: a4
+%%BeginPaperSize: a4
+a4
+%%EndPaperSize
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 220 266 a Fk(1)67 b(Additional)25 b(F)-6 b(eatures)220
+373 y Fj(Q:)21 b Fi(There)13 b(are)f(no)o(w)g(already)g(t)o(w)o(o)f(L)
+792 365 y Fh(A)810 373 y Fi(T)833 382 y(E)857 373 y(X)h(implem)o(en)o
+(tations)d(of)j(the)g(Tib)q(etan)g(language.)324 423
+y(Wh)o(y)h(is)h(there)h(no)o(w)f(a)f(third)h(one?)220
+506 y Fj(A:)21 b Fi(Lik)o(e)d(other)g(t)o(yp)q(esetting)h(programs,)e
+(the)i(ab)q(o)o(v)o(e)f(implem)o(en)o(tations)d(mak)o(e)i(use)i(of)324
+556 y(prede\014ned)e(ligatures)e(only)m(.)21 b(If)14
+b(y)o(ou)h(try)h(to)f(en)o(ter)h(pra)o(y)o(ers)g(con)o(taining)e
+(Sanskrit)324 606 y(syllables)f(in)o(to)f(suc)o(h)i(a)g(system,)e(y)o
+(ou)h(will)f(get)i(in)o(to)f(sev)o(ere)i(trouble.)j(Therefore,)c(I)324
+655 y(added)f(no)o(w)g(a)g(completely)f(new)h(transcript)h(prepro)q
+(cessor)i(ha)o(ving)c(the)i(follo)o(wing)324 705 y(extra)g(features:)
+220 788 y Fj(Compatibili)o(t)n(y:)k Fi(As)k(far)f(as)g(I)h(kno)o(w,)g
+(it)f(supp)q(orts)h(all)e(con)o(trol)h(sequences)j(of)c(the)324
+838 y(ab)q(o)o(v)o(e)11 b(implemen)o(tations,)d(plus)k(the)g(A)o(CIP)g
+(transcript.)18 b(If)11 b(y)o(ou)g(ha)o(v)o(e)h(y)o(et)g(another)324
+888 y(transcript,)20 b(y)o(ou)e(can)h(create)h(y)o(our)f(o)o(wn)f
+(transcript)h(de\014nition)g(\014le,)g(hop)q(efully)324
+938 y(without)13 b(ha)o(ving)g(to)h(mo)q(dify)d(the)k(C)f(co)q(de.)220
+1021 y Fj(Inline)f(L)367 1012 y Fg(A)388 1021 y Fj(T)413
+1030 y(E)439 1021 y(X)j(commands:)j Fi(All)14 b(commands)f(that)i(do)g
+(not)g(con)o(tain)f(spaces)i(or)f(suc)o(h)324 1071 y(can)f(b)q(e)g(t)o
+(yp)q(ed)g(without)f(using)h(the)g(mo)q(de)f(switc)o(hing)g(c)o
+(haracters\()p Ff(\045\045)p Fi(\).)19 b(Ev)o(en)14 b(the)324
+1120 y(tabbing)j(c)o(haracter)i(\()p Ff(&)p Fi(\))e(is)g(transparen)o
+(t.)30 b(So)18 b(y)o(ou)f(can)h(easily)f(t)o(yp)q(eset)i(tabular)324
+1170 y(en)o(vironmen)o(ts)13 b(and)h(line)f(breaks.)220
+1253 y Fj(Generic)h(Ligatures:)k Fi(If)h(this)g(prepro)q(cessor)j
+(encoun)o(ters)e(an)o(y)f(ligatures)g(whic)o(h)g(are)324
+1303 y(not)h(prede\014ned,)k(it)c(tries)h(to)f(comp)q(ose)g(them)g
+(automatically)l(.)35 b(There)22 b(is)e(still)324 1353
+y(m)o(uc)o(h)12 b(w)o(ork)i(to)g(b)q(e)g(done)g(on)g(this:)374
+1436 y Fe(\017)20 b Fi(There)15 b(are)f(some)f(spacing)h(problems)f(to)
+h(solv)o(e)g(on)f(L)1255 1427 y Fh(A)1273 1436 y Fi(T)1296
+1445 y(E)1320 1436 y(X)h(lev)o(el)374 1502 y Fe(\017)20
+b Fi(Adding)14 b(in)o(telligence)f(for)h(c)o(haracter)h(m)o(utations)
+374 1569 y Fe(\017)20 b Fi(F)m(on)o(t)13 b(de\014nition)h(for)f(c)o
+(haracter)j(fragmen)o(ts)374 1635 y Fe(\017)k Fi(F)m(on)o(t)13
+b(de\014nition)h(for)f(v)o(ertically)h(smaller)e(c)o(haracters)324
+1715 y(Esp)q(ecially)j(syllables)g(lik)o(e)g Fd(s)p Fc(\010)772
+1748 y Fd({)809 1715 y Fc(\010)809 1776 y(\010)809 1837
+y(\026)853 1715 y Fd(r)q Fc(\030)p Fd(s)160 b Fi(do)15
+b(not)h(lo)q(ok)e(v)o(ery)i(nice)g(and)f(need)324 1886
+y(to)q(o)f(m)o(uc)o(h)f(v)o(ertical)h(space.)20 b(But)14
+b(in)g(man)o(y)e(cases,)j(the)g(output)g(is)f(quite)g(readable)324
+1929 y(and)g(the)g(input)g(v)o(ery)g(simple)e(\(e.)19
+b(g.)39 b Ff(/tutt'a)21 b(ra/)p Fi(\).)220 2108 y Fk(2)67
+b(Ho)n(w)21 b(to)h(use)g(it)220 2249 y Fb(2.1)56 b(General)17
+b(Command)g(Line)h(Handling)220 2367 y Fi(In)d(fact,)f(it)h(is)f(v)o
+(ery)h(similar)e(to)h(the)i(previous)f(implem)o(en)o(tations:)i(Y)m(ou)
+d(ha)o(v)o(e)h(the)g(usual)220 2417 y(L)231 2408 y Fh(A)249
+2417 y Fi(T)272 2425 y(E)295 2417 y(X)g(pro)q(cedure)i(plus)d(an)g
+(additional)f(prepro)q(cessor)k(program)c(b)q(et)o(w)o(een)j(editing)e
+(and)220 2466 y(L)231 2458 y Fh(A)249 2466 y Fi(T)272
+2475 y(E)295 2466 y(Xing,)21 b(whic)o(h)f(in)o(terprets)h(a)f
+(transcript)h(describ)q(ed)g(b)q(elo)o(w,)g(generating)f(Tib)q(etan)220
+2516 y(c)o(haracters)c(and)d(ligatures.)926 2831 y(1)p
+eop
+%%Page: 2 2
+2 1 bop 220 266 a Fi(There)15 b(is)f(some)f(extra)h(complication)e
+(concerning)i(the)h(command)c(line)i(parameters:)253
+365 y Fa(STARTING)e(THIS)g(PROGRAM)253 390 y(---------------------)253
+415 y(In)g(order)g(to)g(translate)h(ACIP)f(to)g(LaTeX,)g(use)253
+465 y(ttt)g(acip.ttd)g(latex.ttd)h(input.tib)f(output.tex)253
+515 y(where)g(acip.ttd)34 b(is)11 b(the)g(input)22 b(transcript)11
+b(definition)g(file)253 540 y(.)55 b(latex.ttd)23 b(is)11
+b(the)g(output)g(transcript)g(definition)g(file)253 565
+y(.)55 b(input.tib)23 b(is)11 b(your)g(ACIP)g(input)g(text)253
+589 y(.)55 b(output.tex)12 b(is)f(the)g(output)g(file)g(to)g(be)g
+(processed)g(by)h(latex)253 639 y(On)f(Linux,)g(you)g(will)h(enjoy)f
+(the)g(feature)g(of)g(magic)g(line)g(support:)253 664
+y(In)g(your)g(input.tib)h(file,)f(add)g(the)g(following)g(two)g(lines)g
+(at)h(the)253 689 y(VERY)f(TOP)g(\(replacing)h(the)f(respective)g
+(filenames\):)253 739 y(#!/bin/sh)253 764 y(ttt)g(acip.ttd)g(latex.ttd)
+h($0)f(output.tex;)g(latex)g(output;)g(exit)253 814 y(Due)g(to)g(the)g
+(magic)h(line)f(at)g(the)g(top,)g(\(ba\)sh)g(will)g(think)g(that)h
+(your)f(text)253 839 y(input.tib)g(is)g(a)g(shell)h(script,)f
+(executing)g(the)g(2nd)g(line.)253 863 y
+(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)253
+888 y(This)g(program)g(will)h(ignore)f(the)g(FIRST)g(AND)g(THE)g
+(SECOND)253 913 y(line)g(if)g(the)g(FIRST)h(line)f(starts)g(with)g(#!)
+253 938 y(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)253
+963 y(Do)g(not)g(put)g(anything,)h(even)f(not)g(comments)g(above)g
+(these)g(lines.)253 988 y($0)g(is)g(automatically)h(replaced)f(by)g
+(the)g(file)g(name)g(\(e.g.)g(input.tib\).)253 1038 y(Then)g(turn)g
+(your)g(input.tib)h(file)f(into)g(an)g(executable)g(by)253
+1063 y(chmod)g(755)g(input.tib)253 1112 y(Now,)g(you)g(can)g(start)h
+(this)f(program)g(by)g(entering)253 1137 y(input.tib)253
+1162 y(at)g(the)g(shell)g(command)h(prompt.)253 1212
+y(DOS)f(users,)g(please)h(write)f(an)g(apropriate)g(*.BAT)g(file)g
+(\(without)h($0\).)253 1237 y(Windows)f(users)g(may)h(set)f(the)g
+(command)g(line)g(options)g(as)g(program)h(properties.)220
+1395 y Fb(2.2)56 b(Whic)n(h)18 b(ttd)h(\014les)f(to)g(use)220
+1513 y Fi(A)o(t)11 b(presen)o(t,)i Ff(input.ttd)c Fi(and)i
+Ff(acip.ttd)e Fi(can)i(b)q(e)h(used)g(as)f(input)g(transcript)h
+(de\014nitions)220 1563 y(only)m(.)17 b(Use)d Ff(input.ttd)d
+Fi(for)i(an)o(y)f(texts)j(supplied)e(b)o(y)g(Je\013)h(Spark)o(es)g(and)
+f(Sam)e(Sirlin)h(and)220 1613 y(this)21 b(pac)o(k)n(age)f(\(ending)g
+(in)h Ff(.tib)p Fi(\).)37 b Ff(acip.ttd)19 b Fi(only)h(for)g(A)o(CIP)h
+(texts.)39 b(Y)m(ou)20 b(easily)220 1662 y(recognize)15
+b(them)e(b)o(y)h(their)g(ha)o(ving)f(an)g(UPPER)o(CASE)i(TRANSCRIPT.)
+220 1754 y Ff(tex.ttd)f Fi(and)h Ff(latex.ttd)e Fi(are)i(the)h(output)f
+(transcript)h(de\014nitions.)22 b(Use)16 b Ff(latex.ttd)220
+1803 y Fj(only)k Fi(for)g(A)o(CIP)h(texts.)41 b(It)21
+b(includes)g(a)g(do)q(cumen)o(t)f(pream)o(ble)g(and)h(p)q(ostam)o(ble)e
+(for)220 1853 y(LaT)m(eX.)j(In)h(all)f(other)h(cases,)j(I)d(recommend)f
+(y)o(ou)g(to)h(include)g(the)g(pream)o(ble)f(and)220
+1903 y(p)q(ostam)o(ble)13 b(in)o(to)g(the)h(source)h(\014le)f(and)g
+(use)h Ff(tex.ttd)p Fi(.)220 2082 y Fk(3)67 b(T)-6 b(ranscription)220
+2223 y Fb(3.1)56 b(Note)220 2341 y Fi(The)15 b(upp)q(er)h(lines)f(sho)o
+(w)f(the)i(transcript)f(used)h(b)o(y)e(Je\013)i(Spark)o(es)g(and)e(Sam)
+f(Sirlin.)20 b(The)220 2391 y(lo)o(w)o(er)14 b(lines)g(sho)o(w)g(the)h
+(A)o(CIP)g(transcription.)k(Please)c(note)g(the)g(di\013erence)h(mark)o
+(ed)d(b)o(y)220 2440 y Fj(\(!\))p Fi(.)25 b(Of)17 b(course,)h
+(punctuation)f(and)g(spacing)f(are)i(completely)d(di\013eren)o(t.)28
+b(F)m(or)16 b(L)1545 2432 y Fh(A)1563 2440 y Fi(T)1586
+2449 y(E)1609 2440 y(X,)220 2490 y(I)g(recommend)f(the)i(transcript)h
+(in)e(the)h(upp)q(er)g(lines,)f(since)i(this)e(transcript)h
+(de\014nition)220 2540 y(supp)q(orts)e(the)g(full)d(p)q(o)o(w)o(er)i
+(of)g(the)g(ligature)g(generator.)926 2831 y(2)p eop
+%%Page: 3 3
+3 2 bop 220 266 a Fb(3.2)56 b(Single)17 b(Characters)i(and)g(V)-5
+b(o)n(v)n(els)256 383 y Fc(\000)p Fd(r)70 b Fc(\001)p
+Fd(r)79 b Fc(\002)p Fd(r)g Fc(\003)p Fd(r)256 444 y Ff(ka)71
+b(kha)83 b(ga)76 b(nga)256 493 y(KA)71 b(KHA)83 b(GA)76
+b(NGA)258 602 y Fc(\004)p Fd(r)c Fc(\005)p Fd(r)87 b
+Fc(\006)p Fd(r)f Fc(\007)p Fd(r)256 663 y Ff(ca)71 b(cha)83
+b(ja)76 b(nya)256 713 y(CA)71 b(CHA)83 b(JA)76 b(NYA)262
+822 y Fc(\010)p Fd(r)82 b Fc(\011)p Fd(r)88 b Fc(\012)p
+Fd(r)83 b Fc(\013)p Fd(r)256 885 y Ff(ta)71 b(tha)83
+b(da)k(na)256 935 y(TA)71 b(THA)83 b(DA)k(NA)256 1044
+y Fc(\014)p Fd(r)72 b Fc(\015)p Fd(r)84 b Fc(\016)p Fd(r)78
+b Fc(\017)p Fd(r)256 1094 y Ff(pa)71 b(pha)83 b(ba)k(ma)256
+1143 y(PA)71 b(PHA)83 b(BA)k(MA)256 1255 y Fc(\020)p
+Fd(r)70 b Fc(\021)p Fd(r)84 b Fc(\022)p Fd(r)77 b Fc(\023)p
+Fd(r)245 1316 y Ff(tsa)49 b(tsha)61 b(dza)76 b(wa)83
+b Fj(\(!\))245 1366 y Ff(TZA)60 b(TSA)72 b(DZA)k(WA)83
+b Fj(\(!\))257 1475 y Fc(\024)p Fd(r)77 b Fc(\025)p Fd(r)86
+b Fc(\026)p Fd(r)72 b Fc(\027)p Fd(r)245 1536 y Ff(zha)f(za)94
+b('a)87 b(ya)245 1586 y(ZHA)71 b(ZA)94 b('A)87 b(YA)256
+1695 y Fc(\030)p Fd(r)71 b Fc(\031)p Fd(r)79 b Fc(\032)p
+Fd(r)72 b Fc(\033)p Fd(r)256 1758 y Ff(ra)82 b(la)h(sha)76
+b(sa)256 1808 y(RA)82 b(LA)h(SHA)76 b(SA)383 1917 y Fc(\034)p
+Fd(r)h Fc(\035)p Fd(r)382 1977 y Ff(ha)105 b(a)382 2027
+y(HA)g(A)247 2215 y Fc(\035)p Fd(r)375 2187 y(~)366 2215
+y Fc(\035)14 b Fd(r)46 b Fc(\035)504 2224 y Fd({)583
+2215 y(r)641 2187 y(\177)636 2215 y Fc(\035)14 b Fd(r)764
+2187 y(})767 2215 y Fc(\035)f Fd(r)927 2187 y(\000)914
+2215 y Fc(\035)h Fd(r)57 b Fc(\035)1069 2252 y(\026)1142
+2215 y Fd(r)267 2303 y Ff(a)104 b(i)116 b(u)109 b(e)g(o)126
+b(*)116 b(aa)267 2353 y(A)104 b(I)116 b(U)109 b(E)g(O)262
+2521 y Fd(\032r)82 b(\031r)88 b(\033r)83 b(\034r)77 b(\036r)89
+b(\035r)245 2594 y Ff(txa)49 b(thxa)61 b(dxa)k(nxa)54
+b(shxa)49 b(kshxa)926 2831 y Fi(3)p eop
+%%Page: 4 4
+4 3 bop 220 266 a Fb(3.3)56 b(Punctuation)18 b(Marks)h(and)g(Spacing)g
+(Con)n(trol)249 383 y Fd(s)55 b(y)k(r)49 b Fi(suppress`)p
+Fd(r)p Fi(')i(shad)14 b(space)62 b Fd(tr)51 b(\000)1156
+393 y Fj(-)1152 420 y Fd(\000)245 459 y Ff(/)i(!)g(,)134
+b(#)219 b(|)136 b(\\swasti)49 b(:)245 509 y(,)705 b(*)21
+b(\(?\))220 731 y Fk(4)67 b(Examples)220 871 y Fb(4.1)56
+b(Explicit)16 b(Ligature)i(Con)n(trol)247 974 y Fd(~)245
+1002 y Fc(R)c(\013)p Fd(r)40 b Fc(\002)446 974 y Fd(~)435
+1002 y Fc(\027\013)p Fd(r)g Fc(R\033)p Fd(r)g Fc(\002\027\033)p
+Fd(r)k Fc(\012)p Fd(\024r)78 b Fc(\012)1079 1053 y Fd(\024)1118
+1002 y(r)248 1130 y Ff(gyin)64 b(g-yin)g(gyas)70 b(g-yas)c(ddha)49
+b(-ddha)220 1281 y Fb(4.2)56 b(Generic)17 b(Ligatures)264
+1390 y Fd(\000)242 1415 y(})245 1443 y Fc(\035)28 b Fd(r)40
+b Fc(\017)p Fd(r)483 1415 y(~)487 1443 y(\034)14 b(r)59
+b Fc(\014)652 1408 y Fd(\177)647 1443 y Fc(\012)647 1494
+y(\017)690 1443 y Fd(r)773 1408 y(\000)753 1443 y Fc(\034)753
+1497 y(\026)753 1513 y Fd({)839 1443 y(r)905 1408 y(~)903
+1443 y Fc(d)903 1497 y(\026)975 1443 y Fd(\000)979 1453
+y Fj(-)975 1480 y Fd(\000)1092 1390 y(\000)1070 1415
+y(})1072 1443 y Fc(\035)28 b Fd(r)p Fc(\017)p Fd(r)1230
+1415 y(~)1227 1443 y(\034r)p Fc(\014)1319 1408 y Fd(\177)1314
+1443 y Fc(\012)1314 1494 y(\017)1357 1443 y Fd(r)1382
+1408 y(\000)1370 1443 y Fc(\034)1370 1497 y(\026)1370
+1513 y Fd({)1414 1443 y(r)1435 1408 y(~)1427 1443 y Fc(d)1427
+1497 y(\026)1471 1443 y Fd(\000)1475 1453 y Fj(-)1471
+1480 y Fd(\000)268 1567 y Ff(o*)73 b(ma)50 b(nxi)g(padme)f(h'u*)h
+(hr'i:|)e Fi(Y)m(et)15 b(another)f(spacing)g(bug!)249
+1681 y Fc(\013)p Fd(r)328 1653 y(})338 1681 y Fc(\017)g
+Fd(r)40 b Fc(\002)449 1707 y Fd({)522 1681 y(r)g Fc(\030)573
+1686 y Fd({)643 1681 y(r)50 b Fc(\016\034)745 1734 y
+Fd(\004)794 1681 y(\000)798 1691 y Fj(-)794 1718 y Fd(\000)1142
+1681 y Fc(\013)p Fd(r)1185 1653 y(})1188 1681 y Fc(\017)p
+Fd(r)p Fc(\002)1245 1707 y Fd({)1290 1681 y(r)p Fc(\030)1301
+1686 y Fd({)1343 1681 y(r)p Fc(\016\034)1395 1734 y Fd(\004)1444
+1681 y(\000)1449 1691 y Fj(-)1444 1718 y Fd(\000)245
+1768 y Ff(na)57 b(mo)75 b(gu)80 b(ru)63 b(bhya:|)249
+1882 y Fc(\013)p Fd(r)328 1854 y(})338 1882 y Fc(\017)14
+b Fd(r)51 b Fc(\016)456 1894 y Fd({)526 1882 y Fc(\012)526
+1933 y Fd(\024)565 1882 y(r)h Fc(\027)p Fd(s)445 b Fc(\013)p
+Fd(r)1181 1854 y(})1184 1882 y Fc(\017)p Fd(r)p Fc(\016)1237
+1894 y Fd({)1279 1882 y Fc(\012)1279 1933 y Fd(\024)1318
+1882 y(r)p Fc(\027)p Fd(s)245 2009 y Ff(na)57 b(mo)h(buddha)49
+b(ya/)249 2123 y Fc(\013)p Fd(r)328 2095 y(})338 2123
+y Fc(\017)14 b Fd(r)75 b(\024)p Fc(')519 2170 y(\026)563
+2123 y Fd(r)h Fc(\027)p Fd(s)383 b Fc(\013)p Fd(r)1141
+2095 y(})1144 2123 y Fc(\017)p Fd(r\024)p Fc(')1236 2170
+y(\026)1280 2123 y Fd(r)p Fc(\027)p Fd(s)245 2221 y Ff(na)57
+b(mo)h(dharm'a)48 b(ya/)249 2334 y Fc(\013)p Fd(r)328
+2306 y(})338 2334 y Fc(\017)14 b Fd(r)70 b Fc(\033\003)524
+2371 y Fd(\025)567 2334 y(r)i Fc(\027)p Fd(s)374 b Fc(\013)p
+Fd(r)1132 2306 y(})1135 2334 y Fc(\017)p Fd(r)p Fc(\033\003)1237
+2371 y Fd(\025)1280 2334 y(r)p Fc(\027)p Fd(s)245 2448
+y Ff(na)57 b(mo)h(sanggha)48 b(ya/)245 2588 y Fd(s)277
+2535 y(\000)262 2560 y(})258 2588 y Fc(\035)p Fd(r)40
+b Fc(\035)382 2625 y(\026)468 2588 y Fd(\000)473 2599
+y Fj(-)468 2626 y Fd(\000)566 2554 y(\000)546 2588 y
+Fc(\034)546 2642 y(\026)546 2658 y Fd({)632 2588 y(s)473
+b(s)1151 2535 y(\000)1135 2560 y(})1131 2588 y Fc(\035)p
+Fd(r)p Fc(\035)1216 2625 y(\026)1260 2588 y Fd(\000)1264
+2599 y Fj(-)1260 2626 y Fd(\000)1296 2554 y(\000)1283
+2588 y Fc(\034)1283 2642 y(\026)1283 2658 y Fd({)1327
+2588 y(s)249 2712 y Ff(/o*)82 b(aa:)c(h'u*/)926 2831
+y Fi(4)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/language/tibetan/steiner/tttintro.tib b/language/tibetan/steiner/tttintro.tib
new file mode 100644
index 0000000000..c2fe4dcf90
--- /dev/null
+++ b/language/tibetan/steiner/tttintro.tib
@@ -0,0 +1,243 @@
+#!/bin/sh
+ttt input.ttd tex.ttd $0 test.tex; latex test; rm test.tex; exit
+
+\documentclass[a4paper]{article}
+\begin{document}
+
+\parindent=0pt
+\parskip=10pt
+\sloppy
+
+\section{Additional Features}
+\begin{description}
+\item[Q:] There are now already two \LaTeX\ implementations of the Tibetan language.
+ Why is there now a third one?
+\item[A:] Like other typesetting programs, the above implementations make use of predefined
+ ligatures only. If you try to enter prayers containing Sanskrit syllables into
+ such a system, you will get into severe trouble. Therefore, I added now a completely new
+ transcript preprocessor having the following extra features:
+\item[Compatibility:] As far as I know, it supports all control sequences of the above
+ implementations, plus the ACIP transcript. If you have yet another transcript, you can
+ create your own transcript definition file, hopefully without having to modify the C code.
+\item[Inline \LaTeX\ commands:] All commands that do not contain spaces or such can be
+ typed without using the mode switching characters({\tt \%\%}). Even the tabbing character
+ ({\verb|&|}) is transparent. So you can easily typeset tabular environments and line breaks.
+\item[Generic Ligatures:] If this preprocessor encounters any ligatures which are not predefined,
+ it tries to compose them automatically. There is still much work to be done on this:
+ \begin{itemize}
+ \item There are some spacing problems to solve on \LaTeX\ level
+ \item Adding intelligence for character mutations
+ \item Font definition for character fragments
+ \item Font definition for vertically smaller characters
+ \end{itemize}
+ Especially syllables like %% /tutt'a ra/ %% \ do not look very nice and need too much vertical
+ space. But in many cases, the output is quite readable and the input very simple
+ (e. g. {\verb| /tutt'a ra/|}).
+
+
+\end{description}
+
+
+\section{How to use it}
+\subsection{General Command Line Handling}
+In fact, it is very similar to the previous implementations:
+You have the usual \LaTeX\ procedure plus an additional preprocessor program
+between editing and \LaTeX ing, which interprets a transcript described below,
+generating Tibetan characters and ligatures.
+
+\pagebreak
+
+There is some extra complication concerning the command line parameters:
+{\tiny\begin{verbatim}
+ STARTING THIS PROGRAM
+ ---------------------
+ In order to translate ACIP to LaTeX, use
+
+ ttt acip.ttd latex.ttd input.tib output.tex
+
+ where acip.ttd is the input transcript definition file
+ . latex.ttd is the output transcript definition file
+ . input.tib is your ACIP input text
+ . output.tex is the output file to be processed by latex
+
+ On Linux, you will enjoy the feature of magic line support:
+ In your input.tib file, add the following two lines at the
+ VERY TOP (replacing the respective filenames):
+
+ #!/bin/sh
+ ttt acip.ttd latex.ttd $0 output.tex; latex output; exit
+
+ Due to the magic line at the top, (ba)sh will think that your text
+ input.tib is a shell script, executing the 2nd line.
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ This program will ignore the FIRST AND THE SECOND
+ line if the FIRST line starts with #!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ Do not put anything, even not comments above these lines.
+ $0 is automatically replaced by the file name (e.g. input.tib).
+
+ Then turn your input.tib file into an executable by
+ chmod 755 input.tib
+
+ Now, you can start this program by entering
+ input.tib
+ at the shell command prompt.
+
+ DOS users, please write an apropriate *.BAT file (without $0).
+ Windows users may set the command line options as program properties.
+\end{verbatim}}
+
+\subsection{Which ttd files to use}
+
+At present, {\tt input.ttd} and {\tt acip.ttd} can be used as input transcript definitions
+only. Use {\tt input.ttd} for any texts supplied by Jeff Sparkes and Sam Sirlin and this
+package (ending in {\tt .tib}). {\tt acip.ttd} only for ACIP texts. You easily recognize
+them by their having an UPPERCASE TRANSCRIPT.
+
+{\tt tex.ttd} and {\tt latex.ttd} are the output transcript definitions. Use {\tt latex.ttd}
+{\bf only} for ACIP texts. It includes a document preamble and postamble for LaTeX. In
+all other cases, I recommend you to include the preamble and postamble into the source file
+and use {\tt tex.ttd}.
+
+\section{Transcription}
+\subsection{Note}
+The upper lines show the transcript used by Jeff Sparkes and Sam Sirlin.
+The lower lines show the ACIP transcription. Please note the difference marked by {\bf(!)}.
+Of course, punctuation and spacing are completely different.
+For \LaTeX, I recommend the transcript in the upper lines, since this transcript definition
+supports the full power of the ligature generator.
+
+\subsection{Single Characters and Vovels}
+
+%%
+
+\begin{tabular}{ccccccc}
+
+ka & kha & ga & nga \\*
+\tt{ka} & \tt{kha} & \tt{ga} & \tt{nga} \\*
+\tt{KA} & \tt{KHA} & \tt{GA} & \tt{NGA} \\[0.5cm]
+
+ca & cha & ja & nya \\*
+\tt{ca} & \tt{cha} & \tt{ja} & \tt{nya} \\*
+\tt{CA} & \tt{CHA} & \tt{JA} & \tt{NYA} \\[0.5cm]
+
+ta & tha & da & na \\*
+\tt{ta} & \tt{tha} & \tt{da} & \tt{na} \\*
+\tt{TA} & \tt{THA} & \tt{DA} & \tt{NA} \\[0.5cm]
+
+pa & pha & ba & ma \\*
+\tt{pa} & \tt{pha} & \tt{ba} & \tt{ma} \\*
+\tt{PA} & \tt{PHA} & \tt{BA} & \tt{MA} \\[0.5cm]
+
+tsa & tsha & dza & wa \\*
+\tt{tsa} & \tt{tsha} & \tt{dza} & \tt{wa} & \tt{\bf(!)}\\*
+\tt{TZA} & \tt{TSA} & \tt{DZA} & \tt{WA} & \tt{\bf(!)} \\[0.5cm]
+
+zha & za & 'a & ya \\*
+\tt{zha} & \tt{za} & \tt{'a} & \tt{ya} \\*
+\tt{ZHA} & \tt{ZA} & \tt{'A} & \tt{YA} \\[0.5cm]
+
+ra & la & sha & sa \\*
+\tt{ra} & \tt{la} & \tt{sha} & \tt{sa} \\*
+\tt{RA} & \tt{LA} & \tt{SHA} & \tt{SA} \\[0.5cm]
+
+ & ha & a \\*
+ & \tt{ha} & \tt{a} \\*
+ & \tt{HA} & \tt{A} \\[1cm]
+
+a & i & u & e & o & * & aa \\
+\tt{a} & \tt{i} & \tt{u} & \tt{e} & \tt{o} & \tt{*} & \tt{aa} \\*
+\tt{A} & \tt{I} & \tt{U} & \tt{E} & \tt{O} \\[1cm]
+
+txa & thxa & dxa & nxa & shxa & kshxa \\*
+\tt{txa} & \tt{thxa} & \tt{dxa} & \tt{nxa} & \tt{shxa} & \tt{kshxa} \\
+
+\end{tabular}
+
+%%
+
+\subsection{Punctuation Marks and Spacing Control}
+
+%%
+\begin{tabular}{ccccccc}
+/ & ! & , & \rm{suppress`} ,\rm{'} & \rm{shad~space} & \swasti & : \\*
+\tt{/} & \tt{!} & \tt{,} & \tt{\#} & \tt{|} & \verb|\swasti| & \tt{:} \\*
+\tt{,} & & & & & \tt{*~(?)} \\[0.5cm]
+
+\end{tabular}
+%%
+
+% \subsection{Combined Letters or Ligatures}
+% %%
+% \begin{tabular}{cccccc}
+% na & mo & gu & ru & bhya:| & na mo gu ru bhya:| \\*
+% \tt{na} & \tt{mo} & \tt{gu} & \tt{ru} & \verb#bhya:|#
+% \end{tabular}
+%
+
+%%
+
+\section{Examples}
+\subsection{Explicit Ligature Control}
+\begin{tabular}{ccccccl} %%
+gyin & g-yin & gyas & g-yas & ddha & -ddha \\* %%
+\tt{gyin} & \tt{g-yin} & \tt{gyas} & \tt{g-yas} & \tt{ddha} & \tt{-ddha}\\
+\end{tabular}
+
+\subsection{Generic Ligatures}
+%%
+\begin{tabular}{ccccccl}
+o* & ma & nxi & padme & h'u* & hr'i:| & o* ma nxi padme h'u* hr'i:| \\*
+\tt{o*} & \tt{ma} & \tt{nxi} & \tt{padme} & \tt{h'u*} & \verb#hr'i:|#
+& \rm{Yet~another~spacing~bug!}
+\end{tabular}
+
+% \begin{center}
+% /o* ma nxi padme h'u* hr'i:|
+% \rm{Cheap~workaround}
+% \end{center}
+
+\begin{tabular}{cccccr}
+na & mo & gu & ru & bhya:| & na mo gu ru bhya:| \\*
+\tt{na} & \tt{mo} & \tt{gu} & \tt{ru} & \verb#bhya:|# & \hspace*{5cm}
+\end{tabular}
+
+\begin{tabular}{ccccr}
+na & mo & buddha & ya/ & na mo buddha ya/ \\*
+\tt{na} & \tt{mo} & \tt{buddha} & \tt{ya/} & \hspace*{5.5cm}
+\end{tabular}
+
+\begin{tabular}{ccccr}
+na & mo & dharm'a & ya/ & na mo dharm'a ya/ \\*
+\tt{na} & \tt{mo} & \tt{dharm'a} & \tt{ya/} & \hspace*{5cm}
+\end{tabular}
+
+\begin{tabular}{ccccr}
+na & mo & sanggha & ya/ & na mo sanggha ya/ \\*
+\tt{na} & \tt{mo} & \tt{sanggha} & \tt{ya/} & \hspace*{5cm}
+\end{tabular}
+
+
+\begin{tabular}{ccccr}
+/o* & aa: & h'u*/ & & /o* aa: h'u*/ \\*
+\tt{/o*} & \tt{aa:} & \tt{h'u*/} & & \hspace*{5cm}
+\end{tabular}
+
+
+%%
+
+\end{document}
+
+
+
+
+
+
+
+
+
+
+
+
+
+