[prev in list] [next in list] [prev in thread] [next in thread]
List: php-doc-cvs
Subject: [DOC-CVS] cvs: phd(PHD_ENTERPRISE) / config.php render.php /formats bigxhtml.php php.php xhtml.php
From: "Rudy Nappée" <loudi () php ! net>
Date: 2008-07-29 19:56:49
Message-ID: cvsloudi1217361409 () cvsserver
[Download RAW message or body]
loudi Tue Jul 29 19:56:49 2008 UTC
Modified files: (Branch: PHD_ENTERPRISE)
/phd/formats xhtml.php bigxhtml.php php.php
/phd config.php render.php
/phd/include PhDIndex.class.php PhDFormat.class.php
PhDBuildOptions.class.php PhDRender.class.php
Log:
* added HEAD PhDConfig class
* cleaned some stuff in render.php
["loudi-20080729195649.txt" (text/plain)]
http://cvs.php.net/viewvc.cgi/phd/formats/xhtml.php?r1=1.68.2.1&r2=1.68.2.2&diff_format=u
Index: phd/formats/xhtml.php
diff -u phd/formats/xhtml.php:1.68.2.1 phd/formats/xhtml.php:1.68.2.2
--- phd/formats/xhtml.php:1.68.2.1 Mon Jul 28 22:40:57 2008
+++ phd/formats/xhtml.php Tue Jul 29 19:56:48 2008
@@ -1,5 +1,5 @@
<?php
-/* $Id: xhtml.php,v 1.68.2.1 2008/07/28 22:40:57 bjori Exp $ */
+/* $Id: xhtml.php,v 1.68.2.2 2008/07/29 19:56:48 loudi Exp $ */
class PhDXHTMLFormat extends PhDFormat {
private $myelementmap = array( /* {{{ */
'abstract' => 'div', /* Docbook-xsl prints "abstract"... */
@@ -481,7 +481,7 @@
return "\n</body>\n</html>\n";
}
public function writeChunk($id, $fp) {
- $filename = PhDConfig::get("output_dir") . $id . '.' .$this->ext;
+ $filename = PhDConfig::output_dir() . $id . '.' .$this->ext;
rewind($fp);
file_put_contents($filename, $this->header($id));
http://cvs.php.net/viewvc.cgi/phd/formats/bigxhtml.php?r1=1.2.2.2&r2=1.2.2.3&diff_format=u
Index: phd/formats/bigxhtml.php
diff -u phd/formats/bigxhtml.php:1.2.2.2 phd/formats/bigxhtml.php:1.2.2.3
--- phd/formats/bigxhtml.php:1.2.2.2 Mon Jul 28 22:47:59 2008
+++ phd/formats/bigxhtml.php Tue Jul 29 19:56:48 2008
@@ -66,7 +66,7 @@
public function open() {
static $i = 0;
$i++;
- $this->bigfp = fopen(PhDConfig::get("output_dir") . "bightml$i.html", "w+");
+ $this->bigfp = fopen(PhDConfig::output_dir() . "bightml$i.html", "w+");
// FIXME: Use correct lang attribute and insert <title> of the DB file
fwrite($this->bigfp,
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
http://cvs.php.net/viewvc.cgi/phd/formats/php.php?r1=1.4.2.2&r2=1.4.2.3&diff_format=u
Index: phd/formats/php.php
diff -u phd/formats/php.php:1.4.2.2 phd/formats/php.php:1.4.2.3
--- phd/formats/php.php:1.4.2.2 Mon Jul 28 22:47:59 2008
+++ phd/formats/php.php Tue Jul 29 19:56:48 2008
@@ -76,8 +76,8 @@
public function __construct() {
parent::__construct();
- $this->versions = \
self::generateVersionInfo(PhDConfig::get("phpweb_version_filename"));
- $this->acronyms = \
self::generateAcronymInfo(PhDConfig::get("phpweb_acronym_filename")); + \
$this->versions = self::generateVersionInfo(PhDConfig::phpweb_version_filename()); + \
$this->acronyms = self::generateAcronymInfo(PhDConfig::phpweb_acronym_filename());
}
http://cvs.php.net/viewvc.cgi/phd/config.php?r1=1.53&r2=1.53.2.1&diff_format=u
Index: phd/config.php
diff -u phd/config.php:1.53 phd/config.php:1.53.2.1
--- phd/config.php:1.53 Thu Jul 24 19:39:02 2008
+++ phd/config.php Tue Jul 29 19:56:48 2008
@@ -1,36 +1,17 @@
<?php
-/* $Id: config.php,v 1.53 2008/07/24 19:39:02 bjori Exp $ */
+/* $Id: config.php,v 1.53.2.1 2008/07/29 19:56:48 loudi Exp $ */
require $ROOT . "/include/PhDErrors.php";
-define("PHD_VERSION", "0.4.0-dev");
+define("PHD_VERSION", "2.0-enterprise");
class PhDConfig
{
private static $optionArray = array(
'output_format' => array(
'xhtml',
- 'manpage',
- 'pdf',
- ),
- 'output_theme' => array(
- 'xhtml' => array(
- 'php' => array(
- 'phpweb',
- 'chunkedhtml',
- 'bightml',
- 'chmsource',
- ),
- ),
- 'manpage' => array(
- 'php' => array(
- 'phpfunctions',
- ),
- ),
- 'pdf' => array(
- 'php' => array(
- ),
- ),
+ 'php',
+ 'bigxhtml',
),
'chunk_extra' => array(
"legalnotice" => true,
@@ -38,7 +19,8 @@
),
'index' => true,
'xml_root' => '.',
- 'xml_file' => './.manual.xml',
+ 'xml_file' => "./.manual.xml",
+ 'lang_dir' => './',
'language' => 'en',
'verbose' => VERBOSE_DEFAULT,
'date_format' => "H:i:s",
@@ -47,7 +29,7 @@
'skip_ids' => array(
),
'color_output' => false,
- 'output_dir' => '.',
+ 'output_dir' => './',
'php_error_output' => NULL,
'php_error_color' => false,
'user_error_output' => NULL,
@@ -55,9 +37,22 @@
'phd_info_output' => NULL,
'phd_info_color' => false,
);
+
+ public static function init(array $a) {
+ self::$optionArray = array_merge(self::$optionArray, (array)$a);
+ }
+
+ /*public static function get($opt) {
+ if (!is_string($opt)) {
+ throw new UnexpectedValueException("Excpecting a string");
+ }
+ if (!isset(self::$optionArray[$opt])) {
+ throw new UnexpectedValueException("Unknown option: $opt");
+ }
+ return self::$optionArray[$opt];
+ }*/
- public static function __callStatic($name, $params)
- {
+ public static function __callStatic($name, $params) {
$name = strtolower($name); // FC if this becomes case-sensitive
if (strncmp($name, 'set', 3) === 0) {
$name = substr($name, 3);
http://cvs.php.net/viewvc.cgi/phd/render.php?r1=1.3.2.2&r2=1.3.2.3&diff_format=u
Index: phd/render.php
diff -u phd/render.php:1.3.2.2 phd/render.php:1.3.2.3
--- phd/render.php:1.3.2.2 Mon Jul 28 22:47:59 2008
+++ phd/render.php Tue Jul 29 19:56:49 2008
@@ -1,73 +1,90 @@
<?php
-require "include/PhDObjectStorage.class.php";
-require "include/PhDConfig.class.php";
+$ROOT = __DIR__;
-require "include/PhDReader.class.php";
-require "include/PhDRender.class.php";
-require "include/PhDFormat.class.php";
-require "include/PhDIndex.class.php";
-
-require "formats/xhtml.php";
-require "formats/bigxhtml.php";
-require "formats/php.php";
+require $ROOT . "/include/PhDObjectStorage.class.php";
+require $ROOT . "/config.php";
+include $ROOT . "/include/PhDBuildOptions.class.php";
+
+require $ROOT . "/include/PhDReader.class.php";
+require $ROOT . "/include/PhDRender.class.php";
+require $ROOT . "/include/PhDFormat.class.php";
+require $ROOT . "/include/PhDIndex.class.php";
+
+require $ROOT . "/formats/xhtml.php";
+require $ROOT . "/formats/bigxhtml.php";
+require $ROOT . "/formats/php.php";
-$INDEX = "/home/bjori/php/doc/.manual.xml";
-$FILENAME = "/home/bjori/php/doc/.manual.xml";
+//$INDEX = "/Users/loudi/Travail/phpdoc/.manual.xml";
+//$FILENAME = "/Users/loudi/Travail/phpdoc/.manual.xml";
//$INDEX = $FILENAME = "/home/bjori/php/cleandocs/json.xml";
define("NO_SQLITE", false);
PhDConfig::init(array(
- "verbose" => \
VERBOSE_ALL^(VERBOSE_PARTIAL_CHILD_READING|VERBOSE_CHUNK_WRITING),
- "lang_dir" => __DIR__ . DIRECTORY_SEPARATOR . "include" . \
DIRECTORY_SEPARATOR . "langs" . DIRECTORY_SEPARATOR,
- "output_dir" => __DIR__ . DIRECTORY_SEPARATOR . "output" . \
DIRECTORY_SEPARATOR,
-
- "phpweb_version_filename" => dirname($FILENAME) . DIRECTORY_SEPARATOR . 'phpbook' . \
DIRECTORY_SEPARATOR . 'phpbook-xsl/' . 'version.xml',
- "phpweb_acronym_filename" => dirname($FILENAME) . DIRECTORY_SEPARATOR . 'entities' \
. DIRECTORY_SEPARATOR . 'acronyms.xml',
-));
+ "verbose" => \
VERBOSE_ALL^(VERBOSE_PARTIAL_CHILD_READING|VERBOSE_CHUNK_WRITING), + "lang_dir" \
=> $ROOT . DIRECTORY_SEPARATOR . "include" . DIRECTORY_SEPARATOR . "langs" . \
DIRECTORY_SEPARATOR,
-$render = new PhDRender();
+ "phpweb_version_filename" => PhDConfig::xml_root() . DIRECTORY_SEPARATOR . \
'phpbook' . DIRECTORY_SEPARATOR . 'phpbook-xsl' . DIRECTORY_SEPARATOR . \
'version.xml', + "phpweb_acronym_filename" => PhDConfig::xml_root() . \
DIRECTORY_SEPARATOR . 'entities' . DIRECTORY_SEPARATOR . 'acronyms.xml', + ));
+$render = new PhDRender();
$reader = new PhDReader();
foreach(range(0, 0) as $i) {
- var_dump(date(DATE_RSS));
+ //var_dump(date(DATE_RSS));
- if (1) {
- // Create indexer
- $format = new PhDIndex();
- $render->attach($format);
-
- $reader->open($INDEX);
- $render->render($reader);
-
- $format->commit();
- $render->detach($format);
-
- var_dump(date(DATE_RSS));
- }
-
- // Standalone phpweb Format
- $xhtml = new PhDPHPFormat();
- $render->attach($xhtml);
-
- /*
- // Standalone Chunked xHTML Format
- $xhtml = new PhDXHTMLFormat();
- $render->attach($xhtml);
-
- // Use the markup from the Chunked xHTML Format to produce Big xHTML
- $bightml = new PhDBigXHTMLFormat();
- $xhtml->attach($bightml);
-
- // Standalone Big xHTML Format
- $bightml = new PhDBigXHTMLFormat();
- $render->attach($bightml);
- */
+ if (1) {
+ v("Indexing...", VERBOSE_INDEXING);
+ // Create indexer
+ $format = new PhDIndex();
+ $render->attach($format);
+
+ $reader->open(PhDConfig::xml_file());
+ $render->render($reader);
+
+ $format->commit();
+ $render->detach($format);
+
+ v("Indexing done", VERBOSE_INDEXING);
+ //var_dump(date(DATE_RSS));
+ }
+
+ foreach (PhDConfig::output_format() as $format) {
+ switch($format) {
+ case "xhtml": // Standalone Chunked xHTML Format
+ $render->attach(new PhDXHTMLFormat());
+ break;
+ case "php": // Standalone phpweb Format
+ $render->attach(new PhDPHPFormat());
+ break;
+ case "bigxhtml": // Standalone Big xHTML Format
+ $render->attach(new PhDBigXHTMLFormat());
+ break;
+ }
+ }
+/*
+// Standalone phpweb Format
+//$xhtml = new PhDPHPFormat();
+//$render->attach($xhtml);
+
+
+// Standalone Chunked xHTML Format
+$xhtml = new PhDXHTMLFormat();
+$render->attach($xhtml);
+
+// Use the markup from the Chunked xHTML Format to produce Big xHTML
+$bightml = new PhDBigXHTMLFormat();
+$xhtml->attach($bightml);
+
+// Standalone Big xHTML Format
+$bightml = new PhDBigXHTMLFormat();
+$render->attach($bightml);
+*/
}
foreach(range(0, 0) as $i) {
- $reader->open($FILENAME);
- $render->render($reader);
+ $reader->open(PhDConfig::xml_file());
+ $render->render($reader);
}
http://cvs.php.net/viewvc.cgi/phd/include/PhDIndex.class.php?r1=1.2.2.2&r2=1.2.2.3&diff_format=u
Index: phd/include/PhDIndex.class.php
diff -u phd/include/PhDIndex.class.php:1.2.2.2 phd/include/PhDIndex.class.php:1.2.2.3
--- phd/include/PhDIndex.class.php:1.2.2.2 Mon Jul 28 22:47:59 2008
+++ phd/include/PhDIndex.class.php Tue Jul 29 19:56:49 2008
@@ -1,123 +1,123 @@
<?php
class PhDIndex extends PhDFormat {
- private $myelementmap = array(
- 'article' => 'format_container_chunk',
- 'appendix' => 'format_container_chunk',
- 'bibliography' => array(
- /* DEFAULT */ false,
- 'article' => 'format_chunk',
- 'book' => 'format_chunk',
- 'part' => 'format_chunk',
+ private $myelementmap = array(
+ 'article' => 'format_container_chunk',
+ 'appendix' => 'format_container_chunk',
+ 'bibliography' => array(
+ /* DEFAULT */ false,
+ 'article' => 'format_chunk',
+ 'book' => 'format_chunk',
+ 'part' => 'format_chunk',
),
- 'book' => 'format_container_chunk',
- 'chapter' => 'format_container_chunk',
- 'colophon' => 'format_chunk',
- 'glossary' => array(
- /* DEFAULT */ false,
- 'article' => 'format_chunk',
- 'book' => 'format_chunk',
- 'part' => 'format_chunk',
+ 'book' => 'format_container_chunk',
+ 'chapter' => 'format_container_chunk',
+ 'colophon' => 'format_chunk',
+ 'glossary' => array(
+ /* DEFAULT */ false,
+ 'article' => 'format_chunk',
+ 'book' => 'format_chunk',
+ 'part' => 'format_chunk',
),
- 'index' => array(
- /* DEFAULT */ false,
- 'article' => 'format_chunk',
- 'book' => 'format_chunk',
- 'part' => 'format_chunk',
+ 'index' => array(
+ /* DEFAULT */ false,
+ 'article' => 'format_chunk',
+ 'book' => 'format_chunk',
+ 'part' => 'format_chunk',
),
- 'legalnotice' => 'format_legalnotice_chunk',
- 'part' => 'format_container_chunk',
- 'preface' => 'format_chunk',
- 'refentry' => 'format_chunk',
- 'reference' => 'format_container_chunk',
- 'sect1' => 'format_section_chunk',
- 'section' => array(
- /* DEFAULT */ false,
- 'sect1' => 'format_section_chunk',
- 'preface' => 'format_section_chunk',
- 'chapter' => 'format_section_chunk',
- 'appendix' => 'format_section_chunk',
- 'article' => 'format_section_chunk',
- 'part' => 'format_section_chunk',
- 'reference' => 'format_section_chunk',
- 'refentry' => 'format_section_chunk',
- 'index' => 'format_section_chunk',
- 'bibliography' => 'format_section_chunk',
- 'glossary' => 'format_section_chunk',
- 'colopone' => 'format_section_chunk',
- 'book' => 'format_section_chunk',
- 'set' => 'format_section_chunk',
- 'setindex' => 'format_section_chunk',
- 'legalnotice' => 'format_section_chunk',
+ 'legalnotice' => 'format_legalnotice_chunk',
+ 'part' => 'format_container_chunk',
+ 'preface' => 'format_chunk',
+ 'refentry' => 'format_chunk',
+ 'reference' => 'format_container_chunk',
+ 'sect1' => 'format_section_chunk',
+ 'section' => array(
+ /* DEFAULT */ false,
+ 'sect1' => 'format_section_chunk',
+ 'preface' => 'format_section_chunk',
+ 'chapter' => 'format_section_chunk',
+ 'appendix' => 'format_section_chunk',
+ 'article' => 'format_section_chunk',
+ 'part' => 'format_section_chunk',
+ 'reference' => 'format_section_chunk',
+ 'refentry' => 'format_section_chunk',
+ 'index' => 'format_section_chunk',
+ 'bibliography' => 'format_section_chunk',
+ 'glossary' => 'format_section_chunk',
+ 'colopone' => 'format_section_chunk',
+ 'book' => 'format_section_chunk',
+ 'set' => 'format_section_chunk',
+ 'setindex' => 'format_section_chunk',
+ 'legalnotice' => 'format_section_chunk',
),
- 'set' => 'format_container_chunk',
- 'setindex' => 'format_chunk',
+ 'set' => 'format_container_chunk',
+ 'setindex' => 'format_chunk',
- 'title' => 'format_ldesc',
- 'refpurpose' => 'format_ldesc',
- 'refname' => 'format_refname',
- 'titleabbrev' => 'format_sdesc',
- );
- private $mytextmap = array(
- );
- private $chunks = array();
-
- public function transformFromMap($open, $tag, $name, $attrs, $props) {
- }
- public function TEXT($value) {
- }
- public function CDATA($value) {
- }
- public function createLink($for, &$desc = null, $desc = PhDFormat::SDESC) {
- }
- public function appendData($data) {
- }
+ 'title' => 'format_ldesc',
+ 'refpurpose' => 'format_ldesc',
+ 'refname' => 'format_refname',
+ 'titleabbrev' => 'format_sdesc',
+ );
+ private $mytextmap = array(
+ );
+ private $chunks = array();
+
+ public function transformFromMap($open, $tag, $name, $attrs, $props) {
+ }
+ public function TEXT($value) {
+ }
+ public function CDATA($value) {
+ }
+ public function createLink($for, &$desc = null, $desc = PhDFormat::SDESC) {
+ }
+ public function appendData($data) {
+ }
public function update($event, $value = null) {
switch($event) {
- case PhDRender::CHUNK:
+ case PhDRender::CHUNK:
$this->flags = $value;
break;
- case PhDRender::STANDALONE:
+ case PhDRender::STANDALONE:
if ($value) {
$this->registerElementMap(static::getDefaultElementMap());
$this->registerTextMap(static::getDefaultTextMap());
}
break;
- case PhDRender::INIT:
- if ($value) {
- if (file_exists("index.sqlite")) {
- unlink("index.sqlite");
- }
- $db = sqlite_open("index.sqlite");
-
- sqlite_exec($db, 'PRAGMA default_synchronous=OFF');
- sqlite_exec($db, 'PRAGMA count_changes=OFF');
- sqlite_exec($db, 'PRAGMA cache_size=100000');
+ case PhDRender::INIT:
+ if ($value) {
+ if (file_exists("index.sqlite")) {
+ unlink("index.sqlite");
+ }
+ $db = sqlite_open("index.sqlite");
+
+ sqlite_exec($db, 'PRAGMA default_synchronous=OFF');
+ sqlite_exec($db, 'PRAGMA count_changes=OFF');
+ sqlite_exec($db, 'PRAGMA cache_size=100000');
- $create = <<<SQL
+ $create = <<<SQL
CREATE TABLE ids (
- docbook_id TEXT PRIMARY KEY,
- filename TEXT,
- parent_id TEXT,
- sdesc TEXT,
- ldesc TEXT,
- element TEXT
+ docbook_id TEXT PRIMARY KEY,
+ filename TEXT,
+ parent_id TEXT,
+ sdesc TEXT,
+ ldesc TEXT,
+ element TEXT
);
SQL;
- sqlite_exec($db, 'PRAGMA default_synchronous=OFF');
- sqlite_exec($db, 'PRAGMA count_changes=OFF');
- sqlite_exec($db, 'PRAGMA cache_size=100000');
- sqlite_exec($db, $create);
-
- $this->db = $db;
-
- $this->chunks = array();
- } else {
- //print_r($this->chunks);
- }
+ sqlite_exec($db, 'PRAGMA default_synchronous=OFF');
+ sqlite_exec($db, 'PRAGMA count_changes=OFF');
+ sqlite_exec($db, 'PRAGMA cache_size=100000');
+ sqlite_exec($db, $create);
+
+ $this->db = $db;
+
+ $this->chunks = array();
+ } else {
+ //print_r($this->chunks);
+ }
}
}
public function getDefaultElementMap() {
@@ -126,74 +126,74 @@
public function getDefaultTextMap() {
return $this->mytextmap;
}
- public function UNDEF($open, $name, $attrs, $props) {
- if ($open) {
+ public function UNDEF($open, $name, $attrs, $props) {
+ if ($open) {
if(!isset($attrs[PhDReader::XMLNS_XML]["id"])) {
- return false;
- }
- $id = $attrs[PhDReader::XMLNS_XML]["id"];
- $this->storeInfo($name, $id, $this->currentchunk);
-
- return false;
- }
-
- if(!isset($attrs[PhDReader::XMLNS_XML]["id"])) {
- return false;
- }
-
- $this->appendID();
- return false;
- }
- protected function storeInfo($elm, $id, $filename) {
- $this->nfo[$id] = array(
- "parent" => "",
- "filename" => $filename,
- "sdesc" => "",
- "ldesc" => "",
- "element" => $elm,
- "children" => array(),
- );
- $this->ids[] = $id;
- $this->currentid = $id;
- }
- public function appendID() {
- static $rand = 0;
-
- $lastchunkid = array_pop($this->ids);
- $parentid = end($this->ids);
-
- $this->currentid = $parentid;
- $a = $this->nfo[$lastchunkid];
- if (is_array($a["sdesc"])) {
- $array = true;
- $sdesc = array_shift($a["sdesc"]);
- } else {
- $array = false;
- $sdesc = $a["sdesc"];
- }
- $this->commit .= sprintf(
- "INSERT INTO ids (docbook_id, filename, parent_id, sdesc, ldesc, element) \
VALUES('%s', '%s', '%s', '%s', '%s', '%s');\n",
- sqlite_escape_string($lastchunkid),
- sqlite_escape_string($a["filename"]),
- sqlite_escape_string($this->currentchunk),
- sqlite_escape_string($sdesc),
- sqlite_escape_string($a["ldesc"]),
- sqlite_escape_string($a["element"])
- );
- if ($array === true && !empty($a["sdesc"])) {
- foreach($a["sdesc"] as $sdesc) {
- ++$rand;
- $this->commit .= sprintf(
- "INSERT INTO ids (docbook_id, filename, parent_id, sdesc, ldesc, element) \
VALUES('%s', '%s', '', '%s', '%s', '%s');\n",
- "phdgen-" . $rand,
- sqlite_escape_string($a["filename"]),
- sqlite_escape_string($sdesc),
- sqlite_escape_string($a["ldesc"]),
- sqlite_escape_string($a["element"])
- );
- }
- }
- }
+ return false;
+ }
+ $id = $attrs[PhDReader::XMLNS_XML]["id"];
+ $this->storeInfo($name, $id, $this->currentchunk);
+
+ return false;
+ }
+
+ if(!isset($attrs[PhDReader::XMLNS_XML]["id"])) {
+ return false;
+ }
+
+ $this->appendID();
+ return false;
+ }
+ protected function storeInfo($elm, $id, $filename) {
+ $this->nfo[$id] = array(
+ "parent" => "",
+ "filename" => $filename,
+ "sdesc" => "",
+ "ldesc" => "",
+ "element" => $elm,
+ "children" => array(),
+ );
+ $this->ids[] = $id;
+ $this->currentid = $id;
+ }
+ public function appendID() {
+ static $rand = 0;
+
+ $lastchunkid = array_pop($this->ids);
+ $parentid = end($this->ids);
+
+ $this->currentid = $parentid;
+ $a = $this->nfo[$lastchunkid];
+ if (is_array($a["sdesc"])) {
+ $array = true;
+ $sdesc = array_shift($a["sdesc"]);
+ } else {
+ $array = false;
+ $sdesc = $a["sdesc"];
+ }
+ $this->commit .= sprintf(
+ "INSERT INTO ids (docbook_id, filename, parent_id, sdesc, ldesc, \
element) VALUES('%s', '%s', '%s', '%s', '%s', '%s');\n", + \
sqlite_escape_string($lastchunkid), + \
sqlite_escape_string($a["filename"]), + \
sqlite_escape_string($this->currentchunk), + sqlite_escape_string($sdesc),
+ sqlite_escape_string($a["ldesc"]),
+ sqlite_escape_string($a["element"])
+ );
+ if ($array === true && !empty($a["sdesc"])) {
+ foreach($a["sdesc"] as $sdesc) {
+ ++$rand;
+ $this->commit .= sprintf(
+ "INSERT INTO ids (docbook_id, filename, \
parent_id, sdesc, ldesc, element) VALUES('%s', '%s', '', '%s', '%s', '%s');\n", + \
"phdgen-" . $rand, + sqlite_escape_string($a["filename"]),
+ sqlite_escape_string($sdesc),
+ sqlite_escape_string($a["ldesc"]),
+ sqlite_escape_string($a["element"])
+ );
+ }
+ }
+ }
public function format_section_chunk($open, $name, $attrs, $props) {
static $a = array();
if ($open) {
@@ -205,13 +205,13 @@
}
$x = array_pop($a);
if ($x == $name) {
- return $this->format_chunk($open, $name, $attrs, $props);
+ return $this->format_chunk($open, $name, $attrs, $props);
}
$a[] = $x;
return $this->UNDEF($open, $name, $attrs, $props);
}
public function format_container_chunk($open, $name, $attrs, $props) {
- return $this->format_chunk($open, $name, $attrs, $props);
+ return $this->format_chunk($open, $name, $attrs, $props);
}
public function format_chunk($open, $name, $attrs, $props) {
if ($open) {
@@ -220,55 +220,55 @@
} else {
$id = uniqid("phd");
}
- $this->chunks[] = $id;
- $this->currentchunk = $id;
- $this->storeInfo($name, $id, $id);
+ $this->chunks[] = $id;
+ $this->currentchunk = $id;
+ $this->storeInfo($name, $id, $id);
$this->notify(PhDRender::CHUNK, PhDRender::OPEN);
- return false;
+ return false;
}
- array_pop($this->chunks);
- $this->currentchunk = end($this->chunks);
+ array_pop($this->chunks);
+ $this->currentchunk = end($this->chunks);
$this->notify(PhDRender::CHUNK, PhDRender::CLOSE);
- $this->appendID();
+ $this->appendID();
+
+ return false;
+ }
+ public function format_legalnotice_chunk($open, $name, $attrs, $props) {
+ return $this->format_chunk($open, $name, $attrs, $props);
+ }
+ public function format_ldesc($open, $name, $attrs, $props) {
+ if ($open) {
+ if (empty($this->nfo[$this->currentid]["ldesc"])) {
+ /* FIXME: How can I mark that node with "reparse" flag? \
*/ + $s = $this->getReader()->readInnerXml();
+ $this->nfo[$this->currentid]["ldesc"] = $s;
+ }
+ }
+ }
+ public function format_sdesc($open, $name, $attrs, $props) {
+ if ($open) {
+ if (empty($this->nfo[$this->currentid]["sdesc"])) {
+ /* FIXME: How can I mark that node with "reparse" flag? \
*/ + $s = $this->getReader()->readInnerXml();
+ $this->nfo[$this->currentid]["sdesc"] = $s;
+ }
- return false;
+ }
+ }
+ public function format_refname($open, $name, $attrs, $props) {
+ if ($open) {
+ $s = $this->getReader()->readInnerXml();
+ $s = str_replace(array("_", "::", "->"), array("-", "-", "-"), $s);
+ $this->nfo[$this->currentid]["sdesc"][] = strtolower($s);
+ }
+ }
+ public function commit() {
+ var_dump(sqlite_exec($this->db, 'BEGIN TRANSACTION; '.$this->commit.' \
COMMIT')); + $this->commit = null;
}
- public function format_legalnotice_chunk($open, $name, $attrs, $props) {
- return $this->format_chunk($open, $name, $attrs, $props);
- }
- public function format_ldesc($open, $name, $attrs, $props) {
- if ($open) {
- if (empty($this->nfo[$this->currentid]["ldesc"])) {
- /* FIXME: How can I mark that node with "reparse" flag? */
- $s = $this->getReader()->readInnerXml();
- $this->nfo[$this->currentid]["ldesc"] = $s;
- }
- }
- }
- public function format_sdesc($open, $name, $attrs, $props) {
- if ($open) {
- if (empty($this->nfo[$this->currentid]["sdesc"])) {
- /* FIXME: How can I mark that node with "reparse" flag? */
- $s = $this->getReader()->readInnerXml();
- $this->nfo[$this->currentid]["sdesc"] = $s;
- }
-
- }
- }
- public function format_refname($open, $name, $attrs, $props) {
- if ($open) {
- $s = $this->getReader()->readInnerXml();
- $s = str_replace(array("_", "::", "->"), array("-", "-", "-"), $s);
- $this->nfo[$this->currentid]["sdesc"][] = strtolower($s);
- }
- }
- public function commit() {
- var_dump(sqlite_exec($this->db, 'BEGIN TRANSACTION; '.$this->commit.' COMMIT'));
- $this->commit = null;
- }
}
http://cvs.php.net/viewvc.cgi/phd/include/PhDFormat.class.php?r1=1.10.6.1&r2=1.10.6.2&diff_format=u
Index: phd/include/PhDFormat.class.php
diff -u phd/include/PhDFormat.class.php:1.10.6.1 \
phd/include/PhDFormat.class.php:1.10.6.2
--- phd/include/PhDFormat.class.php:1.10.6.1 Mon Jul 28 22:40:57 2008
+++ phd/include/PhDFormat.class.php Tue Jul 29 19:56:49 2008
@@ -4,38 +4,38 @@
const SDESC = 1;
const LDESC = 2;
- private $elementmap = array();
- private $textmapmap = array();
- protected $sqlite;
+ private $elementmap = array();
+ private $textmapmap = array();
+ protected $sqlite;
- private static $autogen = array();
+ private static $autogen = array();
- public function __construct() {
- $this->sqlite = sqlite_open("index.sqlite");
+ public function __construct() {
+ $this->sqlite = sqlite_open("index.sqlite");
$this->sortIDs();
- }
+ }
- abstract public function transformFromMap($open, $tag, $name, $attrs, $props);
- abstract public function UNDEF($open, $name, $attrs, $props);
- abstract public function TEXT($value);
- abstract public function CDATA($value);
- abstract public function createLink($for, &$desc = null, $desc = PhDFormat::SDESC);
- abstract public function appendData($data);
- abstract public function update($event, $value = null);
+ abstract public function transformFromMap($open, $tag, $name, $attrs, $props);
+ abstract public function UNDEF($open, $name, $attrs, $props);
+ abstract public function TEXT($value);
+ abstract public function CDATA($value);
+ abstract public function createLink($for, &$desc = null, $desc = \
PhDFormat::SDESC); + abstract public function appendData($data);
+ abstract public function update($event, $value = null);
public function sortIDs() {
sqlite_create_aggregate($this->sqlite, "idx", array($this, "SQLiteIndex"), \
array($this, "SQLiteFinal"), 6);
sqlite_unbuffered_query($this->sqlite, "SELECT idx(docbook_id, filename, \
parent_id, sdesc, ldesc, element) FROM ids", SQLITE_ASSOC);
- print_r($this->idx);
+ //print_r($this->idx);
}
public function SQLiteIndex(&$context, $id, $filename, $parent, $sdesc, $ldesc, \
$element) { $this->idx[$id] = array(
- "docbook_id" => $id,
- "filename" => $filename,
- "parent_id" => $parent,
- "sdesc" => $sdesc,
- "ldesc" => $ldesc,
- "element" => $element
+"docbook_id" => $id,
+"filename" => $filename,
+"parent_id" => $parent,
+"sdesc" => $sdesc,
+"ldesc" => $ldesc,
+"element" => $element
);
if ($element == "refentry") {
$this->refs[$sdesc] = $id;
@@ -47,50 +47,51 @@
}
- final public function notify($event, $val = null) {
- $this->update($event, $val);
- foreach($this as $format) {
- $format->update($event, $val);
- }
- }
- final public function registerElementMap(array $map) {
- $this->elementmap = $map;
- }
- final public function registerTextMap(array $map) {
- $this->textmap = $map;
- }
- final public function attach($obj, $inf = array()) {
- if (!($obj instanceof $this) && get_class($obj) != get_class($this)) {
- throw new InvalidArgumentException(get_class($this) . " themes *MUST* _inherit_ " \
.get_class($this). ", got " . get_class($obj));
- }
- $obj->notify(PhDRender::STANDALONE, false);
- return parent::attach($obj, $inf);
- }
- final public function getElementMap() {
- return $this->elementmap;
- }
- final public function getTextMap() {
- return $this->textmap;
- }
+ final public function notify($event, $val = null) {
+ $this->update($event, $val);
+ foreach($this as $format) {
+ $format->update($event, $val);
+ }
+ }
+ final public function registerElementMap(array $map) {
+ $this->elementmap = $map;
+ }
+ final public function registerTextMap(array $map) {
+ $this->textmap = $map;
+ }
+ final public function attach($obj, $inf = array()) {
+ if (!($obj instanceof $this) && get_class($obj) != get_class($this)) {
+ throw new InvalidArgumentException(get_class($this) . " themes *MUST* \
_inherit_ " .get_class($this). ", got " . get_class($obj)); + }
+ $obj->notify(PhDRender::STANDALONE, false);
+ return parent::attach($obj, $inf);
+ }
+ final public function getElementMap() {
+ return $this->elementmap;
+ }
+ final public function getTextMap() {
+ return $this->textmap;
+ }
+
final public static function autogen($text, $lang) {
if (isset(self::$autogen[$lang])) {
- if (isset(self::$autogen[$lang][$text])) {
- return self::$autogen[$lang][$text];
- }
- if ($lang == PhDConfig::get("fallback_language")) {
- throw new InvalidArgumentException("Cannot autogenerate text for '$text'");
- }
- return self::autogen($text, PhDConfig::get("fallback_language"));
+ if (isset(self::$autogen[$lang][$text])) {
+ return self::$autogen[$lang][$text];
+ }
+ if ($lang == PhDConfig::fallback_language()) {
+ throw new InvalidArgumentException("Cannot autogenerate text for \
'$text'"); + }
+ return self::autogen($text, PhDConfig::fallback_language());
}
- $filename = PhDConfig::get("lang_dir") . $lang . ".xml";
+ $filename = PhDConfig::lang_dir() . $lang . ".xml";
$r = new XMLReader;
if (!file_exists($filename) || !$r->open($filename)) {
- if ($lang == PhDConfig::get("fallback_language")) {
+ if ($lang == PhDConfig::fallback_language()) {
throw new Exception("Cannot open $filename");
}
- return self::autogen($text, PhDConfig::get("fallback_language"));
+ return self::autogen($text, PhDConfig::fallback_language());
}
$autogen = array();
while ($r->read()) {
@@ -107,11 +108,11 @@
}
}
self::$autogen[$lang] = $autogen;
- return self::autogen($text, $lang);
+ return self::autogen($text, $lang);
}
- /* {{{ Table helper functions */
+/* {{{ Table helper functions */
public function tgroup($attrs) {
if (isset($attrs["cols"])) {
$this->TABLE["cols"] = $attrs["cols"];
@@ -127,7 +128,7 @@
return $colspec;
}
public function getColspec(array $attrs) {
- /* defaults */
+/* defaults */
$defaults["colname"] = count($this->TABLE["colspec"])+1;
$defaults["colnum"] = count($this->TABLE["colspec"])+1;
$defaults["align"] = "left";
@@ -179,11 +180,11 @@
}
return 1;
}
- /* }}} */
+/* }}} */
}
/*
- * vim600: sw=4 ts=4 fdm=syntax syntax=php et
- * vim<600: sw=4 ts=4
- */
+* vim600: sw=4 ts=4 fdm=syntax syntax=php et
+* vim<600: sw=4 ts=4
+*/
http://cvs.php.net/viewvc.cgi/phd/include/PhDBuildOptions.class.php?r1=1.6&r2=1.6.2.1&diff_format=u
Index: phd/include/PhDBuildOptions.class.php
diff -u phd/include/PhDBuildOptions.class.php:1.6 \
phd/include/PhDBuildOptions.class.php:1.6.2.1
--- phd/include/PhDBuildOptions.class.php:1.6 Mon Jul 21 18:26:35 2008
+++ phd/include/PhDBuildOptions.class.php Tue Jul 29 19:56:49 2008
@@ -1,5 +1,5 @@
<?php
-/* $Id: PhDBuildOptions.class.php,v 1.6 2008/07/21 18:26:35 loudi Exp $ */
+/* $Id: PhDBuildOptions.class.php,v 1.6.2.1 2008/07/29 19:56:49 loudi Exp $ */
class PhDBuildOptionsParser extends PhDOptionParser
{
@@ -10,7 +10,6 @@
{
return array(
"format:" => "f:", // The format to render (xhtml, pdf...)
- "theme:" => "t:", // The theme to render (phpweb, bightml..)
"index:" => "i:", // Re-index or load from cache
"docbook:" => "d:", // The Docbook XML file to render from \
(.manual.xml) "output:" => "o:", // The output directory
@@ -34,81 +33,26 @@
foreach((array)$v as $i => $val) {
switch($val) {
case "xhtml":
- case "manpage":
- case "pdf":
+ case "bigxhtml":
+ case "php":
if (!in_array($val, $formats)) {
$formats[] = $val;
}
break;
default:
- trigger_error("Only xhtml, pdf and manpage are supported at this \
time", E_USER_ERROR); + trigger_error("Only xhtml, bigxhtml and \
php are supported at this time", E_USER_ERROR); }
}
PhDConfig::set_output_format($formats);
}
- public function option_t($k, $v)
- {
- $this->option_theme($k, $v);
- }
- public function option_theme($k, $v)
- {
- /* Remove the default themes */
- $themes = PhDConfig::output_theme();
- $themes['xhtml']['php'] = array();
- $themes['manpage']['php'] = array();
-
- foreach((array)$v as $i => $val) {
- switch($val) {
- case "phpweb":
- case "chunkedhtml":
- case "bightml":
- case "chmsource":
- case "phpkdevelop":
- if (!in_array($val, $themes["xhtml"]["php"])) {
- $themes["xhtml"]["php"][] = $val;
- }
- break;
- case "phpfunctions":
- if (!in_array($val, $themes["manpage"]["php"])) {
- $themes["manpage"]["php"][] = $val;
- }
- break;
- case "phppdf":
- case "phpbigpdf":
- if (!in_array($val, $themes["pdf"]["php"])) {
- $themes["pdf"]["php"][] = $val;
- }
- break;
- case "pear":
- $themes["xhtml"]["pear"] = array(
- 'pearweb',
- 'pearchunkedhtml',
- 'pearbightml',
- 'pearchm'
- );
- break;
- case "pearweb":
- case "pearchunkedhtml":
- case "pearbightml":
- case "pearchm":
- if (!in_array($val, $themes["xhtml"]["pear"])) {
- $themes["xhtml"]["pear"][] = $val;
- }
- break;
- default:
- trigger_error(sprintf("Unknown theme '%s'", $val), \
E_USER_ERROR);
- }
- }
- PhDConfig::set_output_theme($themes);
- }
-
public function option_i($k, $v)
{
$this->option_index($k, $v);
}
public function option_index($k, $v)
{
+ /*
if (is_array($v)) {
trigger_error(sprintf("You cannot pass %s more than once", $k), \
E_USER_ERROR); }
@@ -117,7 +61,7 @@
PhDConfig::set_index($val);
} else {
trigger_error("yes/no || on/off || true/false || 1/0 expected", \
E_USER_ERROR);
- }
+ }*/
}
public function option_d($k, $v)
@@ -148,8 +92,9 @@
}
@mkdir($v, 0777, true);
if (!is_dir($v) || !is_readable($v)) {
- trigger_error(sprintf("'%s' is not a valid directory", $v), \
E_USER_ERROR); + trigger_error(sprintf("'%s' is not a valid directory", \
$v), E_USER_ERROR); die("toto"); }
+ $v = (substr($v, strlen($v) - strlen(DIRECTORY_SEPARATOR)) == \
DIRECTORY_SEPARATOR) ? $v : ($v . DIRECTORY_SEPARATOR); \
PhDConfig::set_output_dir($v); }
@@ -239,7 +184,6 @@
public function option_list($k, $v)
{
static $formatList = NULL;
- static $themeList = NULL;
if (is_null($formatList)) {
$formatList = array();
@@ -247,48 +191,11 @@
$formatList[] = substr(basename($item), 0, -4);
}
}
- if (is_null($themeList)) {
- $themeList = array();
- foreach (glob($GLOBALS['ROOT'] . "/themes/*", GLOB_ONLYDIR) as $item) {
- if (!in_array(basename($item), array('CVS', '.', '..'))) {
- $maintheme = basename($item);
- $subthemes = array();
- foreach (glob($item . "/*.php") as $subitem) {
- $subthemes[] = substr(basename($subitem), 0, -4);
- }
- $themeList[$maintheme] = $subthemes;
- }
- }
- }
-
- if ($v === false) {
- $v = array('f', 't');
- }
- foreach((array)$v as $val) {
- switch($val) {
- case "f":
- case "format":
- case "formats": {
- echo "Supported formats:\n";
- echo "\t" . implode("\n\t", $formatList) . "\n";
- break;
- }
-
- case "t":
- case "theme":
- case "themes":
- echo "Supported themes:\n";
- foreach ($themeList as $theme => $subthemes) {
- echo "\t" . $theme . "\n\t\t" . implode("\n\t\t", \
$subthemes) . "\n";
- }
- break;
-
- default:
- echo "Unknown list type '$val'\n";
- break;
- }
- }
+ echo "Supported formats:\n";
+ echo "\t" . implode("\n\t", $formatList) . "\n";
+ break;
+
exit(0);
}
@@ -336,8 +243,6 @@
--verbose <int> Adjusts the verbosity level
-f <formatname>
--format <formatname> The build format to use
- -t <themename>
- --theme <themename> The theme to use
-i <bool>
--index <bool> Index before rendering (default) or load from cache \
(false)
-d <filename>
@@ -347,7 +252,7 @@
-s <id[=bool]>
--skip <id[=bool]> The ID to skip, optionally skipping its children chunks \
(default to true; skip children)
-l <formats/themes>
- --list <formats/themes> Print out the supported formats/themes (default: both)
+ --list Print out the supported formats
-o <directory>
--output <directory> The output directory (default: .)
-c <bool>
http://cvs.php.net/viewvc.cgi/phd/include/PhDRender.class.php?r1=1.2.2.2&r2=1.2.2.3&diff_format=u
Index: phd/include/PhDRender.class.php
diff -u phd/include/PhDRender.class.php:1.2.2.2 \
phd/include/PhDRender.class.php:1.2.2.3
--- phd/include/PhDRender.class.php:1.2.2.2 Mon Jul 28 22:47:59 2008
+++ phd/include/PhDRender.class.php Tue Jul 29 19:56:49 2008
@@ -1,221 +1,221 @@
<?php
class PhDRender extends PhDObjectStorage {
- const CHUNK = 0x001;
- const OPEN = 0x002;
- const CLOSE = 0x004;
- const STANDALONE = 0x008;
- const INIT = 0x010;
-
- private $STACK = array();
-
- public function __construct() { /* {{{ */
- } /* }}} */
-
- public function notXPath($tag, $depth) { /* {{{ */
- do {
- if (isset($tag[$this->STACK[--$depth]])) {
- $tag = $tag[$this->STACK[$depth]];
- } else {
- $tag = $tag[0];
- }
- } while (is_array($tag));
- return $tag;
- } /* }}} */
-
- public function attach($obj, $inf = array()) { /* {{{ */
- if (!($obj instanceof PhDFormat)) {
- throw new InvalidArgumentException("All formats *MUST* inherit PhDFormat");
- }
- $obj->notify(PhDRender::STANDALONE, true);
-
- return parent::attach($obj, $inf);
- } /* }}} */
-
- public function render(PhDReader $r) { /* {{{ */
- PhDObjectStorage::setReader($r);
-
- foreach($this as $format) {
- $format->notify(PhDRender::INIT, true);
- }
-
- $lastdepth = -1;
- while($r->read()) {
- $type = $r->nodeType;
- $data = $retval = $name = $open = false;
-
- switch($type) {
- case XMLReader::ELEMENT: /* {{{ */
- $open = true;
- /* break intentionally omitted */
- case XMLReader::END_ELEMENT:
- $name = $r->name;
- $depth = $r->depth;
- $attrs = array(
- PhDReader::XMLNS_DOCBOOK => array(),
- PhDReader::XMLNS_XML => array(),
- );
-
- if ($r->hasAttributes) {
- $r->moveToFirstAttribute();
- do {
- $k = $r->namespaceURI;
- $attrs[!empty($k) ? $k : PhDReader::XMLNS_DOCBOOK][$r->localName] = $r->value;
- } while ($r->moveToNextAttribute());
- $r->moveToElement();
- }
-
- $props = array(
- "empty" => $r->isEmptyElement,
- "isChunk" => false,
- "lang" => $r->xmlLang,
- "ns" => $r->namespaceURI,
- "sibling" => $lastdepth >= $depth ? $this->STACK[$depth] : "",
- "depth" => $depth,
- );
-
- $this->STACK[$depth] = $name;
-
- foreach($this as $format) {
- $map = $this[$format][XMLReader::ELEMENT];
-
- if (isset($map[$name]) === false) {
- $data = $format->UNDEF($open, $name, $attrs, $props);
- $format->appendData($data);
- continue;
- }
-
- $tag = $map[$name];
- if (is_array($tag)) {
- $tag = $this->notXPath($tag, $depth);
- }
-
- if ($tag === false) {
- $data = $format->UNDEF($open, $name, $attrs, $props);
- $format->appendData($data);
- continue;
- }
-
- if (strncmp($tag, "format_", 7) !== 0) {
- $data = $retval = $format->transformFromMap($open, $tag, $name, $attrs, \
$props);
- } else {
- $data = $retval = $format->{$tag}($open, $name, $attrs, $props);
- }
- $format->appendData($data);
-
- foreach($format as $theme) {
- $map = $format[$theme][XMLReader::ELEMENT];
- if (isset($map[$name])) {
- $tag = $map[$name];
-
- if (is_array($tag)) {
- $tag = $this->notXPath($tag, $depth);
- }
-
- if ($tag !== false) {
- $retval = $theme->{$tag}($open, $name, $attrs, $props);
-
- if ($retval !== false) {
- $data = $retval;
- }
- }
- }
- $theme->appendData($data);
- }
- }
-
- $lastdepth = $depth;
- break;
- /* }}} */
-
- case XMLReader::TEXT: /* {{{ */
- $value = $r->value;
- $eldepth = $r->depth - 1;
- $name = $this->STACK[$eldepth];
-
- foreach($this as $format) {
- $map = $this[$format][XMLReader::TEXT];
- if (isset($map[$name])) {
- $tag = $map[$name];
-
- if (is_array($tag)) {
- $tag = $this->notXPath($tag, $eldepth);
- }
-
- if ($tag !== false) {
- $data = $retval = $format->{$tag}($value, $name);
- } else {
- $data = $retval = $format->TEXT($value);
- }
- } else {
- $data = $retval = $format->TEXT($value);
- }
-
- if ($data === false) {
- $format->appendData($value);
- } else {
- $format->appendData($data);
- }
-
- foreach($format as $theme) {
- $map = $format[$theme][XMLReader::TEXT];
- if (isset($map[$name])) {
- $tag = $map[$name];
-
- if (is_array($tag)) {
- $tag = $this->notXPath($tag, $eldepth);
- }
-
- if ($tag !== false) {
- $retval = $format->{$tag}($value, $name);
- if ($retval !== false) {
- $data = $retval;
- }
- }
- }
- $theme->appendData($data);
- }
- }
- break;
- /* }}} */
-
- case XMLReader::CDATA: /* {{{ */
- /* Different formats may want to escape the CDATA sections differently */
- $value = $r->value;
- foreach($this as $format) {
- $retval = $format->CDATA($value);
- $format->appendData($retval);
- foreach($format as $theme) {
- $theme->appendData($retval);
- }
- }
- break;
- /* }}} */
-
- case XMLReader::WHITESPACE: /* {{{ */
- case XMLReader::SIGNIFICANT_WHITESPACE:
- /* WS is always WS */
- $retval = $r->value;
- foreach($this as $format) {
- $format->appendData($retval);
- foreach($format as $theme) {
- $theme->appendData($retval);
- }
- }
- break;
- /* }}} */
-
- }
- }
-
- /* Closing time */
- foreach($this as $format) {
- //$format->notify(PhDRender::INIT, false);
- }
- $r->close();
+ const CHUNK = 0x001;
+ const OPEN = 0x002;
+ const CLOSE = 0x004;
+ const STANDALONE = 0x008;
+ const INIT = 0x010;
+
+ private $STACK = array();
+
+ public function __construct() { /* {{{ */
+ } /* }}} */
+
+ public function notXPath($tag, $depth) { /* {{{ */
+ do {
+ if (isset($tag[$this->STACK[--$depth]])) {
+ $tag = $tag[$this->STACK[$depth]];
+ } else {
+ $tag = $tag[0];
+ }
+ } while (is_array($tag));
+ return $tag;
+ } /* }}} */
+
+ public function attach($obj, $inf = array()) { /* {{{ */
+ if (!($obj instanceof PhDFormat)) {
+ throw new InvalidArgumentException("All formats *MUST* inherit \
PhDFormat"); + }
+ $obj->notify(PhDRender::STANDALONE, true);
+
+ return parent::attach($obj, $inf);
+ } /* }}} */
+
+ public function render(PhDReader $r) { /* {{{ */
+ PhDObjectStorage::setReader($r);
+
+ foreach($this as $format) {
+ $format->notify(PhDRender::INIT, true);
+ }
+
+ $lastdepth = -1;
+ while($r->read()) {
+ $type = $r->nodeType;
+ $data = $retval = $name = $open = false;
+
+ switch($type) {
+ case XMLReader::ELEMENT: /* {{{ */
+ $open = true;
+ /* break intentionally omitted */
+ case XMLReader::END_ELEMENT:
+ $name = $r->name;
+ $depth = $r->depth;
+ $attrs = array(
+ PhDReader::XMLNS_DOCBOOK => array(),
+ PhDReader::XMLNS_XML => array(),
+ );
+
+ if ($r->hasAttributes) {
+ $r->moveToFirstAttribute();
+ do {
+ $k = $r->namespaceURI;
+ $attrs[!empty($k) ? $k : \
PhDReader::XMLNS_DOCBOOK][$r->localName] = $r->value; + } while \
($r->moveToNextAttribute()); + $r->moveToElement();
+ }
+
+ $props = array(
+ "empty" => $r->isEmptyElement,
+ "isChunk" => false,
+ "lang" => $r->xmlLang,
+ "ns" => $r->namespaceURI,
+ "sibling" => $lastdepth >= $depth ? \
$this->STACK[$depth] : "", + "depth" => $depth,
+ );
+
+ $this->STACK[$depth] = $name;
+
+ foreach($this as $format) {
+ $map = $this[$format][XMLReader::ELEMENT];
+
+ if (isset($map[$name]) === false) {
+ $data = $format->UNDEF($open, $name, $attrs, $props);
+ $format->appendData($data);
+ continue;
+ }
+
+ $tag = $map[$name];
+ if (is_array($tag)) {
+ $tag = $this->notXPath($tag, $depth);
+ }
+
+ if ($tag === false) {
+ $data = $format->UNDEF($open, $name, $attrs, $props);
+ $format->appendData($data);
+ continue;
+ }
+
+ if (strncmp($tag, "format_", 7) !== 0) {
+ $data = $retval = $format->transformFromMap($open, $tag, \
$name, $attrs, $props); + } else {
+ $data = $retval = $format->{$tag}($open, $name, $attrs, \
$props); + }
+ $format->appendData($data);
+
+ foreach($format as $theme) {
+ $map = $format[$theme][XMLReader::ELEMENT];
+ if (isset($map[$name])) {
+ $tag = $map[$name];
+
+ if (is_array($tag)) {
+ $tag = $this->notXPath($tag, $depth);
+ }
+
+ if ($tag !== false) {
+ $retval = $theme->{$tag}($open, $name, $attrs, \
$props); +
+ if ($retval !== false) {
+ $data = $retval;
+ }
+ }
+ }
+ $theme->appendData($data);
+ }
+ }
+
+ $lastdepth = $depth;
+ break;
+ /* }}} */
+
+ case XMLReader::TEXT: /* {{{ */
+ $value = $r->value;
+ $eldepth = $r->depth - 1;
+ $name = $this->STACK[$eldepth];
+
+ foreach($this as $format) {
+ $map = $this[$format][XMLReader::TEXT];
+ if (isset($map[$name])) {
+ $tag = $map[$name];
+
+ if (is_array($tag)) {
+ $tag = $this->notXPath($tag, $eldepth);
+ }
+
+ if ($tag !== false) {
+ $data = $retval = $format->{$tag}($value, $name);
+ } else {
+ $data = $retval = $format->TEXT($value);
+ }
+ } else {
+ $data = $retval = $format->TEXT($value);
+ }
+
+ if ($data === false) {
+ $format->appendData($value);
+ } else {
+ $format->appendData($data);
+ }
+
+ foreach($format as $theme) {
+ $map = $format[$theme][XMLReader::TEXT];
+ if (isset($map[$name])) {
+ $tag = $map[$name];
+
+ if (is_array($tag)) {
+ $tag = $this->notXPath($tag, $eldepth);
+ }
+
+ if ($tag !== false) {
+ $retval = $format->{$tag}($value, $name);
+ if ($retval !== false) {
+ $data = $retval;
+ }
+ }
+ }
+ $theme->appendData($data);
+ }
+ }
+ break;
+ /* }}} */
+
+ case XMLReader::CDATA: /* {{{ */
+ /* Different formats may want to escape the CDATA \
sections differently */ + $value = $r->value;
+ foreach($this as $format) {
+ $retval = $format->CDATA($value);
+ $format->appendData($retval);
+ foreach($format as $theme) {
+ $theme->appendData($retval);
+ }
+ }
+ break;
+ /* }}} */
+
+ case XMLReader::WHITESPACE: /* {{{ */
+ case XMLReader::SIGNIFICANT_WHITESPACE:
+ /* WS is always WS */
+ $retval = $r->value;
+ foreach($this as $format) {
+ $format->appendData($retval);
+ foreach($format as $theme) {
+ $theme->appendData($retval);
+ }
+ }
+ break;
+ /* }}} */
+
+ }
+ }
+
+ /* Closing time */
+ foreach($this as $format) {
+ //$format->notify(PhDRender::INIT, false);
+ }
+ $r->close();
- PhDObjectStorage::popReader();
+ PhDObjectStorage::popReader();
- } /* }}} */
+ } /* }}} */
}
--
PHP Documentation Commits Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic