likha-pdf
-simple markdown export with pandoc + lualatex.
- - - - converting… - + +From 34b03a9e0b0028a3bc85fd60a6660ce7ff078441 Mon Sep 17 00:00:00 2001 From: kj_sh604 Date: Sat, 21 Feb 2026 01:50:03 -0500 Subject: feat: more paper sizes and run prettier on files --- src/app.nim | 30 ++++++- src/latex/template.tex | 4 + src/templates/index.html | 224 +++++++++++++++++++++++++---------------------- 3 files changed, 151 insertions(+), 107 deletions(-) diff --git a/src/app.nim b/src/app.nim index b321a23..8760584 100644 --- a/src/app.nim +++ b/src/app.nim @@ -4,13 +4,30 @@ import std/[asynchttpserver, asyncdispatch, os, osproc, streams, strutils, table const AllowedImageExtensions = ["png", "jpg", "jpeg", "gif", "webp", "svg"] - ValidPaperSizes = ["a4paper", "letterpaper", "legalpaper"] + ValidPaperSizes = [ + "a0paper", "a1paper", "a2paper", "a3paper", "a4paper", "a5paper", "a6paper", + "b0paper", "b1paper", "b2paper", "b3paper", "b4paper", "b5paper", "b6paper", + "c4paper", "c5paper", "c6paper", + "letterpaper", "legalpaper", "executivepaper", "ledgerpaper", + "tabloid", "statement", "flsa" + ] ValidMargins = ["0.75in", "1in", "1.25in", "1.5in"] ValidLineSpacings = ["1", "1.5", "2"] + CustomPaperDimensions = [ + ("tabloid", "11in", "17in"), + ("statement", "5.5in", "8.5in"), + ("flsa", "8.5in", "13in"), + ] const AppName = "likha-pdf" +proc lookupCustomPaper(name: string): tuple[width: string, height: string] = + for (paperName, w, h) in CustomPaperDimensions: + if paperName == name: + return (width: w, height: h) + (width: "", height: "") + proc baseDir(): string {.inline.} = getAppDir() @@ -253,7 +270,6 @@ proc runPandoc(sourceMarkdown: string; outputPath: string; paperSize: string; ma "--from", "markdown+emoji+hard_line_breaks", "--pdf-engine=lualatex", "--template", latexTemplatePath(), - "-V", "papersize=" & paperSize, "-V", "margin=" & margin, "-V", "mainfont=" & mainFont, "-V", "linespacing=" & lineSpacing, @@ -261,6 +277,16 @@ proc runPandoc(sourceMarkdown: string; outputPath: string; paperSize: string; ma "-o", outputPath ] + let dims = lookupCustomPaper(paperSize) + if dims.width.len > 0: + args.add("-V") + args.add("paperwidth=" & dims.width) + args.add("-V") + args.add("paperheight=" & dims.height) + else: + args.add("-V") + args.add("papersize=" & paperSize) + if not showPageNumbers: args.add("-V") args.add("hidepages=true") diff --git a/src/latex/template.tex b/src/latex/template.tex index ae44742..8f9aacc 100644 --- a/src/latex/template.tex +++ b/src/latex/template.tex @@ -10,7 +10,11 @@ \setmainfont{$mainfont$}[RawFeature={fallback=emojifallback}] \setmonofont{Latin Modern Mono} +$if(paperwidth)$ +\usepackage[paperwidth=$paperwidth$,paperheight=$paperheight$,margin=$margin$]{geometry} +$else$ \usepackage[paper=$papersize$,margin=$margin$]{geometry} +$endif$ \usepackage{microtype} \usepackage{parskip} \usepackage{setspace} diff --git a/src/templates/index.html b/src/templates/index.html index 6cb610c..5266766 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -1,113 +1,127 @@ -
- - -simple markdown export with pandoc + lualatex.
- - - - converting… - + +