summaryrefslogtreecommitdiff
path: root/systems/msdos/utilities/vfcomb/vfc-eng.tex
diff options
context:
space:
mode:
Diffstat (limited to 'systems/msdos/utilities/vfcomb/vfc-eng.tex')
-rw-r--r--systems/msdos/utilities/vfcomb/vfc-eng.tex2421
1 files changed, 2421 insertions, 0 deletions
diff --git a/systems/msdos/utilities/vfcomb/vfc-eng.tex b/systems/msdos/utilities/vfcomb/vfc-eng.tex
new file mode 100644
index 0000000000..348e560f9e
--- /dev/null
+++ b/systems/msdos/utilities/vfcomb/vfc-eng.tex
@@ -0,0 +1,2421 @@
+\documentstyle{article}
+\title{\VFC{} 1.3 \\[1.5ex]
+the program for the designers of the virtual fonts}
+
+\author{A.S.Berdnikov\\
+Institute of Analytical Instrumentation\\
+Rizsky pr. 26, 198103 St.Petersburg, Russia\\
+email: {\tt berd{\sl @}ianin.spb.su}}
+
+\date{June 22, 1996}
+
+\newcommand{\VFC}{{\sl VFComb\/}}
+\newcommand{\bs}{\char '134 } % char \
+\renewcommand{\contentsname}{}
+
+\begin{document}
+\maketitle
+\tableofcontents
+\clearpage
+
+\section*{Introduction\label{Sect-Intr}}%
+\addcontentsline{toc}{section}{Introduction}
+
+The MS DOS program \VFC\ enables to design the virtual
+fonts for \TeX, \LaTeX, etc., using already
+existing real or virtual fonts \cite{VF}\footnote{It is assumed
+that you are familiar with the concept of the virtual fonts and with the
+article \cite{VF}. If it is not so, it is highly recommended
+to read \cite{VF} before you proceed further.} in a more flexible
+manner than the direct manipulations with {\tt .vpl} files.
+It simplifies the process of combining real fonts into the virtual font
+and makes the debugging of the virtual fonts more simple
+and less time consuming. The main purpose of this program was to
+facilitate the integration of CM-fonts with cyrillic LL-fonts
+created by O.Lapko and A.Khodulev \cite{LL,LH} but it can be used for
+other applications too\footnote{Since this MS DOS program is written
+on {\sl Borland Pascal} and uses some specific features
+of this language, it is hardly portable ``as it is'' to any other platform,
+but to my mind it is not too difficult to transfer it to portable ANSI C
+(volunteers are welcome).}.
+
+The characteristic feature of the program is that it can assemble
+the ligature tables and metric information from various fonts
+and combine it with the user-defined metric information
+and ligature/kerning data.
+The program uses the information from {\tt .tfm} files
+(converted to ASCII format by the utility {\sl TFtoPL}) and the ASCII
+data files created by the User, and produces
+the ASCII {\tt .vpl} file on its output.
+The {\tt .vpl} file can be converted later to the
+virtual font using the utility {\sl VPtoVF}.
+
+\VFC{} supports the full syntaxis of {\tt .pl} and {\tt .vpl}
+files as it was defined by D.E.Knuth \cite{VF} and adds
+new commands like numerical variables, pseudo-arithmetics
+operations and conditional operators,
+which simplifies the design of the virtual fonts.
+The typical virtual font operations are performed automatically
+and require a compact \VFC{} script file.
+The \VFC{} script files have flexible structure
+so that just the same script files can be used
+to create the full generic font family.
+
+The commands from the \VFC{} script file enables:
+\begin{itemize}
+\item
+ specify the information about the mapping table
+ between the characters of the virtual font and the
+ real fonts;
+\item
+ specify the explicit sequences of {\sl DVI}-commands
+ substituted instead of some characters of the virtual
+ font;
+\item
+ extract metric information and ligature tables
+ from the {\tt .pl} files (converted from {\tt .tfm} files)
+ which describe the properties of the real fonts;
+\item
+ add user-defined metric information and ligature tables
+ (for example, the ligature and kerning data for the pairs
+ of characters corresponding to different real fonts);
+\item
+ include automatically new characters
+ if these characters are connected by the attributes {\tt VARCHAR},
+ {\tt NEXTLARGER} or ligature table data with the characters
+ already included into the virtual font;
+\item
+ insert automatically the {\tt DVI}-commands which
+ correct the {\tt DVI}-cursor position if the metric
+ information from the virtual font is different from that
+ for the real font;
+\item
+ create the output {\tt .vpl} file which combines all these data.
+\end{itemize}
+
+All input and output files are the ordinary ASCII files.
+The command line of the program specifies
+the name of the script file (the script file contains
+the commands which control the work of the program),
+and, may be, defines some variables which are analyzed and used later
+inside the script file.
+The output of the program is the {\tt .vpl} file which contains
+all information necessary to create the virtual font using
+the utility {\sl VPtoVF} and the {\tt .log} file which summarizes
+all printed messages and all operations
+performed by {\sl VFComb}.
+
+\section{Command-line parameters\label{Sect-CL}}
+
+The command line contains the list of parameters
+which are separated by spaces (the body of the parameter
+should contain {\em no} spaces).
+The following parameters can be specified:
+\begin{itemize}
+\item
+the name of the script file (the obligatory parameter);
+\item
+the definition of some variables which are used later in the script file
+(variable specifications always contain the character `{\tt =}'
+in its body);
+\item
+the name of the log-file, the names of the
+directories which used as a source for the input files,
+the directory for the output files, etc.
+(these parameters start with the character
+`{\tt /}'\footnote{The characters `{\tt !}', `{\tt -}', `{\tt +}'
+can be used as well.}).
+\end{itemize}
+The order of the parameters is of no sence\footnote{%
+The {\em only} exception: if the {\tt .log} file name specified
+by the command line parameter {\tt /o} does not contain the explicit
+directory specification, the directory specified by the parameter
+{\tt /o} is used only if this parameter is specified {\em before}
+the parameter {\tt /l} (the command line parameters {\tt /l} and {\tt /o}
+are described in section~\ref{Sect-CL-Other}).}.
+The {\em responce files} (see section~\ref{Sect-CL-RFiles})
+specified in a form `{\tt @{\em filename}}'
+and DOS environment variable {\tt VFCOMB}
+(see section \ref{Sect-CL-VFCOMB})
+can be used to define the parameters
+which are too long or which are specified too often
+to be typed manually at the command line.
+
+\subsection{Script file name\label{Sect-CL-Script}}
+
+The parameters which specify
+the name of the log-file, the names of the
+directories which are used as a source for the input files,
+the directory for the output files, etc.,
+start with the character `{\tt /}'
+(the characters `{\tt !}', `{\tt -}', `{\tt +}' can be used as well).
+The values of variables specified at the command line
+contain the character `{\tt =}' in its body.
+The {\em responce file} name starts with the character `{\tt @}'.
+All other constructions are recognized as the {\em script file} name.
+
+The {\em script file} is the main source of the commands
+which are processed by \VFC{} and which control the creation
+of the output {\tt .vpl} file.
+If the script file name has no extension, the extension {\tt .tbf}
+is added automatically. If the script file name has no explicit
+directory specification and it is not found in the current directory,
+\VFC{} looks for it in the directories specified by the parameter
+{\tt /u}.
+
+The User should specify only {\em one} script file at the command line
+(previous versions of \VFC{} enabled to specify {\em several} script files
+in the command line).
+If several script files are specified (or if there are the command line
+parameters which are not recognized by \VFC{} properly as the variable
+specifications, responce file names, etc.), the new name redefines
+the previous one after the warning message.
+If one needs to combine several {\tt .tbf} files into one stream
+of commands, the command {\tt LOADFILE} (section~\ref{Sect-VFC-OTHER})
+specified inside the script file can be used to do it.
+
+\subsection{Variables\label{Sect-CL-Var}}
+
+The script file commands can use the variables to specify
+the numerical and text data.
+Usually the variables and their values are specified by the
+script file commands described in section~\ref{Sect-VFC-VAR}.
+This section considers how it is possible
+to specify the variables and their values {\em at the command line} so
+that they can be analyzed by the script file commands when the script file
+is processed by \VFC.
+
+The definition of the {\em string} variable
+and its initial value is performed by the construction
+``{\tt {\em name}={\em value}}''
+--- when such parameter is encountered in the command line,
+a new string variable {\em name} is allocated, and the text string
+{\em value} is assigned to it.
+
+The {\em numerical} variables can be specified if the special suffix
+is added at the end of the field {\em value}\footnote{Usually it is
+not necessary since the User can allocate the
+numerical variables and assign the numerical values to them
+just by analyzing the contents of the string variables
+specified at the command line.}:
+\begin{itemize}
+\item {\tt /r} or {\tt /R}
+corresponds to {\em real variable};
+\item
+{\tt /F}, {\tt /D}, {\tt /H}, {\tt /O}, {\tt /B}, {\tt /C}
+correspond to {\em 32-bit integer} variable where
+{\tt /F} means {\em face code} value,
+{\tt /D} means {\em decimal} value,
+{\tt /H} means {\em hexadecimal} value,
+{\tt /O} means {\em octal} value,
+{\tt /B} means {\em binary} value,
+{\tt /C} means {\em character code} (integer value);
+\item
+{\tt /f}, {\tt /d}, {\tt /h}, {\tt /o}, {\tt /b}, {\tt /c}
+correspond to the {\em byte} (8-bit integer) variable which are usually
+used to define the character codes --- similarly to integers,
+{\tt /f} means {\em face code},
+{\tt /d} means {\em decimal} value,
+{\tt /h} means {\em hexadecimal} value,
+{\tt /o} means {\em octal} value,
+{\tt /b} means {\em binary} value,
+and {\tt /c} means {\em character code};
+\item
+{\tt /@F}, {\tt /@D}, {\tt /@H}, {\tt /@O}, {\tt /@B}, {\tt /@C}
+and their lowercase forms
+define the string variable with the contents equal to decimal representation
+of corresponding integer value --- for example, the parameter
+`{\tt tmp=377/@O}' is equivalent to `{\tt tmp=255}'
+(octal number 377 has the decimal representation 255).
+The suffix `{\tt @}' is equivalent to `{\tt @D}' and `{\tt @d}',
+and all three specifications are of no use since `{\tt S=12345/@D}'
+is just the same as `{\tt S=12345}'.
+\end{itemize}
+The contents of the field {\em value} is to be
+in agreement with the suffix specification
+(see section~\ref{Sect-VFC-NUM} for more details).
+Examples:
+\begin{description}
+\item[\quad{\tt vfcomb fntnam=CMR10 ...}] --- string variable;
+\item[\quad{\tt vfcomb rval=3.14159/r ...}] --- real variable;
+\item[\quad{\tt vfcomb ival=CDEF/H ...}] --- integer variable with hexadecimal value;
+\item[\quad{\tt vfcomb cval=X/c ...}] --- byte variable which is
+the character code for {\tt "X"}.
+\end{description}
+
+\subsection{Other parameters\label{Sect-CL-Other}}
+
+The parameters which specify the log-file name, etc., start
+with one of the characters `{\tt /}', `{\tt !}', `{\tt -}', `{\tt +}'
+followed by the {\em parameter identifier} (a single character) and the
+parameter value. The parameter identifier and the parameter
+value can be separated by `{\tt :}' or `{\tt =}' to achieve better
+readability. Example:
+\begin{itemize}
+\item[]
+{\tt vfcomb ... /l:vfcomb.log -u=c:\bs{}myinput;c:\bs{} !oOUTPUT\bs{} ...}
+\end{itemize}
+The previous version of \VFC{} used a lot of such parameters
+but now most of them are moved inside the script file.
+The following parameters can be specified at the command line:
+\begin{itemize}
+
+\item {\tt /u={\em list-of-dirs}} --- specifies the list of directories
+ separated by `{\tt ;}' which are used to search for the
+ input files if the input file is absent in the currect directory.
+ Several parameters {\tt /u} can be specified --- in this case
+ they are joined together. The maximum number of the search
+ directories is 20, and the new {\sf em\TeX}
+ directory search algorithm (see {\sf em\TeX} documentation)
+ is not implemented.
+
+\item {\tt /l={\em log-file-name}} --- specifies the name for the
+ {\tt .log} file which summarizes the operations performed
+ by {\sl VFComb}.
+ By default the name {\tt {\em scriptfile}.LOG} is used, but
+ if the script file is unknown when the first \VFC{} message is printed,
+ the {\tt .log} file has the name {\tt VFCOMB.LOG}.
+
+\item {\tt /o={\em output-dir}} --- specifies the directory
+ where the output files ({\tt .vpl} and {\tt .log} files)
+ are to be placed if their directories are not specified explicitly.
+
+\end{itemize}
+
+\subsection{Responce files\label{Sect-CL-RFiles}}
+
+The User can specify the construction
+`{\tt @{\em filename}}' among the list of the command line
+parameters which means that the contents of the file {\em filename}
+is added to the contents the command line.
+
+Each line of the responce file is interpreted as
+a separate parameter. The initial spaces
+of the line are omitted, and the characters after
+the first space which terminates the parameter are omitted too.
+The lines which start from the characters
+{\tt '\%'}, {\tt ';'}, {\tt '*'} and the empty lines are ignored.
+
+The responce files can be nested in each other
+(that is, the responce file can have the line {\tt @}{\em filename$1$}
+again) but the depth of their nesting cannot be greater than 5.
+
+\subsection{Environment variable {\tt VFCOMB}\label{Sect-CL-VFCOMB}}
+
+The User can define the DOS environment variable {\tt VFCOMB}
+using the command
+\begin{itemize}
+\item[] {\tt SET VFCOMB=......}
+\end{itemize}
+The contents of this variable is added
+{\em at the beginning} of the command line.
+As a result, the contents of the command line redefines
+the default specifications established by
+the environment variable {\tt VFCOMB}
+if some parameters are specified twice.
+
+\section{Script file commands\label{Sect-VFC}}
+
+The \VFC{} syntaxis is very close to the syntaxis of {\tt .vpl}
+files (it enables to economize the program code
+since \VFC{} is to read and to analyze the {\tt .vpl} files
+in any case).
+That is, the {\tt .tbf}, {\tt .pl} and {\tt .vpl} files are composed
+from the entries specified in a form
+\begin{itemize}
+\item[] {\tt (PROPERTYNAME VALUE)}
+\end{itemize}
+where the {\tt VALUE} can contain nested list structures as well.
+
+\bigskip
+
+The following extensions of {\tt .pl} and {\tt .vpl} syntaxis
+\cite{VF} are used by \VFC:
+\begin{itemize}
+\item new types of numerical constants;
+\item numerical variables;
+\item pseudo-arithmetical expressions;
+\item string variables and string expressions;
+\item conditional operators.
+\end{itemize}
+These commands are described in details in section~\ref{Sect-VFC-VPL}.
+
+\bigskip
+
+The commands specific to \VFC{} {\tt .tbf} files enable to
+specify the following data:
+\begin{itemize}
+\item the name of the virtual font (actually the name
+ of the output {\tt .vpl} file);
+\item the header data which is specified at the
+ beginning of the virtual font;
+\item the assignment (if necessary) the numerical values to
+ symbolic variables used in specification of other
+ user defined data;
+\item the table(s) for mapping
+ the characters of the real fonts into
+ the characters of the virtual font;
+\item the additional ligature table(s) (if present) which
+ contain the ligature and kerning information
+ for the pairs of characters corresponding
+ to different real fonts;
+\item the metric information,
+ ligature and kerning tables, etc.,
+ for the characters of the real fonts;
+\item the options which control the process
+ of creation of the virtual font.
+\end{itemize}
+
+\subsection{Extensions of {\tt .vpl} files\label{Sect-VFC-VPL}}
+
+The following commands and extensions of numerical data specifications
+are valid for \VFC{} script files ({\tt .tbf} files) and for {\tt .pl}
+and {\tt .vpl} files as well. These commands are processed inside
+\VFC{} ``mouth'' subroutines, and as a result they are invisible
+for the subroutines which analyze the syntaxis of {\tt .tbf}, {\tt .pl}
+and {\tt .vpl} files.
+
+The structure of the algorithm which analyzes the
+syntaxis of the input commands implies some restrictions on the way
+these {\em preprocessor} commands can be used in the source files.
+The {\em preprocessor} commands can be inserted at any point
+where the argument {\tt (......)} is suitable.
+So, they can be specified on the upper level of braces,
+they can be specified as the argument of the command
+{\tt (CHARACTER ...)} since it {\em has} the sub-list arguments,
+but they cannot be specified inside the command
+{\tt (CHECKSUM ...)} since there are {\em no} sub-list
+agruments for this command.
+
+\subsubsection{Numerical values\label{Sect-VFC-NUM}}
+
+The syntaxis of {\tt .vpl} files enables to use
+the numerical data of different forms.
+The numerical data can be specified as real (floating point) values,
+32-bit integer values and 8-bit integer values.
+Depending of the context, real or integer values
+should be used, and the range if the accepted
+integer values depends on context also (say, character code
+cannot be greater than 255 while the {\tt checksum} parameter
+is a full 32-bit integer).
+
+Each value starts with the prefix letter preceeded by a space
+and separated from the following actual value by a space
+(as usually, there may be as many spaces as you need
+at any place where at least one space is allowed).
+The prefix character defines the type of the numerical
+value, and the following types can be used:
+\begin{description}
+\item[\quad{\tt R} {\em value}] --- real values ({\tt R 0.27182});
+\item[\quad{\tt D} {\em value}] --- decimal integer values ({\tt D 123456});
+\item[\quad{\tt O} {\em value}] --- octal integer values ({\tt O 377});
+\item[\quad{\tt H} {\em value}] --- hexadecimal integer value ({\tt H 07FA});
+\item[\quad{\tt C} {\em character}] --- character numerical code ({\tt C x}
+ is the code value for character `{\tt x}');
+\item[\quad{\tt F} {\em ident}] --- Xerox {\em face code}, i.e.,
+ an integer value which is substituted by
+ a 3-letter identifier ({\tt F LIE} = {\tt D 17})
+ where the full list of the face codes assigned
+ to the integers from 0 to 17
+ is: MRR, MIR, BRR, BIR, LRR, LIR,
+ MRC, MIC, BRC, BIC, LRC, LIC,
+ MRE, MIE, BRE, BIE, LRE, LIE.
+\end{description}
+
+For \VFC{} input files in all places where the real values can be used,
+the integer values can be used also,
+and in all places where 32-bit integers are accepted, 8-bit
+integers are accepted too.
+\VFC{} also extends the set of prefix letters so that
+more general and more flexible expressions can be constructed:
+\begin{description}
+\item[\quad{\tt B} {\em value}] --- binary integer value ({\tt B 011111111010});
+\item[\quad{\tt V} {\em var-name}] --- the value of some numerical
+ (real or integer) variable ({\tt V FntSize});
+\item[\quad{\tt V-} {\em var-name}] --- the {\em negated} value
+ of some numerical
+ (real or integer) variable ({\tt V- FntSize});
+\item[\quad{\tt V+} {\em var-name}] (unary `$+$') --- just the same as
+ {\tt V} {\em var-name} ({\tt V+ FntSize});
+\item[\quad{\tt V\~{}} {\em var-name}] --- bit-by-bit {\em negated}
+ value of an integer variable ({\tt V\~{} FntSize});
+\item[\quad{\tt A+} {\em value1} {\em value2}]
+ --- addition of two (real or integer) values (`{\tt A+ D 2 D 2}' = 4);
+\item[\quad{\tt A-} {\em value1} {\em value2}]
+ --- subtraction of two (real or integer) values (`{\tt A- D 5 D 3}' = 2);
+\item[\quad{\tt A*} {\em value1} {\em value2}]
+ --- multiplication of two (real or integer) values
+ (`{\tt A* D 5 D 3}' = 8);
+\item[\quad{\tt A/} {\em value1} {\em value2}]
+ --- division (real or integer) of two (real or integer) values
+ (`{\tt A/ D 5 D 2}' = 2 for integers,
+ `{\tt A/ R 5.0 R 2.0}' = 2.5 for real values);
+\item[\quad{\tt A\%} {\em value1} {\em value2}]
+ --- the residue of integer division (mod) of two integer or real values
+ (`{\tt A\% R 5.0 R 2.0}' = 1.0);
+\item[\quad{\tt A!} {\em value1} {\em value2}]
+ --- bit-by-bit {\bf or} operation between two integer values
+ (`{\tt A! B 1010 B 0011}' = {\tt B 1011} = 11);
+\item[\quad{\tt A\&} {\em value1} {\em value2}]
+ --- bit-by-bit {\bf and} operation between two integer values
+ (`{\tt A\& B 1010 B 0011}' = {\tt B 0010} = 2);
+\item[\quad{\tt A\^{}} {\em value1} {\em value2}]
+ --- bit-by-bit {\bf xor} operation between two integer values
+ (`{\tt A\^{} B 1010 B 0011}' = {\tt B 1001} = 9);
+\item[\quad{\tt A>} {\em value1} {\em value2}]
+ --- right shift of integer {\em value1} by {\em value2} bits
+ (`{\tt A> B 1010 D 2}' = {\tt B 10} = 2);
+\item[\quad{\tt A<} {\em value1} {\em value2}]
+ --- left shift of integer {\em value1} by {\em value2} bits
+ (`{\tt A< B 1010 D 2}' = {\tt B 101000} = 40);
+\item[\quad{\tt -A} {\em value}]
+ --- unary `$-$'
+ (`{\tt -A D 5}' = -5, `{\tt -A D -5}' = 5);
+\item[\quad{\tt +A} {\em value}] --- unary `$+$'
+ (`{\tt +A {\em value}}' = {\em value});
+\item[\quad{\tt \~{}A} {\em value}]
+ --- bit-to-bit negated integer {\em value}
+ (`{\tt \~{}A B 1010}' = {\tt B 0101} = 5).
+\end{description}
+The arguments of the arithmetic expressions can be the arithmetic
+expressions again which enables to build complex arithmetic forms
+(similar to {\em polish notation}) --- unfortunately these forms
+are not suitable for fast human recognition.
+The arithmetic operations {\tt A!}, {\tt A\&},
+{\tt A\^{}}, {\tt A>}, {\tt A<}, {\tt \~{}A}, {\tt V\~{}}
+can be used for integer arguments and only at the places
+where the integer expression is required.
+
+\bigskip
+
+Although \VFC{} syntaxis enables to use complex string
+constructions (see section~\ref{Sect-VFC-STRING}),
+the values specified as the arguments
+of the prefix commands {\tt R}, {\tt D}, {\tt O}, {\tt F}, {\tt C},
+{\tt H}, {\tt B}, {\tt V} are always the primitive text strings
+(i.e., the sequences of characters terminated by a space
+or the closing braces `{\tt)}').
+It means that the expression `{\tt D @V ABC}' where
+{\tt ABC} is the string variable with the value {\tt "99"} is illegal
+although one can assume that it is to be equivalent
+to `{\tt D 99}'.
+
+There are some serious reasons not to allow the string expressions
+to be the arguments of the arithmetic constants.
+The simplest one is, for example, that in this case
+it is impossible to convert the {\em legal} expression {\tt C @} into
+numerical value {\tt D 64} as it is required by the rules
+of {\tt .vpl} files.
+Nevertheless, to enable to use such possibilities if necessary,
+the following prefix commands are added
+which enable to perform the conversion of
+the string expressions into numerical values:
+\begin{description}
+\item[\quad{\tt D@} {\em string}]
+ --- interprete string expression as a decimal integer value;
+\item[\quad{\tt O@} {\em string}]
+ --- interprete string expression as an octal integer value;
+\item[\quad{\tt H@} {\em string}]
+ --- interprete string expression as a hexadecimal integer value;
+\item[\quad{\tt B@} {\em string}]
+ --- interprete string expression as a binary integer value;
+\item[\quad{\tt F@} {\em string}]
+ --- interprete string expression as an integer {\em face code};
+\item[\quad{\tt C@} {\em string}]
+ --- interprete string expression as a {\em character code}
+ (string is to be a single character);
+\item[\quad{\tt R@} {\em string}]
+ --- interprete string expression as a real value;
+\item[\quad{\tt V@} {\em string}]
+ --- interprete string expression as a name of a variable
+ (real or integer).
+\end{description}
+
+
+\subsubsection{String values\label{Sect-VFC-STRING}}
+
+Some {\tt .pl} and {\tt .vpl} commands require text strings as their
+arguments (commands {\tt CODINGSCHEME}, {\tt FAMILY},
+{\tt VTITLE}, for example).
+\VFC{} extends the set of numerical values
+so that the string values, string variables and string
+expressions can be used together with the numerical ones.
+The specification of the {\em string variables}
+and {\em string expressions} makes the specification of
+some commands more flexible and
+enables to prepare efficient and compact \VFC{} scripts.
+
+The string constants (contrary to the numerical constants)
+have no special prefix --- they are just the sequences
+of characters which can be surrounded by spaces.
+ Contrary to that
+the string expressions start with the prefix `{\tt @}' ---
+which means that a string constant {\em cannot} starts
+from this letter but it does not restrict the flexibility
+in specification of the string constants too much.
+
+The following string operations can be used:
+\begin{description}
+\item[\quad{\tt @V} {\em var-name}]
+ --- the value of some string variable defined previously
+ ({\tt @V HlpString})
+ (essential note: the argument of the prefix command {\tt @V}
+ {\em can be} the string expression itself like that of the
+ prefix command {\tt V@} described at the previous section);
+\item[\quad{\tt @R} {\em real-value}]
+ --- the real numerical value converted to a text string
+ (`{\tt @R A/ R 1 R 7}' = {\tt "0.14285714286"}
+ since `{\tt A/ R 1 R 7}' = $1/7$);
+\item[\quad{\tt @D} {\em integer-value}]
+ --- the integer numerical value converted to decimal text
+ representation
+ (`{\tt @D O 377}' = {\tt "255"});
+\item[\quad{\tt @O} {\em integer-value}]
+ --- the integer numerical value converted to octal text
+ representation
+ (`{\tt @O D 255}' = {\tt "377"});
+\item[\quad{\tt @H} {\em integer-value}]
+ --- the integer numerical value converted to hexadecimal text
+ representation
+ (`{\tt @H D 255}' = {\tt "FF"});
+\item[\quad{\tt @B} {\em integer-value}]
+ --- the integer numerical value converted to binary text
+ representation
+ (`{\tt @H D 255}' = {\tt "11111111"});
+\item[\quad{\tt @F} {\em string-value}]
+ --- extract font name from the string
+ (`{\tt @F cmr10}' = {\tt "cmr"});
+\item[\quad{\tt @P} {\em string-value}]
+ --- extract the string part after the font name from the string
+ which for legal font names is the font design size in {\tt pt}
+ (`{\tt @P cmr10}' = {\tt "10"});
+\item[\quad{\tt @U} {\em string-value}]
+ --- convert the string value to uppercase form
+ (`{\tt @U cMr10}' = {\tt "CMR10"});
+\item[\quad{\tt @L} {\em string-value}]
+ --- convert the string value to lowercase form
+ (`{\tt @L cMr10}' = {\tt "cmr10"});
+\item[\quad{\tt @+} {\em string1} {\em string2}]
+ --- combines two strings into one string
+ (`{\tt @+ CMR 10}' = {\tt "CMR10"});
+\item[\quad{\tt @} {\em integer-value}] --- string which consists
+ from a single character with a specified code
+ ({\em integer-value} is in a range 0--255);
+\item[\quad{\tt @@} {\em integer-value}] --- string
+ of the specified length composed from spaces;
+\item[\quad{\tt @.}] --- empty string
+ (just the same as {\tt @@ D 0}).
+\end{description}
+As usually the numerical and string values can be the complex
+expressions, not only the elementary constants.
+
+The sequences of string constants and string expressions
+separated by spaces can be specified as the argument of
+the commands like {\tt FAMILY}, {\tt CODINGSCHEME}, {\tt VTITLE}.
+In this case the \VFC{} inserts a space
+between individual string element and expands string expressions
+to a form of a string constants. As a result the string composed
+from a sequence of words separated by spaces (where multiple subsequent
+spaces are compressed into one space) can be constructed
+and written into the output {\tt .vpl} file.
+
+
+\subsubsection{Variables\label{Sect-VFC-VAR}}
+
+As it was mentioned in sections \ref{Sect-VFC-NUM} and \ref{Sect-VFC-STRING},
+it is possible to allocate {\em variables} and to assign
+the {\em values} for them so that these values can be analysed and used
+later. The variables have different types: real, integer, character (byte)
+and string. The usage of the variables and the values assigned
+to the variables are to be in agreement with their type.
+
+The operator which allocates a new variable has a form:
+\begin{itemize}
+\item[] {\tt (VARIABLE ({\em var-type} {\em var-name} {\em var-value}))}
+\end{itemize}
+where
+\begin{itemize}
+\item {\em var-type} is one of the identifiers
+ {\tt REAL}, {\tt INTEGER}, {\tt CHARACTER}
+ ({\tt CHAR}, {\tt BYTE}) or {\tt STRING},
+ which define the type of the variable;
+\item {\em var-name} is the name of the variable
+ which is to be different from the names of the other
+ variables;
+\item {\em var-value} is the real, 32-bit integer,
+ 8-bit integer or string expression which defines
+ the initial value of the variable.
+\end{itemize}
+Example:
+\begin{itemize}
+\item[] {\tt (VARIABLE (CHARACTER Del D 127))}\\
+ {\tt (VARIABLE (REAL Kern\#KKK R -0.3333))}
+\end{itemize}
+
+It is possible to allocate more than one variable
+inside one operator {\tt VARIABLE} by specifying
+several sublists inside it:
+\begin{itemize}
+\item[] {\tt (VARIABLE}\\
+ \phantom{.}\qquad{\tt (CHARACTER Del D 127)}\\
+ \phantom{.}\qquad{\tt (REAL Kern\#KKK R -0.3333)}\\
+ \phantom{.}\qquad{\tt ......}\\
+ {\tt )}
+\end{itemize}
+
+The variable names are case-sensitive: the variables
+with the names {\tt Var} and {\tt vAr} are different.
+The variable names can be composed using {\em arbitrary} characters,
+not only latin letters and digits.
+Nevertheless, it is better not to use the names started from `{\tt @}' ---
+otherwise it is possible to get a strange behaviour
+for the prefix commands {\tt V@} and {\tt @V} (the arguments
+of these commands are analyzed as string expressions, and in this case
+the first letter `{\tt @}' is recognized as the prefix of string
+operastion).
+
+If the operator {\tt VARIABLE} uses the name which was already
+used, the warning message is printed and the old variable
+is deleted.
+The variable value can be changed without the warning message
+by the operator {\tt ASSIGN} which has the form
+\begin{itemize}
+\item[] {\tt (ASSIGN {\em var-name} {\em var-value})}
+\end{itemize}
+The type of the value {\em var-value} is to be in agreement
+with the trype of the variable defined earlier.
+Only one variable can be changed in one operator {\tt ASSIGN}.
+Example:
+\begin{itemize}
+\item[] {\tt (ASSIGN Del D 255)}\\
+ {\tt (ASSIGN Kern\#KKK R +1.51134)}
+\end{itemize}
+
+It is possible also to allocate new vartiables and to assign
+their initial values directly from the command line ---
+see section~\ref{Sect-CL-Var} for more details.
+
+\subsubsection{Conditional operators\label{Sect-VFC-IFF}}
+
+\VFC{} script files can contain the conditional
+{\tt IF-THEN-ELSE} operators. The following groups
+of conditional operators can be used:
+\begin{itemize}
+\item comparison of integer values;
+\item comparison of real values;
+\item comparison of string values;
+\item operators which check the existance of the variables;
+\item integer {\tt IF-CASE} operators;
+\item string {\tt IF-CASE} operators.
+\end{itemize}
+The depth of {\tt IF-THEN-ELSE}-operators cannot exceed 50.
+
+\bigskip
+
+The general form of {\tt IF}-operators is the following:
+\begin{itemize}
+\item[]{\tt (IF-{\em condition} {\em if-data})}\\
+ \phantom{WWW}{\tt .........}\\
+ \phantom{WWW}{\em commands}\\
+ \phantom{WWW}{\tt .........}\\
+ {\tt (ELSE)}\\
+ \phantom{WWW}{\tt .........}\\
+ \phantom{WWW}{\em commands}\\
+ \phantom{WWW}{\tt .........}\\
+ {\tt (ENDIF)}
+\end{itemize}
+The general form of {\tt IF-CASE}-operators is the following:
+\begin{itemize}
+\item[]{\tt (IF-CASE-{\em condition} {\em if-case-data})}\\
+ \phantom{WWW}{\tt (CASE {\em case-value1})}\\
+ \phantom{WWW}{\tt .........}\\
+ \phantom{WWW}{\em commands}\\
+ \phantom{WWW}{\tt .........}\\
+ \phantom{WWW}{\tt (BREAK)}\\
+ \phantom{WWW}{\tt (CASE {\em case-value2})}\\
+ \phantom{WWW}{\tt .........}\\
+ \phantom{WWW}{\em commands}\\
+ \phantom{WWW}{\tt .........}\\
+ \phantom{WWW}{\tt (BREAK)}\\
+ \phantom{WWW}{\tt .........}\\
+ {\tt (ELSE)}\\
+ \phantom{WWW}{\tt .........}\\
+ \phantom{WWW}{\em commands}\\
+ \phantom{WWW}{\tt .........}\\
+ {\tt (ENDIF)}
+\end{itemize}
+As usually, the {\tt ELSE}-block can be skipped together
+with the command {\tt (ELSE)}.
+
+\bigskip
+
+Actually {\tt IF-}commands and {\tt IF-CASE}-commands are the preprocessor
+operators which are used by \VFC{} read-data subroutines
+to skip some blocks of input data.
+{\tt IF}-commands transfer the block after {\tt IF-}command if some
+condition is fulfilled, and transfer {\tt ELSE}-block if it is not
+fulfilled.
+{\tt IF-CASE}-operators check that {\em if-case-data} is equal to
+{\em case-value} and transfer the corresponding block of commands
+further. The {\tt CASE}-block is to be
+terminated by {\tt (BREAK)} --- like {\sl C} conditional
+operators the {\tt CASE}-block is not terminated automatically
+when the next {\tt (CASE ...)} is encountered.
+
+\bigskip
+The following {\tt IF}-conditions and {\tt IF-CASE}-conditions can be used:
+\begin{description}
+\item[\quad\tt(IF {\em integer-value})]
+ --- checks that some integer expression is not equal to zero;
+\item[\quad\tt(IF-NOT {\em integer-value})]
+ --- checks that some integer expression is equal to zero;
+\item[\quad{\tt(IF-ONE {\em integer-value})},
+ {\tt(IF-TRUE {\em integer-value})}]
+ --- just the same as the command {\tt(IF {\em integer-value})};
+\item[\quad{\tt(IF-ZERO {\em integer-value})},
+ {\tt(IF-FALSE {\em integer-value})}]
+ --- just the same as the command {\tt(IF-NOT {\em integer-value})};
+\item[\quad\tt(IF-DEF {\em var-name})]
+ --- checks that some variable is defined already;
+\item[\quad\tt(IF-NDEF {\em var-name})]
+ --- checks that some variable is not defined still;
+\item[\quad{\tt(IF-EQ {\em integer$_1$} {\em integer$_2$})}]
+ --- checks that $\hbox{\em integer}_1=\hbox{\em integer}_2$;
+\item[\quad{\tt(IF-NE {\em integer$_1$} {\em integer$_2$})}]
+ --- checks that $\hbox{\em integer}_1\ne\hbox{\em integer}_2$;
+\item[\quad{\tt(IF-GT {\em integer$_1$} {\em integer$_2$})}]
+ --- checks that $\hbox{\em integer}_1>\hbox{\em integer}_2$;
+\item[\quad{\tt(IF-LT {\em integer$_1$} {\em integer$_2$})}]
+ --- checks that $\hbox{\em integer}_1<\hbox{\em integer}_2$;
+\item[\quad{\tt(IF-GE {\em integer$_1$} {\em integer$_2$})}]
+ --- checks that $\hbox{\em integer}_1\ge\hbox{\em integer}_2$;
+\item[\quad{\tt(IF-LE {\em integer$_1$} {\em integer$_2$})}]
+ --- checks that $\hbox{\em integer}_1\le\hbox{\em integer}_2$;
+\item[\quad{\tt(IFR-EQ {\em real$_1$} {\em real$_2$})}]
+ --- compare two real values: $\hbox{\em real}_1=\hbox{\em real}_2$;
+\item[\quad{\tt(IFR-NE {\em real$_1$} {\em real$_2$})}]
+ --- compare two real values: $\hbox{\em real}_1\ne\hbox{\em real}_2$;
+\item[\quad{\tt(IFR-GT {\em real$_1$} {\em real$_2$})}]
+ --- compare two real values: $\hbox{\em real}_1>\hbox{\em real}_2$;
+\item[\quad{\tt(IFR-LT {\em real$_1$} {\em real$_2$})}]
+ --- compare two real values: $\hbox{\em real}_1<\hbox{\em real}_2$;
+\item[\quad{\tt(IFR-GE {\em real$_1$} {\em real$_2$})}]
+ --- compare two real values: $\hbox{\em real}_1\ge\hbox{\em real}_2$;
+\item[\quad{\tt(IFR-LE {\em real$_1$} {\em real$_2$})}]
+ --- compare two real values: $\hbox{\em real}_1\le\hbox{\em real}_2$;
+\item[\quad{\tt(IFS-EQ {\em string$_1$} {\em string$_2$})}]
+ --- compare two text strings: $\hbox{\em string}_1=\hbox{\em string}_2$;
+\item[\quad{\tt(IFS-NE {\em string$_1$} {\em string$_2$})}]
+ --- compare two text strings: $\hbox{\em string}_1\ne\hbox{\em string}_2$;
+\item[\quad{\tt(IFS-GT {\em string$_1$} {\em string$_2$})}]
+ --- compare two text strings: $\hbox{\em string}_1>\hbox{\em string}_2$;
+\item[\quad{\tt(IFS-LT {\em string$_1$} {\em string$_2$})}]
+ --- compare two text strings: $\hbox{\em string}_1<\hbox{\em string}_2$;
+\item[\quad{\tt(IFS-GE {\em string$_1$} {\em string$_2$})}]
+ --- compare two text strings: $\hbox{\em string}_1\ge\hbox{\em string}_2$;
+\item[\quad{\tt(IFS-LE {\em string$_1$} {\em string$_2$})}]
+ --- compare two text strings: $\hbox{\em string}_1\le\hbox{\em string}_2$;
+\item[\quad{\tt(IF-CASE {\em integer-value})}]
+ --- integer {\tt IF-CASE}-operator that checks that
+ the {\em integer-value} is equal to the argument of some
+ {\tt (CASE {\em integer})} command in its body;
+\item[\quad{\tt(IF-CASE {\em integer-value})}]
+ --- integer {\tt IF-CASE}-operator that checks that
+ the {\em integer-value} is equal to the argument of some
+ {\tt (CASE {\em int-value})} command specified
+ after it and before closing {\tt (ENDIF)} operator;
+\item[\quad{\tt(IFS-CASE {\em string-value})}]
+ --- string {\tt IF-CASE}-operator that checks that
+ the {\em string-value} is equal to the argument of some
+ {\tt (CASE {\em string})} command specified
+ after it and before closing {\tt (ENDIF)} operator.
+\end{description}
+Similarly to prefix commands {\tt V@} and {\tt @V}
+(see sections \ref{Sect-VFC-NUM} and \ref{Sect-VFC-STRING}),
+the arguments of the conditions {\tt IF-DEF} and {\tt IF-NDEF} are
+analyzed as the string expressions, not as the string constants
+(see section~\ref{Sect-VFC-STRING}).
+The arguments of the string {\tt IFS}-commands
+and {\tt IFS-CASE}-command are also processed as the string expressions
+and the strings are converted to uppercase form before comparison.
+
+\bigskip
+Examples:
+\begin{itemize}
+\item[]
+ {\tt (IF-DEF FONTNAME)}\\
+ \phantom{WWW}{\tt (MESSAGE The variable FONTNAME = @V FONT)}\\
+ {\tt (ELSE)}\\
+ \phantom{WWW}{\tt (VARIABLE (STRING FONTNAME CMR10))}\\
+ {\tt (ENDIF)}
+\item[]
+ {\tt (IF-TRUE V monospace)}\\
+ \phantom{WWW}{\tt (MESSAGE `MONOSPACE' mode is active)}\\
+ {\tt (ELSE)}
+ \phantom{WWW}{\tt (LOADFILE kerndata.tbf)}\\
+ {\tt (ENDIF)}
+\item[]{\tt (IF-CASE V FONTPITCH)}\\
+ \phantom{}{\tt (CASE D 5)}\\
+ \phantom{WWW}{\tt (ASSIGN u\# R 12.5}\\
+ \phantom{WWW}{\tt (BREAK)}\\
+ \phantom{}{\tt (CASE D 6)}\\
+ \phantom{WWW}{\tt (ASSIGN u\# R 14.0}\\
+ \phantom{WWW}{\tt (BREAK)}\\
+ \phantom{}{\tt .........}\\
+ {\tt (ELSE)}\\
+ \phantom{WWW}{\tt (MESSAGE Unknown FONTPITCH value)}\\
+ \phantom{WWW}{\tt (HALTPGM)}\\
+ {\tt (ENDIF)}
+\end{itemize}
+
+
+\subsubsection{Other operators\label{Sect-VFC-OTHER}}
+
+There are other commands
+which can be useful for the logical structuring
+of the input stream of \VFC{} commands:
+\begin{description}
+\item[\quad\tt(COMMENT {\em text})] --- skip the {\em text}
+ which can include arbitrary \VFC{} commands
+ provided that the opening and closing braces
+ `{\tt (}' and `{\tt )}' are balanced correctly.
+\item[\quad\tt(MESSAGE {\em text})] --- print the {\em text}
+ which may be the combination of string elements and
+ string expressions (see section~\ref{Sect-VFC-STRING})
+ separated by spaces, and can include opening and closing
+ braces `{\tt (}' and `{\tt )}' if they are balanced
+ correctly, but it cannot exceed 255 characters.
+\item[\quad\tt(TYPEOUT {\em text})] --- just the same as
+ {\tt (MESSAGE {\em text})}.
+\item[\quad{\tt(LOADFILE {\em filename})} or {\tt(LOAD {\em filename})}]
+ --- insert at this place the contents of the file {\em filemane}
+ ({\em filename} can be a string expression)
+ from the beginning and up to the end or up to the first command
+ {\tt (ENDLOAD)} encountered in it.
+ If the extension of the {\em filename} is not specified
+ explicitly,
+ the extension {\tt .tbf} is added if the command {\tt LOADFILE}
+ is encountered during the processing of script file {\tt .tbf},
+ and the extension {\tt .pl} is added if the command {\tt LOADFILE}
+ is encountered during the processing of the {\tt .pl}
+ corresponding to a real font metric data.
+\item[\quad\tt(ENDLOAD)] --- stop to read the contents
+ of the current input file and return the the previous file.
+\item[\quad\tt(ENDINPUT)] --- stop to read the input data stream;
+\item[\quad\tt(HALTPGM)] --- stop the program.
+\end{description}
+
+
+\subsection{{\tt MAPFONT} or {\tt FONT}\label{Sect-VFC-MAPFONT}}
+
+The command {\tt MAPFONT} describes the real fonts which are
+used in the virtual font. One {\tt MAPFONT} command should be
+specified for each real font used in the virtual font.
+
+The command {\tt MAPFONT} assignes the integer {\em index}
+to the real font, and all the commands which use the references to
+the real fonts refer to this {\em index} value. It can also
+specify the processing modes for this font
+(some of them overwrites the modes specified at the command
+{\tt OPTION} described at the section~\ref{Sect-VFC-OPTION})
+and the standard mapping table for the characters
+extracted from this font --- so that the commands
+{\tt CHARACTER} deascribed at section~\ref{Sect-VFC-CHAR}
+becomes unnecessary to great extend.
+
+The command {\tt MAPFONT} has the format:
+\begin{itemize}
+\item[]
+{\tt (MAPFONT {\em index}
+({\em option}$_1$) ({\em option}$_2$)... )}
+\end{itemize}
+where the {\em index} is the integer value.
+The valid {\em options} are:
+\begin{description}
+
+\item[\quad{\tt(FONTNAME {\em filename})} or {\tt(NAME {\em filename})}]
+ --- specifies the name of the real font (obligatory parameter).
+
+\item[\quad{\tt(TFMINPUT {\em filename})}]
+ --- specifies the name of the {\tt .pl} file which is used
+ to load data about this font. The {\tt .pl} file {\tt $<$fontname$>$.tbf}
+ is used if this parameter is not specified where {\tt $<$fontname$>$}
+ is value of the parameter {\tt FONTNAME} defined above.
+
+ The command {\tt (TFMINPUT EMPTY)} means that this is the font
+ which contains no characters at all.
+ The command {\tt (TFMINPUT DUMMY)} means that this is the font
+ which contains all the characters but with zero metric information
+ and without {\tt VARCHAR} and {\tt NEXTLARGER} attributes.
+ In both cases no {\tt .pl} file is read by \VFC{} --- the
+ necessary font information is generated automatically.
+
+\item[\quad{\tt(FONTAT {\em real-value})}] --- specifies the parameter
+ {\tt FONTAT} transferred to {\tt .vpl} file
+ (the default value {\tt (FONTAT R 1.0)}).
+ This parameter is also used to re-calculate {\em dimensional}
+ parameters from the {\tt .pl} file according to
+ {\tt DESIGNUNITS} and {\tt DESIGNSIZE} from the
+ header of the {\tt .vpl} file.
+
+\item[\quad{\tt(FONTAREA {\em text-string})}] --- specifies the parameter
+ {\tt FONTAREA} transferred to {\tt .vpl} file.
+ This parameter specifies the explicit directory
+ for corresponding real font, and as a rule is not used
+ since it restricts the flexibility of font
+ specification \cite{VF}.
+
+\item[\quad{\tt(CHECKSUM {\em 32-bit-integer})}] --- specifies
+ explicitly the value {\tt FONTCHECKSUM} --- the {\em checksum}
+ of the {\tt .tfm} file of this real font stored in the {\tt .vpl} file.
+ Usually it is not necessary to specify this parameter
+ explicitly since its correct value is copied from the {\tt .pl} file
+ with the font metric data.
+ When the {\sl DVI}-driver loads the virtual and the real fonts,
+ the {\tt FONTCHECKSUM} from the {\tt .vpl} file is compared
+ with the {\em checksum} calculated for the {\tt .tfm} files,
+ and the warning message is printed if these values are different
+ (this message shows that the versions of {\tt .vf} and {\tt .tfm}
+ files may be different or that the {\tt .tfm} file may be damaged).
+
+\item[\quad{\tt(FULL)}], {\tt(7TO8)}, {\tt(8TO7)}, {\tt(7TO7)}, {\tt(8TO8)},
+ {\tt(JWNCYR)}, {\tt(CYRTUG)} --- these parameters specify
+ the default mapping table for this real font:
+ according to some rule the characters of the virtual font
+ are mapped into the characters of this real font if
+ these characters of the real font are defined and if the
+ corresponding positions of the virtual font are not
+ occupied still.
+\begin{description}
+\item[\quad{\tt(FULL)}] --- include in the virtual font
+ all the characters from this font so that the character codes
+ are mapped to themselves;
+\item[\quad{\tt(7TO8)}] --- include in the virtual font
+ the characters 0--127 from the real font so that
+ the character {\tt D 0} of the real font corresponds to
+ the character {\tt D 128} of the virtual font,
+ the character {\tt D 1} of the real font corresponds to
+ the character {\tt D 129} of the virtual font, etc.;
+\item[\quad{\tt(8TO7)}] --- include in the virtual font
+ the characters 128--255 from the real font so that
+ the character {\tt D 128} of the real font corresponds to
+ the character {\tt D 0} of the virtual font,
+ the character {\tt D 129} of the real font corresponds to
+ the character {\tt D 1} of the virtual font, etc.;
+\item[\quad{\tt(7TO7)}] --- include in the virtual font
+ the characters 0--127 from this font so that the character codes
+ are mapped to themselves;
+\item[\quad{\tt(8TO8)}] --- include in the virtual font
+ the characters 128--255 from this font so that the character codes
+ are mapped to themselves;
+\item[\quad{\tt(CYRTUG)}] --- include in the virtual font
+ the characters 128--175, 224--244 from this font
+ so that the character codes
+ are mapped to themselves ({\sl CYRTUG} coding scheme
+ for cyrillic characters);
+\item[\quad{\tt(JWNCYR)}] --- include in the virtual font
+ the characters 128--175, 224--244 from this font
+ so that the cyrillic characters for {\sl WNCYR} coding
+ scheme are mapped to cyrillic characters
+ for {\sl CYRTUG} coding scheme.
+\end{description}
+
+\item[\quad{\tt (TRACE)}, {\tt (NOTRACE)}, {\tt (TRACE D {\em integer})}] ---
+specifies the level for printing of the debugging information
+when the ligature tables of this font are processed by \VFC.
+
+\item[\quad{\tt(LIGTABLE)} and {\tt(NOLIGTABLE)}] --- include
+ or do not include in the virtual font
+ the ligature tables of this font.
+
+\item[\quad\tt(PHANTOM)] --- assign attribute {\tt PHANTOM}
+ to all characters which are mapped to this font,
+ for which the attributes {\tt PHANTOM} or {\tt NOPHANTOM}
+ are not specified explicitly.
+
+\item[\quad\tt(NOPHANTOM)] --- switches off for this font the option
+ {\tt PHANTOM} specified by the command {\tt OPTION}
+ (see section~\ref{Sect-VFC-OPTION}).
+
+\item[\quad{\tt(AUTOTFMWIDTH)} and {\tt(NOAUTOTFMWIDTH)}]
+ --- for the characters which are mapped to this font
+ and for which the attributes {\tt SIZECHAR} and {\tt SIZEFONT}
+ are specified, \VFC{} adds automatically the attribute {\tt AUTOTFMWIDTH}
+ or the attribute {\tt NOAUTOTFMWIDTH}, respectively,
+ if such attribute is not specified explicitly
+ (see command {\tt CHARACTER} (section~\ref{Sect-VFC-CHAR}
+ for more details).
+
+\item[\quad\tt(AUTOTFMCHAR {\em font-index})]
+ --- for the characters which are mapped to this font
+ without explicit attributes
+ {\tt TFMFONT}, {\tt TFMCHAR} or {\tt NOTFMDATA}
+ (see command {\tt CHARACTER} (section~\ref{Sect-VFC-CHAR}
+ for more details), the attributes
+ \begin{itemize}
+ \item[]
+ {\tt (TFMFONT D {\em font-index})} {\tt (TFMCHAR D {\em char-code})}
+ \end{itemize}
+ are added automatically.
+
+\item[\quad\tt(AUTOTFMMAPCHAR {\em font-index})]
+ --- for the characters which are mapped to this font
+ without explicit attributes
+ {\tt TFMFONT}, {\tt TFMCHAR} or {\tt NOTFMDATA}
+ (see command {\tt CHARACTER} (section~\ref{Sect-VFC-CHAR}
+ for more details), the attributes
+ \begin{itemize}
+ \item[]
+ {\tt (TFMFONT D {\em font-index})} {\tt (TFMCHAR D {\em mapchar-code})}
+ \end{itemize}
+ are added automatically.
+
+\item[\quad\tt(INCLUDECHAR ({\em ident$_1$})({\em ident$_2$}) ...)]
+ --- specifies for this font the mode of automatical including
+ new charascters.
+ The following {\em ident} values can be used:
+ \begin{description}
+ \item[\quad\tt ALLCHAR] --- include automatically
+ all the characters from the real fonts even it is not
+ specified explicitly in {\tt CHARACTER} or {\tt MAPFONT}
+ commands;
+ \item[\quad\tt LIGTABLE] --- include in the virtual font
+ the characters which are listed in
+ the ligature tables specified for already included characters;
+ \item[\quad\tt KRNDATA] --- include in the virtual font
+ the characters which are listed in a kerning data
+ of the ligature tables specified for already included characters;
+ \item[\quad\tt LIGDATA] --- include in the virtual font
+ the characters which are listed in a ligature data
+ of the ligature tables specified for already included characters;
+ \item[\quad\tt NOLIGTABLE] --- do not include in the virtual font
+ automatically the characters from the ligature table;
+ \item[\quad\tt NEXTCHAR] --- include automatically
+ new characters which are are connected
+ by the attribute {\tt NEXTLARGER} with the
+ already included characters;
+ \item[\quad\tt NONEXTCHAR] --- do not include
+ new characters from the real fonts which are connected
+ by the attribute {\tt NEXTLARGER} with the
+ already included characters.
+ \end{description}
+
+\item[\quad\tt(NEWDISCARD)] --- the underfined characters of this font
+ are marked automatically by the attribute {\tt DISCRAD}
+ in the global mapping table (see commands {\tt CHARACTER}
+ (section~\ref{Sect-VFC-CHAR}) and {\tt DISCARDCHAR}
+ (section~\ref{Sect-VFC-DISCARD})).
+
+\item[\quad\tt(NONEWDISCARD)] --- the underfined characters of this font
+ are {\em not} marked automatically by the attribute {\tt DISCRAD}
+ in the global mapping table (see commands {\tt CHARACTER}
+ (section~\ref{Sect-VFC-CHAR}) and {\tt DISCARDCHAR}
+ (section~\ref{Sect-VFC-DISCARD})).
+
+\end{description}
+Examples:
+\begin{itemize}
+\item[]{\tt (MAPFONT D 0 (NAME CMR10) (7TO7) (NOLIGTABLE) ... )}\\
+ {\tt (MAPFONT D 1 (NAME LHR10) (JWRCYR) (INCLUDELIG) ... )}\\
+ {\tt ......}
+\end{itemize}
+
+
+\subsection{{\tt CHARACTER} or {\tt CHAR}\label{Sect-VFC-CHAR}}
+
+The command {\tt CHARACTER} specifies the mapping table between
+the characters of the real fonts and the characters of the
+virtual fonts. It can also specify
+\begin{itemize}
+\item
+the sequence of {\sl DVI}-commands substituted
+instead of the character from the virtual font;
+\item
+the ``phantom'' output for some characters of the virtual font;
+\item
+the dimensional parameters (width, height, depth, italic correction)
+of the character if they are not copied from the real font metric data
+and are not calculated automatically for the sequences of {\sl DVI}-commands;
+\item
+the correction of the {\sl DVI}-pen position if the width of
+the character from the real font is not equal to the
+width specified in {\tt .tfm} file of the virtual font;
+\item
+special attributes which are treated by \VFC{} then
+the default mapping tables
+(see command {\tt MAPFONT} from the section~\ref{Sect-VFC-MAPFONT})
+and the automatical including of new characters
+joined with already included characters
+(see the commands {\tt MAPFONT/INCLUDECHAR} (section~\ref{Sect-VFC-MAPFONT})
+and {\tt OPTION/INCLUDECHAR} (section~\ref{Sect-VFC-OPTION})
+are used.
+\end{itemize}
+
+The command {\tt CHARACTER} has the following format:
+\begin{itemize}
+\item[]{\tt (CHARACTER {\em char-code} ({\em parm$_1$}) ({\em parm$_2$})
+ ({\em parm$_3$}) ...)}
+\end{itemize}
+The 8-bit integer value {\em char-code}
+(see section~\ref{Sect-VFC-NUM}) defines
+the character of the virtual font which properties
+are defined by the sub-list {\em parameters}.
+The {\em parameters} can be distributed among
+several {\tt CHARACTER} commands with the same
+8-bit code --- in this case they are joined together
+in one list.
+
+The following {\em parameters} can be used:
+\begin{description}
+
+\item[\quad{\tt (FONT {\em index})} or {\tt (SELECTFONT {\em index})}]
+ --- specifies the real font into which this character is mapped.
+ The real font is identified by the integer value
+ {\em index}, and the relation between the {\em index} and
+ the name of the real font is defined by the command {\tt MAPFONT}
+ (see section~\ref{Sect-VFC-MAPFONT}).
+ The default value for {\tt FONT} is set by the command {\tt SETMAPFONT}
+ (see section~\ref{Sect-VFC-SETTFMFONT}).
+
+\item[\quad{\tt (CHAR {\em char-code})} or {\tt (SETCHAR {\em char-code})}]
+ --- specifies the character of the real font into which this character
+ is mapped (the real font is defined by the command {\tt FONT}
+ described above). If the metric data for this character
+ are not specified explicitly in {\tt .tbf} file
+ (see the commands below), it is copied from the {\tt .pl}
+ file corresponding to the real font --- or from the
+ character from the real font which is specified by the
+ commands {\tt TFMFONT} and {\tt TFMCHAR} if these
+ attributes are defined.
+
+\item[\quad{\tt (CHARWD {\em real-value})}] ---
+ specifies the {\em width} of the virtual character.
+
+\item[\quad{\tt (CHARHT {\em real-value})}] ---
+ specifies the {\em height} of the virtual character.
+
+\item[\quad{\tt (CHARDP {\em real-value})}] ---
+ specifies the {\em depth} of the virtual character.
+
+\item[\quad{\tt (CHARIC {\em real-value})}] ---
+ specifies the {\em italic correction} of the virtual character.
+
+\item[\quad{\tt (TFMFONT {\em index})} and {\tt (TFMCHAR {\em char-code})}]
+ --- these two commands specify the real font and the
+ character from which the metric information is copied.
+ Their syntaxis is similar to the commands {\tt FONT}/{\tt CHAR}
+ described above. The default value for {\tt TFMFONT} is
+ set by the command {\tt SETTFMFONT}
+ (see section~\ref{Sect-VFC-SETTFMFONT}).
+
+ The attributes {\tt TFMFONT}/{\tt TFMCHAR} are useful
+ if it is necessary to make the virtual fonts which are used
+ for visualization of the {\tt .dvi} file with PostScript fonts
+ which are substituted by some {\tt .pk} fonts with a different
+ metric properties (see section~\ref{Sect-PostScript} for more details).
+ The commands {\tt MAPFONT} (section~\ref{Sect-VFC-MAPFONT})
+ and {\tt OPTION} (section~\ref{Sect-VFC-OPTION}) can specify
+ these atributes by default for the character if there are no
+ explicit commands {\tt TFMFONT}, {\tt TFMCHAR} or {\tt NOTFMDATA}.
+
+\item[\quad{\tt (NOTFMDATA)}]
+ --- specifies that the attributes {\tt TFMFONT} and
+ {\tt TFMCHAR} cannot be added automatically to this character
+ (see corresponding arguments of the commands
+ {\tt MAPFONT} (section~\ref{Sect-VFC-MAPFONT})
+ and {\tt OPTION} (section~\ref{Sect-VFC-OPTION})).
+
+\item[\quad{\tt (AUTOTFMWIDTH)} and {\tt (NOUTOTFMWIDTH)}] ---
+ these commands switch on/off the automatic correction
+ of the width of the virtual character if the metric information
+ from {\tt .vpl} and {\tt .tfm} files for the virtual font
+ is different from that specified for the real font characters
+ (see the commands {\tt TFMFONT}/{\tt TFMCHAR} described above
+ and the section~\ref{Sect-PostScript} for more information).
+
+ The default value of this attribute can be specified using
+ the commands {\tt MAPFONT} (section~\ref{Sect-VFC-MAPFONT})
+ and {\tt OPTION} (section~\ref{Sect-VFC-OPTION}).
+ If no {\tt (AUTOTFMWIDTH)} and {\tt (NOAUTOTFMWIDTH)}
+ attributes are specified using these commands,
+ the attribute {\tt (AUTOTFMWIDTH)} is assumed.
+
+\item[\quad{\tt (PKWIDTH {\em width})}] ---
+ specifies the width of the character
+ ({\em width} is the positive real value)
+ which is used to correct the {\sl DVI}-pen position
+ when the attribute {\tt AUTOTFMWIDTH} is active
+ and the commands {\tt TFMFONT}/{\tt TFMCHAR} are specified.
+ The value specified by {\tt PKWIDTH} substitutes the data taken from
+ the character referenced by the commands
+ {\tt FONT}/{\tt CHAR} or the data calculated by \VFC{}
+ for the sequence of {\sl DVI}-commands
+ (see the command {\tt SETDVI} described below).
+
+\item[\quad{\tt (DVI {\em list-of-arguments})} or
+ {\tt (SETDVI {\em list-of-arguments})}]
+ --- specifies the sequence of {\sl DVI}-commands substituted
+ instead of the character of the virtual font.
+ The arguments of this command are described in
+ section~\ref{Sect-VFC-CHAR1}.
+
+ The metric data for this virtual character can be
+ specified explicitly by the commands {\tt CHARWD},
+ {\tt CHARHT}, {\tt CHARDP}, {\tt CHARIC} described above.
+ if these data are absent,
+ \begin{itemize}
+ \item
+ if the commands {\tt FONT} and {\tt CHAR}
+ or if the commands {\tt TFMFONT} and {\tt TFMCHAR} are defined,
+ the metric data for the virtual character
+ is copied from corresponding character of the
+ corresponding {\tt .pl} file.
+ \item
+ if commands {\tt FONT}/{\tt CHAR} and {\tt TFMFONT}/{\tt TFMCHAR}
+ are absent, the values {\tt CHARWD},
+ {\tt CHARHT} and {\tt CHARDP} are calculated
+ automatically according to the sequence of {\sl DVI}-commands,
+ and {\tt CHARIC} is set to zero.
+ \end{itemize}
+ If the commands {\tt TFMFONT}/{\tt TFMCHAR} are specified
+ and if {\tt AUTOTFMWIDTH} mode is active
+ (by default or explicitly specified), the correction of
+ the width of the virtual character is is performed using
+ \begin{itemize}
+ \item the value of the parameter {\tt PKWIDTH}
+ if it is specified explicitly;
+ \item the width of the character specified by the
+ commands {\tt FONT}/{\tt CHAR} if these commands are
+ defined for the virtual character;
+ \item the width of the the sequence of {\sl DVI}-commands
+ which is calculated automatically by \VFC.
+ \end{itemize}
+
+\item[\quad{\tt (VARCHAR {\em list-of-arguments})}]
+ --- specifies the extensible character
+ (usually the mathematical delimiter).
+ The arguments of this command are described in
+ section~\ref{Sect-VFC-CHAR2}.
+ The command {\tt VARCHAR} cannot be used together with the
+ command {\tt NEXTLARGER}.
+
+\item[\quad{\tt (NEXTLARGER {\em char-code})}] ---
+ specifies the character (usually the mathematical delimiter)
+ which is ``larger'' than the current character.
+ The references {\tt NEXTLARGER} cannot form the infinite cycles.
+ The command {\tt NEXTLARGER} cannot be used together with the
+ command {\tt VARCHAR}.
+
+\item[\quad{\tt (DISCARD)}] ---
+ specify the attribute {\tt DISCARD} for the virtual font character
+ which means that this character cannot be used by default
+ mapping tables (see command {\tt MAPFONT})
+ and by automatic including of new virtual font characters
+ (see commands {\tt MAPFONT/INCLUDECHAR}
+ (section~\ref{Sect-VFC-MAPFONT})
+ and {\tt OPTION/INCLUDECHAR}
+ (section~\ref{Sect-VFC-OPTION}).
+
+\item[\quad{\tt (UNKNOWN)}] ---
+ default attribute which means that the character is not used
+ by the virtual font, but it can be added automatically
+ when the default mapping table is used (see command {\tt MAPFONT}
+ described at the section~\ref{Sect-VFC-OPTION})
+ or during the automatic including of new characters to the
+ virtual font.
+
+\item[\quad{\tt (PHANTOM)}] --- specifies that the virtual
+ character is displayed as a blank space.
+ It means that instead of the output of the real font character
+ or of the sequence of {\sl DVI}-commands, the shift of
+ the {\sl DVI}-pen position at a distance equal to
+ the width of the virtual character is performed.
+ Corresponding {\sl DVI}-commands are generated and inserted
+ in {\tt .vpl} file automatically by \VFC.
+ The attribute {\tt PHANTOM} can be specified by
+ defaul using the commands {\tt MAPFONT}
+ (see section~\ref{Sect-VFC-MAPFONT})
+ and {\tt OPTION} (see section~\ref{Sect-VFC-OPTION}).
+
+\item[\quad{\tt (NOPHANTOM)}] --- swithches off the
+ attribute {\tt PHANTOM} specified by default
+ with the help of the commands {\tt MAPFONT/PHANTOM} and
+ {\tt OPTION/PHANTOM}.
+
+\end{description}
+Similar to dimensional data specified
+for the {\tt .tbf} commands {\tt LIGTABLE}, {\tt HEADER}, etc.,
+the dimensional parameters of the commands
+{\tt CHARWD}, {\tt CHARHT}, {\tt CHARDP}, {\tt CHARIC},
+{\tt PKWIDTH} and of the sub-commands of the command {\tt SETDVI}
+are specified using the values {\tt TBFUNITS} and {\tt TBFSIZE}
+from the {\tt .tbf} file (see section~\ref{Sect-VFC-LUNIT}).
+
+\subsubsection{{\tt CHARACTER/SETDVI}\label{Sect-VFC-CHAR1}}
+
+The parameter {\tt DVI} of the command {\tt CHARACTER} specifies
+the the sequence of {\sl DVI}-commands substituted
+instead of the character from the virtual font.
+It has the format
+\begin{itemize}
+\item[]{\tt (SETDVI}\\
+\phantom{WWW}{\tt({\em command$_1$})}\\
+\phantom{WWW}{\tt({\em command$_2$})}\\
+\phantom{WWW}{\tt ......}\\
+ {\tt )}
+\end{itemize}
+where the following {\em commands} can be used:
+\begin{description}
+\item[\quad{\tt (FONT {\em index})} or {\tt (SELECTFONT {\em index})}]
+ --- makes this font active for the subsequent
+ {\tt CHAR} commands. The font is identified by the
+ integer value {\em index}, and the name of the
+ font with this index is defined using the command
+ {\tt MAPFONT} (see section~\ref{Sect-VFC-MAPFONT}).
+ if there are commands {\tt CHAR} in the sequence
+ of {\sl DVI}-commands, the command {\tt FONT}
+ is to be used before the first {\tt CHAR}.
+\item[\quad{\tt (CHAR {\em char-code})} or {\tt (SETCHAR {\em char-code})}]
+ --- output the character {\em char-co\-de} from the real
+ font specified by the last command {\tt FONT} starting
+ from the current {\sl DVI}-pen position and to move
+ the {\sl DVI}-pen position to the right at the distance equal
+ to the width of the character.
+\item[\quad{\tt (RULE {\em height} {\em width})}
+ or {\tt (SETRULE {\em height} {\em width})}]
+ --- output the {\em rule} (i.e., a black rectangle)
+ with the specified height and width ({\em height} and {\em width}
+ are positive real values) starting
+ from the current {\sl DVI}-pen position and to move
+ the {\sl DVI}-pen position to the right at the distance equal
+ to the rule width.
+\item[\quad{\tt (RIGHT {\em dist})} or {\tt (MOVERIGHT {\em dist})}]
+ --- move current {\sl DVI}-pen position to the {\em right} at the
+ specified distance {\em dist} which is to be a real
+ (positive or negative) value.
+\item[\quad{\tt (LEFT {\em dist})} or {\tt (MOVELEFT {\em dist})}]
+ --- move current {\sl DVI}-pen position to the {\em left} at the
+ specified distance {\em dist} which is to be a real
+ (positive or negative) value.
+\item[\quad{\tt (UP {\em dist})} or {\tt (MOVEUP {\em dist})}]
+ --- move current {\sl DVI}-pen position {\em up} at the
+ specified distance {\em dist} which is to be a real
+ (positive or negative) value.
+\item[\quad{\tt (DOWN {\em dist})} or {\tt (MOVEDOWN {\em dist})}]
+ --- move current {\sl DVI}-pen position {\em down} at the
+ specified distance {\em dist} which is to be a real
+ (positive or negative) value.
+\item[\quad{\tt (PUSH)}] --- remember the current
+ {\sl DVI}-pen position (to be restored by the subsequent
+ command {\tt (POP)}.
+\item[\quad{\tt (POP)}] --- restore the
+ {\sl DVI}-pen position saved earlier by the
+ command {\tt (PUSH)}. The commands {\tt (PUSH)} and
+ {\tt (POP)} should be properly nested and balanced like
+ the parentheses.
+\item[\quad{\tt (SPECIAL {\em text-string})}]
+ --- the {\em text-string} is interpreted similar to
+ the command {\tt\bs{}special\{...\}} from {\tt .dvi} file.
+\item[\quad{\tt (HEX {\em hex-text-string})}
+ or {\tt (SPECIALHEX {\em hex-text-string})}]
+ --- the sequence of bytes identified by hexadecimal codes
+ is treated as the argument of the command
+ {\tt\bs{}special\{...\}} from {\tt .dvi} file.
+ The {\em hex-text-string} cannot contain spaces,
+ it should contain only hexadecimal digits
+ `{\tt 0}'--`{\tt 9}' and `{\tt A}'--`{\tt F}' or `{\tt a}'--`{\tt f}'
+ and it should contain the even number of such digits.
+\end{description}
+Similar to dimensional data specified
+for the commands {\tt CHARACTER}, {\tt LIGTABLE}, {\tt HEADER},
+the dimensional parameters of the commands
+{\tt RULE}, {\tt RIGHT}, {\tt LEFT}, {\tt UP}, {\tt DOWN}
+are specified using the values {\tt TBFUNITS} and {\tt TBFSIZE}
+from the {\tt .tbf} file (see section~\ref{Sect-VFC-LUNIT}).
+
+
+\subsubsection{{\tt CHARACTER/VARCHAR}\label{Sect-VFC-CHAR2}}
+
+The parameter {\tt VARCHAR} of the command {\tt CHARACTER} specifies
+the extensible character (usually the mathematical delimiter).
+Its parameters define the character codes which are used as the
+top of the delimiter, middle of the delimiter, bottom of the delimiter
+and the replicated part of the delimiter. The zero value of
+corresponding character codes (except replicated part)
+means that this part of the extensible character is absent.
+
+
+The command has the format
+\begin{itemize}
+\item[]{\tt (VARCHAR ({\em parm$_1$}) ({\em parm$_2$}) ...)}
+\end{itemize}
+where the following parameters can be used:
+\begin{description}
+\item[\quad{\tt (TOP {\em char-code})}] --- specifies
+ the character which is used as the top element of the
+ extensible character;
+\item[\quad{\tt (MID {\em char-code})}] --- specifies
+ the character which is used as the middle element of the
+ extensible character;
+\item[\quad{\tt (BOT {\em char-code})}] --- specifies
+ the character which is used as the bottom element of the
+ extensible character;
+\item[\quad{\tt (REP {\em char-code})}] --- specifies
+ the character which is used as the replicated part of the
+ extensible character.
+\end{description}
+
+\subsection{{\tt LIGTABLE}\label{Sect-VFC-LIGTABLE}}
+
+The command {\tt LIGTABLE} specifies the additional
+ligature and kerning data for the virtual font characters
+--- mainly the ligature and kerning data
+for the pairs of characters selected from different
+real fonts. Notot too much {\tt LIGTABLE}
+commands are necessary in the {\tt .tbf} file since the ligature data
+for the pairs of characters selected from the same
+real font are usually copied from corresponding {\tt .pl} files.
+
+The command {\tt LIGTABLE} has the format:
+\begin{itemize}
+\item[] {\tt (LIGTABLE}\\
+ \phantom{WWW}{\tt ({\em ligature-command$_1$})}\\
+ \phantom{WWW}{\tt ({\em ligature-command$_2$})}\\
+ \phantom{WWW}{\tt ......}\\
+ {\tt )}
+\end{itemize}
+It several {\tt LIGTABLE} commands are specified, they are
+joined together after reading the {\tt .tbf} file.
+
+The {\em ligature-commands} are similar to that specified at
+{\tt .pl} files except the fact that the {\em dimensional}
+parameter of the command {\tt KRN} is specified using the
+values {\tt TBFUNITS} and {\tt TBFSIZE}
+(see section~\ref{Sect-VFC-LUNIT}).
+The following commands are valid here:
+\begin{description}
+\item[\quad{\tt (LABEL {\em char-code})}]
+ --- start the list of ligature commands for
+ the character {\em char-code} of the virtual font;
+\item[\quad{\tt (LABEL BOUNDARYCHAR)} or {\tt (LABEL BCHAR)}]
+ --- start the list of ligature commands for
+ the special character ``{\em end-of-word}'';
+\item[\quad{\tt (SKIP {\em integer})}]
+ --- jump over specified {\tt LIGTABLE} commands
+ {\tt LIG} and {\tt KRN};
+\item[\quad{\tt (STOP)}]
+ --- stop the {\em LIGTABLE} commands started
+ by the command {\em (LABEL {\em char-code})};
+\item[\quad{\tt (KRN {\em char-code$'$} {\em shift})}]
+ --- the kerning data {\em shift} (real value)
+ specified for the pair of characters
+ {\em char-code} and {\em char-code$'$}
+ (the value {\em char-code} is specified at the command {\tt LABEL}
+ which starts the sequence of ligature and kerning commands
+ for this character);
+\item[\quad{\tt (LIG {\em char-code$'$} {\em char-code$''$})}]
+ --- the ligature data for the pair of characters
+ {\em char-code} and {\em char-code$'$}
+ (the value {\em char-code} is specified at the command {\tt LABEL}
+ which starts the sequence of ligature and kerning commands
+ for this character) --- these two characters are
+ substituted by the character {\em char-code$''$}.
+ The identifiers
+ \begin{itemize}
+ \item[]
+ \begin{flushleft}
+ {\tt /LIG}, {\tt /LIG>}, {\tt LIG/}, {\tt LIG/>},
+ {\tt /LIG/}, {\tt /LIG/>}, {\tt /LIG/>>}
+ \end{flushleft}
+ \end{itemize}
+ can be used instead of {\tt LIG} which defines
+ various ways of the substitution of the character
+ {\em char-code$''$}
+ instead of the pair of characters
+ {\em char-code} and {\em char-code$'$}
+ (see \cite{VF} for more details).
+\end{description}
+Example:
+\begin{itemize}
+\item[] {\tt (LIGTABLE}\\
+ \phantom{}{\tt (LABEL C <)}\\
+ \phantom{WWW}{\tt (LIG C < V CYR\_open\_quote)}\\
+ \phantom{WWW}{\tt (STOP)}\\
+ \phantom{}{\tt (LABEL C >)}\\
+ \phantom{WWW}{\tt (LIG C > V CYR\_close\_quote)}\\
+ \phantom{WWW}{\tt (STOP)}\\
+ \phantom{}{\tt (LABEL V CYR\_GHE)}\\
+ \phantom{WWW}{\tt (KRN C . V kk\#)}\\
+ \phantom{WWW}{\tt (KRN C , V kk\#)}\\
+ \phantom{WWW}{\tt (KRN C : V kk\#)}\\
+ \phantom{WWW}{\tt (KRN C ; V kk\#)}\\
+ \phantom{WWW}{\tt (STOP)}\\
+ {\tt )}
+\end{itemize}
+
+\subsection{{\tt OUTPUT}\label{Sect-VFC-OUTPUT}}
+
+The command {\tt OUTPUT} defines the name of the output
+{\tt .vpl} file and, may be, the way how the character codes
+for the {\tt .vpl} commands are to be printed.
+It has the form
+\begin{itemize}
+\item[] {\tt (OUTPUT {\em filename}
+ ({\em option$_1$}) ({\em option$_2$}) ... )}
+\end{itemize}
+where {\em filename} is the name of the output
+{\em virtual font}, and the optional {\em options}
+can be the following:
+\begin{description}
+\item[\quad{\tt(ALLCHAR)}] --- print all printable characters
+ in a form {\tt C {\em letter}};
+\item[\quad{\tt(ALPHA)}] --- print in a form {\tt C {\em letter}}
+ only the letters of the latin alphabet;
+\item[\quad{\tt(ALPHANUM)}] --- print in a form {\tt C {\em letter}}
+ the digits and the letters of the latin alphabet;
+\item[\quad{\tt(ALLCODE)}] --- print all characters
+ as the character codes;
+\item[\quad{\tt(DEC)} or {\tt(DECIMAL)}] --- print character codes
+ as decimal integers;
+\item[\quad{\tt(OCT)} or {\tt(OCTAL)}] --- print character codes
+ as octal integers;
+\item[\quad{\tt(HEX)} or {\tt(HEXADECIMAL)}] --- print character codes
+ as hexadecimal integers.
+\end{description}
+Example (default value):
+\begin{itemize}
+\item[] {\tt (OUTPUT noname.tbf (ALPHANUM) (OCTAL))}
+\end{itemize}
+
+\subsection{{\tt HEADER}\label{Sect-VFC-HEADER}}
+
+The virtual font has the header with the header parameters:
+\begin{itemize}
+\item {\tt DESIGNSIZE}
+\item {\tt DESIGNUNITS}
+\item {\tt CODINGSCHEME}
+\item {\tt FAMILY}
+\item {\tt FACE}
+\item {\tt FONTDIMEN} and its sub-parameters
+ ({\tt SLANT}, {\tt SPACE}, {\tt QUAD}, ¨ â.¤.)
+\end{itemize}
+The header parameters can be get from:
+\begin{itemize}
+\item
+the header of one of the real fonts used in virtual font;
+\item
+the header of some separate {\tt .pl} file;
+\item
+\VFC{} the explicit commands from the {\tt .tbf} file.
+\end{itemize}
+
+The following parameters of the command {\tt HEADER}
+are valid:
+\begin{description}
+\item[\quad{\tt(FONT {\em integer})}]
+ --- defines index of the font which is used as a source
+ for the header parameters. The real name of the font is
+ taken from the {\tt MAPFONT} command with the corresponding
+ index value. Default value for this parameter is {\tt (FONT D 0)}
+ which means that if nor {\tt FONT} nor {\tt FILE} dat are specified
+ by the User, the font {\tt MAPFONT D 0} is used as a source
+ for the header parameters.
+ If {\tt FONT} argument is $<$0 or if the parameter {\tt FILE}
+ is specified, the {\tt MAPFONT} fonts are not used as a source
+ for the header.
+\item[\quad{\tt(FILE {\em filename})}]
+ --- defines the name of the {\tt .pl} file
+ which is used as a source for the header
+ parameters. Only one of the parameters --- {\tt FONT} or {\tt FILE} ---
+ can be specified among the parameters of the command {\tt HEADER}.
+ If both parameters are specified, the last one is used and
+ the warning message is generated.
+\item[\quad{\tt(CHECKSUM {\em 32-bit integer})}]
+ --- specifies the {\tt CHECKSUM} of the {\tt .tfm} file
+ which will be generated after the processing of
+ {\tt .vpl} file by the utility {\sl VPtpVF}.
+ Usually this parameter is not necessary --- if it is not
+ specified, the correct {\tt CHECKSUM} value is substituted
+ by {\sl VPtoVF} automatically, and it is a rare chance
+ that the User can guess the proper value (see comments below).
+\item[\quad{\tt(DESIGNSIZE {\em real-value})}]
+ --- specifies the value of the {\tt DESIGNSIZE} which
+ is used as a unit of measure for nearly all
+ dimensional {\tt .vpl} data (see comments below).
+\item[\quad{\tt(DESIGNUNITS {\em real-value})}]
+ --- specifies the value of the {\tt DESIGNUNITS} which
+ is used as a unit of measure for nearly all
+ dimensional {\tt .vpl} data (see comments below).
+\item[\quad{\tt(CODINGSCHEME {\em text-string})}]
+ --- specifies the text which identifies uniquely
+ the arrangement of the characters in the coding table
+ of this font.
+ For example, for Computer Modern Roman except {\tt cmr5}
+ it is equal to
+ \begin{itemize}
+ \item[] {\tt (CODINGSCHEME TeX text)}
+ \end{itemize}
+ while for {\tt cmr5} it is equal to
+ \begin{itemize}
+ \item[] {\tt (CODINGSCHEME TeX text without f-ligatures)}
+ \end{itemize}
+ (the {\em f-ligatures} are absent in this font since
+ the characters are too small).
+ This parameter cannot contain
+ internal braces `{\tt (}' and `{\tt )}'
+ and but can be the string expression
+ (see section~\ref{Sect-VFC-STRING} for more details).
+\item[\quad{\tt(FAMILY {\em text-string})}]
+ --- specifies the {\tt FAMILY} identifying
+ string. This parameter cannot contain
+ internal braces `{\tt (}' and `{\tt )}'
+ but can be the string expression
+ (see section~\ref{Sect-VFC-STRING} for more details).
+\item[\quad{\tt(FACE {\em 8-bit-integer})}]
+ --- specifies the Xerox face code for the virtual font.
+\item[\quad{\tt(SEVENBITSAFEFLAG)}]
+ --- this command is of no use and its is skipped after printing the
+ warning message. The attribute
+ {\tt SEVENBITSAFEFLAG} was used in earlier versions of \TeX{}
+ to specify that the font contains only the characters in a range 0--127,
+ and now this flag is obsolete. Although the corresponding field is
+ conserved in {\tt .tfm} file, the utility {\sl VPtoVF} inserts the
+ proper value automatically (after the check that the virtual font
+ contains no characters outside the range 0--127) irregardless of
+ the command {\tt SEVENBITSAFEFLAG} encountered in {\tt .vpl} file.
+\item[\quad{\tt(FONTDIMEN {\em parm-list})}]
+ --- defines the following header parameters:
+ \begin{itemize}
+ \item[]
+ {\tt(SLANT {\em real-value})}\\
+ {\tt(SPACE {\em real-value})}\\
+ {\tt(STRETCH {\em real-value})}\\
+ {\tt(SHRINK {\em real-value})}\\
+ {\tt(XHEIGHT {\em real-value})}\\
+ {\tt(QUAD {\em real-value})}\\
+ {\tt(EXTRASPACE {\em real-value})}\\
+ {\tt(NUM1 {\em real-value})}
+ or {\tt(DEFAULTRULETHICKNESS {\em real-value})}\\
+ {\tt(NUM2 {\em real-value})}
+ or {\tt(BIGOPSPACING1 {\em real-value})}\\
+ {\tt(NUM3 {\em real-value})}
+ or {\tt(BIGOPSPACING2 {\em real-value})}\\
+ {\tt(DENOM1 {\em real-value})}
+ or {\tt(BIGOPSPACING3 {\em real-value})}\\
+ {\tt(DENOM2 {\em real-value})}
+ or {\tt(BIGOPSPACING4 {\em real-value})}\\
+ {\tt(SUP1 {\em real-value})}
+ or {\tt(BIGOPSPACING5 {\em real-value})}\\
+ {\tt(SUP2 {\em real-value})}\\
+ {\tt(SUP3 {\em real-value})}\\
+ {\tt(SUB1 {\em real-value})}\\
+ {\tt(SUB2 {\em real-value})}\\
+ {\tt(SUPDROP {\em real-value})}\\
+ {\tt(SUBDROP {\em real-value})}\\
+ {\tt(DELIM1 {\em real-value})}\\
+ {\tt(DELIM2 {\em real-value})}\\
+ {\tt(AXISHEIGHT {\em real-value})}\\
+ {\tt(AXISHEIGHT {\em real-value})}
+ \end{itemize}
+ (the parameters specified in a form
+ {\tt (PARAMETER {\em index} {\em value})} are skipped
+ and the warning message is printed).
+
+ All these parameters are {\em dimensional} parameter
+ except the parameter {\tt SLANT} and they are defined using
+ {\tt TBFUNITS} and {\tt TBFSIZE} data
+ from the {\tt .tbf} file (see section~\ref{Sect-VFC-LUNIT}).
+ They are re-calculated properly so that they fit to
+ the header parameters {\tt DESIGNUNITS} and {\tt DESIGNSIZE}
+ when the header data of the output {\tt .vpl} file are known.
+\end{description}
+The parameters are specified as the sub-lists of the list
+defined by the identifier {\tt HEADER}.
+Example:
+\begin{itemize}
+\item[] {\tt (HEADER}\\
+ \phantom{WWW}{\tt (FONT D 1)}\\
+ \phantom{WWW}{\tt (FAMILY LHTT)}\\
+ \phantom{WWW}{\tt (CODINGSCHEME LH Cyrillic TeX text)}\\
+ \phantom{WWW}{\tt ......}\\
+ {\tt )}
+\end{itemize}
+
+\bigskip
+
+\VFC{} generates the header parameters in a following way.
+The commands from the {\tt .tbf} file are read,
+and the dimensional parameters from the command {\tt HEADER}
+are treated using the units defined by
+{\tt TBFSIZE} and {\tt TBFUNITS}
+(see section~\ref{Sect-VFC-LUNIT}) --- as well as the other dimensional
+parameters like that from the commands {\tt LIGTABLE}
+and {\tt CHARACTER}.
+After it the {\tt .pl} file specified by the {\tt HEADER}
+commands {\tt FONT} or {\tt FILE} is read, and the parameters
+which were not defined explicitly at the command {\tt HEADER}
+are added from it.
+Finally, all the dimensional parameters
+which vere read from the {\tt .tbf} file
+(namely, specified at the commands {\tt LIGTABLE},
+{\tt CHARACTER}, {\tt HEADER/FONTDIMEN})
+are converted to
+{\tt DESIGNSIZE} and {\tt DESIGNUNITS} values from the
+resulting header of the {\tt .vpl} file.
+
+The {\tt .pl} file header parameters
+\begin{itemize}
+\item[] {\tt DESIGNSIZE}\\
+ {\tt DESIGNUNITS}\\
+ {\tt CODINGSCHEME}\\
+ {\tt FAMILY}\\
+ {\tt FACE}\\
+ {\tt FONTDIMEN} sub-parameters except {\tt PARAMETER}
+\end{itemize}
+are processed by \VFC.
+The {\tt .pl} file header parameters
+\begin{itemize}
+\item[] {\tt SEVENBITSAFEFLAG}\\
+ {\tt HEADER}\\
+ sub-parameter {\tt PARAMETER} of the parameter {\tt FONTDIMEN}
+\end{itemize}
+are ignored after printing the warning messages.
+All other {\em legal} {\tt .pl} commands are
+skipped without processing when \VFC{} reads the header parameters.
+
+\bigskip
+
+The header parameters which are read from {\tt .pl} file
+are added to {\tt .vpl} header data if
+corresponding parameters are not specified explicitly
+in {\tt .tbf} file.
+Usually {\em all} header parameters
+(including {\tt DESIGNUNITS} and {\tt DESIGNSIZE})
+are copied from some {\tt .pl} file, and only the parameters
+{\tt FAMILY}, {\tt FACE}, {\tt CODINGSCHEME} are substituted
+by their explicit specifications from {\tt .tbf} file.
+
+The exception is the header parameter {\tt CHECKSUM} which is ignored
+when it is read from {\tt .pl} file and which value can be
+set by the User only if it is specified explicitly in {\tt .tbf} file.
+Usually this parameter is not necessary --- if it is not
+specified by the User, it is not inserted into the output
+{\tt .vpl} file, and as a result the correct {\tt CHECKSUM} value
+is calculated by {\sl VPtoVF} automatically.
+It is a rare chance that the User can guess the proper value,
+and if the {\tt CHECKSUM} from the {\tt .vf} file and
+the {\em checksum} calculated for the {\tt .tfm} file
+of the virtual font do not coincide, the {\sl DVI}-driver
+prints the warning message --- this message shows that the versions of
+{\tt .vf} and {\tt .tfm} files may be different or that
+the {\tt .tfm} file may be damaged.
+The exception from this rule (and the only case
+when the explicit parameter {\tt CHECKSUM} can be useful)
+is the {\em zero} value specified for the parameter {\tt CHECKSUM}
+of the virtual font. In this case the comparison
+of {\tt CHECKSUM} from {\tt .vf} file with the
+the {\em checksum} of the {\tt .tfm} file
+of the virtual font is not performed at all
+when this font is loaded by the {\sl DVI}-driver.
+
+\subsection{Additional commands\label{Sect-VFC-Other}}
+
+The following \VFC{} commands are considered
+in this section:
+\begin{itemize}
+\item {\tt VTITLE} --- the title of the virtual font;
+\item {\tt TBFUNITS} and {\tt TBFSIZE} --- the scale factors
+ for the lengths specified in {\tt .tbf} file;
+\item {\tt BOUNDARYCHAR} --- character code which is used
+ in the {\tt .vpl} ligature table to specify the ``end-of-word''
+ character;
+\item {\tt SETTFMFONT} --- default value for the attribute {\tt TFMFONT}
+ if for some commands {\tt CHARACTER} only the attribute {\tt TFMCHAR}
+ is specified;
+\item {\tt SETMAPFONT} --- default value for the attribute {\tt FONT}
+ if for some commands {\tt CHARACTER} only the attribute {\tt CHAR}
+ is specified;
+\item {\tt DISCARDCHAR} --- the list of characters which are not
+ included in the virtual font;
+\item {\tt NOTAUTOADDCHAR} --- the list of characters which cannot be used
+ for automatically characters;
+\item {\tt OPTION} --- modes of \VFC;
+\item {\tt SAVETABLE} --- printing of the mapping table
+ into ASCII file;
+\end{itemize}
+
+\subsubsection{{\tt VTITLE}\label{Sect-VFC-TITLE}}
+
+The command {\tt VTITLE} of the {\tt .vpl} file defines the
+title of the file which is actually the comment inserted in
+the binary {\tt .vf} file after processing by the utility
+{\sl VPtoVF}. The command {\tt VTITLE} has the form
+\begin{itemize}
+\item[] {\tt (VTITLE {\em text-string})}
+\end{itemize}
+where the {\em text string}
+is the combination of string elements and
+string expressions (see section~\ref{Sect-VFC-STRING})
+separated by spaces, and can include opening and closing
+braces `{\tt (}' and `{\tt )}' if they are balanced
+correctly. The result of the expansion of
+string expressions cannot exceed 255 characters.
+
+Example:
+\begin{itemize}
+\item[] {\tt (VTITLE Created by VFComb (Version 1.3))}
+\end{itemize}
+
+\subsubsection{{\tt TBFUNITS}
+ and {\tt TBFSIZE}\label{Sect-VFC-LUNIT}}
+
+All the length data in {\tt .vpl} file are defined in
+units specified by the parameters {\tt DESIGNUNITS}
+and {\tt DESIGNSIZE} from the {\tt HEADER} command
+(see section~\ref{Sect-VFC-HEADER}). Nethertheless,
+when the User prepares the {\tt .tbf} file, these
+parameters are not known yet since they can be read
+later from the {\tt HEADER} file. For this reason
+all the length and size data in {\tt .tbf} file
+are specified using internal scaling factors
+specified bu the commands {\tt TBFUNITS}
+and {\tt TBFSIZE} with the default values
+\begin{itemize}
+\item[] {\tt (TBFSIZE R 1.0) (TBFUNITS R 1.0)}
+\end{itemize}
+which are the analogs of the commands {\tt DESIGNUNITS}
+and {\tt DESIGNSIZE} from {\tt .pl} and {\tt .vpl} files.
+The length and size data specified into {\tt .tbf} file
+are recalculated to the proper values
+{\tt DESIGNUNITS} and {\tt DESIGNSIZE}
+from the command {\tt HEADER} when the output {\tt .vpl}
+file is generated.
+
+\subsubsection{{\tt BOUNDARYCHAR}
+ or {\tt BCHAR}\label{Sect-VFC-BCHAR}}
+
+The LIGTABLE entries can contain ligature
+and kerning data with a special character ``end-of-word''
+which defines the beginning of the word when encountered
+in the command {\tt LABEL}, and the end of the word
+when encountered in the commands {\tt LIG} and {\tt KRN}.
+The command {\tt BOUNDARYCHAR} defines the code assigned
+to this special character (usually this is the code {\tt D 255}).
+As a result:
+\begin{itemize}
+\item
+inside {\tt .tbf} file the {\tt LIGTABLE} entries which contain this code
+are recognized as the entries with ``end-of-word'' character;
+\item
+inside {\tt .pl} files the {\tt LIGTABLE} entries with their own
+{\tt BOUNDARYCHAR} codes are mapped to the code specified
+in {\tt .tbf} file.
+\end{itemize}
+Example:
+\begin{itemize}
+\item[] {\tt (BOUNDARYCHAR D 255)}\\
+ {\tt (BCHAR D 255)}
+\end{itemize}
+
+\subsubsection{{\tt SETMAPFONT} and
+ {\tt SETTFMFONT}\label{Sect-VFC-SETTFMFONT}}
+
+The command {\tt SETMAPFOMT} specifies the default value
+for the attribute {\tt FONT} if only the attribute
+{\tt CHAR} is defined (see description of the \VFC{}
+command {\tt CHARACTER} in section~\ref{Sect-VFC-CHAR}).
+It has the form
+\begin{itemize}
+\item[] {\tt (SETMAPFONT {\em ineger})}
+\end{itemize}
+where {\em integer} is the index of the font listed in
+{\tt MAPFONT} command which is used for {\tt FONT}
+attribute.
+
+Similarly, if the command {\tt SETTFMFOMT} specifies the default value
+for the attribute {\tt TFMFONT} if only the attribute
+{\tt TFMCHAR} is defined (see description of the \VFC{}
+command {\tt CHARACTER} in section~\ref{Sect-VFC-CHAR}).
+It has the form
+\begin{itemize}
+\item[] {\tt (SETTFMFONT {\em ineger})}
+\end{itemize}
+where {\em integer} is the index of the font listed in
+{\tt MAPFONT} command which is used for {\tt TFMFONT}
+attribute.
+
+The important difference of \VFC{} {\tt CHARACTER} command is
+that if the parameter {\tt FONT} is not specified although
+the parameter {\tt CHAR} {\em is} specified, the value
+specified by the command {\tt SETMAPFONT} is used
+(see section~\ref{Sect-VFC-SETTFMFONT}). The syntaxis of
+{\tt .vpl} files assumes that the parameter {\tt FONT}
+specified for the previous command {\tt CHARACTER} is used
+while for \VFC{} commands it is not so.
+
+Similarly, if the parameter {\tt TFMFONT} is not specified although
+the parameter {\tt TFMCHAR} {\em is} specified, the value
+specified by the command {\tt SETTFMFONT} is used
+(see section~\ref{Sect-VFC-SETTFMFONT}).
+
+Example (default values):
+\begin{itemize}
+\item[] {\tt (SETMAPFONT D 0)}\\
+ {\tt (SETTFMFONT D 0)}
+\end{itemize}
+
+\subsubsection{{\tt DISCARDCHAR}
+ and {\tt NOTAUTOADDCHAR}\label{Sect-VFC-DISCARD}}
+
+The command {\tt DISCARDCHAR} defines the characters from the
+real fonts which are not included in the virtual font.
+This command is useful if the mapping to some font is defined
+by one of the options
+{\tt FULL}, {\tt 7TO8}, {\tt 8TO7}, {\tt 8BIT}, {\tt 7BIT},
+{\tt JWNCYR}, {\tt CYRTUG} (see command {\tt MAPFONT} in
+section~\ref{Sect-VFC-MAPFONT}) but there are some characters
+which are to be excluded from the mapping list.
+
+The command has the form:
+\begin{itemize}
+\item[] {\tt (DISCARDCHAR}\\
+ \phantom{WWW} {\tt (FONT {\em font$_1$}) (CHAR {\em char$_1$})}\\
+ \phantom{WWW} {\tt (FONT {\em font$_2$}) (CHAR {\em char$_2$})}\\
+ \phantom{WWW} {\tt ......}\\
+ {\tt )}
+\end{itemize}
+Actually one command {\tt (FONT ...)} can be followed by several
+commands {\tt (CHAR ...)} if these characters belong to the same
+real font. Instead of several commands {\tt (CHAR {\em charcode})}
+it is possible to use one command
+{\tt (RANGE {\em charcode$_1$} {\em charcode$_2$})} --- in this case
+all the characters from the range {\em charcode$_1$}--{\em charcode$_2$}
+get the attribute {\tt DISCARD}.
+
+Example:
+\begin{itemize}
+\item[] {\tt (DISCARDCHAR}\\
+ \phantom{WWW} {\tt (FONT D 0) (CHAR D 250) (CHAR D 251) ...}\\
+ \phantom{WWW} {\tt (FONT D 1) (RANGE D 128 D 255) ...}\\
+ \phantom{WWW} {\tt ......}\\
+ {\tt )}
+\end{itemize}
+
+The command {\tt NOAUTOADDCHAR} defines the characters from the
+virtual font which cannot be used for character mapping
+when \VFC{} adds automatically characters since they are connected
+with other characters by the attribute {\tt NEXTLARGER}
+or through {\tt LIGTABLE} data
+(see sections \ref{Sect-VFC-MAPFONT} and \ref{Sect-VFC-OPTION}
+for more details) --- these characters get the attribute
+{\tt DISCARD} if this character is not used explicitly
+in mapping table.
+
+The command has the form:
+\begin{itemize}
+\item[] {\tt (NOAUTOADDCHAR (CHAR {\em char$_1$})
+ (CHAR {\em char$_2$}) (CHAR {\em char$_3$}) ...)}
+\end{itemize}
+Similarly to {\tt DISCARDCHAR},
+instead of several commands {\tt (CHAR {\em charcode})}
+it is possible to use one command
+{\tt (RANGE {\em charcode$_1$} {\em charcode$_2$})} --- in this case
+all the characters of the virtual font
+from the range {\em charcode$_1$}--{\em charcode$_2$}
+get the attribute {\tt DISCARD}
+if these characters are not used explicitly
+in mapping table.
+
+\subsubsection{{\tt OPTION}\label{Sect-VFC-OPTION}}
+
+The command {\tt OPTION} defines some modes of \VFC{} operations.
+It consists of identifiers where only {\tt TRACE} and {\tt INCLUDECHAR}
+can have a non-empty argument:
+\begin{description}
+\item[\quad\tt(TRACE {\em integer})] --- specifies the level
+ of tracing messages printed during the processing
+ of the ligature tables ({\em integer} should be in a range 0--3);
+\item[\quad\tt(TRACE)] --- just the same as
+ {\tt (TRACE D 2)};
+\item[\quad\tt(NOTRACE)] --- just the same as
+ {\tt (TRACE D 0)};
+\item[\quad\tt(SCREEN)] --- print the \VFC{} messages
+ on the display screen;
+\item[\quad\tt(NOSCREEN)] --- print the \VFC{} messages
+ only into {\tt .log} file;
+\item[\quad\tt(PHANTOM)] --- assign attribute {\tt PHANTOM}
+ to all characters, for which the attributes
+ {\tt PHANTOM} or {\tt NOPHANTOM}
+ are not specified explicitly;
+\item[\quad\tt(INCLUDECHAR ({\em ident$_1$})({\em ident$_2$}) ...)]
+ --- specifies how \VFC{} should automatically add characters to the
+ virtual font. The following {\em ident} values can
+ be used:
+ \begin{description}
+ \item[\quad\tt ALLCHAR] --- include automatically
+ all the characters from the real fonts even it is not
+ specified explicitly in {\tt CHARACTER} or {\tt MAPFONT}
+ commands;
+ \item[\quad\tt LIGTABLE] --- include in the virtual font
+ the characters which are listed in
+ the ligature tables specified for already included characters;
+ \item[\quad\tt KRNDATA] --- include in the virtual font
+ the characters which are listed in a kerning data
+ of the ligature tables specified for already included characters;
+ \item[\quad\tt LIGDATA] --- include in the virtual font
+ the characters which are listed in a ligature data
+ of the ligature tables specified for already included characters;
+ \item[\quad\tt NOLIGTABLE] --- do not include in the virtual font
+ automatically the characters from the ligature table;
+ \item[\quad\tt NEXTCHAR] --- include automatically
+ new characters which are are connected
+ by the attribute {\tt NEXTLARGER} with the
+ already included characters;
+ \item[\quad\tt NONEXTCHAR] --- do not include
+ new characters from the real fonts which are connected
+ by the attribute {\tt NEXTLARGER} with the
+ already included characters.
+ \end{description}
+\item[\quad\tt(LIGTABLE)] --- include in the virtual font
+ the ligature tables of the real fonts;
+\item[\quad\tt(NOLIGTABLE)] --- do not include in the virtual font
+ the ligature tables of the real fonts;
+\item[\quad\tt(NEWDISCARD)] --- the underfined characters of the real font
+ are marked automatically by the attribute {\tt DISCRAD}
+ in the global mapping table (see commands {\tt CHARACTER}
+ (section~\ref{Sect-VFC-CHAR}) and {\tt DISCARDCHAR}
+ (section~\ref{Sect-VFC-DISCARD}));
+\item[\quad\tt(NONEWDISCARD)] --- the underfined characters of the real font
+ are {\em not} marked automatically by the attribute {\tt DISCRAD}
+ in the global mapping table (see commands {\tt CHARACTER}
+ (section~\ref{Sect-VFC-CHAR}) and {\tt DISCARDCHAR}
+ (section~\ref{Sect-VFC-DISCARD}));
+\item[\quad\tt(AUTOTFMWIDTH)] --- add automatically for the
+ characters with the attributes {\tt SIZECHAR} and {\tt SIZEFONT}
+ the attribute {\tt AUTOTFMWIDTH} if it is
+ not specified explicitly (see command {\tt CHARACTER});
+\item[\quad\tt(NOAUTOTFMWIDTH)] --- add automatically for the
+ characters with the attributes {\tt SIZECHAR} and {\tt SIZEFONT}
+ the attribute {\tt NOAUTOTFMWIDTH} if it is
+ not specified explicitly (see command {\tt CHARACTER});
+\item[\quad\tt(AUTOTFMCHAR {\em font-index})]
+ --- for the characters without explicitly specified attributes
+ {\tt TFMFONT}, {\tt TFMCHAR} or {\tt NOTFMDATA}
+ (see command {\tt CHARACTER} (section~\ref{Sect-VFC-CHAR}
+ for more details) the attributes
+ \begin{itemize}
+ \item[]
+ {\tt (TFMFONT D {\em font-index})} {\tt (TFMCHAR D {\em char-code})}
+ \end{itemize}
+ are added automatically;
+\item[\quad\tt(AUTOTFMMAPCHAR {\em font-index})]
+ --- for the characters without explicitly specified attributes
+ {\tt TFMFONT}, {\tt TFMCHAR} or {\tt NOTFMDATA}
+ (see command {\tt CHARACTER} (section~\ref{Sect-VFC-CHAR}
+ for more details) the attributes
+ \begin{itemize}
+ \item[]
+ {\tt (TFMFONT D {\em font-index})} {\tt (TFMCHAR D {\em mapchar-code})}
+ \end{itemize}
+ are added automatically.
+\end{description}
+Example (default values):
+\begin{itemize}
+\item[]
+ {\tt (OPTION}\\
+ \phantom{WWW}{\tt (TRACE D 0)}\\
+ \phantom{WWW}{\tt (SCREEN)}\\
+ \phantom{WWW}{\tt (INCLUDECHAR (NOLIGTABLE))}\\
+ \phantom{WWW}{\tt (INCLUDECHAR (NEXTCHAR))}\\
+ \phantom{WWW}{\tt (LIGTABLE)}\\
+ \phantom{WWW}{\tt (NONEWDISCARD)}\\
+ \phantom{WWW}{\tt (AUTOTFMWIDTH)}\\
+ {\tt )}
+\end{itemize}
+
+\subsubsection{{\tt SAVETABLE}\label{Sect-VFC-SAVE}}
+
+The command {\tt SAVETABLE} is used when it is desirable
+to have \VFC{} commands which are equivalent to the
+mapping table equivalent to that used to generate {\tt .vpl} file.
+It can have the following forms:
+\begin{itemize}
+\item[] {\tt (SAVETABLE {\em filename})}\\
+ {\tt (SAVETABLE {\em filename} (SHORT))}\\
+ {\tt (SAVETABLE {\em filename} (FULL))}
+\end{itemize}
+where the options {\tt FULL} and {\tt SAVE}
+defines the format of the output.
+
+\section{\VFC{} applications}
+
+\subsection{Virtual fonts for \TeX{} formats with national
+ alphabets\label{Sect-CyrTeX}}
+
+Although everything which can be done by \VFC{}
+could be realized also by explicit usage of {\tt .pl} and {\tt .vpl}
+file syntaxis (as well as everything which can be
+done manually by {\tt .pl} and {\tt .vpl} files can be done with \VFC),
+some typical operations with the virtual fonts
+are performed with its help {\em easier}
+than by manual editing of {\tt .pl} and {\tt .vpl} files.
+The typical problem of this type is the adaptation of
+standard \TeX{} formats to national alphabets
+--- this problem is especially important for cyrillic alphabets
+since most cyrillic letters {\em cannot} be created as the combination
+of the latin (english) letters with some accents.
+
+The standard solution of this problem is to combine the english part
+taken from Computer Modern family with the
+national fonts which extend the Computer Modern family
+and which contain in the upper part of ASCII table
+(codes 128--255) the national symbols. The best way
+how to do it is to create
+the {\em virtual font} whose lower part refers to original
+CM fonts, and upper part refers to the national fonts ---
+it is just the way which was recommended by D.Knuth in \cite{VF}.
+The advantage of this approach is that it is possible
+to keep the changes in CM fonts and in national fonts separately,
+and in addition it is possible to economize
+disk space since it is not necessary to
+keep {\em two} copies of each Computer Modern character --- one as the
+original CM font which is necessary for original \TeX{}
+formats, and the second one as the lower part in
+the combined national font.
+
+The combination of the lower part of one font and the upper
+part of another font, or even the joining all the characters
+from one font and all the characters from another font
+(provided that {\em no} character code is encountered twice)
+can be done by \VFC{} using few commands.
+If some characters are to be discarded from the
+font or moved to the different positions of the ASCII table,
+it does not makes the command script more complicated. The output
+virtual font contains proper metric information for
+each character borrowed from the source metric information
+and the correct mapping of the characters into individual
+real fonts.
+
+The similar operation can be performed also
+by the program {\sl TFMerge} (IHEP \TeX{}ware, Protvino),
+but \VFC{} enables to perform additional
+operation.
+That is, except joining metric and ligature/kerning
+information from each font into one virtual font,
+it is necessary to add {\em cross}-ligature
+and {\em cross}-kerning information for the pairs
+of characters taken from different fonts.
+\VFC{} enables to add
+metric, ligature and kerning data taken from its script file
+(which makes the original script a little bit
+more complicated). The important feature is that
+this additional data can contain {\em variables}
+and {\em logical structures},
+which enables to generate the whole CM family of
+the virtual typefaces with national characters
+using just the same pseudo-program
+written on \VFC{} command language.
+
+Except the operations described above, \VFC{}
+is capable to perform the following operations
+if it is specified by the User in its script:
+\begin{itemize}
+\item discard the ligature tables of some real fonts;
+\item include in the virtual font the full ligature
+ table of the real font;
+\item include in the virtual font only those characters
+ which are declared explicitly in user defined data,
+ and discard the elements of the ligature tables
+ which correspond to non-included characters of
+ the real font;
+\item automatically add to the virtual fonts the characters
+ which are not included explicitly by the User
+ but which are joined with the already included characters
+ through ligature table data, or
+ by specifications inside the command {\tt CHARACTER}
+ the attributes {\tt NEXTLARGER} and/or {\tt VARCHAR}.
+\end{itemize}
+These features enable to create the desired virtual fonts
+for national alphabets with less efforts and with more realibility
+than by manual manipulations with {\tt .pl} and {\tt .vpl} files.
+
+\subsection{Virtual fonts for colored printing\label{Sect-Color}}
+
+The other problem is the application of the
+virtual fonts to multi-colored printing.
+Suppose that it is necessary to print the text
+where different characters have different colors.
+From \TeX-compiler's point of view it means
+that the characters with different colors are
+assigned to different fonts, and it is a task for
+DVI driver to decide how to print these fonts
+in desired colors.
+
+The colored printing is collected from the overlapped
+sheets where each sheet of text or graphics is printed
+by individual monocolor pass. To make the templates for
+monocolor printing it is necessary to organize the output of
+the DVI file so that in one pass only yellow characters are printed,
+in another pass only blue characters are printed, etc.,
+while the characters which have the green color are to be printed twice ---
+in blue as well as in yellow. The easiest way to teach
+{\sl DVI}-driver how to do it is to create different subdirectories
+with virtual fonts --- one subdirectory for each elementary
+color. The virtual font files placed in the
+subdirectory for yellow printing which correspond to the yellow fonts
+will refer to the actual {\tt *.pk}-files if and only if the yellow color
+is assigned to this character --- otherwise it will
+refer to {\em emty} character. The subdirectories for other
+colors are organized analogously. As soon as the yellow printing
+is performed, the {\sl DVI}-driver is configured so that it takes
+the virtual fonts from the ``yellow'' subdirectory, and for
+the output in other colors the corresponding reconfiguration
+of the {\sl DVI}-driver is performed.
+
+If the mapping of the empty characters into the {\tt dummy}
+font is performed, it results to a wrong behaviour
+of the {\sl DVI}-driver: the characters in {\tt dummy}
+font have zero size, and it means that the next character after
+the empty character is shifted to the left
+(as compared with the desired behaviour)
+on the distance equal to the width of the skipped character.
+To prefent this effect it is necessary to insert in the virtual font
+the explicit {\sl DVI}-commands which
+move the current output position to the right
+by the distance which is the width of the
+skipped character. This operation is performed
+by \VFC{} by a single command: the User can
+\begin{itemize}
+\item
+assign the attribute {\tt PHANTOM} to each {\em phantom} character;
+\item
+assign the attribute {\t PHANTOM} to the font
+which is used to mark colored letters;
+\item
+specify the global option {\tt PHANTOM};
+\end{itemize}
+and as a result for the necessary characters
+the {\em empty mapping} will be performed instead of mapping into
+the real font characters.
+
+\subsection{Substitution of {\tt .pk} fonts
+ instead of {\sl Postscript} fonts\label{Sect-PostScript}}
+
+The next problem where the usage of the virtual fonts
+is advantageous is the visualization of the document
+which was compiled using PostScript fonts.
+Generally the scren viewer {\em cannot}
+process the Postscript characters, and it is necessary
+to remap the PostScript font characters into some {\tt pk}-font
+which {\em can} be displayed by the viewer --- say, some typefaces
+from the Computer Modern family.
+
+Such remapping can be performed
+using virtual font mechanism, but if it is done without
+special precautions the screen view can be far from the
+printed output. The reason is that CM characters have
+the width different from the PostScript font (the fact that they have
+different graphical image is not so essential).
+Like the previous case the screen output will be shifted
+to the left on the distance which is the difference
+between the width of the PostScript character and the
+CM character if no special precautions are taken.
+To make the correct output, it is necessary to add
+to the virtual font the explicit {\sl DVI}-commands
+which correct the current output position.
+
+To make corresponding virtual font automatically,
+\VFC{} enables to specify for the real fonts
+{\em two} PL-files with the metric information: the first one
+for the nominal characters which is used by \TeX{}
+to compile the {\sl DVI}-file (in our case it is the PostScript
+{\tt afm}-file converted to {\tt tfm} format), and the second one
+for the real characters which are used when the {\sl DVI}-file
+is displayed (or printed). If such information is
+specified by the User, the commands which correct
+properly the current output position are inserted in the
+virtual font.
+
+This operation works if both fonts have the same coding
+scheme --- namely, the characters used by \TeX{}
+and the characters used by {\sl DVI}-viewer
+have the same code value.
+If it is not so, the operation of re-mapping inside
+already mapped font ir required which could be very complicated
+and result to a very complicated scheme of virtual vont generation.
+To solve this difficulty it is assumed that the correct
+metric information for the ``true'' font (i.e., for the font
+used in compilation of the {\sl DVI}-file) is already available.
+The special operators in \VFC{} enable to load
+this information and to correct the proper character width.
+
+\section*{Acknowledgements}%
+\addcontentsline{toc}{section}{Acknowledgements}
+
+\subsection*{Acknowledgement I}%
+\addcontentsline{toc}{subsection}{Acknowledgement I}
+
+All new improvements of \VFC{} (except English manual)
+are the results of the contacts and discussions which were held during
+the {\sl Euro\TeX-95} meeting. So I would like to thank Dr.\ Kees
+van der Laan for his giant efforts to organise the
+visit to the {\sl Euro\TeX-95} the delegation from Russia
+and for his patient attention to russian colleagues before,
+during and after the {\sl Euro\TeX-95}.
+
+It is not so easy to recall {\em all} participants of this
+conference whose opinion makes an impact in preparing the
+new version of \VFC{}.
+Among other persons I would like to thank Dr.\ Ph.Taylor and
+Dr.\ S.Znamensky for their valuable suggestions which enable to improve
+the program.
+I would like also to thank O.A.Lapko, S.A.Strelkov and I.A.Mahovaya
+for their efforts spent on the Cyrillic \TeX{} project
+which actually inspired our work.
+
+\subsection*{Acknowledgement II}%
+\addcontentsline{toc}{subsection}{Acknowledgement II}
+
+I would like to express
+my warmest thanks to Dr. A.Compagner (Delft University of
+Technology), who {\em did not} contributed something to this work
+but spent a lot of his time and efforts explaining the Phylosophy
+of Randomness and his approach to RNG.
+
+\subsection*{Acknowledgement III}%
+\addcontentsline{toc}{subsection}{Acknowledgement III}
+
+
+??????
+
+\subsection*{Acknowledgement IV}%
+\addcontentsline{toc}{subsection}{Acknowledgement IV}
+
+This research was partially supported by a grant
+from the Dutch Organization for Scientific Research
+(NWO grant No 07-30-007).
+
+
+
+\def\refname{}
+\def\bibname{}
+\section*{References}%
+\addcontentsline{toc}{section}{References}
+
+\begin{thebibliography}{00}
+\bibitem{VF} D.Knuth, {\em Virtual Fonts: More Fun for Grand Wizards},
+ TUGBoat {\bf 11} (1990), No. 1, pp.13--23.
+\bibitem{LL} A.Khodulev, I.Mahovaya.
+{\em On \TeX{} experience in MIR Publishers}.
+ Proceedings of the 7th Euro\TeX{} Conference, Prague, 1992.
+\bibitem{LH} O.Lapko.
+ {\em MAKEFONT as a part of CurTUG--Em\TeX{} package}.
+ Proceedings of the 8th Euro\TeX{} Conference, Gda\'nsk, 1994.
+\bibitem{VFC} A.S.Berdnikov, S.B.Turtia. {\em
+{\sl VFComb} --- a program for design of virtual fonts}.
+ Proceedings of the 9th Euro\TeX{} Conference, Arnhem, 1995.
+\end{thebibliography}
+
+
+\end{document}
+