پودمان:Citation: تفاوت میان نسخهها
ظاهر
جزبدون خلاصۀ ویرایش |
جزبدون خلاصۀ ویرایش |
||
| (۲ نسخهٔ میانیِ ایجادشده توسط همین کاربر نشان داده نشد) | |||
| خط ۱: | خط ۱: | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- Module:Citation | -- Module:Citation | ||
-- Wiki Alborz Lightweight Citation System | -- Wiki Alborz Lightweight Citation System | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
local args = require("Module:Arguments") | local args = require("Module:Arguments") | ||
local cfg | local cfg = require("Module:Citation/Configuration") | ||
local U | local U = require("Module:Citation/Utilities") | ||
local F | 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 }) | ||
end | end | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- 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 | ||
for _, name in ipairs(aliases) do | for _, name in ipairs(aliases) do | ||
local v = argTable[name] | local v = argTable[name] | ||
if v and v ~= "" then | if v and v ~= "" then return v end | ||
end | end | ||
return nil | return nil | ||
end | end | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- normalize input | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
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 | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
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 | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- build citation text | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
function Citation.buildText(data | function Citation.buildText(data) | ||
local parts = {} | local parts = {} | ||
-- | -- 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 | ||
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 | ||
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 | ||
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 | ||
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. | table.insert(parts, F.formatLink(data.title, data.url)) | ||
end | end | ||
-- | -- identifiers | ||
local ids = Citation.renderIdentifiers(data) | local ids = Citation.renderIdentifiers(data) | ||
if not U.isEmpty(ids) then | if not U.isEmpty(ids) then | ||
| خط ۱۲۵: | خط ۹۶: | ||
---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ||
-- | -- Archive (نسخه کوتاه و زیبا) | ||
---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ||
if not U.isEmpty(data.archiveurl) then | 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 | end | ||
| خط ۱۳۷: | خط ۱۱۴: | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- polish output | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
function Citation.polish(text) | function Citation.polish(text) | ||
if not text then | if not text then return "" end | ||
text = mw.text.trim(text) | text = mw.text.trim(text) | ||
text = text:gsub("%s+", " ") | text = text:gsub("%s+", " ") | ||
| خط ۱۴۹: | خط ۱۲۳: | ||
text = text:gsub("%.+", ".") | text = text:gsub("%.+", ".") | ||
text = text:gsub("%s+%.?$", "") | text = text:gsub("%s+%.?$", "") | ||
return text | return text | ||
end | end | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- | -- render main | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
function Citation.render(frame, ctype) | function Citation.render(frame, ctype) | ||
local rawArgs = Citation.getArgs(frame) | local rawArgs = Citation.getArgs(frame) | ||
local data | local data = Citation.normalize(rawArgs) | ||
local result = Citation.buildText(data) | |||
local result | |||
return Citation.polish(result) | return Citation.polish(result) | ||
end | end | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- entry points | -- entry points | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
function Citation.web(frame) | function Citation.web(frame) return Citation.render(frame, "web") end | ||
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) | |||
end | |||
function Citation.news(frame) | |||
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