Subversion Repositories fastphp

Compare Revisions

Regard whitespace Rev 42 → Rev 43

/trunk/codeexplorer_api.inc.php
0,0 → 1,127
<?php
 
define('SIGNAL_END_OF_TRANSMISSION', chr(1).chr(2).chr(3).chr(4).chr(5).chr(6).chr(7).chr(8));
define('SIGNAL_TERMINATE', chr(8).chr(7).chr(6).chr(5).chr(4).chr(3).chr(2).chr(1));
 
class FastPHPExitSignalReceivedException extends Exception {
 
}
 
abstract class FastPHPIcon {
private $type; // arbitary identifier
private $visibility; // 1=private, 2=protected, 3=public(default)
private $abstractFinal; // 'A', 'F', ''(default)
private $static; // true, false(default)
 
public function setType($type) {
$this->type = $type;
}
public function getType() {
return $this->type;
}
 
public function setAbstract() {
$this->abstractFinal = 'A';
}
public function isAbstract() {
return $this->abstractFinal == 'A';
}
 
public function setFinal() {
$this->abstractFinal = 'F';
}
public function isFinal() {
return $this->abstractFinal == 'F';
}
 
public function setStatic() {
$this->static = true;
}
public function isStatic() {
return $this->static;
}
 
public function setPrivate() {
$this->visibility = 1;
}
public function isPrivate() {
return $this->visibility == 1;
}
 
public function setProtected() {
$this->visibility = 2;
}
public function isProtected() {
return $this->visibility == 2;
}
 
public function setPublic() {
$this->visibility = 3;
}
public function isPublic() {
return $this->visibility == 3;
}
 
public function reset() {
$this->type = null;
$this->visibility = 3;
$this->abstractFinal = '';
$this->static = false;
}
 
public function __construct() {
$this->reset();
}
 
public abstract function imageIndex();
}
 
class FastPHPReader {
public static function readCodeFromEditor() {
$lines = array();
while ($f = fgets(STDIN)){
if (trim($f) == SIGNAL_END_OF_TRANSMISSION) break;
 
// Signal to terminate the code explorer
if (trim($f) == SIGNAL_TERMINATE) {
throw new FastPHPExitSignalReceivedException();
}
 
$lines[] = $f;
}
return implode("", $lines);
}
}
 
class FastPHPWriter {
 
public static function outputLeafNode(/*FastPHPIcon*/ $icon, /*int*/ $lineNo, /*string*/ $description) {
$iconImageIndex = is_null($icon) ? -1 : $icon->imageIndex();
echo 'N'.($iconImageIndex == -1 ? '____' : sprintf('%04s', $iconImageIndex)).
sprintf('%08s', $lineNo).
sprintf('%04s', strlen(trim($description))).
trim($description).
"\n";
}
 
public static function outputIncreaseLevel() {
echo "I\n";
}
 
public static function outputDecreaseLevel() {
echo "D\n";
}
 
public static function outputExit() {
echo "X\n";
}
 
public static function signalOutputEnd() {
echo "\n".SIGNAL_END_OF_TRANSMISSION."\n";
}
 
public static function outputHeader() {
echo "FAST100!";
}
 
}