diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-reg.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/core-reg.lua | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-reg.lua b/Master/texmf-dist/tex/context/base/core-reg.lua deleted file mode 100644 index f490f2ccaab..00000000000 --- a/Master/texmf-dist/tex/context/base/core-reg.lua +++ /dev/null @@ -1,185 +0,0 @@ --- filename : core-reg.lua --- comment : companion to core-reg.tex --- author : Hans Hagen, PRAGMA-ADE, Hasselt NL --- copyright: PRAGMA ADE / ConTeXt Development Team --- license : see context related readme files - -if not versions then versions = { } end versions['core-reg'] = 1.001 -if not jobs then jobs = { } end -if not job then jobs['main'] = { } end job = jobs['main'] -if not job.registers then job.registers = { } end - -function job.defineregister(id) - if not job.registers[id] then - job.registers[id] = { } - end -end - --- {'e','3','','test+test+test','2--0-0-0-0-0-0-0--1','1'} - --- load index (we could rease the original entry afterwards, freeing memory) - --- index sorting - -sorters = sorters or { } -sorters.index = sorters.index or { } -sorters.index.data = sorters.index.data or { } - -do - - function sorters.index.compare(a,b) - local result = 0 - for i=1,4 do - if result == 0 then - result = sorters.comparers.basic(a,b,i) - else - return result - end - end - if a[1] ~= 's' then -- e/f/t - local page_a, page_b = a[3], b[3] - if page_a < page_b then - return -1 - elseif page_a > page_b then - return 1 - end - end - return 0 - end - - function sorters.index.prepare(data) - sorters.prepare(data,sorters.splitters.utf,4) - end - - function sorters.index.sort(data) - sorters.sort(data,sorters.index.compare) - end - - function sorters.index.unique(data) - sorters.unique(data) - end - - function sorters.index.cleanup(data) - sorters.cleanup(data) - end - - function sorters.index.finalize(data) - local split = { } - for k,v in ipairs(data) do - local entry, tag = v[2][1][3][1], "" - local se = sorters.entries[sorters.language] - if se and se[entry] then - if type(se[entry]) == "number" then - entry = se[entry] - end - tag = se[entry] - else - entry = 0 - tag = "unknown" - end - split[entry] = split[entry] or { tag = tag, data = { } } - split[entry].data[#split[entry].data+1] = v - end - return split - end - - -- \registerpage{index}{,}{6}{2--0-0-0-0-0-0-0--1}{1} - - -- for the moment we use the old structure, some day mkiv code - -- will be different: more structure, less mess - - local template = { - page = "\\registerpage{%s}{%s}{%s}{%s}{%s}", - see = "\\registersee{%s}{%s}{%s}{%s}", - letter = "\\registerentry{%s}{%s}", - entry = { - "\\registerentrya{%s}{%s}", - "\\registerentryb{%s}{%s}", - "\\registerentryc{%s}{%s}", - "\\registerentryd{%s}{%s}", - }, - } - - function sorters.index.flush(sorted,class,flush) - flush = flush or print - class = class or 'index' - for k,v in ipairs(table.sortedkeys(sorted)) do - local s = sorted[v] - flush(template.letter:format(class,s.tag)) - local done = { false, false, false } - for kk,vv in ipairs(s.data) do - if vv[2][1] then - local e = { false, false, false, false } - for i=1,4,1 do - if vv[2][i] then - e[i] = vv[2][i][1] - end - if e[i] ~= done[i] then - if e[i] and e[i] ~= "" then - done[i] = e[i] - flush(template.entry[i]:format(class,e[i])) - else - done[i] = false - end - end - end - if vv[1] == 'e' then - -- format reference pagespec realpage - flush(template.page:format(class,",",vv[4],vv[5],vv[3])) - elseif vv[1] == 's' then - flush(template.see:format(class,",",vv[5],vv[3])) - end - end - end - end - end - - function sorters.index.process(data) - return sorters.process('index',data) - end - -end - --- { { entry, key }, { entry, key }, { entry, key }, { entry, key } }, kind, realpage|see, reference, pagespec - -function job.loadregister(class) - if job.registers[class] then - if not sorters.index.data[class] then - sorters.index.data[class] = { - language = 'en', - entries = { }, - flush = function(s) tex.sprint(tex.ctxcatcodes,s) end, - sorted = false, - class = class - } - local entries = sorters.index.data[class].entries - for k,v in ipairs(job.registers[class]) do - if v[1] == 'l' then -- language - sorters.index.data[class].language = v[2] - else - local key, entry = v[3], v[4] - if type(entry) == 'string' then - entry = entry:splitchr('+') - end - if type(key) == 'string' then - key = key:splitchr('+') - end - entries[#entries+1] = { - v[1], -- kind (e, f, t, s) - { - { entry[1] or "", key[1] or "" }, - { entry[2] or "", key[2] or "" }, - { entry[3] or "", key[3] or "" }, - { entry[4] or "", key[4] or "" } - }, - v[6], -- realpage or seeword (check see) - v[2], -- reference - v[5], -- pagespec - } - end - end - end - -- maybe we should also save the register result stream - sorters.index.process(sorters.index.data[class]) - end -end |