From 8494bde0a5da882fb665b3115dc366a519c534fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Fabian=20Kr=C3=BCger?= Date: Sat, 20 Nov 2021 15:39:43 +0100 Subject: [PATCH] Mostly language stuff --- luametalatex-font-resolve.lua | 4 +++ luametalatex-ltexpl-hook.tex | 6 ++++- luametalatex-oldnames.lua | 47 +++++++++++++++++++++++++++++++++++ luametaplain.ini | 17 ++++++++++++- 4 files changed, 72 insertions(+), 2 deletions(-) diff --git a/luametalatex-font-resolve.lua b/luametalatex-font-resolve.lua index 4540e5e..0130f98 100644 --- a/luametalatex-font-resolve.lua +++ b/luametalatex-font-resolve.lua @@ -14,6 +14,10 @@ font.fonts = all_fonts function font.getfont(id) return all_fonts[id] end +-- Currently either nil or true, false (defined but not yet frozen) isn't implemented right now +function font.frozen(id) + return all_fonts[id] and true +end local fontextensions = { ttf = "truetype", diff --git a/luametalatex-ltexpl-hook.tex b/luametalatex-ltexpl-hook.tex index 9d94c6f..3cee79e 100644 --- a/luametalatex-ltexpl-hook.tex +++ b/luametalatex-ltexpl-hook.tex @@ -2,10 +2,14 @@ % See baseregisters for list of toks pdfvariables \directlua{initialize_pdf_toks()} % We hardcode the ids of two catcodetables. If they ever change in the format, abort. -\if 0\ifnum1=\catcodetable@initex\else\expandafter1\fi\ifnum2=\catcodetable@string\else\expandafter1\fi 0\else +\if 0\ifnum1=\catcodetable@initex\else1\fi\ifnum2=\catcodetable@string\else1\fi 0\else \errmessage{Inconsistent catcodetable identifiers} \fi \ifx\@tfor\undefined \def\@tfor#1\do#2{} \fi +\expanded {\def \noexpand \newlanguage #1\expandafter}\expandafter {% + \newlanguage{#1}% + \directlua{language.new(tex.count.allocationnumber)}% +}% \input expl3.ltx diff --git a/luametalatex-oldnames.lua b/luametalatex-oldnames.lua index ba63e2c..9d57da1 100644 --- a/luametalatex-oldnames.lua +++ b/luametalatex-oldnames.lua @@ -75,3 +75,50 @@ rewrite(token) ('set_lua', 'setlua') ('set_macro', 'setmacro') ('set_char', 'setchar') + ('is_defined', 'isdefined') + +do + lang = {} + for k,v in next, language do + lang[k] = v + end + local patterns = language.patterns + function lang.patterns(l, patt) + if not patt then + return patterns(l) + end + patt = patt:gsub('%s', ' ') + return patterns(l, patt) + end +end + +do + local l = lpeg or require'lpeg' + local match = l.match + local P = l.P + local C = l.C + local sub = string.sub + local any = C(P(1)^0) + local char = C(1) + function string.explode(s, delim) + delim = delim or ' +' + if s == '' then + return {s} + else + local patt + if delim == '' then -- Split into individual characters + patt = char + else + local del = P(sub(delim, 1, 1)) + if sub(delim, 2, 2) == '+' then + local elem = C((1-del)^1) + patt = del^0 * elem * (del^1 * elem)^0 + else + local elem = C((1-del)^0) + patt = elem * (del * elem)^0 + end + end + return {match(patt, s)} + end + end +end diff --git a/luametaplain.ini b/luametaplain.ini index 978d0d6..47602d5 100644 --- a/luametaplain.ini +++ b/luametaplain.ini @@ -17,5 +17,20 @@ \endgroup \input load-unicode-data.tex \input etex.src -\directlua{initialize_pdf_toks()} +\directlua{initialize_pdf_toks()}% +% +\expanded {\def \noexpand \newlanguage #1\expandafter}\expandafter {% + \newlanguage{#1}% + \directlua{language.new(tex.count.allocationnumber)}% +}% +% +\expanded {\def \noexpand \uselanguage #1\expandafter}\expandafter {% + \expanded {% + \noexpand \ifcsname lang@#1\endcsname + \noexpand \directlua {lang.new(\noexpand\number\noexpand\lastnamedcs)}% + \noexpand \fi + \expandafter + }% + \uselanguage{#1}% +}% \dump