پرش به محتوا

پودمان:Citation: تفاوت میان نسخه‌ها

از ویکی البرز
جزبدون خلاصۀ ویرایش
جزبدون خلاصۀ ویرایش
 
(۳ نسخهٔ میانیِ ایجادشده توسط همین کاربر نشان داده نشد)
خط ۱: خط ۱:
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Module:Citation
-- Module:Citation
-- Wiki Alborz Simple Citation System (Final Integrated Version)
-- Wiki Alborz Lightweight Citation System
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
local args = require("Module:Arguments")
local args = require("Module:Arguments")
local cfg = require("Module:Citation/Configuration")
local cfg = require("Module:Citation/Configuration")
local U   = require("Module:Citation/Utilities")
local U = require("Module:Citation/Utilities")
local F   = require("Module:Citation/Formatter")
local F = require("Module:Citation/Formatter")
 
local Citation = {}
local Citation = {}


خط ۱۵: خط ۱۳:
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function Citation.getArgs(frame)
function Citation.getArgs(frame)
     return args.getArgs(frame, {
     return args.getArgs(frame, { parentOnly = true })
        parentOnly = true
    })
end
end


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- resolve alias values
-- alias resolver
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function Citation.getValue(argTable, key)
function Citation.getValue(argTable, key)
     local aliases = cfg.aliases[key]
     local aliases = cfg.aliases[key]
     if not aliases then
     if not aliases then return nil end
        return nil
    end
 
     for _, name in ipairs(aliases) do
     for _, name in ipairs(aliases) do
         if argTable[name] and argTable[name] ~= "" then
         local v = argTable[name]
            return argTable[name]
        if v and v ~= "" then return v end
        end
     end
     end
     return nil
     return nil
end
end
خط ۴۳: خط ۳۴:
function Citation.normalize(args)
function Citation.normalize(args)
     local out = {}
     local out = {}
     for key, _ in pairs(cfg.aliases) do
     for key, _ in pairs(cfg.aliases) do
         out[key] = Citation.getValue(args, key)
         out[key] = Citation.getValue(args, key)
     end
     end
     return out
     return out
end
end


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- identifiers (DOI / ISBN / etc.)
-- identifiers
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function Citation.renderIdentifiers(data)
function Citation.renderIdentifiers(data)
     local parts = {}
     local parts = {}
     for key, label in pairs(cfg.identifiers) do
     for key, label in pairs(cfg.identifiers) do
         if data[key] and data[key] ~= "" then
         if data[key] and data[key] ~= "" then
خط ۶۲: خط ۵۰:
         end
         end
     end
     end
     return table.concat(parts, cfg.separator)
     return table.concat(parts, cfg.separator)
end
end


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Style Builder (citation sentence)
-- build citation text
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function Citation.buildText(data, ctype, cfg, F, U)
function Citation.buildText(data)
 
     local parts = {}
     local parts = {}


    ----------------------------------------------------------------------
     -- author
     -- author
    ----------------------------------------------------------------------
     if not U.isEmpty(data.author) then
     if not U.isEmpty(data.author) then
         table.insert(parts, data.author .. ".")
         table.insert(parts, data.author .. ".")
     end
     end


    ----------------------------------------------------------------------
     -- title
     -- title
    ----------------------------------------------------------------------
     if not U.isEmpty(data.title) then
     if not U.isEmpty(data.title) then
         table.insert(parts, "''" .. data.title .. "''.")
         table.insert(parts, "''" .. data.title .. "''.")
     end
     end


    ----------------------------------------------------------------------
     -- website
     -- website / source
    ----------------------------------------------------------------------
     if not U.isEmpty(data.website) then
     if not U.isEmpty(data.website) then
         table.insert(parts, "در: " .. data.website .. ".")
         table.insert(parts, "در: " .. data.website .. ".")
     end
     end


    ----------------------------------------------------------------------
     -- publisher
     -- publisher
    ----------------------------------------------------------------------
     if not U.isEmpty(data.publisher) then
     if not U.isEmpty(data.publisher) then
         table.insert(parts, data.publisher .. ".")
         table.insert(parts, data.publisher .. ".")
     end
     end


    ----------------------------------------------------------------------
     -- date
     -- date
    ----------------------------------------------------------------------
     if not U.isEmpty(data.date) then
     if not U.isEmpty(data.date) then
         table.insert(parts, data.date .. ".")
         table.insert(parts, data.date .. ".")
     end
     end


    ----------------------------------------------------------------------
     -- URL
     -- URL
    ----------------------------------------------------------------------
     if not U.isEmpty(data.url) then
     if not U.isEmpty(data.url) then
         table.insert(parts, F.formatUrl(data.url))
         table.insert(parts, F.formatLink(data.title, data.url))
     end
     end


    ----------------------------------------------------------------------
     -- identifiers
     -- identifiers
    ----------------------------------------------------------------------
     local ids = Citation.renderIdentifiers(data)
     local ids = Citation.renderIdentifiers(data)
     if not U.isEmpty(ids) then
     if not U.isEmpty(ids) then
