mdbook-termlink
An mdBook preprocessor that automatically links glossary terms throughout your documentation.
Features
- Parses glossary terms from definition list markdown format
- Auto-links first occurrence of each term per page (configurable)
- Skips code blocks, inline code, existing links, and headings
- Supports case-insensitive matching (configurable)
- Custom CSS class for styled glossary links
- Supports terms with short forms like "API (Application Programming Interface)"
Installation
From crates.io
From source
Usage
1. Add to your book.toml
[]
= "reference/glossary.md"
2. Create a glossary file
Create your glossary using markdown definition lists:
API (Application Programming Interface)
: A set of protocols and tools for building software applications.
REST
: Representational State Transfer, an architectural style for distributed systems.
JSON
: JavaScript Object Notation, a lightweight data interchange format.
3. Build your book
Terms in your chapters will automatically link to their glossary definitions!
Configuration
All configuration options with their defaults:
[]
# Path to the glossary file (relative to src directory)
= "reference/glossary.md"
# Only link the first occurrence of each term per page
= true
# CSS class applied to glossary term links
= "glossary-term"
# Whether term matching should be case-sensitive
= false
Configuration Options
| Option | Type | Default | Description |
|---|---|---|---|
glossary-path |
String | "reference/glossary.md" |
Path to glossary file relative to src/ |
link-first-only |
Boolean | true |
Only link first occurrence per page |
css-class |
String | "glossary-term" |
CSS class for term links |
case-sensitive |
Boolean | false |
Case-sensitive term matching |
Styling
Add custom styles for glossary links in your book.toml:
[]
= ["custom.css"]
Example custom.css:
}
}
How It Works
-
Glossary Parsing: The preprocessor parses your glossary file looking for definition lists (term followed by
: definition) -
Term Extraction: Each term is extracted with:
- Full name (e.g., "API (Application Programming Interface)")
- Anchor (e.g., "api-application-programming-interface")
- Short form if present (e.g., "API")
-
Content Processing: For each chapter (except the glossary):
- Skips code blocks, inline code, existing links, headings, and images
- Matches terms using word boundaries to avoid partial matches
- Creates links to the glossary with the configured CSS class
-
Link Generation: Terms are replaced with HTML links:
API
Context Awareness
The preprocessor is smart about where it adds links. It will not link terms inside:
- Code blocks (fenced or indented)
- Inline code (backticks)
- Existing links
- Headings (to preserve table of contents)
- Image alt text
Requirements
- mdBook 0.5.0 or later
- Rust 1.88.0 or later (for building from source)
Development
# Run tests
# Run clippy
# Check formatting
# Build release
Resources
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.