Mercurial Hosting > freedit
diff src/lib/Bbcode.luan @ 20:3ea49246d6a7
bbcode work
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 13 Jul 2022 22:00:00 -0600 |
parents | 0edde02b908c |
children | 33731231093a |
line wrap: on
line diff
--- a/src/lib/Bbcode.luan Wed Jul 13 08:47:13 2022 -0600 +++ b/src/lib/Bbcode.luan Wed Jul 13 22:00:00 2022 -0600 @@ -16,6 +16,7 @@ local User = require "site:/lib/User.luan" local Shared = require "site:/lib/Shared.luan" local list_to_set = Shared.list_to_set or error() +local to_list = Shared.to_list or error() local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "Bbcode" @@ -25,46 +26,60 @@ local to_html local html = {} -function html.b(bbcode) - %><b><% to_html(bbcode.contents) %></b><% +function html.b(bbcode,options) + %><b><% to_html(bbcode.contents,options) %></b><% +end + +function html.i(bbcode,options) + %><i><% to_html(bbcode.contents,options) %></i><% +end + +function html.u(bbcode,options) + %><u><% to_html(bbcode.contents,options) %></u><% end -function html.i(bbcode) - %><i><% to_html(bbcode.contents) %></i><% +function html.s(bbcode,options) + %><s><% to_html(bbcode.contents,options) %></s><% end -function html.u(bbcode) - %><u><% to_html(bbcode.contents) %></u><% +function html.sup(bbcode,options) + %><sup><% to_html(bbcode.contents,options) %></sup><% end -function html.url(bbcode) +function html.brackets(bbcode,options) + %>[<% to_html(bbcode.contents,options) %>]<% +end + +function html.url(bbcode,options) local url = bbcode.param if url == nil then url = html_encode(bbcode.contents) %><a href="<%=url%>"><%=url%></a><% else url = html_encode(url) - %><a href="<%=url%>"><% to_html(bbcode.contents) %></a><% + %><a href="<%=url%>"><% to_html(bbcode.contents,options) %></a><% end end -function html.code(bbcode) - %><code><%= html_encode(bbcode.contents) %></code><% +function html.code(bbcode,options) + local s = gsub(bbcode.contents,[[^\n]],"") + %><code><%= html_encode(s) %></code><% + options.strip_newline = true end -function html.img(bbcode) +function html.img(bbcode,options) %><img src="<%= html_encode(bbcode.contents) %>"><% end -function html.color(bbcode) - %><span style="color:<%=bbcode.param%>"><% to_html(bbcode.contents) %></span><% +function html.color(bbcode,options) + %><span style="color:<%=bbcode.param%>"><% to_html(bbcode.contents,options) %></span><% end -function html.size(bbcode) - %><span style="font-size:<%=bbcode.param%>%"><% to_html(bbcode.contents) %></span><% +function html.size(bbcode,options) + %><span style="font-size:<%=bbcode.param%>%"><% to_html(bbcode.contents,options) %></span><% end -function html.quote(bbcode) +function html.quote(bbcode,options) %><blockquote><% local user_name = bbcode.param if user_name ~= nil then @@ -74,12 +89,15 @@ else %><a href="/user_something"><%= user_name %></a> wrote:<% end + else + options.strip_newline = true end - to_html(bbcode.contents) + to_html(bbcode.contents,options) %></blockquote><% + options.strip_newline = true end -function html.video(bbcode) +function html.video(bbcode,options) local url = html_encode(bbcode.contents) local site = bbcode.site if site == "youtube" then @@ -96,25 +114,55 @@ end end -function to_html(bbcode) +local function list_to_html(bbcode,options) + local list = to_list(bbcode.contents) + for _, item in ipairs(list) do + if type(item) == "table" and item.name == "li" then + %><li><% to_html(item.contents,options) %></li><% + end + end + options.strip_newline = true +end + +function html.ul(bbcode,options) + %><ul><% + list_to_html(bbcode,options) + %></ul><% +end + +function html.ol(bbcode,options) + %><ol><% + list_to_html(bbcode,options) + %></ol><% +end + +function to_html(bbcode,options) + if options.strip_newline then + if type(bbcode) == "string" then + bbcode = gsub(bbcode,[[^\n]],"") + end + options.strip_newline = false + end if type(bbcode) == "string" then %><%= html_encode(bbcode) %><% else type(bbcode) == "table" or error() if is_list(bbcode) then for _, v in ipairs(bbcode) do - to_html(v) + to_html(v,options) end else local fn = html[bbcode.name] or error(bbcode.name.." not handled") - fn(bbcode) + fn(bbcode,options) end end end function Bbcode.to_html(bbcode) bbcode = bbcode_parse(bbcode) - %><div message><% to_html(bbcode) %></div><% + %><div message><% + to_html(bbcode,{strip_newline=false}) + %></div><% end @@ -148,7 +196,11 @@ else preprocess(bbcode.contents) end - %>[/<%=name%>]<% + if name == "code" and param ~= nil then + %>[/<%=name%>=<%=param%>]<% + else + %>[/<%=name%>]<% + end end end end