summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/c-pascal/cap_comm.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/c-pascal/cap_comm.tex')
-rw-r--r--Master/texmf-dist/tex/generic/c-pascal/cap_comm.tex149
1 files changed, 109 insertions, 40 deletions
diff --git a/Master/texmf-dist/tex/generic/c-pascal/cap_comm.tex b/Master/texmf-dist/tex/generic/c-pascal/cap_comm.tex
index 3f407580b35..30a98aae4a7 100644
--- a/Master/texmf-dist/tex/generic/c-pascal/cap_comm.tex
+++ b/Master/texmf-dist/tex/generic/c-pascal/cap_comm.tex
@@ -2,52 +2,107 @@
% CAP --- Macros for typesetting programs in C and Pascal %
% Micha\l{} Gulczy\'nski, Szczecin, Feb 1997 / Feb 1998 %
% mgulcz@we.tuniv.szczecin.pl %
+% Some (non-essential) changes to support COLORDVI output %
+% Danilo \v Segan, Beograd, Sep 2002 %
+% mm01142@alas.matf.bg.ac.yu %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% version 1.2d
+% Added DVIPS color support (actually, any output is replaced with
+% a macro call to \Ispis --- search for it to see the changes)
+% Also extended a mechanism for marking "special" symbols, so they
+% would get applicable color in a string, comment, or otherwise
+% NOTE: It should be backwards compatible, so there is no need to
+% change anything else, except of course adding color
+% settings if you wish
+% -- by Danilo {\v S}egan, mm01142@alas.matf.bg.ac.yu
% version 1.2
% This file contains common definitions used in the CAP package.
% It does not contain any useful macros itself.
%
+% If you don't have dvips's colordvi.tex, then fetch it from somewhere
+% to avoid errors in processing (it inserts specials which will
+% probably be ignored by anything other than COLORDVI aware software)
+% The alternate solution is to comment out all color definitions
+% (\let's) and to define writeout function as \def\Ispis#1{#1}
+\input colordvi
+
+% If you don't have color printer, you may choose to remain compatible
+% with those that do, and only use analogous dvips's input file
+%\input blackdvi
%
-% macro that compares two strings
+% font and color declarations
%
-\def\@Identical#1#2{%
- MG\fi
- \edef\@FirstString{#1}%
- \edef\@SecondString{#2}%
- \ifx \@FirstString \@SecondString
-}
+\font\tenttsl = cmsltt10 % <--- modify these two lines if you don't use
+\font\tenttit = cmitt10 % <--- CM fonts
+\let\IdentifierFont = \it
+\let\IdentifierColor = \Black
+\let\TextFont = \sl
+\let\TextColor = \Black
+\let\KeywordFont = \bf
+\let\KeywordColor = \Black
+\let\CommentFont = \tenttit
+\let\CommentColor = \Black
+\let\DirectiveFont = \tenttsl
+\let\DirectiveColor = \Black
+\let\SymbolFont = \tt
+\let\SymbolColor = \Black
+\let\SpecialFont = \tt % some characters: { } < > _ \ and | are very
+\let\SpecialColor = \Black % special -- they exist only in tt fonts
+
%
-% font declarations
+% how much does a single "space" skip (retained the default 1ex from CAP)
%
-{% a tiny trick that lets TeX check if the user has PL fonts...
- \catcode`\p = 12
- \catcode`\l = 12
- \catcode`\r = 12
- \xdef\xxx{plr10}
-}
-\if\@Identical{\xxx}{\fontname\tenrm}
- \font\tenttsl = plsltt10
- \font\tenttit = plitt10
-\else
- \font\tenttsl = cmsltt10
- \font\tenttit = cmitt10
-\fi
-\let\IdentifierFont = \it
-\let\TextFont = \sl
-\let\KeywordFont = \bf
-\let\CommentFont = \tenttit
-\let\DirectiveFont = \tenttsl
-\let\SymbolFont = \tt
-\let\SpecialFont = \tt % some characters: { } < > _ \ and | are very
- % special -- they exist only in tt fonts
+\newdimen\SpaceSkip % Changeable space skip (instead of the old fixed 1ex)
+\SpaceSkip=1ex
+
+
+%\def\GenState#1{%
+%\expandafter\expandafter\def\csname @#1State\endcsname{%
+% \def\@Color{\csname#1Color\endcsname}%
+% \def\@@State{#1}%
+% \expandafter\csname #1Font\endcsname}}
+\def\GenState#1{%
+\expandafter\expandafter\def\csname @#1State\endcsname{%
+ \def\@tmpName{#1}%
+% \ifx\@@State\@tmpName\else% if already in this state, skip
+ \def\@Color{\csname#1Color\endcsname}%
+ \def\@@State{#1}%
+ \expandafter\csname #1Font\endcsname%\fi}}
+ }}
+
+\GenState{Identifier}
+\GenState{Text}
+\GenState{Keyword}
+\GenState{Comment}
+\GenState{Directive}
+\GenState{Symbol}
+% One \GenState{NAME} replaces the following definition
+% \def\@NAMEState{\let\@Color=\NAMEColor\NAMEFont\def\@@State{NAME}}
+\def\@SpecialState{%
+ \def\neka##1{\edef\@@stanje{##1}}%
+ \neka{Directive}\ifx\@@State\@@stanje%
+ \let\@Color=\DirectiveColor%
+ \else
+ \neka{Comment}\ifx\@@State\@@stanje%
+ \let\@Color=\CommentColor%
+ \else
+ \neka{Text}\ifx\@@State\@@stanje%
+ \let\@Color=\TextColor%
+ \else%
+ \let\@Color=\SpecialColor
+ \fi\fi\fi%
+ \SpecialFont}
+
+\def\@Output#1{\@Color{#1}}
+
%
% registers and constants used in the program
%
\newif\if@TempBool % temporary boolean
-\newread\@InFile % file read by \Insert macros
+\newread\@InFile % file read by \Input macros
\newcount\@CharCode % code of current character
\newcount\@PrevChar % code of previous charater
\newcount\@WhereAmI % one of the following values:
@@ -57,6 +112,15 @@
\chardef\@ShortComment = 3 % C: //... ; Pascal: (* ... *)
\chardef\@LongComment = 4 % C: /* ... */; Pascal: { ... }
%
+% macro that compares two strings
+%
+\def\@Identical#1#2{%
+ MG\fi
+ \edef\@FirstString{#1}%
+ \edef\@SecondString{#2}%
+ \ifx \@FirstString \@SecondString
+}
+%
% I need a "not eof" function
%
\def\neof#1{%
@@ -97,23 +161,28 @@
\def\@Word{}%
\@WhereAmI = \@NothingSpecial
\@PrevChar = 32
- \SymbolFont
+ \@SymbolState
}
%
% macro that outputs the char specified as the argument;
-% characters < > _ \ { | } are written with \SpecialFont
+% characters < > _ \ { | } are written with \SpecialState,
+% except for _ which is written with \IdentifierColor and \SpecialFont
%
\def\@WriteChar#1{%
\def\@Check##1{%
- \ifnum `#1=`##1
- {\SpecialFont #1}%
- \@TempBooltrue
+ \ifnum `#1=`##1%
+ {\@SpecialState \@Output{#1}}%
+ \@TempBooltrue%
\fi
}%
\@TempBoolfalse
\@Check{<}%
\@Check{>}%
- \@Check{_}%
+% \@Check{_}%
+ \ifnum`#1=`\_%
+ \@IdentifierState\SpecialFont%
+ \@Output{#1}\@TempBooltrue%
+ \fi%
\@Check{\\}%
\@Check{\{}%
\@Check{\}}%
@@ -124,9 +193,9 @@
\par\leavevmode
\else
\ifnum `#1=32
- \hskip 1ex
+ \hskip\SpaceSkip
\else
- #1%
+ \@Output{#1}%
\fi
\fi
\fi
@@ -137,9 +206,9 @@
%
\def\@WriteWord#1#2{%
\if\@OnListOfKeywords{ #1 }{#2}%
- {\KeywordFont #1}%
+ {\@KeywordState\@Output{#1}}%
\else
- {\IdentifierFont #1}%
+ {\@IdentifierState\@Output{#1}}%
\fi
}
%