Changeset 90416 in spip-zone


Ignore:
Timestamp:
Jun 21, 2015, 12:47:35 PM (6 years ago)
Author:
eric@…
Message:

Passage de la vérification en mode multi-lignes.
C'est une grosse avancée à tester maintenant.

Location:
_plugins_/langonet/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/langonet/trunk/inc/verifier_items.php

    r89774 r90416  
    66// déclaration d'items dans base/module.php
    77if (!defined('_LANGONET_ITEM_PHP_OBJET'))
    8         define("_LANGONET_ITEM_PHP_OBJET", '%=>\s*[\'"](?:([a-z0-9_]+):)([^\/ \']*)[\'"]%S');
     8        define("_LANGONET_ITEM_PHP_OBJET", '%=>\s*[\'"](?:([a-z0-9_]+):)([^\/ \']*)[\'"]%Sm');
    99// Fontions PHP _T ou _U avec apostrophe
    1010if (!defined('_LANGONET_ITEM_PHP_TRADA'))
    11         define("_LANGONET_ITEM_PHP_TRADA", '%_[TU]\s*[(]\s*\'(?:([a-z0-9_]+):)?([^\']*)\'\s*([^.,)]*[^)]*)%S');
     11        define("_LANGONET_ITEM_PHP_TRADA", '%_[TU]\s*[(]\s*\'(?:([a-z0-9_]+):)?([^\']*)\'\s*([^.,)]*[^)]*)%Sm');
    1212// Fontions PHP _T ou _U avec guillemet
    1313if (!defined('_LANGONET_ITEM_PHP_TRADG'))
    14         define("_LANGONET_ITEM_PHP_TRADG", '%_[TU]\s*[(]\s*"(?:([a-z0-9_]+):)?([^"]*)"\s*([^.,)]*[^)]*)%S');
     14        define("_LANGONET_ITEM_PHP_TRADG", '%_[TU]\s*[(]\s*"(?:([a-z0-9_]+):)?([^"]*)"\s*([^.,)]*[^)]*)%Sm');
    1515
    1616// Items de langue dans les fichiers HTML
     17
    1718// balise <:module:raccourci:> et toutes les formes admises avec paramètres et filtres
    1819if (!defined('_LANGONET_ITEM_HTML_BALISE'))
    19         define("_LANGONET_ITEM_HTML_BALISE", "%<:(?:([a-z0-9_-]+):)?((?:[^:<>|{]+(?:<[^>]*>)?)*)([^:>]*):>%s");
    20 // fonction |singulier_ou_pluriel{arg1, arg2, nb} pour chaque argument
     20        define("_LANGONET_ITEM_HTML_BALISE", "%<:(?:([a-z0-9_-]+):)?((?:[^:<>|{]+(?:<[^>]*>)?)*)([^:>]*):>%sm");
     21// Fonction |singulier_ou_pluriel{arg1, arg2, nb} pour chaque argument. Le nb est indispensable pour la détection de
     22// l'arg2
    2123if (!defined('_LANGONET_ITEM_HTML_FILTRE_PLURIEL_1'))
    22         define("_LANGONET_ITEM_HTML_FILTRE_PLURIEL_1", "%\|singulier_ou_pluriel{(?:[\s]*(?:([a-z0-9_-]+):)?([a-z0-9_]+))[^}]*}%s");
     24        define("_LANGONET_ITEM_HTML_FILTRE_PLURIEL_1", "%\|singulier_ou_pluriel{(?:[\s]*(?:(?:#[A-Z_0-9]+{)*)(?:([a-z0-9_-]+):)?([a-z0-9_]+))([^,]*),%sm");
    2325if (!defined('_LANGONET_ITEM_HTML_FILTRE_PLURIEL_2'))
    24         define("_LANGONET_ITEM_HTML_FILTRE_PLURIEL_2", "%\|singulier_ou_pluriel{[^,]*,(?:[\s]*(?:([a-z0-9_-]+):)?([a-z0-9_]+))[^}]*}%s");
    25 // fonction _T
     26        define("_LANGONET_ITEM_HTML_FILTRE_PLURIEL_2", "%\|singulier_ou_pluriel{[^,]*,(?:[\s]*(?:(?:#[A-Z_0-9]+{)*)(?:([a-z0-9_-]+):)?([a-z0-9_]+))([^,]*),%sm");
     27// Fonction _T
    2628if (!defined('_LANGONET_ITEM_HTML_FILTRE_T'))
    27         define("_LANGONET_ITEM_HTML_FILTRE_T", "%#[A-Z_0-9]+{(?:([a-z0-9_-]+):)?([a-z0-9_]+)}((?:\|\w+(?:{[^.]*})?)*)\|_T%Us");
     29        define("_LANGONET_ITEM_HTML_FILTRE_T", "%#[A-Z_0-9]+{(?:([a-z0-9_-]+):)?([a-z0-9_]+)}((?:\|\w+(?:{[^.]*})?)*)\|_T%Usm");
    2830
    2931// Items de langue dans les fichiers YAML
    3032if (!defined('_LANGONET_ITEM_YAML'))
    31         define("_LANGONET_ITEM_YAML", ",<:(?:([a-z0-9_-]+):)?([a-z0-9_]+):>,s");
     33        define("_LANGONET_ITEM_YAML", ",<:(?:([a-z0-9_-]+):)?([a-z0-9_]+):>,sm");
    3234
    3335// Items de langue dans les fichiers XML
    3436// -- pour plugin.xml
    3537if (!defined('_LANGONET_ITEM_PLUGINXML'))
    36         define("_LANGONET_ITEM_PLUGINXML", ",<titre>\s*(?:([a-z0-9_-]+):)?([a-z0-9_]+)\s*</titre>,is");
     38        define("_LANGONET_ITEM_PLUGINXML", ",<titre>\s*(?:([a-z0-9_-]+):)?([a-z0-9_]+)\s*</titre>,ism");
    3739// -- pour paquet.xml
    3840if (!defined('_LANGONET_ITEM_PAQUETXML'))
    39         define("_LANGONET_ITEM_PAQUETXML", ",titre=['\"](?:([a-z0-9_-]+):)?([a-z0-9_]+)['\"],is");
     41        define("_LANGONET_ITEM_PAQUETXML", ",titre=['\"](?:([a-z0-9_-]+):)?([a-z0-9_]+)['\"],ism");
    4042// -- pour les autres fichiers XML
    4143// TODO : comment faire marcher le fait que le tag est le même (contenu) et que les quotes aussi (attribut)
    4244// TODO : comment faire aussi pour ne pas capturer ces portions
    4345if (!defined('_LANGONET_ITEM_XML_CONTENU'))
    44         define("_LANGONET_ITEM_XML_CONTENU", ",<\w+>\s*(?:<:)*(?:([a-z0-9_-]+):)([a-z0-9_]+)(?::>)*\s*</\w+>,is");
     46        define("_LANGONET_ITEM_XML_CONTENU", ",<\w+>\s*(?:<:)*(?:([a-z0-9_-]+):)([a-z0-9_]+)(?::>)*\s*</\w+>,ism");
    4547if (!defined('_LANGONET_ITEM_XML_ATTRIBUT'))
    46         define("_LANGONET_ITEM_XML_ATTRIBUT", ",\w+=['\"](?:([a-z0-9_-]+):)([a-z0-9_]+)['\"],is");
     48        define("_LANGONET_ITEM_XML_ATTRIBUT", ",\w+=['\"](?:([a-z0-9_-]+):)([a-z0-9_]+)['\"],ism");
    4749
    4850$GLOBALS['langonet_regexp'] = array(
     
    146148
    147149        foreach ($fichiers as $_fichier) {
    148                 if ($contenu = file($_fichier)) {
     150                if ($contenu = file_get_contents($_fichier)) {
    149151                        $type_fichier = identifier_type_fichier($_fichier);
    150152                        if (isset($GLOBALS['langonet_regexp'][$type_fichier])) {
    151153                                $regexps = $GLOBALS['langonet_regexp'][$type_fichier];
    152                                 foreach ($contenu as $_no_ligne => $_ligne) {
    153                                         foreach ($regexps as $_regexp) {
    154                                                 if (preg_match_all($_regexp, $_ligne, $matches, PREG_OFFSET_CAPTURE)) {
    155                                                         foreach ($matches[0] as $_cle => $_expression) {
    156                                                                 $occurrence[0] = $_expression[0];
    157                                                                 $occurrence[1] = $matches[1][$_cle][0];
    158                                                                 $occurrence[2] = $matches[2][$_cle][0];
    159                                                                 $occurrence[3] = isset($matches[3]) ? $matches[3][$_cle][0] : '';
    160                                                                 $occurrence[4] = $_expression[1];
    161                                                                 $utilises = memoriser_occurrence($utilises, $occurrence, $_fichier, $_no_ligne, $_ligne, $_regexp);
    162                                                         }
     154                                // On stocke aussi le fichier à scanner sous forme d'un tableau de lignes afin de rechercher
     155                                // les numéros de ligne et de colonne des occurrences
     156                                $lignes = file($_fichier);
     157                                foreach ($regexps as $_regexp) {
     158                                        if (preg_match_all($_regexp, $contenu, $matches, PREG_OFFSET_CAPTURE)) {
     159                                                foreach ($matches[0] as $_cle => $_expression) {
     160                                                        $occurrence[0] = $_expression[0];
     161                                                        $occurrence[1] = $matches[1][$_cle][0];
     162                                                        $occurrence[2] = $matches[2][$_cle][0];
     163                                                        $occurrence[3] = isset($matches[3]) ? $matches[3][$_cle][0] : '';
     164                                                        // Recherche de la ligne et de la colonne à partir de l'offset global de début
     165                                                        // de l'expression
     166                                                        list($ligne, $no_ligne, $no_colonne) = rechercher_ligne($_expression[1], $lignes);
     167                                                        $occurrence[4] = $no_colonne;
     168                                                        $utilises = memoriser_occurrence($utilises, $occurrence, $_fichier, $no_ligne, $ligne, $_regexp);
    163169                                                }
    164170                                        }
     
    198204
    199205        return $type;
     206}
     207
     208
     209function rechercher_ligne($offset, $lignes) {
     210
     211        $no_ligne = $no_colonne = 0;
     212        $ligne = $lignes[0];
     213
     214        $somme_ligne = 0;
     215        foreach ($lignes as $_no_ligne => $_ligne) {
     216                $longueur_ligne = strlen($_ligne);
     217                $somme_ligne += $longueur_ligne;
     218                if ($somme_ligne > $offset) {
     219                        // on a trouvé la ligne
     220                        $ligne = $_ligne;
     221                        $no_ligne = $_no_ligne;
     222                        // il faut déterminer la colonne
     223                        $no_colonne = $longueur_ligne - ($somme_ligne-$offset);
     224                        break;
     225                }
     226        }
     227
     228        return array($ligne, $no_ligne, $no_colonne);
    200229}
    201230
     
    276305        AND !$raccourci_partiellement_variable
    277306        AND (($regexp == _LANGONET_ITEM_HTML_FILTRE_T)
    278                 OR in_array($regexp, $GLOBALS['langonet_regexp']['php']))) {
    279                         // Cas HTML #VAL{xxx}|yyy|_T dynamique ou PHP _T("xxx:$yyy")
     307                OR ($regexp == _LANGONET_ITEM_HTML_FILTRE_PLURIEL_1)
     308                OR ($regexp == _LANGONET_ITEM_HTML_FILTRE_PLURIEL_2)
     309                OR in_array($regexp, $GLOBALS['langonet_regexp']['php']))       ) {
     310                        // Cas HTML ou PHP dynamique
    280311                        $raccourci_partiellement_variable = true;
    281312        }
     
    300331        $utilisations['suffixes'][$item] = $raccourci_partiellement_variable;
    301332        $utilisations['variables'][$item] = $raccourci_totalement_variable;
     333
     334        // Construction d'une liste plate pour debug
     335        $occurrence[] = $no_ligne;
    302336        $utilisations['debug'][] = $occurrence;
    303337
  • _plugins_/langonet/trunk/paquet.xml

    r89780 r90416  
    22        prefix="langonet"
    33        categorie="outil"
    4         version="1.2.3"
     4        version="1.3.0"
    55        etat="test"
    66        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.