diff options
Diffstat (limited to 'tex/context/base/lang-lab.lua')
-rw-r--r-- | tex/context/base/lang-lab.lua | 67 |
1 files changed, 19 insertions, 48 deletions
diff --git a/tex/context/base/lang-lab.lua b/tex/context/base/lang-lab.lua index 8d48a4988..360f2aa11 100644 --- a/tex/context/base/lang-lab.lua +++ b/tex/context/base/lang-lab.lua @@ -61,20 +61,15 @@ if not modules then modules = { } end modules ['lang-lab'] = { local format, find = string.format, string.find local next, rawget, type = next, rawget, type +local prtcatcodes = tex.prtcatcodes local lpegmatch = lpeg.match -local prtcatcodes = catcodes.numbers.prtcatcodes -- todo: use different method +languages.labels = languages.labels or { } local trace_labels = false trackers.register("languages.labels", function(v) trace_labels = v end) local report_labels = logs.reporter("languages","labels") --- trace_labels = true - -languages.labels = languages.labels or { } -local labels = languages.labels - -local variables = interfaces.variables -local settings_to_array = utilities.parsers.settings_to_array +local variables = interfaces.variables local splitter = lpeg.splitat(":") @@ -82,21 +77,19 @@ local function split(tag) return lpegmatch(splitter,tag) end -labels.split = split - -local contextsprint = context.sprint +languages.labels.split = split -local function definelanguagelabels(data,class,tag,rawtag) +local function definelanguagelabels(data,command,tag,rawtag) for language, text in next, data.labels do if text == "" then -- skip elseif type(text) == "table" then - contextsprint(prtcatcodes,"\\setlabeltextpair{",class,"}{",language,"}{",tag,"}{",text[1],"}{",text[2],"}") + context("\\%s[%s][%s={{%s},{%s}}]",command,language,tag,text[1],text[2]) if trace_labels then report_labels("language '%s', defining label '%s' as '%s' and '%s'",language,rawtag,text[1],text[2]) end else - contextsprint(prtcatcodes,"\\setlabeltextpair{",class,"}{",language,"}{",tag,"}{",text,"}{}") + context("\\%s[%s][%s={{%s},}]",command,language,tag,text) if trace_labels then report_labels("language '%s', defining label '%s' as '%s'",language,rawtag,text) end @@ -104,10 +97,11 @@ local function definelanguagelabels(data,class,tag,rawtag) end end -function labels.define(class,name,prefixed) +function languages.labels.define(command,name,prefixed) local list = languages.data.labels[name] if list then report_labels("defining label set '%s'",name) + context.pushcatcodes(prtcatcodes) -- context.unprotect for tag, data in next, list do if data.hidden then -- skip @@ -116,30 +110,31 @@ function labels.define(class,name,prefixed) if second then if rawget(variables,first) then if rawget(variables,second) then - definelanguagelabels(data,class,format("\\v!%s:\\v!%s",first,second),tag) + definelanguagelabels(data,command,format("\\v!%s:\\v!%s",first,second),tag) else - definelanguagelabels(data,class,format("\\v!%s:%s",first,second),tag) + definelanguagelabels(data,command,format("\\v!%s:%s",first,second),tag) end elseif rawget(variables,second) then - definelanguagelabels(data,class,format("%s:\\v!%s",first,second),tag) + definelanguagelabels(data,command,format("%s:\\v!%s",first,second),tag) else - definelanguagelabels(data,class,format("%s:%s",first,second),tag) + definelanguagelabels(data,command,format("%s:%s",first,second),tag) end elseif rawget(variables,rawtag) then - definelanguagelabels(data,class,format("\\v!%s",tag),tag) + definelanguagelabels(data,command,format("\\v!%s",tag),tag) else - definelanguagelabels(data,class,tag,tag) + definelanguagelabels(data,command,tag,tag) end else - definelanguagelabels(data,class,tag,tag) + definelanguagelabels(data,command,tag,tag) end end + context.popcatcodes() -- context.protect else report_labels("unknown label set '%s'",name) end end ---~ function labels.check() +--~ function languages.labels.check() --~ for category, list in next, languages.data.labels do --~ for tag, specification in next, list do --~ for language, text in next, specification.labels do @@ -152,32 +147,8 @@ end --~ end --~ end --~ ---~ labels.check() - - --- interface - -commands.definelabels = labels.define +--~ languages.labels.check() -- function commands.setstrippedtextprefix(str) -- context(string.strip(str)) -- end - -function commands.concatcommalist(settings) -- it's too easy to forget that this one is there - local list = settings_to_array(settings.text or "") - local size = #list - if size > 1 then - local set = settings_to_array(settings.separators or "") - local one = set[1] or settings.first or " " - local two = set[2] or settings.second or " " - context(list[1]) - for i=2,size-1 do - context(one) - context(list[i]) - end - context(two) - end - if size > 0 then - context(list[size]) - end -end |