diff options
author | Karl Berry <karl@freefriends.org> | 2018-12-03 22:49:28 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-12-03 22:49:28 +0000 |
commit | 510cc1b8395f714ec6c1b7299cf73371563b1a16 (patch) | |
tree | ef1d3f055e87db8e906501a88ca550b861ac22e2 /Master/texmf-dist/tex/lualatex/xindex/xindex-HAdW.lua | |
parent | f855360800d3dd036378f102ca41cf5fa3e87db1 (diff) |
xindex (2dec18)
git-svn-id: svn://tug.org/texlive/trunk@49312 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/xindex/xindex-HAdW.lua')
-rw-r--r-- | Master/texmf-dist/tex/lualatex/xindex/xindex-HAdW.lua | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lualatex/xindex/xindex-HAdW.lua b/Master/texmf-dist/tex/lualatex/xindex/xindex-HAdW.lua new file mode 100644 index 00000000000..a45bd744332 --- /dev/null +++ b/Master/texmf-dist/tex/lualatex/xindex/xindex-HAdW.lua @@ -0,0 +1,231 @@ +----------------------------------------------------------------------- +-- FILE: xindex-HAdW.lua +-- DESCRIPTION: configuration file for xindex.lua +-- REQUIREMENTS: +-- AUTHOR: Herbert Voß +-- LICENSE: LPPL1.3 +----------------------------------------------------------------------- +-- +-- configuration for index files of the Heidelberger Akademie der Wissenschaften + +if not modules then modules = { } end modules ['xindex-HAdW'] = { + version = 0.05, + comment = "configuration to xindex.lua", + author = "Herbert Voss", + copyright = "Herbert Voss", + license = "LPPL 1.3" +} + +--local version = "0.01" + +itemPageDelimiter = "," -- Hello, 14 +compressPages = true -- something like 12--15, instaead of 12,13,14,15. the |( ... |) syntax is still valid +fCompress = true -- 3f -> page 3, 4 and 3ff -> page 3, 4, 5 +minCompress = 3 -- 14--17 or +numericPage = false -- for non numerical pagenumbers, like "VI-17" +sublabels = {"", "-\\,", "--\\,", "---\\,"} -- for the (sub(sub(sub-items first one is for item +pageNoPrefixDel = "" -- a delimiter for page numbers like "VI-17" +indexOpening = "" -- commands after \begin{theindex} + + + +--[[ + Each character's position in this array-like table determines its 'priority'. + Several characters in the same slot have the same 'priority'. +]] +alphabet_lower = { -- for sorting + { ' ' }, -- only for internal tests + { 'a', 'á', 'à', 'ä'}, + { 'b' }, + { 'c' }, + { 'd' }, + { 'e', 'é', 'è', 'ë' }, + { 'f' }, + { 'g' }, + { 'h' }, + { 'i', 'í', 'ì', 'ï' }, + { 'j' }, + { 'k' }, + { 'l' }, + { 'm' }, + { 'n', 'ñ' }, + { 'o', 'ó', 'ò', 'ö' }, + { 'p' }, + { 'q' }, + { 'r' }, + { 's' }, + { 't' }, + { 'u', 'ú', 'ù', 'ü' }, + { 'v' }, + { 'w' }, + { 'x' }, + { 'y' }, + { 'z' } +} +alphabet_upper = { -- for sorting + { ' ' }, + { 'A', 'Á', 'À', 'Ä'}, + { 'B' }, + { 'C' }, + { 'D' }, + { 'E', 'È', 'È', 'ë' }, + { 'F' }, + { 'G' }, + { 'H' }, + { 'I', 'Í', 'Ì', 'ï' }, + { 'J' }, + { 'K' }, + { 'L' }, + { 'M' }, + { 'N', 'Ñ' }, + { 'O', 'Ó', 'Ò', 'Ö' }, + { 'P' }, + { 'Q' }, + { 'R' }, + { 'S' }, + { 'T' }, + { 'U', 'Ú', 'Ù', 'Ü' }, + { 'V' }, + { 'W' }, + { 'X' }, + { 'Y' }, + { 'Z' } +} + + +--\indexentry{Ackers, Carolus}{VII/1-715} +--\indexentry{Bremen!Adalbert I. von, Erzbischof}{VII/2/1-948} +--\indexentry{Bremen!Adalbert I. von, Erzbischof}{VII/1-50} + +function specialCompressPageList(pages) + if (#pages <= 1) or (pages[1]["number"] == "") then + pages[1]["number"] = pages[1]["number"]:gsub('-',' ') + return pages + end -- only one pageno +--[[ +modify pagelist +sortPages = {{ origin = { number=VII/1-715, special="" }, + sort = 07/1-00715 }, + {...} + } +]] + local sortPages = {} + local roman + local volume + local page + local i + for i=1,#pages do + roman = string.gsub(pages[i]["number"],'%U*','') -- only uppercase to catch VII123f (folium pages) + roman = string.format("%03d",tonumber(romanToNumber(roman))) + volume = string.gsub(pages[i]["number"],'%a*','') + if volume then volume = volume:gsub('-%d*','') end + page = string.gsub(pages[i]["number"],'.*-','') + page = string.format("%5s",page) +--print(roman..volume.." "..page) + sortPages[#sortPages+1] = { + origin = pages[i], + sort = roman..volume.." "..page } -- no minus between Roman/Volume and first page + end +-- sort the page list + table.sort(sortPages, function(a,b) return a["sort"] < b["sort"] end ) + local Pages = {} + for i=1,#sortPages do -- use the sorted origin table + Pages[#Pages+1] = sortPages[i]["origin"] + end +-- writeLog(1,print(getRawPagesP(Pages)),2) +-- test if two or more pages in the list + if #Pages == 2 then -- only two pages + local page1 = string.gsub(Pages[1]["number"],'%A*','') -- get prefix1 + local page2 = string.gsub(Pages[2]["number"],'%A*','') -- ger prefix2 + if page1 == page2 then -- same prefix + page1 = string.gsub(Pages[1]["number"],'.*-','') -- get page1 + page2 = string.gsub(Pages[2]["number"],'.*-','') -- get page2 + if (page2-page1) == 1 then -- pagediff = 1 + Pages[1]["number"] = Pages[1]["number"].."f" + Pages[2] = nil -- remove second page + return Pages + else -- page difference > 1 + pages[1]["number"] = pages[1]["number"]:gsub('-',' ') + Pages[2]["number"] = string.gsub(Pages[2]["number"],'.*-','') -- use only number -> same prefix + return Pages -- Pages[1] is the same + end + else + pages[1]["number"] = pages[1]["number"]:gsub('-',' ') + pages[2]["number"] = pages[2]["number"]:gsub('-',' ') + return Pages -- different prefix -> simple return of the two pages + end + else -- more than two pages + local prefixList = {} + local lastPrefix = "" + local currentPrefix + for i=1,#Pages do -- create the list of different prefixes, eg {VI, VI/2/1, VI/2/2} + currentPrefix, j = string.gsub(Pages[i]["number"],'-.*','') + if currentPrefix ~= lastPrefix then + prefixList[#prefixList+1] = currentPrefix + lastPrefix = currentPrefix + end + end + pages = {} + for j = 1,#prefixList do + lastPrefix = prefixList[j] + i = 1 + local subPageList = {} + while (i <= #Pages) do + currentPrefix, _ = string.gsub(Pages[i]["number"],'-.*','') + if (lastPrefix == currentPrefix) then + subPageList[#subPageList+1] = { number = string.gsub(Pages[i]["number"],'.*-',''), special = Pages[i]["special"] } + end + i = i +1 + end + sortPages = compressPageList(subPageList) + -- no minus between Roman/Volume and first page + pages[#pages+1] = { number = lastPrefix.." "..sortPages[1]["number"], special = sortPages[1]["special"] } + for i=2,#sortPages do + pages[#pages+1] = sortPages[i] + end + end + return pages + end +end + +function replaceRoman(r) + local i = romanToNumber(r) + if i then return "//"..string.format("%03d",i).."//" + else return r + end +end + +function SORTprehook(data) -- replace roman with algebraic, eg Karl IX -> Karl // 9// +-- writeLog(1,require 'xindex-pretty'.dump(data),0) -- only for internal dump + local entry + local elements = {} + for i=1,#data do + entry = data[i]["Entry"] + elements = entry:split() + local number = romanToNumber(elements[#elements]) + if number then + local strNr = string.format("%03d",tostring(number)) + elements[#elements] = "//"..strNr.."//" + entry = "" + for j=1,#elements do entry=entry.." "..elements[j] end + else + entry:gsub("!(.-)%p",replaceRoman) + end + data[i]["Entry"] = entry + end + return data +end + +function SORTposthook(data) -- the other way round as prehook + local entry + local elements = {} + for i=1,#data do + entry = data[i]["Entry"] + if entry:find("//") then + data[i]["Entry"] = entry:gsub("//(.-)//",numberToRoman) + end + end + return data +end + + |