From 639d43ea3673791dc223fe9d0e67e6f4b8d312b4 Mon Sep 17 00:00:00 2001
From: Philipp Gesang <phg@phi-gamma.net>
Date: Sun, 2 Mar 2014 15:40:48 +0100
Subject: use luatex.registertempfile() for creating temporary file names

---
 src/rst_parser.lua | 43 +++++++++++++++++++++++++++++--------------
 1 file changed, 29 insertions(+), 14 deletions(-)

(limited to 'src')

diff --git a/src/rst_parser.lua b/src/rst_parser.lua
index 3928161..10994d9 100644
--- a/src/rst_parser.lua
+++ b/src/rst_parser.lua
@@ -54,6 +54,7 @@ local utf                   = unicode.utf8
 
 local ioopen                = io.open
 local iowrite               = io.write
+local select                = select
 local stringfind            = string.find
 local stringformat          = string.format
 local stringgsub            = string.gsub
@@ -61,8 +62,8 @@ local stringlen             = string.len
 local stringmatch           = string.match
 local stringstrip           = string.strip
 local stringsub             = string.sub
+local tableconcat           = table.concat
 local utflen                = utf.len
-local select                = select
 
 local context               = context
 
@@ -1537,12 +1538,29 @@ do
     p_strip_comments = Cs((comment + 1)^0)
 end
 
+
+local tempfile_count = { } --- map category -> count
+
+local get_tmpfile = function (category)
+    local cnt = tempfile_count[category]
+    if not cnt then
+        cnt = 0
+    end
+    cnt = cnt + 1
+    tempfile_count[category] = cnt
+    return luatex.registertempfile (
+               stringformat ("%s_rst-%s-%d",
+                             tex.jobname,
+                             category,
+                             cnt)
+        )
+end
+
 function thirddata.rst.do_rst_file(fname)
     local raw_data   = load_file(fname)
     local processed  = lpegmatch (rst_parser, raw_data)
     local setups     = get_setups(false)
-    local tmp_file   = tex.jobname .. "–rst_temporary.tex.tmp"
-
+    local tmp_file   = get_tmpfile "temporary"
     if processed then
         processed = lpegmatch (p_strip_comments, setups..processed.."\n\\stoptext\n")
         save_file(tmp_file, processed)
@@ -1556,9 +1574,7 @@ function thirddata.rst.do_rst_inclusion (iname, fname)
     local raw_data   = load_file(fname)
     local processed  = lpegmatch (rst_parser, raw_data)
     local setups     = get_setups(true)
-
-    local incnr    = #rst_incsetups  + 1
-    local tmp_file = tex.jobname .. stringformat("–rst_inclusion-%d.tex.tmp", incnr)
+    local tmp_file   = get_tmpfile "setup"
 
     if processed then
         processed = lpegmatch (p_strip_comments, processed)
@@ -1569,9 +1585,9 @@ function thirddata.rst.do_rst_inclusion (iname, fname)
 end
 
 function thirddata.rst.do_rst_setups ()
-    local out = table.concat(rst_incsetups)
+    local out = tableconcat(rst_incsetups)
     --context(out) --- why doesn’t this work?
-    local tmp_file = tex.jobname .. "–rst_setups.tex.tmp"
+    local tmp_file = get_tmpfile "setup"
     save_file(tmp_file, out)
     context.input(tmp_file)
 end
@@ -1587,15 +1603,14 @@ end
 function thirddata.rst.do_rst_snippet(txt)
     local processed  = lpegmatch (rst_parser, txt)
     local setups     = get_setups(true)
-    local tmp_file   = tex.jobname .. "–rst_temporary.tex.tmp"
-
+    local tmp_file   = get_tmpfile "snippet"
     if processed then
-        warn("·cs·",txt)
+        warn("·cs·", txt)
         processed = lpegmatch (p_strip_comments, setups..processed)
-        save_file(tmp_file,processed)
-        context.input("./"..tmp_file)
+        save_file(tmp_file, processed)
+        context.input("./" .. tmp_file)
     else
-        warn("·cs·",txt)
+        warn("·cs·", txt)
         context.par()
         context("{\\bf context-rst could not process snippet.\\par}")
         context.type(txt)
-- 
cgit v1.2.3