summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/ucharcat
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/ucharcat
Initial commit
Diffstat (limited to 'macros/latex/contrib/ucharcat')
-rw-r--r--macros/latex/contrib/ucharcat/README20
-rw-r--r--macros/latex/contrib/ucharcat/ucharcat.dtx171
-rw-r--r--macros/latex/contrib/ucharcat/ucharcat.ins10
-rw-r--r--macros/latex/contrib/ucharcat/ucharcat.pdfbin0 -> 159215 bytes
4 files changed, 201 insertions, 0 deletions
diff --git a/macros/latex/contrib/ucharcat/README b/macros/latex/contrib/ucharcat/README
new file mode 100644
index 0000000000..58188e5569
--- /dev/null
+++ b/macros/latex/contrib/ucharcat/README
@@ -0,0 +1,20 @@
+ucharcat package
+
+Lua implementation of \Ucharcat, to match xetex's primitive.
+
+
+To extract the ucharcat.sty package:
+tex ucharcat.ins
+
+David Carlisle
+LPPL licenced (status: maintained)
+
+Master source:
+https://github.com/davidcarlisle/dpctex/tree/master/ucharcat
+
+
+Please report any issues at
+
+https://github.com/davidcarlisle/dpctex/issues
+
+
diff --git a/macros/latex/contrib/ucharcat/ucharcat.dtx b/macros/latex/contrib/ucharcat/ucharcat.dtx
new file mode 100644
index 0000000000..a5b06392c5
--- /dev/null
+++ b/macros/latex/contrib/ucharcat/ucharcat.dtx
@@ -0,0 +1,171 @@
+% \iffalse
+%% Source File: textcase.dtx
+%% Copyright 2015 David Carlisle
+%%
+%% This file may be distributed under the terms of the LPPL.
+%% See README for details.
+%
+%<*dtx>
+ \ProvidesFile{ucharcat.dtx}
+%</dtx>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{ucharcat}
+%<driver> \ProvidesFile{ucharcat.drv}
+% \fi
+% \ProvidesFile{ucharcat.dtx}
+ [2015/11/19 v0.03 ucharcat for luaLaTeX (DPC)]
+%
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\ifx\directlua\undefined\else
+\usepackage{ucharcat}
+\fi
+\begin{document}
+\DocInput{ucharcat.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{ucharcat.dtx}
+%
+% \title{The \textsf{ucharcat} Package\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.
+% Please report any issues at https://github.com/davidcarlisle/dpctex/issues}}
+% \author{David Carlisle}
+% \maketitle
+%
+% \section{Introduction}
+%
+% The 2015 release of Xe\TeX\ introduced a new command |\Ucharcat|,
+% this is an extension of the |\Uchar| comand that has been available
+% in Xe\TeX\ and lua\TeX\ for some time. It takes a second integer
+% value, that specifies the category code of the token to be
+% produced. This allows character tokens to be constructed \emph{via
+% expansion}, which has many potential uses in producing expandable
+% case changing, numeric counter represntations, etc.
+%
+% |\Uchar 65 12| produces a catcode 12 |A| for example.
+%
+% This package provides a lua implementation of |\Ucharcat| for use
+% with luatex, it silently accepts Xe\TeX\ and does nothing in that
+% case if |\Ucharcat| is defined.
+%
+% The main difference between the lua implementation and the Xe\TeX\
+% primitive is that the lua implementation takes \emph{two} expansions
+% to produce the token.
+%
+%\begin{verbatim}
+% \edef\tmp{\Uchar 65 11 }
+%\end{verbatim}
+% is the same as |\def\tmp{A}| with both
+% systems but
+%
+%\begin{verbatim}
+% \expandafter\def\expandafter\tmp\expandafter{\Uchar 65 11 }
+%\end{verbatim}
+% the same as
+%\begin{verbatim}
+% \def\tmp{A}
+%\end{verbatim}
+% with Xe\TeX, but in lua\TeX\ it is
+% equivalent to
+%\begin{verbatim}
+% \def\tmp{\directlua{UcharcatLua() 65 11 }
+%\end{verbatim}
+%
+% \ifx\Ucharcat\undefined\else
+% \section{Examples}
+%
+% This section will be omitted if this document is not processed with
+% a suitable format.
+%
+% \begin{itemize}
+% \item |\Ucharcat 65 11|
+%
+% \Ucharcat 65 11\ is a capital A.
+%
+% \item |\Ucharcat 65 12|
+% \edef\tmpa{\Ucharcat 65 12}
+% \edef\tmpb{\string A}
+%
+% This is a catcode 12 A: \ifx\tmpa\tmpb yes\else no\fi.
+%
+% \item% |\Ucharcat 65 1| and |\Ucharcat 65 2|
+%
+% \Ucharcat 65 1 \large\bfseries Bold is grouped \Ucharcat 65 2
+% by catcode 1 and 2 A.
+% \end{itemize}
+%
+% \fi
+% \section{Implementation}
+%
+% Note that the current implementation uses |\directlua| and a
+% dedicated luatex catcode array. Hans hagen made some useful comments
+% and pointers to alternative implementation using |\luafunction|
+% in the luatex list thread
+% \texttt{http://tug.org/pipermail/luatex/2015-May/005199.html}
+% For now keeping with the simpler initial approach as there
+% is no built in support for |\luafunction| in the \LaTeX\ format yet.
+% (No hook to save function definition in the format)
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% On classic \TeX{} or old Xe\TeX, stop.
+% \begin{macrocode}
+\ifx\directlua\@undefined
+\ifx\Ucharcat\@undefined
+\ifx\XeTeXinterchartokenstate\@undefined
+\PackageError{ucharcat}
+{\string\Ucharcat\space may only be used with xetex and luatex}
+{skipping package}
+\else
+\PackageError{ucharcat}
+{\string\Ucharcat\space is defined in xetex releases from 2015 only}
+{skipping package}
+\fi
+\fi
+\expandafter\endinput
+\fi
+% \end{macrocode}
+%
+% Current latex formats (from 2015/11/01) define an allocator for catcode tables
+% otherwise just use one (near) the top of the range (hex 7FFF).
+%
+% \begin{macrocode}
+\ifx\newcatcodetable\@undefined
+ \chardef\ucharcat@table"7000
+ \directlua{tex.enableprimitives("",{"initcatcodetable"})}
+ \initcatcodetable\ucharcat@table
+\else
+ \newcatcodetable\ucharcat@table
+\fi
+% \end{macrocode}
+%
+%
+% lua print function
+% \begin{macrocode}
+\directlua{%
+local nt = newtoken or token
+function UcharcatLua()
+ local mych = nt.scan_int()
+ local mycat = nt.scan_int()
+ tex.setcatcode(\the\numexpr\ucharcat@table\relax,mych,mycat)
+ tex.sprint(\the\numexpr\ucharcat@table\relax,unicode.utf8.char(mych))
+end
+}
+% \end{macrocode}
+%
+% \TeX\ wrapper.
+% \begin{macrocode}
+\def\Ucharcat{\directlua{UcharcatLua()}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+%
diff --git a/macros/latex/contrib/ucharcat/ucharcat.ins b/macros/latex/contrib/ucharcat/ucharcat.ins
new file mode 100644
index 0000000000..d1660dd614
--- /dev/null
+++ b/macros/latex/contrib/ucharcat/ucharcat.ins
@@ -0,0 +1,10 @@
+\input docstrip
+\keepsilent
+\preamble
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{ucharcat.sty}{\from{ucharcat.dtx}{package}}}
+
+\endbatchfile
diff --git a/macros/latex/contrib/ucharcat/ucharcat.pdf b/macros/latex/contrib/ucharcat/ucharcat.pdf
new file mode 100644
index 0000000000..9f6c8f8d37
--- /dev/null
+++ b/macros/latex/contrib/ucharcat/ucharcat.pdf
Binary files differ