diff options
author | Hans Hagen <pragma@wxs.nl> | 2014-06-01 13:44:00 +0200 |
---|---|---|
committer | Hans Hagen <pragma@wxs.nl> | 2014-06-01 13:44:00 +0200 |
commit | ca16b82275f15170ca269f77b9dd9b0e29bbd7f6 (patch) | |
tree | d5a68f87d7d5f27d123adb0944ffc00e75257ba4 /tex/context/base/strc-syn.lua | |
parent | 734668b53af40fe48edadf817b87acd5b2ccc3b3 (diff) | |
download | context-ca16b82275f15170ca269f77b9dd9b0e29bbd7f6.tar.gz |
beta 2014.06.01 13:44
Diffstat (limited to 'tex/context/base/strc-syn.lua')
-rw-r--r-- | tex/context/base/strc-syn.lua | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/tex/context/base/strc-syn.lua b/tex/context/base/strc-syn.lua index e27974eb2..2ca428455 100644 --- a/tex/context/base/strc-syn.lua +++ b/tex/context/base/strc-syn.lua @@ -139,23 +139,26 @@ function synonyms.sort(data,options) sorters.sort(data.result,synonyms.compare) end -function synonyms.finalize(data,options) +function synonyms.finalize(data,options) -- mostly the same as registers so we will generalize it: sorters.split local result = data.result data.metadata.nofsorted = #result - local split = { } + local split, nofsplit, lasttag, done, nofdone = { }, 0, nil, nil, 0 + local firstofsplit = sorters.firstofsplit for k=1,#result do local v = result[k] local entry, tag = firstofsplit(v) - local s = split[entry] -- keeps track of change - local d - if not s then - d = { } - s = { tag = tag, data = d } - split[entry] = s - else - d = s.data + if tag ~= lasttag then + -- if trace_registers then + -- report_registers("splitting at %a",tag) + -- end + done = { } + nofdone = 0 + nofsplit = nofsplit + 1 + lasttag = tag + split[nofsplit] = { tag = tag, data = done } end - d[#d+1] = v + nofdone = nofdone + 1 + done[nofdone] = v end data.result = split end @@ -168,10 +171,9 @@ local ctx_synonymentry = context.synonymentry function synonyms.flush(data,options) local kind = data.metadata.kind -- hack, will be done better local result = data.result - local sorted = table.sortedkeys(result) - for k=1,#sorted do - local letter = sorted[k] - local sublist = result[letter] + for i=1,#result do + local sublist = result[i] + local letter = sublist.tag local data = sublist.data for d=1,#data do local entry = data[d].definition |