Menu

Diff of /trunk/python/old/python.lib.php [000000] .. [r44]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/trunk/python/old/python.lib.php
@@ -0,0 +1,114 @@
+<?php
+
+$_PYTHON = array(
+	"DEBUG" => array(
+		"DUMP_TOKEN" => true
+	),
+	"PARSER" => null,
+);
+
+function python_start() {
+	global $_PYTHON;
+	
+	require_once("lime/parse_engine.php");
+	require_once("python.class");
+	require_once("python-tokenizer.php");
+	require_once("python-interface.php");
+
+	$_PYTHON["PARSER"] = new parse_engine(new python());	
+}
+
+function python_eval($pycode) {
+	global $_PYTHON;
+
+	$parser = &$_PYTHON["PARSER"];	
+	$codeln = 1;
+	
+	if (!strlen($pycode)) return;
+	try {
+		$parser-> reset();
+		$tokens = python_tokenize($pycode);
+		
+		//var_dump($tokens);
+		if ($_PYTHON["DEBUG"]["DUMP_TOKEN"]) {
+			foreach($tokens as $token) {
+				python_dump_token($token);
+			}
+			echo '<hr/>';
+		}
+		
+		$alltok = count($tokens);
+		$cursor = 0;
+		
+		while($cursor < $alltok) {
+			$token0 = $tokens[$cursor];
+			$token1 = isset($tokens[$cursor+1]);						
+			$parser-> eat($token0["name"], $token0["value"]);			
+			if ($_PYTHON["DEBUG"]["DUMP_TOKEN"]) {python_dump_token($token0);}
+			if ($token0["name"] == "NEWLINE") {
+				$codeln++;
+			}			
+			$cursor++;
+		}
+		
+		$parser->eat_eof();
+		
+	} catch (parse_error $e) {
+		echo '<pre>';
+		echo $e->getMessage(), "\nLine: $codeln;", "\n";
+		echo '</pre>';
+	}
+		
+}
+
+function python_file($filename) {
+	$code = file_get_contents($filename);
+	python_eval($code);
+}
+
+function python_exec($filename) {
+	$code = file_get_contents($filename);
+	#echo '<pre>';
+	#echo htmlentities($code);
+	#echo '</pre>';
+	python_eval($code);
+}
+
+function python_build() {
+	require_once("lime/lime.php");
+	$code = parse_lime_grammar(dirname(__FILE__)."/python.lime");
+	file_put_contents(dirname(__FILE__)."/python.class","<?php \n".$code."\n?>");
+}
+
+function python_sanitize($code) {
+	return $code;
+}
+
+
+
+function python_token($name,$value=null,$len=1) {
+	return array(
+		"name" => $name,
+		"value" => $value,
+		"len"	 => $len
+	);
+}
+
+function python_parse_comment($comment) {
+	global $_PYTHON;
+	
+	if (re("/^#\{([a-zA-Z_][a-zA-Z0-9_]*)\}:(.*)/",$comment,$r)){
+		$_PYTHON["DEBUG"][$r[1]] = trim($r[2]);	
+		#var_dump($_PYTHON["DEBUG"]);
+	}
+}
+
+function python_dump_token($token) {
+	echo '<span style="margin:0 2px 2px 0;display:inline-block;padding:0px 4px;font-family:arial;font-size:10px;background:yellow;color:#323232;border:1px solid #323232;">';
+	if (is_object($token["value"])) {
+		echo $token["name"].'('.strip_tags($token["value"]->name).')';
+	} else {
+		echo $token["name"].'('.strip_tags($token["value"]).')';
+	}
+	echo '</span>';
+}