summaryrefslogtreecommitdiff
path: root/language/typingtex/Active8MacProse.dir/Active8MacCM.tex
diff options
context:
space:
mode:
Diffstat (limited to 'language/typingtex/Active8MacProse.dir/Active8MacCM.tex')
-rw-r--r--language/typingtex/Active8MacProse.dir/Active8MacCM.tex565
1 files changed, 565 insertions, 0 deletions
diff --git a/language/typingtex/Active8MacProse.dir/Active8MacCM.tex b/language/typingtex/Active8MacProse.dir/Active8MacCM.tex
new file mode 100644
index 0000000000..0fda92a4c8
--- /dev/null
+++ b/language/typingtex/Active8MacProse.dir/Active8MacCM.tex
@@ -0,0 +1,565 @@
+ %%%%% Active8MacCM.tex
+ %%% November 1992, Mar 1994
+
+ %%%% NB: 7bit ascii file
+
+ %%% Author:
+ %% Laurent Siebenmann, Orsay, France
+ %% lcs@matups.matups.fr <= bug reports here please!
+
+ %%% Master Posting:
+ %% ftp matups.matups.fr in directory TypingTeX.dir
+
+ %%% AIM:
+ %% Exploit TeX's active character mechanism
+ %% in conjunction with CaesarCM
+ %% to allow direct typing of prose for TeX
+ %% using all accented characters of Times or other
+ %% Macintosh fonts (Helvetica, Palatino etc.)
+ %% A fortiori, one can use the less rich but more readable
+ %% bitmapped fonts Monaco, Geneva etc.
+
+ %%% INSTRUCTIONS:
+ %% You have merely to \input
+ %% this file on top of any format in which the
+ %% 7-bit typing system for accented characters
+ %% CaesarCM has been incorporated.
+ %% format-dumper-CM is a tool to create such
+ %% formats. Then direct typing
+ %% of accented characters is acceptable to TeX.
+ %% TeX will use a ready-made accented character
+ %% if these are available in the current font
+ %% and create a composite character otherwise.
+ %% LaTeX users must \input the file
+ %% --- AFTER LaTeX.tex and
+ %% --- BEFORE \documentstyle
+
+ %%% CASE CHANGE RESTORED!
+ %% Such macros as these necessarily fail to
+ %% extend the action of the primitives
+ %% \uppercase and \lowercase
+ %% to directly typed accented characters.
+ %% To replace (or indeed redefine) these, consider
+ %% using \Uppercase and \Lowercase
+ %% Or \eUppercase and \eLowercase from caesarcm.tex.
+ %% See documentation following \endinput
+
+ %%%% \Uppercase and \Lowercase to extend action of
+ %%% \uppercase and \lowercase to 128-255. Robust.
+ %%% Misbehave on \ss, \ae, \oe, \o and caps (leave them fixed)
+ %%% \eUppercase and \eLowercase of caesarcm.tex
+ %%% have perfect behavior --- but are fragile.
+
+ \begingroup
+ \catcode`\@=11
+ \catcode`\/=13
+
+ \global\let\primuppercase\uppercase
+ \global\let\primlowercase\lowercase
+
+ %%\count@ is Plain scratch counter \count255
+ %%% These counts exist globally global despite appearances
+ \ifx\undefined\Ct@\csname newcount\endcsname\Ct@\fi
+ \ifx\undefined\Ct@@\csname newcount\endcsname\Ct@@\fi
+ \ifx\undefined\Ct@@@\csname newcount\endcsname\Ct@@@\fi
+
+ \count@=12\Ct@=128\Ct@@=255
+ \loop
+ \catcode\Ct@=\count@
+ \ifnum\Ct@<\Ct@@\relax
+ \advance\Ct@ by \@ne
+ \repeat
+
+ %%%%% Casing alphabetic Mac Characters
+ %%
+ \def\Alphaholder@{%
+ /^^e7^^87./^^83^^8e./^^ea^^92./^^ee^^97./^^f2^^9c.%
+ /^^cb^^88./^^e9^^8f./^^ed^^93./^^f1^^98./^^f4^^9d.%
+ /^^e5^^89./^^e6^^90./^^eb^^94./^^ef^^99./^^f3^^9e.%
+ /^^80^^8a./^^e8^^91./^^ec^^95./^^85^^9a./^^86^^9f.%
+ /^^d9^^d8./^^cc^^8b./^^84^^96./^^cd^^9b./^^81^^8c.%
+ /^^82^^8d./^^ae^^be./^^ce^^cf./^^af^^bf.%
+ }
+ %\def\CheckPeriod#1{\if#1.\else %
+ % \errmessage{ !!! Error in character data}\fi}
+ \def\space{ }
+
+\def/#1#2.{\lccode\number`#1=\number`#2\lccode\number`#2=\number`#2}
+
+ \xdef\LAlphaPrep@{\Alphaholder@}%
+ %\show\LAlphaPrep@
+
+
+\def/#1#2.{\uccode\number`#1=\number`#1\uccode\number`#2=\number`#1}
+ \xdef\UAlphaPrep@{\Alphaholder@}%
+ %\show\UAlphaPrep@
+
+ %%%%% Casing nonalphabetic Mac Characters
+ \def\Otherholder@{%
+ /^^a0./^^a1./^^a2./^^a3./^^a4./^^a5./^^a6./^^a7.%
+ /^^a8./^^a9./^^aa./^^ab./^^ac./^^ad.%
+ /^^b0./^^b1./^^b2./^^b3./^^b4./^^b5./^^b6./^^b7.%
+ /^^b8./^^b9./^^ba./^^bb./^^bc./^^bd.%
+ /^^c0./^^c1./^^c2./^^c3./^^c4./^^c5./^^c6./^^c7.%
+ /^^c8./^^c9./^^ca./^^d0./^^d1./^^d2./^^d3./^^d4.%
+ /^^d5./^^d6./^^d7./^^da./^^db./^^dc./^^dd./^^de.%
+ /^^df./^^e0./^^e1./^^e2./^^e3./^^e4./^^f0./^^f5.%
+ /^^f6./^^f7./^^f8./^^f9./^^fa./^^fb./^^fc./^^fd.%
+ /^^fe./^^ff.}
+
+ \def/#1.{\uccode\number`#1\z@}
+ \xdef\UOtherPrep@{\Otherholder@}
+ %\show\UOtherPrep@
+
+ \def/#1.{\lccode\number`#1\z@}
+ \xdef\LOtherPrep@{\Otherholder@}
+ %\show\LOtherPrep@
+
+ \gdef\SetCorkULCodeSeg{%
+ \loop
+ \Ct@=\count@\advance\Ct@ by 32
+ \uccode\count@=\count@
+ \lccode\count@=\Ct@
+ \uccode\Ct@=\count@
+ \lccode\Ct@=\Ct@
+ \ifnum\count@<\Ct@@
+ \relax\advance\count@ by 1
+ \repeat
+ }
+
+ \gdef\SetCorkULCodes{%
+ %%% Impose Cork lc uc and sf codes
+ \count@=128 \Ct@@=158 \SetCorkULCodeSeg %% segment "80 to "BF
+ %%% Cork "9F is \S and "BF is pound sign lc/uc codes 0
+ \count@=192 \Ct@@=223 \SetCorkULCodeSeg %% segment "C0 to "FF
+ }
+
+ \gdef\Uppercase#1{\UAlphaPrep@\UOtherPrep@
+ \primuppercase{#1}%
+ \SetCorkULCodes
+ }
+
+ \gdef\Lowercase#1{\LAlphaPrep@\LOtherPrep@
+ \primlowercase{#1}%
+ \SetCorkULCodes
+ }
+
+ \endgroup
+
+ \begingroup
+ \catcode`\@=11
+ \global\let\EX@\expandafter
+
+ %\show\CaesarCMLoaded
+ {\catcode`!=12
+ \ifx\CaesarCMLoaded\undefined
+ \immediate\write16{}%
+ \immediate\write16{ !!! CaesarCM not loaded}
+ \gdef\temp{}\else \gdef\temp{}
+ \fi}
+ \temp %\endgroup\end
+
+ { \catcode`!=11
+ \ifx\ActiveEight\undefined
+ \gdef\temp{}
+ \else
+ \W@{}%
+ \W@{ !!! Stop! An Active8MacCM typing setup has already been
+loaded.
+ \gdef\temp{\endgroup\end}\else \gdef\temp{}
+ \global\let\ActiveEight\relax
+ \fi}
+ \temp
+
+ %%% Globally set high ASCII to 13
+ %%
+ \count@="80\Ct@@="FF
+ \loop
+ \global\catcode\count@=\active
+ \ifnum\count@<\Ct@@\relax
+ \advance\count@ by \@ne
+ \repeat
+
+ \def\CheckPeriod#1{\if#1.\else
+ \errmessage{ !!! Error in character data}\fi}
+
+ %%% \lcucActAccDef ^^83^^8eEe\'. %%is example!
+ %% Presumably uc and lc codes already set
+\def\lcucActAccDef#1#2#3#4#5#6{%
+ \CheckPeriod{#6}%
+ \global\catcode`#1=\active
+ \global\catcode`#2=\active
+ \gdef#1{#5#3}%% #3 and #4 ascii catcode 11; #5 is \' say
+ \gdef#2{#5#4}%
+ }
+
+ %%% \CharAct@ ^^d4^^60. %% is example!
+ %% leaves uc lc unresolved
+ \def\CharAct@#1#2#3{%
+ \global\catcode`#1=\active
+ \CheckPeriod{#3}%
+ \global\let#1#2%
+ }
+
+ %%% \QuoteAct@ ^^d4^^60. %% is example!
+ %%
+ \def\QuoteAct@#1.#2#3{%
+ \CheckPeriod{#3}%
+ \global\catcode`#1=\active
+ \xdef#1{\string#2}%
+ \global\uccode`#2=0\global\lccode`#2=0
+ }
+
+ %%% \Forbid@
+ %%
+ \def\Forbid@ #1{%
+ \global\catcode`#1=15 }
+
+ \catcode`/=13
+ \let/\lcucActAccDef
+
+ \catcode`\*=13
+ \let*=\QuoteAct@
+
+ \catcode`\|=13
+ \let|=\CharAct@
+
+ %%% / is \lcucActAccDef
+ /^^e7^^87Aa\'.
+ /^^83^^8eEe\'.
+ /^^ea^^92Ii\'.
+ /^^ee^^97Oo\'.
+ /^^f2^^9cUu\'.
+ /^^cb^^88Aa\`.
+ /^^e9^^8fEe\`.
+ /^^ed^^93Ii\`.
+ /^^f1^^98Oo\`.
+ /^^f4^^9dUu\`.
+ /^^e5^^89Aa\^.
+ /^^e6^^90Ee\^.
+ /^^eb^^94Ii\^.
+ /^^ef^^99Oo\^.
+ /^^f3^^9eUu\^.
+ /^^80^^8aAa\".
+ /^^e8^^91Ee\".
+ /^^ec^^95Ii\".
+ /^^85^^9aOo\".
+ /^^86^^9fUu\".
+ /^^d9^^d8Yy\".
+ /^^cc^^8bAa\~.
+ /^^84^^96Nn\~.
+ /^^cd^^9bOo\~.
+ /^^81^^8cAa\*.%\show^^81
+ /^^82^^8dCc\c.
+
+ %%% | is \CharAct@
+ |^^ae\AE.
+ |^^be\ae.
+ |^^ce\OE.
+ |^^cf\oe.
+ |^^af\O.
+ |^^bf\o.
+ |^^a7\ss.
+
+ %%% * is \QuoteAct@
+ {\catcode"5C=12 *^^d2.^^5c.}%% backslash code!!
+ *^^d3.^^22.%% ''
+ *^^d4.^^60.%% `
+ *^^d5.^^27.%% '
+
+ \gdef\Symb@@#1{%
+ \EX@ \ifx \csname #1@\endcsname\relax
+ ^^58%% Print X if nothing better
+ \else
+ \csname #1@\endcsname
+ \fi}
+
+ \xdef\questiondown@{\string^^3e}%
+ \xdef\exclamdown@{\string^^3c}%
+ %\def\guillemotleft@{\DLG}%% in gllmts.tex
+ %\def\guillemotright@{\DRG}%% in gllmts.tex
+ \def\dagger@{$\m@th\dag$}%
+ \gdef\daggerdbl@{$\m@th\ddag$}%
+ \gdef\section@{$\m@th\S$}
+ \gdef\paragraph@{$\m@th\P$}
+ \gdef\pound@{{\ifdim\fontdimen\@ne\font >\z@
+ \it\else \font\ft=cmu10\ft\fi\char`\$}}%% cheat
+ %\gdef\paragraph@{X}%% unavailable
+
+ \gdef^^c0{\questiondown}
+ \gdef^^c1{\exclamdown}
+ \gdef^^c7{\guillemotleft}
+ \gdef^^c8{\guillemotright}
+ \gdef^^a4{\section}
+ \gdef^^a3{\pound}
+ \gdef^^a0{\dagger}
+ \gdef^^e0{\daggerdbl}
+ \gdef^^a6{\paragraph}
+ \gdef^^e4{\perthousand}
+
+ %%% If Caesar not present \Symb@@=\Symb@
+ \gdef\questiondown{\Symb@@{questiondown}}
+ \gdef\exclamdown{\Symb@@{exclamdown}}
+ \gdef\guillemotleft{\Symb@@{guillemotleft}}
+ \gdef\guillemotright{\Symb@@{guillemotright}}
+ \gdef\section{\Symb@@{section}}
+ \gdef\pound{\Symb@@{pound}}
+ \gdef\dagger{\Symb@@{dagger}}
+ \gdef\daggerdbl{\Symb@@{daggerdbl}}
+ \gdef\paragraph{\Symb@@{paragraph}}
+ \gdef\perthousand{\Symb@@{perthousand}}
+
+ \ifx\CaesarCMLoaded\relax
+ \global\let\Symb@@=\Symb@ %% of Caesar
+ \fi
+
+ \endgroup
+
+ %%%%%% LaTeX material
+
+ { \catcode`!=11 \catcode`\@=11
+ \ifx\undefined\@@line %% \@@line unique to LPlain
+ \gdef\temp{\endinput}
+ \else
+ \gdef\temp{}
+ \fi}
+ \temp %% \endinput unless LaTeX
+
+ { \catcode`!=11\catcode`\@=11
+ \ifx\@@end\undefined %% \@@end unique to LaTeX
+ \W@{}%
+ \W@{ !!! LaTeX must be fully loaded }%
+ \W@{ !!! before Active8MacCM.tex}%
+ \gdef\temp{\end}%
+ \else
+ \gdef\temp{}
+ \fi}
+ \temp
+
+ { \catcode`!=11\catcode`\@=11
+ \ifx\subsubsection\undefined %% yes before \documentstyle
+ \gdef\temp{}
+ \else
+ \W@{}%
+ \W@{ !!! Active8MacCM.tex must be input}%
+ \W@{ !!! before \noexpand\documentstyle occurs.}%
+ \gdef\temp{\end{document}}%
+ \fi}
+ \temp
+
+ %%%%%% end of LaTeX material
+
+ \endinput
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ Active8MacCM.doc
+
+
+ Documentation for Active8MacCM.tex
+
+ Alpha version, November 1992
+ Beta version, Mar 1994
+
+ ********************************************************
+ NOTA BENE In this documentation please read CM for CX and cm for
+cx. (The following serves also for the CK (Cork) font encoding
+--- reading CK for CX etc.)
+ ********************************************************
+
+ Although Active8MacCX.tex can be used with most TeX formats,
+it complements the accent administration package caesarcx.tex in a
+well-planned way. When the two are to be used together, be sure
+to obtain versions of Active8MacCX.tex and caesarcx.tex that are
+in step. The master postings are currently on ftp
+matups.matups.fr. Then on typing a given eight bit Macintosh
+character, you will get the best rendition of that character that
+is available in the current font.
+
+ There is alarming misbehavior of
+
+ --- \uppercase, \lowercase
+
+for characters in the range 128-255. Not only does
+\uppercase{<eacute>} give <eacute> rather than <Eacute>, but
+\uppercase{<Ugrave>} gives <Udieresis>. Good hyphenation with all
+languages served by the Cork norm more or less dictates Cork
+standard uc and lc code assignments. And the misbehavior just
+noted is consequence of using them. The one reasonable way to
+systematically eliminate the misbehavior is to use "I/O filters"
+for TeX to align the code of characters typed to the Cork code.
+But few TeX implementations have this desirable flexibility; on
+the Macintosh only Direct TeX has it.
+
+ A rather straightforeward remedy is provided by the substitute
+macros \Uppercase and \Lowercase defined here. They coincide with
+\uppercase and \lowercase on 7-bit (ascii) TeX input, but are
+designed to behave correctly on directly typed Macintosh
+characters in the range: 128-255.
+
+ \Uppercase and \Lowercase are robust in the sense that they
+are unlikely to cause their argument to blow up no matter how
+complex it may be. In particular no \edef-type expansion is used.
+Additionally they themselves can hopefully be subjected to
+\edef-type expansion. These macros work by temporarily adjusting
+many catcodes for the application of \uppercase and \lowercase.
+Hence, like, \verbtim macros, they are somewhat slow. Further in
+spite of their robustness, these macros may misbehave where
+\edef-type expansion is used indescriminately (notably in LaTeX)
+the reason is that after expansion the Cork uc and lc codes are
+more appropriate, whereas these macros insist on using Macintosh
+uc and lc codes.
+
+ A second solution and more ambitions solution is provided
+by macros
+
+ \eUppercase, \eLowercase
+
+defined already in the accent administration package caesarcx.tex;
+the performance edge is double:
+
+ (i) these macros deal correctly with \ae,\oe,\o,\ss,\i and
+capitalized versions, whereas all competeting macros leave them
+invariant.
+ (ii) inlike \Uppercase, \Lowercase often give correct results
+when applied to characters in the 128-255 range that have been
+subjected to \edef-type expansion.
+
+These macros work by expanding (via the \edef mechanism) until
+\uppercase and \lowercase produce the right effect; hence they are
+fragile. The "e" in \eUppercase should recall "expansion" or
+"\edef". No massive use uc and lc code changes is involved; these
+macros are fairly fast.
+
+ \eUppercase, \eLowercase should not be applied to any
+material that is not known to be *safe* under \edef-type
+expansion; all category 11 and 12 characters are safe; beginners
+should regard *all* other material with suspicion, notably font
+changes.
+
+ It is tempting to hide the misbehavior of \lowercase and
+\uppercase from the eye of the user by \let'ing the primitive
+commands \lowercase and \uppercase equal to \relax. But this is
+in fact dangerous, especially if macros are loaded thereafter,
+because programmers use \lowercase and \uppercase as low level
+tools for macro loading. THOU SHALT NOT GLOBALLY REDEFINE TEX
+PRIMITIVES is a commandment deserving respect.
+
+ It is tempting and often very effective to sort out all
+case change problems at a blow by redefining via
+
+ \let \uppercase\Uppercase \let \lowercase\Lowercase
+
+or
+
+ \let \uppercase\eUppercase \let \lowercase\eLowercase
+
+although (as explained above) this is antisocial. Use it privately
+so long as it gives good results, but never pass on such a
+dangerous system to an unsuspecting third party. Everything within
+a TeX group of moderate size can legitimately be considered
+private! So this efficient device has reasonable scope in
+practice. Incidentally, caesarcx.tex Active8MacCX.tex and
+preserve intact versions \primuppercase, \primlowercase for
+convenience and security.
+
+
+ ***** Occasional problems and their current remedies *****
+
+ If TeX issues mysterious complaints in response to the
+(local!) redefinition above, try to pacify it by using standard
+7-bit ascii typing there. Consider also using \ufcr
+(=\UpdateFontClassRegister) command of Caesar before the
+troublesome part, and selectively replacing the complex \uppercase
+by the simple \primuppercase. As a last resort use \noCaesar to
+locally to revert to composite characters.
+
+ -----------------------------
+
+ Some special problems occur for LaTeX. By default a command
+
+ \CaesarProtectLaTeX
+
+is in effect to avoid them. This makes Caesar use composite
+accented characters in its headings. It does so by (re)defining
+parameters \LHdShield, \RHdShield. Other remedies for other
+problems are included.
+
+ To undo this at a later point (to perfect the LaTeX
+typography) use
+
+ \CaesarDeprotectLaTeX
+
+Then LaTeX may get stuck or lose accented characters in headings
+--- especially those involving special font changes and accented
+characters. In this case try 7-bit ascii typing for the
+troublesome headings. If that does not work or is too much
+bother, revert locally to \CaesarProtectLaTeX.
+
+ Beware that \uppercase is used by LaTeX behind the user's back
+and mixed with \edef type expansions.
+
+NB. These difficulties with LaTeX are due to unnecessary use by
+LaTeX of expansion of the sort done by \edef, (and \write, \mark,
+etc.). Hopefully they will all dissappear without trace in
+version 3 of LaTeX. Present versions af LaTeX are fragile, hence
+provisional.
+
+
+ ***** Related tools *****
+
+ (A) Bernd Raichle <raichle@azu.informatik.uni-stuttgart.de>, has
+a patch for the TeX program offering improved versions of
+\uppercase, \lowercase that do not incur any problems, since they
+operate after macro expansion, at the horizontal list level. It
+is not yet available. Raichle's patch and Active8MacCX.tex both
+solve case change problems by *delaying* the case changes, but of
+course to different degrees and in different ways.
+
+ (B) I/O filters available in DirectTeX of W. Ricken let one adopt
+the easy solution that uses the Cork code only within TeX. To
+enjoy the flexibility of Caesar (use of ready-made accented
+characters if they happen to be present), input characters do have
+to be active.
+
+ (C) The same is accomplished for any TeX on the Macintosh through
+use of Cork-encoded screen fonts allied with a special Macintosh
+KCHR resource. These have been provided by N. Jungers and are
+available on ftp matups.matups.fr.
+
+
+ ***** Thanks and programmer notes *****
+
+ Comments of Daniel Taupin and Bernd Raichle in the GUT
+TeX forum October 1992 brought into focus the multiple case change
+problems stirred up by use of active characters. Taupin noticed
+that automatically capitalised headlines in the LaTeX book style
+caused difficulties for all then existing 8-bit typing systems
+which used active characters to align input to norms for output
+(see my Prague proceedings article 1992, where the case change
+problem is mentioned). This stirred me to introduce the two
+replacement pairs \Uppercase,\Lowercase and \eUppercase,
+\eLowercase for \uppercase, \lowercase. From the programmer's
+viewpoint these replacements are the net contribution of these
+macros.
+
+ The author's sincere thanks go to them.
+
+
+ ***** References *****
+
+ --- L. Siebenmann, *La mise en application d\'efinitive de
+la norme de Cork*, pages 107 to 118 in EuroTeX92, Proceedings of
+the 7th European TeX Conference, Prague, Sept 1992, Ed. J. Zlatu\v
+ska <zlatuska@cspuni12.bitnet>, ISBN 80-210-0480-0, Published in
+book form, by Czechoslovak TeX Users Group, Matematick\'y \'ustav
+UK, Sokolovsk\'a 83, CS 18600, Praha, Mailorders: 30 DM hardcover
+and 25 DM soft cover, preprint possibly also posted on ftp
+matups.matups.fr.
+
+ --- B. Jackowski and M. Ry\'cko, *Polishing \TeX*, ibid. pages
+119-134.
+
+
+