diff options
Diffstat (limited to 'tex/context/base/trac-lmx.lua')
-rw-r--r-- | tex/context/base/trac-lmx.lua | 122 |
1 files changed, 80 insertions, 42 deletions
diff --git a/tex/context/base/trac-lmx.lua b/tex/context/base/trac-lmx.lua index 4db9fde42..82b241688 100644 --- a/tex/context/base/trac-lmx.lua +++ b/tex/context/base/trac-lmx.lua @@ -114,6 +114,10 @@ function html.th(str) end end +function html.a(text,url) + result[#result+1] = format("<a href=%q>%s</a>",url,text) +end + setmetatableindex(html,function(t,k) local f = format("<%s>%%s</%s>",k,k) local v = function(str) result[#result+1] = format(f,str or "") end @@ -171,9 +175,9 @@ local function do_type(str) end end -local function do_fprint(...) +local function do_fprint(str,...) if str and str ~= "" then - result[#result+1] = format(...) + result[#result+1] = format(str,...) end end @@ -227,7 +231,9 @@ function lmx.initialize(d,v) setmetatableindex(d,lmxvariables) if variables ~= d then setmetatableindex(variables,d) - report_lmx("variables => given defaults => lmx variables") + if trace_variables then + report_lmx("variables => given defaults => lmx variables") + end elseif trace_variables then report_lmx("variables == given defaults => lmx variables") end @@ -257,7 +263,9 @@ function lmx.initialize(d,v) setmetatableindex(v,lmxvariables) if variables ~= v then setmetatableindex(variables,v) - report_lmx("variables => given variables => lmx variables") + if trace_variables then + report_lmx("variables => given variables => lmx variables") + end elseif trace_variables then report_lmx("variables == given variables => lmx variables") end @@ -279,7 +287,7 @@ function lmx.reset() -- obsolete end --- Creation: +-- Creation: (todo: strip <!-- -->) local template = [[ return function(defaults,variables) @@ -328,58 +336,63 @@ local function getdefinition(definitions,tag) return definitions[tag] or "" end -local whitespace = lpeg.patterns.whitespace^0 +local whitespace = lpeg.patterns.whitespace^0 + +local begincomment = P("<!--") +local endcomment = P("-->") -local beginembedxml = P("<?") -local endembedxml = P("?>") +local beginembedxml = P("<?") +local endembedxml = P("?>") -local beginembedcss = P("/*") -local endembedcss = P("*/") +local beginembedcss = P("/*") +local endembedcss = P("*/") -local gobbledend = (whitespace * endembedxml) / "" -local argument = (1-gobbledend)^0 +local gobbledend = (whitespace * endembedxml) / "" +local argument = (1-gobbledend)^0 -local beginluaxml = (beginembedxml * P("lua")) / "" -local endluaxml = endembedxml / "" +local comment = (begincomment * (1-endcomment)^0 * endcomment) / "" -local luacodexml = beginluaxml - * (1-endluaxml)^1 - * endluaxml +local beginluaxml = (beginembedxml * P("lua")) / "" +local endluaxml = endembedxml / "" -local beginluacss = (beginembedcss * P("lua")) / "" -local endluacss = endembedcss / "" +local luacodexml = beginluaxml + * (1-endluaxml)^1 + * endluaxml -local luacodecss = beginluacss - * (1-endluacss)^1 - * endluacss +local beginluacss = (beginembedcss * P("lua")) / "" +local endluacss = endembedcss / "" -local othercode = Cc(" p[==[") - * (1-beginluaxml-beginluacss)^1 - * Cc("]==] ") +local luacodecss = beginluacss + * (1-endluacss)^1 + * endluacss -local include = ((beginembedxml * P("lmx-include") * whitespace) / "") - * (argument / lmx.include) - * gobbledend +local othercode = Cc(" p[==[") + * (1-beginluaxml-beginluacss)^1 + * Cc("]==] ") -local define_b = ((beginembedxml * P("lmx-define-begin") * whitespace) / "") - * argument - * gobbledend +local include = ((beginembedxml * P("lmx-include") * whitespace) / "") + * (argument / lmx.include) + * gobbledend -local define_e = ((beginembedxml * P("lmx-define-end") * whitespace) / "") - * argument - * gobbledend +local define_b = ((beginembedxml * P("lmx-define-begin") * whitespace) / "") + * argument + * gobbledend -local define_c = C((1-define_e)^0) +local define_e = ((beginembedxml * P("lmx-define-end") * whitespace) / "") + * argument + * gobbledend -local define = (Carg(1) * C(define_b) * define_c * define_e) / savedefinition +local define_c = C((1-define_e)^0) -local resolve = ((beginembedxml * P("lmx-resolve") * whitespace) / "") - * ((Carg(1) * C(argument)) / getdefinition) - * gobbledend +local define = (Carg(1) * C(define_b) * define_c * define_e) / savedefinition -local pattern_1 = Cs((include + P(1))^0) -local pattern_2 = Cs((define + resolve + P(1))^0) -local pattern_3 = Cs((luacodexml + luacodecss + othercode)^0) +local resolve = ((beginembedxml * P("lmx-resolve") * whitespace) / "") + * ((Carg(1) * C(argument)) / getdefinition) + * gobbledend + +local pattern_1 = Cs((comment + include + P(1))^0) -- get rid of comments asap +local pattern_2 = Cs((define + resolve + P(1))^0) +local pattern_3 = Cs((luacodexml + luacodecss + othercode)^0) local cache = { } @@ -483,6 +496,31 @@ end lmx.convert = lmxconvert +-- helpers + +function lmx.color(r,g,b,a) + if r > 1 then + r = 1 + end + if g > 1 then + g = 1 + end + if b > 1 then + b = 1 + end + if not a then + a= 0 + elseif a > 1 then + a = 1 + end + if a > 0 then + return string.format("rgba(%s%%,%s%%,%s%%,%s)",r*100,g*100,b*100,a) + else + return string.format("rgb(%s%%,%s%%,%s%%)",r*100,g*100,b*100) + end +end + + -- these can be overloaded lmx.lmxfile = string.itself |