Module:Sort title
| This Lua module is used on approximately 39,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
| This module depends on the following other modules: |
Module:Sort title is used to create sortkeys for pages.
What it does
The module preforms the following checks:
- If the first word of the title is an article, it moves it to the end of the title. For example:
The Avengerswill have a sortkey ofAvengers, The. - If the title is disambiguated and the first word of the disambiguation is an article, it moves it to the end of the disambiguation. For example:
Pilot (The Flash)will have a sortkey ofPilot (Flash, The). - If the title is disambiguated and the first word of the title and the disambiguation is an article, both of the above changes will occur. For example:
The End (A Series of Unfortunate Events)will have a sortkey ofEnd, The (Series of Unfortunate Events, A). - If the title is a number which is separated by a commas, it removes the commas. For example:
4,722 Hourswill have a sortkey of4722 Hours.
Usage
From template:
{{#invoke:Sort title|getSortKey}}{{#invoke:Sort title|getDefaultSort}}
From module:
local sortkeyModule = require('Module:Sort title')
local sortkey = sortkeyModule._getSortKey()
Function list
| Function | Explanation |
|---|---|
getSortKey
|
Returns a sortkey |
getDefaultSort
|
Returns a DEFAULTSORT string |
local match = require("Module:String")._match
local p = {}
--[[
Local function which is used to return a number without commas.
For example: 4,722 will become 4722.
--]]
local function cleanNumberFromCommas(title)
return string.gsub(title, "(%d+)(,+)", "%1")
end
--[[
Local function which is used to check if the word is an article.
Returns true if it is, false if it isn't.
--]]
local function isFirstWordAnArticle(word)
word = string.lower(word)
if (word == "a" or word == "an" or word == "the") then
return true
else
return false
end
end
--[[
Local function which is used to return the title without its disambiguation.
--]]
local function getTitleWithoutDisambiguation(title, disambiguation)
local newTitle = string.gsub(title, "%(".. disambiguation .. "%)", "")
return mw.text.trim(newTitle)
end
--[[
Local function which is used to return a title without its first word.
--]]
local function getTitleWithoutFirstWord(title)
return mw.ustring.gsub(title, "^[^%s]*%s*", "")
end
--[[
Local function which is used to return the first word from a title.
--]]
local function getFirstWord(title)
return match(title, "^[^%s]*", 1, 1, false, "")
end
--[[
Local function which is used to return a sort key for a specific part.
--]]
local function getSortKey(title, firstWord)
local sortKey = title
if (isFirstWordAnArticle(firstWord) and firstWord ~= title) then
title = getTitleWithoutFirstWord(title)
sortKey = title .. ", " .. firstWord
end
return sortKey
end
--[[
Local function which is used to return the disambiguation sort key.
--]]
local function getDisambiguationSortKey(disambiguation)
if (disambiguation == "") then
return ""
end
local firstWord = getFirstWord(disambiguation)
local disambiguationSortKey = getSortKey(disambiguation, firstWord)
return "(" .. disambiguationSortKey .. ")"
end
--[[
Local function which is used to return the disambiguation from a title.
--]]
local function getDisambiguation(title)
local disambiguation = match(title, "%s%((.-)%)", 1, -1, false, "")
if (disambiguation == "") then
return ""
else
return disambiguation
end
end
--[[
The main function.
--]]
local function _main(title)
if (not title) then
title = mw.title.getCurrentTitle().text
end
local firstWord = getFirstWord(title)
local disambiguation = getDisambiguation(title)
local disambiguationSortKey = getDisambiguationSortKey(disambiguation)
title = getTitleWithoutDisambiguation(title, disambiguation)
title = cleanNumberFromCommas(title)
title = getSortKey(title, firstWord)
local sortKey = title .. " " .. disambiguationSortKey
return mw.text.trim(sortKey)
end
--[[
Public function which allows modules to retrieve a sort key.
--]]
function p._getSortKey()
return _main(nil)
end
--[[
Public function which allows templates to retrieve a sort key.
--]]
function p.getSortKey(frame)
return _main(nil)
end
--[[
Public function which allows templates to retrieve the sort key inside a DEFAULTSORT.
--]]
function p.getDefaultSort(frame)
local sortKey = _main(nil)
return frame:preprocess{text = "{{DEFAULTSORT:" .. sortKey .. "}}"}
end
--[[
Public function which is used for testing various names and not the current page name.
--]]
function p.testcases(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return _main(args[1])
end
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.