Module:Sandbox/trappist the monk/math
require('strict');
--
local function math_test (frame)
local math_title = frame.args['math-title'];
if math_title:find ('\127[^\127]*UNIQ%-%-math%-[%a%d]+%-QINU[^\127]*\127') then
return 'math-title has markup';
end
local math_t = {}; -- temporary holding spot for math strip markers
local escaped = '__35c4p3d__'; -- the special secret EScApEd keyword
local str = math_title:gsub ('\\%$', escaped); -- replace '\$' (escaped $) with special secret EScApEd keyword
local count;
str, count = str:gsub ('%$', '%1'); -- there must be $-delimited text and the delimters must be balanced
if 0 == count then
return '|math-title= missing TeX delimiters';
elseif 0 ~= count % 2 then
return '|math-title= has unbalanced TeX delimiters';
end
local pattern = '(%$([^%$]+)%$)'; -- pattern used to find $-delimited math text
for math_str in str:gmatch (pattern) do -- walk through the text and for each $-delimited math text
math_str = math_str:gsub (pattern, ''); -- replace the delimiters
math_str = math_str:gsub (escaped, '\\%$'); -- replace special secret EScApEd keyword with '\$'
math_str = frame:preprocess (math_str); -- preprocess math text into a math strip marker
table.insert (math_t, math_str); -- and save the math strip marker
end
for _, stripmarker in ipairs (math_t) do
str = str:gsub (pattern, stripmarker, 1); -- replace $-delimited math text with matching strip marker
end
str = str:gsub (escaped, '%$'); -- replace special secret EScApEd keyword with unescaped form '$'
return table.concat ({
'math title: ',
str,
'; metadata: ',
math_title,
''
});
end
local function math_test2 (frame)
local math_title = frame.args['math-title'];
if math_title:find ('\127[^\127]*UNIQ%-%-math%-[%a%d]+%-QINU[^\127]*\127') then
return 'math-title has markup';
end
local math_t = {}; -- temporary holding spot for math strip markers
local str = math_title;
local pattern = '(\\%((.-)\\%))'; -- pattern used to find \(...\) delimited math text
if not str:find (pattern) then -- there must be \(...\) delimited text and the delimters must be balanced
return '|math-title= missing TeX delimiters';
end
for math_str in str:gmatch (pattern) do -- walk through the text and for each \(...\) delimited math text
math_str = math_str:gsub (pattern, ''); -- replace the delimiters
math_str = frame:preprocess (math_str); -- preprocess math text into a math strip marker
table.insert (math_t, math_str); -- and save the math strip marker
end
for _, stripmarker in ipairs (math_t) do
str = str:gsub (pattern, stripmarker, 1); -- replace \(...\) delimited math text with matching strip marker
end
return table.concat ({
'math title: ',
str,
'; metadata: ',
math_title,
''
});
end
local function span_test (frame)
local span_str = frame.args[1];
local patterns_t = {
{'\127[^\127]*UNIQ%-%-(%a+)%-[%a%d]+%-QINU[^\127]*\127', ''}, -- remove any stripmarkers
{'
', ''}, -- remove any
html tags ({{chem2}})
{'(]*)class *= *"[^"]*"([^>]*>)', '%1%2'}, -- remove class attributes from tags
{'(]*)style *= *"[^"]*"([^>]*>)', '%1%2'}, -- remove style attributes from tags
{'(]*)title *= *"[^"]*"([^>]*>)', '%1%2'}, -- remove title attributes from tags
{' +>', '>'}, -- remove trailing spaces in the tag
{' +', ' '}, -- remove redundant spaces
}
for _, pattern_t in ipairs (patterns_t) do
span_str = span_str:gsub (pattern_t[1], pattern_t[2]);
end
local count = 1;
while 0 ~= count do
span_str, count = span_str:gsub ('(.-)', '%1');
end
return span_str;
end
return
{
math_test = math_test, -- $...$
math_test2 = math_test2, -- \(...\)
span_test = span_test,
}