Modul:JazykTEST
Dokumentaci tohoto modulu lze vytvořit na stránce Nápověda:Modul:JazykTEST
-- Podporované funkce:
-- 1) monitoring neexistujících kódů
-- 2) monitoring duplicitního vložení jednoho jazyka
-- 3) monitoring špatné úrovně nadpisu
-- 4) ignorace šablony je-li uvnitř <nowiki></nowiki>, <pre></pre>, <!-- -->
-- 5) zařazení každého hesla do kategorií Jazyk/vše
-- 6) kategorizace hesel dle délky názvu hesla
-- 7) kategorizace palindromů
-- 8) kategorizace hesel bez samohlásky v názvu
-- 9) kategorizace dle počtu jazyků
-- TODO:
---- kategorizace hesel bez samohlásky v názvu: založit seznam samohlásek (všechny jazyky dohromady, nebo každý jazyk zvlášť?)
---- kategorizace dle slovních druhů
---- retrográdní kategorizace (jak?)
---- kontrola formátu překladů, synonym, antonym
---- kontrola všech nadpisů
----
local p = {}
local function firstToUpper( word )
return mw.ustring.upper( mw.ustring.sub( word, 1, 1 ) ) .. mw.ustring.sub( word, 2 )
end
local function firstRunJob( Categories, title, Language )
local content = title:getContent()
content = mw.ustring.gsub( content, '<!%-%-.-%-%->', '' )
content = mw.ustring.gsub( content, '<nowiki>.-</nowiki>', '' )
content = mw.ustring.gsub( content, '<pre[^>]->.-</pre>', '' )
local curr_code
local Codes = {}
local diffCodes = 0
local levelsOk = true
local orderOk = true
local uniqueCodes = true
local curr_lang, prev_lang
local SlovniDruhy = require( 'Modul:SlovniDruhy' )
for line in mw.text.gsplit( content, '\n' ) do
local level, headline = mw.ustring.match( line, '^(=+)%s*([^=]-)%s*=+%s-$' )
if level and headline then
if mw.ustring.match( headline, '%{%{%s*[Jj]azykTEST[^%}]-%}%}' ) then
curr_code = mw.ustring.match( headline, '%{%{%s*[Jj]azykTEST%s*|%s*([^%|%}]*)' )
if curr_code and curr_code ~= '' then
if Codes[curr_code] then
uniqueCodes = false
else
Codes[curr_code] = curr_code
diffCodes = diffCodes + 1
end
if orderOk and prev_lang and curr_code == 'cs' then
orderOk = false
end
if orderOk then
curr_lang = Language:getFullName( curr_code )
if curr_lang then
if prev_lang then
local Sorter = require( 'Modul:Collation' )
orderOk = Sorter.sortCompare( prev_lang, curr_lang )
end
if orderOk and curr_code ~= 'cs' then
prev_lang = curr_lang
end
end
end
end
if levelsOk and level ~= '==' then
levelsOk = false
end
else
if curr_lang then
for _, data in pairs( SlovniDruhy ) do
if headline == data.name then
local ok
if not data.default then
ok = false
for _, ok_code in pairs( data.existent_list ) do
if curr_code == ok_code then
ok = true
break
end
end
else
ok = true
for _, bad_code in pairs( data.nonexistent_list ) do
if curr_code == bad_code then
ok = false
break
end
end
end
if not ok then
table.insert(
Categories,
'[[Kategorie:TEST:Přebytečný slovní druh/' .. curr_lang .. ']]'
)
end
end
end
end
end
end
end
table.insert( Categories, '[[Kategorie:TEST:Slova dle počtu jazyků/' .. diffCodes .. ']]' )
if not levelsOk then
table.insert( Categories, '[[Kategorie:Monitoring:Šablona Jazyk/Špatná úroveň nadpisu]]' )
end
if not orderOk then
table.insert( Categories, '[[Kategorie:Monitoring:Nesprávné pořadí jazyků]]' )
end
if not uniqueCodes then
table.insert( Categories, '[[Kategorie:Monitoring:Šablona Jazyk/Duplicitní vložení šablony]]' )
end
return Categories
end
function p.main( frame )
local out
local firstRun = true
if package.loaded['Modul:SlovniDruhy'] then
firstRun = false
end
local Language = require( 'Modul:Language' )
local Categories = {}
local title = mw.title.getCurrentTitle()
local params = frame:getParent().args
local code = params[1]
local language = Language:getFullName( code or '' )
if language then
out = language
else
if code == '' then
code = nil
end
out = mw.ustring.format( 'neznámý kód jazyka „%s“', code or '[nezadán]' )
table.insert( Categories, '[[Kategorie:Monitoring:Šablona Jazyk/Špatný kód jazyka]]' )
end
if params[2] == "jenjazyk" or title.namespace ~= 0 and title.namespace ~= 2 then
return out .. table.concat( Categories, '' )
end
local word = title.text
local word_len = mw.ustring.len( word )
local categoryText = 'Délka názvu hesla/' .. word_len .. ' znaků'
if word_len == 1 then
categoryText = 'Délka názvu hesla/' .. word_len .. ' znak'
elseif word_len < 5 then
categoryText = 'Délka názvu hesla/' .. word_len .. ' znaky'
end
local hasVowels = false
for letter in mw.text.gsplit( mw.ustring.lower( word ), '' ) do
if letter == 'a' or letter == 'e' or letter == 'i' or
letter == 'o' or letter == 'u' or letter == 'y' then -- asi jich je víc
hasVowels = true
break
end
end
local withoutSpecial = mw.ustring.lower( mw.ustring.gsub( word, '%W', '' ) )
local withoutSpecialLen = mw.ustring.len( withoutSpecial )
local isPalindrome = true
for i = 1, math.floor( withoutSpecialLen / 2 ) do
if mw.ustring.sub( withoutSpecial, i, i ) ~= mw.ustring.sub( withoutSpecial, -i, -i ) then
isPalindrome = false
break
end
end
if firstRun then
if params[2] then
table.insert( Categories, '[[Kategorie:Monitoring:Šablona Jazyk/Více zadaných parametrů]]' )
end
table.insert( Categories, mw.ustring.format( '[[Kategorie:TEST:%s/vše]]', categoryText ) )
if not hasVowels then
table.insert( Categories, '[[Kategorie:TEST:Název hesla neobsahuje samohlásku/vše]]' )
end
if isPalindrome then
table.insert( Categories, '[[Kategorie:TEST:Palindromy/vše]]' )
end
Categories = firstRunJob( Categories, title, Language )
end
if language then
table.insert( Categories, '[[Kategorie:TEST:' .. firstToUpper( language ) .. '/vše]]' )
table.insert( Categories, mw.ustring.format( '[[Kategorie:TEST:%s/%s]]', categoryText, language ) )
if isPalindrome then
table.insert( Categories, '[[Kategorie:TEST:Palindromy/' .. language .. ']]' )
end
if not hasVowels then
table.insert( Categories, '[[Kategorie:TEST:Název hesla neobsahuje samohlásku/' .. language .. ']]' )
end
end
return out .. table.concat( Categories, '' )
end
return p