Changeset 31296 in spip-zone


Ignore:
Timestamp:
Sep 2, 2009, 10:44:09 PM (10 years ago)
Author:
fil@…
Message:

corrections pour rendre la correction des guillemets moins vorace

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/typo_guillemets/typo_guillemets_fonctions.php

    r10385 r31296  
    1 <?php
     1<?php
    22/*
    33Fichier de formatage typographique des guillemets, par Vincent Ramos
     
    2020*/
    2121
    22 function typo_guillemets_remplacements($texte){
     22function typo_guillemets_remplacements($texte) {
     23
     24        // si le texte ne contient pas de guill droit
     25        // ou s'il contient deja des guillemets élaborés
     26        // on ne touche pas
     27        if ((strpos($texte, '"') === false)
     28        OR (strpos($texte, '&#171;') !== false)
     29        OR (strpos($texte, '&#187;') !== false)
     30        OR (strpos($texte, '&#8220;') !== false)
     31        OR (strpos($texte, '&#8221;') !== false)
     32        )
     33                return $texte;
     34
    2335        switch ($GLOBALS['spip_lang']){
    2436                case 'fr':
    25                         $guilles="&laquo;&nbsp;$1&nbsp;&raquo;"; //LRTEUIN
     37                        $guilles="&laquo;&nbsp;$2&nbsp;&raquo;"; //LRTEUIN
    2638                break;
    2739//              case 'ar':
     
    2941//              break;
    3042                case 'bg':
    31                         $guilles="&bdquo;$1&ldquo;";
     43                        $guilles="&bdquo;$2&ldquo;";
    3244                break;
    3345//              case 'br':
     
    3850//              break;
    3951                case 'ca':
    40                         $guilles="&laquo;$1&raquo;";
     52                        $guilles="&laquo;$2&raquo;";
    4153                break;
    4254                case 'cpf':
    43                         $guilles="&laquo;&nbsp;$1&nbsp;&raquo;";
     55                        $guilles="&laquo;&nbsp;$2&nbsp;&raquo;";
    4456                break;
    4557//              case 'cpf_hat':
     
    4759//              break;
    4860                case 'cs':
    49                         $guilles="&bdquo;$1&ldquo;";
     61                        $guilles="&bdquo;$2&ldquo;";
    5062                break;
    5163                case 'da':
    52                         $guilles="&raquo;$1&laquo;";
     64                        $guilles="&raquo;$2&laquo;";
    5365                break;
    5466                case 'de':
    55                         $guilles="&bdquo;$1&ldquo;"; //ou "&raquo;$1&laquo;" // LRTEUIN
     67                        $guilles="&bdquo;$2&ldquo;"; //ou "&raquo;$2&laquo;" // LRTEUIN
    5668                break;
    5769                case 'en':
    58                         $guilles="&ldquo;$1&rdquo;"; //LRTEUIN
     70                        $guilles="&ldquo;$2&rdquo;"; //LRTEUIN
    5971                break;
    6072                case 'eo':
    61                         $guilles="&laquo;$1&raquo;";
     73                        $guilles="&laquo;$2&raquo;";
    6274                break;
    6375                case 'es':
    64                         $guilles="&laquo;$1&raquo;";
     76                        $guilles="&laquo;$2&raquo;";
    6577                break;
    6678//              case 'eu':
     
    7789//              break;
    7890                case 'hu':
    79                         $guilles="&bdquo;$1&rdquo;";
     91                        $guilles="&bdquo;$2&rdquo;";
    8092                break;
    8193                case 'it':
    82                         $guilles="&laquo;$1&raquo;";
     94                        $guilles="&laquo;$2&raquo;";
    8395                break;
    8496                case 'it_fem':
    85                         $guilles="&laquo;$1&raquo;";
     97                        $guilles="&laquo;$2&raquo;";
    8698                break;
    8799                case 'ja':
    88                         $guilles="&#12300;$1&#12301;";
     100                        $guilles="&#12300;$2&#12301;";
    89101                break;
    90102//              case 'lb':
     
    92104//              break;
    93105                case 'nl':
    94                         $guilles="&bdquo;$1&rdquo;";
     106                        $guilles="&bdquo;$2&rdquo;";
    95107                break;
    96108//              case 'oc_auv':
     
    119131//              break;
    120132                case 'pl':
    121                         $guilles="&bdquo;$1&rdquo;";
     133                        $guilles="&bdquo;$2&rdquo;";
    122134                break;
    123135                case 'pt':
    124                         $guilles="&laquo;$1&raquo;";
     136                        $guilles="&laquo;$2&raquo;";
    125137                break;
    126138                case 'pt_br':
    127                         $guilles="&laquo;$1&raquo;";
     139                        $guilles="&laquo;$2&raquo;";
    128140                break;
    129141                case 'ro':
    130                         $guilles="&bdquo;$1&rdquo;";
     142                        $guilles="&bdquo;$2&rdquo;";
    131143                break;
    132144                case 'ru':
    133                         $guilles="&laquo;$1&raquo;";
     145                        $guilles="&laquo;$2&raquo;";
    134146                break;
    135147                case 'tr':
    136                         $guilles="&laquo;$1&raquo;";
     148                        $guilles="&laquo;$2&raquo;";
    137149                break;
    138150//              case 'vi':
     
    140152//              break;
    141153                case 'zh':
    142                         $guilles="&#12300;$1&#12301;"; // ou "&ldquo;$1&rdquo;" en chinois simplifie
     154                        $guilles="&#12300;$2&#12301;"; // ou "&ldquo;$2&rdquo;" en chinois simplifie
    143155                break;
    144156                default:
    145                         $guilles="&ldquo;$1&rdquo;";
     157                        $guilles="&ldquo;$2&rdquo;";
    146158        }
    147159
    148 $trouve = array(
    149         '/="(.*?)"/', // 1. Echappement des guillemets a l'interieur de balises
    150         '/"\s?(.*?)\s?"/', // 2. Remplacement des autres paires de guillemets (et suppression des espaces apres/avant)
    151         '/@@GUILLEMETS_ECHAPPES@@/' // 3. Restitution des guillemets a l'interieur de balises
     160        // on echappe les " dans les tags ;
     161        // attention ici \01 est le caractere chr(1), et \$0 represente le tag
     162        $texte = preg_replace(',<[^>]*"[^>]*(>|$),msSe', "str_replace('\"','\01', \"\$0\")", $texte);
    152163
    153                         );
    154 $remplace = array
    155                         (
    156         '=@@GUILLEMETS_ECHAPPES@@$1@@GUILLEMETS_ECHAPPES@@', // 1
    157         $guilles, // 2
    158         '"' // 3
    159                         );
    160 return preg_replace($trouve, $remplace, $texte);
     164        // on corrige les guill restants, qui sont par definition hors des tags
     165        // Un guill n'est pas pris s'il suit un caractere autre que espace, ou
     166        // s'il est suivi par un caractere de mot (lettre, chiffre)
     167        $texte = preg_replace('/(^|\s)"\s?([^"]*?)\s?"(\W|$)/S', '$1'.$guilles.'$3', $texte);
     168
     169        // et on remet les guill des tags
     170        return str_replace("\01", '"', $texte);
    161171}
     172
    162173?>
Note: See TracChangeset for help on using the changeset viewer.