diff options
-rw-r--r-- | luatexbase-cctb.dtx | 380 |
1 files changed, 380 insertions, 0 deletions
diff --git a/luatexbase-cctb.dtx b/luatexbase-cctb.dtx new file mode 100644 index 0000000..af5a35b --- /dev/null +++ b/luatexbase-cctb.dtx @@ -0,0 +1,380 @@ +% \iffalse meta-comment +% +% Template : look for cctb DATE DESC VERSION !!! +% and 'derived files' !!! +% +% Written in 2009, 2010 by Manuel Pégourié-Gonnard and Élie Roux. +% <mpg@elzevir.fr> +% <elie.roux@telecom-bretagne.eu> +% +% This work is under the CC0 license. +% +% This work consists of the main source file luatexbase-cctb.dtx +% and the derived files +% luatexbase-cctb.sty cctb.lua ... +% +% Unpacking: +% tex luatexbase-cctb.dtx +% Documentation: +% pdflatex luatexbase-cctb.dtx +% +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +%<*ignore> +\begingroup + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +%</ignore> +%<*install> +\input docstrip.tex + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax + +\preamble +This is a generated file. + +Written in 2009, 2010 by Manuel Pégourié-Gonnard and Élie Roux. + <mpg@elzevir.fr> + <elie.roux@telecom-bretagne.eu> + +This work is under the CC0 license. + +This work consists of the main source file luatexbase-cctb.dtx +and the derived files + luatexbase-cctb.sty cctb.lua ... + +\endpreamble + +\let\MetaPrefix\DoubleperCent + +\generate{% + \usedir{tex/luatex/luatexbase}% + \file{luatexbase-cctb.sty}{\from{luatexbase-cctb.dtx}{texpackage}}% +} + +\def\MetaPrefix{-- } + +\def\luapostamble{% + \MetaPrefix^^J% + \MetaPrefix\space End of File `\outFileName'.% +} + +\def\currentpostamble{\luapostamble}% + +\generate{% + \usedir{tex/luatex/luatexbase}% + \file{cctb.lua}{\from{luatexbase-cctb.dtx}{luamodule}}% +} + +\obeyspaces +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* luatexbase-cctb.sty cctb.lua ...} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +%</install> +%<*ignore> +\fi +%</ignore> +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{luatexbase-cctb.drv} + [DATE DESC] +\documentclass{ltxdoc} +\EnableCrossrefs +\CodelineIndex +\begin{document} + \DocInput{luatexbase-cctb.dtx}% +\end{document} +%</driver> +% \fi +% +% \CheckSum{} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \GetFileInfo{luatexbase-cctb.drv} +% +% \title{The \textsf{luatexbase-cctb} package} +% \date{DATE} +% \author{% +% Manuel P\'egouri\'e-Gonnard \\ \texttt{mpg@elzevir.fr} \and +% \'Elie Roux \\ \texttt{elie.roux@telecom-bretagne.eu}} +% +% \maketitle +% +% \begin{abstract} +% \end{abstract} +% +% \section{Documentation} +% +% \section{Implementation} +% +% \subsection{\TeX\ package} +% +% \begin{macrocode} +%<*texpackage> +% \end{macrocode} +% +% Here we allocate catcodetables the same way we handle attributes. +% +% \begin{macrocode} + +\newcount\luatexcatcodetabledefcounter + +\luatexcatcodetabledefcounter = 1 + +\def\newluatexcatcodetable#1{% + \ifnum\luatexcatcodetabledefcounter<1114110\relax % 0x10FFFF is maximal \chardef + \global\advance\luatexcatcodetabledefcounter by 1\relax % + \allocationnumber=\luatexcatcodetabledefcounter % + \global\chardef#1=\allocationnumber % + \luadirect{% + luatextra.catcodetabledef_from_tex([[\noexpand#1]], '\number\allocationnumber')}% + \wlog{\string#1=\string\catcodetable\the\allocationnumber}% + \else % + \errmessage{No room for a new \string\catcodetable}% + \fi % +} + +% \end{macrocode} +% +% A small patch to manage the catcode of \@ in Plain, and to get two new +% counters in Plain too. +% +% \begin{macrocode} + +\expandafter\edef\csname ltxtra@AtEnd\endcsname{% + \catcode64 \the\catcode64\relax +} + +\catcode 64=11\relax + +\expandafter\ifx\csname @tempcnta\endcsname\relax + \csname newcount\endcsname\@tempcnta +\fi +\expandafter\ifx\csname @tempcntb\endcsname\relax + \csname newcount\endcsname\@tempcntb +\fi + +% \end{macrocode} +% +% A macro that sets the catcode of a range of characters. The first +% parameter is the character number of the first character of the range, +% the second parameter is one for the last character, and the third +% parameter is the catcode we want them to have. +% +% \begin{macrocode} + +\def\luatexsetcatcoderange#1#2#3{% + \edef\luaSCR@temp{% + \noexpand\@tempcnta=\the\@tempcnta + \noexpand\@tempcntb=\the\@tempcntb + \noexpand\count@=\the\count@ + \relax + }% + \@tempcnta=#1\relax + \@tempcntb=#2\relax + \count@=#3\relax + \loop\unless\ifnum\@tempcnta>\@tempcntb + \catcode\@tempcnta=\count@ + \advance\@tempcnta by 1\relax + \repeat + \luaSCR@temp +} + +% \end{macrocode} +% +% Finally we create several catcodetables that may be used by the user. +% These are: +% +% \begin{itemize} +% \item \texttt{\string\CatcodeTableIniTeX}: the base \TeX\ catcodes +% \item \texttt{\string\CatcodeTableString}: almost all characters have +% catcode 12 +% \item \texttt{\string\CatcodeTableOther}: all characters have catcode 12 +% (even space) +% \item \texttt{\string\CatcodeTableLaTeX}: the \LaTeX\ classical catcodes +% \item \texttt{\string\CatcodeTableLaTeXAtLetter}: the \LaTeX\ classical +% catcodes and |@| letter +% \item \texttt{\string\CatcodeTableExpl}: the expl3 catcodes +% \end{itemize} +% +% \begin{macrocode} + +\newluatexcatcodetable\CatcodeTableIniTeX +\newluatexcatcodetable\CatcodeTableString +\newluatexcatcodetable\CatcodeTableOther +\newluatexcatcodetable\CatcodeTableLaTeX +\newluatexcatcodetable\CatcodeTableLaTeXAtLetter +\newluatexcatcodetable\CatcodeTableExpl +\initluatexcatcodetable\CatcodeTableIniTeX + +\expandafter\ifx\csname @firstofone\endcsname\relax + \long\def\@firstofone#1{#1}% +\fi + +\begingroup + \def\@makeother#1{\catcode#1=12\relax}% + \@firstofone{% + \luatexcatcodetable\CatcodeTableIniTeX + \begingroup + \luatexsetcatcoderange{0}{8}{15}% + \catcode9=10 % tab + \catcode11=15 % + \catcode12=13 % form feed + \luatexsetcatcoderange{14}{31}{15}% + \catcode35=6 % hash + \catcode36=3 % dollar + \catcode38=4 % ampersand + \catcode94=7 % circumflex + \catcode95=8 % underscore + \catcode123=1 % brace left + \catcode125=2 % brace right + \catcode126=13 % tilde + \catcode127=15 % + \saveluatexcatcodetable\CatcodeTableLaTeX + \catcode64=11 % + \saveluatexcatcodetable\CatcodeTableLaTeXAtLetter + \endgroup + \begingroup + \luatexsetcatcoderange{0}{8}{15}% + \catcode9=9 % tab ignored + \catcode11=15 % + \catcode12=13 % form feed + \luatexsetcatcoderange{14}{31}{15}% + \catcode32=9 % space is ignored + \catcode35=6 % hash mark is macro parameter character + \catcode36=3 % dollar (not so sure about the catcode...) + \catcode38=4 % ampersand + \catcode58=11 % colon letter + \catcode94=7 % circumflex is superscript character + \catcode95=11 % underscore letter + \catcode123=1 % left brace is begin-group character + \catcode125=2 % right brace is end-group character + \catcode126=10 % tilde is a space char. + \catcode127=15 % + \saveluatexcatcodetable\CatcodeTableExpl + \endgroup + \@makeother{0}% nul + \@makeother{13}% carriage return + \@makeother{37}% percent + \@makeother{92}% backslash + \@makeother{127}% + \luatexsetcatcoderange{65}{90}{12}% A-Z + \luatexsetcatcoderange{97}{122}{12}% a-z + \saveluatexcatcodetable\CatcodeTableString + \@makeother{32}% space + \saveluatexcatcodetable\CatcodeTableOther + \endgroup +} + +\ltxtra@AtEnd + +\luadirect{luatextra.catcodetable_do_shortcuts()} + +% \end{macrocode} +% +% \begin{macrocode} +%</texpackage> +% \end{macrocode} +% +% \subsection{Lua module} +% +% \begin{macrocode} +%<*luamodule> +% \end{macrocode} +% +% In the same way, the table \texttt{tex.catcodetablenumber} contains the +% numbers of the catcodetables registered with +% \texttt{\string\newluacatcodetable}. +% +% \begin{macrocode} + +luatextra.catcodetables = {} + +tex.catcodetablenumber = luatextra.catcodetables + +function luatextra.catcodetabledef_from_tex(name, number) + truename = name:gsub('[\\ ]', '') + luatextra.catcodetables[truename] = tonumber(number) +end + +% \end{macrocode} +% +% With this function we create some shortcuts for a +% better readability in lua code. This makes +% |tex.catcodetablenumber.latex| equivalent to +% |tex.catcodetablenumber['CatcodeTableLaTeX']|. +% +% \begin{macrocode} + +function luatextra.catcodetable_do_shortcuts() + local cat = tex.catcodetablenumber + local val = cat['CatcodeTableLaTeX'] + if val then + cat['latex'] = val + end + val = cat['CatcodeTableLaTeXAtLetter'] + if val then + cat['latex-package'] = val + cat['latex-atletter'] = val + end + val = cat['CatcodeTableIniTeX'] + if val then + cat['ini'] = val + end + val = cat['CatcodeTableExpl'] + if val then + cat['expl3'] = val + cat['expl'] = val + end + val = cat['CatcodeTableString'] + if val then + cat['string'] = val + end + val = cat['CatcodeTableOther'] + if val then + cat['other'] = val + end +end + +% \end{macrocode} +% +% \begin{macrocode} +%</luamodule> +% \end{macrocode} +% +% \Finale +\endinput |