diff --git a/glossy/src/gloss.typ b/glossy/src/gloss.typ index d29dfbf..82e23fb 100644 --- a/glossy/src/gloss.typ +++ b/glossy/src/gloss.typ @@ -194,6 +194,8 @@ // - "long": Show only the long form. // - "def" or "desc": Show the term's description instead of its name. // - "a" or "an": Prepend an article, chosen from the entry (short or long form). +// - "hide" or "hidden": Use term (for the sake of the glossary/index), +// but don't display it. // show-term (function): A function that renders the chosen term. // term-links (boolean): If terms should be clickable links leading to glossary // @@ -218,6 +220,9 @@ if ("a" in modifiers or "an" in modifiers) and ("pl" in modifiers) { panic("Cannot use 'a'/'an' and 'pl' together.") } + if ("hidden" in modifiers or "hide" in modifiers) and modifiers.len() > 1{ + panic("Cannot use 'hide'/'hidden' with other modifiers.") + } // --------------------------------------------------------------------------- // Retrieve the glossary entry and its label @@ -297,8 +302,11 @@ // If no explicit mode is given, the default behavior is: // - On first use and if a long form exists, "both". // - Otherwise, "short". - let determine_mode = (wants_both, wants_long, wants_short, is_first_use, long_available) => { - if wants_both { + let determine_mode = (wants_both, wants_long, wants_short, is_first_use, long_available, wants_hidden) => { + if wants_hidden { + // If it's hidden, nothing else matters + "hidden" + } else if wants_both { // Explicit request for "both": // If a long form exists, use "both", otherwise fall back to "short". if long_available { @@ -336,10 +344,11 @@ let wants_both = "both" in modifiers let wants_long = "long" in modifiers let wants_short = "short" in modifiers + let wants_hidden = ("hidden" in modifiers or "hide" in modifiers) let long_available = entry.long != none // Determine mode using the helper function - let mode = determine_mode(wants_both, wants_long, wants_short, is_first_use, long_available) + let mode = determine_mode(wants_both, wants_long, wants_short, is_first_use, long_available, wants_hidden) // Pluralize (if requested) let short-form = pluralize_term(entry.short, entry.plural) @@ -362,25 +371,38 @@ // Construct and return the final output // --------------------------------------------------------------------------- context { - let linked-term = if term-links and __has_glossary_entry(key) { - link(label(key), term) - } else { - term - } - let term-label = if wants_reference { + // Figure out our label (unless not wanted) + let term-label = if wants_reference { __term_label(key) } else { [] } - [#article#show-term(linked-term)#metadata(term)#term-label] - // |^^^^^^^|^^^^^^^^^ |^^^^^^^^ |^^^^^^^^^^^^ - // \_art. | | | - // \_ apply user formatting function to the term - // | | - // \_ metadata lets us label (ie makes it "labelable") - // | - // \_ i.e. <__gloss:key>, etc. - // for backlink from glossary + + // Create the output content + if mode == "hidden" { + // just put the metadata+label out there + [#metadata("hidden term")#term-label] + } else { + // normal term display (ie not hidden) + + // create the forward link, if watned + let linked-term = if term-links and __has_glossary_entry(key) { + link(label(key), term) + } else { + term + } + + // and the final content + [#article#show-term(linked-term)#metadata(term)#term-label] + // |^^^^^|^^^^^^^^^ |^^^^^^^^ |^^^^^^^^^^^^ + // \_art.| | | + // \_ apply user formatting function to the term + // | | + // \_ metadata lets us label (ie makes it "labelable") + // | + // \_ i.e. <__gloss:key>, etc. + // for backlink from glossary + } } } diff --git a/glossy/tests/hidden-terms/ref/1.png b/glossy/tests/hidden-terms/ref/1.png new file mode 100644 index 0000000..5f376cc Binary files /dev/null and b/glossy/tests/hidden-terms/ref/1.png differ diff --git a/glossy/tests/hidden-terms/test.typ b/glossy/tests/hidden-terms/test.typ new file mode 100644 index 0000000..ffbaf3a --- /dev/null +++ b/glossy/tests/hidden-terms/test.typ @@ -0,0 +1,33 @@ +#import "/lib.typ": * + +#let myGlossary = ( + html: ( + short: "HTML", + long: "Hypertext Markup Language", + description: "A standard language for creating web pages", + group: "Web"), + css: ( + short: "CSS", + long: "Cascading Style Sheets", + description: "A language used for describing the presentation of a document", + group: "Web"), + tps: ( + short: "TPS", + long: "test procedure specification", + description: "A document on how to run all the test procedures"), + unused: "Unused term, which shouldn't print in the glossary." +) + +#show: init-glossary.with(myGlossary) + +#set page(height: auto, width: 6.5in, margin: 1em, numbering: "1") + += Hiding terms + +Here's a hidden term: @html:hide + +Here's another hidden term: @css:hidden + +And here's a shown term: @tps + +#glossary()