% *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
%	Copyright (C) 1991--1997 Y&Y, Inc. All Rights Reserved
% *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

% ============================================================================
% Accented and composite characters in fonts that use `ansinew.vec' encoding
%		(Windows ANSI)	VERSION 2.7 (1997 Jan 30)
% ============================================================================

% \input ansiacce in TeX source when using fonts with `Windows ANSI' encoding.

% `plain' TeX - and `lplain' TeX - have accents hard-wired to certain codes.
% When a font is reencoded, compound characters and accents may be moved.
% This file deals with this for Windows ANSI encoding.

% Changes required for math constructions that use roman font are at the end

% IMPORTANT NOTE --- `quoteleft' and `quoteright' are active:

% This defines ` to be active, since `quoteleft' is remapped from 96 to 145
% This defines ' to be active, since `quoteright' is remapped from 39 to 146
% Having `quoteleft' and `quoteright' active may interfere with other macros.
% If this is a problem when reading macro packages after ansiacce.tex, then:
%	(i) first make the quotes act as `other character' using:
%		\catcode\string`\'=12 \catcode\string`\`=12
%	(ii) then \input the other TeX macro package
%	(iii) finally reinstate the remapping by making the quotes `active':
%		\catcode\string`\'=13 \catcode\string`\`=13

% NOTE: it would be cleaner to do this by changing TeX's `xchr' table,
% but few implementations of TeX provide for this desirable customization.

% NOTE:  Default is to use the 58 ready-made accented/composite characters
% that occur in text fonts directly, using the macros defined below.
% To instead build them by overprinting, use \buildcomposites.
% To instead link to them via pseudo ligatures, use \usecomposites.

% NOTE: Windows ANSI is based on ISO Latin 1 with additions of some
% typographically important characters in the 128 - 159 range

% --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

% First, protect against style files that make quotedbl `active'

\chardef\dblcode=\catcode`\"	% save catcode of quotedbl
\catcode`\"=12			% make quotedbl `other'

\chardef\atcode=\catcode`\@	% save catcode of atsign
\catcode`\@=11			% make atsign `letter'

% --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

% NOTE: plain TeX (and LaTeX) has the accent character positions hardwired to:

% 16 for `dotlessi',	   17 for `dotlessj',	18 for `grave',	
% 19 for `acute',	   20 for `caron',	21 for `breve',	
% 22 for `macron',	   23 for `ring',	24 for `cedilla',
% 25 for `germandbls',	   26 for `ae',		27 for `oe',
% 28 for `oslash',	   29 for `AE',		30 for 'OE',	
% 31 for `Oslash',	   94 for `circumflex',	95 for `dotaccent',
% 125 for `hungarumlaut',  126 for `tilde',	127 for `dieresis',
% (see page 356 of the TeX book for additional information)
% Windows ANSI lacks dotlessi, dotaccent, caron, ring, breve, hungarumlaut

% --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

% If you get error messages like `Error: No ... in Windows ANSI,' then
% you are using a character that is not accessible in Windows ANSI encoding
% You may then want to switch to some other encoding -- like TeX 'n ANSI --
% and add \input texnansi instead of \input ansiacce to your TeX source file.
% But this only works if your TeX system supports on the fly font reencoding.

\def\ansierror#1{\immediate\write16{Error: No #1 in Windows ANSI}}

% The following sample redefinitions are for `ANSINEW' encoding:
% Tell TeX where various special characters are:

\def\ae{^^f0}	% 230	ae
\def\oe{^^9c}	% 156	oe
\def\o{^^f8}	% 248	oslash
\def\AE{^^d0}	% 198	AE
\def\OE{^^8c}	% 140	OE
\def\O{^^d8}	% 216	Oslash
% \chardef\i=105  % 	dotlessi %	not in ANSI
\def\ss{^^de}	% 223	germandbls

% \def\i{i\ansierror{dotlessi}}	% needed for accented chars based on dotlessi

% Following constructed from pieces in CM, but exist in Type 1 text fonts

\def\aa{^^e5} \def\AA{^^c5}		% aring (229), Aring (197)
% \def\cc{^^e7} \def\CC{^^c7}		% ccedilla (231), Ccedilla (199)

% NOTE: \cc may conflict with `carbon copy' in letter.sty ...

% \chardef\l=144 \chardef\L=128	% lslash, Lslash  % not in Windows ANSI...

\def\l{l\ansierror{lslash}}
\def\L{L\ansierror{Lslash}}

% Windows ANSI also has the Icelandic characters:

\def\th{^^fe} \def\TH{^^de}		% thorn (254), Thorn (222)
\def\dh{^^f0} \def\DH{^^d0}		% eth (240), Eth (208)

\def\pounds{^^a3}	\def\copyright{^^a9}	% 163 and 169
\def\registered{^^ae}	\def\trademark{^^99}	% 174 and 153
% \def\dag{^^86} \def\ddag{^^87}	% dagger (134), daggerdbl (135)
\def\S{^^a7}		\def\P{^^b6}	% section (167), paragraph (182)

% Make it more convenient to use { } _ | \ glyphs direct from text font ?

% \chardef\{=`\{ \chardef\}=`\} \chardef\_=`\_
% \chardef\|=`\| \chardef\backslash=`\\

