Documentation du code de SPIP et de ses plugins

SPIP

compiler.php

Table of Contents

Constants

_REGEXP_CONCAT_NON_VIDE  = "/^(.*)[.]\\s*'[^']+'\\s*\$/"
_REGEXP_COND_NONVIDE_VIDE  = "/^[(](.*)[?]\\s*('[^']+')\\s*:\\s*''\\s*[)]\$/"
_REGEXP_COND_VIDE_NONVIDE  = "/^[(](.*)[?]\\s*''\\s*:\\s*('[^']+')\\s*[)]\$/"
CODE_COMMENTE  = \true
Indique s'il faut commenter le code produit
CODE_CORPS_BOUCLE  = '%s if (defined("_BOUCLE_PROFILER")) $timer = time()+(float)microtime(); $t0 = ""; // REQUETE $iter = Spip\\Compilateur\\Iterateur\\Factory::create( "%s", %s, array(%s) ); if (!$iter->err()) { %s%s$SP++; // RESULTATS %s %s$iter->free(); }%s if (defined("_BOUCLE_PROFILER") AND 1000*($timer = (time()+(float)microtime())-$timer) > _BOUCLE_PROFILER) spip_logger("profiler")->warning(intval(1000*$timer)."ms %s"); return $t0;'
Compilation d'une boucle non recursive.
CODE_MONOTONE  = ",^(\n//[^\n]*\n)?\\(?'([^'])*'\\)?\$,"
Repérer un code ne calculant rien, meme avec commentaire
CODE_RECUPERER_FOND  = 'recuperer_fond(%s, %s, array(%s), %s)'
Code d'appel à un <INCLURE()>

Functions

argumenter_inclure()  : mixed
calculer_inclure()  : string
Compile une inclusion <INCLURE> ou #INCLURE
instituer_boucle()  : mixed
Gérer les statuts declarés pour cette table
calculer_boucle()  : string
Produit le corps PHP d'une boucle Spip.
calculer_boucle_nonrec()  : string
Compilation d'une boucle (non recursive).
calculer_requete_sql()  : string
Calcule le code PHP d'une boucle contenant les informations qui produiront une requête SQL
memoriser_contexte_compil()  : string
Retourne une chaîne des informations du contexte de compilation
reconstruire_contexte_compil()  : Contexte
Reconstruit un contexte de compilation
calculer_dec()  : array<string|int, mixed>
Calcule le code d'affectation d'une valeur à une commande de boucle
calculer_dump_array()  : string
Calcule l'expression PHP décrivant un tableau complexe (ou une chaîne)
calculer_dump_join()  : mixed
calculer_from()  : string
Calcule l'expression PHP décrivant les informations FROM d'une boucle
calculer_from_type()  : string
Calcule l'expression PHP décrivant des informations de type de jointure pour un alias de table connu dans le FROM
calculer_order()  : mixed
calculer_liste()  : mixed
compile_cas()  : array<string|int, mixed>|false
compile_concatene_parties_codes()  : string
Concatene 2 parties de code, en simplifiant si l'une des 2 est vides
compile_retour()  : mixed|string
production d'une expression conditionnelle ((v=EXP) ? (p . v .s) : a) mais si EXP est de la forme (t ? 'C' : '') on produit (t ? (p . C . s) : a) de meme si EXP est de la forme (t ? '' : 'C')
compile_inclure_doublons()  : mixed
public_compiler_dist()  : mixed
compiler_squelette()  : mixed
requeteur_php_dist()  : mixed
Requeteur pour les boucles (php:nom_iterateur)
requeteur_data_dist()  : mixed
Requeteur pour les boucles (data:type de donnee) note: (DATA) tout court ne passe pas par ici.

Constants

_REGEXP_CONCAT_NON_VIDE

public mixed _REGEXP_CONCAT_NON_VIDE = "/^(.*)[.]\\s*'[^']+'\\s*\$/"

_REGEXP_COND_NONVIDE_VIDE

public mixed _REGEXP_COND_NONVIDE_VIDE = "/^[(](.*)[?]\\s*('[^']+')\\s*:\\s*''\\s*[)]\$/"

