Changeset 84474 in spip-zone


Ignore:
Timestamp:
Sep 4, 2014, 12:27:32 PM (6 years ago)
Author:
christopheld@…
Message:

Corrections de bugs plus ou moins importants :

  • sur la première fonction de traitement du texte : la recherche se fait sur les titres de h2 à h6 et ajout de class=spip afin de cibler explicitement les intertitres dans le texte (et non les titres des images comme c'était le cas précédemment, ce qui pouvait de plus perturber le fonctionnement de l'export lorsque le texte comporte des images avec des légendes : une partie du texte était purement et simplement supprimée !) et correction au passage de l'insertion des balises de section qui concerne l'intertitre (et non intertitre + paragraphes de texte qui suivent immédiatement) ;
  • liste (ul/ol) ne sont pas précédées de <alinea></alinea> ;
  • correction dans la fonction cairn_figure afin qu'une image (ou logo) sans légende ne récupère la légende de celle qui précède.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/cairn/cairn_fonctions.php

    r84454 r84474  
    4444                $figure = cairn_figure(extraire_balise($fig,'img'), $numero, $titre,$legende);
    4545                $html = str_replace($fig, $figure, $html);
     46
     47                $titre = null;
     48                $legende = null;
    4649        }
    4750
    4851        foreach (extraire_balises($html, 'img') as $img) {
    49 
    5052                $src = extraire_attribut($img, 'src');
    5153
     
    9496// convertir un HTML en format eruditArticle
    9597function cairn_traiter($t, $reset) {
    96 
    97         $t = cairn_decoupe_h3($t, $reset);
     98        //$t = cairn_decoupe_para_cdata($t, $reset);
     99        $t = cairn_decoupe_hN($t, $reset);
    98100
    99101        return str_replace(array(_CHEVRONA,_CHEVRONB), array('<', '>'), $t);
     
    108110}
    109111
    110 function cairn_decoupe_h3($texte, $reset) {
     112function cairn_decoupe_hN($texte, $reset) {
    111113        static $cpt;
    112114        if ($reset) $cpt=0;
     
    114116        if (!strlen(trim($texte))) return '';
    115117
    116         $sections = preg_split('/<h[23]\b[^>]*>/i', $texte);
    117 
    118         $t = array_shift($sections);
    119         if (strlen($t)) {
    120                 $cpt ++;
    121                 $t = _CHEVRONA."section1 id=\"s1n$cpt\""._CHEVRONB
    122                         . cairn_decoupe_para_cdata($t, $reset)
    123                         . _CHEVRONA."/section1"._CHEVRONB;
    124         }
    125 
    126         foreach ($sections as $p) {
    127                 $cpt++;
    128                 list($para, $suite) = preg_split(',</h[23]\b[^>]*>,i', $p);
    129 
    130                 $t .= _CHEVRONA."section1 id=\"s1n$cpt\""._CHEVRONB
    131                         . _CHEVRONA."titre"._CHEVRONB.cairn_decoupe_para_cdata($para)._CHEVRONA."/titre"._CHEVRONB
    132                         . cairn_decoupe_para_cdata($suite)
    133                         . _CHEVRONA."/section1"._CHEVRONB;
    134         }
    135 
    136         return $t;
    137 
     118        $texte = preg_replace_callback('/(<h([2-6]) class="spip">)(.*?)(<\/h[2-6]>)/si','callback_intertitre', $texte);
     119        $texte = cairn_decoupe_para_cdata($texte, $reset);
     120        return $texte;
     121}
     122
     123function callback_intertitre($r) {
     124    static $i=0;
     125    $i++;
     126    // niveau de l'intertitre (de h2 à h6 = niveau 1 à niveau 5)
     127    $niveau = $r[2]-1;
     128    // spip ajoute des ancres a, on supprime pour ne garder que l'intertitre
     129    $titre = supprimer_tags($r[3]);
     130
     131    $titre = _CHEVRONA."section".$niveau." id=\"s".$niveau."n".$i."\""._CHEVRONB
     132            .$titre
     133            ._CHEVRONA."/section".$niveau._CHEVRONB;
     134    return $titre;
    138135}
    139136
     
    213210                                . filtrer_texte_cairn($suite);
    214211                }
    215                 else
    216                         $t .= "<para id=\"pa$cpt\"><alinea>"
    217                                 . filtrer_texte_cairn($para)
    218                                 . "</alinea></para>"
    219                                 . filtrer_texte_cairn($suite);
     212                else {
     213                        // les listes sont immédiatement après <para> sans <alinea>
     214                    if (preg_match('/^<[u|o]l\b[^>]*>/Ui',$para)) {
     215                        $t .= "<para id=\"pa$cpt\">"
     216                            . filtrer_texte_cairn($para)
     217                            . "</para>"
     218                            . filtrer_texte_cairn($suite);
     219                    } else {
     220                        $t .= "<para id=\"pa$cpt\"><alinea>"
     221                            . filtrer_texte_cairn($para)
     222                            . "</alinea></para>"
     223                            . filtrer_texte_cairn($suite);
     224                    }
     225                }
    220226        }
    221227
     
    251257
    252258        return $t;
    253 
    254         #return filtre_cdata($t);
    255259}
    256260
Note: See TracChangeset for help on using the changeset viewer.