Modulo:pagenamkod
Aspekto
MODULO | ||
Memtesto disponeblas sur la dokumentaĵa subpaĝo. |
|
Utilo
Ellegas paĝonomon simile kiel {{PAGENAME}}
sed kun la foje grava diferenco ke apo '
ne estas kodigita al '
. Krom tio eblas kodigi la paĝonomon je certaj manieroj kaj samaj kiel kaj aldonaj al parsila funcio {{urlencode
...}}
, kaj havigi transpasan parametron kiu anstataŭigas la paĝonomon kaj eniras la kodigon. Uzata far:
{{ref-DDO}}
{{ref-Dictionary}}
{{ref-Euskaltzaindia}}
{{ref-IcelandicOnlineDictionary}}
{{ref-Longman}}
{{ref-Macmillan}}
{{ref-onelook}}
{{ref-Tato}}
{{ref-Wordreference}}
sed ne {{ref-Cambridge}}
.
--[===[
MODULE "PAGENAMKOD"
"eo.wiktionary.org/wiki/Modulo:pagenamkod" <!--2022-Feb-26-->
Purpose: seizes pagename and encodes it
Utilo: ellegas pagxonomon kaj kodigas gxin
Used by templates / Uzata far sxablonoj / Digunakan oleh templat:
- ref-DDO ref-Dictionary ref-Macmillan ref-onelook ref-Tato (EO)
Required submodules / Bezonataj submoduloj / Submodul yang diperlukan:
- none
Incoming: * 2 optional named parameters
* "ctl=" encoding method (1...7)
* "ADASH" dash/minus for space and apo
* "DASH" dash/minus for space only
* "DBDASH" double dash
* "QUERY" plus
* "WIKI" underscore
* prefix "!" to also percent-encode complete string after
replace, otherwise only replace troubled chars, use "!"
instead of "PATH"
invalid string ignored, no change or coding then
* "ovr=" override string to replace the pagename
Returned: * one string
]===]
local pnk = {}
---- CONSTANTS [O] ----
local contabtransspc = { ["ADASH"]="-",["DASH"]="-",["DBDASH"]="--",["QUERY"]="+",["WIKI"]="_" }
local contabtransapo = { ["ADASH"]="-" }
---- MATH FUNCTIONS [A] ----
local function mathdiv (xdividend, xdivisor)
local resultdiv = 0
resultdiv = math.floor (xdividend / xdivisor)
return resultdiv
end--function mathdiv
local function mathmod (xdividendo, xdivisoro)
local resultmod = 0
resultmod = xdividendo % xdivisoro
return resultmod
end--function mathmod
---- NUMBER CONVERSION FUNCTIONS [N] ----
local function lfuint8tohex (numinclow)
local strheksulo = ''
local numhajhaj = 0
numhajhaj = mathdiv (numinclow,16)
numinclow = mathmod (numinclow,16)
if (numhajhaj>9) then
numhajhaj = numhajhaj + 7 -- now 0...9 or 17...22
end--if
if (numinclow>9) then
numinclow = numinclow + 7 -- now 0...9 or 17...22
end--if
strheksulo = string.char (numhajhaj+48) .. string.char (numinclow+48)
return strheksulo
end--function lfuint8tohex
---- LOW LEVEL STRING FUNCTIONS [G] ----
local function lftestnum (numkaad)
local boodigit = false
boodigit = ((numkaad>=48) and (numkaad<=57))
return boodigit
end--function lftestnum
local function lftestuc (numkode)
local booupperc = false
booupperc = ((numkode>=65) and (numkode<=90))
return booupperc
end--function lftestuc
local function lftestlc (numcode)
local boolowerc = false
boolowerc = ((numcode>=97) and (numcode<=122))
return boolowerc
end--function lftestlc
local function lfis62safe (numcxair)
local booguud = false
booguud = lftestnum (numcxair) or lftestuc (numcxair) or lftestlc (numcxair)
return booguud
end--function lfis62safe
---- HIGH LEVEL STRING FUNCTIONS [I] ----
-- Local function LFIPERCENTEN
-- Depends on functions :
-- [G] lftestnum lftestuc lftestlc lfis62safe
-- [N] lfuint8tohex
-- [A] mathdiv mathmod
local function lfipercenten (strenigacxeno)
local strelirope = ''
local numinlenin = 0
local numtiamp = 0
local numcharbychar = 0
numinlenin = string.len (strenigacxeno)
numtiamp = 0 -- ZERO-based
while (true) do
if (numtiamp>=numinlenin) then
break -- done
end--if
numcharbychar = string.byte(strenigacxeno,(numtiamp+1),(numtiamp+1))
if (lfis62safe(numcharbychar)) then
strelirope = strelirope .. string.char(numcharbychar) -- keep
else
strelirope = strelirope .. '%' .. lfuint8tohex(numcharbychar) -- encode
end--if
numtiamp = numtiamp + 1
end--while
return strelirope
end--function lfipercenten
---- VARIABLES [R] ----
function pnk.ek (arxframent)
-- general unknown type
local vartmp = 0 -- variable without type multipurpose
-- special type "args" AKA "arx"
local arxourown = 0 -- metaized "args" from our own "frame"
-- general str
local strpagenam = ''
local strctlpara = ''
local strreplspc = ''
local strreplapo = ''
local strreplace = ''
local strret = ''
-- general num boo
local numlen = 0
local numtamp = 0
local numoct = 0
local booexc = false
---- MAIN [Z] ----
---- GET THE ARX AND 2 NAMED ----
arxourown = arxframent.args -- "args" from our own "frame"
if (type(arxourown)~="table") then
arxourown = {} -- guard against indexing error
end--if
strctlpara = arxourown["ctl"] or '' -- quard again
numlen = string.len (strctlpara)
if (numlen>7) then -- 1...7 OK (let empty string pass here)
strctlpara = ''
end--if
strpagenam = arxourown["ovr"] or '' -- quard again
numlen = string.len (strpagenam)
if (numlen>200) then -- 1...200 OK (let empty string pass here)
strpagenam = ''
end--if
---- SEIZE THE PAGENAME FROM MW AND CHECK IT ----
if (strpagenam=='') then
vartmp = mw.title.getCurrentTitle().text -- without namespace prefix
if (type(vartmp)=="string") then
numtamp = string.len(vartmp)
if (numtamp<=200) then
strpagenam = vartmp -- pagename (let empty string pass here)
end--if
end--if
end--if
if (strpagenam=='') then
strpagenam = "!!ERROR!!" -- empty is NOT legal
end--if
---- CHECK EXCLAM ----
numlen = string.len (strctlpara)
if (numlen~=0) then
booexc = (string.byte(strctlpara,1,1)==33) -- exclam "!"
if (booexc) then
strctlpara = string.sub (strctlpara,2,numlen) -- risk leave behind empty
end--if
end--if
strreplspc = contabtransspc [strctlpara] or " " -- replacement for space
strreplapo = contabtransapo [strctlpara] or "'" -- replacement for apo
---- PERFORM THE HUGE WORK ----
numlen = string.len (strpagenam)
numtamp = 0 -- ZERO-based
while (true) do
if (numtamp>=numlen) then
break -- done
end--if
numoct = string.byte(strpagenam,(numtamp+1),(numtamp+1))
strreplace = string.char(numoct) -- pre-assume keep char
if (numoct==32) then
strreplace = strreplspc -- replace space
end--if
if (numoct==39) then
strreplace = strreplapo -- replace apo
end--if
strret = strret .. strreplace -- can be more than one char
numtamp = numtamp + 1
end--while
if (booexc) then
strret = lfipercenten (strret) -- percent-encode
end--if
---- RETURN THE JUNK STRING ----
return strret
end--function
---- RETURN THE JUNK LUA TABLE ----
return pnk