Changeset 118335 in spip-zone


Ignore:
Timestamp:
Oct 29, 2019, 10:49:55 AM (5 months ago)
Author:
cedric@…
Message:

Refactoring de la fonction de decoupe pour plus de lisibilite et efficacite (eviter des preg_match, et eviter de recouper tout a[] a chaque passage quand maxlen=0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/traduire_texte/trunk/inc/traduire_texte.php

    r118323 r118335  
    6969
    7070        $prep = html2unicode($texte);
    71         $options = $html ? (PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) : PREG_SPLIT_NO_EMPTY;
    72         $prep = preg_split(",(<p\b[^>]*>),i", $prep, -1, $options);
    73 
    74         $last = ''; // remettre les <p> en début de ligne.
    75         foreach ($prep as $line){
    76                 if ($html){
    77                         if (preg_match(",^<p\b[^>]*>$,i", $line)){
    78                                 $last .= $line;
    79                                 continue;
    80                         } else {
    81                                 $line = $last . $line;
    82                                 $last = '';
     71        $prep = preg_split(",(<p\b[^>]*>),i", $prep, -1, PREG_SPLIT_DELIM_CAPTURE);
     72        // 0, 2, 4, 6... : le texte
     73        // 1, 3, 5, 7... : les separateurs <p..>
     74
     75        for ($i=0;$i<count($prep);$i+=2) {
     76                // remettre le <p...> en debut de ligne si besoin
     77                $line = (($html and $i>0) ? $prep[$i-1] : '') . $prep[$i];
     78                if (strlen($line)) {
     79                        if (!$html){
     80                                $line = preg_replace(",<[^>]*>,i", " ", $line);
    8381                        }
    84                 } else {
    85                         $line = preg_replace(",<[^>]*>,i", " ", $line);
    86                 }
    87 
    88                 if ($maxlen){
    89                         // max line = XXX chars
    90                         $a = array();
    91                         while (mb_strlen($line)>$maxlen){
    92                                 $len = intval($maxlen*0.6); // 60% de la longueur
    93                                 $debut = mb_substr($line, 0, $len);
    94                                 $suite = mb_substr($line, $len);
    95                                 $point = mb_strpos($suite, '.');
    96 
    97                                 // chercher une fin de phrase pas trop loin
    98                                 // ou a defaut, une virgule ; au pire un espace
    99                                 if ($point===false){
    100                                         $point = mb_strpos(preg_replace('/[,;?:!]/', ' ', $suite), ' ');
     82
     83                        if ($maxlen){
     84                                $a = array();
     85                                // max line = XXX chars
     86                                while (mb_strlen($line)>$maxlen){
     87                                        $len = intval($maxlen*0.6); // 60% de la longueur
     88                                        $debut = mb_substr($line, 0, $len);
     89                                        $suite = mb_substr($line, $len);
     90                                        $point = mb_strpos($suite, '.');
     91
     92                                        // chercher une fin de phrase pas trop loin
     93                                        // ou a defaut, une virgule ; au pire un espace
     94                                        if ($point===false){
     95                                                $point = mb_strpos(preg_replace('/[,;?:!]/', ' ', $suite), ' ');
     96                                        }
     97                                        if ($point===false){
     98                                                $point = mb_strpos($suite, ' ');
     99                                        }
     100                                        if ($point===false){
     101                                                $point = 0;
     102                                        }
     103                                        $a[] = trim($debut . mb_substr($suite, 0, 1+$point));
     104                                        $line = mb_substr($line, $len+1+$point);
    101105                                }
    102                                 if ($point===false){
    103                                         $point = mb_strpos($suite, ' ');
     106                                foreach ($a as $l){
     107                                        $liste[md5($l)] = $l;
    104108                                }
    105                                 if ($point===false){
    106                                         $point = 0;
    107                                 }
    108                                 $a[] = trim($debut . mb_substr($suite, 0, 1+$point));
    109                                 $line = mb_substr($line, $len+1+$point);
    110109                        }
    111                 }
    112                 $a[] = trim($line);
    113 
    114                 foreach ($a as $l){
    115                         $liste[md5($l)] = $l;
    116                 }
     110                        $line = trim($line);
     111                        $liste[md5($line)] = $line;
     112
     113                }
     114
    117115        }
    118116
Note: See TracChangeset for help on using the changeset viewer.