From b1ac8fdb8714fe4ae08ebea8fdc37be3c6c2a531 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 8 Apr 2019 13:06:19 +0100 Subject: [PATCH] [Minor] Add preliminary ical support library --- lualib/lua_ical.lua | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 lualib/lua_ical.lua diff --git a/lualib/lua_ical.lua b/lualib/lua_ical.lua new file mode 100644 index 000000000..4f6b61919 --- /dev/null +++ b/lualib/lua_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 -- 2.39.5