diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/ucharcat |
Initial commit
Diffstat (limited to 'macros/latex/contrib/ucharcat')
-rw-r--r-- | macros/latex/contrib/ucharcat/README | 20 | ||||
-rw-r--r-- | macros/latex/contrib/ucharcat/ucharcat.dtx | 171 | ||||
-rw-r--r-- | macros/latex/contrib/ucharcat/ucharcat.ins | 10 | ||||
-rw-r--r-- | macros/latex/contrib/ucharcat/ucharcat.pdf | bin | 0 -> 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 Binary files differnew file mode 100644 index 0000000000..9f6c8f8d37 --- /dev/null +++ b/macros/latex/contrib/ucharcat/ucharcat.pdf |