summary refs log tree commit diff stats
path: root/java/prelude.typ
diff options
context:
space:
mode:
Diffstat (limited to 'java/prelude.typ')
-rw-r--r--java/prelude.typ46
1 files changed, 27 insertions, 19 deletions
diff --git a/java/prelude.typ b/java/prelude.typ
index 027bfef..41eedc5 100644
--- a/java/prelude.typ
+++ b/java/prelude.typ
@@ -4,31 +4,39 @@
 #apply(page-numbering: "(i)" , [
   #align(center, [== Contents])
   #let heading-format(content) = cellx(align: center + horizon, content)
-  #let col-aligns = (right, auto, center + horizon, center + horizon, auto)
-  #let preprocess-alist(l, lpno) = {
-    let i = 0
-    let e = l.len() - 1
-    let nl = ()
-    while i < e {
-      let it = l.at(i)
-      i = i + 1
-      let nit = l.at(i)
-      it.at(2) = [ #it.at(2) - #{nit.at(2) - 1} ]
-      it.push([])
-      nl.push(it)
+  #let column-alignments = (right, auto, center + horizon, center + horizon, auto)
+  #let preprocess-alist(assignment-list, last-page-number) = {
+    let index = 0
+    let last-index = assignment-list.len() - 1
+    let page-number-list = ()
+    while index < last-index {
+      let item = assignment-list.at(index)
+      let next-item = assignment-list.at(index + 1)
+      let starting-page-number = item.page-number
+      let finishing-page-number = next-item.page-number - 1
+      page-number-list.push((starting-page-number, finishing-page-number))
+      index = index + 1
     }
-    l.at(e).at(2) = [ #{l.at(e).at(2)} - #lpno ]
-    l.at(e).push([])
-    nl.push(l.at(e))
-    nl
+    page-number-list.push((assignment-list.at(last-index).page-number, last-page-number))
+    let new-assignment-list = ()
+    index = 0
+    for (start, end) in page-number-list {
+      let page-number = [#start - #end]
+      if start == end { page-number = [#start] }
+      let assignment = assignment-list.at(index)
+      let item = ([#{assignment.number}. ], assignment.description, page-number, [], [])
+      new-assignment-list.push(item)
+      index = index + 1
+    }
+    new-assignment-list
   }
-  #list-of-assignments((l, lpno) =>
+  #list-of-assignments((assignment-list, last-page-number) =>
     tablex(
       columns: (3em, 1fr, 4em, 8em, 10em),
       stroke: 1pt + gray,
-      map-cols: (i, cells) => (cells.first(), ..cells.slice(1).map(cell => (..cell, align: col-aligns.at(i)))),
+      map-cols: (i, cells) => (cells.first(), ..cells.slice(1).map(cell => (..cell, align: column-alignments.at(i)))),
       heading-format[*Sl.* \ *No.*], heading-format[*Description*], heading-format[*Page No.*], heading-format[*Date*], heading-format[*Teacher’s* \ *Signature*],
-      ..preprocess-alist(l, lpno).flatten(),
+      ..preprocess-alist(assignment-list, last-page-number).flatten(),
     ))
 ])