Current File : //opt/RZphp56/includes/PhpDocumentor/phpDocumentor/PackagePageElements.inc |
<?php
/**
* Data structures used in parsing XML DocBook-based tutorials
*
* Conversion of DocBook-based tutorials is performed using special
* {@link Converter} class methods. By default, these methods simply retrieve
* simple rules for replacement of tags and slight re-ordering from the
* options.ini file present for every template.
*
* In future versions, there may be utilization of xslt or other more powerful
* protocols. However, for most situations, the power of these classes will
* be more than sufficient to handle very complex documentation.
*
* Note that an entire tutorial is contained in a single parserXMLDocBookTag,
* matching the document model for DocBook. The top-level tag, <refentry>,
* contains every other tag and all text.
*
* phpDocumentor :: automatic documentation generator
*
* PHP versions 4 and 5
*
* Copyright (c) 2002-2008 Gregory Beaver
*
* LICENSE:
*
* This library is free software; you can redistribute it
* and/or modify it under the terms of the GNU Lesser General
* Public License as published by the Free Software Foundation;
* either version 2.1 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* @category ToolsAndUtilities
* @package phpDocumentor
* @subpackage Tutorial
* @author Gregory Beaver <cellog@php.net>
* @copyright 2002-2008 Gregory Beaver
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @version CVS: $Id: PackagePageElements.inc 253643 2008-02-24 04:27:54Z ashnazg $
* @tutorial tutorials.pkg
* @link http://www.phpdoc.org
* @link http://pear.php.net/PhpDocumentor
* @since 1.2.0
* @todo CS cleanup - change package to PhpDocumentor
*/
/**
* Represents <![CDATA[ ]]> sections.
*
* These sections are interpreted as plain text
*
* @category ToolsAndUtilities
* @package phpDocumentor
* @subpackage Tutorial
* @author Gregory Beaver <cellog@php.net>
* @copyright 2002-2008 Gregory Beaver
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @version Release: 1.4.3
* @tutorial tutorials.pkg
* @link http://www.phpdoc.org
* @link http://pear.php.net/PhpDocumentor
* @todo CS cleanup - change package to PhpDocumentor
* @todo CS cleanup - change classname to PhpDocumentor_*
*/
class parserCData extends parserStringWithInlineTags
{
/**
* calls the output conversion
*
* @param Converter &$c the output converter
* @param bool $postprocess if postprocessing is needed
*
* @return string
* @uses Converter::getCData() convert contents to text
* @todo CS cleanup - rename to convert for camelCase rule
*/
function Convert(&$c, $postprocess = true)
{
$val = $this->value;
if ($postprocess) {
foreach ($this->value as $key => $value) {
if (is_string($value)) {
$this->value[$key] = $c->getCData($value);
}
}
}
$this->cache = false;
$x = parent::Convert($c, false);
$this->value = $val;
return $x;
}
}
/**
* a standard XML DocBook Tag
*
* This class is designed to represent all DocBook tags. It is intelligent
* enough to understand the <title> tag, and also the <refname> tag for
* as title for <refentry>
*
* @category ToolsAndUtilities
* @package phpDocumentor
* @subpackage Tutorial
* @author Gregory Beaver <cellog@php.net>
* @copyright 2002-2008 Gregory Beaver
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @version Release: 1.4.3
* @tutorial tutorials.pkg
* @link http://www.phpdoc.org
* @link http://pear.php.net/PhpDocumentor
* @since 1.2
* @todo CS cleanup - change package to PhpDocumentor
* @todo CS cleanup - change classname to PhpDocumentor_*
* @todo CS cleanup - rename to parserXmlDocBookTag for camelCase rule
*/
class parserXMLDocBookTag extends parserStringWithInlineTags
{
/**
* Attributes from the XML tag
*
* Format: array(attrname => attrvalue, attrname => attrvalue,...)
* @var array
*/
var $attributes = array();
/**
* Name of the tag
* @var string
*/
var $name;
/**#@+
* @access private
*/
/**
* @var parserCData
*/
var $_cdata;
/**
* @var parserTag
*/
var $_title;
/**
* @var parserIdLineTag
*/
var $_id;
/**
* Set to <refpurpose> in <refsynopsisdiv>
* @var parserTag
*/
var $_description;
/**#@-*/
/**
* sets up the tag
*
* @param string $name tag name
*
* @todo CS cleanup - rename to parserXmlDocBookTag for camelCase rule
*/
function parserXMLDocBookTag($name)
{
$this->name = $name;
}
/**
* calls the output conversion
*
* @param Converter &$c the output converter
* @param bool $postprocess if postprocessing is needed
*
* @return string
* @uses Converter::TranslateTag() Calls this to enclose the contents of the
* DocBook tag based on the values in template options.ini file
*/
function Convert(&$c, $postprocess = true)
{
$value = parent::Convert($c, $postprocess);
$simvalue = parent::Convert($c, false);
foreach ($this->attributes as $a => $v) {
$this->attributes[$a] = (is_string($v) ? $v :
$v->Convert($c, $postprocess));
}
if (isset($this->_title)) {
list($this->attributes,$value) = $c->ConvertTitle($this->name,
$this->attributes, $this->_title->Convert($c, $postprocess), $value);
}
return $c->TranslateTag($this->name, $this->attributes, $value, $simvalue);
}
/**
* Begin a new CData section
*
* @return void
* @see addCData()
*/
function startCData()
{
$this->_cdata = new parserCData;
}
/**
* Adds {@link $_cdata} to {@link $value}
*
* @return void
*/
function endCData()
{
$this->value[] = $this->_cdata;
unset($this->_cdata);
}
/**
* Retrieve either the table of contents index,
* or the location that the TOC will go
*
* @param false|integer $state either an index of the {@}toc} tag in $this->value
* or false, if the next index value of $this->value
* is needed
*
* @return int
* @see setTOC()
*/
function getTOC($state = false)
{
if ($state !== false) {
return $this->value[$state];
}
return count($this->value);
}
/**
* sets the TOC value
*
* @param integer $state index of the TOC in $this->value
* @param parserTocInlineTag $val tag value
*
* @return void
*/
function setTOC($state, $val)
{
$this->value[$state] = $val;
}
/**
* add a word to CData
*
* @param string $word word to add
*
* @return void
*/
function addCData($word)
{
$this->_cdata->add($word);
}
/**
* Add an xml tag attribute name="value" pair
*
* if the attribute is id, value must be a {@link parserIdInlineTag}
*
* @param string $name attribute name
* @param string|parserIdInlineTag $value value of attribute
*
* @return void
*/
function addAttribute($name, $value)
{
$this->attributes[$name] = $value;
if ($name == 'id') {
// fix 1153593
if (is_string($value)) {
addWarning(PDERROR_ID_MUST_BE_INLINE, $this->name, $value,
$this->name, $value);
} else {
$this->setId($value);
}
}
}
/**
* Set the title of a DocBook tag section.
*
* For most DocBook tags, the title is represented with a <title></title>
* tag pair. The <refentry> top-level tag is a little different. Instead
* of using <title></title>, phpDocumentor uses the contents of the
* <refname> tag in the <refnamediv> tag
*
* @param parserXMLDocBookTag $title the title element
*
* @return void
*/
function setTitle($title)
{
$this->_title = $title;
}
/**
* If the id attribute is present, this method will set its id
*
* @param parserIdInlineTag $id the id value
*
* @return void
*/
function setId($id)
{
$this->_id = $id;
}
/**
* Return converter-specific formatting of ID.
*
* Passes $c to {@link parserIdInlineTag::Convert()}
*
* @param Converter &$c the output converter
*
* @return string
*/
function getId(&$c)
{
if ($this->_id) {
return trim($this->_id->Convert($c));
}
}
/**
* Determine whether the docbook element has a title
*
* @return boolean
*/
function hasTitle()
{
return isset($this->_title);
}
/**
* Retrieve Converter-specific formatting of the title of this element
*
* @param Converter &$c the output converter
*
* @return string
*/
function getTitle(&$c)
{
if ($this->name == 'refentry') {
foreach ($this->value as $tag) {
if (is_object($tag) && $tag->name == 'refnamediv') {
return $tag->getTitle($c);
}
}
}
if ($this->name == 'refnamediv') {
foreach ($this->value as $tag) {
if (is_object($tag) && is_a($tag, 'parserXMLDocBookTag')
&& $tag->name == 'refname') {
$t = new parserStringWithInlineTags;
foreach ($tag->value as $val) {
$t->add($val);
}
$this->_title = $t;
}
if (is_object($tag) && is_a($tag, 'parserXMLDocBookTag')
&& $tag->name == 'refpurpose') {
$t = new parserStringWithInlineTags;
foreach ($tag->value as $val) {
$t->add($val);
}
$this->_description = $t;
}
}
}
if (isset($this->_title)) {
return $this->_title->Convert($c);
}
if (is_object($this->value[0]) && is_a($tag, 'parserXMLDocBookTag')) {
return $this->value[0]->getTitle($c);
}
if (isset($this->value[1])) {
if (is_object($this->value[1]) && is_a($tag, 'parserXMLDocBookTag')) {
return $this->value[1]->getTitle($c);
}
}
return '';
}
/**
* Retrieve the contents of a subsection
*
* This method uses the $_id members of nested docbook tags to retrieve
* the section defined by $subsection
*
* @param Converter &$c the output converter
* @param string $subsection converter-specific subsection
*
* @return bool|string
*/
function getSubsection(&$c, $subsection)
{
if (!is_object($this->_id)) {
return false;
}
$search = phpDocumentor_clone($this->_id);
if (is_string($this->_id)) {
return false;
}
if (phpDocumentor_get_class($search) != 'parseridinlinetag') {
return false;
}
$search->id = $subsection;
foreach ($this->value as $el) {
if (phpDocumentor_get_class($el) == 'parserxmldocbooktag') {
if ($el->getId($c) == $search->Convert($c)) {
return $el;
} elseif ($a = $el->getSubsection($c, $subsection)) {
return $a;
}
}
}
return false;
}
/**
* Add contents to this tag.
*
* There are four kinds of data in a DocBook tutorial:
* 1. <b>tags</b> - normal tags like <refentry>
* 2. <b>entities</b> - normal entities like ”
* 3. <b><![CDATA[</b> - character data that should not be interpreted,
* like <programlisting> contents
* 4. <b>text</b> - normal non-markup text
*
* All four kinds of data are added here
*
* @param parserEntity|parserCData|parserXMLDocBookTag|string $el nested tag,
* entity, or text
*
* @return mixed
*/
function add($el)
{
if (is_string($el)) {
return parent::add($el);
}
if (phpDocumentor_get_class($el) == 'parserxmldocbooktag') {
if ($el->name == 'title') {
$this->setTitle($el);
} else {
return parent::add($el);
}
} else {
return parent::add($el);
}
}
}
/**
* a standard entity like ”
*
* This class is designed to represent all DocBook entities.
*
* @category ToolsAndUtilities
* @package phpDocumentor
* @subpackage Tutorial
* @author Gregory Beaver <cellog@php.net>
* @copyright 2002-2008 Gregory Beaver
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @version Release: 1.4.3
* @tutorial tutorials.pkg
* @link http://www.phpdoc.org
* @link http://pear.php.net/PhpDocumentor
* @since 1.2
* @todo CS cleanup - change package to PhpDocumentor
* @todo CS cleanup - change classname to PhpDocumentor_*
*/
class parserEntity
{
/**
* sets up the entity
*
* @param string $name entity name
*/
function parserEntity($name)
{
$this->value = $name;
}
/**
* calls the output conversion
*
* @param Converter &$c the output converter
* @param bool $postprocess if postprocessing is needed
*
* @return string
* @uses Converter::TranslateEntity() convert contents to text
* @todo CS cleanup - rename to convert for camelCase rule
*/
function Convert(&$c, $postprocess = true)
{
if ($postprocess) {
return $c->TranslateEntity($this->value);
} else {
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
$ret = strtr('&'.$this->value.';', $trans_tbl);
return $ret;
}
}
}
?>