Module:Cat: Difference between revisions

From Xenharmonic Reference
mNo edit summary
mNo edit summary
Line 2: Line 2:


local p = {}
local p = {}
local function tokenize(unparsed)
    local strings = {}
    local inside = false
    local string = ""
    for i = 1, #unparsed do
        if unparsed[i] == "\"" then
            if inside then
                table.insert(strings, string)
                string = ""
            end
            inside = not inside
        elseif inside then
            string = string .. unparsed[i]
        end
    end
    return strings
end


-- Turns arguments into a string "[[Category:Cat1]][[Category:Cat2]]..."
-- Turns arguments into a string "[[Category:Cat1]][[Category:Cat2]]..."
Line 9: Line 27:
     local unparsed = args[1]
     local unparsed = args[1]
     local cats = ""
     local cats = ""
     for quoted_cat in string.gmatch(unparsed, "\".+\"") do
     for quoted_cat in tokenize(unparsed) do
         -- Trim quotes first
         -- Trim quotes first
         cat = string.sub(quoted_cat, 2, -2)
         cat = string.sub(quoted_cat, 2, -2)

Revision as of 16:04, 23 December 2025

Documentation for this module may be created at Module:Cat/doc

local getArgs = require('Module:Arguments').getArgs

local p = {}

local function tokenize(unparsed)
    local strings = {}
    local inside = false
    local string = ""
    for i = 1, #unparsed do
        if unparsed[i] == "\"" then
            if inside then
                table.insert(strings, string)
                string = ""
            end
            inside = not inside
        elseif inside then
            string = string .. unparsed[i]
        end
    end
    return strings
end

-- Turns arguments into a string "[[Category:Cat1]][[Category:Cat2]]..."
-- Expects double quotes around each category name
function p.toCategories(frame)
    local args = getArgs(frame)
    local unparsed = args[1]
    local cats = ""
    for quoted_cat in tokenize(unparsed) do
        -- Trim quotes first
        cat = string.sub(quoted_cat, 2, -2)
        cats = cats .. "[[Category:" .. cat .. "]]"
    end
    return frame:preprocess(cats)
end

return p