% --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

% Following set up for 56 of the 58 accented characters/composites

% aacute, acircumflex, adieresis, agrave, aring, atilde, ccedilla,
% eacute, ecircumflex, edieresis, egrave, iacute, icircumflex,
% idieresis, igrave, ntilde, oacute, ocircumflex, odieresis, ograve, otilde,
% scaron, uacute, ucircumflex, udieresis, ugrave, yacute, ydieresis,
% Aacute, Acircumflex, Adieresis, Agrave, Aring, Atilde, Ccedilla,
% Eacute, Ecircumflex, Edieresis, Egrave, Iacute, Icircumflex,
% Idieresis, Igrave, Ntilde, Oacute, Ocircumflex, Odieresis, Ograve, Otilde,
% Scaron, Uacute, Ucircumflex, Udieresis, Ugrave, Yacute, Ydieresis

% Zcaron and zcaron are not encoded in Windows ANSI.

\def\`#1{% grave
\if#1a^^e0\else%	\char224 
\if#1e^^e8\else%	\char232 
\if#1i^^ec\else%	\char236 
\if#1o^^f2\else%	\char242 
\if#1u^^f9\else%	\char249 
\if#1A^^c0\else%	\char192 
\if#1E^^c8\else%	\char200 
\if#1I^^cc\else%	\char204 
\if#1O^^d2\else%	\char210 
\if#1U^^d9\else%	\char217 
% \if#1{\i}^^ec\else%	\char236 
\if#1\i^^ec\else%	\char236 
{\accent96 #1}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}

\def\'#1{% acute
\if#1a^^e1\else%	\char225 
\if#1e^^e9\else%	\char233
\if#1i^^ed\else%	\char237
\if#1o^^f3\else%	\char243 
\if#1u^^fa\else%	\char250 
\if#1y^^fd\else%	\char253 
\if#1A^^c1\else%	\char193 
\if#1E^^c9\else%	\char201 
\if#1I^^cd\else%	\char205 
\if#1O^^d3\else%	\char211 
\if#1U^^da\else%	\char218 
\if#1Y^^dd\else%	\char221 
% \if#1{\i}^^ed\else%	\char237 
\if#1\i^^ed\else%	\char237 
{\accent180 #1}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}

\def\^#1{% circumflex
\if#1a^^e2\else%	\char226 
\if#1e^^ea\else%	\char234 
\if#1i^^ee\else%	\char238 
\if#1o^^f4\else%	\char244 
\if#1u^^fb\else%	\char251 
\if#1A^^c2\else%	\char194 
\if#1E^^ca\else%	\char202 
\if#1I^^ce\else%	\char206 
\if#1O^^d4\else%	\char212 
\if#1U^^db\else%	\char219 
% \if#1{\i}^^ee\else%	\char238 
\if#1\i^^ee\else%	\char238 
{\accent136 #1}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}

\def\~#1{% tilde
\if#1a^^e3\else%	\char227 
\if#1n^^f1\else%	\char241 
\if#1o^^f5\else%	\char245 
\if#1A^^c3\else%	\char195 
\if#1N^^d1\else%	\char209 
\if#1O^^d5\else%	\char213 
{\accent152 #1}%
\fi\fi\fi\fi\fi\fi}

\def\"#1{% dieresis
\if#1a^^e4\else%	\char228 
\if#1e^^eb\else%	\char235 
\if#1i^^ef\else%	\char239 
\if#1o^^f6\else%	\char246 
\if#1u^^fc\else%	\char252 
\if#1y^^ff\else%	\char255 
\if#1A^^c4\else%	\char196 
\if#1E^^cb\else%	\char203 
\if#1I^^cf\else%	\char207 
\if#1O^^d6\else%	\char214 
\if#1U^^dc\else%	\char220 
\if#1Y^^9f\else%	\char159 
% \if#1{\i}^^ef\else%	\char239 
\if#1\i^^ef\else%	\char239 
{\accent168 #1}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}

\def\v #1{% caron
\if#1s^^9a\else%	\char154 
\if#1S^^8a\else%	\char138 
{\accent136 #1}% caron NOT in Windows ANSI encoding (fake using circumflex)
\ansierror{caron}%
\fi\fi}

\def\r #1{% ring
\if#1a^^e5\else%	\char229 
\if#1A^^c5\else%	\char197 
{\accent176 #1}% ring NOT in Windows ANSI encoding (fake using degree)
\ansierror{ring}%
\fi\fi}

\def\c #1{% cedilla
\if#1c^^e7\else%	\char231 
\if#1C^^c7\else%	\char199 
{\setbox0\hbox{#1}\ifdim\ht0=1ex\accent184 #1
  \else{\ooalign{\hidewidth\char184\hidewidth\crcr\unhbox0}}\fi}%
\fi\fi}

\def\H#1{{\accent34 #1}\ansierror{hungarumlaut}} % fake using quotedbl
\def\u#1{{\accent175 #1}\ansierror{breve}}	% fake using macron
\def\k#1{{\accent184 #1}\ansierror{ogonek}}	% fake using cedilla

% dotaccent and macron have to be treated differently in AMS TeX

\ifx\amstexloaded@\relax%
\def\D#1{{\accent46 #1}\ansierror{dotaccent}} % not in Windows ANSI
\def\B#1{{\accent175 #1}}	% macron
\let\graveaccent\`
\let\acuteaccent\'
\let\tildeaccent\~
\let\hataccent\^
\let\underscore\_
\else
\def\.#1{{\accent46 #1}\ansierror{dotaccent}}	% not in Windows ANSI
\def\=#1{{\accent175 #1}}	% macron
\fi

% underline (using macron at 175)
\def\b#1{\oalign{#1\crcr\hidewidth
    \vbox to.2ex{\hbox{\char175}\vss}\hidewidth}}%

% --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

% For backward compatability, provide for use of font with TeX's \accent:
% (It is however generally better to use ready-made accented characters, since
% \accent creates explicit kerning, which breaks the hyphenation machinery)
% NOTE: Use \buildcomposites if you want accented/composite characters
% constructed by `overprinting' base and accent.

