nur-sery/src/php/content
2024-06-23 15:11:30 +04:00
..
c.php modifs.mineures sans commentaires 2024-06-23 15:07:50 +04:00
IContent.php modifs.mineures sans commentaires 2024-04-04 23:10:10 +04:00
IPrintable.php modifs.mineures sans commentaires 2023-12-31 18:54:10 +04:00
IStaticContent.php modifs.mineures sans commentaires 2023-12-31 18:54:10 +04:00
README.md modifs.mineures sans commentaires 2024-06-23 15:07:50 +04:00

nulib\php\content

un contenu est une liste de valeurs, avec une syntaxe pour que certains éléments soient dynamiquement calculés.

le contenu final est résolu selon les règles suivantes:

  • Si le contenu n'est pas un tableau:
    • une chaine est quotée avec htmlspecialchars()
    • un scalaire ou une instance d'objet sont pris tels quels
  • Sinon, le contenu doit être un tableau, séquentiel ou associatif, ça n'a pas d'incidence
    • les éléments scalaires ou instance d'objets sont pris tels quels
    • les tableaux représentent un traitement dynamique: appel de fonction, instanciation, etc.

Les syntaxes possibles sont:

[[], $args...]
merge littéral: les valeurs $args... sont insérées dans le flux du contenu sans modification. c'est la seule façon d'insérer un tableau dans la liste des valeurs
["class_or_function", $args...]
[["class_or_function"], $args...]
instantiation ou appel de fonction
["->method", $args...]
[["->method"], $args...]
[[null, "method"], $args...]
appel de méthode sur l'objet contexte spécifié lors de la résolution du contenu
[[$object, "method"], $args...]
appel de méthode sur l'objet spécifié
[["class", "method"], $args...]
appel de méthode statique de la classe spécifiée

Le fait de transformer un contenu en une liste de valeurs statiques s'appelle la résolution. la résolution se fait par rapport à un objet contexte, qui est utilisé lors des appels de méthodes.

Affichage d'un contenu

Deux interfaces sont utilisées pour modéliser un élément de contenu à afficher:

  • IContent: objet capable de produire du contenu
  • IPrintable: objet capable d'afficher un contenu

Tous les autres éléments de contenus sont transformés en string avant affichage. Un système de formatters permet de définir des fonctions ou méthodes à utiliser pour formatter des objets de certains types.

Lors de l'affichage du contenu, deux éléments contigûs $a et $b sont affichés séparés par un espace sauf si:

  • $a se termine par [> ] OU
  • $b commence par [< ]
  • $a et $b sont dans une section littérale e.g [[], $a, $b]

-- coding: utf-8 mode: markdown -- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary