summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/xmllib.lua46
1 files changed, 31 insertions, 15 deletions
diff --git a/lib/xmllib.lua b/lib/xmllib.lua
index 4bdf977..adebc15 100644
--- a/lib/xmllib.lua
+++ b/lib/xmllib.lua
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: xmllib.lua,v 1.8 2007-05-30 17:59:50 pixel Exp $ */
+/* $Id: xmllib.lua,v 1.9 2007-06-12 07:41:19 pixel Exp $ */
]]--
@@ -33,16 +33,6 @@ local attribute_replacements = {
{ '"', '\\"' },
}
-local function generic_escape(str, replacements)
- local _, r
-
- for _, r in pairs(replacements) do
- str = string.gsub(str, r[1], r[2])
- end
-
- return str
-end
-
local function xml_escape(str)
return generic_escape(str, xml_replacements)
end
@@ -68,6 +58,16 @@ local function process_lf(xm)
}
end
+local function process_raw(xm, a)
+ return {
+ istop = true,
+ nodes = {
+ a
+ },
+ type = "raw",
+ }
+end
+
local function burrow(xm, t)
local k, v
@@ -160,6 +160,23 @@ local function space_indent(depth)
return string.rep(" ", 4 * depth)
end
+local function render_comment(depth, v)
+ return space_indent(depth) .. "<!-- " .. v.nodes[1] .. " -->\n"
+end
+
+local function render_lf(depth, v)
+ return "\n"
+end
+
+local function render_raw(depth, v)
+end
+
+local special_renders = {
+ comment = render_comment,
+ lf = render_lf,
+ raw = render_raw,
+}
+
local function do_render_r(v, depth)
local middle, i, n = ""
@@ -169,10 +186,8 @@ local function do_render_r(v, depth)
r = r .. v:read() .. "\n"
end
return r
- elseif v.type == "comment" then
- return space_indent(depth) .. "<!-- " .. v.nodes[1] .. " -->\n"
- elseif v.type == "lf" then
- return "\n"
+ elseif type(v.type) == "string" and type(special_renders[v.type]) == "function" then
+ return special_renders[v.type](depth, v)
elseif type(v.key) == "string" then
if type(v.nodes) == "table" then
for i, n in ipairs(v.nodes) do
@@ -214,6 +229,7 @@ function NewXmlMarkup()
local r = {
comment = process_comment,
lf = process_lf,
+ raw = process_raw,
tops = {},
render = do_render,
doctype = '<?xml version="1.0" encoding="UTF-8"?>',