Модуль:Праверка перасылак для імя

З Вікіпедыі, свабоднай энцыклапедыі
(i) Дакументацыя

Гэты модуль змяшчае функцыі для праверкі наяўнасці старонак з пэўнай назвай. Пры адсутнасці патрэбны старонак модуль выстаўляе адсочваючыя катэгорыі.

У цяперашні час модуль апрацоўвае радкі, якія складаюцца з трох слоў (інтэрпрэтуюцца як імя, імя па бацьку і прозвішча). У другім слове (імя па бацьку) правяраецца, ці сканчваецца яно на "іч" або на "на". Калі гэтыя ўмовы не выкананы, модуль не дадасць ніякіх адсочаючых катэгорый.

Калі ж назва старонкі задавальняе ўмовам, то правяраецца наяўнасць старонак віду «Імя Прозвішча», «І. Іпб. Прозвішча» і «І. Прозвішча». Скарачэнне бярэцца па першай літары, акрамя спалучэння "Дз" у пачатку, для якога бяруцца дзве літары. Пры адсутнасці кожнага віду старонак дадаюцца адсочваючы катэгорыі:

Модуль змяшчае функцыі:

  • nameLinks.getAbbr(name) — для прыведзенага імя вяртае яго скарачэнне з кропкай на канцы.
  • nameLinks.getNames(fullname) — разбівае радок на словы.
  • nameLinks.formRefs(names) — для набору "імя, імя па бацьку, прозвішча" фарміруе табліцу, у якой запісаны старонкі, наяўнасць якіх трэба праверыць, разам з катэгорыямі, якія варта дадаць пры адсутнасці дапаведных старонак.
  • nameLinks.getCats(links) — па табліцы старонак і катэгорый правярае наяўнасць старонак і вяртае адпаведныя катэгорыі.
  • nameLinks.Process(fullname) — асноўная функцыя, якая выклікае астатнія і па імі чалавека вяртае адсочваючыя катэгорыі.
  • nameLinks.ProcessSeveralNames(namesRow) — асноўная функцыя, якая выклікае астатнія і па радку з імёнамі чалавека (праз коску) вяртае адсочваючыя катэгорыі (дадаюцца, калі хоць адно з імён не мае адпаведных перасылак).

Выкарыстанне:

  • {{#invoke:Праверка перасылак для імя|Process|назва для праверкі}}
  • {{#invoke:Праверка перасылак для імя|ProcessSeveralNames|назвы для праверкі}}

У прыватнасці:

  • {{#invoke:Праверка перасылак для імя|Process|{{PAGENAME}}}}
  • {{#invoke:Праверка перасылак для імя|ProcessSeveralNames|{{PAGENAME}}, {{#invoke:wd|label}}, {{#invoke:wd|aliases}}}}

Рэкамендуецца выкарыстоўваць модуль праз спецыяльныя шаблоны, напрыклад {{Асоба/Агульныя праверкі}}.

Каб пазбегнуць паломак старонак, дзе ўжыты гэты модуль, пажадана эксперыментаваць у пясочніцы для модуляў.


local nameSurnameCat = '[[Катэгорыя:Вікіпедыя:Артыкулы пра асоб, для якіх не існуюць старонкі віду «Імя Прозвішча»]]';
local nbSurnameCat = '[[Катэгорыя:Вікіпедыя:Артыкулы пра асоб, для якіх не існуюць старонкі віду «І. Іпб. Прозвішча»]]';
local nSurnameCat = '[[Катэгорыя:Вікіпедыя:Артыкулы пра асоб, для якіх не існуюць старонкі віду «І. Прозвішча»]]';

local nameLinks = {}

function nameLinks.getAbbr( name )
    if (mw.ustring.len(name) > 2) then
		if (mw.ustring.sub( name, 1, 2) == 'Дз' ) then
            return 'Дз.'
        end    
        return mw.ustring.sub( name, 1, 1) .. '.'
    end
	if (mw.ustring.len(name) > 1) then
      return mw.ustring.sub( name, 1, 1) .. '.'
   end
   return name
end

function nameLinks.getNames( fullname )
    return mw.text.split(mw.text.split(fullname, ' %(')[1], ' ')
end

function nameLinks.formRefs( names )
	if (#names ~= 3) then
	  return {}
	end  
    local secondWordFinish = mw.ustring.sub( names[2], mw.ustring.len(names[2]) - 1, mw.ustring.len(names[2]))
    if (#names == 3 and secondWordFinish ~= 'іч' and secondWordFinish ~= 'на') then
	  return {}
	end  
	local nameSurname = names[1] .. ' ' .. names[3] 
	local nbSurname = nameLinks.getAbbr(names[1]) .. ' ' .. nameLinks.getAbbr(names[2]) .. ' ' .. names[3]
	local nSurname = nameLinks.getAbbr(names[1]) .. ' ' .. names[3] 
    return { { nameSurname, nameSurnameCat}, {nbSurname, nbSurnameCat}, {nSurname, nSurnameCat}} 
end

function nameLinks.getCats( links )
	local result = '' 
    for i = 1, #links, 1 do
	    local link = links[i][1];
	    local title = mw.title.new( link );
	    if title and not title.exists then
	        result = result .. links[i][2];
	    end
	end	
    return result
end

function nameLinks.Process( fullname )
    return nameLinks.getCats(nameLinks.formRefs(nameLinks.getNames(fullname.args[1])))
end

function nameLinks.ProcessSeveralNames( namesRow )
	local fullnames = mw.text.split(namesRow.args[1], ',')
	local result = ''
    for i = 1, #fullnames, 1 do
	    result = result .. nameLinks.getCats(nameLinks.formRefs(nameLinks.getNames(mw.text.trim(fullnames[i]))))
	    --nameLinks.getCats(nameLinks.formRefs(nameLinks.getNames(fullnames[i])))
    end	
    return result
end

return nameLinks