local _moduleYesno
local function yesno( ... )
    if not _moduleYesno then
        _moduleYesno = require( 'Module:Yesno' )
    end
    return _moduleYesno( ... )
end

local p = {}

function p.formatTitle(frame)
    local args = frame.args
    local title
    if args.title then
        title = mw.title.new(args.title)
    else
        title = mw.title.getCurrentTitle()
    end

    -- Découpe le titre en trois parties :
    -- 1. prefix = espace de noms et éventuellement page mère (si c'est une sous-page)
    -- 2. mainPart = partie à mettre en forme (page ou sous-page, sans partie entre parenthèses)
    -- 3. disambig = partie entre parenthèses
    local prefix = ''
    if title.nsText ~= '' then
        prefix = title.nsText .. ':'
    end
    if title.isSubpage then
        prefix = prefix .. title.baseText .. '/'
    end

    local mainPart = title.subpageText

    local disambig = ''
    local disambigStart = mainPart:find(' %(.+%)$')
    if disambigStart then
        disambig = mainPart:sub(disambigStart)
        mainPart = mainPart:sub(1, disambigStart - 1)
    end

    -- Recollement des trois parties en insérant une balise de langue et l'italique si besoin.
    local lang = args.lang
    if lang and lang ~= '' then
        mainPart = '<span lang="' .. lang .. '">' .. mainPart .. '</span>'
    end
    local italic = args.italic
    if italic and italic ~= '' and yesno(italic) then
        mainPart = '<i>' .. mainPart .. '</i>'
    end
    return prefix .. mainPart .. disambig
end

--[[
Change le format de la partie principale d'un titre de page.
Les changements possibles sont la mise en italique et l'ajout d'une indication de langue.

Paramètres (passés via frame)
  lang : si non vide, insère une balise indiquant que la partie principale du titre est dans cette langue.
  italic : si non vide, met en italique la partie principale du titre.
  options : deuxième paramètre passé à DISPLAYTITLE. Les valeurs possibles sont "noreplace" et "noerror".
--]]
function p.setDisplayTitle(frame)
    local displayTitle = p.formatTitle(frame)
    if displayTitle == mw.title.getCurrentTitle().prefixedText then
        return ''
    end
    return mw.getCurrentFrame():callParserFunction('DISPLAYTITLE', displayTitle, frame.args.options)
end

return p