Petit nouveau ! |
6 Messages
04 sept. 2011, 17:35
Bonjour, pour ma part pour faire mon propre bbcode je passe par un fichier de configuration (en xml, même si le json aurait été plus léger à ce propos, mais bon...)
Par exemple, voici la config d'un bbcode de base (avec pas trop de fonctionalités
Code : Tout sélectionner
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : bbCode_config.xml
Created on : 28 juillet 2011, 20:30
Author : isen
Description:
Ce document offre une configuration du BBcode du site dans le but d'une intégration simple des balises
->soit elles sont remplacées par <span class="replace_class">...</span>
->soit elles sont remplacées par <replace_tag>...</replace_tag>
->soit elles seront à nouveau parsée par recursive_parser
Si un tag accepte une variable alors sa configuration donne le nom de cette variable
-->
<allTags>
<tag name="u" replace_tag="<span class="souligne">$1</span>"/>
<tag name="b" replace_tag="<span class="gras">$1</span>"/>
<tag name="i" replace_tag="<span class="italique">$1</span>"/>
<tag name="color" replace_tag="<span style="color:$1;">$2</span>" req_vars="color"/>
<tag name="ul" replace_tag="<ul>$1</ul>"/>
<tag name="ol" replace_tag="<ol>$1</ol>"/>
<tag name="li" replace_tag="<li>$1</li>" sub_tag_of="ul,ol"/>
<tag name="quote" replace_tag="<blockquote><p>Ecrit par : $1 </p><p>$2</p>"
without_vars="<blockquote><p>$1</p>" recursive_limit="5" req_vars="auteur"/>
<tag name="iquote" replace_tag="<q>$1</q>"/>
<tag name="code" recursive_parser="CodeParser" req_vars="langage"/>
<tag name="url" replace_tag="<a href="$2"> $1</a>"
without_vars="<a href="$1"> $1</a>" vars="link"/>
<tag name="img" replace_tag="<img src="$1"/>"/>
</allTags>
comme tu le vois, pour le li (le * sur ce forum) j'ai précisé "sub_tag_of". Lorsque mon parser découvre cet attribut il dit "ne transforme que les \[li].+\[/li] qui sont à l'intérieur de <ul> ou <ol> (qui ont déjà été parsés).
Voici le bout de code qui correspond dans mon parser :
if($tag->hasAttribute('sub_tag_of')){
//on cherche les éléments déjà parsés
$tags=explode(',', $tag->getAttribute('sub_tag_of'));
foreach($tags as $cur){
$matches=array();
$change=array();
// on sélection ces éléments déjà parsés
preg_match_all('#<'.$cur.'>(.+)</'.$cur.'>#UimS', $this->texteToParse, $matches);
//puis on parse les éléments intérieurs du type $tag->getAttribute('name')
$change=$this->subTagParse($matches, $tag->getAttribute('name'),$regex);
//Ensuite remplace les anciens textes par les nouveaux
foreach($matches[1] as $key=>$value){
$newText=str_replace($value, $change[$key], $matches[0][$key]);
$this->texteToParse=str_replace($matches[0][$key], $newText, $this->texteToParse);
}
}
}