« Module:Linguistique » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
Aucun résumé des modifications
0x010D (discussion | contributions)
mAucun résumé des modifications
Ligne 5 : Ligne 5 :


local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
local function wordor(lang)
return 'ou'
end
local function comma(lang)
return ', '
end
function p.fullstop(lang)
return '. '
end
local function wordand(lang)
return ' et '
end


local function wordsep(lang) -- default separator between words
-- i18n
return ' '
local wordor = ' ou '
end
local wordand = ' et '
local comma = ', '
local fullstop = '. '
local wordsep = ' '


local function isin(str, pattern)
local function isin(str, pattern)
Ligne 114 : Ligne 102 :
end
end


function p.conj(args, conjtype, lang)
function p.quickconj(args, conjtype)
local separator, conjunction
-- cas où separator ~= conj
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, conjunction, separator)
end
-- autres cas
if conjtype == 'comma' then
separator = comma
else
separator = conjtype
end
return table.concat(args, separator)
end
 
function p.conj(args, conjtype)
if (not args) or (#args == 0) then
if (not args) or (#args == 0) then
return nil
return nil
Ligne 125 : Ligne 134 :
end
end
args = newargs
args = newargs
if conjtype == 'comma' then
return p.quickconj(newargs, conjtype, lang)
return mw.text.listToText(args, comma(lang), comma(lang))
elseif conjtype == 'or' then
return mw.text.listToText(args, comma(lang), wordor(lang)  .. wordsep(lang))
elseif conjtype == 'explicit or' then -- adds "or" betwen all words when the context can be confusing
return mw.text.listToText(args, wordor(lang) .. wordsep(lang), wordor(lang)  .. wordsep(lang))
elseif conjtype then
return mw.text.listToText(args, conjtype, conjtype)
else
return mw.text.listToText(args, comma(lang), wordand(lang) .. wordsep(lang))
end
end
 
function p.quickconj(args, conjtype) -- ne marche qui si les arguments sont une séquence Lua valide
local separator, conjunction
if (not conjtype) or conjtype == 'and' then
separator, conjunction = ', ', ' et '
elseif conjtype == 'or' then
separator, conjunction = ', ', ' ou '
elseif conjtype == 'comma' then
separator, conjunction = ', ', ', '
else
separator, conjunction = conjtype, conjtype
end
return mw.text.listToText(args, separator, conjunction)
end
end
function p.conjfromWiki(frame)
function p.conjfromWiki(frame)
args = frame.args
args = frame.args

Version du 29 septembre 2014 à 19:03

-- module d'origine multilingue (voir wikidata:Module:Linguistic, d'où une structure d'apparence un peu comple

local p = {} local lang = 'fr'

local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'

-- i18n local wordor = ' ou ' local wordand = ' et ' 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 langisin(str, lang) return isin(str, lang .. ' ') -- space is necessary to avoid false positives like zh in zh-hans end

local function processgender(str) if (str == 'f') or (str == 'fem') or (str == 'feminine') then return 'feminine' elseif (str == 'n') or (str == 'neutral') then return 'neutral' else return 'masculine' 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 then return isin(vowels, str[1]) end end

function p.inparentheses(str, lang) --todo: define language with exotic parentheses if str == then return str else return ' (' .. str .. ')' -- needs internationalization. --Needs leading space in Enlgish because as some languages do not use it, it is part of the formatting end end

function p.of(word, lang, raw, gender, number, determiner) -- rough translation of "of" in various languages -- note that the cases when on "of" is employed varies a lot among languages, so it is more prudent to call this from lang specific function only if not raw then raw = word end gender = processgender(gender) number = processnumber(number) -- raw is the string without the Wikiformatting so that it correctly analyses the string that is Italie -> 'italie' -- any way to automate this ?

-- todo: ca to replace Template:Of/ca

if lang == 'fr' then if number == 'plural' then return 'des ' .. word elseif p.vowelfirst(raw) then return 'de l\ .. word elseif gender == 'feminine' then return 'de la ' .. word elseif derterminer then return 'du ' .. word else return 'de ' .. word end end

end

function p.noungroup(noun, adj, lang) if not noun or noun == then return nil -- not so that it is not counted as a string by mw.listToText end if not adj or adj == then return noun end -- adjective before the noun if langisin('de de-at de-ch en en-ca en-gb pl zh zh-hans zh-hant zh-my zh-cn zh-sg zh-tw ', lang) then return adj .. wordsep(lang) .. noun -- adjective after the noun elseif langisin('fr fr-ca es it') then return noun .. wordsep(lang) .. adj else return noun ' (' .. adj .. ')' end end

function p.quickconj(args, conjtype) local separator, conjunction

-- cas où separator ~= conj 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, conjunction, separator) end -- autres cas if conjtype == 'comma' then separator = comma else separator = conjtype end return table.concat(args, separator) end

function p.conj(args, conjtype) if (not args) or (#args == 0) then return nil end local newargs = {} for i, j in pairs(args) do if type(j) ~= 'nil' then table.insert(newargs, j) end end args = newargs 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), end end end return p.conj(newargs, lang, conjtype) end

return p