66 lines
1.5 KiB
Lua
66 lines
1.5 KiB
Lua
|
local system = require 'pandoc.system'
|
||
|
|
||
|
local tikz_doc_template = [[
|
||
|
\documentclass{standalone}
|
||
|
\usepackage[pdftex]{graphics}
|
||
|
\usepackage[pdftex]{graphicx}
|
||
|
\usepackage{xcolor}
|
||
|
\usepackage{tikz}
|
||
|
\begin{document}
|
||
|
\nopagecolor
|
||
|
%s
|
||
|
\end{document}
|
||
|
]]
|
||
|
|
||
|
local function tikz2image(src, filetype, outfile)
|
||
|
system.with_temporary_directory('tikz2image', function (tmpdir)
|
||
|
system.with_working_directory(tmpdir, function()
|
||
|
local f = io.open('tikz.tex', 'w')
|
||
|
f:write(tikz_doc_template:format(src))
|
||
|
f:close()
|
||
|
os.execute('pdflatex tikz.tex >/dev/null 2>&1')
|
||
|
if filetype == 'pdf' then
|
||
|
os.rename('tikz.pdf', outfile)
|
||
|
else
|
||
|
os.execute('pdf2svg tikz.pdf ' .. outfile .. '>/dev/null 2>&1')
|
||
|
end
|
||
|
end)
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
extension_for = {
|
||
|
html = 'svg',
|
||
|
html4 = 'svg',
|
||
|
html5 = 'svg',
|
||
|
latex = 'pdf',
|
||
|
beamer = 'pdf' }
|
||
|
|
||
|
local function file_exists(name)
|
||
|
local f = io.open(name, 'r')
|
||
|
if f ~= nil then
|
||
|
io.close(f)
|
||
|
return true
|
||
|
else
|
||
|
return false
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function starts_with(start, str)
|
||
|
return str:sub(1, #start) == start
|
||
|
end
|
||
|
|
||
|
|
||
|
function RawBlock(el)
|
||
|
if starts_with('\\begin{tikzpicture}', el.text) then
|
||
|
local filetype = extension_for[FORMAT] or 'svg'
|
||
|
local fbasename = pandoc.sha1(el.text) .. '.' .. filetype
|
||
|
local fname = system.get_working_directory() .. '/' .. fbasename
|
||
|
if not file_exists(fname) then
|
||
|
tikz2image(el.text, filetype, fname)
|
||
|
end
|
||
|
return pandoc.Para({pandoc.Image({}, fbasename)})
|
||
|
else
|
||
|
return el
|
||
|
end
|
||
|
end
|