PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.3
MailPoet – Newsletters, Email Marketing, and Automation v5.34.3
5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / symfony / string / Inflector / FrenchInflector.php
mailpoet / vendor-prefixed / symfony / string / Inflector Last commit date
EnglishInflector.php 9 months ago FrenchInflector.php 2 years ago InflectorInterface.php 2 years ago index.php 2 years ago
FrenchInflector.php
97 lines
1 <?php
2 namespace MailPoetVendor\Symfony\Component\String\Inflector;
3 if (!defined('ABSPATH')) exit;
4 final class FrenchInflector implements InflectorInterface
5 {
6 private const PLURALIZE_REGEXP = [
7 // First entry: regexp
8 // Second entry: replacement
9 // Words finishing with "s", "x" or "z" are invariables
10 // Les mots finissant par "s", "x" ou "z" sont invariables
11 ['/(s|x|z)$/i', '\\1'],
12 // Words finishing with "eau" are pluralized with a "x"
13 // Les mots finissant par "eau" prennent tous un "x" au pluriel
14 ['/(eau)$/i', '\\1x'],
15 // Words finishing with "au" are pluralized with a "x" excepted "landau"
16 // Les mots finissant par "au" prennent un "x" au pluriel sauf "landau"
17 ['/^(landau)$/i', '\\1s'],
18 ['/(au)$/i', '\\1x'],
19 // Words finishing with "eu" are pluralized with a "x" excepted "pneu", "bleu", "émeu"
20 // Les mots finissant en "eu" prennent un "x" au pluriel sauf "pneu", "bleu", "émeu"
21 ['/^(pneu|bleu|émeu)$/i', '\\1s'],
22 ['/(eu)$/i', '\\1x'],
23 // Words finishing with "al" are pluralized with a "aux" excepted
24 // Les mots finissant en "al" se terminent en "aux" sauf
25 ['/^(bal|carnaval|caracal|chacal|choral|corral|étal|festival|récital|val)$/i', '\\1s'],
26 ['/al$/i', '\\1aux'],
27 // Aspirail, bail, corail, émail, fermail, soupirail, travail, vantail et vitrail font leur pluriel en -aux
28 ['/^(aspir|b|cor|ém|ferm|soupir|trav|vant|vitr)ail$/i', '\\1aux'],
29 // Bijou, caillou, chou, genou, hibou, joujou et pou qui prennent un x au pluriel
30 ['/^(bij|caill|ch|gen|hib|jouj|p)ou$/i', '\\1oux'],
31 // Invariable words
32 ['/^(cinquante|soixante|mille)$/i', '\\1'],
33 // French titles
34 ['/^(mon|ma)(sieur|dame|demoiselle|seigneur)$/', 'MailPoetVendor\\mes\\2s'],
35 ['/^(Mon|Ma)(sieur|dame|demoiselle|seigneur)$/', 'MailPoetVendor\\Mes\\2s'],
36 ];
37 private const SINGULARIZE_REGEXP = [
38 // First entry: regexp
39 // Second entry: replacement
40 // Aspirail, bail, corail, émail, fermail, soupirail, travail, vantail et vitrail font leur pluriel en -aux
41 ['/((aspir|b|cor|ém|ferm|soupir|trav|vant|vitr))aux$/i', '\\1ail'],
42 // Words finishing with "eau" are pluralized with a "x"
43 // Les mots finissant par "eau" prennent tous un "x" au pluriel
44 ['/(eau)x$/i', '\\1'],
45 // Words finishing with "al" are pluralized with a "aux" expected
46 // Les mots finissant en "al" se terminent en "aux" sauf
47 ['/(amir|anim|arsen|boc|can|capit|capor|chev|crist|génér|hopit|hôpit|idé|journ|littor|loc|m|mét|minér|princip|radic|termin)aux$/i', '\\1al'],
48 // Words finishing with "au" are pluralized with a "x" excepted "landau"
49 // Les mots finissant par "au" prennent un "x" au pluriel sauf "landau"
50 ['/(au)x$/i', '\\1'],
51 // Words finishing with "eu" are pluralized with a "x" excepted "pneu", "bleu", "émeu"
52 // Les mots finissant en "eu" prennent un "x" au pluriel sauf "pneu", "bleu", "émeu"
53 ['/(eu)x$/i', '\\1'],
54 // Words finishing with "ou" are pluralized with a "s" excepted bijou, caillou, chou, genou, hibou, joujou, pou
55 // Les mots finissant par "ou" prennent un "s" sauf bijou, caillou, chou, genou, hibou, joujou, pou
56 ['/(bij|caill|ch|gen|hib|jouj|p)oux$/i', '\\1ou'],
57 // French titles
58 ['/^mes(dame|demoiselle)s$/', 'MailPoetVendor\\ma\\1'],
59 ['/^Mes(dame|demoiselle)s$/', 'MailPoetVendor\\Ma\\1'],
60 ['/^mes(sieur|seigneur)s$/', 'MailPoetVendor\\mon\\1'],
61 ['/^Mes(sieur|seigneur)s$/', 'MailPoetVendor\\Mon\\1'],
62 // Default rule
63 ['/s$/i', ''],
64 ];
65 private const UNINFLECTED = '/^(abcès|accès|abus|albatros|anchois|anglais|autobus|bois|brebis|carquois|cas|chas|colis|concours|corps|cours|cyprès|décès|devis|discours|dos|embarras|engrais|entrelacs|excès|fils|fois|gâchis|gars|glas|héros|intrus|jars|jus|kermès|lacis|legs|lilas|marais|mars|matelas|mépris|mets|mois|mors|obus|os|palais|paradis|parcours|pardessus|pays|plusieurs|poids|pois|pouls|printemps|processus|progrès|puits|pus|rabais|radis|recors|recours|refus|relais|remords|remous|rictus|rhinocéros|repas|rubis|sans|sas|secours|sens|souris|succès|talus|tapis|tas|taudis|temps|tiers|univers|velours|verglas|vernis|virus)$/i';
66 public function singularize(string $plural) : array
67 {
68 if ($this->isInflectedWord($plural)) {
69 return [$plural];
70 }
71 foreach (self::SINGULARIZE_REGEXP as $rule) {
72 [$regexp, $replace] = $rule;
73 if (1 === \preg_match($regexp, $plural)) {
74 return [\preg_replace($regexp, $replace, $plural)];
75 }
76 }
77 return [$plural];
78 }
79 public function pluralize(string $singular) : array
80 {
81 if ($this->isInflectedWord($singular)) {
82 return [$singular];
83 }
84 foreach (self::PLURALIZE_REGEXP as $rule) {
85 [$regexp, $replace] = $rule;
86 if (1 === \preg_match($regexp, $singular)) {
87 return [\preg_replace($regexp, $replace, $singular)];
88 }
89 }
90 return [$singular . 's'];
91 }
92 private function isInflectedWord(string $word) : bool
93 {
94 return 1 === \preg_match(self::UNINFLECTED, $word);
95 }
96 }
97