etherpad2latex/src/etherpad2latex.nim
2019-07-25 17:43:33 +02:00

49 lines
1.2 KiB
Nim

import asynchttpserver, asyncdispatch, httpclient
import os, osproc, strutils, parseopt
import jester
proc getContent(pad:string, etherpadUrl:string):string =
var client = newHTTPClient()
result = client.getContent(etherpadUrl & "p/" & pad & "/export/txt")
when isMainModule:
var
p = initOptParser()
port = 8080
etherpadUrl = "http://localhost:9001/"
router main:
get "/@pad":
let
pad = @"pad"
content = getContent(pad, etherpadUrl)
texFile = open(pad & ".tex", fmWrite)
texFile.write(content)
texFile.close()
let (output, exitCode) = execCmdEx(quoteShellCommand(["pdflatex", "-halt-on-error", pad & ".tex"]))
if exitCode == 0:
resp(Http200, readFile(pad & ".pdf"), contentType = "application/pdf")
else:
resp output
# Parse command-line args
while true:
p.next()
case p.kind
of cmdEnd: break
of cmdShortOption, cmdLongOption:
case p.key
of "p", "port":
port = p.val.parseInt
of "a", "etherpad-address":
etherpadUrl = p.val
else: discard
of cmdArgument: continue
let s = newSettings(port=Port(port))
var j = initJester(main, settings=s)
j.serve()