summaryrefslogtreecommitdiff
path: root/tex/context/base/sort-ini.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2009-05-28 11:23:00 +0200
committerHans Hagen <pragma@wxs.nl>2009-05-28 11:23:00 +0200
commit1d3090326210c6e6f7ec5432799ded25b75bba46 (patch)
treec5921203789ec669e6bccaba4bd56f9c072dc56b /tex/context/base/sort-ini.lua
parent94d83f84758766511c5e324721e39fea6ab71dae (diff)
downloadcontext-1d3090326210c6e6f7ec5432799ded25b75bba46.tar.gz
beta 2009.05.28 11:23
Diffstat (limited to 'tex/context/base/sort-ini.lua')
-rw-r--r--tex/context/base/sort-ini.lua135
1 files changed, 42 insertions, 93 deletions
diff --git a/tex/context/base/sort-ini.lua b/tex/context/base/sort-ini.lua
index 3e367173d..b75950860 100644
--- a/tex/context/base/sort-ini.lua
+++ b/tex/context/base/sort-ini.lua
@@ -1,8 +1,10 @@
--- filename : sort-ini.lua
--- comment : companion to sort-ini.tex
--- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
--- copyright: PRAGMA ADE / ConTeXt Development Team
--- license : see context related readme files
+if not modules then modules = { } end modules ['sort-ini'] = {
+ version = 1.001,
+ comment = "companion to sort-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
-- todo:
--
@@ -11,7 +13,9 @@
-- texutil compatible
-- always expand to utf
-if not versions then versions = { } end versions['sort-ini'] = 1.001
+local utf = unicode.utf8
+local gsub = string.gsub
+local utfcharacters, utfvalues = string.utfcharacters, string.utfvalues
sorters = { }
sorters.comparers = { }
@@ -21,8 +25,7 @@ sorters.mappings = { }
sorters.replacements = { }
sorters.language = 'en'
-function sorters.comparers.basic(a,b,i) -- [2] has entry, key, cmp
- local sort_a, sort_b = a[2][i][3], b[2][i][3]
+function sorters.comparers.basic(sort_a,sort_b)
if #sort_a > #sort_b then
if #sort_b == 0 then
return 1
@@ -62,67 +65,35 @@ function sorters.comparers.basic(a,b,i) -- [2] has entry, key, cmp
return -1
end
end
- sort_a, sort_b = a[2][i][2], b[2][i][2]
- if sort_a == "" then sort_a = a[2][i][1] end
- if sort_b == "" then sort_b = b[2][i][1] end
- if sort_a < sort_b then
- return -1
- elseif sort_a > sort_b then
- return 1
- else
- return 0
- end
- end
-end
-
-function sorters.prepare(data,split,n)
- local strip = sorters.strip
- for k,v in ipairs(data) do
- for i=1,n do
- local vv = v[2][i]
- if vv then
- if vv[2] then
- if vv[2] ~= "" then
- vv[3] = split(strip(vv[2]))
- else
- vv[3] = split(strip(vv[1]))
- end
- else
- vv[2] = { }
- vv[3] = split(strip(vv[1]))
- end
- else
- v[2][i] = { {}, {}, {} }
- end
- end
+ return 0
end
end
function sorters.strip(str) -- todo: only letters and such utf.gsub("([^%w%d])","")
- str = str:gsub("\\%S*","")
- str = str:gsub("[%s%[%](){}%$\"\']*","")
- str = str:gsub("(%d+)",function(s) return (" "):rep(10-#s) .. s end) -- sort numbers properly
+ str = gsub(str,"\\%S*","")
+ str = gsub(str,"[%s%[%](){}%$\"\']*","")
+ str = gsub(str,"(%d+)",function(s) return (" "):rep(10-#s) .. s end) -- sort numbers properly
return str
end
sorters.defaultlanguage = 'en'
-function sorters.splitters.utf(str)
+function sorters.splitters.utf(str) -- brrr, todo: language
local r = sorters.replacements[sorters.language] or sorters.replacements[sorters.defaultlanguage] or { }
local m = sorters.mappings [sorters.language] or sorters.mappings [sorters.defaultlanguage] or { }
local u = characters.uncompose
local b = utf.byte
local t = { }
- for _,v in pairs(r) do
- str = str:gsub(v[1],v[2])
+ for _,v in next, r do
+ str = gsub(str,v[1],v[2])
end
- for c in str:utfcharacters() do
+ for c in utfcharacters(str) do
if m[c] then
t[#t+1] = m[c]
elseif #c == 1 then
t[#t+1] = b(c)
else
- for cc in string.characters(u(c)) do
+ for cc in string.characters(u(c)) do -- utf ?
t[#t+1] = m[cc] or b(cc)
end
end
@@ -130,52 +101,30 @@ function sorters.splitters.utf(str)
return t
end
-function sorters.sort(data,cmp)
- table.sort(data,function(a,b) return cmp(a,b) == -1 end)
+function sorters.sort(entries,cmp)
+ table.sort(entries,function(a,b) return cmp(a,b) == -1 end)
end
-function sorters.cleanup(data)
- for k,v in ipairs(data) do
- for kk,vv in ipairs(v[2]) do
- if vv and #vv[1] == 0 then
- v[1][kk] = nil
- else
- vv[3] = nil
- end
- end
- for kk,vv in pairs(v) do
- if vv == "" then
- v[kk] = nil
- end
- end
- end
-end
+-- temp workaround (is gone)
-function sorters.unique(data)
- local prev, last = nil, 0
- for _,v in ipairs(data) do
- if not prev or not table.are_equal(prev,v,2,3) then -- check range
- last = last + 1
- data[last] = v
- prev = v
- end
- end
- for i=last+1,#data do
- data[i] = nil
- end
+function sorters.process()
+ -- gone
end
-function sorters.process(kind,data)
- if data.entries then
- if not data.sorted then
- sorters.language = data.language or sorters.language
- sorters[kind].prepare(data.entries)
- sorters[kind].sort(data.entries)
- sorters[kind].unique(data.entries)
- data.sorted = true
- end
- return sorters[kind].flush(sorters[kind].finalize(data.entries),data.class,data.flush)
- else
- return { }
- end
-end
+-- was:
+
+--~ function sorters.process(kind,data)
+--~ if data.entries then
+--~ if not data.sorted then
+--~ sorters.language = data.language or sorters.language
+--~ sorters[kind].prepare(data.entries)
+--~ sorters[kind].sort(data.entries)
+--~ sorters[kind].unique(data.entries)
+--~ data.sorted = true
+--~ end
+--~ return sorters[kind].flush(sorters[kind].finalize(data.entries),data.class,data.flush)
+--~ else
+--~ return { }
+--~ end
+--~ end
+