diff options
Diffstat (limited to 'ksvg/scripts/getjs.php')
-rwxr-xr-x | ksvg/scripts/getjs.php | 390 |
1 files changed, 390 insertions, 0 deletions
diff --git a/ksvg/scripts/getjs.php b/ksvg/scripts/getjs.php new file mode 100755 index 00000000..5f300fe9 --- /dev/null +++ b/ksvg/scripts/getjs.php @@ -0,0 +1,390 @@ +#!/usr/local/bin/php +<? +/* + Copyright (C) 2002 KSVG Team + This file is part of the KDE project + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +class ecma_class +{ + var $properties; // array of properties + var $functions; // array of functions $functions[0][0]="geturl"; $functions[0][1]="2"; + var $constants; // array of functions + var $class; // classname + var $params; + var $readonly; + + function ecma_class($name) + { + $this->class=$name; + $this->functions=array(); + $this->properties=array(); + $this->constants=array(); + $this->parmas=array(); + } + + function add_content($content) + { + if ($content->type==0) + { + if (!in_array($content->name,$this->properties)) + { + $this->properties[]=$content->name; + $this->readonly[$content->name]=$content->readonly; + } + } + elseif ($content->type==1) + { + if (!in_array($content->name,$this->functions)) + { + $this->functions[]=$content->name; + $this->params[$content->name]=$content->params; + } + } + elseif ($content->type==2) + { + if (!in_array($content->name,$this->constants)) + $this->constants[]=$content->name; + } + } + + function to_text() + { + $headline=$this->class." (".(sizeof($this->properties))." Properties and ".(sizeof($this->functions))." Functions and ".(sizeof($this->constants))." Constants)"; + echo($headline."\n"); + echo("===================="); + echo("\n\n"); + + + echo("Properties\n"); + echo("----------\n"); + for ($i=0;$i<sizeof($this->properties);$i++) + { + echo($this->properties[$i]."\n"); + } + + echo("\n"); + echo("Functions\n"); + echo("----------\n"); + for ($i=0;$i<sizeof($this->functions);$i++) + { + echo($this->functions[$i]."\n"); + } + + echo("\n"); + echo("Constants\n"); + echo("----------\n"); + for ($i=0;$i<sizeof($this->constants);$i++) + { + echo($this->constants[$i]."\n"); + } + + echo("\n%%%%%%%%%%%%%%%%%%%%%%%%\n\n"); + } + + function to_html() + { + echo("<a name=\"".$this->class."\"></a>"); + echo("<a href=\"#toc\">Back to Index</a>"); + echo("<table border=\"1\" style=\"border-width: medium; border-collapse: collapse\">\n"); + echo("<tr><td colspan=\"3\"><h2 style=\"text-align: left\">".$this->class."</h2></td></tr>\n"); + + if (sizeof($this->functions)>0) + { + echo("<tr><td colspan=\"3\"><h3>Functions</h3></td></tr>\n"); + + for ($i=0;$i<sizeof($this->functions);$i++) + { + echo("<tr><td width=\"20\"> </td><td>".$this->functions[$i]."</td><td>".$this->params[$this->functions[$i]]." Parameter(s)</td></tr>\n"); + } + } + + if (sizeof($this->properties)>0) + { + echo("<tr><td colspan=\"3\"><h3>Properties</h3></td></tr>\n"); + + for ($i=0;$i<sizeof($this->properties);$i++) + { + if ($this->readonly[$this->properties[$i]]) + $readonly="Property is ReadOnly"; + else + $readonly="Property is ReadWrite"; + + echo("<tr><td width=\"20\"> </td><td>".$this->properties[$i]."</td><td>$readonly</td></tr>\n"); + } + } + + if (sizeof($this->constants)>0) + { + echo("<tr><td colspan=\"3\"><h3>Constants</h3></td></tr>\n"); + + for ($i=0;$i<sizeof($this->constants);$i++) + { + echo("<tr><td width=\"20\"> </td><td>".$this->constants[$i]."</td></tr>\n"); + } + } + echo("</table><br><br>"); + } + + function to_svg(&$x,&$y) + { + $xtemp=$x+50; + $ytemp=$y+50; + + echo("<text x=\"$xtemp\" y=\"$ytemp\">".$this->class."</text>"); + + $ytemp+=10; + + if (sizeof($this->functions)>0) + { + echo("<text x=\"".$xtemp."\" y=\"".($ytemp)."\">Functions</text>\n"); + + $ytemp+=10; + + for ($i=0;$i<sizeof($this->functions);$i++) + { + echo("<text x=\"".($xtemp+20)."\" y=\"".($ytemp)."\">".$this->functions[$i]." with ".$this->params[$this->functions[$i]]." Parameter(s)</text>\n"); + $ytemp+=10; + } + } + + if (sizeof($this->properties)>0) + { + echo("<text x=\"".$xtemp."\" y=\"".($ytemp)."\">Properties</text>\n"); + + $ytemp+=10; + + for ($i=0;$i<sizeof($this->properties);$i++) + { + if ($this->readonly[$this->properties[$i]]) + $readonly="Property is ReadOnly"; + else + $readonly="Property is ReadWrite"; + + echo("<text x=\"".($xtemp+20)."\" y=\"".$ytemp."\">".$this->properties[$i]." $readonly</text>\n"); + $ytemp+=10; + } + } + + if (sizeof($this->constants)>0) + { + echo("<text x=\"".$xtemp."\" y=\"".$ytemp."\">Constants</text>\n"); + + $ytemp+=10; + + for ($i=0;$i<sizeof($this->constants);$i++) + { + echo("<text x=\"".($xtemp+20)."\" y=\"".$ytemp."\">".$this->constants[$i]."</text>\n"); + $ytemp+=10; + } + } + $x=$xtemp+200; + } +} + +class kalyptus_result +{ + var $class; + var $type; // 0 = Property ; 1 = Function ; 2 = Constant + var $name; + var $params; + var $readonly; + + function kalyptus_result($class,$type,$name,$params=0) + { + $this->class=$class; + $this->type=$type; + $this->name=$name; + $this->params=$params; + } + + function setReadOnly($value) + { + $this->readonly=$value; + } +} + +function parse_kalyptus($line,&$fp,&$last_constructor) +{ + if (preg_match("/^[ \t^#]*([a-zA-Z_]*)[ \t]*KSVG::.*DontDelete/",$line,$match)) + { + if (DEBUG) fputs($fp,"MATCH => Constant ".$match[1]." in class ".$match[2]."\n"); + return new kalyptus_result($last_constructor,2,$match[1]); + } + elseif (preg_match("/^[ \t^#]*([a-zA-Z_]*)[ \t]*([a-zA-Z_]*)::.*Function ([0-9])/",$line,$match)) + { + if (DEBUG) fputs($fp,"MATCH => Function ".$match[1]." in class ".$match[2]."\n"); + return new kalyptus_result($match[2],1,$match[1],$match[3]); + } + elseif (preg_match("/^[ \t^#]*([a-zA-Z_]*)[ \t]*([a-zA-Z_]*)::.*DontDelete\|ReadOnly/",$line,$match)) + { + if (DEBUG) fputs($fp,"MATCH => Property ".$match[1]." in class ".$match[2]."\n"); + $property=new kalyptus_result($match[2],0,$match[1]); + $property->setReadOnly(true); + return $property; + } + elseif (preg_match("/^[ \t^#]*([a-zA-Z_]*)[ \t]*([a-zA-Z_]*)::.*DontDelete/",$line,$match)) + { + if (DEBUG) fputs($fp,"MATCH => Property ".$match[1]." in class ".$match[2]."\n"); + $property=new kalyptus_result($match[2],0,$match[1]); + $property->setReadOnly(false); + return $property; + } + elseif (preg_match("/^[ \t@begin^#]*([a-zA-Z_]*)Constructor::s_hashTable.*/",$line,$match)) + { + if (DEBUG) fputs($fp,"Constructor => ".$match[1]."\n"); + $last_constructor=$match[1]; + return false; + } + else + { + if (DEBUG) fputs($fp,"Ignored => ".$line."\n"); + return false; + } +} + +function do_output($output,$ecma_classes) +{ + ksort($ecma_classes); + + reset($ecma_classes); + + switch($output) + { + case "txt": + foreach ($ecma_classes as $classname => $obj) + { + $obj->to_text(); + } + break; + case "svg": + echo("<svg width=\"100%\" height=\"100%\">\n"); + + $x=0; + $y=0; + + foreach ($ecma_classes as $classname => $obj) + { + $obj->to_svg($x,$y); + } + echo("</svg>"); + break; + default: + echo("<html>\n<body>\n"); + + echo("<a name=\"toc\"><h1>Contents</h1></a><br>\n"); + + foreach ($ecma_classes as $classname => $obj) + { + echo("<a href=\"#".$classname."\">$classname</a><br>\n"); + } + + echo("<hr>\n"); + + foreach ($ecma_classes as $classname => $obj) + { + $obj->to_html(); + } + echo("</body>\n</html>"); + } +} + +function searchKalyptusCode($file,&$fp) +{ + global $ecma_classes; + + ob_start(); + readfile($file); + $content=ob_get_contents(); + ob_end_clean(); + + if (preg_match("/@begin(.*)@end/s",$content,$matches)) // FIXME broken....if several @end's are there it takes always the last + { + if (DEBUG) fputs($fp,"Found ".(sizeof($matches)-1)." Matches in ".$file."\n"); + for ($i=1;$i<sizeof($matches);$i++) + { + if (DEBUG) fputs($fp,"Checking ".$i.". Match\n"); + $lines=explode("\n",$matches[$i]); + for ($j=0;$j<sizeof($lines);$j++) + { + $result=parse_kalyptus($lines[$j],$fp,$last_constructor); + if ($result) + $results[]=$result; + } + } + + for ($i=0;$i<sizeof($results);$i++) + { + if ($ecma_classes[$results[$i]->class]) + $ecma_classes[$results[$i]->class]->add_content($results[$i]); + else + { + $ecma_classes[$results[$i]->class]=new ecma_class($results[$i]->class); + $ecma_classes[$results[$i]->class]->add_content($results[$i]); + } + } + } +} + +function crawlFiles($path) +{ + global $ecma_classes; + + $fp=fopen("php://stderr","w+"); + + if ($dir = @opendir($path)) + { + while (($file = readdir($dir)) !== false) + { + if (($file!=".") && ($file!="..")) + { + if (is_dir($path."/".$file)) + { + fputs($fp,"Entering directory ".$file."\n"); + crawlFiles($path."/".$file); + fputs($fp,"Leaving directory ".$file."\n"); + } + elseif (is_file($path."/".$file) && preg_match("/^[A-Za-z0-9_]+(\.cc|\.cpp|\.h|\.hpp)$/",$file)) + { + fputs($fp,"\tchecking $file\n"); + searchKalyptusCode($path."/".$file,$fp); + } + } + } + closedir($dir); + } +} + +define(DEBUG,0); + +$ecma_classes=array(); + +$ksvg_path="../"; + +$path=basename(realpath($ksvg_path)); + +if ($path!="ksvg") +{ + echo "Execute it in base ksvg dir please :S\n"; + return false; +} + +crawlFiles($ksvg_path); + +do_output($argv[1],$ecma_classes); +?> |