awesome/tests/examples/_postprocess.lua

82 lines
2.1 KiB
Lua
Executable File

#!/usr/bin/env lua
-- This script takes `.svg` file generated by Cairo or Inkscape and
-- replace hardcoded colors so they can be set using CSS or the
-- web browser itself. This makes the accessibility mode work and
-- allows themes to be created for the documentation.
local input, output = ...
if (not input) or (not output) then
io.stderr:write("_postprocess.lua require <input> and <output>\n")
io.stderr:write("Got input: "..tostring(input).."\n")
io.stderr:write("Got output: "..tostring(output).."\n")
os.exit(0)
end
-- The second 24bit is just the 32 bit converted to #010001 and back.
local FOREGROUNDS = {
"rgb[(]0[.]5%%,0%%,0[.]5%%[)];",
"rgb[(]0[.]392157%%,0%%,0[.]392157%%[)];",
"#010001",
}
local CLASSES = {
stroke = "svg_stroke",
fill = "svg_fill"
}
local i, o = io.open(input, "r"), io.open(output, "w")
if (not i) or (not o) then return end
local line = i:read("*line")
local count
while line do
-- Deduplicate and concatenate the classes.
local classes = {}
local token_found = {}
local class_str = {}
for _, token in ipairs { "fill", "stroke" } do
for _, color in ipairs(FOREGROUNDS) do
line, count = line:gsub(token .. ":" .. color, token .. ":currentcolor;")
-- Add the CSS class.
if count > 0 then
classes[CLASSES[token]] = true
end
line, count = line:gsub(token .. ":" .. color, token .. ":currentcolor;")
-- Add the CSS class.
if count > 0 and not token_found[token] then
token_found[token] = true
table.insert(classes, CLASSES[token])
end
end
end
for class in pairs(classes) do
table.insert(class_str, class)
end
if #class_str > 0 then
line = line:gsub(' style="', ' class="' .. table.concat(class_str, ",") .. '" style="')
end
o:write(line .. "\n")
-- Add the stylesheet.
if line:sub(1, 6) == "<?xml " then
o:write('<?xml-stylesheet href="../ldoc.css" type="text/css"?>\n')
end
-- Next line.
line = i:read("*line")
end
o:close()