L'équipe Demopaedia sera présente à la Conférence internationale sur la Population de Busan.
Si vous vous rendez à cette conférence, venez assister à notre communication orale qui aura lieu le mardi 27 août de 15h30 à 17h00 (Bexco, pièce 213, Glass Hall, 2e étage). Le nouveau dictionnaire coréen sera également présenté lors d'une conférence organisée par la Fédération coréenne de planification familiale (PPFK) sur "les questions de population & de l'aide publique au développement" (ouverte à tous) à 19h00 (Bexco, pièce 110).

Vous pouvez télécharger les volumes français, anglais, italien, thaï en différents formats électroniques ou les commander sur papier à prix coûtant.

Dictionnaire démographique multilingue, seconde édition unifiée, volume français

Module:Section link

Dictionnaire démographique multilingue, seconde édition unifiée, volume français
Révision datée du 22 août 2017 à 15:36 par Nicolas Brouard (discussion | contributions) (1 révision importée : From en.wikipedia)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

La documentation pour ce module peut être créée à Module:Section link/doc

-- This module implements {{section link}}.

local checkType = require('libraryUtil').checkType

local p = {}

local function makeSectionLink(page, section, display)
	display = display or section
	page = page or ''
	return string.format('[[%s#%s|%s]]', page, section, display)
end

function p._main(page, sections, options, title)
	-- Validate input.
	checkType('_main', 1, page, 'string', true)
	checkType('_main', 3, options, 'table', true)
	if sections == nil then
		sections = {}
	elseif type(sections) == 'string' then
		sections = {sections}
	elseif type(sections) ~= 'table' then
		error(string.format(
			"type error in argument #2 to '_main' " ..
			"(string, table or nil expected, got %s)",
			type(sections)
		), 2)
	end
	options = options or {}
	title = title or mw.title.getCurrentTitle()

	-- Deal with blank page names elegantly
	if page and not page:find('%S') then
		page = nil
		options.nopage = true
	end

	-- Make the link(s).
	local isShowingPage = not options.nopage
	if #sections <= 1 then
		local linkPage = page or ''
		local section = sections[1] or 'Notes'
		local display = '§&nbsp;' .. section
		if isShowingPage then
			page = page or title.prefixedText
			display = page .. ' ' .. display
		end
		return makeSectionLink(linkPage, section, display)
	else
		-- Multiple sections. First, make a list of the links to display.
		local ret = {}
		for i, section in ipairs(sections) do
			ret[i] = makeSectionLink(page, section)
		end

		-- Assemble the list of links into a string with mw.text.listToText.
		-- We use the default separator for mw.text.listToText, but a custom
		-- conjunction. There is also a special case conjunction if we only
		-- have two links.
		local conjunction
		if #sections == 2 then
			conjunction = '&#8203; and '
		else
			conjunction = ', and '
		end
		ret = mw.text.listToText(ret, nil, conjunction)

		-- Add the intro text.
		local intro = '§§&nbsp;'
		if isShowingPage then
			intro = (page or title.prefixedText) .. ' ' .. intro
		end
		ret = intro .. ret

		return ret
	end
end

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		wrappers = 'Template:Section link',
		valueFunc = function (key, value)
			value = value:match('^%s*(.-)%s*$') -- Trim whitespace
			-- Allow blank first parameters, as the wikitext template does this.
			if value ~= '' or key == 1 then
				return value
			end
		end
	})

	-- Sort the arguments.
	local page
	local sections, options = {}, {}
	for k, v in pairs(args) do
		if k == 1 then
			-- Doing this in the loop because of a bug in [[Module:Arguments]]
			-- when using pairs with deleted arguments.
			page = v
		elseif type(k) == 'number' then
			sections[k] = v
		else
			options[k] = v
		end
	end

	-- Compress the sections array.
	local function compressArray(t)
		local nums, ret = {}, {}
		for num in pairs(t) do
			nums[#nums + 1] = num
		end
		table.sort(nums)
		for i, num in ipairs(nums) do
			ret[i] = t[num]
		end
		return ret
	end
	sections = compressArray(sections)

	return p._main(page, sections, options)
end

return p