hholzgra                Thu Jan 17 05:15:35 2002 EDT

  Added files:                 
    /phpdoc/scripts/apply       func2methodsyn.php 
  Log:
  conversion script for docbook4 upgrade
  
  will convert <funcsynopsis> to <methodsynopsis>
  which has better support for optional paramters
  (attribute instead of extra tag)
  
  the way we use currently use <optional> in 
  funcsynopsis is not compatible with docbook4 dtd :(
  so we have to do this conversion when we switch
  but the documentation support for object-oriented
  stuff in docbook4 will be worth the effort
  
  do not apply unless all other needed components
  and changes are in place
  
  
  

Index: phpdoc/scripts/apply/func2methodsyn.php
+++ phpdoc/scripts/apply/func2methodsyn.php
<?php

$conversion_xsl='
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version="1.0">

<xsl:output method="xml" />

<!-- default rule -> copy element, attributes and recursive content -->
<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

<!-- ignore funcsynopsis tags -->
<xsl:template match="/funcsynopsis">
     <xsl:apply-templates/>   
</xsl:template>

<!-- convert foncprototype to methodsynopsis -->
<xsl:template match="/funcsynopsis/funcprototype">
   <methodsynopsis>
    <xsl:apply-templates/>
   </methodsynopsis>
</xsl:template>

<!-- ignore funcdef tag -->
<xsl:template match="/funcsynopsis/funcprototype/funcdef">
    <xsl:apply-templates/>
</xsl:template>

<!-- function is now methodname in this context -->
<xsl:template match="/funcsynopsis/funcprototype/funcdef/function">
<methodname><xsl:apply-templates/></methodname>
</xsl:template>

<!-- replaceable is now methodname.replaceable in this context -->
<xsl:template match="/funcsynopsis/funcprototype/funcdef/replaceable">
<methodname><replaceable><xsl:apply-templates/></replaceable></methodname>
</xsl:template>

<!-- first text element is the return type
     needs to be enclosed in type tags now
-->
<xsl:template match="/funcsynopsis/funcprototype/funcdef/text()[1]">
  <xsl:if test="position() = 1"> <!-- first only -->
    <type>
     <xsl:value-of select="normalize-space(.)"/>
    </type>
  </xsl:if>
</xsl:template>

<!-- paramdef is now methodparam, empty paramdef should be void/ -->
<xsl:template match="/funcsynopsis/funcprototype/paramdef">
  <xsl:choose>
    <xsl:when test="count(parameter)>0">
    <methodparam>
     <xsl:if test="*/optional"> <!-- optional is now attribute and not special tag -->
      <xsl:attribute name="choice">opt</xsl:attribute>
     </xsl:if>
     <xsl:apply-templates/>
    </methodparam>
  </xsl:when>
  <xsl:otherwise>
    <void/>
  </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<!-- first text in paramdef is paramter type and needs type tags -->
<xsl:template match="/funcsynopsis/funcprototype/paramdef/text()[1]">
  <xsl:if test="position() = 1">
     <type>
      <xsl:value-of select="normalize-space(.)"/>
     </type>
  </xsl:if>
</xsl:template>

<!-- ignore optional tag here, already processed above -->
<xsl:template match="/funcsynopsis/funcprototype/paramdef/parameter/optional">
      <xsl:apply-templates/>
</xsl:template>

<!-- there is no varargs in methodsynopsis, but a rep attribute for methodparam -->
<xsl:template match="/funcsynopsis/funcprototype/varargs">
     <methodparam 
rep="repeat"><type>mixed</type><parameter>...</parameter></methodparam>
</xsl:template>

</xsl:stylesheet>
';

function apply($input) {
        global $conversion_xsl;
        $output="";

        if(!function_exists("xslt_create")) {
                die("this conversion requires a PHP executable with XSLT extension");
        }

        $xslt = xslt_create();

        $xmlhead="<?xml version='1.0' encoding='iso-8859-1' ?>\n";

        $lines = explode("\n",$input);
        for($nr=0;$nr<sizeof($lines);$nr++) {
                $line = $lines[$nr]."\n";

                if(strstr($line,("<funcsynopsis>"))) {
                        $funcsyn = str_replace("&","&amp;",$line);
                        do {
                                $line=$lines[++$nr]."\n";;
                                $funcsyn .= str_replace("&","&amp;",$line);
                        } while(!strstr($line,("</funcsynopsis>")));
                        $arguments = array('/_xml' => $funcsyn,
                                                                                       
          '/_xsl' => $conversion_xsl
                                                                                       
          );
                        $result = xslt_process($xslt, 'arg:/_xml', 'arg:/_xsl', NULL, 
$arguments);
                        $result = str_replace("&amp;","&",$result);
                        $result = explode("\n",$result);
                        unset($result[0]);
                        $output .= rtrim(join("\n",$result))."\n";
                } else if (strstr($line,("<?xml"))&&($nr==1)) {
                        $xmlhead=$line;
                        $output .= $line;
                } else{
                        $output .= $line;
                }
        }

        xslt_free($xslt);

        return $output;
}

?>


Reply via email to