Module:Hatnote

--                             Module:Hatnote                                -- --                                                                           -- -- This module produces hatnote links and links to related articles. It      -- -- implements the and  meta-templates, and a few of    -- -- the more popular templates they depend on, including,            -- --, and. --

local mTableTools = require('Module:TableTools') local mArguments = require('Module:Arguments')

-- Argument processing

-- -- The p table is for functions to be returned from local p, f = {}, {}

local function makeInvokeFunction(func) return function(frame) local args = mArguments.getArgs(frame, {parentOnly = true}) return func(args) end end

-- Helper functions

local function formatLink(link, display) -- Makes a wikilink from the given link and display values. Links are -- escaped with colons if necessary, and links to sections are detected -- and displayed with " § " as a separator rather than the standard -- MediaWiki "#".

-- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. local namespace = link:match('^(.-):') local colon if namespace and mw.site.namespaces[namespace] then -- The start of the link is a valid namespace name; check whether it is -- a category or a file. local nsid = mw.site.namespaces[namespace].id		if nsid == 6 or nsid == 14 then colon = ':' end end colon = colon or ''

-- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end

-- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end

local function makeWikitextError(msg) -- Formats an error message to be returned to wikitext. return string.format(' Error: %s. ', msg) end

-- Hatnote -- -- Produces standard hatnote text. Implements the template.

function p._hatnote(s) return string.format(' %s ', s) end

function f.hatnote(args) local s = args[1] if not s then return makeWikitextError('no text specified') end return p._hatnote(s) end

p.hatnote = makeInvokeFunction(f.hatnote)

-- Rellink -- -- Produces a standard link to a related article. Implements the -- template.

function p._rellink(s, extraclasses) if extraclasses then extraclasses = ' ' .. extraclasses else extraclasses = '' end return string.format(' %s ', extraclasses, s) end

function f.rellink(args) local s = args[1] local extraclasses = args.extraclasses if not s then return makeWikitextError('no text specified') end return p._rellink(s, extraclasses) end

p.rellink = makeInvokeFunction(f.rellink)

return p