diff options
author | wei <> | 2006-10-12 07:30:33 +0000 |
---|---|---|
committer | wei <> | 2006-10-12 07:30:33 +0000 |
commit | 5abdafeb9ded0c1c41992f7b3758f1dc02255683 (patch) | |
tree | c5c344f0285e9b5dcd540eeaa1a701f47e14b4bb /buildscripts/chmbuilder/ChmQuickstartBuilder.php | |
parent | de630e4134484cea82fd0a1864a45db3bd9974bc (diff) |
add unified chm build (quickstart + API + classdocs + wiki)
Diffstat (limited to 'buildscripts/chmbuilder/ChmQuickstartBuilder.php')
-rw-r--r-- | buildscripts/chmbuilder/ChmQuickstartBuilder.php | 435 |
1 files changed, 435 insertions, 0 deletions
diff --git a/buildscripts/chmbuilder/ChmQuickstartBuilder.php b/buildscripts/chmbuilder/ChmQuickstartBuilder.php new file mode 100644 index 00000000..6087d5d8 --- /dev/null +++ b/buildscripts/chmbuilder/ChmQuickstartBuilder.php @@ -0,0 +1,435 @@ +<?php
+
+class ChmQuickstartBuilder
+{
+ private $base;
+ const DEMO_URL = 'http://www.pradosoft.com/demos/quickstart/';
+ const CSS_URL = 'assets/chm_style.css';
+ private $output_dir;
+ private $app;
+
+ private $_viewed=array();
+
+ public function __construct($base,$output)
+ {
+ $this->base = $base;
+ $this->output_dir = $output.'/quickstart';
+
+ if(!is_dir($this->output_dir))
+ {
+ mkdir($this->output_dir);
+ mkdir($this->output_dir.'/assets/');
+ copy(dirname(__FILE__).'/chm_style.css', $this->output_dir.'/assets/chm_style.css');
+ }
+
+ Prado::setPathOfAlias('Output', realpath($this->output_dir));
+ }
+
+ public function buildDoc($pages)
+ {
+ foreach($pages as $section)
+ {
+ foreach($section as $page)
+ {
+ $this->parsePage($page);
+ }
+ }
+ }
+
+ protected function initApp()
+ {
+ $this->app = new TApplication($this->base);
+ $response = new THttpResponse();
+ $response->setBufferOutput(false);
+ $this->app->setResponse($response);
+ $assets = new TAssetManager();
+ $assets->setBasePath('Output.assets.*');
+ $this->app->setAssetManager($assets);
+ }
+
+ public function parsePage($page)
+ {
+ $_GET['page'] = str_replace(array('/','.page'),array('.',''),$page);
+ $_GET['notheme'] = 'true';
+
+ $html = $this->parseHtmlContent($this->getApplicationContent());
+ $file = str_replace(array('/','.page'), array('_','.html'),$page);
+ echo 'writing file '.$file."\n";
+ file_put_contents($this->output_dir.'/'.$file, $html);
+ }
+
+ protected function getApplicationContent()
+ {
+ ob_start();
+ $this->initApp();
+ $this->app->run();
+ $content = ob_get_contents();
+ ob_end_clean();
+ return $content;
+ }
+
+ protected function parseHtmlContent($content)
+ {
+ $html = preg_replace('/<input.*name="PRADO_PAGESTATE" [^>]+\/>/m', '', $content);
+$html = str_replace('<div id="header">
+<div class="title">Prado QuickStart Tutorial</div>
+<div class="image"></div>
+</div>', '', $html);
+$html = preg_replace('/<div id="footer">.*?<\/div>/ms', '<div id="footer">
+Copyright © 2005-2006 <a href="http://www.pradosoft.com">PradoSoft</a>.</div>', $html);
+
+
+ $html = str_replace('</head>', '<link rel="stylesheet" type="text/css" href="'.self::CSS_URL.'" /></head>', $html);
+
+ $html = preg_replace_callback('/(?<!RunButton" )href=".*\?page=([a-zA-Z0-9\.#]+)"/',
+ array($this, 'update_page_url'), $html);
+ $html = preg_replace_callback('/(?<=RunButton" )href=".*\?page=([a-zA-Z0-9\.#]+)"/',
+ array($this, 'update_run_url'), $html);
+
+ $html = preg_replace('/(src|href)="\//', 'src="assets/',$html);
+ $html = str_replace('http://www.pradosoft.com/docs/manual', '../manual/CHMdefaultConverter', $html);
+ $html = str_replace('target="_blank">View Source', '>View Source', $html);
+ $html = preg_replace_callback('/href="\?page=ViewSource&(amp;){0,1}path=([a-zA-z0-9\.\/]+)"/',
+ array($this, 'update_source_url'), $html);
+
+ return $html;
+ }
+
+ protected function update_source_url($matches)
+ {
+ $page = $matches[2];
+ $file = str_replace('/', '_',$page).'.html';
+
+ if(!isset($this->_viewed[$page]))
+ {
+ $this->_viewed[$page]=true;
+ $this->view_source_page($page);
+ }
+ return 'href="'.$file.'"';
+ }
+
+ protected function view_source_page($page)
+ {
+ $_GET['page'] = 'ViewSource';
+ $_GET['path'] = $page;
+ $_GET['lines'] = 'false';
+
+ $html = $this->parseHtmlContent($this->getApplicationContent());
+ $file = str_replace('/', '_',$page).'.html';
+ echo 'writing file '.$file."\n";
+ file_put_contents($this->output_dir.'/'.$file, $html);
+ }
+
+ protected function update_page_url($matches)
+ {
+ $bits = explode('#',str_replace('.','_',$matches[1]));
+ $anchor = isset($bits[1]) ? '#'.$bits[1] : '';
+ return 'href="'.$bits[0].'.html'.$anchor.'"';
+ }
+
+ protected function update_run_url($matches)
+ {
+ return 'href="'.self::DEMO_URL.'?page='.$matches[1].'"';
+ }
+}
+
+class HTMLHelpTOCBuilder
+{
+
+ public function buildToc($file,$output,$classes)
+ {
+ $contents = file_get_contents($file);
+ $content = $this->prepareContent($contents);
+ $ul = $this->parseUl($content);
+ $toc = $this->header();
+ $toc .= $this->to_string($ul);
+ $toc .= $this->footer();
+ $toc = $this->appendApiToc($output,$toc);
+ $toc = $this->appendClassesToc($classes,$toc);
+ file_put_contents($output.'/toc.hhc', $toc);
+ file_put_contents($output.'/prado3_manual.hhp', $this->getHHP());
+ file_put_contents($output.'/manual.html', $this->getIndexPage());
+ $index = $output.'/manual/CHMdefaultConverter/index.hhk';
+ file_put_contents($index, $this->updateIndex($index));
+ }
+
+ protected function updateIndex($file)
+ {
+ $content = file_get_contents($file);
+ return preg_replace('/"Local" value="/', '"Local" value="manual\\CHMdefaultConverter\\', $content);
+ }
+
+ protected function appendClassesToc($classes, $toc)
+ {
+ $version = Prado::getVersion();
+ $ul['classes']['params'][] = array('Name' => "Prado {$version} Class Index");
+ foreach($classes as $class)
+ {
+ $ul['classes']['ul'][0]['params'][] =
+ array('Name'=>$class, 'Local'=>'classdoc/'.$class.'.html');
+ }
+ $ul['wiki']['params'][] = array('Name' => "Prado Wiki", 'Local'=>'wiki\\index.html');
+ $content = $this->to_string($ul);
+ $toc = preg_replace('!(</BODY></HTML>)!', $content.'$1', $toc);
+ return $toc;
+ }
+
+ protected function appendApiToc($output,$toc)
+ {
+ $content = file_get_contents($output.'/manual/CHMdefaultConverter/contents.hhc');
+ $content = preg_replace('/"Local" value="/', '"Local" value="manual\\CHMdefaultConverter\\', $content);
+ $toc = preg_replace('!(API Manual">\s*</OBJECT>)\s*(</UL>\s*</BODY></HTML>)!', '$1'."\n".$content.'$2', $toc);
+ return preg_replace("/\r/","\n",$toc);
+ }
+
+ protected function getIndexPage()
+ {
+ $version = Prado::getVersion();
+ $date = date('d M Y', time());
+ $year = date('Y',time());
+$content = <<<EOD
+<!doctype html public "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Prado Manual</title>
+ <style type="text/css">
+ /*<![CDATA[*/
+ body
+ {
+ font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Helvetica, Arial, sans-serif;
+ font-weight:normal;
+ }
+ h1
+ {
+ color: #600;
+ }
+ /*]]>*/
+ </style>
+</head>
+
+<body style="text-align:center">
+
+<h1>Prado {$version} Manual</h1>
+
+<div>Created On: {$date}</div>
+
+<div style="margin-top:3em;margin-bottom:0.75em"><strong>Written By:</strong> Qiang Xue, Wei Zhuo</div>
+<div style="margin-bottom:3em;"><strong>Edited By:</strong> Wei Zhuo</div>
+
+<div id="footer">
+Copyright © 2005-{$year} <a href="http://www.pradosoft.com">PradoSoft</a>.</div>
+
+</body>
+</html>
+EOD;
+ return $content;
+ }
+
+ protected function getHHP()
+ {
+ $version = Prado::getVersion();
+$content = <<<EOD
+[OPTIONS]
+Binary TOC=Yes
+Compatibility=1.1 or later
+Compiled File=prado3_manual.chm
+Contents File=toc.hhc
+Default Window=main
+Default Topic=manual.html
+Display compile progress=Yes
+Error log file=_errorlog.txt
+Full-text search=Yes
+Language=0x409 English (United States)
+Title=Prado {$version} Manual
+Binary Index=Yes
+Index file=manual\CHMdefaultConverter\index.hhk
+Default Font=
+Auto Index=Yes
+Create CHI file=No
+Full text search stop list file=
+Display compile notes=Yes
+
+[WINDOWS]
+main="Prado {$version} Manual","toc.hhc","manual\CHMdefaultConverter\index.hhk","manual.html","manual.html",,,,,0x63520,250,0x104e,[10,10,900,700],0xb0000,,,,,,0
+
+EOD;
+ return $content;
+ }
+
+ protected function parseUl($content)
+ {
+ $ul = array();
+ $current = null;
+ $ul['index']['params'][] = array('Name'=>'Prado Manual', 'Local'=>'manual.html');
+
+ foreach(explode("\n", $content) as $line)
+ {
+ $line = trim($line);
+ if(strlen($line) > 0)
+ {
+ if(strpos($line,'^')===false)
+ {
+ $current = $line;
+ $ul[$current]['params'][]['Name'] = $current;
+ }
+ else
+ {
+ list($page,$title) = explode('^', $line);
+ $ul[$current]['ul'][0]['params'][] = array('Name'=>$title, 'Local'=>$this->getFileName($page));
+ }
+ }
+ }
+ $version = Prado::getVersion();
+ $ul['api']['params'][] = array('Name' => "Prado {$version} API Manual");
+
+ return $ul;
+ }
+
+ protected function getFileName($page)
+ {
+ return 'quickstart\\'.str_replace('.', '_',$page).'.html';
+ }
+
+ protected function prepareContent($content)
+ {
+ $content = preg_replace('/<\/?div[^>]*>/','', $content);
+ $content = preg_replace('/<\/?ul>|<\/?li>|<\/a>/ms', '', $content);
+ $content = str_replace('<a href="?page=', '', $content);
+ $content = str_replace('">', '^', $content);
+ return $content;
+ }
+
+ public function to_string($ul)
+ {
+ $contents = "<UL>\n";
+ foreach($ul as $li)
+ {
+ if(isset($li['params']))
+ {
+ $contents .= $this->li_to_string($li);
+ }
+ if(isset($li['ul']))
+ {
+ $contents .= $this->to_string($li['ul']);
+ }
+ }
+ $contents .= "</UL>\n";
+ return $contents;
+ }
+
+ protected function li_to_string($li)
+ {
+ $content = '';
+ foreach($li['params'] as $param)
+ {
+ $contents .= "\t<LI>";
+ $contents .= "<OBJECT type=\"text/sitemap\">\n";
+ foreach($param as $name => $value)
+ $contents .= "\t\t\t<param name=\"$name\" value=\"$value\">\n";
+ $contents .= "\t\t</OBJECT>\n";
+ }
+ return $contents;
+ }
+
+ public function header()
+ {
+ $content = <<<EOD
+<HTML>
+<HEAD>
+</HEAD>
+<BODY>
+ <OBJECT type="text/site properties">
+ <param name="Window Styles" value="0x800025">
+ <param name="FrameName" value="right">
+ <param name="ImageType" value="Folder">
+ <param name="comment" value="title:Online Help">
+ <param name="comment" value="base:index.htm">
+ </OBJECT>
+
+EOD;
+ return $content;
+ }
+
+ public function footer()
+ {
+ return '</BODY></HTML>';
+ }
+}
+
+class ClassDocBuilder
+{
+ private $output;
+ private $base;
+
+ function __construct($base, $output)
+ {
+ $this->base = $base;
+ $this->output = $output.'/classdoc';
+ if(!is_dir($this->output))
+ {
+ mkdir($this->output);
+ mkdir($this->output.'/assets/');
+ }
+ Prado::setPathOfAlias('Output', $this->output);
+ }
+
+ protected function initApp()
+ {
+ $this->app = new TApplication($this->base);
+ $response = new THttpResponse();
+ $response->setBufferOutput(false);
+ $this->app->setResponse($response);
+ $assets = new TAssetManager();
+ $assets->setBasePath('Output.assets.*');
+ $this->app->setAssetManager($assets);
+ }
+
+ public function buildDoc($class)
+ {
+ $this->parsePage($class);
+ }
+
+ public function parseBasePage()
+ {
+ $_GET['page'] = 'Classes';
+
+ $html = $this->parseHtmlContent($this->getApplicationContent());
+ $file = 'Classes.html';
+ echo 'writing file '.$file."\n";
+ file_put_contents($this->output.'/'.$file, $html);
+ }
+
+ public function parsePage($class)
+ {
+ $_GET['page'] = 'ClassDoc';
+ $_GET['class'] = $class;
+
+ $html = $this->parseHtmlContent($this->getApplicationContent());
+ $file = $class.'.html';
+ echo 'writing file '.$file."\n";
+ file_put_contents($this->output.'/'.$file, $html);
+ }
+
+ protected function getApplicationContent()
+ {
+ ob_start();
+ $this->initApp();
+ $this->app->run();
+ $content = ob_get_contents();
+ ob_end_clean();
+ $this->app->completeRequest();
+ $this->app=null;
+ return $content;
+ }
+
+ protected function parseHtmlContent($content)
+ {
+ $html = preg_replace('/<input.*name="PRADO_PAGESTATE" [^>]+\/>/m', '', $content);
+ $html = preg_replace('!href="/(\w+)/style.css"!', 'href="assets/$1/style.css"', $html);
+ return $html;
+ }
+}
+
+
+?>
\ No newline at end of file |