Aitapihikewin:Linguistique

Utilisation

Fonctions exportables (liste incomplète) :

  • vowelfirst(str) retourne true si le premier caractère de la chaîne est une voyelle.
  • inparentheses(str, lang, space), si str est nil, retourne nil, sinon, retourne str entourée de parenthèses et précédée du caractère ou de la chaîne précisée dans le paramètre space.
  • of(str, gender, number, determiner, raw) retourne "de " .. str ou d'une chaîne similaire mais plus correcte grammaticalement. Paramètres :
  • str la chaîne de départ
  • gender (m ou (f) pour adaptation grammaticale ("du", "de la"). Défaut : "n".
  • number (s ou p) pour les accords grammaticaux ("des"). Défaut : s.
  • determiner (true ou false) pour adaptation grammaticale ("du" -> "de l'") Défaut : false.
  • raw chaîne non formatée pour savoir plus facilement si elle commence par une consonne ou une voyelle pour les élisions.
  • conj(args, conjtype) : concatène les arguments non nuls de la table args, en utilisant conjtype comme séparateur. Valeurs de conjtype :
  • "new line" : ajoute une ligne entre chaque arg, et met une majuscule au début de chaque argument.
  • "or" sépare l'avant-dernier et le dernier "or" par une " ou ", et les autres par une virgule.
  • "and" : sépare l'avant-dernier et le dernier "et" par une " ou ", et les autres par une virgule.
  • "comma" virgule entre chaque arg
  • autre chaîne tous les termes séparés par le terme indiqué
  • default = "and"
  • texteLien(str)
  • ucfirst(str) retourne la chaîne indiquée, en ajoutant une majuscule au premier caractère affiché

-- Ne fonctionne qu'en français. Si besoin est, on peut s'inspirer de [[wikidata:Module:Linguistic]] pour ajouter d'autres langues.local p = {}local lang = 'fr'local langobj = mw.language.new(lang)local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'-- i18nlocal 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 ) thenreturn trueendendlocal function processgender(str)if (str == 'f') or (str == 'fem') or (str == 'feminine') then return 'feminine'elseif (str == 'n') or (str == 'neutral') then return 'neutral'elsereturn 'masculine'endendlocal function processnumber(str)if (str == 'p') or (str == 'plural') thenreturn 'plural'else return 'singular'endendfunction p.vowelfirst (str)if str and #str > 0 then return isin(vowels, mw.ustring.lower(mw.ustring.sub(str, 1, 1))) endendfunction p.inparentheses(str, lang, space)if (not str) or str == '' thenreturn strendstr = '(' .. str .. ')'if not space thenspace = '&#32;'endreturn space .. strendfunction p.of(word, gender, number, determiner, raw) if not word thenword = ''endword = mw.text.trim( word )if not raw then  --texte non mis en forme pour gérer les élisionsraw = p.texteLien(word) or wordendgender = processgender(gender)number = processnumber(number)local vowel = p.vowelfirst(raw)local feminine = (gender== 'feminine')-- 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' thenreturn 'des ' .. wordelseif determiner and (determiner ~= '-') then-- de la, du // determiner ~= '-' veut dire renseigné comme videif vowel thenreturn 'de l’' .. wordelseif feminine thenreturn 'de la ' .. wordelsereturn 'du ' .. wordendelseif vowel thenreturn 'd’' .. wordelsereturn 'de ' .. wordendendendfunction p.noungroup(noun, adj)if not noun or noun == '' then return nil -- not '' so that it is not counted as a string by mw.listToTextendreturn noun .. wordsep(lang) .. adj -- lorsque c'est en françaisendfunction p.quickconj(args, conjtype)local separator, conjunction-- cas où separator ~= conjif type(conjtype) == 'function' thenconjtype = conjtype()endif (not conjtype) or conjtype == 'and' thenseparator, conjunction = comma, wordandelseif conjtype == 'or' thenseparator, conjunction = comma, wordorendif (separator and conjunction) thenreturn  mw.text.listToText(args, separator, conjunction)end-- autres casif conjtype == 'comma' thenseparator = commaelseif conjtype == 'new line' thenseparator = '<br />'for i, j in pairs(args) do -- ajoute une majusculeargs[i] = p.ucfirst(j)endelseseparator = conjtypeendreturn table.concat(args, separator)endfunction p.conj(args, conjtype)if (not args) thenreturn nilendlocal newargs = {}for i, j in pairs(args) doif type(j) ~= 'nil' thentable.insert(newargs, j)endendif #newargs == 0 thenreturn nilendreturn p.quickconj(newargs, conjtype, lang)end function p.conjfromWiki(frame)args = frame.argsif not args or not args[1] thenargs = mw.getCurrentFrame():getParent().argsendlocal conjtype = args.typenewargs = {}  -- transform args metatable into a table so it can be concetenatedfor i, j in pairs(args) doif type(i) == 'number' thenj = mw.text.trim(j)if j ~= '' thentable.insert(newargs, j)endelse if i ~= 'type' and i ~= 'lang' then return error('bad parameter in template:Conj:' .. i), '[[Category:Pages with incorrect template usage/Conj|A]]'endendendreturn p.conj(newargs, conjtype)endlocal function findcomplement(str, beginswith) -- retourne le nom principal et le complément du nom ou nil et nil si écheclocal particles = {" de la ", " de l'", " des ", " de l’", " de ", " d’", " d'", " du "}if beginswith and (not mw.ustring.find(str, "^" .. beginswith)) thenreturn nilendfor i, pattern in pairs(particles) dolocal pos = mw.ustring.find(str, pattern)if pos thenlocal main = mw.ustring.sub(str, 1, pos -1)local comp = mw.ustring.sub(str, pos + string.len(pattern))return main, compendendreturn nilendfunction p.keepcomplement(str, beginswith) -- par exemple "gare de Lyon" -> "Lyon"local main, compl = findcomplement(str, beginswith)if compl thenreturn complendreturn strendfunction p.removecomplement(str, beginswith) -- par exemple "gare de Lyon" -> "gare"local main, compl = findcomplement(str, beginswith)if main thenreturn mainendreturn strend--[=[texteLien le lien intere initial '^[[lien|texte]]' de str et retourne : texte, lienSi 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' thenlocal lien, texte = str:match( '^%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )if not lien thenlien, texte = str:match( '^%b<>%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )endif lien thenlocal testlien = string.lower( lien )local fichier = string.match( testlien, '^fichier:' ) or  string.match( testlien, '^image:' )or  string.match( testlien, '^file:' )if not fichier thentexte = ( texte ~= '' and texte ) or lienreturn texte, lienendendendreturn nilendfunction p.ucfirst(str)if (type (str ) ~= 'string') or (string == "") thenreturn strendlocal strTemp, tag, tagTemp = str, ''-- sépare les balises html initiales (span ou autres)while strTemp:match( '^%b<>' ) dotagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )tag = tag .. tagTempendlocal texte = p.texteLien( strTemp )if texte then-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lientexte = texte .. ']]'-- échappe les caractère magiquelocal pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )-- ajoute la majuscule au texte du lienstr = str:gsub( pattern, p.ucfirst( texte ), 1 )elsestr = tag .. langobj:ucfirst( strTemp )endreturn strendfunction p.ucfirstE(frame)return p.ucfirst(frame.args[1])end--[[function p.toascii(str)local convtable = mw.loadData("Module:Linguistique/ASCII")for i, j in pairs(convtable) do -- manquent les majusculesstr = mw.ustring.gsub(str, '[' .. i .. ']', j)endreturn strend]]-- return p
🔥 Top keywords: OtitikowinApokwaratcicWikipetcia:Kaskina mamo awikKotakahi:Modifications récentesKotakahi:Mes discussionsKitci mokoman askiWikipetciaWikipetcia:WaskapiwinNatisinahikaniwoc:Bilgine-sor-.jpgManitobaOsapwakanKotakahi:RechercheMicta sipiKe ici aimihitonaniwok MediaWiki:Common.cssKanataKisisike tcipakwan askikwIckwatemWitcihici:Créer un articleRikwatoJemmy Echaquan-DubéJoyce EchaquanTipinKa wasikototc pisimwNikickatatowipitcikanaAsatiWikipetcia:Ke nanakatisitcAtikamekw pisimwMitcimKapeciwinPekopiwanPisimwSylvan LakePakekanJapanOtcakamoOspitonAtikamekw arimwewinAitapihikewin:YesnoPiciwKakone pisimwNatisinahikaniwoc:Bilgine-sor.jpgIndaKa notcitatc:KwamikagamiOrilliaJean-Pierre MoarOntarioKe ici aimihitonaniwok notcita iriniw:WasikonSuzanne Pineshish OttawaWapikon pisimwInnusWikipetcia:Chasse photographiqueFinlandeCarmen DubéTipapitcikesinihikan:M/DocumentationTakapikenikanicicWapitowapinanOmikwKaawtosiskak SakihikanKitotakanatikwRichmond HillKitci icihowinWamin ka kinkomakisitcTurkiaOmemewAsati otcepikasoRocky Mountain HouseTipahikinatikwTipapitcikesinihikan:DelinkAlbany RIAskiOtatakon pisimwVerdunWackeciwOnimiskiw ickoteLanaudierePimerikockwatcicTipanictawin:Miro tipatcimowictewAkokatcicOtonWapowanArthur QuoquochiKarkonacicAitapihikewin:StringMasinahikanKinokepitcikanMaskinoceCiwominanCoweminakModèle:Géolocalisation/DocumentationTcimanMediaWiki:Common.cssMediaWiki:Common.jsOtehimin pisimwNikikw PisimwWaskarentamakanMasinactetcitcikanOcakiSipiOtitikowin/Tipatcimoctakewina