aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--util/stanza.lua66
1 files changed, 37 insertions, 29 deletions
diff --git a/util/stanza.lua b/util/stanza.lua
index 3e76bd89..86ec458b 100644
--- a/util/stanza.lua
+++ b/util/stanza.lua
@@ -11,7 +11,6 @@ local error = error;
local t_insert = table.insert;
local t_remove = table.remove;
local t_concat = table.concat;
-local s_format = string.format;
local s_match = string.match;
local tostring = tostring;
local setmetatable = setmetatable;
@@ -491,38 +490,47 @@ end
if do_pretty_printing then
local getstyle, getstring = termcolours.getstyle, termcolours.getstring;
- local style_attrk = getstyle("yellow");
- local style_attrv = getstyle("red");
- local style_tagname = getstyle("red");
- local style_punc = getstyle("magenta");
-
- local attr_format = " "..getstring(style_attrk, "%s")..getstring(style_punc, "=")..getstring(style_attrv, "'%s'");
- local top_tag_format = getstring(style_punc, "<")..getstring(style_tagname, "%s").."%s"..getstring(style_punc, ">");
- --local tag_format = getstring(style_punc, "<")..getstring(style_tagname, "%s").."%s"..getstring(style_punc, ">").."%s"..getstring(style_punc, "</")..getstring(style_tagname, "%s")..getstring(style_punc, ">");
- local tag_format = top_tag_format.."%s"..getstring(style_punc, "</")..getstring(style_tagname, "%s")..getstring(style_punc, ">");
- function stanza_mt.pretty_print(t)
- local children_text = "";
- for _, child in ipairs(t) do
- if type(child) == "string" then
- children_text = children_text .. xml_escape(child);
- else
- children_text = children_text .. child:pretty_print();
- end
- end
- local attr_string = "";
- if t.attr then
- for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(attr_format, k, tostring(v)); end end
- end
- return s_format(tag_format, t.name, attr_string, children_text, t.name);
+ local blue1 = getstyle("1b3967");
+ local blue2 = getstyle("13b5ea");
+ local green1 = getstyle("439639");
+ local green2 = getstyle("a0ce67");
+ local orange1 = getstyle("d9541e");
+ local orange2 = getstyle("e96d1f");
+
+ local attr_replace = (
+ getstring(green2, "%1") .. -- attr name
+ getstring(green1, "%2") .. -- equal
+ getstring(orange1, "%3") .. -- quote
+ getstring(orange2, "%4") .. -- attr value
+ getstring(orange1, "%5") -- quote
+ );
+
+ local text_replace = (
+ getstring(green1, "%1") .. -- &
+ getstring(green2, "%2") .. -- amp
+ getstring(green1, "%3") -- ;
+ );
+
+ local function pretty(s)
+ -- Tag soup color
+ -- Outer gsub call takes each <tag>, applies colour to the brackets, the
+ -- tag name, then applies one inner gsub call to colour the attributes and
+ -- another for any text content.
+ return (s:gsub("(</?)([^ >]*)(.-)([?/]?>)([^<]*)", function(opening_bracket, tag_name, attrs, closing_bracket, content)
+ return getstring(blue1, opening_bracket)..getstring(blue2, tag_name)..
+ attrs:gsub("([^=]+)(=)([\"'])(.-)([\"'])", attr_replace) ..
+ getstring(blue1, closing_bracket) ..
+ content:gsub("(&#?)(%w+)(;)", text_replace);
+ end, 100));
+ end
+
+ function stanza_mt.pretty_print(t)
+ return pretty(tostring(t));
end
function stanza_mt.pretty_top_tag(t)
- local attr_string = "";
- if t.attr then
- for k, v in pairs(t.attr) do if type(k) == "string" then attr_string = attr_string .. s_format(attr_format, k, tostring(v)); end end
- end
- return s_format(top_tag_format, t.name, attr_string);
+ return pretty(t:top_tag());
end
else
-- Sorry, fresh out of colours for you guys ;)