/typst-pandoc

Typst custom reader and writer for Pandoc

Primary LanguageLuaMIT LicenseMIT

pandoc 3.1.2 now provides a Typst writer to convert to Typst. A reader is also planned.

Hence, because of upcoming native support for Typst, this extension will not be maintained.


Typst custom reader and writer for Pandoc

Typst is a modern markup-based typesetting system with powerful typesetting and scripting capabilities. It's really great.

Pandoc is a universal document converter that handles lots of formats.

The custom reader.lua and writer.lua allow converting to and from Typst using Pandoc embedded Lua engine.

Usage

pandoc -t writer.lua input.tex -o output.typ
pandoc -f reader.lua input.typ -o output.html

Hint: Try converting this README to Typst!

See Pandoc User's guide for more advanced usage.

TODO

Some planned improvements to be done.

  • Better formatting
  • Sort imports
  • Support tight and sparse lists properly
  • Improve standalone template with prettier default
  • Parse the language of code blocks in Typst markup [reader]
  • Parse Typst nested lists (that's a bit tricky here, use a recursive pattern or an LPeg dedicated grammar) [reader]
  • Parse escaped Typst markup characters [reader]
  • Work towards feature completeness
  • Handle most informative attributes in the writer

Features completeness

Checked items are minimally supported.
Unchecked items are not supported.

Writer

Blocks

  • Plain
  • Para
  • LineBlock
  • CodeBlock
  • RawBlock
  • BlockQuote
  • OrderedList
  • BulletList
  • DefinitionList
  • Header
  • HorizontalRule
  • Table
  • Figure
  • Div

Inlines

  • Str
  • Emph
  • Underline
  • Strong
  • Strikeout
  • Superscript
  • Subscript
  • SmallCaps
  • Quoted
  • Cite
  • Code
  • Space
  • SoftBreak
  • LineBreak
  • Math (needs to convert TeX syntax to Typst)
  • RawInline
  • Link
  • Image
  • Note
  • Span

Reader

Some Pandoc AST items do not have a dedicated Typst markup. The result is usually obtained by a generic and expected function call, which could be parsed, such as #strike[redacted] or #underline[important].

Blocks

  • Plain
  • Para
  • LineBlock
  • CodeBlock
  • RawBlock
  • BlockQuote (no markup)
  • OrderedList
  • BulletList
  • DefinitionList
  • Header
  • HorizontalRule
  • Table
  • Figure
  • Div (probably corresponds to a content block)

Inlines

  • Str
  • Emph
  • Underline (no markup)
  • Strong
  • Strikeout (no markup)
  • Superscript
  • Subscript
  • SmallCaps
  • Quoted
  • Cite
  • Code
  • Space
  • SoftBreak
  • LineBreak
  • Math (needs to convert TeX syntax to Typst, not planned)
  • RawInline
  • Link
  • Image
  • Note
  • Span