Modulo Lua che fu utilizzato soltanto da febbraio a marzo 2017 per transizione a Wikidata del template {{Software}}, per ricavare i linguaggi di programmazione.

Ora questo modulo è rimpiazzato dal Modulo:Software.

Vecchie istruzioni

Utilizzo

Non dovrebbe essere utilizzato direttamente nelle voci, ma il suo funzionamento è il seguente:

{{#invoke:Linguaggi di programmazione|main|attivatore|categorie|softwarelibero}}

Dove le uniche cose che devono variare:

attivatore
Se il campo è vuoto (senza spazi!) questo modulo si attiva. Se vi è del testo, il modulo non fa niente di particolare, salvo applicare alcune categorie nascoste.
categorie
Questo campo sarebbe il valore di {{Software|Categorie}}
softwarelibero
Questo campo sarebbe il valore di {{Software|SoftwareLibero}}

Il parametro attivatore è un hack per non scrivere due volte lo stesso elenco di linguaggi se la voce già li specificava manualmente. Analogamente si potrebbe non richiamare affatto questo modulo ma così facendo non verrebbero applicate utili categorizzazioni nascoste analoghe al concetto del template {{Controllo Wikidata}}.

Esempi

Non dovrebbe essere utilizzato nelle voci, ma un suo utilizzo può essere il seguente:

{{#invoke:Linguaggi di programmazione|main|c++|sì|sì}}

Dato che si è specificato l'attivatore (testo casuale, c++), allora questo modulo non fa nulla, se non applicare alcune categorie nascoste.


{{#invoke:Linguaggi di programmazione|main||sì|sì}}

Dato che non si è specificato l'attivatore, il modulo si attiva e stampa in output i linguaggi leggibili da Wikidata, categorizza la voce e applica alcune categorie nascoste.

Alcune voci beneficiarie

Pagine correlate


--[[
* Modulo per categorizzare il software in base al linguaggio di programmazione da Wikidata (P277)
* Testare in: Utente:Valerio Bozzolan/Sandbox2
* Ekiga: from: Q1131287
]]

local mWikidata = require('Modulo:Wikidata')
local p = {}

local languageSlug = {
	['Q15777'] = 'c',
	['Q2407'] = 'c++',
	['Q2370'] = 'c#',
	['Q8811'] = 'html',
	['Q2053'] = 'html5',
	['Q251'] = 'java',
	['Q2005'] = 'javascript',
	['Q207316'] = 'lua',
	['Q188531'] = 'objective-c',
	['Q59'] = 'php',
	['Q28865'] = 'python',
	['Q42478'] = 'perl',
	['Q5288'] = 'tcl',
	['Q726218'] = 'xul'
}

--[[
* Alcuni linguaggi non hanno ancora (o non necessitano) della categoria per il software proprietario
]]
local hasProprietaryCategory = {
	['c'] = true,
	['c++'] = true
}

local SEPARATOR = '<br />'

function p.main(frame)
	--[[
	* true → Una table
	]]
	local wd_languages = mWikidata._getClaims('P277')

	local operate       = frame.args[1]
	local categorizzare = frame.args[2]
	local libero        = frame.args[3]
	local s = ''
	local ok = true

	--[[
	* Emerge l'inutilità di Module:Arguments.
	*
	* Per ora si fa qualcosa solo se NON sono stati specificati linguaggi
	]]
	if operate then
		operate = mw.text.trim( frame.args[1] )
		operate = string.len(operate) < 1
	end

	--[[
	* operate     → noLanguages = true  → Si presume che non ci siano linguaggi
	* not operate → noLanguages = false → Ci sono già linguaggi applicati
	]]
	local noLanguages = operate

	if wd_languages then
		for i, language in pairs(wd_languages) do
			language = languageSlug[ mWikidata._formatStatement(language, {formatting = 'raw'}) ]
			if language then
				if operate then

					--[[
					* Di default non ha la categoria proprietaria
					]]
					if hasProprietaryCategory[language] == nil then
						hasProprietaryCategory[language] = false
					end

					local separator = i > 1 and SEPARATOR or ''

					s = s .. separator .. frame:expandTemplate{
						title = 'Software/Linguaggio',
						args = {
							language,
							categorizzare,
							libero,
							proprietaria_on = hasProprietaryCategory[language] and 'sì' or 'no'
						}
					}

					--[[
					* Si è applicato un linguaggio
					]]
					noLanguages = false
				end
			else
				--[[
				* Linguaggio non ancora previsto
				]]
				ok = false
			end
		end
		s = s .. '[[Categoria:Linguaggio di programmazione letto da Wikidata]]'
	else
		s = s .. '[[Categoria:Linguaggio di programmazione assente su Wikidata]]'
	end

	if noLanguages then
		if libero then
			libero = string.lower( mw.text.trim( libero ) )
			libero = libero == 'sì' or libero == 'si'
		end

		if libero then
			s = s .. '[[Categoria:Software libero senza linguaggio]]'
		else
			s = s .. '[[Categoria:Software senza linguaggio]]'
		end
	end

	if not ok then
		s = s .. '[[Categoria:Linguaggio di programmazione da Wikidata non previsto]]'
	end

	return s
end

return p