doc-src/System/fonts.tex
author wenzelm
Tue, 20 May 1997 19:34:24 +0200
changeset 3262 7115da553895
parent 3217 d30d62128fe5
child 3278 636322bfd057
permissions -rw-r--r--
under construction;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3188
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
     1
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
     2
\chapter{Fonts and character encodings}
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
     3
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
     4
With print modes being now available in Isabelle, variant forms of
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
     5
output have become very easy. As the canonical application of this
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
     6
feature, {\Pure} and major object-logics (\FOL, \ZF, \HOL, \HOLCF)
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
     7
support optional input and output of nice mathematical symbols as an
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
     8
built-in option.
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
     9
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    10
Symbolic output is enabled by activating the \ttindex{symbols} print
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    11
mode. User interfaces (e.g.\ \texttt{isa-xterm}, see
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    12
\S\ref{sec:isa-xterm}) usually do this already by default.
3188
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
    13
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    14
\medskip Displaying non-standard characters requires special screen
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    15
fonts, of course. The \texttt{installfonts} utility takes care of
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    16
this, see \S\ref{sec:tool-installfonts}. Furthermore, some {\ML}
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    17
systems disallow non-\textsc{ascii} characters in literal strings.
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    18
This problem is avoided by the \texttt{symbolinput} filter (see
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    19
\S\ref{sec:tool-symbolinput}).
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    20
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    21
Both of these are invoked transparently in normal operation. So one
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    22
does not actually have to read the explanations below, unless
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    23
something fails to work.
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    24
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    25
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    26
\section{Telling X11 about the Isabelle fonts --- \texttt{isatool installfonts}}
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    27
\label{sec:tool-installfonts}
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    28
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    29
The \tooldx{installfonts} utility ensures that your currently running
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    30
X11 display server (as determined by the \texttt{DISPLAY} environment
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    31
variable) knows about the Isabelle fonts. Its usage is:
3188
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
    32
\begin{ttbox}
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
    33
Usage: isatool installfonts
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
    34
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
    35
  Install the isabelle fonts into your X11 server.
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    36
  (May be safely called repeatedly.)
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    37
\end{ttbox}
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    38
Note that this need not be called manually under normal circumstances
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    39
--- user interfaces depending on the Isabelle fonts usually invoke
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    40
\texttt{installfonts} automatically.
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    41
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    42
\medskip As simple as this might appear to be, it is not! X11 fonts
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    43
are a surprisingly complicated matter. Depending on your network
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    44
structure, fonts might have to be installed differently. This has to
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    45
be specified via the \settdx{ISABELLE_INSTALLFONTS} variable in your
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    46
local settings.
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    47
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    48
\medskip In the simplest situation, X11 is used only locally, i.e.\ 
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    49
the client program (Isabelle) and the display server are run on the
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    50
same machine. In this case, most X11 display servers should be happy
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    51
by being about the directory where the fonts reside as follows:
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    52
\begin{ttbox}
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    53
ISABELLE_INSTALLFONTS="xset fp+ $ISABELLE_HOME/lib/fonts; xset fp rehash"
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    54
\end{ttbox}
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    55
The same also works for remote X11 sessions in a somewhat homogeneous
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    56
network, where the X11 display machine mounts the Isabelle
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    57
distribution under the same name as the client side.
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    58
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    59
\medskip Above method fails, though, if the display machine does have
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    60
the font files at the same location as the client. In case your server
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    61
is a full workstation with its own file system, you could in principle
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    62
just copy the fonts there and do an appropriate \texttt{xset~fp+}
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    63
manually before running the Isabelle interface. This is very awkward,
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    64
of course. It is even \emph{impossible} for proper X terminals that do
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    65
not have their own file system.
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    66
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    67
A much better solution to this problem is to have an X11 \emph{font
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    68
  server} offer the Isabelle fonts to any X11 display on the network.
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    69
There is already a font server running at Munich. So in case you have
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    70
a sensible Internet connection, you may plug attach yourself as
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    71
follows:
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    72
\begin{ttbox}
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    73
ISABELLE_INSTALLFONTS="xset fp+ tcp/isafonts.informatik.tu-muenchen.de:7200"
3188
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
    74
\end{ttbox}
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
    75
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    76
\medskip In the (rare?) case that neither local fonts work, nor
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    77
accessing our world-wide font service is practical, it might be best
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    78
to start your own in-house font service. This is in principle quite
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    79
easy to setup. The program is called \texttt{xfs} (or just
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    80
\texttt{fs)}, see the \texttt{man} pages of your system. There is an
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    81
example configuration available in the \texttt{lib/fontserver}
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    82
directory of the Isabelle distribution.
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    83
3188
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
    84
3217
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    85
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    86
\section{Filtering non-ASCII characters --- \texttt{isatool symbolinput}}
d30d62128fe5 still under construction!
wenzelm
parents: 3188
diff changeset
    87
\label{sec:tool-symbolinput}
3188
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
    88
3262
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    89
Processing non-\textsc{ascii} text is notoriously difficult.  Some
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    90
{\ML} systems reject character codes outside the range 32--127 as part
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    91
of literal string constants. In order to circumvent such restrictions,
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    92
Isabelle employs a general notation where glyphs are referred by some
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    93
symbolic name instead of their actual encoding. Its general form is
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    94
\texttt{$\backslash$<$charname$>}.
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    95
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    96
The \tooldx{symbolinput} utility converts a input stream encoded
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    97
according to the standard Isabelle font layout into pure
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    98
\textsc{ascii} text. There is no usage --- \texttt{symbolinput} just
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
    99
works from standard input to standard output, without any options
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   100
available.
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   101
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   102
\medskip For example, the non-\textsc{ascii} input \texttt{"A $\land$
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   103
  B $\lor$ C"} is replaced by \texttt{"A $\backslash\backslash$<and> B
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   104
  $\backslash\backslash$<or> C"}.
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   105
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   106
\medskip In many cases, it might be wise not to rely on symbolic
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   107
characters and avoid non-\textsc{ascii} text in files altogether. Then
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   108
symbolic syntax would be really optional, with always suitable
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   109
\texttt{ascii} representations available. In theory definitions
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   110
symbols appear only in mixfix annotations --- using the
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   111
\texttt{$\backslash$<$charname$>} form, proof scripts are just left in
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   112
plain \texttt{ascii}.
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   113
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   114
Thus users with \texttt{ascii}-only facilities will still be able to
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   115
read your files.
7115da553895 under construction;
wenzelm
parents: 3217
diff changeset
   116
3188
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
   117
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
   118
%FIXME not yet
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
   119
%\section{ --- \texttt{isatool showsymbols}}
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
   120
%
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
   121
%\begin{ttbox}
445555a7b714 preliminary!
wenzelm
parents:
diff changeset
   122
%\end{ttbox}