hholzgra                Sun Aug 28 05:55:52 2005 EDT

  Added files:                 
    /phpdoc/scripts     zendapi_protos.php 
  Log:
  a simple script that generates docbook template files for zend API 
  functions by parsing header files piped in on standard input
  
  (i finally decided to take action as "The Creators of PHP" are not
  likely to *ever* do this homework of theirs ... :(
  
  

http://cvs.php.net/co.php/phpdoc/scripts/zendapi_protos.php?r=1.1&p=1
Index: phpdoc/scripts/zendapi_protos.php
+++ phpdoc/scripts/zendapi_protos.php
        <?php
                // just read from standard input right now
                $in = fopen("php://stdin", "r");

        // loop over all lines in the file
        while (!feof($in)) {
                // TODO a prototype may span more than one line?
                $line = trim(fgets($in));

                // we look for prototypes marked with ZEND_API 
                // TODO prototypes may be indented by whitespace?
                if (!strncmp("ZEND_API", $line, 8)) {

                        // parse prototypes, step #1
                        if (preg_match('|^ZEND_API\s+(\S+)\s+(\S+)\((.*)\);$|', 
$line, $matches)) {

                                $return_type = $matches[1];
                                $function    = $matches[2];

                                // the pointer '*' is usually next to the 
function name, not the type 
                                // TODO what if there is whitespace on both 
sides of the '*'?
                                if ($function{0} == '*') {
                                        $return_type.= "*";
                                        $function = substr($function, 1);
                                }

                                // the parameters are spearated by commas
                                // TODO find a better way to handle TSRMLS_D 
and TSRMLS_DC
                                // TODO handle ...
                                $params = array();
                                foreach (explode(",", trim($matches[3])) as 
$param) {
                                        $tokens = preg_split("/\s+/", 
trim($param));
                                        $type   = array_shift($tokens);
                                        $name   = implode(" ", $tokens);
                                        if (empty($name)) {
                                                $params[] = $type;
                                        } else {
                                                $params[$type] = $name;
                                        }
                                }


                                // now write the template file to 
phpdoc/en/internals/zendapi/functions
                                ob_start();
                                
                                echo '<?xml version="1.0" 
encoding="iso-8859-1"?>'."\n";
?>
<!-- $Revision: 1.1 $ -->
<refentry id="zend-api.<?php echo str_replace("_","-",$function); ?>">
 <refnamediv>
  <refname><?php echo $function; ?></refname>
  <refpurpose>...</refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type><?php echo $return_type; ?></type><methodname><?php echo $function; 
?></methodname>
<?php
   foreach($params as $type => $name) {
           if (is_numeric($type)) $type = "";
           echo "    
<methodparam><type>$type</type><parameter>$name</parameter></methodparam>\n";
   }
?>
  </methodsynopsis>
  <para>
   ...
  </para>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
<?php
   foreach($params as $type => $name) {
           if (is_numeric($type)) $type = "";
?>
    <varlistentry>
     <term><parameter><?php $name; ?></parameter></term>
     <listitem>
      <para>
       ...
      </para>
     </listitem>
    </varlistentry>
<?php
    }
?>
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   ...
  </para>
 </refsect1>

</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
<?php
           
           
file_put_contents("../en/internals/zendapi/functions/".$function.".xml", 
ob_get_clean());
                        }

                }
                                                                                
        
        }
?>

Reply via email to