\def\buildcomposites{%
\def\`##1{{\accent96 ##1}}%	 grave
\def\'##1{{\accent180 ##1}}%	 acute
\def\^##1{{\accent136 ##1}}%	 circumflex
\def\~##1{{\accent152 ##1}}%	 tilde
\def\"##1{{\accent168 ##1}}%	 dieresis
\def\=##1{{\accent175 ##1}}%	 macron
% \def\v##1{{\accent149 ##1}}%	 caron		% not in ANSI
% \def\u##1{{\accent149 ##1}}%	 breve		% not in ANSI
% \def\.##1{{\accent149 ##1}}%	 dotaccent	% not in ANSI
% \def\H##1{{\accent149 ##1}}%	 hungarumlaut	% not in ANSI
\def\v##1{{\accent136 ##1}\ansierror{caron}}
\def\u##1{{\accent175 ##1}\ansierror{breve}}
\def\.##1{{\accent46 ##1}\ansierror{dotaccent}}
\def\H##1{{\accent34 ##1}\ansierror{hungarumlaut}}
% underline and cedilla accents (macron at 175, cedilla at 184)
\def\b##1{\oalign{##1\crcr\hidewidth
    \vbox to.2ex{\hbox{\char175}\vss}\hidewidth}}%
\def\c##1{\setbox0\hbox{##1}\ifdim\ht0=1ex\accent184 ##1
  \else{\ooalign{\hidewidth\char184\hidewidth\crcr\unhbox0}}\fi}%
}

% --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

% USING READY-MADE ACCENTED CHARACTERS:
% We can also use pre-built accented character using pseudo ligatures ---
% provided the TFM files for the text fonts have them wired in.
% The following assumes that the TFM files have the required pseudo-ligatures.
% Use -vadj on the command line with AFMtoTFM to set up these pseudo-ligatures.
% This only works for the 58 ready-made accented/composite characters.

\def\usecomposites{%
\chardef\`=96	% grave
\chardef\'=180	% acute
\chardef\^=136	% circumflex		% new position in new ANSI (Win 3.1)
\chardef\~=152	% tilde			% new position in new ANSI (Win 3.1)
\chardef\"=168	% dieresis
\chardef\c=184	% cedilla
\chardef\i=105	% no dotlessi in ANSI - but need this for pseudo ligs
% and some extra goodies
\chardef\==175	% macron	% no standard accented chars uses this
\def\v{\ansierror{caron}\char136}
\def\u{\ansierror{breve}\char175}
\def\.{\ansierror{dotaccent}\char46}
\def\H{\ansierror{hungarumlaut}\char34}
}

% NOTE: To use the above scheme, use \'a, NOT \'{a}, and \c c, NOT \c{c}.

% --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

% \buildcomposites	% build composites from base and accent
% \usecomposites	% use instead ready-made composites

% Default is to use 56 ready-made composites and build others by overprinting.

% --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

% Changes required in math macros when roman font is reencoded to `ansinew'.
% (An alternative is to draw the accents from the math fonts)

% Most accents are *not* in same place as in TeX text encoding

\def\usetextaccents{
\def\grave{\mathaccent"7060 }	%  96 grave
\def\acute{\mathaccent"70B4 }	% 180 acute
\def\hat{\mathaccent"7088 }	% 136 circumflex
\def\tilde{\mathaccent"7098 }	% 152 tilde
\def\ddot{\mathaccent"70A8 }	% 168 dieresis
\def\bar{\mathaccent"70AF }	% 175 macron
% \def\check{\mathaccent"708D }	% caron		% not in ANSI
\def\check{{\ansierror{caron}}\mathaccent"7088}	% caron
% \def\breve{\mathaccent"70C6 }	% breve		% not in ANSI
\def\breve{{\ansierror{breve}}\mathaccent"70AF}	% breve
% \def\dot{\mathaccent"70B7 }	% dotaccent	% not in ANSI
\def\dot{{\ansierror{dotaccent}}\mathaccent"702E} % dotaccent
}

% Do not redefine accents in math mode when using MathTime,
% since MathTime uses accents in the math fonts - not the text font.

% \usetextaccents

% In LaTeX 2e check whether mathtime package has been loaded,
% otherwise check whether \MTMI is defined

\ifx\@ifpackageloaded\undefined\ifx\MTMI\undefined\usetextaccents\fi
\else\@ifpackageloaded{mathtime}{}{\usetextaccents}\fi

% --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---

% To deal with \@parboxrestore kludge in LaTeX (restores grave, acute, macron)

\let\@acci=\'
\let\@accii=\`
\let\@acciii=\=

% NOTE: if grave, acute, and macron accents are lost after certain LaTeX
% enviroments are used (such as the tabbing environment), then it is because
% a LaTeX macro/style file is read in after this that redefines the above.

% **************************************************************************

% Need to deal with prime in math mode since 39 is remapped to 146

{\catcode146=\active \gdef^^92{{^\bgroup\prim@s}}}
\mathcode146="8000 % ^\prime

% **************************************************************************

% If you want to use < for `guilsinglleft' and > for `guilsinglright'
% then uncomment the following lines:

% \catcode`\<=\active \chardef<=139
% \catcode`\>=\active \chardef>=155

% If you use < for `exclamdown', > for `questiondown', and | for `emdash'
% then uncomment the following lines:

% \catcode`\<=\active \chardef<=161
% \catcode`\>=\active \chardef>=191
% \catcode`\|=\active \chardef|=151

\chardef\lq=145 \chardef\rq=146

% Note that \lq and \rq also provide access to ` and '

\catcode`\@=\atcode		% restore original catcode of at sign

\catcode`\"=\dblcode		% restore original catcode of quotedbl

% If you use " for quotedblright then uncomment the following:

% \catcode`\"=\active \chardef"=148

% `quoteright' has moved from 39 to 146 make space for `quotesingle' in ANSI:

\catcode`\'=\active \chardef'=146

% `quoteleft' has moved from 96 to 145 make space for `grave' in ANSI:

\catcode`\`=\active \chardef`=145

% NOTE: making ` and ' active, as above, may prevent some other TeX macro
% packages from working properly --- see notes at head of file for fix.

% For proper hyphenation of words with accented characters we need to let
% TeX know how to translate words with accented characters to lower case.
% Hence define \lccode so that one can use them in \hyphenation{...}
% Just for fun, we also define \uccode, and set the \catcode to letter...

% Mostly in ISO Latin 1, accented characters (and a few special characters)
% occur in upper case form in the range 192 - 222, which is offset
% by 32 from the corresponding lower case forms in the range 224 - 254.

\bgroup
\newcount\n\newcount\m\n=224\m=192
\loop\ifnum\n<255
\global\catcode\n=11\global\catcode\m=11
\global\lccode\n=\n\global\lccode\m=\n
\global\uccode\m=\m\global\uccode\n=\m
\advance\n by1\advance\m by1\repeat
\egroup

% Then there are just a few odd ones in Windows ANSI introduced in Windows 3.1

\catcode140=11\catcode156=11	% OE, oe
\lccode140=156\lccode156=156
\uccode140=140\uccode156=140
\catcode159=11\catcode255=11	% Ydieresis, ydieresis
\lccode159=255\lccode255=255
\uccode159=159\uccode255=159
\catcode138=11\catcode154=11	% Scaron, scaron
\lccode138=154\lccode154=154
\uccode138=138\uccode154=138

\endinput

% **************************************************************************

% NOTE: definitions have embedded numbers that depend on the chosen encoding
% These will need to be changed if you use an encoding other than `ANSINEW'

% **************************************************************************

% **************************************************************************
%	Y&Y, Inc, 45 Walden Street, Concord, MA 01742 USA  (508) 371-3286
% **************************************************************************