Great news!
Some thoughts on improvement:
I think it would be better to have print-version-for attribute
optional, so if it's absent phd would take current xml:id of current
section i.e. its parent, because it will be frequently written as
<sect1 xml:id="control.structures.alternative-syntax" ... >
      <?phpdoc print-version-for="control-structures.alternative-syntax"?>
so it's effectively duplicates already written information.
It would be also nicer if it was regular tag like <print-version/> and
<print-version for="id"/>, if it possible, of course :)
Secondly, won't it have namespace issues if those ids would coincide?
It seems they don't strictly match xml:id attribute.
That's all for now :)
Again, great work!

2011/7/6 Hannes Magnusson <bj...@php.net>:
> PhD has now support for <?phpdoc print-version-for="foobar"?>
>
> This means you can now print out the version information on any page,
> such as namespace docs, language constructs or wherever.
> See http://svn.php.net/viewvc?view=revision&revision=312947 for examples.
>
> Remember, the `foobar` entry needs to be available in some versions.xml file.
> You can create a new versions.xml file if it doesn't already exists.
> configure.php will aggregate all versions.xml under
> en/<dir>/<dir>/versions.xml
>
>
> -Hannes
>
> ---------- Forwarded message ----------
> From: Hannes Magnusson <bj...@php.net>
> Date: Tue, Jul 5, 2011 at 20:54
> Subject: [DOC-CVS] svn: /phd/trunk/ package.xml
> phpdotnet/phd/PI/PHPDOCHandler.php phpdotnet/phd/Package/PHP/XHTML.php
> phpdotnet/phd/Render.php
> To: doc-...@lists.php.net
>
>
> bjori                                    Tue, 05 Jul 2011 18:54:18 +0000
>
> Revision: http://svn.php.net/viewvc?view=revision&revision=312946
>
> Log:
> Add support for <?phpdoc?>
> Initially only supports <?phpdoc print-version-for="foobar"?>
> where `foobar` is an item in the aggregated version.xml file.
> print-version-for will go through the same mechanism as all
> refpages to generate version information, and therefore
> fallback to "may only be in svn" if no found.
>
> Changed paths:
>    U   phd/trunk/package.xml
>    A   phd/trunk/phpdotnet/phd/PI/PHPDOCHandler.php
>    U   phd/trunk/phpdotnet/phd/Package/PHP/XHTML.php
>    U   phd/trunk/phpdotnet/phd/Render.php
>
> Modified: phd/trunk/package.xml
> ===================================================================
> --- phd/trunk/package.xml       2011-07-05 18:38:56 UTC (rev 312945)
> +++ phd/trunk/package.xml       2011-07-05 18:54:18 UTC (rev 312946)
> @@ -24,18 +24,18 @@
>     <active>yes</active>
>   </lead>
>   <lead>
> -    <name>Christian Weiske</name>
> -    <user>cweiske</user>
> -    <email>cwei...@php.net</email>
> -    <active>yes</active>
> -  </lead>
> -  <lead>
>     <name>Moacir de Oliveira</name>
>     <user>moacir</user>
>     <email>moa...@php.net</email>
>     <active>yes</active>
>   </lead>
>   <developer>
> +    <name>Christian Weiske</name>
> +    <user>cweiske</user>
> +    <email>cwei...@php.net</email>
> +    <active>yes</active>
> +  </developer>
> +  <developer>
>     <name>Paul M Jones</name>
>     <user>pmjones</user>
>     <email>pmjo...@php.net</email>
> @@ -71,7 +71,7 @@
>   </stability>
>   <license uri="http://www.opensource.org/licenses/bsd-license.php";>BSD
> Style</license>
>   <notes>
> -    -notes
> +    - Added phpdoc PI handler to handle manually added version information.
>   </notes>
>
>   <contents>
> @@ -117,6 +117,7 @@
>           </dir>
>           <dir name="PI">
>             <file name="DBHTMLHandler.php" role="php"/>
> +            <file name="PHPDOCHandler.php" role="php"/>
>           </dir>
>           <file name="Autoloader.php" role="php"/>
>           <file name="Config.php" role="php">
>
> Added: phd/trunk/phpdotnet/phd/PI/PHPDOCHandler.php
> ===================================================================
> --- phd/trunk/phpdotnet/phd/PI/PHPDOCHandler.php
>          (rev 0)
> +++ phd/trunk/phpdotnet/phd/PI/PHPDOCHandler.php        2011-07-05
> 18:54:18 UTC (rev 312946)
> @@ -0,0 +1,29 @@
> +<?php
> +namespace phpdotnet\phd;
> +/* $Id: PHPDOCHandler.php 293260 2010-01-08 10:41:19Z rquadling $ */
> +
> +class PI_PHPDOCHandler extends PIHandler {
> +
> +    public function __construct($format) {
> +        parent::__construct($format);
> +    }
> +
> +    public function parse($target, $data) {
> +        $pattern = 
> "/(?<attr>[\w]+[\w\-\.]*)[\s]*=[\s]*\"(?<value>[^\"]*)\"/";
> +
> +        preg_match($pattern, $data, $matches);
> +        switch($matches["attr"]) {
> +            case "print-version-for":
> +                // FIXME: Figureout a way to detect the current
> language (for unknownversion)
> +                return
> $this->format->autogenVersionInfo($matches["value"], "en");
> +        }
> +    }
> +
> +}
> +
> +/*
> +* vim600: sw=4 ts=4 syntax=php et
> +* vim<600: sw=4 ts=4
> +*/
> +
> +
>
> Modified: phd/trunk/phpdotnet/phd/Package/PHP/XHTML.php
> ===================================================================
> --- phd/trunk/phpdotnet/phd/Package/PHP/XHTML.php       2011-07-05
> 18:38:56 UTC (rev 312945)
> +++ phd/trunk/phpdotnet/phd/Package/PHP/XHTML.php       2011-07-05
> 18:54:18 UTC (rev 312946)
> @@ -134,12 +134,18 @@
>         "refname"                      => array(),
>     );
>
> +    protected $pihandlers = array(
> +        'dbhtml'        => 'PI_DBHTMLHandler',
> +        'dbtimestamp'   => 'PI_DBHTMLHandler',
> +        'phpdoc'        => 'PI_PHPDOCHandler',
> +    );
> +
>     public function __construct() {
>         parent::__construct();
>         $this->myelementmap =
> array_merge(parent::getDefaultElementMap(),
> static::getDefaultElementMap());
>         $this->mytextmap = array_merge(parent::getDefaultTextMap(),
> static::getDefaultTextMap());
>         $this->dchunk = array_merge(parent::getDefaultChunkInfo(),
> static::getDefaultChunkInfo());
> -        $this->extraIndexInformation();
> +        $this->registerPIHandlers($this->pihandlers);
>     }
>
>     public function getDefaultElementMap() {
> @@ -154,14 +160,6 @@
>         return $this->dchunk;
>     }
>
> -    public function extraIndexInformation() {
> -        $this->addRefname("function.include", "include");
> -        $this->addRefname("function.include-once", "include-once");
> -        $this->addRefname("function.require", "require");
> -        $this->addRefname("function.require-once", "require-once");
> -        $this->addRefname("function.return", "return");
> -    }
> -
>     public function loadVersionAcronymInfo() {
>         $this->versions =
> self::generateVersionInfo(Config::phpweb_version_filename());
>         $this->acronyms =
> self::generateAcronymInfo(Config::phpweb_acronym_filename());
> @@ -234,23 +232,27 @@
>         return $acronyms;
>     }
>
> +    public function autogenVersionInfo($refnames, $lang) {
> +        $verinfo = null;
> +        foreach((array)$refnames as $refname) {
> +            $verinfo = $this->versionInfo($refname);
> +
> +            if ($verinfo) {
> +                break;
> +            }
> +        }
> +        if (!$verinfo) {
> +            $verinfo = $this->autogen("unknownversion", $lang);
> +        }
> +
> +        $retval = '<p class="verinfo">(' .(htmlspecialchars($verinfo,
> ENT_QUOTES, "UTF-8")). ')</p>';
> +        return $retval;
> +    }
>     public function format_refpurpose($open, $tag, $attrs, $props) {
>         if ($open) {
>             $retval = "";
>             if ($this->cchunk["verinfo"]) {
> -                $verinfo = "";
> -                foreach((array)$this->cchunk["refname"] as $refname) {
> -                    $verinfo = $this->versionInfo($refname);
> -
> -                    if ($verinfo) {
> -                        break;
> -                    }
> -                }
> -                if (!$verinfo) {
> -                    $verinfo = $this->autogen("unknownversion",
> $props["lang"]);
> -                }
> -
> -                $retval = '<p class="verinfo">('
> .(htmlspecialchars($verinfo, ENT_QUOTES, "UTF-8")). ')</p>';
> +                $retval =
> $this->autogenVersionInfo($this->cchunk["refname"], $props["lang"]);
>             }
>             $refnames = implode('</span> -- <span class="refname">',
> $this->cchunk["refname"]);
>
>
> Modified: phd/trunk/phpdotnet/phd/Render.php
> ===================================================================
> --- phd/trunk/phpdotnet/phd/Render.php  2011-07-05 18:38:56 UTC (rev 312945)
> +++ phd/trunk/phpdotnet/phd/Render.php  2011-07-05 18:54:18 UTC (rev 312946)
> @@ -173,7 +173,10 @@
>                 $target = $r->name;
>                 $data = $r->value;
>                 foreach ($this as $format) {
> -                    $format->parsePI($target, $data);
> +                    $retval = $format->parsePI($target, $data);
> +                    if ($retval) {
> +                        $format->appendData($retval);
> +                    }
>                 }
>                 break;
>             }
>
>
> --
> PHP Documentation Commits Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>



-- 
Regards,
Shein Alexey

Reply via email to