Aller au contenu

Texte brut

phil/ujo

PlainText::convert($document) donne le texte d'un document (pour un index de recherche, un extrait, un courriel, un résumé lu à voix haute) : le texte de chaque bloc sans HTML, décodé, les blocs séparés par une ligne vide, les blocs vides omis.

TypeTexte
paragraph, header, alert, runningFooter, footnote, rawle texte
banner, watermark, code, mermaid, mathla valeur brute
quote, credit, personalityles parties jointes par —
warningle titre et le message
delimiter***
listun élément par ligne, -, 1. ou [x]/[ ], deux espaces par niveau
definitionListchaque terme, puis ses définitions en retrait
tableune rangée par ligne, cellules séparées par `
indexle titre, puis term, pages, deux espaces par niveau
image, embed, galleryles légendes ; une image sans légende, son alt
linkToolle titre et l'adresse
attachesle titre, ou le nom du fichier
buttonle texte et l'adresse entre parenthèses
toggle, note, descriptivele titre, puis les blocs imbriqués
wide, columnFlow, container, columnsles blocs imbriqués
statblockle nom, le sous-titre, puis chaque section : titre, label: value, capacités, blocs imbriqués
les marqueurs de page, les décorations, chart, qrCode, toc, et tout type inconnurien

with() remplace la conversion d'un type, ou en ajoute une :

$text = new PlainText()->with('callout', static fn (Block $block, PlainText $text): string => $text->text($block->data['text'] ?? null));

passages($document, $language) donne le texte par langue, pour un index de recherche qui lit chaque passage avec l'analyseur de sa langue. Chaque bloc du premier niveau du document va à la langue que nomme son réglage language, en minuscules, ou à la langue donnée pour le document ; les passages en ligne (<span lang>) restent avec leur bloc. Les langues viennent dans l'ordre de leur premier bloc, et une langue dont les blocs ne donnent aucun texte est omise.

foreach (new PlainText()->passages($document, 'fr') as $language => $text) {
    $fields['body_'.str_replace('-', '_', $language)] = $text; // body_fr, body_en_ca…
}

La conversion reçoit le convertisseur, dont text() retire le HTML et dont blocks() convertit les blocs imbriqués. Ujo::toText() normalise d'abord le document.