phraser_html.php
SPIP, Système de publication pour l'internet
Copyright © avec tendresse depuis 2001 Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James
Ce programme est un logiciel libre distribué sous licence GNU/GPL.
Table of Contents
Constants
- BALISE_ALT_BOUCLE = '<//B'
- Fin de la partie alternative après d'une boucle
- BALISE_BOUCLE = '<BOUCLE'
- Début de la partie principale d'une boucle
- BALISE_FIN_BOUCLE = '</BOUCLE'
- Fin de la partie principale d'une boucle
- BALISE_IDIOMES = ',<:(([a-z0-9_]+):)?([a-z0-9_]*)({([^\|=>]*=[^\|>]*)})?((\|[^>]*)?:/?>),iS'
- BALISE_IDIOMES_ARGS = '@^\s*([^= ]*)\s*=\s*((' . \NOM_DE_CHAMP . '[{][^}]*})?[^,]*)\s*,?\s*@s'
- BALISE_INCLURE = '/<INCLU[DR]E[[:space:]]*/S'
- BALISE_POLYGLOTTE = ',<multi>(.*)</multi>,Uims'
- BALISE_POSTAFF_BOUCLE = '</BB'
- Fin de la partie après non optionnelle d'une boucle (toujours affichee)
- BALISE_POSTCOND_BOUCLE = '</B'
- Fin de la partie optionnelle après d'une boucle
- BALISE_PREAFF_BOUCLE = '<BB'
- Début de la partie avant non optionnelle d'une boucle (toujours affichee)
- BALISE_PRECOND_BOUCLE = '<B'
- Début de la partie optionnelle avant d'une boucle
- CHAMP_ETENDU = '/\[([^\[]*?)\(' . \NOM_DE_CHAMP . '([^)]*\)[^]]*)\]/S'
- Balise complète [...(#TOTO) ... ]
- CHAMP_SQL_PLUS_FONC = '`?([A-Z_\/][A-Z_\/0-9.]*)' . \SQL_ARGS . '?`?'
- Fonction SQL sur un champ ex: SUM(visites)
- NOM_DE_BOUCLE = '[0-9]+|[-_][-_.a-zA-Z0-9]*'
- Expression pour trouver un identifiant de boucle
- NOM_DE_CHAMP = '#((' . \NOM_DE_BOUCLE . "):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A-Z_]+)\\b(\\*{0,2})"
- Nom d'une balise #TOTO
- SPEC_BOUCLE = '/\s*\(\s*([^\s?)]+)(\s*[^)?]*)([?]?)\)/'
- Expression pour trouver le type de boucle (TABLE autre_table ?)
- SQL_ARGS = '(\([^)]*\))'
- Champ sql dans parenthèse ex: (id_article)
- TYPE_RECURSIF = 'boucle'
- Indique un début de boucle récursive
Functions
- phraser_inclure() : array<string|int, mixed>
- Parser les <INCLURE> dans le texte
- phraser_polyglotte() : array<string|int, mixed>
- Phraser les <multi>...</multi> on passe en dernier de toutes les analyses : a ce stade il ne reste que des morceaux de texte entre balises/boucles, donc une <multi> ne peut pas contenir de balises
- phraser_preparer_idiomes() : string
- Repérer les balises de traduction (idiomes)
- phraser_champs() : array<string|int, mixed>
- Repère et phrase les balises SPIP tel que `#NOM` dans un texte
- phraser_champs_etendus() : array<string|int, mixed>
- Phraser les champs etendus
- phraser_args() : array<string|int, mixed>
- Analyse les filtres d'un champ etendu et affecte le resultat renvoie la liste des lexemes d'origine augmentee de ceux trouves dans les arguments des filtres (rare) sert aussi aux arguments des includes et aux criteres de boucles Tres chevelu
- phraser_arg() : mixed
- phraser_champs_exterieurs() : array<string|int, mixed>
- Reconstruire un tableau de resultat ordonné selon l'ordre d'apparition dans le texte issu de phraser_champs_interieurs() et phraser les inclure sur les morceaux intermédiaires
- phraser_champs_interieurs() : array<string|int, mixed>
- Parser un texte pour trouver toutes les balises complètes `[...(#TRUC)...]` en gérant les imbrications possibles
- phraser_vieux() : mixed
- Gerer les derogations de syntaxe historiques Ne concerne plus que #MODELE et <INCLURE> / #INCLURE
- phraser_criteres() : mixed
- Analyse les critères de boucle
- phraser_critere_infixe() : mixed
- public_compte_ligne() : int
- Compter le nombre de lignes dans une partie texte
- public_trouver_premiere_boucle() : array<string|int, mixed>|null
- Trouver la boucle qui commence en premier dans un texte On repere les boucles via <BOUCLE_xxx( et ensuite on regarde son vrai debut soit <B_xxx> soit <BB_xxx>
- public_trouver_fin_boucle() : array<string|int, mixed>
- Trouver la fin de la boucle (balises </B <//B </BB) en faisant attention aux boucles anonymes qui ne peuvent etre imbriquees
- phraser_placeholder_hash() : string
- Définir un placeholder avec un hash unique pour substitution dans un texte donné on s'assure de n'avoir aucune occurence existante dans le texte
- phraser_placeholder_memoriser() : mixed
- Memoriser un champ ou une boucle associé a son placeholder
- phraser_placeholder_reinjecter() : mixed
- Reinejcter un champ ou une boucle associé a son placeholder
- public_placeholder_generer() : string
- Generer une balise placeholder qui prend la place d'une boucle ou d'un champ pour continuer le parsing des balises utilisé pour remplacer une boucle ou un idiome
- public_phraser_html_dist() : array<string|int, mixed>
- Analyseur syntaxique des squelettes HTML SPIP On commence par analyser les boucles, les mémoriser, et les remplacer dans le texte par des placeholder qui ne genent pas la suite de l'analyse des balises et autres
Constants
BALISE_ALT_BOUCLE
Fin de la partie alternative après d'une boucle
public
mixed
BALISE_ALT_BOUCLE
= '<//B'
BALISE_BOUCLE
Début de la partie principale d'une boucle
public
mixed
BALISE_BOUCLE
= '<BOUCLE'
BALISE_FIN_BOUCLE
Fin de la partie principale d'une boucle
public
mixed
BALISE_FIN_BOUCLE
= '</BOUCLE'
BALISE_IDIOMES
public
mixed
BALISE_IDIOMES
= ',<:(([a-z0-9_]+):)?([a-z0-9_]*)({([^\|=>]*=[^\|>]*)})?((\|[^>]*)?:/?>),iS'
BALISE_IDIOMES_ARGS
public
mixed
BALISE_IDIOMES_ARGS
= '@^\s*([^= ]*)\s*=\s*((' . \NOM_DE_CHAMP . '[{][^}]*})?[^,]*)\s*,?\s*@s'
BALISE_INCLURE
public
mixed
BALISE_INCLURE
= '/<INCLU[DR]E[[:space:]]*/S'
BALISE_POLYGLOTTE
public
mixed
BALISE_POLYGLOTTE
= ',<multi>(.*)</multi>,Uims'
BALISE_POSTAFF_BOUCLE
Fin de la partie après non optionnelle d'une boucle (toujours affichee)
public
mixed
BALISE_POSTAFF_BOUCLE
= '</BB'
BALISE_POSTCOND_BOUCLE
Fin de la partie optionnelle après d'une boucle
public
mixed
BALISE_POSTCOND_BOUCLE
= '</B'
BALISE_PREAFF_BOUCLE
Début de la partie avant non optionnelle d'une boucle (toujours affichee)
public
mixed
BALISE_PREAFF_BOUCLE
= '<BB'
BALISE_PRECOND_BOUCLE
Début de la partie optionnelle avant d'une boucle
public
mixed
BALISE_PRECOND_BOUCLE
= '<B'
CHAMP_ETENDU
Balise complète [...(#TOTO) ... ]
public
mixed
CHAMP_ETENDU
= '/\[([^\[]*?)\(' . \NOM_DE_CHAMP . '([^)]*\)[^]]*)\]/S'
CHAMP_SQL_PLUS_FONC
Fonction SQL sur un champ ex: SUM(visites)
public
mixed
CHAMP_SQL_PLUS_FONC
= '`?([A-Z_\/][A-Z_\/0-9.]*)' . \SQL_ARGS . '?`?'
NOM_DE_BOUCLE
Expression pour trouver un identifiant de boucle
public
mixed
NOM_DE_BOUCLE
= '[0-9]+|[-_][-_.a-zA-Z0-9]*'
NOM_DE_CHAMP
Nom d'une balise #TOTO
public
mixed
NOM_DE_CHAMP
= '#((' . \NOM_DE_BOUCLE . "):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A-Z_]+)\\b(\\*{0,2})"
Écriture alambiquée pour rester compatible avec les hexadecimaux des vieux squelettes
SPEC_BOUCLE
Expression pour trouver le type de boucle (TABLE autre_table ?)
public
mixed
SPEC_BOUCLE
= '/\s*\(\s*([^\s?)]+)(\s*[^)?]*)([?]?)\)/'
SQL_ARGS
Champ sql dans parenthèse ex: (id_article)
public
mixed
SQL_ARGS
= '(\([^)]*\))'
TYPE_RECURSIF
Indique un début de boucle récursive
public
mixed
TYPE_RECURSIF
= 'boucle'
Functions
phraser_inclure()
Parser les <INCLURE> dans le texte
phraser_inclure(string $texte, int $ligne, array<string|int, mixed> $result) : array<string|int, mixed>
Parameters
- $texte : string
- $ligne : int
- $result : array<string|int, mixed>
Return values
array<string|int, mixed>phraser_polyglotte()
Phraser les <multi>...</multi> on passe en dernier de toutes les analyses : a ce stade il ne reste que des morceaux de texte entre balises/boucles, donc une <multi> ne peut pas contenir de balises
phraser_polyglotte(string $texte, int $ligne, array<string|int, mixed> $result) : array<string|int, mixed>
Parameters
- $texte : string
- $ligne : int
- $result : array<string|int, mixed>
Tags
Return values
array<string|int, mixed>phraser_preparer_idiomes()
Repérer les balises de traduction (idiomes)
phraser_preparer_idiomes(string $texte, int $ligne, string $sep, array<string|int, mixed> $result) : string
Phrase les idiomes tel que
<:chaine:>
<:module:chaine:>
<:module:chaine{arg1=texte1,arg2=#BALISE}|filtre1{texte2,#BALISE}|filtre2:>
<:module:chaine{arg1=texte1,arg2=[(#BALISE)]}|filtre1{texte2,#BALISE}|filtre2:>
<:module:{=#VAL{chaine},arg1=texte1,arg2=[(#BALISE)]}|filtre1{texte2,#BALISE}|filtre2:>
<:{=#VAL{module:chaine},arg1=texte1,arg2=[(#BALISE)]}|filtre1{texte2,#BALISE}|filtre2:>
Pour permettre une syntaxe complète dans les arguments, on transforme la syntaxe <:..:> en une syntaxe standard de balises
[(#TRAD_IDIOME{module:chaine,arg1=texte1,arg2=[(#BALISE)]}|filtre1{texte2,#BALISE}|filtre2)]
qui est ensuite parsée comme une balise standard
Parameters
- $texte : string
- $ligne : int
- $sep : string
- $result : array<string|int, mixed>
Tags
Return values
stringphraser_champs()
Repère et phrase les balises SPIP tel que `#NOM` dans un texte
phraser_champs(string $texte, int $ligne, array<string|int, mixed> $result) : array<string|int, mixed>
Phrase également ses arguments si la balise en a (#NOM{arg, ...}
)
Parameters
- $texte : string
- $ligne : int
- $result : array<string|int, mixed>
Tags
Return values
array<string|int, mixed>phraser_champs_etendus()
Phraser les champs etendus
phraser_champs_etendus(string $texte, int $ligne, array<string|int, mixed> $result) : array<string|int, mixed>
Parameters
- $texte : string
- $ligne : int
- $result : array<string|int, mixed>
Tags
Return values
array<string|int, mixed>phraser_args()
Analyse les filtres d'un champ etendu et affecte le resultat renvoie la liste des lexemes d'origine augmentee de ceux trouves dans les arguments des filtres (rare) sert aussi aux arguments des includes et aux criteres de boucles Tres chevelu
phraser_args(string $texte, string $fin, string $sep, array<string|int, mixed> $result, Champ|Inclure|Boucle &$pointeur_champ, int &$pos_debut) : array<string|int, mixed>
Parameters
- $texte : string
- $fin : string
- $sep : string
- $result : array<string|int, mixed>
- $pointeur_champ : Champ|Inclure|Boucle
- $pos_debut : int
Tags
Return values
array<string|int, mixed>phraser_arg()
phraser_arg(mixed &$texte, mixed $sep, mixed $result, mixed &$pointeur_champ) : mixed
Parameters
- $texte : mixed
- $sep : mixed
- $result : mixed
- $pointeur_champ : mixed
phraser_champs_exterieurs()
Reconstruire un tableau de resultat ordonné selon l'ordre d'apparition dans le texte issu de phraser_champs_interieurs() et phraser les inclure sur les morceaux intermédiaires
phraser_champs_exterieurs(string $texte, int $ligne, string $sep, array<string|int, mixed> $nested_res) : array<string|int, mixed>
Parameters
- $texte : string
- $ligne : int
- $sep : string
- $nested_res : array<string|int, mixed>
Return values
array<string|int, mixed>phraser_champs_interieurs()
Parser un texte pour trouver toutes les balises complètes `[...(#TRUC)...]` en gérant les imbrications possibles
phraser_champs_interieurs(string $texte, int $no_ligne, string $sep) : array<string|int, mixed>
Pour cela on commence par les plus profondes, sans rien dedans,
on les remplace par un placehoder inactif %###N@
ou N indexe un tableau comportant le resultat de leur analyse
et on recommence jusqu'à ce qu'on ne trouve plus rien
Parameters
- $texte : string
- $no_ligne : int
- $sep : string
Return values
array<string|int, mixed>phraser_vieux()
Gerer les derogations de syntaxe historiques Ne concerne plus que #MODELE et <INCLURE> / #INCLURE
phraser_vieux(Champ|Inclure &$champ) : mixed
Parameters
- $champ : Champ|Inclure
Tags
phraser_criteres()
Analyse les critères de boucle
phraser_criteres(array<string|int, mixed> $params, Boucle &$result) : mixed
Chaque paramètre de la boucle (tel que {id_article>3}) est analysé pour construire un critère (objet Critere) de boucle.
Un critère a une description plus fine que le paramètre original car on en extrait certaines informations tel que la négation et l'opérateur utilisé s'il y a.
La fonction en profite pour déclarer des modificateurs de boucles en présence de certains critères (tout, plat) ou initialiser des variables de compilation (doublons)...
Parameters
- $params : array<string|int, mixed>
-
Tableau de description des paramètres passés à la boucle. Chaque paramètre deviendra un critère
- $result : Boucle
-
Description de la boucle Elle sera complété de la liste de ses critères
phraser_critere_infixe()
phraser_critere_infixe(mixed $arg1, mixed $arg2, mixed $args, mixed $op, mixed $not, mixed $cond) : mixed
Parameters
- $arg1 : mixed
- $arg2 : mixed
- $args : mixed
- $op : mixed
- $not : mixed
- $cond : mixed
public_compte_ligne()
Compter le nombre de lignes dans une partie texte
public_compte_ligne(string $texte[, int $debut = 0 ][, int|null $fin = null ]) : int
Parameters
- $texte : string
- $debut : int = 0
- $fin : int|null = null
Return values
intpublic_trouver_premiere_boucle()
Trouver la boucle qui commence en premier dans un texte On repere les boucles via <BOUCLE_xxx( et ensuite on regarde son vrai debut soit <B_xxx> soit <BB_xxx>
public_trouver_premiere_boucle(string $texte, string $id_parent, array<string|int, mixed> $descr[, int $pos_debut_texte = 0 ]) : array<string|int, mixed>|null
Parameters
- $texte : string
- $id_parent : string
- $descr : array<string|int, mixed>
- $pos_debut_texte : int = 0
Return values
array<string|int, mixed>|nullpublic_trouver_fin_boucle()
Trouver la fin de la boucle (balises </B <//B </BB) en faisant attention aux boucles anonymes qui ne peuvent etre imbriquees
public_trouver_fin_boucle(string $texte, string $id_parent, array<string|int, mixed> $boucle, int $pos_debut_texte, object $result) : array<string|int, mixed>
Parameters
- $texte : string
- $id_parent : string
- $boucle : array<string|int, mixed>
- $pos_debut_texte : int
- $result : object
Return values
array<string|int, mixed> —la description de la boucle dans un tableau associatif
phraser_placeholder_hash()
Définir un placeholder avec un hash unique pour substitution dans un texte donné on s'assure de n'avoir aucune occurence existante dans le texte
phraser_placeholder_hash(string &$texte, string $placeholder_prefixe) : string
Parameters
- $texte : string
- $placeholder_prefixe : string
Return values
stringphraser_placeholder_memoriser()
Memoriser un champ ou une boucle associé a son placeholder
phraser_placeholder_memoriser(string $champ, string $nom_champ_placeholder, mixed $boucle_ou_champ) : mixed
Parameters
- $champ : string
- $nom_champ_placeholder : string
- $boucle_ou_champ : mixed
Tags
phraser_placeholder_reinjecter()
Reinejcter un champ ou une boucle associé a son placeholder
phraser_placeholder_reinjecter(mixed &$champ) : mixed
Parameters
- $champ : mixed
Tags
public_placeholder_generer()
Generer une balise placeholder qui prend la place d'une boucle ou d'un champ pour continuer le parsing des balises utilisé pour remplacer une boucle ou un idiome
public_placeholder_generer(string $nom_structure, mixed &$boucle_ou_champ, string $placeholder_pattern, int $nb_lignes[, bool $force_balise_etendue = false ]) : string
Parameters
- $nom_structure : string
- $boucle_ou_champ : mixed
- $placeholder_pattern : string
- $nb_lignes : int
- $force_balise_etendue : bool = false
Return values
stringpublic_phraser_html_dist()
Analyseur syntaxique des squelettes HTML SPIP On commence par analyser les boucles, les mémoriser, et les remplacer dans le texte par des placeholder qui ne genent pas la suite de l'analyse des balises et autres
public_phraser_html_dist(string $texte, string $id_parent, array<string, Boucle> &$boucles, array<string|int, mixed> $descr[, int $ligne_debut_texte = 1 ][, string|null $boucle_placeholder = null ]) : array<string|int, mixed>
Parameters
- $texte : string
- $id_parent : string
- $boucles : array<string, Boucle>
- $descr : array<string|int, mixed>
- $ligne_debut_texte : int = 1
- $boucle_placeholder : string|null = null