From: Vsevolod Stakhov Date: Sat, 23 Nov 2019 14:20:21 +0000 (+0000) Subject: [Rework] Start lua_content library X-Git-Tag: 2.3~305 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=a0a27b8744fe9767105841925785f8d54781bc19;p=rspamd.git [Rework] Start lua_content library --- diff --git a/lualib/lua_content/ical.lua b/lualib/lua_content/ical.lua new file mode 100644 index 000000000..4f6b61919 --- /dev/null +++ b/lualib/lua_content/ical.lua @@ -0,0 +1,47 @@ +--[[ +Copyright (c) 2019, Vsevolod Stakhov + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +]]-- + +local l = require 'lpeg' + +local wsp = l.P" " +local crlf = l.P"\r"^-1 * l.P"\n" +local eol = (crlf * #crlf) + (crlf - (crlf^-1 * wsp)) +local name = l.C((l.P(1) - (l.P":"))^1) / function(v) return (v:gsub("[\n\r]+%s","")) end +local value = l.C((l.P(1) - eol)^0) / function(v) return (v:gsub("[\n\r]+%s","")) end +local elt = name * ":" * wsp^0 * value * eol + +local exports = {} + +local function ical_txt_values(input) + local control={n='\n', r='\r'} + local escaper = l.Ct((elt / function(_,b) return (b:gsub("\\(.)", control)) end)^1) + + local values = escaper:match(input) + + if not values then + return nil + end + + return table.concat(values, "\n") +end + +--[[[ +-- @function lua_ical.ical_txt_values(input) +-- Returns all values from ical as a plain text. Names are completely ignored. +--]] +exports.ical_txt_values = ical_txt_values + +return exports \ No newline at end of file diff --git a/lualib/lua_content/init.lua b/lualib/lua_content/init.lua new file mode 100644 index 000000000..a96852139 --- /dev/null +++ b/lualib/lua_content/init.lua @@ -0,0 +1,20 @@ +--[[ +Copyright (c) 2019, Vsevolod Stakhov + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +]]-- + +--[[[ +-- @module lua_content +-- This module contains content processing logic +--]] \ No newline at end of file diff --git a/lualib/lua_ical.lua b/lualib/lua_ical.lua deleted file mode 100644 index 4f6b61919..000000000 --- a/lualib/lua_ical.lua +++ /dev/null @@ -1,47 +0,0 @@ ---[[ -Copyright (c) 2019, Vsevolod Stakhov - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -]]-- - -local l = require 'lpeg' - -local wsp = l.P" " -local crlf = l.P"\r"^-1 * l.P"\n" -local eol = (crlf * #crlf) + (crlf - (crlf^-1 * wsp)) -local name = l.C((l.P(1) - (l.P":"))^1) / function(v) return (v:gsub("[\n\r]+%s","")) end -local value = l.C((l.P(1) - eol)^0) / function(v) return (v:gsub("[\n\r]+%s","")) end -local elt = name * ":" * wsp^0 * value * eol - -local exports = {} - -local function ical_txt_values(input) - local control={n='\n', r='\r'} - local escaper = l.Ct((elt / function(_,b) return (b:gsub("\\(.)", control)) end)^1) - - local values = escaper:match(input) - - if not values then - return nil - end - - return table.concat(values, "\n") -end - ---[[[ --- @function lua_ical.ical_txt_values(input) --- Returns all values from ical as a plain text. Names are completely ignored. ---]] -exports.ical_txt_values = ical_txt_values - -return exports \ No newline at end of file