function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect = '') { // Pre-traitement : reperer le charset du squelette, et le convertir // Bonus : supprime le BOM include_spip('inc/charsets'); $squelette = transcoder_page($squelette); // rendre inertes les echappements de #[](){}<> $i = 0; while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) { $i++; } $squelette = preg_replace_callback(',\\\\([#[()\\]{}<>]),', create_function('$a', "return '{$inerte}-'.ord(\$a[1]).'-';"), $squelette, -1, $esc); $descr = array('nom' => $nom, 'gram' => $gram, 'sourcefile' => $sourcefile, 'squelette' => $squelette); // Phraser le squelette, selon sa grammaire $boucles = array(); $f = charger_fonction('phraser_' . $gram, 'public'); $squelette = $f($squelette, '', $boucles, $descr); $boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect); // restituer les echappements if ($esc) { foreach ($boucles as $i => $boucle) { $boucles[$i]->return = preg_replace_callback(",{$inerte}-(\\d+)-,", create_function('$a', 'return chr($a[1]);'), $boucle->return); $boucles[$i]->descr['squelette'] = preg_replace_callback(",{$inerte}-(\\d+)-,", create_function('$a', 'return "\\\\".chr($a[1]);'), $boucle->descr['squelette']); } } $debug = ($boucles and defined('_VAR_MODE') and _VAR_MODE == 'debug'); if ($debug) { include_spip('public/decompiler'); foreach ($boucles as $id => $boucle) { if ($id) { $decomp = "\n/* BOUCLE " . $boucle->type_requete . " " . str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) . " */\n"; } else { $decomp = "\n/*\n" . str_replace('*/', '* /', public_decompiler($squelette, $gram)) . "\n*/"; } $boucles[$id]->return = $decomp . $boucle->return; $GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return; } } return $boucles; }
function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect = ''){ // Pre-traitement : reperer le charset du squelette, et le convertir // Bonus : supprime le BOM include_spip('inc/charsets'); $squelette = transcoder_page($squelette); $descr = array('nom' => $nom, 'gram' => $gram, 'sourcefile' => $sourcefile, 'squelette' => $squelette); // Phraser le squelette, selon sa grammaire $boucles = array(); $f = charger_fonction('phraser_' . $gram, 'public'); $squelette = $f($squelette, '', $boucles, $descr); return compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect); }