# Changelog for pandoc-filter-indent
## 0.3.3.1 Nov 17 2025
### Documentation
- Improve Hackage package page presentation
- Split documentation into README.md and DESCRIPTION.md
- README.md: Concise, user-friendly quick-start guide
- DESCRIPTION.md: Full academic documentation with YAML metadata
- Fix incomplete code block example in package description
- Resolves YAML frontmatter display issue on Hackage
### Packaging
- Relax lower bounds to support older LTS snapshots
- Tested with LTS 20.15 (GHC 9.2.7) and LTS 24.20 (GHC 9.10.3)
- Widens compatibility while maintaining PVP-compliant upper bounds
## 0.3.3.0 Nov 17 2025
### Unicode and Operator Support
- Add comprehensive support for GHC UnicodeSyntax extension operators
- Unicode lambda (λ) now correctly renders as `\lambda`
- All GHC UnicodeSyntax operators now supported: ∷, ⇒, →, ←, ⤚, ⤙, ⤜, ⤛, ★, ∀, ⦇, ⦈, ⟦, ⟧, ⊸
- ASCII and Unicode versions of operators produce identical LaTeX output
- Fix unicode lambda (λ) character handling in both Haskell and Skylighting tokenizers
- Add `splitUnicodeLambda` to handle tokens like "λx" → ["λ", "x"]
- Fix lambda expressions rendering in LaTeX math mode
- Fix backslash operators (\, \\, \/, /\, etc.) rendering
- Add preprocessing for Skylighting tokenizer to handle split backslash operators
- Add `fixBracketOperators` to merge GHC bracket operators: (|, |), [|, |]
- >< as Cartesian product (\times)
- :-> as \longmapsto
- **Design choice**: `*` renders as `\times` (multiplication) since modern Haskell uses `Type` for kinds
- Unicode `★` renders as `\star` for legacy kind annotations
- Tokenizers cannot distinguish between kind and multiplication contexts
- TODO: Make this configurable for projects with legacy kind syntax
### Tokenizer Differences and Solutions
- **Root cause identified**: Haskell and Skylighting tokenizers produce different token types
- Haskell tokenizer: most operators → TOther
- Skylighting tokenizer: some operators → TOperator (e.g., *, >-, -<, >>-, -<<)
- Unicode ∀: TKeyword (Haskell) vs TOther (Skylighting)
- Unicode λ: TVar (Haskell) vs TOther (Skylighting)
- **Solution**: Introduced `OpOrOther` pattern synonym using PatternSynonyms extension
- Eliminates code duplication when handling same operator from both tokenizers
- Cleaner syntax: `formatToken (OpOrOther "->") = mathop "to"`
### Bug Fixes
- Fix `extraColumns` and `tableColumns` deduplication mismatch
- Both now use text column position deduplication to avoid gaps in table column indices
- Fixes `prop_tableColumns` test failure on inputs like "\n a"
- Rename subscripts to subAndSuperscripts with proper superscript support
### Testing
- Add comprehensive test suite for lambda expressions and backslash operators
- Add unit tests for all GHC UnicodeSyntax operators (UnicodeOperatorSpec)
- Tests verify ASCII and Unicode versions produce identical LaTeX output
- Tests now fail on error instead of just warning (enforced with error function)
- Add tokenizer comparison tests (TokenizerTest)
- Refactor test suite: extract common test pattern into helper function
- Improve test readability: reduce code duplication in property tests
### Code Quality
- Code cleanup: remove unused LANGUAGE pragmas, add missing pragmas
- Code cleanup: use newtype for single-field records, use concatMap and elemIndex
- Code cleanup: remove redundant $ operators and brackets
- Code cleanup: fix pattern matching style (otherwise -> _)
- Code cleanup: use hPrint instead of hPutStrLn . show
### Documentation
- Add UNICODE_OPERATORS.md explaining Unicode operator support, design decisions, and limitations
- Document tokenizer differences and solutions
- Document the `*` vs `★` rendering choice with rationale
## Release history
0.3.2.0 Sep 29 2021
- stacked subscripts
- lambda in Haskell tokenizer
- greek letters for special variable names: eps, pi, rho
- automatically append required LaTeX packages (broken for Beamer output)
- Mapsto for |=>
0.3.1.0 Jan 15 2021
- Slightly improved formatting with SkyLighting and LaTeX
0.3.0.0 Jan 15 2021
- Support default syntaxes from skylighting.
0.2.3.0 Jan 12 2021
- fixed minor issue that disabled inline rendering.
0.2.2.0 Jan 12 2021
- Fixed problem with declaring too few columns in LaTeX
- Inline code formatting
- Removed indent marks from parenthesised operators: "(+)"
- Removed indent marks from functions promoted to operators like "`mappend`"
- Fixed rendering of indent mark at the start of the column
0.1.0.0 Dec 1 2020
- Initial release supporting LaTeX and HTML output
0.2.0.0 Dec 2 2020
- Preliminary support for Tikzmarks
- Updated README
0.2.1.0 Dec 2 2020
- Extended code documentation
- Cleanups