Commit Graph
75 Commits
Author SHA1 Message Date
swaits ae6405c288 feat(glossy): Check validity of modifiers
When an unrecognized modifier is applied, glossy should panic to warn
the user, instead of silently ignoring the modifier. This might catch
potential misspellings of modifiers.
2025-10-26 16:00:23 -06:00
swaits a6572d07ff feat(glossy): Panic on multiple requested modes
When multiple modes are requested at the same time
(like 'long' & 'short'), panic with a clear error message.

This is better than guessing what the user wanted.
2025-10-26 16:00:23 -06:00
swaits 8e3ede34dc refactor(glossy): Sanitize modes & modifiers
The list of modes & modifiers is now normalized (i.e. multiple equal
names are mapped to the same internal name, e.g. 'def' and 'desc' are
mapped to 'description').
Some sanitization is applied (not yet rigorously).

The internals are now splitted in a list of modes and a list of
modifiers.

These two actions already simplify a lot of logic (no multiple checks
for 'def' and 'desc' for example).
2025-10-26 16:00:23 -06:00
swaits c8f2c0d975 fixup! docs(glossy): Document modes vs modifiers 2025-10-26 16:00:22 -06:00
swaits a2947f2b7b feat(glossy): Count both mode as first use
A breaking change, by default the `both` mode now counts towards the
first use of a term. This in accordance to the documentation.
(updated in bffe5fdc35fcb67aca188fc0642db5bf23530bcd!)
2025-10-26 16:00:22 -06:00
swaits f745af74cc feat(glossy): Add use and nouse modifiers
Added the `:use`/`:spend` and `:nouse`/`:nospend` modifiers, in
accordance with the documentation.
(updated in bffe5fdc35fcb67aca188fc0642db5bf23530bcd!)
2025-10-26 16:00:22 -06:00
swaits 9de06d3781 feat(glossy): Decouple 'wants reference' from 'first usage'
The 'wants to be referenced from the index/glossary' counter is now
decoupled from the '(first) usage' counter. This is made consistent with
the documentation (updated in bffe5fdc35fcb67aca188fc0642db5bf23530bcd!).

Furthermore, when the 'supplement' mode is used, the term is now NOT
counted as (first) used (by default). This is now consistent with the
documentation.
2025-10-26 16:00:22 -06:00
swaits 4f26f9a194 docs(glossy): Add and modify first-use behaviour
Add a mode, two modifiers and change the default usage behaviour of some
modes. This documents the glossy 'API' when using terms with respect to
the usage counter.

Important!
At the moment, this is a description of the intended endresult
(documentation driven development). Next commits will bring the code in
accordance with this desired result.
2025-10-26 16:00:22 -06:00
swaits 2e9b81dff4 docs(glossy): Document modes vs modifiers
This distinction between 'mode' vs 'modifier' is already a bit visible
when looking at which modifiers can be combined and what output they
produce. This is just formalizing and categorizing that behaviour.

Also create a comprehensive reference table for all modes and modifiers.

This distinction is made in preparation for more modes & modifiers to
control the usage counter, while keeping everything understandable.
2025-10-26 16:00:22 -06:00
swaits 3b7a1404ea docs(glossy): Add format-term documentation 2025-10-26 16:00:22 -06:00
swaits b250c35f78 docs(glossy): Add Changelog to README 2025-10-26 16:00:22 -06:00
swaits 03e8e62c70 feat(glossy): Return array of pages in theme
Instead of returning an opaque context element with a fixed list of the
pages, return an array of context elements with each a page
(already unique!).
This is conceptually cleaner. Now it's the themes responsability to join
the array of unique pages however it wants. Most times, this will be a
`.join(", ")`, but could be e.g. `.first()` if the theme only wants to
show the page of the first occurance of this term.
Also update the documentation.

Breaking API change in the themes.
No visual differences (tests remain the same), but there are binary
differences.
2025-10-26 16:00:21 -06:00
swaits 68945132fb feat(glossy): Remove hide/hidden modifier
This modifier was not orthogonal with other modifiers (for example, it
could not be used together with :noindex)
Added documentation and modified test to reflect that @term[] with an
empty supplement has exactly the same result *and* is more orthogonal.

