summaryrefslogtreecommitdiff
path: root/tex/context/base/chem-str.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/chem-str.lua')
-rw-r--r--tex/context/base/chem-str.lua87
1 files changed, 44 insertions, 43 deletions
diff --git a/tex/context/base/chem-str.lua b/tex/context/base/chem-str.lua
index 3ab2e53b6..1967948de 100644
--- a/tex/context/base/chem-str.lua
+++ b/tex/context/base/chem-str.lua
@@ -40,8 +40,9 @@ local settings_to_array_with_repeat = utilities.parsers.settings_to_array_with_r
local lpegmatch = lpeg.match
local P, R, S, C, Cs, Ct, Cc, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Ct, lpeg.Cc, lpeg.Cmt
-local variables = interfaces and interfaces.variables
-local context = context
+local variables = interfaces and interfaces.variables
+local context = context
+local formatters = string.formatters
local v_default = variables.default
local v_small = variables.small
@@ -311,18 +312,18 @@ local pattern =
-- print(lpegmatch(pattern,"RZ1..3=x")) -- 1 RZ 1 3 false x
-- print(lpegmatch(pattern,"RZ13=x")) -- 1 RZ false false table x
-local t_initialize = 'if unknown context_chem : input mp-chem.mpiv ; fi ;'
-local t_start_structure = 'chem_start_structure(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
-local t_stop_structure = 'chem_stop_structure;'
-local t_start_component = 'chem_start_component;'
-local t_stop_component = 'chem_stop_component;'
-local t_line = 'chem_%s%s(%s,%s,%s,%s,%s);'
-local t_set = 'chem_set(%s);'
-local t_number = 'chem_%s%s(%s,%s,"\\chemicaltext{%s}");'
-local t_text = t_number
-local t_empty_normal = 'chem_%s(%s,%s,"");'
-local t_empty_center = 'chem_c%s(%s,%s,"");'
-local t_transform = 'chem_%s(%s,%s,%s);'
+local f_initialize = formatters['if unknown context_chem : input mp-chem.mpiv ; fi ;']
+local f_start_structure = formatters['chem_start_structure(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);']
+local f_stop_structure = formatters['chem_stop_structure;']
+local f_start_component = formatters['chem_start_component;']
+local f_stop_component = formatters['chem_stop_component;']
+local f_line = formatters['chem_%s%s(%s,%s,%s,%s,%s);']
+local f_set = formatters['chem_set(%s);']
+local f_number = formatters['chem_%s%s(%s,%s,"\\chemicaltext{%s}");']
+local f_text = f_number
+local f_empty_normal = formatters['chem_%s(%s,%s,"");']
+local f_empty_center = formatters['chem_c%s(%s,%s,"");']
+local f_transform = formatters['chem_%s(%s,%s,%s);']
local prepareMPvariable = commands and commands.prepareMPvariable
@@ -398,9 +399,9 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
m = m + 1 ; metacode[m] = syntax.pb.direct
if keys[special] == "text" and index then
if keys["c"..special] == "text" then -- can be option: auto ...
- m = m + 1 ; metacode[m] = format(t_empty_center,special,variant,index)
+ m = m + 1 ; metacode[m] = f_empty_center(special,variant,index)
else
- m = m + 1 ; metacode[m] = format(t_empty_normal,special,variant,index)
+ m = m + 1 ; metacode[m] = f_empty_normal(special,variant,index)
end
end
elseif operation == "pe" then
@@ -408,7 +409,7 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
local ss = syntax[variant]
keys, max = ss.keys, ss.max
m = m + 1 ; metacode[m] = syntax[operation].direct
- m = m + 1 ; metacode[m] = format(t_set,variant)
+ m = m + 1 ; metacode[m] = f_set(variant)
current_variant = variant
elseif operation == "save" then
insert(sstack,variant)
@@ -418,7 +419,7 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
local ss = syntax[variant]
keys, max = ss.keys, ss.max
m = m + 1 ; metacode[m] = syntax[operation].direct
- m = m + 1 ; metacode[m] = format(t_set,variant)
+ m = m + 1 ; metacode[m] = f_set(variant)
current_variant = variant
elseif operation then
local ss = syntax[operation]
@@ -481,7 +482,7 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
end
elseif ss.keys then
variant, keys, max = s, ss.keys, ss.max
- m = m + 1 ; metacode[m] = format(t_set,variant)
+ m = m + 1 ; metacode[m] = f_set(variant)
current_variant = variant
end
elseif what == "line" then
@@ -494,35 +495,35 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
local sf, st = set[1]
for i=1,ns do
if i > 1 and set[i] ~= set[i-1]+1 then
- m = m + 1 ; metacode[m] = format(t_line,operation,s,variant,sf,st,rulethickness,rulecolor)
+ m = m + 1 ; metacode[m] = f_line(operation,s,variant,sf,st,rulethickness,rulecolor)
sf = set[i]
end
st = set[i]
end
- m = m + 1 ; metacode[m] = format(t_line,operation,s,variant,sf,st,rulethickness,rulecolor)
+ m = m + 1 ; metacode[m] = f_line(operation,s,variant,sf,st,rulethickness,rulecolor)
elseif upto then
- m = m + 1 ; metacode[m] = format(t_line,operation,s,variant,index,upto,rulethickness,rulecolor)
+ m = m + 1 ; metacode[m] = f_line(operation,s,variant,index,upto,rulethickness,rulecolor)
elseif index then
- m = m + 1 ; metacode[m] = format(t_line,operation,s,variant,index,index,rulethickness,rulecolor)
+ m = m + 1 ; metacode[m] = f_line(operation,s,variant,index,index,rulethickness,rulecolor)
else
- m = m + 1 ; metacode[m] = format(t_line,operation,s,variant,1,max,rulethickness,rulecolor)
+ m = m + 1 ; metacode[m] = f_line(operation,s,variant,1,max,rulethickness,rulecolor)
end
elseif what == "number" then
if set then
for i=1,ns do
local si = set[i]
- m = m + 1 ; metacode[m] = format(t_number,operation,align,variant,si,si)
+ m = m + 1 ; metacode[m] = f_number(operation,align,variant,si,si)
end
elseif upto then
for i=index,upto do
local si = set[i]
- m = m + 1 ; metacode[m] = format(t_number,operation,align,variant,si,si)
+ m = m + 1 ; metacode[m] = f_number(operation,align,variant,si,si)
end
elseif index then
- m = m + 1 ; metacode[m] = format(t_number,operation,align,variant,index,index)
+ m = m + 1 ; metacode[m] = f_number(operation,align,variant,index,index)
else
for i=1,max do
- m = m + 1 ; metacode[m] = format(t_number,operation,align,variant,i,i)
+ m = m + 1 ; metacode[m] = f_number(operation,align,variant,i,i)
end
end
elseif what == "text" then
@@ -533,7 +534,7 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
if not t then txt, t = fetch(txt) end
if t then
t = molecule(processor_tostring(t))
- m = m + 1 ; metacode[m] = format(t_text,operation,align,variant,si,t)
+ m = m + 1 ; metacode[m] = f_text(operation,align,variant,si,t)
end
end
elseif upto then
@@ -542,7 +543,7 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
if not t then txt, t = fetch(txt) end
if t then
t = molecule(processor_tostring(t))
- m = m + 1 ; metacode[m] = format(t_text,operation,align,variant,i,t)
+ m = m + 1 ; metacode[m] = f_text(operation,align,variant,i,t)
end
end
elseif index == 0 then
@@ -550,14 +551,14 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
if not t then txt, t = fetch(txt) end
if t then
t = molecule(processor_tostring(t))
- m = m + 1 ; metacode[m] = format(t_text,operation,align,variant,index,t)
+ m = m + 1 ; metacode[m] = f_text(operation,align,variant,index,t)
end
elseif index then
local t = text
if not t then txt, t = fetch(txt) end
if t then
t = molecule(processor_tostring(t))
- m = m + 1 ; metacode[m] = format(t_text,operation,align,variant,index,t)
+ m = m + 1 ; metacode[m] = f_text(operation,align,variant,index,t)
end
else
for i=1,max do
@@ -565,7 +566,7 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
if not t then txt, t = fetch(txt) end
if t then
t = molecule(processor_tostring(t))
- m = m + 1 ; metacode[m] = format(t_text,operation,align,variant,i,t)
+ m = m + 1 ; metacode[m] = f_text(operation,align,variant,i,t)
end
end
end
@@ -576,17 +577,17 @@ local function process(level,spec,text,n,rulethickness,rulecolor,offset,default_
if set then
for i=1,ns do
local si = set[i]
- m = m + 1 ; metacode[m] = format(t_transform,operation,variant,si,factor)
+ m = m + 1 ; metacode[m] = f_transform(operation,variant,si,factor)
end
elseif upto then
for i=index,upto do
- m = m + 1 ; metacode[m] = format(t_transform,operation,variant,i,factor)
+ m = m + 1 ; metacode[m] = f_transform(operation,variant,i,factor)
end
else
- m = m + 1 ; metacode[m] = format(t_transform,operation,variant,index or 1,factor)
+ m = m + 1 ; metacode[m] = f_transform(operation,variant,index or 1,factor)
end
elseif what == "fixed" then
- m = m + 1 ; metacode[m] = format(t_transform,operation,variant,rulethickness,rulecolor)
+ m = m + 1 ; metacode[m] = f_transform(operation,variant,rulethickness,rulecolor)
elseif trace_structure then
report_chemistry("%s > warning: undefined operation %s ignored here",
level, operation or "")
@@ -685,7 +686,7 @@ function chemistry.start(settings)
end
rotation = tonumber(rotation) or 0
--
- metacode[#metacode+1] = format(t_start_structure,
+ metacode[#metacode+1] = f_start_structure(
chemistry.structures,
l, r, t, b, scale, rotation,
tostring(width), tostring(height), tostring(emwidth), tostring(offset),
@@ -696,19 +697,19 @@ function chemistry.start(settings)
end
function chemistry.stop()
- metacode[#metacode+1] = t_stop_structure
+ metacode[#metacode+1] = f_stop_structure()
local mpcode = concat(metacode,"\n")
if trace_metapost then
report_chemistry("metapost code:\n%s", mpcode)
end
if metapost.instance(chemistry.instance) then
- t_initialize = ""
+ f_initialize = nil
end
metapost.graphic {
instance = chemistry.instance,
format = chemistry.format,
data = mpcode,
- definitions = t_initialize,
+ definitions = f_initialize and f_initialize(),
}
t_initialize = ""
metacode = nil
@@ -719,9 +720,9 @@ function chemistry.component(spec,text,settings)
local spec = settings_to_array_with_repeat(spec,true) -- no lower?
local text = settings_to_array_with_repeat(text,true)
-- inspect(spec)
- metacode[#metacode+1] = t_start_component
+ metacode[#metacode+1] = f_start_component()
process(1,spec,text,1,rulethickness,rulecolor) -- offset?
- metacode[#metacode+1] = t_stop_component
+ metacode[#metacode+1] = f_stop_component()
end
statistics.register("chemical formulas", function()