Citations

All contributions published for previous SPIP versions

Pour ’habiller’ les citations d’un auteur...

deuxième version

Voici une autre fonction proposant un autre style de notation :

function citation ($letexte, $style = '', $tag = '/') {
 if(ereg("cit_tag=(.)",$letexte,$regs)) {
  $tag = $regs[1];
  $letexte = str_replace($regs[0], '', $letexte);
 }
 if(!$style OR !is_string($style)) $style = 'spip_cite';
 $regexp = "$tag$tag(([^$tag]+)$tag?([^$tag]+)?$tag?([^$tag]+)?$tag?([^$tag]+)?)$tag$tag";
 while(ereg($regexp, $letexte, $regs)) {
  $la_citation = trim($regs[2]);
  $l_auteur = trim($regs[3]);
  $la_source = trim($regs[4]);
  $le_style = trim($regs[5]);
  if($le_style) $style=$le_style;
  $terme = "<blockquote class=\"$style\">";
  if($l_auteur) $terme .= "<cite class=\"$style\">".$l_auteur."</cite>&nbsp;:<br>";
  $terme .= $la_citation;
  if($la_source) $terme .= "<div class=\"$style\">".$la_source."</div>";
  $terme .= "</blockquote>";
  $letexte = str_replace($regs[0], $terme, $letexte);
 }
 return $letexte;
}

Dans l’article, le rédacteur utilisera la notation :

//La Citation/Auteur/Source/Style//

Sachant que Auteur, Source et Style sont optionnels mais que l’ordre est important. Exemples :

//La Citation// affiche une citation sans auteur ni source, en employant le style par défaut.

//La Citation/Auteur// affiche une citation avec auteur mais sans source, en employant le style par défaut.

//La Citation//Source// affiche une citation sans auteur mais avec une source, en employant le style par défaut. (à noter qu’il FAUT 2 slashes (//) pour séparer la citation de la source)

//La Citation///ze_style// affiche une citation sans auteur ni source, en employant les styles ’*.ze_style’, à condition qu’ils soient définis quelquepart (feuille de style ou balise //La Citation///ze_style// . (à noter qu’il FAUT 2 slashes (///) pour séparer la citation du style)

D’autre part, il lui sera possible de définir lui-même le caractère de détection des citations en saisisant dans son texte :

cit_tag=X où X peut-être un caractère quelconque. Exemple :

Si le rédacteur ne veut pas de ’/’ comme caractère de détection, il peut faire :

cit_tag=#
##La citation##

Dans le squelette, le webmestre aura la possibilité de paramétrer :

[(#TEXTE|citation{ze_style, ze_tag})]. Les styles css utilisés par défaut seront ’*.ze_style’ et le caractères de détection de la citation sera ’ze_tag’ (un seul caractère). Sinon, les valeurs par défaut sont .cite_spip pour les styles et ’/’ pour le caractère de détection

Il faudra définir les styles par défaut (dans ’spip_style.css’, par exemple) :

blockquote.spip_cite { ... } #bloc de la citation
cite.spip_cite { ... } #bloc de l'auteur
div.spip_cite { ... } #bloc de la source

... et éventuellement, définir des style pour que les rédacteurs puissent varier les plaisirs :

blockquote.ze_style { ... } #bloc de la citation
cite.ze_style { ... } #bloc de l'auteur
div.ze_style { ... } #bloc de la source

blockquote.anozer_style { ... } #bloc de la citation
cite.anozer_style { ... } #bloc de l'auteur
div.anozer_style { ... } #bloc de la source

...etc...

article initial

On peut utiliser du code html dans son article de la manière suivante :

 <html>
  <blockquote style="border: 1px solid black; background-color: #eee; padding: 10px;">
   <cite style="font-weight: bold; text-decoration: underline;">
    Auteur
   </cite>
   :<br>Citation
   <div style="vertical-align: bottom; text-align: right;">Source</div>
  </blockquote>
 </html>

Mais comme le propre de spip est de permettre la rédaction sans forcément connaitre les astuces du langage du web, voici un filtre :

/*
 *   +----------------------------------+
 *    Nom du Filtre :    citation
 *   +----------------------------------+
 *    Date : mercredi 4 juin 2003
 *    Auteur :  James      + klike@firstream.net                                      
 *   +-------------------------------------+
 *    Fonctions de ce filtre :
 *     'habille' une citation avec un style prédéfini
 *   +-------------------------------------+ 
 *  
 * Pour toute suggestion, remarque, proposition d'ajout
 * reportez-vous au forum de l'article :
 * http://www.uzine.net/spip_contrib/article.php3?id_article=NumeroDeVotreArticle
*/

function citation ($letexte) {
 global $flag_pcre;
 if (!$flag_pcre) die('Emploi de fonction interdite');
 $regexp_echap = "/<cit(e|ation)?(.*?)>(.*?)<\/cit(e|ation)?>/si";

 while(preg_match($regexp_echap, $letexte, $regs)) {
  $num_echap++;
  $les_echap[$num_echap] = "<blockquote class=\"spip\">";
  if (eregi("de=\"([^\"]*)\"", $regs[2], $elem)) {
   $les_echap[$num_echap] .= "<cite class=\"spip\">de ".$elem[1]."</cite>&nbsp;:<br>";
  }
  $les_echap[$num_echap] .= $regs[3];
  if (eregi("source=\"([^\"]*)\"", $regs[2], $elem)) {
   $les_echap[$num_echap] .= "<div class=\"source\">Source : ".$elem[1]."</div>";
  }
  $pos = strpos($letexte, $regs[0]);
  $letexte = substr($letexte,0,$pos)."___SPIP_cit$num_echap ___"
   .substr($letexte,$pos+strlen($regs[0]));
 }

 while(ereg("___SPIP_cit([0-9]+) ___", $letexte, $match)) {
  $lenum = $match[1];
  $cherche = $match[0];
  $pos = strpos($letexte, $cherche);
  $letexte = substr($letexte, 0, $pos). $les_echap[$lenum] . substr($letexte, $pos + strlen($cherche));
 }

 return $letexte;
}
// FIN du Filtre citation

dans la feuille de style (spip_style, par exemple) :

cite.spip { font-weight: bold; text-decoration: underline; }
blockquote.spip { border: 1px solid black; background-color: #eee; padding: 10px; }
div.source { vertical-align: bottom; text-align: right;}

dans les squelettes, on applique le filtre :

[(#TEXTE|citation)]

et enfin, dans son article, ou une brève, il sera possible de faire :

<cit de="Auteur" source="Source">Citation</cit>

ce qui aura pour effet :

de Auteur :
Citation
Source : Source

updated on 29 October 2006

Discussion

Une discussion

Ajouter un commentaire

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom