Changeset 59005 in spip-zone


Ignore:
Timestamp:
Mar 2, 2012, 11:17:28 PM (8 years ago)
Author:
fil@…
Message:

on aligne (presque) textwheel (plugin pour spip 2.1) sur textwheel (extension pour SPIP 3) ; benefice tangible l'arrivee du raccourci [ABBR|abréviation{lang}] , et sans doute d'autres trucs :)

Location:
_plugins_/textwheel
Files:
19 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _plugins_/textwheel/engine/textwheel.php

    r58835 r59005  
    1818 *
    1919 */
     20
     21if (!defined('_ECRIRE_INC_VERSION')) return;
    2022
    2123require_once dirname(__FILE__)."/textwheelruleset.php";
     
    154156        protected function initRule(&$rule){
    155157                # language specific
    156                 if ($rule->require)
     158                if ($rule->require){
    157159                        require_once $rule->require;
     160                }
    158161
    159162                # optimization: strpos or stripos?
     
    485488                        <caption>Temps par rule</caption>
    486489                        <thead><tr><th>temps&nbsp;(ms)</th><th>rule</th><th>application</th><th>t/u&nbsp;(ms)</th><th>t/n-u&nbsp;(ms)</th></tr></thead>\n";
     490                        $total = 0;
    487491                        foreach($time as $t => $r) {
    488492                                $applications = intval(TextWheelDebug::$u[$r]);
  • _plugins_/textwheel/engine/textwheelrule.php

    r41198 r59005  
    1818 *
    1919 */
     20
     21if (!defined('_ECRIRE_INC_VERSION')) return;
    2022
    2123class TextWheelRule {
  • _plugins_/textwheel/engine/textwheelruleset.php

    r41208 r59005  
    1818 *
    1919 */
     20
     21if (!defined('_ECRIRE_INC_VERSION')) return;
    2022
    2123require_once dirname(__FILE__)."/textwheelrule.php";
     
    3032         *
    3133         * @param string $file
    32          * @param string $default_path
     34         * @param string $path
    3335         * @return string
    3436         */
     
    5658         * Load a yaml file describing data
    5759         * @param string $file
     60         * @param string $default_path
    5861         * @return array
    5962         */
     
    9598         * Constructor
    9699         *
    97          * @param array/string $ruleset
     100         * @param array|string $ruleset
     101         * @param string $filepath
    98102         */
    99103        public function TextWheelRuleSet($ruleset = array(), $filepath='') {
     
    161165         * - an array of string filename
    162166         *
    163          * @param array/string $rules
     167         * @param array|string $rules
     168         * @param string $filepath
    164169         */
    165170        public function addRules($rules, $filepath='') {
  • _plugins_/textwheel/inc/lien.php

    r47717 r59005  
    44 *  SPIP, Systeme de publication pour l'internet                           *
    55 *                                                                         *
    6  *  Copyright (c) 2001-2010                                                *
     6 *  Copyright (c) 2001-2011                                                *
    77 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
    88 *                                                                         *
     
    1111\***************************************************************************/
    1212
    13 if (!defined("_ECRIRE_INC_VERSION")) return;
     13if (!defined('_ECRIRE_INC_VERSION')) return;
    1414
    1515include_spip('base/abstract_sql');
     
    2121//
    2222
    23 function inc_lien_dist($lien, $texte='', $class='', $title='', $hlang='', $rel='', $connect='') {
     23function inc_lien_dist($lien, $texte='', $class='', $title='', $hlang='', $rel='', $connect='', $env=array()) {
    2424        static $u=null;
    2525        if (!$u) $u=url_de_base();
     
    3030        // - [{en}->art2] => traduction anglaise de l'article 2, sinon art 2
    3131        // - [{}->art2] => traduction en langue courante de l'art 2, sinon art 2
     32        // s'applique a tout objet traduit
    3233        if ($hlang
    3334        AND $match = typer_raccourci($lien)) {
     
    7576        if ($rel) $rel = " rel='$rel'";
    7677
    77         if (traiter_modeles($texte, false, $echapper ? 'TYPO' : '', $connect)==$texte){
    78                 $texte = typo($texte, true, $connect);
     78        // si pas de modele dans le texte du lien, on peut juste passer typo sur le texte, c'est plus rapide
     79        // les rares cas de lien qui encapsule un modele passe en dessous, c'est plus lent
     80        if (traiter_modeles($texte, false, '', $connect, null, $env)==$texte){
     81                $texte = typo($texte, true, $connect, $env);
    7982                $lien = "<a href=\"".str_replace('"', '&quot;', $lien)."\" class='$class'$lang$title$rel$mime>$texte</a>";
    8083                return $lien;
     
    8588        # Penser au cas [<imgXX|right>->URL], qui exige typo('<a>...</a>')
    8689        $lien = "<a href=\"".str_replace('"', '&quot;', $lien)."\" class='$class'$lang$title$rel$mime>$texte</a>";
    87         return typo($lien, true, $connect);
     90        return typo($lien, true, $connect, $env);
    8891}
    8992
     
    9598
    9699// http://doc.spip.org/@expanser_liens
    97 function expanser_liens($t, $connect='')
     100function expanser_liens($t, $connect='', $env=array())
    98101{
    99102
    100103        $t = pipeline('pre_liens', $t);
    101104
    102         expanser_un_lien($connect,'init');
     105        expanser_un_lien($connect,'init', $env);
    103106
    104107        if (strpos($t, '->') !== false)
     
    107110        // on passe a traiter_modeles la liste des liens reperes pour lui permettre
    108111        // de remettre le texte d'origine dans les parametres du modele
    109         $t = traiter_modeles($t, false, false, $connect, expanser_un_lien('','sources'));
     112        $t = traiter_modeles($t, false, false, $connect, expanser_un_lien('','sources'), $env);
    110113
    111114        $t = corriger_typo($t);
     
    117120
    118121
    119 function expanser_un_lien($reg, $quoi='echappe'){
     122function expanser_un_lien($reg, $quoi='echappe', $env=null){
    120123        static $pile = array();
    121124        static $inserts;
     
    125128        static $lien;
    126129        static $connect='';
     130        static $contexte = array();
    127131
    128132        switch ($quoi){
    129133                case 'init':
    130134                        if (!$lien) $lien = charger_fonction('lien', 'inc');
     135                        if (!is_null($env))
     136                                $contexte = $env;
    131137                        array_push($pile,array($inserts,$sources,$regs,$connect,$k));
    132138                        $inserts = $sources = $regs = array();
     
    152158                                $r = $href;
    153159                        }
    154                         $regs[$k] = $lien($r, $titre, '', $bulle, $hlang, '', $connect);
     160                        $regs[$k] = $lien($r, $titre, '', $bulle, $hlang, '', $connect, $contexte);
    155161                        return $inserts[$k++];
    156162                        break;
     
    175181
    176182        if (preg_match_all(_RACCOURCI_LIEN, $texte, $regs, PREG_SET_ORDER))
     183                include_spip('inc/texte');
    177184                foreach ($regs as $reg) {
    178185                        list ($titre,,)= traiter_raccourci_lien_atts($reg[1]);
     
    251258}
    252259
    253 define('_EXTRAIRE_DOMAINE', '/^(?:[^\W_]((?:[^\W_]|-){0,61}[^\W_,])?\.)+[a-z]{2,6}\b/Si');
     260define('_EXTRAIRE_DOMAINE', '/^(?:(?:[^\W_]((?:[^\W_]|-){0,61}[^\W_,])?\.)+[a-z]{2,6}|localhost)\b/Si');
    254261
    255262// callback pour la fonction traiter_raccourci_liens()
     
    270277        $url = $protocol.'://'.$k[1];
    271278        $lien = charger_fonction('lien', 'inc');
    272         $r = $lien($url,'','','','','nofollow') . $k[2];
     279        // deux fois <html> car inc_lien echappe un coup et restaure ensuite
     280        // => un perd 1 <html>
     281        $r = $lien($url,"<html><html>$url</html></html>",'','','','nofollow') . $k[2];
    273282
    274283        // ajouter la class auto
     
    276285
    277286        // si l'original ne contenait pas le 'http:' on le supprime du clic
    278         return $m ? $r : str_replace('>http://', '>', $r);
     287        return ($m ? $r : str_replace('>http://', '>', $r));
    279288}
    280289
     
    284293// http://doc.spip.org/@traiter_raccourci_liens
    285294function traiter_raccourci_liens($t) {
    286         return preg_replace_callback(_EXTRAIRE_LIENS, 'traiter_autoliens', $t);
    287 }
    288 
    289 // Fonction pour les champs chapo commencant par =,  redirection qui peut etre:
    290 // 1. un raccourci Spip habituel (premier If) [texte->TYPEnnn]
    291 // 2. un ultra raccourci TYPEnnn voire nnn (article) (deuxieme If)
    292 // 3. une URL std
    293 // renvoie une tableau structure comme ci-dessus mais sans calcul d'URL
    294 // (cf fusion de sauvegardes)
     295        $t = preg_replace_callback(_EXTRAIRE_LIENS, 'traiter_autoliens', $t);
     296        // echapper les autoliens eventuellement inseres (en une seule fois)
     297        if (strpos($t,"<html>")!==false)
     298                $t = echappe_html($t);
     299        return $t;
     300}
     301
    295302
    296303define('_RACCOURCI_CHAPO', '/^(\W*)(\W*)(\w*\d+([?#].*)?)$/');
    297 
    298 // http://doc.spip.org/@chapo_redirige
    299 function chapo_redirige($chapo, $url=false)
    300 {
    301         if (!preg_match(_RACCOURCI_LIEN, $chapo, $m))
    302                 if (!preg_match(_RACCOURCI_CHAPO, $chapo, $m))
    303                         return $chapo;
     304/**
     305 * Fonction pour les champs virtuels de redirection qui peut etre:
     306 * 1. un raccourci Spip habituel (premier If) [texte->TYPEnnn]
     307 * 2. un ultra raccourci TYPEnnn voire nnn (article) (deuxieme If)
     308 * 3. une URL std
     309 *
     310 * renvoie l'url reelle de redirection si le $url=true,
     311 * l'url brute contenue dans le chapo sinon
     312 *
     313 * http://doc.spip.org/@chapo_redirige
     314 *
     315 * @param string $virtuel
     316 * @param bool $url
     317 * @return string
     318 */
     319function virtuel_redirige($virtuel, $url=false){
     320        if (!strlen($virtuel)) return '';
     321        if (!preg_match(_RACCOURCI_LIEN, $virtuel, $m))
     322                if (!preg_match(_RACCOURCI_CHAPO, $virtuel, $m))
     323                        return $virtuel;
    304324
    305325        return !$url ? $m[3] : traiter_lien_implicite($m[3]);
     
    325345
    326346// http://doc.spip.org/@calculer_url
    327 function calculer_url ($ref, $texte='', $pour='url', $connect='') {
    328         $r = traiter_lien_implicite($ref, $texte, $pour, $connect);
    329         return $r ? $r : traiter_lien_explicite($ref, $texte, $pour, $connect);
     347function calculer_url ($ref, $texte='', $pour='url', $connect='', $echappe_typo = true) {
     348        $r = traiter_lien_implicite($ref, $texte, $pour, $connect, $echappe_typo);
     349        $r = ($r ? $r : traiter_lien_explicite($ref, $texte, $pour, $connect, $echappe_typo));
     350        return $r;
    330351}
    331352
     
    333354
    334355// http://doc.spip.org/@traiter_lien_explicite
    335 function traiter_lien_explicite ($ref, $texte='', $pour='url', $connect='')
     356function traiter_lien_explicite ($ref, $texte='', $pour='url', $connect='', $echappe_typo = true)
    336357{
    337358        if (preg_match(_EXTRAIRE_LIEN, $ref))
     
    343364        if (!$texte) {
    344365                $texte = str_replace('"', '', $lien);
    345                 // evite l'affichage de trops longues urls.
    346                 // personnalisation possible dans mes_options
    347                 $long_url = defined('_MAX_LONG_URL') ? _MAX_LONG_URL : 40;
    348                 $coupe_url = defined('_MAX_COUPE_URL') ? _MAX_COUPE_URL : 35;
    349                 if (strlen($texte)>$long_url) {
    350                         $texte = substr($texte,0,$coupe_url).'...';
     366                static $lien_court;
     367                // evite l'affichage de trop longues urls.
     368                if (!$lien_court)
     369                        $lien_court = charger_fonction('lien_court', 'inc');
     370                $texte = $lien_court($texte);
     371                if ($echappe_typo){
     372                        $texte = "<html>".quote_amp($texte)."</html>";
    351373                }
    352                 $texte = "<html>".quote_amp($texte)."</html>";
    353374        }
    354375
     
    387408
    388409
    389 // http://doc.spip.org/@traiter_lien_implicite
     410/**
     411 * Transformer un lien raccourci art23 en son URL
     412 * Par defaut la fonction produit une url prive si on est dans le prive
     413 * ou publique si on est dans le public.
     414 * La globale lien_implicite_cible_public permet de forcer un cas ou l'autre :
     415 * $GLOBALS['lien_implicite_cible_public'] = true;
     416 *  => tous les liens raccourcis pointent vers le public
     417 * $GLOBALS['lien_implicite_cible_public'] = false;
     418 *  => tous les liens raccourcis pointent vers le prive
     419 * unset($GLOBALS['lien_implicite_cible_public']);
     420 *  => retablit le comportement automatique
     421 *
     422 * http://doc.spip.org/@traiter_lien_implicite
     423 *
     424 * @param string $ref
     425 * @param string $texte
     426 * @param string $pour
     427 * @param string $connect
     428 * @return array|bool|string
     429 */
    390430function traiter_lien_implicite ($ref, $texte='', $pour='url', $connect='')
    391431{
     
    414454        if ($type == 'document'
    415455        AND $mime = sql_getfetsel('mime_type', 'spip_types_documents',
    416                         "extension IN (SELECT extension FROM spip_documents where id_document =".sql_quote($id).")",
     456                        "extension IN (SELECT extension FROM spip_documents where id_document =".intval($id).")",
    417457                        '','','','',$connect)
    418458        )
     
    465505// mais on renvoie les params (pour l'indexation par le moteur de recherche)
    466506// http://doc.spip.org/@traiter_modeles
    467 
    468 define('_RACCOURCI_MODELE',
    469          '(<([a-z_-]{3,})' # <modele
    470         .'\s*([0-9]*)\s*' # id
    471         .'([|](?:<[^<>]*>|[^>])*?)?' # |arguments (y compris des tags <...>)
    472         .'\s*/?'.'>)' # fin du modele >
     507define('_PREG_MODELE',
     508        '(<([a-z_-]{3,})' # <modele
     509 .'\s*([0-9]*)\s*' # id
     510 .'([|](?:<[^<>]*>|[^>])*?)?' # |arguments (y compris des tags <...>)
     511 .'\s*/?'.'>)' # fin du modele >
     512);
     513
     514define('_RACCOURCI_MODELE',
     515        _PREG_MODELE
    473516        .'\s*(<\/a>)?' # eventuel </a>
    474517       );
     
    477520
    478521// http://doc.spip.org/@traiter_modeles
    479 function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens = null) {
     522function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens = null, $env = array()) {
    480523        // preserver la compatibilite : true = recherche des documents
    481524        if ($doublons===true)
     
    510553
    511554                        // calculer le modele
    512                         # hack articles_edit, breves_edit, indexation
     555                        # hack indexation
    513556                        if ($doublons)
    514557                                $texte .= preg_replace(',[|][^|=]*,s',' ',$params);
     
    519562                                if (!is_null($liens))
    520563                                        $params = str_replace($liens[0], $liens[1], $params);
    521                           $modele = inclure_modele($type, $id, $params, $lien, $connect);
     564                          $modele = inclure_modele($type, $id, $params, $lien, $connect, $env);
    522565                                // en cas d'echec,
    523566                                // si l'objet demande a une url,
  • _plugins_/textwheel/inc/memoization-mini.php

    r58841 r59005  
    22
    33if (!defined('_ECRIRE_INC_VERSION')) return;
     4
    45# memoization minimale (preferer le plugin memoization)
    56function cache_get($key) {
    6         return @unserialize(file_get_contents(_DIR_CACHE.$key));
     7        return @unserialize(file_get_contents(_DIR_CACHE."wheels/".$key.".txt"));
    78}
    89function cache_set($key, $value) {
    9         return ecrire_fichier(_DIR_CACHE.$key, serialize($value));
     10        $dir = sous_repertoire(_DIR_CACHE,"wheels/");
     11        return ecrire_fichier($dir.$key.".txt", serialize($value));
    1012}
    1113
  • _plugins_/textwheel/inc/texte.php

    r58990 r59005  
    44 *  SPIP, Systeme de publication pour l'internet                           *
    55 *                                                                         *
    6  *  Copyright (c) 2001-2010                                                *
     6 *  Copyright (c) 2001-2011                                                *
    77 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
    88 *                                                                         *
     
    386386// http://doc.spip.org/@interdire_scripts
    387387function interdire_scripts($arg) {
     388        // on memorise le resultat sur les arguments non triviaux
    388389        static $dejavu = array();
    389390        static $wheel = null;
     
    441442
    442443// http://doc.spip.org/@typo
    443 function typo($letexte, $echapper=true, $connect=null) {
     444function typo($letexte, $echapper=true, $connect=null, $env=array()) {
    444445        // Plus vite !
    445446        if (!$letexte) return $letexte;
     
    466467        // NOTE : propre() ne passe pas par ici mais directement par corriger_typo
    467468        // cf. inc/lien
    468         $letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect);
     469
     470        $letexte = traiter_modeles($mem = $letexte, false, $echapper ? 'TYPO' : '', $connect, null, $env);
    469471        if ($letexte != $mem) $echapper = true;
    470472        unset($mem);
     
    492494// http://doc.spip.org/@corriger_typo
    493495function corriger_typo($t, $lang='') {
     496        static $typographie = array();
    494497        // Plus vite !
    495498        if (!$t) return $t;
     
    516519
    517520        // Charger & appliquer les fonctions de typographie
    518         $typographie = charger_fonction(lang_typo($lang), 'typographie');
    519         $t = $typographie($t);
     521        $idxl = "$lang:" . (isset($GLOBALS['lang_objet'])? $GLOBALS['lang_objet']: $GLOBALS['spip_lang']);
     522        if (!isset($typographie[$idxl]))
     523                $typographie[$idxl] = charger_fonction(lang_typo($lang), 'typographie');
     524        $t = $typographie[$idxl]($t);
    520525
    521526        // Les citations en une autre langue, s'il y a lieu
     
    539544//
    540545
    541 define('_RACCOURCI_TH_SPAN', '\s*(?:{{[^{}]+}}\s*)?|<');
     546define('_RACCOURCI_TH_SPAN', '\s*(:?{{[^{}]+}}\s*)?|<');
    542547
    543548// http://doc.spip.org/@traiter_tableau
    544549function traiter_tableau($bloc) {
     550        // id "unique" pour les id du tableau
     551        $tabid = substr(md5($bloc),0,4);
    545552
    546553        // Decouper le tableau en lignes
     
    553560        // Traiter chaque ligne
    554561        $reg_line1 = ',^(\|(' . _RACCOURCI_TH_SPAN . '))+$,sS';
    555         $reg_line_all = ',^'  . _RACCOURCI_TH_SPAN . '$,sS';
     562        $reg_line_all = ',^('  . _RACCOURCI_TH_SPAN . ')$,sS';
     563        $hc = $hl = array();
    556564        foreach ($regs[1] as $ligne) {
    557565                $l ++;
     
    569577                // - <thead> sous la forme |{{titre}}|{{titre}}|
    570578                //   Attention thead oblige a avoir tbody
    571                         else if (preg_match($reg_line1, $ligne)) {
     579                        else if (preg_match($reg_line1, $ligne, $thead)) {
    572580                                preg_match_all('/\|([^|]*)/S', $ligne, $cols);
    573581                                $ligne='';$cols= $cols[1];
     
    584592                                          // inutile de garder le strong qui n'a servi que de marqueur
    585593                                          $cols[$c] = str_replace(array('{','}'), '', $cols[$c]);
    586                                           $ligne= "<th scope='col'$attr>$cols[$c]</th>$ligne";
     594                                          $ligne= "<th id='id{$tabid}_c$c'$attr>$cols[$c]</th>$ligne";
     595                                                $hc[$c] = "id{$tabid}_c$c"; // pour mettre dans les headers des td
    587596                                        }
    588597                                }
     
    623632        $n = count($lignes[0]);
    624633        $k = count($lignes);
     634        // distinguer les colonnes numeriques a point ou a virgule,
     635        // pour les alignements eventuels sur "," ou "."
     636        $numeric_class = array('.'=>'point',','=>'virgule');
    625637        for($i=0;$i<$n;$i++) {
    626638          $align = true;
    627           for ($j=0;$j<$k;$j++) $rowspans[$j][$i] = 1;
    628639          for ($j=0;$j<$k;$j++) {
    629             $cell = trim($lignes[$j][$i]);
    630             if (preg_match($reg_line_all, $cell)) {
    631                 if (!preg_match('/^\d+([.,]?)\d*$/', $cell, $r))
    632                   { $align = ''; break;}
    633                 else if ($r[1]) $align = $r[1];
    634               }
     640                  $rowspans[$j][$i] = 1;
     641                        if ($align AND preg_match('/^\d+([.,]?)\d*$/', trim($lignes[$j][$i]), $r)){
     642                                if ($r[1])
     643                                        $align = $r[1];
     644                        }
     645                        else
     646                                $align = '';
    635647          }
    636           $numeric[$i] = !$align ? '' :
    637             (" style='text-align: " .
    638              // http://www.w3.org/TR/REC-CSS2/tables.html#column-alignment
    639              // specifie text-align: "," pour cadrer le long de la virgule
    640              // mais les navigateurs ne l'implementent pas ou mal
    641              (/* $align !== true ?"\"$align\"" : */ 'right') .
    642              "'");
    643         }
     648          $numeric[$i] = $align ? (" class='numeric ".$numeric_class[$align]."'") : '';
     649        }
     650        for ($j=0;$j<$k;$j++) {
     651                if (preg_match($reg_line_all, $lignes[$j][0])) {
     652                        $hl[$j] = "id{$tabid}_l$j"; // pour mettre dans les headers des td
     653                }
     654                else
     655                        unset($hl[0]);
     656        }
     657        if (!isset($hl[0]))
     658                $hl = array(); // toute la colonne ou rien
    644659
    645660        // et on parcourt le tableau a l'envers pour ramasser les
     
    669684                                $attr.= " rowspan='$x'";
    670685                          }
    671                           $ligne= "\n<td".$attr.'>'.$cols[$c].'</td>'.$ligne;
     686                          $b = ($c==0 AND isset($hl[$l]))?'th':'td';
     687                                $h = (isset($hc[$c])?$hc[$c]:'').' '.(($b=='td' AND isset($hl[$l]))?$hl[$l]:'');
     688                                if ($h=trim($h))
     689                                        $attr.=" headers='$h'";
     690                                // inutile de garder le strong qui n'a servi que de marqueur
     691                                if ($b=='th') {
     692                                        $attr.=" id='".$hl[$l]."'";
     693                                        $cols[$c] = str_replace(array('{','}'), '', $cols[$c]);
     694                                }
     695                          $ligne= "\n<$b".$attr.'>'.$cols[$c]."</$b>".$ligne;
    672696                        }
    673697                }
    674698
    675699                // ligne complete
    676                 $class = alterner($l+1, 'even', 'odd');
    677                 $html = "<tr class='row_$class'>$ligne</tr>\n$html";
    678         }
    679 
     700                $class = alterner($l+1, 'odd', 'even');
     701                $html = "<tr class='row_$class $class'>$ligne</tr>\n$html";
     702        }
    680703        return "\n\n<table".$GLOBALS['class_spip_plus'].$summary.">\n"
    681704                . $debut_table
     
    905928// http://doc.spip.org/@traiter_raccourcis
    906929function traiter_raccourcis($t) {
    907         static $wheel;
     930        static $wheel, $notes;
    908931
    909932        // hack1: respecter le tag ignore br
     
    928951                        exit;
    929952                }
     953                $notes = charger_fonction('notes', 'inc');
    930954        }
    931955
    932956        // Gerer les notes (ne passe pas dans le pipeline)
    933         $notes = charger_fonction('notes', 'inc');
    934957        list($t, $mes_notes) = $notes($t);
    935958
     
    968991// Filtre a appliquer aux champs du type #TEXTE*
    969992// http://doc.spip.org/@propre
    970 function propre($t, $connect=null) {
     993function propre($t, $connect=null, $env=array()) {
    971994        // les appels directs a cette fonction depuis le php de l'espace
    972995        // prive etant historiquement ecrits sans argment $connect
     
    9841007
    9851008        $t = echappe_html($t);
    986         $t = expanser_liens($t,$connect);
     1009        $t = expanser_liens($t,$connect, $env);
     1010       
    9871011        $t = traiter_raccourcis($t);
    9881012        $t = echappe_retour_modeles($t, $interdire_script);
  • _plugins_/textwheel/inc/textwheel.php

    r44464 r59005  
    4545);
    4646
     47$GLOBALS['spip_wheels']['paragrapher'] = array(
     48        'spip/spip-paragrapher.yaml'
     49);
     50
    4751//
    4852// Methode de chargement d'une wheel SPIP
     
    6771
    6872                # memoization
    69                 $key = 'tw-'.md5(serialize($ruleset).$callback.$class);
     73                # attention : le ruleset peut contenir apres loading des chemins relatifs
     74                # il faut donc que le cache depende du chemin courant vers la racine de SPIP
     75                $key = 'tw-'.md5(serialize($ruleset).$callback.$class._DIR_RACINE);
    7076
    7177                # lecture du cache
     
    8793
    8894
     95function tw_trig_purger($quoi){
     96        if ($quoi=='cache')
     97                purger_repertoire(_DIR_CACHE."wheels");
     98        return $quoi;
     99}
     100
    89101?>
  • _plugins_/textwheel/lib/yaml/sfYaml.php

    r41198 r59005  
    88 * file that was distributed with this source code.
    99 */
     10
     11if (!defined('_ECRIRE_INC_VERSION')) return;
    1012
    1113/**
  • _plugins_/textwheel/lib/yaml/sfYamlDumper.php

    r41198 r59005  
    88 * file that was distributed with this source code.
    99 */
     10
     11if (!defined('_ECRIRE_INC_VERSION')) return;
    1012
    1113require_once(dirname(__FILE__).'/sfYamlInline.php');
  • _plugins_/textwheel/lib/yaml/sfYamlInline.php

    r41198 r59005  
    88 * file that was distributed with this source code.
    99 */
     10
     11if (!defined('_ECRIRE_INC_VERSION')) return;
    1012
    1113/**
  • _plugins_/textwheel/lib/yaml/sfYamlParser.php

    r41198 r59005  
    88 * file that was distributed with this source code.
    99 */
     10
     11if (!defined('_ECRIRE_INC_VERSION')) return;
    1012
    1113require_once(dirname(__FILE__).'/sfYamlInline.php');
  • _plugins_/textwheel/plugin.xml

    r58990 r59005  
    33        <auteur>Fil &amp; Cerdic</auteur>
    44        <icon>textwheel-64.png</icon>
    5         <licence>GNU/GPL</licence>
    6         <version>0.3.3</version>
     5        <licence>GNU/LGPL</licence>
     6        <version>0.8.0</version>
    77        <etat>stable</etat>
    88        <description>Integrer TextWheel dans SPIP</description>
  • _plugins_/textwheel/wheels/spip/spip-listes.php

    r58841 r59005  
    9797        return $t;
    9898}
     99
     100function tw_def_wrap($t){
     101        global $class_spip_plus;
     102        return "<dl$class_spip_plus>\n$t</dl>\n";
     103}
  • _plugins_/textwheel/wheels/spip/spip-listes.yaml

    r41198 r59005  
    4141              replace: tw_liste_close
    4242              is_callback: Y
     43
     44-
     45  if_match: "/\n-(&nbsp;)?[\?!]\s/S"
     46  type: all
     47  is_wheel: Y
     48  replace:
     49    listes-decoupe-para2:
     50      match: "\n\n"
     51      type: split
     52      is_wheel: Y
     53      replace:
     54        def-check:
     55          if_str: "-"
     56          if_match: "/-(&nbsp;)?[!\?]\s/S"
     57          is_wheel: Y
     58          type: all
     59          replace:
     60            def-wrap:
     61              type: all
     62              is_callback: Y
     63              replace: tw_def_wrap
     64            def-p-titre:
     65              # premiere parenthese ne compte pas dans la profondeur
     66              # capture deuxieme parenthese : ul
     67              # capture troisime parenthese : ol
     68              # nombre de car dans la 2eme ou 3eme parenthese = profondeur
     69              match: ",(\n-(&nbsp;)?\?\s+)(.*)(?=(\z|\n-)),UsS"
     70              replace: "<dt>$3</dt>"
     71            def-p-desc:
     72              # premiere parenthese ne compte pas dans la profondeur
     73              # capture deuxieme parenthese : ul
     74              # capture troisime parenthese : ol
     75              # nombre de car dans la 2eme ou 3eme parenthese = profondeur
     76              match: ",(\n-(&nbsp;)?!\s+)(.*)(?=(\z|\n-)),UsS"
     77              replace: "<dd>$3</dd>"
     78
  • _plugins_/textwheel/wheels/spip/spip-paragrapher.yaml

    r58835 r59005  
    1414    replace: "<p>$0"
    1515
     16toujours-ouvrir:
     17    # toujours ouvrir un parapgraphe derriere une balise bloc fermante
     18    if_str: "</"
     19    match: ",</(?:div|pre|ul|ol|li|blockquote|h[1-6r]|t(able|[rdh]|head|body|foot|extarea)|form|object|center|marquee|address|applet|iframe|d[ltd]|script|noscript|map|button|fieldset|style)[^>]*>\s*?,UimsS"
     20    replace: "$0<p>"
     21
    1622ajouter-stop-p1:
    1723    # Ajouter un espace aux <p> et un "STOP P"
    1824    # transformer aussi les </p> existants en <p>, nettoyes ensuite
    19     if_str: "<"
     25    if_str: "<p>"
    2026    #if_match: ",<p\b,iS"
    2127    match: "/^.*$/msS"
     
    3339    # en reperant les balises blocs XHTML
    3440    # en pure wheel : le \s* agit comme trim() et remplace reduire-blancs2
    35     match: ",<p (.*)\s*<(/?)(STOP P|div|pre|ul|ol|li|blockquote|h[1-6r]|t(able|[rdh]|body|foot|extarea)|form|object|center|marquee|address|d[ltd]|script|noscript|map|button|fieldset|style)\b,UimsS"
    36     replace: "\n<p $1</p>\n<$2$3"
     41    match: ",<p (.*)\s*<(/?)(STOP P|div|pre|ul|ol|li|blockquote|h[1-6r]|t(able|[rdh]|head|body|foot|extarea)|form|object|center|marquee|address|applet|iframe|d[ltd]|script|noscript|map|button|fieldset|style)\b,UimsS"
     42    replace: "<p $1</p>\n<$2$3"
    3743    disabled: Y
    3844
     
    7480    # Renommer les paragraphes normaux
    7581    match: "<p >"
    76     replace: "<p>"
     82    replace: "\n<p>"
    7783    type: str
    7884
  • _plugins_/textwheel/wheels/spip/spip-poesie.yaml

    r41198 r59005  
    22
    33-
    4     # trim
    5     type: all
    6     replace: trim
    7     is_callback: y
     4  # trim
     5  type: all
     6  replace: trim
     7  is_callback: y
    88
    99-
    10     # nettoyer les sauts de ligne \r
    11     # (semble inutile car deja dans spip.yaml#L6)
    12     match: ",\r\n?,S"
    13     replace: "\n"
     10  # nettoyer les sauts de ligne \r
     11  # (semble inutile car deja dans spip.yaml#L6)
     12  match: ",\r\n?,S"
     13  replace: "\n"
    1414-
    15     # ligne contenant une espace => ligne contenant un &nbsp;
    16     match: "/\n[\s]*\n/Su"
    17     replace: "\n&nbsp;\n"
     15  # ligne contenant une espace => ligne contenant un &nbsp;
     16  match: "/\n[\s]*\n/Su"
     17  replace: "\n&nbsp;\n"
    1818-
    19     # deux sauts de ligne => div
    20     match: "/\n+/"
    21     replace: "</div>\n<div>"
     19  # deux sauts de ligne => div
     20  match: "/\n+/"
     21  replace: "</div>\n<div>"
    2222
    2323-
    24     # entourer avec un blockquote.spip_poesie
    25     type: all
    26     replace: "<blockquote class=\"spip_poesie\">\n\n<div>$0</div>\n</blockquote>\n\n"
    27 
     24  # entourer avec un blockquote.spip_poesie
     25  type: all
     26  replace: "<blockquote class=\"spip_poesie\">\n\n<div>$0</div>\n</blockquote>\n\n"
  • _plugins_/textwheel/wheels/spip/spip-tableaux.php

    r58841 r59005  
    22
    33if (!defined('_ECRIRE_INC_VERSION')) return;
     4
    45include_spip('inc/texte');
    56
  • _plugins_/textwheel/wheels/spip/spip.php

    r58913 r59005  
    55include_spip('inc/texte');
    66
    7 /*
    8 
    9  Sauts de ligne automatiques, adressables en CSS :
    10    .autobr:before{content:"\0B6";color:orange;}
    11  effacables en CSS :
    12    .autobr br {content:""}
    13  pour retrouver le fonctionnement SPIP ancien (ignorer les sauts de ligne) :
    14    define('_AUTOBR', '');
    15 
    16 */
    17 
    18 
    197/**
    208 * callback pour la puce qui est definissable/surchargeable
     9 * @return string
    2110 */
    2211function replace_puce(){
     
    2817
    2918/**
    30  * callback fermer-para-mano
    31  * on refait le preg, a la main
     19 * callback pour les Abbr :
     20 * [ABBR|abbrevation]
     21 * [ABBR|abbrevation{lang}]
     22 * @param array $m
     23 * @return string
    3224 */
    33 function fermer_para_mano(&$t) {
    34 
    35         # match: ",<p (.*)<(/?)(STOP P|div|pre|ul|ol|li|blockquote|h[1-6r]|t(able|[rdh]|body|foot|extarea)|form|object|center|marquee|address|d[ltd]|script|noscript|map|button|fieldset|style)\b,UimsS"
    36         # replace: "\n<p "+trim($1)+"</p>\n<$2$3"
    37 
    38         foreach (explode('<p ', $t) as $c => $p) {
    39                 if ($c == 0)
    40                         $t = $p;
    41                 else {
    42                         $pi = strtolower($p);
    43                         if (preg_match(
    44                         ",</?(?:stop p|div|pre|ul|ol|li|blockquote|h[1-6r]|t(able|[rdh]|body|foot|extarea)|form|object|center|marquee|address|d[ltd]|script|noscript|map|button|fieldset|style)\b,S",
    45                         $pi, $r)) {
    46                                 $pos = strpos($pi, $r[0]);
    47                                 $t .= "\n<p ".str_replace("\n", _AUTOBR."\n", rtrim(substr($p,0,$pos)))."</p>\n".substr($p,$pos);
    48                         } else {
    49                                 $t .= '<p '.$p;
    50                         }
    51                 }
    52         }
    53 
    54         $t = str_replace(_AUTOBR."\n"."<br", "<br", $t); #manque /i
    55         $reg = ',(<br\b[^>]*>\s*)'.preg_quote(_AUTOBR."\n", ',').",iS";
    56 
    57         $t = preg_replace($reg, "\1", $t);
    58 
    59         return $t;
     25function inserer_abbr($m){
     26        $title = attribut_html($m[2]);
     27        $lang = (isset($m[3])?" lang=\"".$m[3]."\"":"");
     28        return "<abbr title=\"$title\"$lang>".$m[1]."</abbr>";
    6029}
  • _plugins_/textwheel/wheels/spip/spip.yaml

    r58913 r59005  
    9292  priority: -20 # avant !paragraphes
    9393
     94abbr:
     95  # raccourcis en [ABBR|abbreviation]
     96  if_chars: "["
     97  if_chars: "|"
     98  match: "/\[([^\|\]>]+)\|([^\|\]\{>]+)(?:\{([a-z]+)\})?\]/S"
     99  is_callback: Y
     100  replace: inserer_abbr
     101
    94102intertitres-compliques:
    95103  # raccourcis imbriques en {{{{..}}}}
     
    157165  # poesie|poetry
    158166  # utilise une callback
    159   match: ",<poe(sie|try)>(.*)</poe$1>,UimsS"
     167  match: ",<poe(sie|try)>(.*)</poe(sie|try)>,UimsS"
    160168  replace: spip/spip-poesie.yaml
    161169  pick_match: 2
Note: See TracChangeset for help on using the changeset viewer.