Пример #1
0
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;
}
Пример #2
0
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);
}