This partially reverts commit 5957432d5d.
2025-10-26 16:00:21 -06:00
swaits 392e8a8122 fix(glossy): Ensure ∅ supplement results in ∅ content
Ensure an empty supplement results in glossy returning empty content,
instead of an empty string. Done by returning #none if no article is
wanted.

When the value #none is returned for the article, this can neatly join
with the other values without a trace. In particular, when `term` is
empty content, this ensures that only #metadata remains, exactly like
in the 'hidden' case.

Effectively, now @term[] is identical to @term:hidden, because no empty
string is inserted. This can be seen in the updated test case, where the
spaces around the blank term are now collapsed to a single space by
Typst, instead of keeping two spaces like before.

A next commit will remove :hidden, since it's not orthogonal w.r.t.
other modifiers, while using a supplement is.
2025-10-26 16:00:21 -06:00
swaits 3e0d7a9812 chore(glossy): Improve code readability
The new function was already present, but unused.
2025-10-26 16:00:21 -06:00
BurningKarl ca57b15ccf fix(glossy): generate correct links to glossary entry 2025-10-26 16:00:21 -06:00
swaits 45112b434f chore(glossy): bump version to 0.8.0 2025-10-26 16:00:20 -06:00
BurningKarl 797fc68857 fix(glossy): avoid duplicate key labels 2025-04-03 15:16:09 -07:00
swaits 8e8723b8d1 docs(glossy): update README with newest features 2025-04-03 15:06:46 -07:00
Niam Patel b899c875c9 Add show-all flag to glossary() and test-case 2025-04-03 08:46:11 -07:00
swaits 4fc05c37a2 feat(glossy): use @term[supplement] to override term display
If you want to completely override how a term is displayed, you can pass
content in via the square brackets on the term's reference.

