1if not modules then modules = { } end modules ['page-sel'] = {
2 version = 1.001,
3 comment = "companion to page-sel.mkxl",
4 author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
5 copyright = "PRAGMA ADE / ConTeXt Development Team",
6 license = "see context related readme files"
7}
8
9
10
11local addsuffix = file.addsuffix
12local context = context
13
14do
15
16 local sections = { }
17
18 local function sectionpage(filename,reference,what)
19 local filedata = sections[filename]
20 if not filedata then
21 filedata = {
22 data = job.loadother(filename,"tuc") or false,
23 list = { }
24 }
25 sections[filename] = filedata
26 end
27 local list = filedata.list
28 local entry = list[reference]
29 if not entry then
30 local first = 0
31 local last = 0
32 local data = filedata.data
33 if data then
34 local lists = data.structures.lists.collected
35 local pages = data.structures.pages.collected
36 if lists and pages then
37 for i=1,#lists do
38 local li = lists[i]
39 if li.references.reference == reference then
40 local level = li.metadata.level
41 first = li.references.realpage
42 last = pages[#pages].number
43 for j=i+1,#lists do
44 local lj = lists[j]
45 if lj.metadata.level == level then
46 last = lj.references.realpage - 1
47 break
48 end
49 end
50 end
51 end
52 end
53 end
54 entry = {
55 first = first,
56 last = last,
57 }
58 list[reference] = entry
59 end
60 context(what and entry.first or entry.last)
61 end
62
63 interfaces.implement {
64 name = "firstsectionpage",
65 public = true,
66 arguments = { "optional", "optional", true },
67 actions = sectionpage
68 }
69
70 interfaces.implement {
71 name = "lastsectionpage",
72 public = true,
73 arguments = { "optional", "optional", false },
74 actions = sectionpage
75 }
76
77end
78 |