summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx')
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx76
1 files changed, 71 insertions, 5 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
index 9de367fc7ea..29d0a01caa8 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
@@ -145,7 +145,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
-\GetIdInfo$Id: l3bootstrap.dtx 5729 2015-07-31 05:56:12Z joseph $
+\GetIdInfo$Id: l3bootstrap.dtx 5983 2015-09-10 18:57:56Z joseph $
{L3 Bootstrap code}
%</driver|package>
%<*driver>
@@ -318,11 +318,11 @@
end
end
end
- tex.enableprimitives("", t)
+ tex.enableprimitives("", t)
}%
\fi
\endgroup
-%</package>
+%</package>
% \end{macrocode}
%
% \subsection{The \tn{pdfstrcmp} primitive with \XeTeX{} and \LuaTeX{}}
@@ -387,7 +387,73 @@
\global\everyjob\expandafter
{%
\the\expandafter\everyjob
- \expandafter\luatex_directlua:D\expandafter{\tempa}%
+ \expandafter\lua_now_x:n\expandafter{\tempa}%
+ }
+ \fi
+ \fi
+ \fi
+\endgroup
+% \end{macrocode}
+%
+% \subsection{Emulating \tn{Ucharchar} in \LuaTeX{}}
+%
+% Expandably creating character tokens can be done in macros but for the
+% full Unicode range requires engine support in practical terms. That is
+% available in \XeTeX{} as \tn{Ucharcat} but in \LuaTeX{} some Lua code
+% is required. That is set up here, following the model above. Note that
+% we do not try to emulate the syntax of the primitive (doable with \LuaTeX{}
+% 0.80 or later, but not required by our use case).
+%
+% One minor wrinkle is that a catcode table is needed to return values.
+% For format mode, long-term we can simply take an arbitrary one and make
+% sure this is never allocated. In package mode use the same approach
+% (and table) as \pkg{ucharcat}: look for an allocator and use it if available,
+% or use a table unlikely to clash with any other use. We use the same table
+% as \pkg{ucharcat} but as this is \enquote{disposable} we are safe.
+% \begin{macrocode}
+\begingroup
+ \expandafter\ifx\csname directlua\endcsname\relax
+ \else
+ \ifnum\luatexversion<70 %
+ \else
+%<*initex>
+ % TEMP
+ \catcode`\@=11 %
+ \chardef\ucharcat@table="8000 %
+%</initex>
+%<*package>
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname newcatcodetable\endcsname\relax
+ \directlua{tex.enableprimitives("",{"initcatcodetable"})}
+ \chardef\ucharcat@table"7000 %
+ \initcatcodetable\ucharcat@table
+ \else
+ \newcatcodetable\ucharcat@table
+ \fi
+%</package>
+ \catcode`\_=11 %
+ \catcode`\:=11 %
+ \def\tempa
+ {%
+ l3kernel = l3kernel or { }
+ local utf8_char = unicode.utf8.char
+ function l3kernel.charcat(charcode, catcode)
+ tex.setcatcode(\number\ucharcat@table, charcode, catcode)
+ tex.sprint(\number\ucharcat@table, utf8_char(charcode))
+ end
+ }
+ \directlua{\tempa}
+ \ifnum 0%
+ \directlua
+ {%
+ if status.ini_version then
+ tex.write("1")
+ end
+ }>0 %
+ \global\everyjob\expandafter
+ {%
+ \the\expandafter\everyjob
+ \expandafter\lua_now_x:n\expandafter{\tempa}%
}
\fi
\fi
@@ -458,7 +524,7 @@
\endgroup
\noexpand\endinput
}%
-%</package>
+%</package>
\fi
\next
% \end{macrocode}