มอดูล:Title monthname
คู่มือการใช้งานมอดูล[สร้าง]
คุณอาจจะต้องการสร้างคู่มือการใช้งานของมอดูลนี้ ผู้เขียนสามารถทำการทดลองได้ที่กระบะทราย (แก้ | ดูความแตกต่าง) และชุดทดสอบ (สร้าง) ของมอดูลนี้ โปรดเพิ่มหมวดหมู่ไปที่หน้าย่อย /doc หน้าย่อยของมอดูลนี้ |
--[[ v1.00
Split the page title into words then test each of them against
the list of months.
Optionally, an alternative page name may be supplied as a parameter.
Return the first word which matches a months name ...
unless the "match=" parameter specifies a diffreent match.
If there is no match, then return an empty string ... unles
the "nomatch" parameter specifies something different
]]
local getArgs = require('Module:Arguments').getArgs
local dateUtils = require('มอดูล:DateUtils')
local p = {}
-- config
local nomatch = ""
local matchnum = 1
local monthList = dateUtils._englishMonthNames -- ชื่อเดือนภาษาอังกฤษ
local thaiMonthNames = dateUtils._thaiMonthNames
-- splits a string into "words"
-- a "word" is a set of characters delineated at each end by one
-- or more whitespace characters or punctaution charaters
function splitIntoWords(str)
result = {}
index = 1
s = mw.ustring.gsub(str, "^[%s%p]+", "") -- strip leading whitespace or punctuation
for s2 in mw.ustring.gmatch(s, "[^%s%p]+[%s%p]*") do
s3 = mw.ustring.gsub(s2, "[%s%p]+$", "") -- strip trailing separators
result[index] = s3
index = index + 1
end
return result
end
-- เอามาจาก [[มอดูล:DateUtils]] แต่เพิ่ม " " เพื่อตัดคำ
function replaceThaiMonthName(str)
for i, v in ipairs( thaiMonthNames ) do
str = string.gsub(str, thaiMonthNames[i], string.format(" %s ", monthList[i]))
end
return str
end
function replaceEnglishMonthNameToThai(str)
return dateUtils._replacer(monthList, thaiMonthNames, str)
end
-- returns the first word is the pagename which matches the name of a month
-- ... or an empty string if there is no match
function checkPagename(pn)
-- NOTE: สำหรับภาษาไทยที่ไม่มีการแบ่งคำด้วยช่องว่าง
-- แทนที่ชื่อเดือนภาษาไทยด้วยภาษาอังกฤษ แล้วเพิ่มช่องว่างหน้า/หลัง เพื่อให้ตัดคำแบบอังกฤษได้
pn = replaceThaiMonthName(pn)
-- split the pagename into sparate words
titleWords = splitIntoWords(pn)
nMatches = 0
myMatches ={}
-- check each words in turn, to see if it matches a month
for w, thisWord in ipairs(titleWords) do
-- check agaist each month
-- if there is a match, then return that monthname
for i, thisMonth in ipairs(monthList) do
if (thisMonth == thisWord) then
nMatches = nMatches + 1
myMatches[nMatches] = thisMonth
end
end
end
if (nMatches == 0) then
-- none of the title words matches a whole month
return nomatch
end
if ((matchnum >= 1) and (matchnum <= nMatches)) then
return replaceEnglishMonthNameToThai(myMatches[matchnum])
end
if (matchnum < 0) then
matchnum = matchnum + 1 -- so that -1 is the last match etc
if ((matchnum + nMatches) >= 1) then
return replaceEnglishMonthNameToThai(myMatches[matchnum + nMatches])
end
end
-- if we get here, we have not found a match at the position specified by "matchnum"
return nomatch
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
if (args['nomatch'] ~= nil) then
nomatch = args['nomatch']
end
-- by default, we return the first match
-- but the optional "C" paarmeter sets the "matchnum" variable, which
-- * for a positive matchnum "n", returns the nth match if it exists
-- * for a positive matchnum "n", returns (if it exists) the nth match
-- counting backwards from the end.
-- So "match=-1" returns the last match
-- and "match=-3" returns the 3rd-last match
if (args['match'] ~= nil) then
matchnum = tonumber(args['match'])
if ((matchnum == nil) or (matchnum == 0)) then
matchnum = 1
end
end
-- by default, we use the current page
-- but if the "page=" parameters is supplied, we use that
-- so we try the parameter first
thispagename = nil
if ((args['page'] ~= nil) and (args['page'] ~= "")) then
-- we have a non-empty "page" parameter, so we use it
thispagename = args['page']
else
-- get the page title
thispage = mw.title.getCurrentTitle()
thispagename = thispage.text;
end
-- now check the pagename to try to find a month ananme
result = checkPagename(thispagename)
if (result == "") then
return nomatch
end
return result
end
return p