Compare commits

...

4 Commits

Author SHA1 Message Date
eb374d20f5 update synopsis and module docs to mention DOCX output 2026-04-30 21:42:39 +01:00
57f4f9f165 add -docx command example to README 2026-04-30 21:42:11 +01:00
f016950ac7 add DOCX support to Mermaid diagram rendering
- Transform.hs: DOCX case returns blocks unchanged (no unicode substitution needed)
- Mermaid.hs: DOCX uses PNG images at normal scale (like HTML, not 3x like PDF)
2026-04-30 18:25:27 +01:00
f4dab3e354 update pandoc bounds to <3.8 (matches 3.7.0.2 used by lts-24.34) 2026-04-30 18:24:07 +01:00
6 changed files with 13 additions and 7 deletions

1
.gitignore vendored
View File

@ -18,4 +18,5 @@ stack-setup-2.yaml
analytics-charts.md analytics-charts.md
architecture-deep-dive.md architecture-deep-dive.md
devcontainer.org devcontainer.org
.devcontainer/
root.json root.json

View File

@ -6,8 +6,9 @@ A self-contained CLI tool that converts Markdown with Mermaid diagrams into PDF
docster -pdf path/to/file.md docster -pdf path/to/file.md
docster -html path/to/file.md docster -html path/to/file.md
docster -docx path/to/file.md
Mermaid code blocks (```mermaid) will be rendered to SVG and embedded. Mermaid code blocks (```mermaid) will be rendered to SVG (HTML) or PNG (PDF/DOCX) and embedded.
## Installation ## Installation

View File

@ -1,9 +1,9 @@
cabal-version: 3.0 cabal-version: 3.0
name: docster name: docster
version: 0.1.0.0 version: 0.1.0.0
synopsis: A self-contained CLI tool that converts Markdown with Mermaid diagrams to PDF/HTML synopsis: A self-contained CLI tool that converts Markdown with Mermaid diagrams to PDF, HTML, or DOCX
description: Docster converts Markdown documents containing Mermaid diagrams into PDF or HTML files description: Docster converts Markdown documents containing Mermaid diagrams into PDF, HTML, or DOCX files
using Pandoc and Mermaid CLI. It automatically renders Mermaid code blocks to SVG using Pandoc and Mermaid CLI. It automatically renders Mermaid code blocks to SVG (HTML) or PNG (PDF/DOCX)
and embeds them in the output. and embeds them in the output.
homepage: https://github.com/yourusername/docster homepage: https://github.com/yourusername/docster
license: BSD-3-Clause license: BSD-3-Clause
@ -41,7 +41,7 @@ library
process >=1.6 && <1.7, process >=1.6 && <1.7,
hashable >=1.4 && <1.6, hashable >=1.4 && <1.6,
containers >=0.6 && <0.8, containers >=0.6 && <0.8,
pandoc >=3.0 && <3.2, pandoc >=3.0 && <3.8,
pandoc-types >=1.23 && <1.25, pandoc-types >=1.23 && <1.25,
bytestring >=0.11 && <0.13, bytestring >=0.11 && <0.13,
temporary >=1.3 && <1.4, temporary >=1.3 && <1.4,

View File

@ -1,7 +1,7 @@
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE LambdaCase #-} {-# LANGUAGE LambdaCase #-}
-- | Document compilation functionality for PDF and HTML output -- | Document compilation functionality for PDF, HTML, and DOCX output
module Docster.Compiler module Docster.Compiler
( -- * Compilation Functions ( -- * Compilation Functions
compileToPDF compileToPDF

View File

@ -79,6 +79,8 @@ generateDiagramPaths (DiagramConfig _ (OutputDir outDir) format) (DiagramId diag
in (svgFile, T.pack $ takeFileName svgFile) in (svgFile, T.pack $ takeFileName svgFile)
PDF -> let pngFile = outDir </> diagIdStr <> ".png" PDF -> let pngFile = outDir </> diagIdStr <> ".png"
in (pngFile, T.pack pngFile) in (pngFile, T.pack pngFile)
DOCX -> let pngFile = outDir </> diagIdStr <> ".png"
in (pngFile, T.pack pngFile)
-- | Puppeteer configuration content for disabling sandbox -- | Puppeteer configuration content for disabling sandbox
puppeteerConfigContent :: Text puppeteerConfigContent :: Text
@ -90,6 +92,7 @@ callMermaidProcess format mmdFile outputFile = do
let baseArgs = case format of let baseArgs = case format of
HTML -> ["-i", mmdFile, "-o", outputFile] HTML -> ["-i", mmdFile, "-o", outputFile]
PDF -> ["-i", mmdFile, "-o", outputFile, "--scale", "3"] PDF -> ["-i", mmdFile, "-o", outputFile, "--scale", "3"]
DOCX -> ["-i", mmdFile, "-o", outputFile]
-- Create temporary puppeteer config file -- Create temporary puppeteer config file
result <- bracket result <- bracket

View File

@ -36,8 +36,9 @@ transformDocument config docName (Pandoc meta blocks) = do
Left err -> return $ Left err Left err -> return $ Left err
Right (newBlocks, _finalState) -> Right (newBlocks, _finalState) ->
case dcOutputFormat config of case dcOutputFormat config of
PDF -> return $ Right $ substituteUnicodeSymbols (Pandoc meta newBlocks) PDF -> return $ Right $ substituteUnicodeSymbols (Pandoc meta newBlocks)
HTML -> return $ Right $ Pandoc meta newBlocks HTML -> return $ Right $ Pandoc meta newBlocks
DOCX -> return $ Right $ Pandoc meta newBlocks
-- | Process a single block with heading tracking state -- | Process a single block with heading tracking state
processBlockStateful :: DiagramConfig -> Block -> TransformM Block processBlockStateful :: DiagramConfig -> Block -> TransformM Block