_REGEXP_COND_VIDE_NONVIDE

public mixed _REGEXP_COND_VIDE_NONVIDE = "/^[(](.*)[?]\\s*''\\s*:\\s*('[^']+')\\s*[)]\$/"

CODE_COMMENTE

Indique s'il faut commenter le code produit

public mixed CODE_COMMENTE = \true

CODE_CORPS_BOUCLE

Compilation d'une boucle non recursive.

public mixed CODE_CORPS_BOUCLE = '%s if (defined("_BOUCLE_PROFILER")) $timer = time()+(float)microtime(); $t0 = ""; // REQUETE $iter = Spip\\Compilateur\\Iterateur\\Factory::create( "%s", %s, array(%s) ); if (!$iter->err()) { %s%s$SP++; // RESULTATS %s %s$iter->free(); }%s if (defined("_BOUCLE_PROFILER") AND 1000*($timer = (time()+(float)microtime())-$timer) > _BOUCLE_PROFILER) spip_logger("profiler")->warning(intval(1000*$timer)."ms %s"); return $t0;'

La constante donne le cadre systématique du code:

  • %s1: initialisation des arguments de calculer_select
  • %s2: appel de calculer_select en donnant un contexte pour les cas d'erreur
  • %s3: initialisation du sous-tableau Numrows[id_boucle]
  • %s4: sauvegarde de la langue et calcul des invariants de boucle sur elle
  • %s5: boucle while sql_fetch ou str_repeat si corps monotone
  • %s6: restauration de la langue
  • %s7: liberation de la ressource, en tenant compte du serveur SQL
  • %s8: code de trace eventuel avant le retour

CODE_MONOTONE

Repérer un code ne calculant rien, meme avec commentaire

public mixed CODE_MONOTONE = ",^(\n//[^\n]*\n)?\\(?'([^'])*'\\)?\$,"

CODE_RECUPERER_FOND

Code d'appel à un <INCLURE()>

public mixed CODE_RECUPERER_FOND = 'recuperer_fond(%s, %s, array(%s), %s)'

Code PHP pour un squelette (aussi pour #INCLURE, #MODELE #LES_AUTEURS)

Functions

argumenter_inclure()

argumenter_inclure(mixed $params, mixed $rejet_filtres, mixed $p, mixed &$boucles, mixed $id_boucle[, mixed $echap = true ][, mixed $lang = '' ][, mixed $fond1 = false ]) : mixed
Parameters
$params : mixed
$rejet_filtres : mixed
$p : mixed
$boucles : mixed
$id_boucle : mixed
$echap : mixed = true
$lang : mixed = ''
$fond1 : mixed = false

calculer_inclure()

Compile une inclusion <INCLURE> ou #INCLURE

calculer_inclure(Inclure $p, array<string|int, mixed> &$boucles, string $id_boucle) : string
Parameters
$p : Inclure

Description de l'inclusion (AST au niveau de l'inclure)

$boucles : array<string|int, mixed>

AST du squelette

$id_boucle : string

Identifiant de la boucle contenant l'inclure

Return values
string

Code PHP appelant l'inclusion

instituer_boucle()

Gérer les statuts declarés pour cette table

instituer_boucle(Boucle &$boucle[, bool $echapper = true ][, bool $ignore_previsu = false ]) : mixed

S'il existe des statuts sur cette table, déclarés dans la description d'un objet éditorial, applique leurs contraintes

Parameters
$boucle : Boucle

Descrition de la boucle

$echapper : bool = true

true pour échapper le code créé

$ignore_previsu : bool = false

true pour ne tester que le cas publie et ignorer l'eventuel var_mode=preview de la page

calculer_boucle()

Produit le corps PHP d'une boucle Spip.

calculer_boucle(string $id_boucle, array<string|int, mixed> &$boucles) : string

Ce corps remplit une variable $t0 retournée en valeur. Ici on distingue boucles recursives et boucle à requête SQL et on insère le code d'envoi au debusqueur du resultat de la fonction.

Parameters
$id_boucle : string

Identifiant de la boucle

