Pandoc filter formatting Haskell code fragments using GHC lexer.
Formats marked code fragments, and allows pandoc to safely process rest of your literate program. Mark code blocks with .haskell attribute:
```{.haskell}
-- your code here
```Usage:
stack install pandoc-filter-indent
pandoc --filter pandoc-filter-indent -f input.md -o output.pdf
pandoc --filter pandoc-filter-indent -f input.md -o output.htmlUsing lhs2TeX is somewhat inconvenient on large Markdown documents processed with pandoc, since it assumes that it can freely redefine everything. It is also pretty heavy on learning.
So instead we have a simple Pandoc filter that is only applied to CodeFragments and creates tabular code structures from indentation. It uses GHC lexer to assure that latest features are always parsed correctly.
Please see the README on GitHub at https://github.com/migamake/pandoc-filter-typeset-code#readme
pandoc-filter-indent
Pandoc filter that intelligently typesets code by detecting indentation boundaries and aligning operators.
Quick Start
Install via Stack:
stack install pandoc-filter-indent
Use with Pandoc:
pandoc --filter pandoc-filter-indent input.md -o output.pdf
pandoc --filter pandoc-filter-indent input.md -o output.html
What it does
Transforms code blocks into well-aligned, tabular layouts that highlight code structure. Instead of plain monospaced code, you get properly aligned operators, function signatures, and nested structures.
Input:
```{.haskell}
class Eq a
=> Compare a where
compare :: a -> a -> Ordering
(>=) :: a -> a -> Bool
```
Output: Rendered with operators vertically aligned in clean tables, using mathematical symbols (→, ⇒, ≥) in LaTeX/PDF output.
Features
- Smart alignment - Detects and aligns operators (
::,=,->, etc.) using GHC lexer - Multiple languages - Haskell (GHC), Python, or generic indentation-based formatting
- Flexible output - LaTeX tables, HTML tables, or Pandoc native tables
- Symbol beautification - Converts operators to mathematical symbols (optional)
- Lightweight - Simple Pandoc filter, easy to integrate
Usage
Mark code blocks with language attribute:
```{.haskell}
-- your Haskell code
```
Or use alternate lexers:
```{.python}
# your Python code
```
For generic indentation-based alignment:
```{.haskell lexer=indent}
-- any indented code
```
Options
Configure via code block attributes:
lexer=haskell- GHC lexer (default)lexer=python3- Python lexerlexer=indent- Indent-only alignmentlexer=spaces- Space-based alignmentdebug=true- Show column boundaries for debugging
Example:
```{.haskell debug=true}
yourCode :: Here
```
Full Documentation
For detailed algorithm explanation, implementation guide, and advanced usage, see DESCRIPTION.md.
See also:Complete Unicode operator symbol mapping for all supported operator conversions (→, ⇒, ≥, ⊥, ∅, etc.).
Links
- GitHub:https://github.com/migamake/pandoc-filter-typeset-code
- Hackage:https://hackage.haskell.org/package/pandoc-filter-indent
- Issues:https://github.com/migamake/pandoc-filter-typeset-code/issues
License
BSD3 - see LICENSE file.