summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex/ucharcat/ucharcat.dtx173
-rw-r--r--Master/texmf-dist/source/latex/ucharcat/ucharcat.ins10
2 files changed, 183 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/ucharcat/ucharcat.dtx b/Master/texmf-dist/source/latex/ucharcat/ucharcat.dtx
new file mode 100644
index 00000000000..90727c6f8d7
--- /dev/null
+++ b/Master/texmf-dist/source/latex/ucharcat/ucharcat.dtx
@@ -0,0 +1,173 @@
+% \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/05/20 v0.01 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 |\lusfunction|
+% 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 allocator macros or 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}
+%
+% If some package has defined an allocator for catcode tables
+% use it, othewise just use one (near) the top of the range (hex 7FFF).
+%
+% \begin{macrocode}
+\ifx\newcatcodetable\@undefined
+ \chardef\ucharcat@table"7000
+\else
+ \newcatcodetable\ucharcat@table
+\fi
+% \end{macrocode}
+%
+% Set up catcode table.
+% \begin{macrocode}
+\luatexinitcatcodetable\ucharcat@table
+% \end{macrocode}
+%
+% lua print function
+% \begin{macrocode}
+\directlua{%
+function UcharcatLua()
+ local mych = newtoken.scan_int()
+ local mycat = newtoken.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/Master/texmf-dist/source/latex/ucharcat/ucharcat.ins b/Master/texmf-dist/source/latex/ucharcat/ucharcat.ins
new file mode 100644
index 00000000000..d1660dd6144
--- /dev/null
+++ b/Master/texmf-dist/source/latex/ucharcat/ucharcat.ins
@@ -0,0 +1,10 @@
+\input docstrip
+\keepsilent
+\preamble
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{ucharcat.sty}{\from{ucharcat.dtx}{package}}}
+
+\endbatchfile