La ducumintazzioni di stu mòdulu si pò criari nta Mòdulu:sizzioni/doc

b = require('Mòdulu:basi')
tip = require('Mòdulu:tipi di palori')
lang = require('Mòdulu:lingui')
sizz = require('Mòdulu:sizzioni vuci')
lucu = require('Mòdulu:lucuzzioni')
lem  = require('Mòdulu:lemma')
local p = {}
local cunv_auturizza = {
	['noma scintìfici'] = true,
	['numirali'] = true,
}
local link_aiutu_sizzioni = " [[Wikizziunariu:Lista dî sizzioni|<span style=\"color:red;font-size:70%\">(sizzioni scanusciuta)</span>]]"
local link_aiutu_tipu = " [[Wikizziunariu:Tipi di palori|<span style=\"color:red;font-size:70%\">(sizzioni scanusciuta)</span>]]"
local link_aiutu_lingua = " [[Wikizziunariu:Lista dî lingui|<span style=\"color:red;font-size:70%\">(sizzioni scanusciuta)</span>]]"
local link_aiutu_nummiru = " <span style=\"color:red;font-size:70%\">(nùmmiru nun bonu)</span>"
catigurii = {}
errura = {}
local isdebug = false
local show_ancora = false

function _agghiunci_catiguria(palora_cat, ciavi, scritt)
	local testu_catiguria = ''
    if isdebug then
    	if ciavi then
        	testu_catiguria = b.fa_catiguria(palora_cat, nil, true) .. '(' .. ciavi .. ')'
        else
        	testu_catiguria = b.fa_catiguria(palora_cat, nil, true)
        end
    else
    	testu_catiguria = b.fa_catiguria_cuntinutu(palora_cat, ciavi, scritt)
    end
    table.insert(catigurii, testu_catiguria)
end
function _agghiunci_erruri(missaggiu)
	if missaggiu ~= nil and missaggiu ~= '' then
    	table.insert(errura, missaggiu)
    end
end
function _check_num(num)
    num = tonumber(num)
    if num == nil then return false end
    if num ~= math.floor(num) then return false end
    if num > 0 then
       return true
    end
    return false
end
function _fa_titulu(typen, furm, luc, num)
    local nomu = tip.get_nomu_singulari(typen, luc, furm)
    if nomu == nil then
    	local nomu_luc = tip.get_nomu_singulari(typen, true, furm)
    	if not luc and nomu_luc ~= nil then
    		nomu = nomu_luc
    		_agghiunci_catiguria("Wikizziunariu:Lucuzzioni senza spazziu", typen)
    	end
    end
    local numtext = ''
    if num then
        if _check_num(num) then
            numtext = ' ' .. num
        else
            _agghiunci_erruri(link_aiutu_nummiru)
        	_agghiunci_catiguria("Wikizziunariu:Nùmmira di sizzioni nun boni", num)
        end
    end
    if (typen) then
        if nomu then
            return b.ucfirst(nomu) .. numtext
        else
            _agghiunci_erruri(link_aiutu_tipu)
        	_agghiunci_catiguria('Wikizziunariu:Sizzioni cu tìtulu scanusciutu', typen)
            return numtext
        end
	else
		_agghiunci_erruri(link_aiutu_tipu)
        _agghiunci_catiguria('Wikizziunariu:Sizzioni senza tìtulu')
		return 'Sizzioni senza tìtulu'
    end
end
function _fa_ancora(articulu, lang, typen, furm, luc, num)
    local abrev = tip.get_abrev(typen, luc, furm)
    local ancora = ''
    if (lang and abrev) then
        ancora = lang .. '-' .. abrev
        num = num or 1
       if num then
       		if _check_num(num) then
            	ancora = ancora .. '-' .. num
            end
        end
    end
    return ancora
end
local modulu_sinugramma
function _fa_catiguria(codici_lang, typen, furm, luc, ciavi, geniri, titulu)
    if not b.paggina_di_cuntinutu then return '' end
    lemma_cat = lem.cat_lemma(codici_lang, typen, furm, luc)
    if lemma_cat then
    	_agghiunci_catiguria(lemma_cat, ciavi)
    end
    local nomu = tip.get_nomu_plurali(typen, luc, furm)
    if nomu == 'noma' and geniri ~= nil then
    	if geniri == 'm' then
    		nomu = nomu .. ' maschili'
    	elseif geniri == 'f' then
    		nomu = nomu .. ' fimminili'
    	elseif geniri == 'mf' then
    		nomu = nomu .. ' ambigèniri'
    	else
    		_agghiunci_catiguria('Wikizziunariu:Sizzioni du nomu cu geniri nun vàliddu', geniri)
    	end
    end
    local lingua = lang.get_nomu(codici_lang)
    if nomu and lingua then
    	local palora_cat = ''
		if codici_lang == 'cunv' then
			if cunv_auturizza[nomu] ~= nil then
				palora_cat = b.ucfirst(nomu)
			else
				palora_cat = b.ucfirst(nomu) .. ' n ' .. lingua
			end
		else
			palora_cat = b.ucfirst(nomu) .. ' n ' .. lingua
		end
        if ciavi ~= nil and ciavi ~= '' then
        	_agghiunci_catiguria(lingua, ciavi)
        end
        if nomu == 'sinugrammi' then
            if not modulu_sinugramma then
                modulu_sinugramma = require('Mòdulu:sinugrammi')
            end
            ciavi = modulu_sinugramma.catina_radicali_trattu(titulu)
        end
        _agghiunci_catiguria(palora_cat, ciavi)
    else
        if nomu then
			_agghiunci_erruri(link_aiutu_lingua)
        	if codici_lang ~= nil and codici_lang ~= '' then
        		_agghiunci_catiguria('Wikizziunariu:Sizzioni di tìtulu cu lingua scanusciuta', nomu)
        	else
        		_agghiunci_catiguria('Wikizziunariu:Sizzioni di tìtulu senza lingua nziruta', nomu)
        	end
        end
    end
