Analyseurs Zend_Markup (parsers)

Moteurs de rendu Zend_Markup

Zend_Markup est fournie avec un moteur de rendu, le HTML.

Ajouter vos propres tags

En ajoutant vos tags, vous pouvez ajouter vos propres fonctionnalités aux moteurs de rendu de Zend_Markup. Grâce à la structure en tags, vous pouvez ajouter presque toutes les fonctionnalités que vous voulez, depuis des tags simples jusqu'à des structures de données complexes. Voici un exemple pour un tag simple 'foo':

  1. // Créer une instance de Zend_Markup_Renderer_Html,
  2. // avec Zend_Markup_Parser_BbCode comme analyseur
  3. $bbcode = Zend_Markup::factory('Bbcode');
  4.  
  5. // Ceci va créer un tag simple 'foo'
  6. // Le premier paramètre définit le nom du tag
  7. // Le second param prend un entier qui définit le type de tag.
  8. // Le troisième param est un tableau qui définit d'autres caractéristiques
  9. // du tag comme son groupe et (dans ce cas) les tags de début et de fin
  10. $bbcode->addTag(
  11.     'foo',
  12.     Zend_Markup_Renderer_RendererAbstract::TYPE_REPLACE,
  13.     array(
  14.         'start' => '-bar-',
  15.         'end'   => '-baz-',
  16.         'group' => 'inline'
  17.     )
  18. );
  19.  
  20. // La sortie sera: 'my -bar-tag-baz-'
  21. echo $bbcode->render('my [foo]tag[/foo]');

Notez que créer vos propres tags n'est utile que si l'analyseur syntaxique en tient compte. Actuellement, seul BBCode supporte cela. Textile ne supporte pas les tags personnalisés.

Certains moteurs de rendu (comme le moteur HTML) supporte un paramètre nommé 'tag'. Cela remplace les paramètres 'start' et 'end', et il rend le tag avec des attributs par défaut ainsi que le tag de fin.

Ajout d'un tag de rappel(callback)

Ajouter des tags de rappel permet de faire bien plus que de simples remplacements. Par exemple, vous pouvez changer le contenu, utiliser des paramètres pour changer la sortie, etc.

Un rappel est une classe qui implémente Zend_Markup_Renderer_TokenInterface Voici un exemple de classe de tag de rappel:

  1. class My_Markup_Renderer_Html_Upper extends Zend_Markup_Renderer_TokenConverterInterface
  2. {
  3.  
  4.     public function convert(Zend_Markup_Token $token, $text)
  5.     {
  6.         return '!up!' . strtoupper($text) . '!up!';
  7.     }
  8.  
  9. }

Il est possible maintenant d'ajouter le tag 'upper', avec comme fonction de rappel, une instance de My_Markup_Renderer_Html_Upper. Voici un exemple:

  1. // Créer une instance de Zend_Markup_Renderer_Html,
  2. // avec Zend_Markup_Parser_BbCode comme analyseur
  3. $bbcode = Zend_Markup::factory('Bbcode');
  4.  
  5. // Ceci va créer un tag simple 'foo'
  6. // Le premier paramètre définit le nom du tag
  7. // Le second param prend un entier qui définit le type de tag.
  8. // Le troisième param est un tableau qui définit d'autres caractéristiques
  9. // du tag comme son groupe et (dans ce cas) les tags de début et de fin
  10. $bbcode->addTag(
  11.     'upper',
  12.     Zend_Markup_Renderer_RendererAbstract::TYPE_REPLACE,
  13.     array(
  14.         'callback' => new My_Markup_Renderer_Html_Upper(),
  15.         'group'    => 'inline'
  16.     )
  17. );
  18.  
  19. // La sortie sera: 'my !up!TAG!up!'
  20. echo $bbcode->render('my [upper]tag[/upper]');

Liste de tags

Liste de tags
Entrée (bbcode) Sortie
[b]foo[/b] <strong>foo</strong>
[i]foo[/i] <em>foo</em>
[cite]foo[/cite] <cite>foo</cite>
[del]foo[/del] <del>foo</del>
[ins]foo[/ins] <ins>foo</ins>
[sup]foo[/sup] <sup>foo</sup>
[sub]foo[/sub] <sub>foo</sub>
[span]foo[/span] <span>foo</span>
[acronym title="PHP Hypertext Preprocessor]PHP[/acronym] <acronym title="PHP Hypertext Preprocessor">PHP</acronym>
[url=http://framework.zend.com/]Zend Framework[/url] <a href="http://framework.zend.com/">Zend Framework</a>
[h1]foobar[/h1] <h1>foobar</h1>
[img]http://framework.zend.com/images/logo.gif[/img] <img src="http://framework.zend.com/images/logo.gif" />

Analyseurs Zend_Markup (parsers)