Module:Linguistique : Différence entre versions
m |
|||
Ligne 5 : | Ligne 5 : | ||
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ' | local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | -- i18n | |
− | + | local wordor = ' ou ' | |
− | + | 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, | + | 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 | ||
− | + | return p.quickconj(newargs, conjtype, lang) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
+ | |||
function p.conjfromWiki(frame) | function p.conjfromWiki(frame) | ||
args = frame.args | args = frame.args |
Version du 29 septembre 2014 à 19:03
La documentation pour ce module peut être créée à Module:Linguistique/doc
-- 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 [[:fr:Italie|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), '[[Category:Pages with incorrect template usage/Conj|A]]' end end end return p.conj(newargs, lang, conjtype) end return p