diff options
Diffstat (limited to 'tex/context/modules/mkiv/m-pstricks.lua')
-rw-r--r-- | tex/context/modules/mkiv/m-pstricks.lua | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/tex/context/modules/mkiv/m-pstricks.lua b/tex/context/modules/mkiv/m-pstricks.lua new file mode 100644 index 000000000..b151e313a --- /dev/null +++ b/tex/context/modules/mkiv/m-pstricks.lua @@ -0,0 +1,74 @@ +if not modules then modules = { } end modules ['m-pstricks'] = { + version = 1.001, + comment = "companion to m-pstricks.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- The following will be done when I need ps tricks figures +-- in large quantities: +-- +-- + hash graphics and only process them once +-- + save md5 checksums in tuc file +-- +-- It's no big deal but has a low priority. + +local format, lower, concat, gmatch = string.format, string.lower, table.concat, string.gmatch +local variables = interfaces.variables + +moduledata.pstricks = moduledata.pstricks or { } + +local report_pstricks = logs.reporter("pstricks") + +local template = [[ +\starttext + \pushcatcodetable + \setcatcodetable\texcatcodes + \usemodule[pstric] + %s + \popcatcodetable + \startTEXpage + \hbox\bgroup + \ignorespaces + %s + \removeunwantedspaces + \egroup + \obeydepth %% temp hack as we need to figure this out + \stopTEXpage +\stoptext +]] + +local loaded = { } +local graphics = 0 + +function moduledata.pstricks.usemodule(names) + for name in gmatch(names,"([^%s,]+)") do + loaded[#loaded+1] = format([[\readfile{%s}{}{}]],name) + end +end + +function moduledata.pstricks.process(n) + graphics = graphics + 1 + local name = format("%s-pstricks-%04i",tex.jobname,graphics) + local data = buffers.collectcontent("def-"..n) + local tmpfile = name .. ".tmp" + local epsfile = name .. ".ps" + local pdffile = name .. ".pdf" + local loaded = concat(loaded,"\n") + os.remove(epsfile) + os.remove(pdffile) + io.savedata(tmpfile,format(template,loaded,data)) + os.execute(format("mtxrun --script texexec %s --once --dvips",tmpfile)) + if lfs.isfile(epsfile) then + os.execute(format("ps2pdf %s %s",epsfile,pdffile)) + -- todo: direct call but not now + if lfs.isfile(pdffile) then + context.externalfigure( { pdffile }, { object = variables.no } ) + else + report_pstricks("run failed, no pdf file") + end + else + report_pstricks("run failed, no ps file") + end +end |