summaryrefslogtreecommitdiff
path: root/tex/context/base/back-exp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/back-exp.lua')
-rw-r--r--tex/context/base/back-exp.lua96
1 files changed, 71 insertions, 25 deletions
diff --git a/tex/context/base/back-exp.lua b/tex/context/base/back-exp.lua
index 8450b36f1..0d5b7cede 100644
--- a/tex/context/base/back-exp.lua
+++ b/tex/context/base/back-exp.lua
@@ -18,6 +18,8 @@ if not modules then modules = { } end modules ['back-exp'] = {
-- todo: less attributes e.g. internal only first node
-- todo: build xml tree in mem (handy for cleaning)
+-- delimited: left/right string (needs marking)
+
local nodecodes = nodes.nodecodes
local traverse_nodes = node.traverse
local hlist_code = nodecodes.hlist
@@ -59,6 +61,8 @@ local nodes = nodes
local attributes = attributes
local variables = interfaces.variables
+local settings_to_array = utilities.parsers.settings_to_array
+
local setmetatableindex = table.setmetatableindex
local tasks = nodes.tasks
local fontchar = fonts.hashes.characters
@@ -136,22 +140,59 @@ local extras = { }
local nofbreaks = 0
local used = { }
local exporting = false
-
-setmetatableindex(used, function(t,k) if k then local v = { } t[k] = v return v end end)
-
local last = nil
local lastpar = nil
-local joiner_1 = " "
-local joiner_2 = " " -- todo: test if this one can always be ""
-local joiner_3 = " "
-local joiner_4 = " "
-local joiner_5 = " "
-local joiner_6 = " "
-local joiner_7 = "\n"
-local joiner_8 = " "
-local joiner_9 = " "
-local joiner_0 = " "
+setmetatableindex(used, function(t,k)
+ if k then
+ local v = { }
+ t[k] = v
+ return v
+ end
+end)
+
+local joiner_1 = " "
+local joiner_2 = " " -- todo: test if this one can always be ""
+local joiner_3 = " "
+local joiner_4 = " "
+local joiner_5 = " "
+local joiner_6 = " "
+local joiner_7 = "\n"
+local joiner_8 = " "
+local joiner_9 = " "
+local joiner_0 = " "
+
+local namespaced = {
+ -- filled on
+}
+
+local namespaces = {
+ msubsup = "m",
+ msub = "m",
+ msup = "m",
+ mn = "m",
+ mi = "m",
+ ms = "m",
+ mo = "m",
+ mtext = "m",
+ mrow = "m",
+ mfrac = "m",
+ mroot = "m",
+ msqrt = "m",
+ munderover = "m",
+ munder = "m",
+ mover = "m",
+ merror = "m",
+ math = "m",
+ mrow = "m",
+}
+
+setmetatableindex(namespaced, function(t,k)
+ local namespace = namespaces[k]
+ local v = namespace and namespace .. ":" .. k or k
+ t[k] = v
+ return v
+end)
-- local P, C, Cc = lpeg.P, lpeg.C, lpeg.Cc
--
@@ -218,6 +259,7 @@ function extras.document(handle,element,detail,n,fulltag,hash)
handle:write(format(" date=%q",os.date()))
handle:write(format(" context=%q",environment.version))
handle:write(format(" version=%q",version))
+ handle:write(format(" xmlns:m=%q","http://www.w3.org/1998/Math/MathML"))
local identity = interactions.general.getidentity()
for i=1,#fields do
local key = fields[i]
@@ -588,7 +630,7 @@ function extras.tabulatecell(handle,element,detail,n,fulltag,di)
end
local function emptytag(handle,element,nature,depth)
- handle:write("\n",spaces[depth],"<",element,"/>\n")
+ handle:write("\n",spaces[depth],"<",namespaced[element],"/>\n")
end
local function begintag(handle,element,nature,depth,di,empty)
@@ -614,7 +656,7 @@ local function begintag(handle,element,nature,depth,di,empty)
linedone = false
end
end
- handle:write("<",element)
+ handle:write("<",namespaced[element])
if detail then
handle:write(" detail='",detail,"'")
end
@@ -651,14 +693,14 @@ local function endtag(handle,element,nature,depth,empty)
if not linedone then
handle:write("\n")
end
- handle:write(spaces[depth],"</",element,">\n")
+ handle:write(spaces[depth],"</",namespaced[element],">\n")
end
linedone = true
else
if empty then
handle:write("/>")
else
- handle:write("</",element,">")
+ handle:write("</",namespaced[element],">")
end
end
else
@@ -666,7 +708,7 @@ local function endtag(handle,element,nature,depth,empty)
if empty then
handle:write("/>")
else
- handle:write("</",element,">")
+ handle:write("</",namespaced[element],">")
end
linedone = false
end
@@ -1025,13 +1067,17 @@ local function stopexport(v)
report_export("saving xml data in '%s",xmlfile)
handle:write(format(xmlpreamble,tex.jobname,os.date(),environment.version,version))
if cssfile then
- if type(v) ~= "string" or cssfile == variables.yes or cssfile == "" or cssfile == xmlfile then
- cssfile = file.replacesuffix(xmlfile,"css")
- else
- cssfile = file.addsuffix(cssfile,"css")
+ local cssfiles = settings_to_array(cssfile)
+ for i=1,#cssfiles do
+ local cssfile = cssfiles[i]
+ if type(cssfile) ~= "string" or cssfile == variables.yes or cssfile == "" or cssfile == xmlfile then
+ cssfile = file.replacesuffix(xmlfile,"css")
+ else
+ cssfile = file.addsuffix(cssfile,"css")
+ end
+ report_export("adding css reference '%s",cssfile)
+ handle:write(format(csspreamble,cssfile))
end
- report_export("adding css reference '%s",cssfile)
- handle:write(format(csspreamble,cssfile))
end
flushtree(handle,tree.data)
handle:close()
@@ -1104,7 +1150,7 @@ local function startexport(v)
end
end
-directives.register("backend.export",startexport)
+directives.register("backend.export",startexport) -- maybe .name
local function injectbreak()
flushresult(entry)