Aller au contenu

Conversion en UJO

phil/markup-bundle

Phil\MarkupBundle\Infrastructure\Conversion\UjoConverter, un service public, convertit une source dans tout format activé en UJO (Universal JSON Output), le format de document par blocs de phil/ujo : ce qu'ouvre un éditeur par blocs, et ce que garde un texte une fois publié.

MéthodeDonne
reader($format = null, $level = null)Le MarkupReader d'un format, à un niveau
read($source, $format = null, $level = null)Le Reading : le Document UJO et les métadonnées écrites à part du texte
toJson($source, $format = null, $level = null, $pretty = false)Le JSON UJO du document

Un format et un niveau se donnent sous forme des enums de phil/markup ou de leurs valeurs, un format de complément par son nom ; null prend le default_format et le default_level de la configuration. Un format non activé lance UnavailableFormat, une source UJO invalide lance InvalidSource ; les analyseurs des formats qu'écrivent les gens ne lancent jamais d'exception.

$reading = $converter->read("---\ntitle: Notes\n---\n# Hello", 'markdown');
$reading->metadata;                         // ['title' => 'Notes']

$json = $converter->toJson('[b]Bonjour[/b]', 'bbcode');
// '{"blocks":[{"id":"b1","type":"paragraph","data":{"text":"<b>Bonjour</b>"}}]}'

Tous les formats

Le Markdown, le BBCode, MediaWiki, DokuWiki, Creole et le HTML sont lus par les analyseurs de phil/markup, et les formats des compléments par les analyseurs qu'ils déclarent, chaque fonctionnalité étant associée au bloc UJO de même rôle. Le texte brut devient un paragraphe par suite de lignes. UJO est lu et vérifié par phil/ujo, puis réécrit sous forme canonique. La correspondance de chaque fonctionnalité dans chaque format se trouve dans la documentation des formats de phil/markup.

Le niveau

Le niveau auquel une source est lue décide d'une seule chose : le HTML brut qui y est écrit (un <div> en Markdown, [html] en BBCode, <html> dans un wiki) devient un bloc raw à all, et du texte échappé en dessous. Le niveau demandé est abaissé au plafond du format, comme pour les filtres : avec levels: { bbcode: forum }, le HTML brut d'une source BBCode est du texte, quoi que demande l'appel. Le document n'est pas purifié : ses blocs gardent leurs titres et leurs tableaux, et le purificateur s'applique quand le document est rendu et affiché.