source: spip-zone/_plugins_/couteau_suisse/outils/typo_exposants.php @ 39010

Last change on this file since 39010 was 39010, checked in by patfr@…, 10 years ago

Changement d'url de Trac !

File size: 4.5 KB
Line 
1<?php
2// Filtre typographique exposants pour langue francaise
3// serieuse refonte 2006 : Patrice Vanneufville
4// Toutes les infos sur : http://www.spip-contrib.net/?article1564
5
6// TODO : raccourci pour les exposants et indices (Pouce^2 ou Pouce^2^, H_2O ou H_2_O ou H,,2,,O
7// exemple : http://zone.spip.org/wiki/WikiFormatting
8
9include_spip('inc/charsets');
10@define('_TYPO_sup', '<sup class="typo_exposants">\\1</sup>');
11@define('_TYPO_sup2', '\\1<sup class="typo_exposants">\\2</sup>');
12
13// cette fonction ne fonctionne que pour l'anglais
14// elle n'est pas appelee dans les balises html : html|code|cadre|frame|script|acronym|cite
15function typo_exposants_en($texte){
16        static $typo;
17        if(!$typo) $typo = array( array(
18                ',(?<=1)(st)\b,',
19                ',(?<=2)(nd)\b,',
20                ',(?<=3)(rd)\b,',
21                ',(?<=\d)(th)\b,',
22        ), array(
23                _TYPO_sup, _TYPO_sup, _TYPO_sup, _TYPO_sup,
24        ));
25        return preg_replace($typo[0], $typo[1], $texte);
26}
27
28// cette fonction ne fonctionne que pour le francais
29// elle n'est pas appelee dans les balises html : html|code|cadre|frame|script|acronym|cite
30function typo_exposants_fr($texte){
31        static $typo = NULL;
32        static $egrave; static $eaigu1; static $eaigu2; static $accents;
33        if (is_null($typo)) {
34                // en principe, pas besoin de : caractere_utf_8(232)
35                $egrave = unicode2charset('&#232;').'|&#232;|&egrave;';
36                $eaigu1 = unicode2charset('&#233;').'|&#233;|&eacute;';
37                $eaigu2 = unicode2charset('&#201;').'|&#201;|&Eacute;';
38                $accents = unicode2charset('&#224;&#225;&#226;&#228;&#229;&#230;&#232;&#233;&#234;&#235;&#236;&#237;&#238;&#239;&#242;&#243;&#244;&#246;&#249;&#250;&#251;&#252;');
39                $typo = array( array(
40                        '/(?<=\bM)e?(lles?)\b/',                // Mlle(s), Mme(s) et erreurs Melle(s)
41                        '/(?<=\bM)(gr|mes?)\b/',        // Mme(s) et Mgr
42                        '/(?<=\b[DP])(r)(?=[\s\.-])/',  // Dr, Pr suivis d'un espace d'un point ou d'un tiret
43
44                        '/\bm²\b/', '/(?<=\bm)([23])\b/',        // m2, m3, m²
45                        '/(?<=\b[Mm])([nd]s?)\b/',      // millions, milliards
46                        '/(?<=\bV)(ve)\b/', '/(?<=\bC)(ies?)\b/',       // Vve et Cie(s)
47                        "/(?<=\bS)(t(?:$eaigu1)s?)(?=\W)/", "/(?<=\W)(?:E|$eaigu2)ts\b/",        // Societes(s), Etablissements
48
49                        '/(?<=\b[1I])i?(ers?)\b/',      // 1er(s), Erreurs 1ier(s), 1ier(s)
50                        "/(?<=\b[1I])i?(?:e|$egrave)(res?)\b/", // Erreurs 1(i)ere(s) + accents
51                        '/(?<=\b1)(r?es?)\b/', // 1e(s), 1re(s)
52                        '/(?<=\b2)(nde?s?)\b/', // 2nd(e)(s)
53
54                        "/(\b[0-9IVX]+)i?(?:e|$egrave)?me(s?)\b/", // Erreurs (i)(e)me(s) + accents
55                        '/\b([0-9IVX]+)(es?)\b/', // 2e(s), IIIe(s)... (les 1(e?r?s?) ont deja ete remplaces)
56                        "/(?<![;$accents])\b(\d+|r|v)o(?=(?:&nbsp;|[\s,;:!\/\?\.-]))/", // recto, verso, primo, secondo, etc.
57                        '/(?<=\bM)(e)(?= [A-Z])/', // Maitre (suivi d'un espace et d'une majuscule)
58                ), array(
59                        _TYPO_sup, _TYPO_sup,           // Mlle(s), Mme(s), Mgr
60                        _TYPO_sup,              // Dr, Pr,
61
62                        'm<sup class="typo_exposants">2</sup>', _TYPO_sup,      // m2, m3, m²
63                        _TYPO_sup, _TYPO_sup, _TYPO_sup,        // Vve, Mn(s), Md(s), Bd(s), Cie(s)
64                        _TYPO_sup, '&#201;<sup class="typo_exposants">ts</sup>',        // Sté(s), Ets
65
66                        _TYPO_sup, _TYPO_sup, _TYPO_sup, // 1er et Cie
67                        _TYPO_sup,      // 2nd(e)(s)
68
69                        '$1<sup class="typo_exposants">e$2</sup>', // Erreurs me, eme, ème, ième + pluriels
70                        _TYPO_sup2, // 2e(s), IIIe(s)...
71                        '$1<sup class="typo_exposants">o</sup>', // ro, vo, 1o, 2o, etc.
72                        _TYPO_sup,      // Me
73                ));
74
75                if(defined('_CS_EXPO_BOFBOF')) {
76                        $typo[0] = array_merge($typo[0], array(
77                                '/(?<=\bS)(te?s?)(?=[\s\.-])/',  // St(e)(s) suivis d'un espace d'un point ou d'un tiret
78                                '/(?<=\bB)(x|se|ses)(?=[\s\.-])/',  // Bx, Bse(s) suivis d'un espace d'un point ou d'un tiret
79                                '/(?<=\b[Bb])(ds?)\b/',  '/(?<=\b[Ff])(gs?)\b/', // boulevard(s) et faubourgs(s)
80                        ));
81                        $typo[1] = array_merge($typo[1], array(
82                                _TYPO_sup, _TYPO_sup,   // St(e)(s), Bx, Bse(s)
83                                _TYPO_sup, _TYPO_sup,   // Bd(s) et Fg(s)
84                        ));
85                }
86        }
87        return preg_replace($typo[0], $typo[1], $texte);
88}
89
90function typo_exposants_echappe_balises_callback($matches) {
91 return cs_code_echappement($matches[1], 'EXPO');
92}
93
94// ici on est en pipeline post_typo
95function typo_exposants($texte){
96        if (!$lang = $GLOBALS['lang_objet']) $lang = $GLOBALS['spip_lang'];
97        if(!function_exists($fonction = 'typo_exposants_'.lang_typo($lang))) return $texte;
98        // prudence : on protege les balises <a> et <img>
99        if (strpos($texte, '<')!==false)
100                $texte = preg_replace_callback('/(<(a|img) [^>]+>)/Ums', 'typo_exposants_echappe_balises_callback', $texte);
101        $texte = cs_echappe_balises('html|code|cadre|frame|script|acronym|cite', $fonction, $texte);
102        return echappe_retour($texte, 'EXPO');
103}
104?>
Note: See TracBrowser for help on using the repository browser.