Модуль:Wdl-cmn
Для документации этого модуля может быть создана страница Модуль:Wdl-cmn/Документация
local p = {}
-- Return the first form of the lexeme which has exactly the given grammatical feature.
local function formWithSingleGrammaticalFeature( lexeme, item_id )
for i, form in pairs( lexeme:getForms() ) do
local grammaticalFeatures = form:getGrammaticalFeatures()
if #grammaticalFeatures == 1 and grammaticalFeatures[1] == item_id then
return form
end
end
return nil
end
-- Return the representation of the form in the given language code,
-- or the first representation otherwise.
local function representationInLanguage( form, language_code )
for i, representation in pairs( form:getRepresentations() ) do
if representation[2] == language_code then
return representation
end
end
return form:getRepresentations()[1]
end
local function termSpan( term )
local text = term[1]
local lang = term[2]
local dir = mw.language.new( lang ):getDir()
local span = mw.html.create( 'span' )
span:attr( 'lang', lang )
:attr( 'dir', dir )
:attr( 'style', 'font-size:30px')
:wikitext( text )
return '[[' .. text .. '|' .. tostring( span ) .. ']]'
end
local function getPinyin ( current_lexeme )
form = current_lexeme:getForms()[1] -- assuming there is only 1 form, or the first is the main
pin_forms = form:getAllStatements('P1721')
for i, stmt in pairs(pin_forms) do
return '[[d:Lexeme:' .. lexeme_id .. '#F1|<span style="font-size:20px">' .. tostring(stmt.mainsnak.datavalue.value) .. '</span>]]'
end
return tostring(pin_forms)
-- return termSpan(representationInLanguage (form, 'zh-x-Q42222')) -- if there is "pinyin" representation
end
local function getHieroLink ( current_lexeme )
hieros = current_lexeme:getAllStatements('P5425')
if #hieros == 0 then
return "[[File:Biáng-red.png|100px]] "
end
for i, stmt in pairs(hieros) do
qid = stmt.mainsnak.datavalue.value.id
hiero = mw.wikibase.getEntity(qid)
stroke_order = hiero:getAllStatements('P6655')
if #stroke_order > 0 then
return '([[d:' .. qid .. '|' .. qid .. ']]) [[File:' .. stroke_order[1].mainsnak.datavalue.value .. '|50px]] '
else
return '[[d:' .. qid .. '|' .. qid .. ']]'
end
end
return tostring(hieros)
end
function getLemmata( current_lexeme )
lemma_string = ''
for i, rep in pairs(current_lexeme:getLemmas()) do
lemma_string = lemma_string .. termSpan(rep)
end
return lemma_string
end
function getCategory ( current_lexeme )
cat_id = current_lexeme:getLexicalCategory()
cat_text = mw.wikibase.getLabelByLang( cat_id, 'ru' )
if cat_id == 'Q1084' then -- noun
cat_text = cat_text .. '[[Категория:Существительные]]'
elseif cat_id == 'Q34698' then -- adjective
cat_text = cat_text .. '[[Категория:Прилагательные]]'
elseif cat_id == 'Q24905' then -- verb
cat_text = cat_text .. '[[Категория:Глаголы]]'
end
return cat_text
end
function getMeanings ( current_lexeme )
meanings = mw.html.create( 'ol' )
langs = {'ru', 'en', 'fr', 'de', 'uk'}
for i, sense in pairs(current_lexeme:getSenses()) do
local gloss_text = ""
glosses = sense:getGlosses()
for j, gloss in pairs(glosses) do
if gloss[2] == 'ru' then
gloss_text = gloss[1]
end
end
if gloss_text == '' then
gloss_text = glosses[1][1]
end
--examples = getExamples ( current_lexeme, sense:getId() )
gloss_text = '[[d:Lexeme:' .. lexeme_id .. '#S' .. tostring(i) .. '|' .. gloss_text .. ']]'
items = sense:getAllStatements('P5137')
if #items > 0 then --берём из элемента значения, если есть
label = nil
i = 1
while label == nil and i<#langs do
label = mw.wikibase.getLabelByLang( items[1].mainsnak.datavalue.value.id , langs[i] )
i = i + 1
end
if label == nil then
label = tostring(items[1].mainsnak.datavalue.value.id)
end
gloss_text = gloss_text .. ' ([[d:' .. items[1].mainsnak.datavalue.value.id .. '|' .. label .. ']])'
end
meanings:tag('li'):wikitext(gloss_text)--:wikitext(examples)
end
return meanings
end
function p.all( frame )
lexeme_id = frame.args[1]
current_lexeme = mw.wikibase.getEntity(lexeme_id)
cat_text = '===' .. getCategory ( current_lexeme ) .. '==='
lemmata = getLemmata ( current_lexeme )
meanings = getMeanings ( current_lexeme )
cat_id = current_lexeme:getLexicalCategory()
if cat_id == 'Q24905' then
conjTable = getConjTable ( frame, current_lexeme )
elseif cat_id == 'Q1084' then
conjTable = getConjTable ( frame, current_lexeme )
else
conjTable = ''
end
return cat_text .. '\n\n' .. tostring(meanings) .. '\n\n' .. conjTable
end
function p.buildCell( frame )
lexeme_id = frame.args[1]
current_lexeme = mw.wikibase.getEntity(lexeme_id)
cell = '|-\n'
cell = cell .. '| [[:d:Lexeme:' .. lexeme_id .. '|' .. lexeme_id .. ']] '
cell = cell .. '|| ' .. getLemmata(current_lexeme) .. ' '
cell = cell .. '|| ' .. getHieroLink(current_lexeme) .. ' '
cell = cell .. '|| ' .. getPinyin(current_lexeme)
cell = cell .. ' || ' .. tostring(getMeanings(current_lexeme))
return cell
end
return p