Changeset 54051 in spip-zone


Ignore:
Timestamp:
Nov 5, 2011, 12:02:59 PM (8 years ago)
Author:
esj@…
Message:

langonet Cette version 0.7.1 repère à présent dans les squelettes les chaînes de langue possédant des références à des champs. Ceux-ci sont alors mis comme argument de l'item de langue substitué automatiquement à cette chaîne. Par exemple un squelette comportant:

<:Titres des (#TOTAL_BOUCLE) interventions:>

va être transformé par le shell script produit par Langonet en:

<:titres_total_boucle{total_boucle=#TOTAL_BOUCLE}:>

et le fichier de langue comportera comme nouvelle entrée:

'titres_total_boucle' => 'Titres des (@total_boucle@) interventions',

Passage en 0.7.1 pour signaler cette nouvelle fonctionnalité.

Location:
_plugins_/langonet
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/langonet/formulaires/langonet_verifier.php

    r54041 r54051  
    7575                        $oublies = array();
    7676                        foreach ($all as $_item) {
    77                                 $oublies[$_item] = @$resultats['item_md5'][$_item]; // indefini si dejo normalise
     77                                $index = preg_match('/^(.*)[{].*[}]$/', $_item, $m) ? $m[1] : $_item;
     78                                $oublies[$index] = @$resultats['item_md5'][$_item]; // indefini si dejo normalise
    7879                        }
    7980                        $mode = $_l ?'fonction_l' :  'oublie';
     
    535536}
    536537
     538// Calcul du representant canonique d'un premier argument de _L.
     539// C'est un transcodage ASCII, reduits aux 32 premiers caracteres,
     540// les caracteres non alphabetiques etant remplaces par un souligne.
     541// On elimine les repetitions de mots pour evacuer le cas frequent truc: @truc@
     542// Si plus que 32 caracteres, on elimine les mots de moins de 3 lettres.
     543// Si toujours trop, on coupe au dernier mot complet avant 32 caracteres.
     544// C'est donc le tableau des chaines de langues manquant;
     545// toutefois, en cas d'homonymie d'index, on prend le md5, qui est illisible.
     546
     547// @param string $occ
     548// @param array item_md5
     549// @return string
     550
     551function langonet_index($occ, $item_md5)
     552{
     553        $index = textebrut($occ);
     554        $index = preg_replace('/\\\\[nt]/', ' ', $index);
     555        $index = strtolower(translitteration($index));
     556        $index = trim(preg_replace('/\W+/', ' ', $index));
     557        $index = preg_replace('/\b(\w+)\W+\1/', '\1', $index);
     558        if (strlen($index) > 32) {
     559          // trop long: abandonner les petits mots
     560                $index = preg_replace('/\b\w{1,3}\W/', '', $index);
     561                if (strlen($index) > 32) {
     562                        // tant pis mais couper proprement si possible
     563                        $index = substr($index, 0, 32);
     564                        if ($n = strrpos($index,' '))
     565                                $index = substr($index, 0, $n);
     566                }
     567        }
     568        $index = str_replace(' ', '_', trim($index));
     569        if (isset($item_md5[$index]) AND strcasecmp($item_md5[$index], $occ)) {
     570
     571                $index = md5($occ);
     572        }
     573        return $index;
     574}
     575
    537576// fonction purement utilitaire
    538577function texte2log($texte) {
  • _plugins_/langonet/inc/langonet_verifier_items.php

    r54041 r54051  
    1717// pour plugin.xml (obsolete a terme)
    1818define("_LANGONET_ITEM_X", ",<[a-z0-9_]+>[\n|\t|\s]*([a-z0-9_]+):([a-z0-9_]+)[\n|\t|\s]*</[a-z0-9_]+()>,iS");
    19 
    20 include_spip('inc/langonet_verifier_l');
    2119
    2220/**
     
    10098function langonet_match(&$utilises, $occ, $_fichier, $ligne, $eval=false)
    10199{
    102         $index = langonet_index_l($occ[2], $utilises['items']);
    103         $utilises['items'][$index] = $occ[2];
     100        list($item, $args) = langonet_argumenter($occ[2]);
     101        $index = langonet_index($occ[2], $utilises['items']) . $args;
     102        $utilises['items'][$index] = $item;
    104103        $utilises['modules'][$index] = $occ[1];
    105104        $utilises['item_tous'][$index][$_fichier][$ligne][] = trim($occ[0]);
    106105        $utilises['suffixes'][$index] = (($occ[3][0]==='.') OR ($eval AND strpos($occ[2], '$')));
     106}
     107
     108include_spip('public/phraser_html');
     109
     110///  gerer les args
     111/// La RegExp utilisee ci-dessous est defini dans phraser_html ainsi:
     112/// define('NOM_DE_BOUCLE', "[0-9]+|[-_][-_.a-zA-Z0-9]*");
     113/// define('NOM_DE_CHAMP', "#((" . NOM_DE_BOUCLE . "):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A-Z_]+)(\*{0,2})");
     114
     115function langonet_argumenter($occ)
     116{
     117        $args = '';
     118        if (preg_match_all('/' . NOM_DE_CHAMP . '/S', $occ, $m, PREG_SET_ORDER)) {
     119                foreach($m as $match) {
     120                  $nom = strtolower($match[4]);
     121                  $occ = str_replace($match[0], "@$nom@", $occ);
     122                  $args[]= "$nom=" . $match[0];
     123                }
     124                $args = '{' . join(',',$args) . '}';
     125        }
     126        return array($occ, $args);
    107127}
    108128
  • _plugins_/langonet/inc/langonet_verifier_l.php

    r53988 r54051  
    4747                        if (preg_match_all(_LANGONET_FONCTION_L, $texte, $m, PREG_SET_ORDER))
    4848                                foreach ($m as $occ) {
    49                                         $index = langonet_index_l($occ[1], $item_md5);
     49                                        $index = langonet_index($occ[1], $item_md5);
    5050                                        $item_md5[$index] = $occ[1];
    5151                                        $fichier_non[$index][$_fichier][$ligne][] = trim($occ[0]);
     
    5353                        if (preg_match_all(_LANGONET_FONCTION_L2, $texte, $m, PREG_SET_ORDER))
    5454                                foreach ($m as $occ) {
    55                                         $index = langonet_index_l($occ[1], $item_md5);
     55                                        $index = langonet_index($occ[1], $item_md5);
    5656                                        $item_md5[$index] = $occ[1];
    5757                                        $fichier_non[$index][$_fichier][$ligne][] = trim($occ[0]);
     
    6767        return $resultats;
    6868}
    69 
    70 // Calcul du representant canonique d'un premier argument de _L.
    71 // C'est un transcodage ASCII, reduits aux 32 premiers caracteres,
    72 // les caracteres non alphabetiques etant remplaces par un souligne.
    73 // On elimine les repetitions de mots pour evacuer le cas frequent truc: @truc@
    74 // Si plus que 32 caracteres, on elimine les mots de moins de 3 lettres.
    75 // Si toujours trop, on coupe au dernier mot complet avant 32 caracteres.
    76 // C'est donc le tableau des chaines de langues manquant;
    77 // toutefois, en cas d'homonymie d'index, on prend le md5, qui est illisible.
    78 
    79 // @param string $occ
    80 // @param array item_md5
    81 // @return string
    82 
    83 function langonet_index_l($occ, $item_md5)
    84 {
    85         $index = textebrut($occ);
    86         $index = preg_replace('/\\\\[nt]/', ' ', $index);
    87         $index = strtolower(translitteration($index));
    88         $index = trim(preg_replace('/\W+/', ' ', $index));
    89         $index = preg_replace('/\b(\w+)\W+\1/', '\1', $index);
    90         if (strlen($index) > 32) {
    91           // trop long: abandonner les petits mots
    92                 $index = preg_replace('/\b\w{1,3}\W/', '', $index);
    93                 if (strlen($index) > 32) {
    94                         // tant pis mais couper proprement si possible
    95                         $index = substr($index, 0, 32);
    96                         if ($n = strrpos($index,' '))
    97                                 $index = substr($index, 0, $n);
    98                 }
    99         }
    100         $index = str_replace(' ', '_', trim($index));
    101         if (isset($item_md5[$index]) AND strcasecmp($item_md5[$index], $occ)) {
    102 
    103                 $index = md5($occ);
    104         }
    105         return $index;
    106 }
    10769?>
  • _plugins_/langonet/plugin.xml

    r53988 r54051  
    33        <slogan>V&#233;rifier, g&#233;n&#233;rer, rechercher ou afficher les items de langue</slogan>
    44        <auteur>Eric Lupinacci, denisb, esj, kent1</auteur>
    5         <version>0.7.0</version>
     5        <version>0.7.1</version>
    66        <etat>stable</etat>
    77        <licence>GPL 3</licence>
Note: See TracChangeset for help on using the changeset viewer.