summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/examplep/codep.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/examplep/codep.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/examplep/codep.sty')
-rw-r--r--macros/latex/contrib/examplep/codep.sty447
1 files changed, 447 insertions, 0 deletions
diff --git a/macros/latex/contrib/examplep/codep.sty b/macros/latex/contrib/examplep/codep.sty
new file mode 100644
index 0000000000..a12ed691ab
--- /dev/null
+++ b/macros/latex/contrib/examplep/codep.sty
@@ -0,0 +1,447 @@
+%
+% codep.sty -- typeset Source and Sample, and dump Source to an external file
+% by pts@fazekas.hu at Wed Jan 5 22:38:29 CET 2005
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{codep}[2005/01/01 v0.01 typeset Source and Sample, dump to file]
+
+\RequirePackage{examplep}
+
+% Some docs in Hungarian
+% --- \begin{code} (WF és pts tervezése, a dokumentációt is ketten írták)
+%
+% A pelda, peldak, kod környezetek továbbra is működnek, de használatuk
+% nem javasolt. Helyettük létrejön a megszűnnek, helyettük marad a `code'
+% környezet. A környezet alakja:
+%
+% \begin{code}
+% j szöveg
+% j szöveg
+% \end{code}
+%
+% ahol 'j' egy egykarakteres jel, 'szöveg' pedig a kódszöveg.
+% 'j' lehetséges értékei v,f,d,l,p,0,t,b,<,>, ,c,o,2,e. Ezek a jelek
+% osztályokba vannak sorolva, az osztályok sorrendje meg van kötve, de az
+% egy osztályba tartozók sorrendje tetszőleges. Az osztályokat Nagy
+% betűvel jelöljük, de ez csak a kommunikációt segíti, egyébként nem
+% használjuk sehol.
+%
+% Minden _osztályhoz_ tartozik egy default jelsorozat (default
+% argumentummokkal). Ha egy osztály kimarad, akkor ez a default lefut.
+%
+% Azt kell vezérelnünk, hogy a code kódja hova menjen, és ott hogy
+% jelenjen meg! Mehet *kód*ba (régen ez volt a kod környezet), mehet
+% *kód*ba, és mellé *output*ba (régen ezt csinálta a pelda
+% környezet), és az előző két változattól függetlenül mehet egy
+% *fájl*ba, ami egyből futtatható is, és a CD-n mellékeljük!
+%
+%
+% osztály
+% jel default jelentés
+% --+---+-------------------------+------------------------------------
+% F |f |(nincs _).tex |a teljes kód bekerül egy fájlba:
+% | | |f nev.tex -> 2_63_nev.tex
+% | | |A .tex kiterjesztést is kötelező kiírni!
+% |v | |azonnal C-be lép D,L,P,B,E default-jait
+% | | | megüresítve. Megadható `v .mp', ekkor
+% | | | 2_63_.mp alakú file fog keletkezni.
+% |f! | |f!nev.tex -> nev.tex
+% |v! | |v!nev.ps -> nev.ps
+% --+---+-------------------------+------------------------------------
+% G | | |ide visz egy F-beli parancs
+% --+---+-------------------------+------------------------------------
+% D |d |\documentclass{article} |a LaTeX-fájl első sora -> fájl
+% --+---+-------------------------+------------------------------------
+% L |l |\usepackage[latin2]{inputenc} -> fájl
+% | |\usepackage[T1]{fontenc} ha nem e három sort akarjuk, akkor egy
+% | |\usepackage[magyar]{babel} üres l törli, és a p-be írjuk az újat.
+% --+---+-------------------------+------------------------------------
+% P |p 0| |preambulumba -> fájl
+% |t | |ha kódba is -> fájl + kód(%^)
+% | | |pl. `t \usepackage{foo}
+% --+---+-------------------------+------------------------------------
+% B |b |\begin{document} | -> fájl
+% --+---+-------------------------+------------------------------------
+% C |< c| | -> kód + fájl
+% |> o| | -> könyvbeli output
+% | 2| | (` ' vagy `2 ') -> kód + output + fájl
+% |w | | -> fájl
+% |s | | -> kód
+% |% | | komment, sehova nem kerül be
+% --+---+-------------------------+------------------------------------
+% E |e |\end{document} | -> fájl
+% --+---+-------------------------+------------------------------------
+% Z | | |ide visz az \end{code}
+% --+---+-------------------------+------------------------------------
+%
+% A kiírásnál az alábbi korlátok (lennének) érvényesek:
+%
+% -- a file mindenképpen soremelésre végződik (TeX \write tulajdonsága)
+% -- a file-nak muszáj kiterjesztést adni (egyébként .tex lenne). Ha nem
+% kívánkunk kiterjesztést, akkor `.noext' legyen (TeX \openout
+% tulajdonsága)
+% -- a sorvégi szóközök törlődnek (akkor is, ha csak szóköz van a sorban)
+% -- az ékezetes betűk ^^-pal íródnak ki ( pl. á -> ^^e1), hacsak nem
+% `latex --translate-file cp8bit.tcx'-et futtatunk (nem
+% `--translate-file il2-t1.tcx'-et, mert az a DVI-ben levő ő-t elrontja)
+% Ez információvesztéssel jár, mert mi van, ha eleve ^^-ot akartunk volna
+% kiírni?
+% -- nehézkes elkerülni, hogy ne generálódjon két azonos nevű file
+% (ugyanazon az oldalon, ugyanabban a fejezetben két \begin{pelda}
+% -- a régi peldak környezetben a sorhatárok elvesznek
+%
+% Éppen ezért a file-ba írást nem a TeX-hel csináltatjuk, hanem egy Perl
+% script-et fogok írni, ami az .aux file alapján dolgozik:
+% `wrfiles.pl master.aux'. Ezt nyilván a LaTeX futtatása után kell majd
+% futtatni. Ennek a megoldásnak a tulajdonságai:
+%
+% -- (hátrány) \begin{code} és társai nem hívhatók olyan .tex file-ból,
+% amely más .tex file-okat betölt; és a főfile-on kívül csak olyan
+% file-ból hívható, ami \input{...}-tal vagy \include{...}-dal (kapcsos
+% zárójel kötelező!) lett betöltve (ez amiatt van, hogy a TeX-ben nem
+% kérdezhető le az aktuális file neve)
+% -- ha az \end{code} előtti soremelés vagy belekerül a file-ba vagy nem
+% -- nem kötelező a kiterjesztés a filenév végén
+% -- sorvégi szóközök megmaradnak
+% -- ékezetes betűk megmaradnak
+% -- a sorhatárok \begin{peldak}-ban sem vesznek el
+% -- a \begin{code} után közvetlenül a szóközök elnyelődnek, majd 0 vagy 1
+% soremelés is elnyelődik
+% -- a \begin{peldak} output-ba kerülő részében (a kommentektől eltekintve)
+% helyesen kell egymásba ágyazni a kapcsoszárójeleket!
+% -- akár Unicode-ös szövegfájl is létrehozható
+%
+% A régi környezetek működése:
+%
+% -- \begin{kod}: \begin{code}-ként működik, csupa `< ' jellel. Ez például
+% azt jelenti, hogy a nyelvspecifikus részeket (babel csomag, L osztály)
+% mindig kiírja a fájlba!
+% -- \begin{pelda}: \begin{code}-ként működik, csupa `2 ' jellel
+% -- \begin{peldak}: \begin{code}-ként működik, `< ' és `> ' jelekkel
+% Az output-ba kerülő részben (a kommentektől eltekintve) helyesen kell
+% egymásba ágyazni a kapcsoszárójeleket!
+%
+% Tipikus használatok:
+%
+% 1. Nem magyar szöveg -- mindhárom helyre
+%
+% \begin{code}
+% f nembonyolult.tex
+% l
+% Not so complicated!
+% \end{code}
+%
+% Az eredmény kimentődik pl. a 2_63_nembonyolult.tex nevű állományba,
+% ahol 2 a fejezet sorszáma, 63 az aktuális oldalszám.
+%
+% [pts] Az oldalszám kinyeréséhez \ref-et kell majd csinálni.
+%
+% 2. Magyar szöveg -- mindhárom helyre
+%
+% \begin{code}
+% ÁRVÍZTŰRŐ tükörfúrógép.
+% \end{code}
+%
+% Az eredmény kimentődik a 2_63.tex állományba, ahol 2 a fejezet
+% sorszáma, 63 az aktuális oldalszám (kerüljük ezt a laza módszert,
+% az f-et adjuk meg!)
+%
+% 3. Nem magyar szöveg csomaggal, és nem írjuk ki fájlba
+%
+% \begin{code}
+% f
+% l
+% p \usepackage{amsmath}
+% \[1+1 \text{ equals to } 2\]
+% \end{code}
+%
+% 4. Nem magyar szöveg csomaggal -- de lássuk a könyvbeli kódon is,
+% hogy milyen csomagot kell betölteni:
+%
+% \begin{code}
+% l
+% t \usepackage{amsmath}
+% \[1+1 \text{ equals to } 2\]
+% \end{code}
+%
+% (pts írja: ekkor a könyvbeli kód százalékjellel fog kezdődni, mivel
+% minden t-s sor százalékjelet szúr be: `%^\usepackage{amsmath}'
+%
+% 5. Hazudunk, és mást írunk a kódba, mint az outputba:
+%
+% \begin{code}
+% f filename.tex
+% < \author{Szerző}
+% < \date{}
+% > \centering Szerző\\
+% > 2004 augusztus 20.
+% \end{code}
+%
+% 6. Ha valami más kódot közlünk teljes egészében
+%
+% \begin{code}
+% v!mikulaska.eps
+% < %!PS-Adobe-2.0 EPSF-2.0
+% < %%Title: mikulaska.eps
+% < %%Creator: fig2dev Version 3.2 Patchlevel 3d
+% < %%CreationDate: Mon Oct 27 17:01:57 2003
+% < %%...és így tovább
+% \end{code}
+%
+% `% ' type
+
+\newenvironment{code}{%
+ \begingroup
+ \verbfwr@default@acts% superfluous, will be overridden
+ \let\verbfwr@actemitdone\codep@code@done
+ \let\verbfwr@actemitlineone\codep@code@lineone
+ \let\verbfwr@actemitline\codep@code@line
+ \verbfwr@safespc% \catcode32 13
+ \def\codep@code@@curclass{F}%
+ \edef\codep@code@@inputlineno{\the\inputlineno}%
+ \global\let\pexa@@cursourcename\relax
+ \global\let\pexa@@cursamplename\relax
+ \ifhmode\unskip\fi% before \write. Strange: why is it needed for \immediate\write
+ \verbfwr@readenv\verbfwr@write% no more after this
+}{%
+ % Dat: too late for \ifhmode\unskip\fi
+ \endgroup% undo \catcode changes, see above
+ \ifx\pexa@@cursamplename\relax
+ \ifx\pexa@@cursourcename\relax\else
+ \PexaShowSource{srcstyle=leftnumhang}%
+ \fi
+ \else
+ \immediate\closeout\codep@code@samplefile
+ \ifx\pexa@@cursourcename\relax\else% Dat: there may be only Sample => don't show anything
+ \PexaShowBoth{srcstyle=leftnumhang}%
+ %\aftergroup\PexaShowBoth\aftergroup{\aftergroup}%
+ \fi
+ \fi
+ % Dat: no more \endgroup here, for \if@endpe
+ \aftergroup\clubpenalty\aftergroup\@clubpenalty% fundamental LaTeX design flaw -- BUGFIX at Fri Apr 16 00:32:04 CEST 2004
+}
+
+\def\codep@code@lineone{\let\verbfwr@actemitlineone\@empty}% std
+\let\codep@code@@prefix\@empty
+\def\codep@code@line#1{%
+ \expandafter\expandafter\expandafter\codep@code@line@a
+ \expandafter\codep@code@@prefix\VerbFwrLines\hfuzz
+}
+\begingroup\lccode\string`~\string`\ \lowercase{\endgroup
+%** Add spaces into the beginning if line length < 2
+\def\codep@code@line@a#1{%
+ \ifx#1\hfuzz\expandafter\codep@code@line@c\expandafter~\expandafter~\expandafter\hfuzz
+ \else\expandafter\codep@code@line@b\expandafter#1\fi
+}
+\def\codep@code@line@b#1#2{%
+ \ifx#2\hfuzz\expandafter\codep@code@line@c\expandafter#1\expandafter~\expandafter\hfuzz
+ \else\expandafter\codep@code@line@c\expandafter#1\expandafter#2\fi
+}
+}% \lowercase
+\def\codep@code@line@c#1#2#3\hfuzz{%
+ %%[(#1)(#2)#3]%
+ \edef\codep@code@@curcmd{\string#1\string#2}%
+ \expandafter\ifx\csname codep@code@\codep@code@@curcmd\endcsname\relax
+ \PackageError{lb}{Unknown code command \string`\codep@code@@curcmd'}\@eha
+ % Dat: no other commands of pattern `\codep@code@..'
+ \else
+ \csname codep@code@\codep@code@@curcmd\endcsname{#3}%
+ \fi
+}
+%** @param #1 uppercase letter token: [FGDLPBCE]
+%** @expands to positive class number or 0
+\def\codep@code@classnum#1{%
+ \if#1F1\else\if#1G2\else\if#1D3\else\if#1L4\else\if#1P5\else
+ \if#1B6\else\if#1C7\else\if#1E8\else\if#1Z9\else0\fi\fi\fi\fi\fi\fi\fi\fi\fi
+}
+\def\codep@code@toclass#1{%
+ \@tempcnta\expandafter\codep@code@classnum\codep@code@@curclass\relax
+ \@tempcntb\codep@code@classnum#1\relax
+ % ^^^ Dat: need these because of the cascaded \if
+ %%\showthe\@tempcnta \showthe\@tempcntb
+ \ifnum\@tempcnta>\@tempcntb
+ \PackageError{lb}{Code command \string`\codep@code@@curcmd' too late (class \codep@code@@curclass\space> #1)}\@ehc
+ \fi
+ \ifnum\@tempcnta<2 \ifnum\@tempcntb>2 % class F missing
+ % Imp: make class 0 the default
+ \codep@code@setwfile1{}%
+ \fi\fi
+ % vvv Dat: don't set \codep@code@@curcmd here
+ % vvv Dat: no need for this, the Perl script wrfiles.pl will do this
+ %\loop\ifnum\@tempcnta<\@tempcntb% call defaults
+ % \ifcase\@tempcnta\or% F
+ % \or% G
+ % \or\csname\codep@code@d \endcsname{\string\documentclass{article}}% D
+ % \or\csname\codep@code@l \endcsname{\string\usepackage[latin2]{inputenc}}% L
+ % \csname\codep@code@l \endcsname{\string\usepackage[T1]{fontenc}}% L
+ % \csname\codep@code@l \endcsname{\string\usepackage[magyar]babel}}% L
+ % \fi
+ % \advance\@tempcnta\@ne
+ %\repeat
+ \def\codep@code@@curclass{#1}%
+}
+
+\def\codep@code@@inputfile{\jobname.tex}
+% ^^^ Dat: \jobname never has `.tex', even if it was specified in the cmdline
+% ^^^ Imp: what if \jobname is foo.xyz?
+\def\codep@code@@tex{tex}%
+%\expandafter\def\expandafter\codep@code@setfile\expandafter#\expandafter
+% 1\string.#2 #3\hfuzz{%
+\def\codep@code@setfile#1 #2#3{%
+ \edef\reserved@a{#3}% usually .tex or .fd
+ \ifx\reserved@a\codep@code@@tex
+ \immediate\write\m@ne{Input File: #1#2}% .log file
+ \global\edef\codep@code@@inputfile{#1#2}% Imp: strip space
+ \fi
+}
+
+%** Overrides latex.ltx
+%** Called for \include{...} and \input{...} (but not for `\input ... ')
+\long\def \InputIfFileExists#1#2{%
+ \IfFileExists{#1}{#2\@addtofilelist{#1}%
+ \edef\@filef@und{\expandafter\strip@prefix\meaning\@filef@und}% reset catcodes
+ \filename@parse{#1}%
+ % vvv Dat: \@filef@und always ends by ` '
+ \ifx\filename@ext\relax
+ \def\filename@ext{tex}% no ext specified
+ \expandafter\codep@code@setfile\@filef@und{.tex}{\filename@ext}%
+ \else
+ \expandafter\codep@code@setfile\@filef@und{}{\filename@ext}%
+ \fi
+ \@@input \@filef@und}}
+%** @param #1 0|1: emit automatic filename prefix?
+\def\codep@code@setwfile#1#2{%
+ %\protected@write\@auxout{}{\string\@gobble{code:\thechapter_\thepage_#1}}%
+ % vvv Dat: written at EOP with correct page number
+ % vvv Dat: this is not the final filename, wrfiles.pl will adjust it two
+ % files will have the same name (e.g 1_4.tex)
+ \protected@write\@auxout{}{\string\@gobble{code:\codep@code@@inputfile:\codep@code@@inputlineno:%
+ \if\noexpand#10\else
+ \expandafter\ifx\csname thechapter\endcsname\relax\else\thechapter_\fi
+ \thepage
+ \ifx\hfuzz#2\hfuzz.tex\else_\fi
+ \fi
+ #2}}%
+}
+
+\def\codep@code@defaultlname#1{\jobname.cd#1}
+
+\def \CodeDefaultD{\codep@code@default{d}}
+\def\endCodeDefaultD{\immediate\closeout\verbfwr@writefile}
+%** @example \begin{CodeDefaultL}
+%** \usepackage[latin2]{inputenc}
+%** \usepackage[T1]{fontenc}
+%** \usepackage[english]{babel}
+%** \end{CodeDefaultL}
+\def \CodeDefaultL{\codep@code@default{l}}
+\let\endCodeDefaultL\endCodeDefaultD
+\def \CodeDefaultB{\codep@code@default{b}}
+\let\endCodeDefaultB\endCodeDefaultD
+\def \CodeDefaultE{\codep@code@default{e}}
+\let\endCodeDefaultE\endCodeDefaultD
+%** @param #1 one of d, l, b, e
+\def\codep@code@default#1{%
+ \AtBeginDocument{\immediate\write\@auxout{\string\@gobble{cd#1:\codep@code@defaultlname{#1}}}}%
+ \immediate\openout\verbfwr@writefile\codep@code@defaultlname{#1}\relax
+ \let\verbfwr@writecs\verbfwr@writefile
+ \let\verbfwr@actwriteline\verbfwr@writeline
+ \verbfwr@default@acts
+ \verbfwr@readenv\verbfwr@write}% finish this \cs here
+
+%\def\CodeDefaultL
+
+\@namedef{codep@code@f }#1{%
+ \codep@code@toclass{F}%
+ \codep@code@toclass{G}%
+ \codep@code@setwfile1{#1}%
+}
+\@namedef{codep@code@f!}#1{%
+ \codep@code@toclass{F}%
+ \codep@code@toclass{G}%
+ \ifx\hfuzz#1\hfuzz \PackageWarning{lb}{Empty filename to write}\@eha
+ \else\codep@code@setwfile0{#1}\fi
+}
+\@namedef{codep@code@v }#1{%
+ \codep@code@toclass{F}%
+ \def\codep@code@@curclass{C}% ignore middle classes; also omts E (by wrfiles.pl)
+ \codep@code@setwfile1{#1}%
+}
+\@namedef{codep@code@v!}#1{%
+ \codep@code@toclass{F}%
+ \def\codep@code@@curclass{C}% ignore middle classes
+ \ifx\hfuzz#1\hfuzz \PackageWarning{lb}{Empty filename to write}\@eha
+ \else\codep@code@setwfile0{#1}\fi
+}
+\@namedef{codep@code@d }#1{\codep@code@toclass{D}}
+\@namedef{codep@code@l }#1{\codep@code@toclass{L}}
+\@namedef{codep@code@p }#1{\codep@code@toclass{P}}
+\expandafter\expandafter\expandafter\let\expandafter\expandafter
+ \csname codep@code@0 \endcsname \csname codep@code@p \endcsname
+%** Prefix to show in Source in front of `t '
+% WF %= is changed for %^ as it suggests taking up
+\edef\codep@code@tprefix{\expandafter\@gobble\string\%\string^}
+\@namedef{codep@code@t }#1{%
+ \codep@code@toclass{P}%
+ \expandafter\codep@code@tosource\expandafter{\codep@code@tprefix#1}%
+ % Dat: wrfiles.pl will write to CDfile
+}
+\@namedef{codep@code@w }#1{\codep@code@toclass{C}}%
+\@namedef{codep@code@\@percentchar\space}#1{\codep@code@toclass{C}}% Dat: must change classes, because that's how wrfiles.pl is implemented
+\@namedef{codep@code@\string< }#1{%
+ \codep@code@toclass{C}%
+ \codep@code@tosource{#1}%
+}
+\@namedef{codep@code@x }#1{%
+ \codep@code@toclass{C}%
+ \codep@code@tosample{#1}%
+}
+\expandafter\expandafter\expandafter\let\expandafter\expandafter
+ \csname codep@code@c \endcsname \csname codep@code@\string< \endcsname
+\expandafter\expandafter\expandafter\let\expandafter\expandafter
+ \csname codep@code@s \endcsname \csname codep@code@\string< \endcsname
+\@namedef{codep@code@\string> }#1{%
+ \codep@code@toclass{C}%
+ \codep@code@tosample{#1}%
+}
+\expandafter\expandafter\expandafter\let\expandafter\expandafter
+ \csname codep@code@o \endcsname \csname codep@code@\string> \endcsname
+\@namedef{codep@code@ \space}#1{%
+ \codep@code@toclass{C}%
+ \codep@code@tosource{#1}%
+ \codep@code@tosample{#1}%
+}
+\expandafter\expandafter\expandafter\let\expandafter\expandafter
+ \csname codep@code@2 \endcsname \csname codep@code@ \space\endcsname
+\@namedef{codep@code@e }#1{\codep@code@toclass{E}}
+\@namedef{codep@code@b }#1{\codep@code@toclass{B}}
+\def\codep@code@tosource#1{%
+ \ifx\pexa@@cursourcename\relax
+ \global\let\pexa@@cursourcename\pexa@@sourcename
+ \immediate\openout\verbfwr@writefile\pexa@@sourcename\relax
+ \fi
+ \immediate\write\verbfwr@writefile{#1}%
+ % !! page number, not \immediate
+ %%source[#1]%
+}
+\def\codep@code@tosample#1{%
+ \ifx\pexa@@cursamplename\relax
+ \ifx\codep@code@samplefile\@undefined
+ \newwrite\codep@code@samplefile
+ \fi
+ \global\let\pexa@@cursamplename\pexa@@samplename
+ \immediate\openout\codep@code@samplefile\pexa@@samplename\relax
+ \fi
+ \immediate\write\codep@code@samplefile{#1}%
+ %%sample[#1]%
+}
+\def\codep@code@done{%
+ \ifx\verbfwr@actemitlineone\@empty\else
+ \PackageWarning{lb}{Empty \string\begin{code}}%
+ \fi
+ \codep@code@toclass{Z}%
+ \ifx\pexa@@cursourcename\relax\else
+ \immediate\closeout\verbfwr@writefile \fi
+}%
+
+\endinput