Módulo:Linguística
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Este módulo é usado em mais de 80 000 páginas. (Ver Wikihelp:Predefinições em alto risco) Para evitar sobrecargas desnecessárias ao servidor e outros transtornos, quaisquer mudanças devem ser previamente testadas, seja na predefinição de testes ou em Módulo:Linguística/Testes (ou ainda em sua página de testes). Por favor, sempre considere expor eventuais mudanças na página de discussão, antes de implementá-las. |
Utilização
Funções exportáveis (lista incompleta) :
vowelfirst(str)
devolvetrue
se o primeiro caractere da cadeia é uma vogal.
inparentheses(str, lang, space)
, simstr
é nil, devolve nil, senão, devolvestr
com parênteses e precedidos de um caracterespace
.
of(str, gender, number, determiner, raw)
devolve"de " .. str
ou de uma cadeia similar mais correcta gramaticalmente. Parâmetros:
str
A cadeia de iniciogender
(m
ou (f
) para adaptação gramática ("de", "da"). Padrão : "n".number
(s
oup
) para os acordos gramáticos ("des"). Padrão :s
.determiner
(true
oufalse
) para adaptação gramatical ("do" -> "da") Padrão : false.raw
cadeia não formatada para saber mais facilmente se ela começa com uma consonante ou uma vogal para ilustração.
conj(args, conjtype)
: concatenar os argumentos não nulos da tabelaargs
, em utilizaçãoconjtype
como separador. Valor de conjtype :
"new line"
: ajusta uma linha entre cada arg, e mete em maiúscula o inicio de cada argumento."or"
separa conjugações "e" por um " ou ", e os outros por uma virgula."and"
: separa conjugações "e" por um " ou ", e os outros por uma virgula."comma"
virgula entre cada argoutra cadeia
todas os termos separados pelo termo indicadodefault
= "and"
textoLink(str)
ucfirst(str)
devolve a cadeia indicada, com uma maiúscula adicionada ao primeiro caractere informado
Uso
Outra documentação:
-- de Wikidata:Module:Linguistic
-- some simple internationalization that can be called by other modules
local p = {}
local lang = 'pt'
local langobj = mw.language.new(lang)
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
-- i18n
local wordor = ' ou '
local wordand = ' e '
local comma = ', '
local fullstop = '. '
local wordsep = ' '
local function isin(str, pattern)
if str and pattern and mw.ustring.find(str, pattern, 1, true ) then
return true
end
end
local function processgender(str)
if (str == 'f') or (str == 'fem') or (str == 'feminino') then
return 'feminino'
elseif (str == 'n') or (str == 'neutro') then
return 'neutro'
else
return 'masculino'
end
end
local function processnumber(str)
if (str == 'p') or (str == 'plural') then
return 'plural'
else
return 'singular'
end
end
function p.vowelfirst (str)
if str and #str > 0 then return isin(vowels, mw.ustring.lower(mw.ustring.sub(str, 1, 1))) end
end
function p.inparentheses(str, lang, space)
if (not str) or str == '' then
return str
end
str = '(' .. str .. ')'
if not space then
space = ' '
end
return space .. str
end
function p.of(word, gender, number, determiner, raw)
if not word then
word = ''
end
word = mw.text.trim( word )
if not raw then --texte non mis en forme pour gérer les élisions
raw = p.texteLien(word) or word
end
gender = processgender(gender)
number = processnumber(number)
local vowel = p.vowelfirst(raw)
local feminine = (gender== 'feminino')
-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie'
-- any way to automate this ?
if number == 'plural' then
return 'dos ' .. word
elseif determiner and (determiner ~= '-') then-- de la, du // determiner ~= '-' veut dire renseigné comme vide
if vowel then
return 'da ' .. word
elseif feminine then
return 'de ' .. word
else
return 'do ' .. word
end
else
if vowel then
return 'de ' .. word
else
return 'de ' .. word
end
end
end
function p.noungroup(noun, adj)
if not noun or noun == '' then
return nil -- not '' so that it is not counted as a string by mw.listToText
end
return noun .. wordsep(lang) .. adj -- lorsque c'est en français
end
function p.quickconj(args, conjtype)
local separator, conjunction
-- cas où separator ~= conj
if type(conjtype) == 'function' then
conjtype = conjtype()
end
if (not conjtype) or conjtype == 'and' then
separator, conjunction = comma, wordand
elseif conjtype == 'or' then
separator, conjunction = comma, wordor
end
if (separator and conjunction) then
return mw.text.listToText(args, separator, conjunction)
end
-- autres cas
if conjtype == 'comma' then
separator = comma
elseif conjtype == 'new line' then
separator = '<br />'
for i, j in pairs(args) do -- ajoute une majuscule
args[i] = p.ucfirst(j)
end
else
separator = conjtype
end
return table.concat(args, separator)
end
function p.conj(args, conjtype)
if (not args) then
return nil
end
local newargs = {}
for i, j in pairs(args) do
if type(j) ~= 'nil' then
table.insert(newargs, j)
end
end
if #newargs == 0 then
return nil
end
return p.quickconj(newargs, conjtype, lang)
end
function p.conjfromWiki(frame)
args = frame.args
if not args or not args[1] then
args = mw.getCurrentFrame():getParent().args
end
local conjtype = args.type
newargs = {} -- transform args metatable into a table so it can be concetenated
for i, j in pairs(args) do
if type(i) == 'number' then
j = mw.text.trim(j)
if j ~= '' then
table.insert(newargs, j)
end
else
if i ~= 'type' and i ~= 'lang' then
return error('bad parameter in template:Conj:' .. i), '[[Categoria:!Páginas com uso incorrecto da predefinição/Conj|A]]'
end
end
end
return p.conj(newargs, conjtype)
end
local function findcomplement(str, beginswith) -- retourne le nom principal et le complément du nom ou nil et nil si échec
local particles = {" da ", " de ", " das ", " do ", " dos "}
if beginswith and (not mw.ustring.find(str, "^" .. beginswith)) then
return nil
end
for i, pattern in pairs(particles) do
local pos = mw.ustring.find(str, pattern)
if pos then
local main = mw.ustring.sub(str, 1, pos -1)
local comp = mw.ustring.sub(str, pos + string.len(pattern))
return main, comp
end
end
return nil
end
function p.keepcomplement(str, beginswith) -- par exemple "gare de Lyon" -> "Lyon"
local main, compl = findcomplement(str, beginswith)
if compl then
return compl
end
return str
end
function p.removecomplement(str, beginswith) -- par exemple "gare de Lyon" -> "gare"
local main, compl = findcomplement(str, beginswith)
if main then
return main
end
return str
end
--[=[
texteLien le lien intere initial '^[[lien|texte]]' de str et retourne : texte, lien
Si le lien est '[[texte]]', retourne : texte, texte.
Si str ne commence pas par un lien interwiki, retourne : nil
]=]
function p.texteLien( str )
if type( str ) == 'string' then
local lien, texte = str:match( '^%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
if not lien then
lien, texte = str:match( '^%b<>%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
end
if lien then
local testlien = string.lower( lien )
local fichier = string.match( testlien, '^ficheiro:' )
or string.match( testlien, '^imagem:' )
or string.match( testlien, '^file:' )
or string.match( testlien, '^image:' )
if not fichier then
texte = ( texte ~= '' and texte ) or lien
return texte, lien
end
end
end
return nil
end
function p.ucfirst(str)
if (type (str ) ~= 'string') or (string == "") then
return str
end
local strTemp, tag, tagTemp = str, ''
-- sépare les balises html initiales (span ou autres)
while strTemp:match( '^%b<>' ) do
tagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )
tag = tag .. tagTemp
end
local texte = p.texteLien( strTemp )
if texte then
-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lien
texte = texte .. ']]'
-- échappe les caractère magique
local pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )
-- ajoute la majuscule au texte du lien
str = str:gsub( pattern, p.ucfirst( texte ), 1 )
else
str = tag .. langobj:ucfirst( strTemp )
end
return str
end
function p.ucfirstE(frame)
return p.ucfirst(frame.args[1])
end
--[[
function p.toascii(str)
local convtable = mw.loadData("Módulo:Linguística/ASCII")
for i, j in pairs(convtable) do -- manquent les majuscules
str = mw.ustring.gsub(str, '[' .. i .. ']', j)
end
return str
end
]]--
return p