diff options
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/luatex/penlightplus/penlightplus.lua | 57 | ||||
-rw-r--r-- | Master/texmf-dist/tex/luatex/penlightplus/penlightplus.sty | 117 |
2 files changed, 142 insertions, 32 deletions
diff --git a/Master/texmf-dist/tex/luatex/penlightplus/penlightplus.lua b/Master/texmf-dist/tex/luatex/penlightplus/penlightplus.lua index ffdbe89bc58..96eb565fb65 100644 --- a/Master/texmf-dist/tex/luatex/penlightplus/penlightplus.lua +++ b/Master/texmf-dist/tex/luatex/penlightplus/penlightplus.lua @@ -1,5 +1,5 @@ --% Kale Ewasiuk (kalekje@gmail.com) ---% 2023-07-22 +--% 2023-08-27 --% Copyright (C) 2021-2023 Kale Ewasiuk --% --% Permission is hereby granted, free of charge, to any person obtaining a copy @@ -67,6 +67,10 @@ penlight.tex._xTrue = '\\BooleanTrue ' penlight.tex._xFalse = '\\BooleanFalse ' penlight.tex._xNoValue = '-NoValue-' +penlight.tex.xTrue = '\\BooleanTrue ' +penlight.tex.xFalse = '\\BooleanFalse ' +penlight.tex.xNoValue = '-NoValue-' + --Generic LuaLaTeX utilities for print commands or environments if not __PL_SKIP_TEX__ then @@ -138,6 +142,8 @@ function penlight.tex.help_wrt(s1, s2) -- helpful printing, makes it easy to deb wrt2('\n^^^^^\n') end penlight.help_wrt = penlight.tex.help_wrt +penlight.wrth = penlight.help_wrt +penlight.tex.wrth = penlight.help_wrt function penlight.tex.prt_array2d(t) for _, r in ipairs(t) do @@ -171,9 +177,10 @@ end --definition helpers -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -function penlight.tex.defmacro(cs, val) -- , will not work if val contains undefined tokens (so pre-define them if using..) +function penlight.tex.defmacro(cs, val, g) -- , will not work if val contains undefined tokens (so pre-define them if using..) val = val or '' -- however this works for arbitrary command names (\@hello-123 etc allowed) - token.set_macro(cs, val, 'global') + g = g or 'global' + token.set_macro(cs, val, g) end @@ -767,6 +774,47 @@ function penlight.tex.split2items(s, d) end +penlight.tbls = {} + +function penlight.get_tbl_item(s, p) -- get item with string, p means print value + p = p or false + local itm = 'tbl: INVALID INDEX WITH: "'..s..'"' + if s:find('%.') then + local tt = s:split('.') + itm = penlight.tbls[tt[1]][tt[2]] + elseif s:find('/') then + local tt = s:split('/') + itm = penlight.tbls[tt[1]][tonumber(tonumber(tt[2]))] + else + if s:isdigit() then + itm = penlight.tbls._recent[tonumber(s)] + else + itm = penlight.tbls._recent[s] + end + end + if p then + tex.sprint(tostring(itm)) + end + return itm +end + + +function penlight.set_tbl_item(s, v) + if s:find('%.') then + local tt = s:split('.') + penlight.tbls[tt[1]][tt[2]] = v + elseif s:find('/') then + local tt = s:split('/') + penlight.tbls[tt[1]][tonumber(tonumber(tt[2]))] = v + else + if s:isdigit() then + penlight.tbls._recent[tonumber(s)] = v + else + penlight.tbls._recent[s] = v + end + end + end + if penlight.hasval(__PL_GLOBALS__) then -- iterators @@ -803,8 +851,9 @@ if penlight.hasval(__PL_GLOBALS__) then penlight.filterfiles = penlight.utils.filterfiles penlight.a2 = penlight.array2d + A2d = penlight.array2d penlight.tbl = penlight.tablex - + TX = penlight.tablex for k,v in pairs(penlight.tex) do -- make tex functions global _G[k] = v diff --git a/Master/texmf-dist/tex/luatex/penlightplus/penlightplus.sty b/Master/texmf-dist/tex/luatex/penlightplus/penlightplus.sty index 0d49ff90d04..3f95ae4d9ef 100644 --- a/Master/texmf-dist/tex/luatex/penlightplus/penlightplus.sty +++ b/Master/texmf-dist/tex/luatex/penlightplus/penlightplus.sty @@ -1,5 +1,5 @@ % Kale Ewasiuk (kalekje@gmail.com) -% 2023-07-22 +% 2023-08-27 % Copyright (C) 2021-2023 Kale Ewasiuk % % Permission is hereby granted, free of charge, to any person obtaining a copy @@ -22,11 +22,12 @@ % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE % OR OTHER DEALINGS IN THE SOFTWARE. -\ProvidesPackage{penlightplus}[2023-07-22] +\ProvidesPackage{penlightplus}[2023-08-27] \RequirePackage{luacode} \RequirePackage{luakeys} \RequirePackage[import]{penlight} +\RequirePackage{etoolbox} \DeclareOption{globals}{\luadirect{__PL_GLOBALS__ = true}} \DeclareOption{pl}{\directlua{pl = penlight}} @@ -72,43 +73,92 @@ } -% -% -%\NewDocumentCommand{\tblnew}{m}{\luadirect{ -% _G[\luastring{#1}] = {} -%}} -% -%\NewDocumentCommand{\tblfrkv}{m m O{} }{\luadirect{ -% _G[\luastring{#1}] = penlight.luakeys.parse(\luastring{#2}, penlight.luakeys.parse(\luastring{#3})) -%}} -% -%\NewDocumentCommand{\tblset}{m m m}{\luadirect{ -% _G[\luastring{#1}][\luastring{#2}] = \luastring{#3} -%}} -% -%\NewDocumentCommand{\tblget}{m m}{\luadirect{ -% tex.sprint(tostring(_G[\luastring{#1}][\luastring{#2}])) -%}} -% -%\NewDocumentCommand{\tblidx}{m m}{\luadirect{ -% tex.sprint(tostring(_G[\luastring{#1}][#2])) -%}} -% -% + + + + + + +%%%% + +\newtoggle{luaexpr}\togglefalse{luaexpr} + +\begin{luacode*} + function toggle_luaexpr(expr) + if expr then + tex.sprint('\\toggletrue{luaexpr}') + else + tex.sprint('\\togglefalse{luaexpr}') + end + end +\end{luacode*} + +\NewDocumentCommand{\ifluax}{m m O{}}{% + \luadirect{toggle_luaexpr(#1)}% + \iftoggle{luaexpr}{#2}{#3}% + \togglefalse{luaexpr}% safety set to false +} + +\NewDocumentCommand{\ifluaxv}{m m O{}}{\ifluax{penlight.hasval(#1)}{#2}[#3]} + + +% testing ifluax +% {-->\ifluax{1 == 2}{\LARGE TRUE}[\tiny FALSE]<--test\\ +% -->\ifluax{abc == nil}{\LARGE TRUE}[\tiny FALSE]<--test} + + +%%% + +\NewDocumentCommand{\newtbl}{m}{\luadirect{ + penlight.tbls[\luastring{#1}] = {} + penlight.tbls._recent = penlight.tbls[\luastring{#1}] +}} + +\NewDocumentCommand{\tblfrkv}{m m O{}}{ \luadirect{ + penlight.tbls[\luastring{#1}] = penlight.luakeys.parse(\luastring{#2}, penlight.luakeys.parse(\luastring{#3})) + penlight.tbls._recent = penlight.tbls[\luastring{#1}] +}} + +\NewDocumentCommand{\chgtbl}{ m }{ \luadirect{ + penlight.tbls._recent = penlight.tbls[\luastring{#1}] +}} + +\NewDocumentCommand{\gettbl}{m}{\luadirect{ + penlight.get_tbl_item(\luastring{#1}, true) +}} + +\NewDocumentCommand{\settbl}{m m}{\luadirect{ + penlight.set_tbl_item(\luastring{#1}, \luastring{#2}) +}} + +\NewDocumentCommand{\deftbl}{ m m }{\luadirect{% define a table, use * to make definition + token.set_macro(\luastring{#2}, tostring(penlight.get_tbl_item(\luastring{#1}))) +}} + +\NewDocumentCommand{\gdeftbl}{ m m }{\luadirect{% define a table, use * to make global definition + token.set_macro(\luastring{#2}, tostring(penlight.get_tbl_item(\luastring{#1})), 'global') +}} + +\NewDocumentCommand{\iftbl}{m m O{}}{\ifluax{penlight.get_tbl_item(\luastring{#1})}{#2}[#3]} + +\NewDocumentCommand{\iftblv}{m m O{}}{\ifluaxv{penlight.get_tbl_item(\luastring{#1})}{#2}[#3]} + + + %\NewDocumentCommand{\tblupd}{ m m}{\luadirect{ -% penlight.tablex.update(_G[\luastring{#1}], _G[\luastring{#2}]) +% penlight.tablex.update(penlight.tbls[\luastring{#1}], penlight.tbls[\luastring{#2}]) %}} % %\NewDocumentCommand{\tblupdkv}{ m m }{\luadirect{ -% penlight.tablex.update(_G[\luastring{#1}], penlight.luakeys.parse(\luastring{#2})) +% penlight.tablex.update(penlight.tbls[\luastring{#1}], penlight.luakeys.parse(\luastring{#2})) %}} + % %% todo need a get table function. If blank is passed, the last table referenced is used. %\NewDocumentCommand{\tblfrkvII}{ m m m }{\luadirect{ % _G[\luastring{#1}] = penlight.tablex.update(penlight.luakeys.parse(\luastring{#2}), luakeys.parse(\luastring{#3})) %}} - %\NewDocumentCommand{\tbldo}{m m O{} }{\luadirect{ % % tex.sprint(tostring(_G[\luastring{#1}][#2])) % % todo allow one to use pl tablex function here, @@ -117,3 +167,14 @@ %}} + + +%%%%%%%%5 + +%\begin{luacode*} +% function set_dim(name, len) +% tex.sprint('\\global\\let\\'..name..'\\relax') -- reset length +% tex.sprint('\\global\\newlength{\\'..name..'}') -- make new len +% tex.setglue(name, tex.sp(len)) +% end +%\end{luacode*} |