$boucles : array<string|int, mixed>

AST du squelette

Return values
string

Code PHP compilé de la boucle

calculer_boucle_nonrec()

Compilation d'une boucle (non recursive).

calculer_boucle_nonrec(string $id_boucle, array<string|int, mixed> &$boucles, string $trace) : string
Parameters
$id_boucle : string

Identifiant de la boucle

$boucles : array<string|int, mixed>

AST du squelette

$trace : string

Code PHP (en mode debug uniquement) servant à conserver une trace des premières valeurs de la boucle afin de pouvoir les afficher dans le débugueur ultérieurement

Return values
string

Code PHP compilé de la boucle récursive

calculer_requete_sql()

Calcule le code PHP d'une boucle contenant les informations qui produiront une requête SQL

calculer_requete_sql(Boucle $boucle) : string

Le code produit est un tableau associatif $command contenant les informations pour que la boucle produise ensuite sa requête, tel que $command['from'] = 'spip_articles';

Parameters
$boucle : Boucle

AST de la boucle

Return values
string

Code PHP compilé définissant les informations de requête

memoriser_contexte_compil()

Retourne une chaîne des informations du contexte de compilation

memoriser_contexte_compil(object $p) : string

Retourne la source, le nom, l'identifiant de boucle, la ligne, la langue de l'élément dans une chaîne.

Parameters
$p : object

Objet de l'AST dont on mémorise le contexte

Tags
see
reconstruire_contexte_compil()
Return values
string

Informations du contexte séparés par des virgules, qui peut être utilisé pour la production d'un tableau array()

reconstruire_contexte_compil()

Reconstruit un contexte de compilation

reconstruire_contexte_compil(array<string|int, mixed> $context_compil) : Contexte

Pour un tableau d'information de contexte donné, retourne un objet Contexte (objet générique de l'AST) avec ces informations

Parameters
$context_compil : array<string|int, mixed>

Tableau des informations du contexte

Tags
see
memoriser_contexte_compil()
Return values
Contexte

Objet Contexte

calculer_dec()

Calcule le code d'affectation d'une valeur à une commande de boucle

calculer_dec(string $nom, string $val) : array<string|int, mixed>

Décrit le code qui complète le tableau $command qui servira entre autres à l'itérateur. Pour un nom de commande donnée et un code PHP décrivant ou récupérant une valeur, on retourne le code PHP qui fait l'affectation.

