💾 Archived View for gemini.conman.org › extensions › GLV-1 › handlers › size.lua captured on 2023-07-10 at 17:38:00.

View Raw

More Information

⬅️ Previous capture (2022-06-04)

-=-=-=-=-=-=-

-- ************************************************************************
--
--    Generate X bytes of content.
--    Copyright 2019 by Sean Conner.  All Rights Reserved.
--
--    This program is free software: you can redistribute it and/or modify
--    it under the terms of the GNU General Public License as published by
--    the Free Software Foundation, either version 3 of the License, or
--    (at your option) any later version.
--
--    This program is distributed in the hope that it will be useful,
--    but WITHOUT ANY WARRANTY; without even the implied warranty of
--    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--    GNU General Public License for more details.
--
--    You should have received a copy of the GNU General Public License
--    along with this program.  If not, see <http://www.gnu.org/licenses/>.
--
--    Comments, questions and criticisms can be sent to: sean@conman.org
--
-- ************************************************************************
-- luacheck: globals handler
-- luacheck: ignore 611 631
-- RFC-3875

local lpeg     = require "lpeg"
local math     = require "math"
local tonumber = tonumber

_ENV = {}

local parse = lpeg.P";" * (lpeg.R"09"^1 / tonumber) * lpeg.P(-1)
            + lpeg.P(-1) * lpeg.Cc(1024)
            
local text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sodales eget nisi quis condimentum. Donec ipsum arcu, fermentum eu ullamcorper sit amet, facilisis id nunc. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam tempus nulla ut dolor luctus malesuada. Suspendisse orci sem, semper at maximus non, pharetra et justo. Quisque lectus arcu, viverra ac convallis eu, vulputate ut enim. Nulla aliquam, lacus consequat suscipit facilisis, nisl tortor facilisis nisi, vel mattis eros arcu sed tellus. Duis quis lectus pellentesque, posuere dolor ut, sodales massa. Proin vel blandit mauris.\n\n"

function handler(_,_,_,pathinfo,ios)
  local size = parse:match(pathinfo)
  if not size then
    ios:write("59\r\n")
    return 59
  end
  
  ios:write("20 text/gemini\r\n")
  
  while size > 0 do
    local len = math.min(size,#text)
    ios:write(text:sub(1,len))
    size = size - len
  end
  
  ios:write("\r\n")
  return 20
end

return _ENV