Changeset 119842 in spip-zone


Ignore:
Timestamp:
Jan 20, 2020, 4:38:49 AM (5 weeks ago)
Author:
Cerdic
Message:

utiliser le parseur PHP pour decoder le fichier de langue et recuperer les commentaires, c'est plus robuste

Location:
_plugins_/trad-lang/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/trad-lang/trunk

    • Property subgit:lock:ae8cf44afdf97c5848aefeecc760c00c73f8c08c deleted
    • Property subgit:lock:45a4c6d5ffdd522ad2b9578d338873a7d6f109e4 set to 2020-01-20T09:05:35.901
  • _plugins_/trad-lang/trunk/inc/salvatore_lecteur.php

    r119839 r119842  
    529529
    530530        $contenu = file_get_contents($fichier_lang);
    531 
    532         $tab = preg_split("/\r\n|\n\r|;\n|\n\/\/|\(\n|\n\);\n|\'\,\n|\n[\s\t]*(\')|\/\/[\s\t][0-9A-Z]\n[\s\t](\')/", $contenu, '-1', PREG_SPLIT_NO_EMPTY);
    533 
    534         $liste_trad = array();
    535         reset($tab);
    536 
    537         while (list(, $ligne) = each($tab)){
    538                 $ligne = str_replace("\'", '', $ligne);
    539                 if (strlen($ligne)>0){
    540                         if (preg_match("/(.*?)\'[\s\t]*=>[\s\t]*\'(.*?)\'[\s\t]*,{0,1}[\s\t]*(#.*)?/ms", $ligne, $matches)){
    541                                 if (isset($matches[1]) and isset($matches[3]) and strlen(trim($matches[3]))>0){
    542                                         list(, $comm) = explode('#', $matches[3]);
    543                                         $liste_trad[$matches[1]] = trim($comm);
    544                                 }
    545                         }
    546                 }
    547         }
    548         reset($liste_trad);
    549         return $liste_trad;
     531        $tokens = token_get_all($contenu);
     532        $comments = array();
     533
     534        // allons jusqu'au debut du tableau
     535        while (count($tokens)) {
     536                $token = array_shift($tokens);
     537                if ($token[0] === T_ARRAY) {
     538                        break;
     539                }
     540        }
     541
     542        $last_tring = '';
     543        $index = '';
     544        while (count($tokens)){
     545                $token = array_shift($tokens);
     546                switch ($token[0]) {
     547                        case T_CONSTANT_ENCAPSED_STRING:
     548                                $last_tring = $token[1];
     549                                break;
     550                        case T_DOUBLE_ARROW:
     551                                $index = trim($last_tring,"'\"");
     552                                break;
     553                        case T_WHITESPACE:
     554                                // si c'est une nouvelle ligne, on est plus interesse par le commentaire
     555                                if (strpos($token[1], "\n") !== false or strpos($token[1], "\r") !== false) {
     556                                        $index = '';
     557                                }
     558                                break;
     559                        case T_COMMENT:
     560                                if ($index and strpos($token[1], '#') === 0) {
     561                                        $comments[$index] = trim(substr($token[1],1));
     562                                }
     563                                break;
     564                }
     565        }
     566        return $comments;
    550567}
    551568
Note: See TracChangeset for help on using the changeset viewer.