L'index 0 du tableau retourné indique, lorsqu'il n'est pas vide, que l'affectation de la variable pourra être statique (c'est à dire qu'il ne dépend pas d'une quelconque variable PHP), et donc attribué une fois pour toutes quelque soit le nombre d'appels de la boucle.

Parameters
$nom : string

Nom de la commande

$val : string

Code PHP décrivant la valeur à affecter

Return values
array<string|int, mixed>
  • index 0 : Code pour une affectation statique. Si non rempli, la propriété devra être ré-affectée à chaque appel de la boucle.
  • index 1 : Code de l'affectation

calculer_dump_array()

Calcule l'expression PHP décrivant un tableau complexe (ou une chaîne)

calculer_dump_array(mixed $a) : string

Lorsqu'un tableau est transmis, reconstruit de quoi créer le tableau en code PHP (une sorte de var_export) en appelant pour chaque valeur cette fonction de manière récursive.

Si le premier index (0) du tableau est "'?'", retourne un code de test entre les 3 autres valeurs (v1 ? v2 : v3). Les valeurs pouvant être des tableaux aussi.

Parameters
$a : mixed

Les données dont on veut construire un équivalent de var_export

Return values
string

Expression PHP décrivant un texte ou un tableau

calculer_dump_join()

calculer_dump_join(mixed $a) : mixed
Parameters
$a : mixed

calculer_from()

Calcule l'expression PHP décrivant les informations FROM d'une boucle

calculer_from(Boucle &$boucle) : string
Parameters
$boucle : Boucle

Description de la boucle

Return values
string

Code PHP construisant un tableau des alias et noms des tables du FROM

calculer_from_type()

Calcule l'expression PHP décrivant des informations de type de jointure pour un alias de table connu dans le FROM

calculer_from_type(Boucle &$boucle) : string
Parameters
$boucle : Boucle

Description de la boucle

Return values
string

Code PHP construisant un tableau des alias et type de jointure du FROM

calculer_order()

calculer_order(mixed &$boucle) : mixed
Parameters
$boucle : mixed

calculer_liste()

calculer_liste(mixed $tableau, mixed $descr, mixed &$boucles[, mixed $id_boucle = '' ]) : mixed
Parameters
$tableau : mixed
$descr : mixed
$boucles : mixed
$id_boucle : mixed = ''
Tags
used-by
interprete_argument_balise()

compile_cas()

compile_cas(array<string|int, mixed> $tableau, array<string|int, mixed> $descr, array<string, Boucle&$boucles, string $id_boucle) : array<string|int, mixed>|false
Parameters
$tableau : array<string|int, mixed>
$descr : array<string|int, mixed>
$boucles : array<string, Boucle>
$id_boucle : string
Tags
uses
choisir_traduction()
Return values
array<string|int, mixed>|false

compile_concatene_parties_codes()

Concatene 2 parties de code, en simplifiant si l'une des 2 est vides

compile_concatene_parties_codes(string $partie1, string $partie2) : string
Parameters
$partie1 : string
$partie2 : string
Return values
string

compile_retour()

production d'une expression conditionnelle ((v=EXP) ? (p . v .s) : a) mais si EXP est de la forme (t ? 'C' : '') on produit (t ? (p . C . s) : a) de meme si EXP est de la forme (t ? '' : 'C')

compile_retour(string $code, string $avant, string $apres, string $altern, string $tab, int $n) : mixed|string
Parameters
$code : string

le code principal, dont le resultat conditionnera le reste

$avant : string

la partie conditionnelle avant, qui est calculee apres le code, mais s'affiche avant si le code produit un resultat

$apres : string

la partie conditionnelle apres, qui est calculee apres le code, et s'affiche apres si le code produit un resultat

$altern : string

la partie alternative apres, qui est calculee apres le code, et s'affiche apres, si le code ne produit pas de resultat

$tab : string

tabulation

$n : int

compteur

Return values
mixed|string

compile_inclure_doublons()

compile_inclure_doublons(mixed $lexemes) : mixed
Parameters
$lexemes : mixed

public_compiler_dist()

public_compiler_dist(mixed $squelette, mixed $nom, mixed $gram, mixed $sourcefile[, string $connect = '' ]) : mixed
Parameters
$squelette : mixed
$nom : mixed
$gram : mixed
$sourcefile : mixed
$connect : string = ''

compiler_squelette()

compiler_squelette(mixed $squelette, mixed $boucles, mixed $nom, mixed $descr, mixed $sourcefile[, string $connect = '' ]) : mixed
Parameters
$squelette : mixed
$boucles : mixed
$nom : mixed
$descr : mixed
$sourcefile : mixed
$connect : string = ''

requeteur_php_dist()

Requeteur pour les boucles (php:nom_iterateur)

requeteur_php_dist(array<string, Boucle&$boucles, Boucle &$boucle, string &$id) : mixed

Analyse si le nom d'iterateur correspond bien a une classe PHP existante et dans ce cas charge la boucle avec cet iterateur. Affichera une erreur dans le cas contraire.

Parameters
$boucles : array<string, Boucle>

Liste des boucles

$boucle : Boucle

La boucle parcourue

$id : string

L'identifiant de la boucle parcourue

requeteur_data_dist()

Requeteur pour les boucles (data:type de donnee) note: (DATA) tout court ne passe pas par ici.

requeteur_data_dist(array<string, Boucle&$boucles, Boucle &$boucle, string &$id) : mixed

Analyse si le type de donnee peut etre traite et dans ce cas charge la boucle avec cet iterateur. Affichera une erreur dans le cas contraire.

Parameters
$boucles : array<string, Boucle>

Liste des boucles

$boucle : Boucle

La boucle parcourue

$id : string

L'identifiant de la boucle parcourue


        
On this page

Search results