diff options
Diffstat (limited to 'Master/texmf-dist/doc/fonts/itrans/tech.tex')
-rw-r--r-- | Master/texmf-dist/doc/fonts/itrans/tech.tex | 539 |
1 files changed, 0 insertions, 539 deletions
diff --git a/Master/texmf-dist/doc/fonts/itrans/tech.tex b/Master/texmf-dist/doc/fonts/itrans/tech.tex deleted file mode 100644 index 3633921314b..00000000000 --- a/Master/texmf-dist/doc/fonts/itrans/tech.tex +++ /dev/null @@ -1,539 +0,0 @@ -% $Header: /home/cvsroot/itrans/nextrel/doc/tech.tex,v 1.1.1.1 1996/11/29 01:45:31 avinash Exp $ -\renewcommand{\arraystretch}{1.25} -\newcommand{\rarrow}{\mbox{---\hspace{-8pt}$>$}} -\newcommand{\SM}{\verb+\char92marathi+} -\newcommand{\EM}{\verb+\char92endmarathi+} -\documentstyle[11pt]{article} -\setlength{\textwidth}{5.75in} -\newfont{\devnf}{dnh at 15pt} - -\begin{document} - -\centerline{\LARGE\bf The {\em itrans} Preprocessor} -\medskip -\centerline{\bf TECHNICAL INFORMATION} -\medskip -\centerline{\bf \copyright 1991 Avinash Chopde} -\medskip -\hrule -\bigskip - -\section{Reference} - -{\tt -WARNING: The information in this document relates to ITRANS 2.11 and -earlier only. -THIS INFORMATION MAY BE INCORRECT/INCOMPLETE AS OF ITRANS 3.00 versions -onwards. -} - -This is a project that aims to develop a single tool for handling the -printing of various indian language documents, assuming that the input is -in some transliterated form. -The transliteration mechanism for all indian languages will be through -the english language. - -See the document {\em Printing Transliterated Indian Language Documents}, -in the file {\em idoc.itx} for more details---that document is the -user manual for the {\em itrans} package. -This document discusses the technical aspects of the program. - -\section{Input Parsing} - -I have made the following assumptions regarding how the words in a -indian language (well, not all, but most of them) are assembled. -(In the following discussion, {\em alphabet} refers to the list of basic -characters in the language script, a -{\em letter} refers to an element from the complete list of characters---basic -plus all the composite forms.) - -The alphabet is divided into two groups: vowels and consonants. - -Each indian language letter may be a vowel, or a consonant-vowel pair, or a -ligature-vowel pair. - -Ligatures are sequences of consonants. - -If a consonant {\em xxx} is followed by another consonant {\em yyy}, then it is -assumed to imply a half-consonant, i.e., the half-form of {\em xxx} must be -displayed at that point. -Of course, if the ligature for the pair xxx-yyy exists, the ligature -is used instead. -Note that not all indian languages make use of ligatures. - -Apart from the vowels and consonants, some special forms are also -provided, such as the chandra-bindu, the anuswara, virama, etc. -These special forms always form the suffix on the letter they affect, -i.e., you specify the letter first, then the special form. -A bunch of letters separated by white space or punctuation forms a word. - -Based on these assumptions, a simple parser has been built, to recognize -the basic unit---the letter. - -\section{Letter Construction} - -The fonts that are used here provide only the basic characters---vowels, -consonants (both full and half forms), special forms, and, some ligatures. -Every letter is built by printing its constituent characters. -This mapping of the consonant-vowel pairs, of the ligatures, etc, to -actual characters to be used from the specific font is specified through -the IFM file (indian language font metric file). -The IFM file is a text file, and follows somewhat the syntax of Adobe AFM -files. -In it is described how to construct every consonant-vowel form using the -given font, how to construct a ligature of consonant-consonant pairs, -the character codes of the special forms, etc. -The description is provided as a list of character codes, and their -offsets. -For example a description for some letter looks like: - -PCC 97 0 0 ; PCC 129 -70 0 ; - -This is a two character chain, first character has code 97, second -character has a code of 129. -The first character is printed with an offset (x,y) of (0,0). -Then the second character is printed with an offset of (-70,0), i.e., a -kern of -70 units. -One unit is equivalent of $1/1000$ of the current font size. -The entire IFM file structure is described in a later section. - -As shown in the example above, the chain of characters is printed out by -performing two operations on every character code in the chain: - -\begin{verbatim} -for every component of the form: PCC <code> <dx> <dy> ; - -move <dx>, <dy>; - -display character <code>; - -/*POSTSCRIPT FONT ONLY*/ - if (<dy> is non-zero) move 0, -<dy>; - if (width of char <code> is defined as zero) move -<dx>, 0; -/*POSTSCRIPT FONT ONLY*/ - -\end{verbatim} - -This relies on the fact that both \TeX\ and PostScript have a notion of a -current point. -Two values allow kerning to be specified in both X and Y directions. -If a movement in Y direction is des -Note that if the font being used is a PostScript font, then two other -actions may be performed. -If \verb+ <dy>+ is non-zero, itrans reapplies a negative offset to -restore the baseline y coordinate (otherwise the line will keep getting -skewed! Note that this step is not necessary for \TeX---it takes care -of keeping the baseline horizontal). -Secondly, if the width of the character has been defined to be zero, a -negative x kern is applied. -This is done just for convenience---zero width characters are always -used as accent marks, and they should not contribute to the actual -character width, so the current position in X is restored to the original -value after a accent mark (zero width character) is printed. - -Only PostScript fonts may have zero-width characters, the above does not -apply to \TeX\ Matafont fonts. -I.e, for \TeX, the last {\em move -<dx>, 0;} is never executed, even if -the charwidth for the given character is zero. -(This is partly due to my laziness, I did not want to write code that -reads in a TFM file to get the char widths!) - -The above given description is used to specify both consonant-vowel -forms, and consonant-consonant (ligature) forms. -Currently, only ligatures composed of two consonants can be defined. - -If a consonant-vowel form appears in the input text, but has not been -defined in the IFM file, an error message is printed on the screen, and -the character is omitted. - -If a consonant-consonant-vowel (ligature) form appears in the input text, -but has not been -defined in the IFM file, it is not considered an error, instead, the -first consonant is printed in the half-form, and the second consonant -is printed out as its appropriate vowel form. -Long consonant chains, such as consonant-consonant-$\cdots$-consonant-vowel -are also handled in a similar manner---first a check if made if a ligature -exists for any two consecutive consonants, if yes, it is used, else, the -half forms of the consonants are used. -Beginning with the first consonant in the list, -itrans checks if a double-consonant ligature has -been defined for that consonant and the next one in the list. -If such a character exists, then it is used and both consonants are consumed, -and itrans repeats the procedure for the next consonant. - -There is an exception to the above rule: if at all possible, the last two -consonants are handled together, that is if a ligature of the last two -consonants -exists, that is used over the pairing that would result from the above method. -(See the user manual idoc.itx for example in the section Usage Hints.) - -\section{IFM File Code Names} - -The IFM file uses code names to refer to vowels and consonants. -For example, the ``I'' char in the input text for devanagari refers -to the ``ii'' code name in the IFM file (in this case, so does the input -char pair ``ii''). -Figure 1 shows the relationship between the input vowel text forms -accepted by the -lexer, and the code name for the vowels in the IFM file. -(Note that no indian language script makes use of the complete set -of code names available in the IFM file.) - -(Figures 1 \& 2 may be out-of-date, see the files imap.h and ilex.l -for correct info.) - -Similarly, the consonant names are as given in figure 2. -Again, only a subset of these may be used by a particular indian -language script. - -\bigskip -\begin{figure} -\begin{center} -\begin{tabular}{|c|c|c|} -\hline -{\em Input Text} & {\em IFM Code Name} & {\em Used For} \\ -\hline\hline -a & a & devanagari, tamil \\ \hline -aa & aa & devanagari, tamil \\ \hline -i & i & devanagari, tamil \\ \hline -ii or I & ii & devanagari, tamil \\ \hline -u & u & devanagari, tamil \\ \hline -uu or U & uu & devanagari, tamil \\ \hline -Ri & ri & devanagari \\ \hline -RI & rii & devanagari \\ \hline -Li & li & devanagari \\ \hline -LI & lii & devanagari \\ \hline -e & ay & devanagari, tamil \\ \hline -E & aay & tamil \\ \hline -ai & ai & devanagari, tamil \\ \hline -o & o & devanagari, tamil \\ \hline -O & oo & tamil \\ \hline -au & au & devanagari, tamil \\ \hline -aM & am & devanagari\\ \hline -H & aha & devanagari\\ \hline -\end{tabular} -\end{center} -\caption {Vowel Input Forms and Code Names} -\end{figure} - -\begin{figure} -\begin{center} -\begin{tabular}{|c|c|} -\hline -{\em Input Text} & {\em IFM Code Name}\\ \hline \hline -k & ka \\ \hline -q & kadot \\ \hline -kh & kha \\ \hline -K & khadot \\ \hline -g & ga \\ \hline -G & gadot \\ \hline -gh & gha \\ \hline -ng & nga \\ \hline -c & cha \\ \hline -ch & chha \\ \hline -j & ja \\ \hline -z & jadot \\ \hline -jh & jha \\ \hline -jn & jnh \\ \hline -T & tta \\ \hline -Th & ttha \\ \hline -D & dda \\ \hline -.D & ddadot \\ \hline -Dh & ddha \\ \hline -.Dh & ddhadot \\ \hline -N & nna \\ \hline -t & ta \\ \hline -th & tha \\ \hline -d & da \\ \hline -dh & dha \\ \hline -n & na \\ \hline -p & pa \\ \hline -\end{tabular} -\hfill -\begin{tabular}{|c|c|} -\hline -{\em Input Text} & {\em IFM Code Name}\\ \hline \hline -ph & pha \\ \hline -f & phadot \\ \hline -b & ba \\ \hline -bh & bha \\ \hline -m & ma \\ \hline -y & ya \\ \hline -r & ra \\ \hline -l & la \\ \hline -v & va \\ \hline -sh & sha \\ \hline -shh & shha \\ \hline -s & sa \\ \hline -h & ha \\ \hline -ld & lda \\ \hline -x & ksha \\ \hline -gy & gya \\ \hline -ny & nya \\ \hline -n\^ & nnx \\ \hline -R & rra \\ \hline -.r & rahalf \\ \hline -.n & anusvara \\ \hline -.c & chandra \\ \hline -.C & chandrabindu \\ \hline -.h & viraam \\ \hline -SRI & sri \\ \hline -AUM & aum \\ \hline -\end{tabular} -\\ -\end{center} -\caption {Consonant Input Forms and Code Names} -\end{figure} - -\section{IFM File Data} - -Currently, the IFM data resides in a file of its own, file name ends in -{\em .ifm}, example {\em dvnc.ifm}. -I still hope -that I may some day be able to include the IFM data into the Adobe AFM file. -Hence, all the lines in the IFM file start off with the word {\em -Comment\/}, so that regular Adobe programs that scan the AFM file may -skip over this data. -The marker {\em -I-} follows the comment word, and this marks the line as -containing legal metric data for the indian language. - -Every line in the AFM file consists of semicolon separated fields. -Each line describes a composite alphabet form, such as a consonant-vowel -description or a consonant-consonant form, or a vowel form, or a half -form of a consonant, etc. -The english words used to specify the characters of the indian language -alphabet are meant to sound right, in some vague manner, and are usually -self-descriptive. -These english words (such as ii, aa, aha, etc) have no relation to what -the user types to get the required character, that mapping is defined by -the lexer input file, {\em ilex.l}. - -Every field in a line in the IFM file starts off with an opcode, -describing what to expect next. - -The following lines are representative of the data in the AFM file: - -\begin{verbatim} -Comment -I- StartINDIAN -Comment -I- FONT marathi dmta.afm -Comment -I- CC a 2 ; PCC 97 0 0 ; PCC 129 -70 0 ; -Comment -I- CC a 2 ; PCC 97 0 0 ; PCC 129 -70 0 ; -Comment -I- CC gha-ii 3 ; PCC implicit 0 0 ; PCC 129 -70 0 ; PCC 132 0 0 ; -Comment -I- CCS gha ga ; -Comment -I- CCADD tmplA ; -Comment -I- EndINDIAN -\end{verbatim} - - -The opcodes StartINDIAN and EndIndian are used to bracket the indian -language character description data. - -The FONT opcode gives the name of the language, and the name of the file -which contains the AFM data for this font. -If the font is a Metafont description, then the TFM file name is -specified here. -The TFM file name is just used as an indication that the font used is a -\TeX\ font, the file is not actually opened or read. -Thus, if the font used is a Metafont description, you could as well say -``junk.tfm'' in the FONT opcode---only the extension ``.tfm'' is -important. -The first word in the FONT line is the language, and it must be one of the -languages ITRANS recognizes (see the function get\_lang\_tok() in marker.c). -This word determines how the input is scanned for tokens. -For example, the input letters ``Ri''refer to a vowel in -sanskrit/marathi/hindi, but in tamil, that vowel is not present. -But tamil uses the ``R'' symbol for a consonant, so the input ``Ri'' -is scanned as the consonant ``R'' followed by the vowel ``i'', while in -sanksrit it is scanned as the vowel ``Ri''. -Thus, it is important to define the correct language in the FONT statement -in the IFM file. - -The CC words stands for composite character, and it defines how to -construct the given character using the font. -In the example above, it shows that the {\em a} character is made up of -two units: char code 97, and char code 129. -See the previous section regarding the PCC opcode. -The second CC line above describes how to create the {\em ii} vowel form -of the consonant {\em gha}. -The first PCC character code in the line is not a number, but states {\em -implicit}. -This requires that a special character, called {\em gha-implicit} be -defined earlier. -Semantically, gha-implicit means the implicit form of the consonant gha. -Thus, whenever the code implicit appears in the description of some -consonant xxx, at that point, the program inserts the definition of the -xxx-implicit letter. -(Naturally, the description of xxx-implicit cannot have the code implicit -in its description.) - -Most consonants are similar in the manner in which the vowel forms are -constructed, using the implicit form of the consonant, and a few other -character forms. -For example, kha-aa, gha-aa, da-aa, dda-aa, are all constructed by using -this description: -PCC implicit 0 0 ; PCC 130 -70 0 ; -So, instead of restating this description for all these consonants, the -CCS keyword can be used instead. -The CCS keyword assigns equivalences, - -CCS xxx yyy ; - -states that a given consonant -xxx is similar to a already defined consonant yyy, and if some vowel -form (x) is missing, i.e. xxx-x description is missing, then it looks up -the description for yyy-x, and uses that. -This chaining can be made as deep as necessary: - -CCS bbb aaa ; - -CCS ccc bbb ; - -CCC ddd ccc ; - -etc - -CCS also works similarly for ligature forms: - -CCS ga-ra tmplC ; - -which states that the ga-ra ligature should use the form of the tmplC -dummy consonant (dummy consonants are explained further in this section). -Note that it is usually dangerous to specify ligature equivalence to one -of the constituent consonants, since most of the consonants do not use the -codename "implicit" in all their form definitions. -Thus, be careful of such definitions: - -CCS ga-ra ga ; - -or - -CCS ga-ra ra ; - -This will create problems if the half form of the ga-ra ligature is -required since both ga and ra (and every other consonant too) -have a half-form definition that does not include the code "implicit", -hence instead of the ga-ra-half form, what will print out will -be just the ga-half form or the ra-half form, depending on which -CCS line (from the above two lines) is present in the IFM file. -One way around this problem is to specifically define the half-form of -the ga-ra ligature, so as to stop the program from looking for it -through the CCS chain. -It is usually only the half form that causes problems (as of october 1991), -since all the other forms do contain the "implicit" code in their -definitions. - -A special consonant form, ``*'' is available for use with the CCS -keyword for ligatures: -It acts as a meta-character implying all the consonants. - -CCS *-ra tmplC ; - -CCS ga-* tmplC ; - -Instead of providing consonant equivalences between consonants, -additional dummy consonants may be created, these exist only in the IFM -file, and used only for equivalencing a real consonant. -The CCADD line defines the creation of a placeholder consonant. - -CCADD tmplA ; - -This states that the IFM will make use of a dummy consonant called tmplA, -and then all its vowel forms (including the half form) can be defined. -See the file dvnc.ifm for complete example. -All that tmplA is used for is to define equivalences, again from the -dvnc.ifm file, you will see lines like: - -CCS chha tmplA ; - -CCS tta tmplA ; - -which state that if some required vowel form of chha or tta is missing, -then try to use the definition of the same vowel form in tmplA. - -Each IFM file can make up to 10 such dummy consonants. - -\section{Example Usage or When to Make New IFM Files} - -So, to what end can this knowledge of the IFM file format be applied ? - -\begin{enumerate} -\item Assume that you need to disable all ligature printing, you -are printing at a very small font size, and ligatures do not print out -legibly. -To do this, you should copy the dvnc.ifm file to sdvnc.ifm, and remove all -ligature definitions from sdvnc.ifm. -Ligature definitions are those which contain two consonants separated by -a dash: examples: -{\obeylines -CCS tta-tta tmplA ; -CC tta-tta-implicit 1 ; PCC 147 0 0 ; -} -All such ligature definitions can be deleted from sdvnc.ifm. -And then, in your input file that contains the transliterated text, add -the command: - -$\backslash$indianifm=sdvnc.ifm - -(See the user manual on itrans for more information on the indianifm -keyword.) - -Now, no ligatures are available, and nothing needs to be done to the -input text at all to suppress the ligatures. -Instead of the ligatures, the half-forms of the consonants will be used -wherever required. - -\item Another use would be if you do not like the spacing of certain -characters when they are composed to form consonant forms. -Well, as seen in the previous example, it is quite simple to copy the IFM -file into a new one, change the deltas (the numbers) as required, and use -the new IFM in the input text. - -\item By changing the character definitions in the IFM file, one can -produce different printed forms for the character. -For example, to print the normal form of {\em ii} in devanagari prints out -as: {\devnf \char105\kern-0.04em\char128}. -% itrans: CC ii 2 ; PCC 105 0 0 ; PCC 128 -40 0 ; -Now, what if you need to make it print out as: {\devnf \char97\char132} ? -This is easily done, just comment out the old definition of the {\em ii} -character (it is called {\em ii} in the ifm file), and make it read: - -{\obeylines -Comment -I- CC ii 2 ; PCC 97 0 0 ; PCC 132 0 0 ; -} - -Now, all instances of {\em ii} in the input text will print out as: -{\devnf \char97\char132 }. - -\renewcommand{\arraystretch}{1.25} -\renewcommand{\arraystretch}{1.25} -\renewcommand{\arraystretch}{1.25} -\renewcommand{\arraystretch}{1.25} -This method can be used to change any character form you need, as long as -the constituent parts of the new character are available in the font. - -\item You have received a new font, either you developed it yourself, or -\renewcommand{\arraystretch}{1.25} -got it elsewhere, and you would like to use it through the itrans -mechanism. -This involves two steps. -First, you need to map the vowels and consonants available through itrans -(see figures 1 and 2) to the font characters. -Second, you create a IFM file for the font. -The first step is the biggest hurdle, especially if you feel that you -need to add new consonant names to ilex.l. -(Of course, that implies lots of source code changes: now iyacc.y will -have to be modified to accept the new token, imap.h will have to edited -to add the codename for the font, and font.c will have to be edited to -add the new codename into a static data structure!) -If that happens, send me e-mail, maybe I will permanently add the name to -ilex.l, but I hope that current set of names accepted by ilex.l will -suffice. -If they do, then no source code changes are necessary, just need to -create the IFM file and you are in business. - -If you wish, you could send me the IFM file you create, and the font -(if it is in public domain, otherwise the IFM file only will suffice), - -\end{enumerate} - -\end{document} |