diff --git a/preview/glossy/0.2.1/README.md b/preview/glossy/0.2.1/README.md index a55e4b6..d451000 100644 --- a/preview/glossy/0.2.1/README.md +++ b/preview/glossy/0.2.1/README.md @@ -154,8 +154,9 @@ Display the glossary using the `glossary()` function: ```typst #glossary( - title: "Web Development Glossary", - theme: my-theme, + title: "Web Development Glossary", // Optional: defaults to Glossary + theme: my-theme, // Optionaal: defaults to theme-twocol + ignore-case: false, // Optional: ignore case when sorting terms groups: ("Web") // Optional: Filter to specific groups ) ``` diff --git a/preview/glossy/0.2.1/examples/readme.pdf b/preview/glossy/0.2.1/examples/readme.pdf index 12e41bf..a5209d3 100644 Binary files a/preview/glossy/0.2.1/examples/readme.pdf and b/preview/glossy/0.2.1/examples/readme.pdf differ diff --git a/preview/glossy/0.2.1/src/gloss.typ b/preview/glossy/0.2.1/src/gloss.typ index 092a887..c3ca8a3 100644 --- a/preview/glossy/0.2.1/src/gloss.typ +++ b/preview/glossy/0.2.1/src/gloss.typ @@ -390,7 +390,8 @@ #let glossary( title: "Glossary", theme: theme-twocol, - groups: () + ignore-case: false, + groups: (), ) = context { // Collect and organize entries by group let output = (:) @@ -437,10 +438,18 @@ // Add non-empty groups to output if current_entries.len() > 0 { group = if group == none { "" } else { group } - output.insert( - group, - current_entries.sorted(key: e => e.short) - ) + + // sort entries by case insensitivity if requested + let sorted_entries = current_entries + // 1. create array of tuples with (lower [if ignore-case], entry) + .map(e => { if ignore-case { (lower(e.short), e) } else { (e.short, e) } }) + // 2. sort the tuples (by first element then second) + .sorted(key: t => t.first()) + // 3. strip away the tuple's first element, leaving an array of entries + .map(t => t.last()) + + // add entries to this group's output map + output.insert(group, sorted_entries) } }