خط ۱۲۴: خط ۹۶:


     ----------------------------------------------------------------------
     ----------------------------------------------------------------------
     -- archive
     -- Archive (نسخه کوتاه و زیبا)
     ----------------------------------------------------------------------
     ----------------------------------------------------------------------
     if not U.isEmpty(data.archiveurl) then
     if not U.isEmpty(data.archiveurl) then
         table.insert(parts,
         local archivedate = data.archivedate or ""
            F.formatArchive(data.archiveurl, data.archivedate)
        local archiveText = "نسخهٔ بایگانی"
         )
       
        if archivedate ~= "" then
            archiveText = archiveText .. " (" .. archivedate .. ")"
        end
       
        local archiveLink = F.formatLink(archiveText, data.archiveurl)
         table.insert(parts, archiveLink)
     end
     end


     return table.concat(parts, " ")
     return table.concat(parts, " ")
end


--------------------------------------------------------------------------------
-- polish output
--------------------------------------------------------------------------------
function Citation.polish(text)
    if not text then return "" end
    text = mw.text.trim(text)
    text = text:gsub("%s+", " ")
    text = text:gsub("%s+%.", ".")
    text = text:gsub("%.+", ".")
    text = text:gsub("%s+%.?$", "")
    return text
end
end


خط ۱۴۰: خط ۱۳۰:
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function Citation.render(frame, ctype)
function Citation.render(frame, ctype)
     local rawArgs = Citation.getArgs(frame)
     local rawArgs = Citation.getArgs(frame)
     local data   = Citation.normalize(rawArgs)
     local data = Citation.normalize(rawArgs)
 
     local result = Citation.buildText(data)
     local result = Citation.buildText(data, ctype, cfg, F, U)
     return Citation.polish(result)
 
     return U.cleanEnd(result)
end
end


خط ۱۵۲: خط ۱۳۹:
-- entry points
-- entry points
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function Citation.web(frame)
function Citation.web(frame) return Citation.render(frame, "web") end
    return Citation.render(frame, "web")
function Citation.book(frame) return Citation.render(frame, "book") end
end
function Citation.news(frame) return Citation.render(frame, "news") end
 
function Citation.journal(frame) return Citation.render(frame, "journal") end
function Citation.book(frame)
    return Citation.render(frame, "book")
end
 
function Citation.news(frame)
    return Citation.render(frame, "news")
end


function Citation.journal(frame)
    return Citation.render(frame, "journal")
end
--------------------------------------------------------------------------------
return Citation
return Citation

نسخهٔ کنونی تا ‏۲ ژوئیهٔ ۲۰۲۶، ساعت ۰۴:۱۵

توضیحات این پودمان می‌تواند در پودمان:Citation/توضیحات قرار گیرد.

