Mercurial Hosting > freedit
comparison src/lib/Bbcode.luan @ 13:24668255cede
preprocess urls
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 03 Jul 2022 23:59:41 -0600 |
parents | ad1604c72156 |
children | 0edde02b908c |
comparison
equal
deleted
inserted
replaced
12:ad1604c72156 | 13:24668255cede |
---|---|
1 local Luan = require "luan:Luan.luan" | 1 local Luan = require "luan:Luan.luan" |
2 local error = Luan.error | 2 local error = Luan.error |
3 local type = Luan.type or error() | 3 local type = Luan.type or error() |
4 local ipairs = Luan.ipairs or error() | 4 local ipairs = Luan.ipairs or error() |
5 local stringify = Luan.stringify or error() | 5 local stringify = Luan.stringify or error() |
6 local Io = require "luan:Io.luan" | |
7 local output_of = Io.output_of or error() | |
6 local Parsers = require "luan:Parsers.luan" | 8 local Parsers = require "luan:Parsers.luan" |
7 local bbcode_parse = Parsers.bbcode_parse or error() | 9 local bbcode_parse = Parsers.bbcode_parse or error() |
8 local Html = require "luan:Html.luan" | 10 local Html = require "luan:Html.luan" |
9 local html_encode = Html.encode or error() | 11 local html_encode = Html.encode or error() |
10 local Table = require "luan:Table.luan" | 12 local Table = require "luan:Table.luan" |
11 local is_list = Table.is_list or error() | 13 local is_list = Table.is_list or error() |
14 local String = require "luan:String.luan" | |
15 local gsub = String.gsub or error() | |
12 local User = require "site:/lib/User.luan" | 16 local User = require "site:/lib/User.luan" |
17 local Shared = require "site:/lib/Shared.luan" | |
18 local list_to_set = Shared.list_to_set or error() | |
13 local Logging = require "luan:logging/Logging.luan" | 19 local Logging = require "luan:logging/Logging.luan" |
14 local logger = Logging.logger "Bbcode" | 20 local logger = Logging.logger "Bbcode" |
15 | 21 |
16 | 22 |
17 local Bbcode = {} | 23 local Bbcode = {} |
109 function Bbcode.to_html(bbcode) | 115 function Bbcode.to_html(bbcode) |
110 bbcode = bbcode_parse(bbcode) | 116 bbcode = bbcode_parse(bbcode) |
111 %><div post><% to_html(bbcode) %></div><% | 117 %><div post><% to_html(bbcode) %></div><% |
112 end | 118 end |
113 | 119 |
120 | |
121 local doesnt_nest = list_to_set{ | |
122 "url" | |
123 "code" | |
124 "img" | |
125 "video" | |
126 } | |
127 | |
128 local function preprocess(bbcode) | |
129 if type(bbcode) == "string" then | |
130 bbcode = gsub( bbcode, [[(^|\s)(https?://\S+)]], "$1[url]$2[/url]" ) | |
131 %><%= bbcode %><% | |
132 else | |
133 type(bbcode) == "table" or error() | |
134 if is_list(bbcode) then | |
135 for _, v in ipairs(bbcode) do | |
136 preprocess(v) | |
137 end | |
138 else | |
139 local name = bbcode.name | |
140 local param = bbcode.param | |
141 %>[<%=name%><% | |
142 if param ~= nil then | |
143 %>=<%=param%><% | |
144 end | |
145 %>]<% | |
146 if doesnt_nest[name] then | |
147 %><%=bbcode.contents%><% | |
148 else | |
149 preprocess(bbcode.contents) | |
150 end | |
151 %>[/<%=name%>]<% | |
152 end | |
153 end | |
154 end | |
155 | |
156 function Bbcode.preprocess(bbcode) | |
157 bbcode = bbcode_parse(bbcode) | |
158 return output_of(function() | |
159 preprocess(bbcode) | |
160 end) | |
161 end | |
162 | |
114 return Bbcode | 163 return Bbcode |