end
function p.vuci(frame)
    local args = frame:getParent().args
    local argsnum = b.trim_paramitri(args)
    local articulu =  mw.title.getCurrentTitle()
    local typen = argsnum[1]
    local lang  = argsnum[2]
    local ciavi = args['ciavi']
    local erruri_cat = ''
    if typen == 'sustantivu' and lang == 'cunv' then
    	typen = 'nomu scientifique'
    end
    local furm = false
    if argsnum[3] then
    	if argsnum[3]=='forma' then
        	furm=true
        else
    		_agghiunci_catiguria('Wikizziunariu:Sizzioni di tipu cu paràmitru 3 nun vàliddu')
    	end
    end
    local luc = lucu.is_lucuzzioni(args, articulu, lang)
    local num = args.num
    if tip.is_alias(typen) then
    	_agghiunci_catiguria('Wikizziunariu:Sizzioni di tipu di palora usanti n’alias', typen)
    end
    if (args['nocat'] or '') == '' then
        _fa_catiguria(lang, typen, furm, luc, ciavi, args['geniri'], articulu.text)
    end
    local testu_titulu = _fa_titulu(typen, furm, luc, num)
    local ancora = _fa_ancora(articulu, lang, typen, furm, luc, num)
    local final =  '<span class="tituludif" id="' .. ancora .. '">' .. testu_titulu  .. '</span>'
    if num == nil or tonumber(num) == 1 then
    	local ancora_default = mw.ustring.gsub(ancora, '-1$', '')
    	local ancora_default_span = '<span id="' .. ancora_default .. '" style="font-size:0;"> </span>'
    	final = final .. ancora_default_span
	end
    if show_ancora then final = final .. ' ' .. ancora end
    return final
end
function p.sizzioni_autru(frame)
    local args = frame:getParent().args
    local argsnum = b.trim_paramitri(args)
    local titulu = argsnum[1]
    local authorized_category = {['omufòni'] = true, ['omuf'] = true, ['traduzzioni d’ordinari'] = true, ['trad-ordinari'] = true}
    if authorized_category[titulu] ~= nil then
        if argsnum[2] then
            local lingua = lang.get_nomu(argsnum[2])
    	    _agghiunci_catiguria(sizz.get_category(titulu) .. ' n ' .. lingua)
        else
    	    _agghiunci_catiguria(sizz.get_category(titulu))
        end
    elseif argsnum[2] then
    	_agghiunci_catiguria('Wikizziunariu:Sizzioni cu paràmitri superflui', titulu)
    end
    if sizz.is_alias(titulu) then
    	local ignore_alias = {['trad-ordinari'] = true, ['varianti ortugràfichi'] = true, ['talìa'] = true}
    	if ignore_alias[titulu] == nil then
    		_agghiunci_catiguria('Wikizziunariu:Sizzioni usanti n’alias', titulu)
    	end
    end
    local testu_titulu = titulu and b.ucfirst(sizz.get_nomu_sizzioni(titulu)) or "Senza tìtulu"
    local classi = sizz.get_classi(titulu) or ""
    local nfubudda = sizz.get_nfubudda(titulu) or ""
    if nfubudda ~= "" then
    	local articulu = mw.title.getCurrentTitle().fullText
    	nfubudda = mw.ustring.gsub(nfubudda, "{palora}", articulu)
	end
    local final =  '<span class="' .. classi .. '"' .. ' title="' .. nfubudda .. '">' .. testu_titulu  .. '</span>'
    return final
end
function p.sizzioni(frame)
    local args = frame:getParent().args
    local titulu = args[1] and mw.text.trim(args[1]) or ''
    local testu_finali = ''
    if titulu == nil or titulu == '' then
        _agghiunci_erruri(link_aiutu_sizzioni)
        _agghiunci_catiguria('Wikizziunariu:Sizzioni senza tìtulu')
        testu_finali = 'Sizzioni senza tìtulu'
    else
	    if tip.is_type(titulu) then
	        testu_finali = p.vuci(frame)
	    elseif sizz.is_titulu(titulu) then
	        testu_finali = p.sizzioni_autru(frame)
		else
    		if args[2] ~= nil and args[2] ~= '' then
        		_agghiunci_erruri(link_aiutu_tipu)
        	else
        		_agghiunci_erruri(link_aiutu_sizzioni)
        	end
        	_agghiunci_catiguria('Wikizziunariu:Sizzioni cu tìtulu scanusciutu', titulu)
	        testu_finali = b.ucfirst(titulu)
	    end
	end
    local testu_errura = table.concat(errura)
    local testu_catigurii = table.concat(catigurii)
    return testu_finali .. testu_errura .. testu_catigurii
end
return p