--------------------------------------------------------------------------------
-- Module:Citation
-- Wiki Alborz Lightweight Citation System
--------------------------------------------------------------------------------
local args = require("Module:Arguments")
local cfg = require("Module:Citation/Configuration")
local U = require("Module:Citation/Utilities")
local F = require("Module:Citation/Formatter")
local Citation = {}

--------------------------------------------------------------------------------
-- گرفتن آرگومان‌ها
--------------------------------------------------------------------------------
function Citation.getArgs(frame)
    return args.getArgs(frame, { parentOnly = true })
end

--------------------------------------------------------------------------------
-- alias resolver
--------------------------------------------------------------------------------
function Citation.getValue(argTable, key)
    local aliases = cfg.aliases[key]
    if not aliases then return nil end
    for _, name in ipairs(aliases) do
        local v = argTable[name]
        if v and v ~= "" then return v end
    end
    return nil
end

--------------------------------------------------------------------------------
-- normalize input
--------------------------------------------------------------------------------
function Citation.normalize(args)
    local out = {}
    for key, _ in pairs(cfg.aliases) do
        out[key] = Citation.getValue(args, key)
    end
    return out
end

--------------------------------------------------------------------------------
-- identifiers
--------------------------------------------------------------------------------
function Citation.renderIdentifiers(data)
    local parts = {}
    for key, label in pairs(cfg.identifiers) do
        if data[key] and data[key] ~= "" then
            table.insert(parts, label .. " " .. data[key])
        end
    end
    return table.concat(parts, cfg.separator)
end

--------------------------------------------------------------------------------
-- build citation text
--------------------------------------------------------------------------------
function Citation.buildText(data)
    local parts = {}

    -- author
    if not U.isEmpty(data.author) then
        table.insert(parts, data.author .. ".")
    end

    -- title
    if not U.isEmpty(data.title) then
        table.insert(parts, "''" .. data.title .. "''.")
    end

    -- website
    if not U.isEmpty(data.website) then
        table.insert(parts, "در: " .. data.website .. ".")
    end

    -- publisher
    if not U.isEmpty(data.publisher) then
        table.insert(parts, data.publisher .. ".")
    end

    -- date
    if not U.isEmpty(data.date) then
        table.insert(parts, data.date .. ".")
    end

    -- URL
    if not U.isEmpty(data.url) then
        table.insert(parts, F.formatLink(data.title, data.url))
    end

    -- identifiers
    local ids = Citation.renderIdentifiers(data)
    if not U.isEmpty(ids) then
        table.insert(parts, ids)
    end

    ----------------------------------------------------------------------
    -- Archive (نسخه کوتاه و زیبا)
    ----------------------------------------------------------------------
    if not U.isEmpty(data.archiveurl) then
        local archivedate = data.archivedate or ""
        local archiveText = "نسخهٔ بایگانی"
        
        if archivedate ~= "" then
            archiveText = archiveText .. " (" .. archivedate .. ")"
        end
        
        local archiveLink = F.formatLink(archiveText, data.archiveurl)
        table.insert(parts, archiveLink)
    end

    return table.concat(parts, " ")
end

--------------------------------------------------------------------------------
-- polish output
--------------------------------------------------------------------------------
function Citation.polish(text)
    if not text then return "" end
    text = mw.text.trim(text)
    text = text:gsub("%s+", " ")
    text = text:gsub("%s+%.", ".")
    text = text:gsub("%.+", ".")
    text = text:gsub("%s+%.?$", "")
    return text
end

--------------------------------------------------------------------------------
-- render main
--------------------------------------------------------------------------------
function Citation.render(frame, ctype)
    local rawArgs = Citation.getArgs(frame)
    local data = Citation.normalize(rawArgs)
    local result = Citation.buildText(data)
    return Citation.polish(result)
end

--------------------------------------------------------------------------------
-- entry points
--------------------------------------------------------------------------------
function Citation.web(frame) return Citation.render(frame, "web") end
function Citation.book(frame) return Citation.render(frame, "book") end
function Citation.news(frame) return Citation.render(frame, "news") end
function Citation.journal(frame) return Citation.render(frame, "journal") end

return Citation