Path: blob/main/src/resources/extensions/quarto/lipsum/lipsum.lua
12923 views
12local lipsum34math.randomseed(os.time())567-- reads a file8local function read_file(path)9local file = io.open(path, "rb")10if not file then return nil end11local content = file:read "*a"12file:close()13return content14end1516-- read lipsum data17function readLipsum()18if lipsum == nil then19local file = quarto.utils.resolve_path("lipsum.json")20local fileContents = read_file(file)21if fileContents ~= nil then22local json = quarto.json.decode(fileContents)23lipsum = json24else25quarto.log.error("Unable to read lipsum data file.")26lipsum = {}27end28end29return lipsum30end3132local rangePattern = '(%d+)%-(%d+)'33local barePattern = '^(%d+)$'3435return {36['lipsum'] = function(args, kwargs, meta)3738local isRandom = false39if kwargs and kwargs["random"] then40local randomVal = pandoc.utils.stringify(kwargs["random"])41if randomVal == "true" then42isRandom = true43end44end4546local paraStart = 147local paraEnd = 54849if args[1] ~= nil then50-- a range is specified, like 1-5, 2-3, 5-151local range = pandoc.utils.stringify(args[1])52local _,_,startRange,endRange = range:find(rangePattern)53if startRange and endRange then5455local startNumber = tonumber(startRange)56if startNumber ~= nil then57paraStart = startNumber58end5960local endNumber = tonumber(endRange)61if endNumber ~= nil then62paraEnd = endNumber63end64else65-- a number of paragraphs is specified, like 1066local _,_,bareVal = range:find(barePattern)67if bareVal then68if isRandom then69paraStart = math.random(1, 17)70end71local endNumber = tonumber(bareVal)72if endNumber ~= nil then73paraEnd = paraStart + endNumber - 174end75end76end77end7879local paras = readLipsum();80local outputParas = {}8182local count = paraEnd - paraStart + 183if paraStart > paraEnd then84count = paraStart - paraEnd + 185end8687for i=1,count do88local paraIdx = i + (paraStart - 1)89if paraStart > paraEnd then90paraIdx = (paraStart + 1) - i91end92local outIdx = ((paraIdx-1)%(#paras-1))+193outputParas[i] = pandoc.Para(paras[outIdx])94end9596return outputParas97end98}99100101