% \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. % % % % 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 % %<*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. 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 % %<*ignore> \fi % %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{luatexbase-cctb.drv} [DATE DESC] \documentclass{ltxdoc} \EnableCrossrefs \CodelineIndex \begin{document} \DocInput{luatexbase-cctb.dtx}% \end{document} % % \fi % % \CheckSum{0} % % \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} % % \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} % % \end{macrocode} % % \Finale \endinput