For example, a term @www which might normally display as "worldwide web
(WWW)" or something similar, could instead display as FOOBAR by using
@www[FOOBAR].
2025-04-03 08:37:28 -07:00
swaits 5957432d5d feat(glossy): adds hide/hidden modifier to suppress term display
There are cases where you might want a term referenced (ie from the
Glossary/Index), but don't want to display it. New modifiers
`hide`||`hidden` do exactly that.
2025-04-03 08:37:28 -07:00
swaits 966a89687a test(glossy): update all tests for Typst 0.13.0 2025-04-03 08:37:28 -07:00
swaits 2b8095d098 fix(glossy): default term-links to false
This parameter (to init-glossary()) enables/disables the terms in the
document linking to their place in the glossary. However, this adds a
crazy amount of extra queries which sometimes hinders Typst's ability to
converge on documents.
2025-04-03 08:37:28 -07:00
swaits c0077ca432 docs(glossy): fix theme parameter typos in README 2025-04-03 08:37:27 -07:00
swaits 7117a1e60f chore(glossy): update minimum compiler version to 0.13.0 2025-02-19 15:48:45 -07:00
Philipp Niedermayer 214a956f42 Fix warning by updating dependency
Block may not occur inside of a paragraph and was ignored
2025-02-17 20:16:11 +01:00
Philipp Niedermayer eebb2a9d7e Update Dependency 2025-02-17 20:14:19 +01:00
Philipp Niedermayer c179c25fe9 Fix deprecated type and string comparison
Type to string comparisons were already deprecated since 0.8 and are removed in 0.13.
2025-02-13 19:03:40 +01:00
Philipp Niedermayer d90cdc1894 Update README.md 2025-02-13 18:43:38 +01:00
Philipp Niedermayer f0961eeb8b Increment version 2025-02-13 18:42:40 +01:00
Philipp Niedermayer 7d40e146fb Update dependency 2025-02-13 18:35:44 +01:00
swaits 4e4e93e096 chore(glossy): bump version to 0.6.0
Closes [#24](https://github.com/swaits/typst-collection/issues/24)

- Fixed academic theme (no longer hardcodes a font)
- New modifiers: noref/noindex - keeps terms out of glossary
- New behavior: short/long/both no longer count against "first use"
2025-01-25 16:10:14 -07:00
swaits 5b0bdf333f doc(glossy): update docs with new 0.6.0 features
- noref/noindex
- updated theme gallery (academic changed to not specify font)
- short/long/both no longer count against "first use"
2025-01-25 16:10:14 -07:00
swaits a903bf0fc8 feat(glossy): adds noref|noindex modifier
Per suggestion in [#24](https://github.com/swaits/typst-collection/issues/24)
2025-01-25 15:46:16 -07:00
swaits ee570f7487 fix(glossy): short/long/both usage no longer counts against a term's "first use"
Fixes [#24](https://github.com/swaits/typst-collection/issues/24)
2025-01-25 15:30:40 -07:00
swaits ef03fdfbc4 fix(glossy): remove font from academic theme 2025-01-25 12:30:32 -07:00
swaits 7ed699d2f7 chore(glossy): bumps version to 0.5.2 2025-01-07 22:54:43 -07:00
swaits 257926d7a5 chore(glossy): exclude bin dir in package manifest 2025-01-07 22:54:43 -07:00
swaits 647fddbf18 test(glossy): update test refs (minor layout diffs only) 2025-01-07 22:54:43 -07:00
swaits 93a7794c2e fix(glossy): fix forward linking (broken themes)
Fixes [#19](https://github.com/swaits/typst-collection/issues/19).

Themes must emit `entry.label` for terms to be able to forward-link to
their glossary entrie.
2025-01-07 22:54:43 -07:00
swaits 40cc652aeb test(glossy): add bin/autotest.sh (uses watchexec) 2025-01-07 22:54:43 -07:00
swaits 05a66f4956 test(glossy): repair utf-handling test 2024-12-22 13:40:13 -07:00
swaits df889d8d72 feat(glossy): add sort: true parameter to glossary() 2024-12-21 22:27:07 -07:00
swaits c008b5bd86 feat(glossy): release 0.5.1 2024-12-20 12:48:19 -07:00
swaits 842166c211 fix(glossy): use codepoints (not bytes!) in article code
Fixes [#18](https://github.com/swaits/typst-collection/issues/18)
2024-12-20 12:37:21 -07:00
swaits c37c6750c6 feat(glossy): release 0.5.0
New feature:

`init-glossary()` now accepts a `format-term()` function which gives the
user control over how the short-form and long-form of the terms are
assembled based on the needed mode ("short", "long", or "both").

Change:

Default theme changed to `theme-academic`, which is probably more
generally useful than the prior (`theme-twocol`).
2024-12-20 11:28:32 -07:00
swaits 03d82458bb feat(glossy): change default theme to theme-academic 2024-12-20 11:28:32 -07:00
swaits 725f657f49 feat(glossy): adds format-term customizability
Idea [from Discord
conversation](https://discord.com/channels/1054443721975922748/1318670789150642246/1319338465757757562).

Let's users more precisely control how short-form and long-form terms
are used based on the mode ("short", "long", or "both").

Defaults to `__default-format-term()` as below:

```typst
// Formats a term string based on the specified mode.
//
// Given mode, long-form, and short-form, this function returns the formatted
// term based on the mode. When mode is ...
//
// - "short" -> returns "short-form"
// - "long" -> returns "long-form"
// - "both" -> returns "short-form (long-form)"
//
// Parameters:
//   mode (string): The mode in which to format the term. Possible values are "short", "long", or "both".
//   short-form (string): The short form of the term.
//   long-form (string): The long form of the term.
//
// Returns:
//   string: The formatted term based on the specified mode.
//
#let __default-format-term(mode, short-form, long-form) = {
    if mode == "short" {
      short-form
    } else if mode == "long" {
      long-form
    } else {
      // mode assumed to be "both"
      long-form + " (" + short-form + ")"
    }
}
```
2024-12-20 11:28:32 -07:00
swaits cf139b66f6 chore(glossy): rm trailing whitespace 2024-12-20 11:28:31 -07:00