summaryrefslogtreecommitdiff
path: root/buildscripts/chmbuilder
diff options
context:
space:
mode:
authorxue <>2006-10-18 01:38:47 +0000
committerxue <>2006-10-18 01:38:47 +0000
commitaf832a5a9018c7dcc2f24111d82049902269fc53 (patch)
treeb66193de9e7b75c916a92d6c951a22a90d85fed6 /buildscripts/chmbuilder
parent459bb9c618a8f2897da22129167e634589435e38 (diff)
merge from 3.0 branch till 1463.
Diffstat (limited to 'buildscripts/chmbuilder')
-rw-r--r--buildscripts/chmbuilder/ChmQuickstartBuilder.php435
-rw-r--r--buildscripts/chmbuilder/build.php80
-rw-r--r--buildscripts/chmbuilder/build_child.php7
-rw-r--r--buildscripts/chmbuilder/chm_style.css629
-rw-r--r--buildscripts/chmbuilder/classes/application.xml12
-rw-r--r--buildscripts/chmbuilder/classes/pages/ClassDoc.page30
-rw-r--r--buildscripts/chmbuilder/classes/pages/ClassDoc.php228
-rw-r--r--buildscripts/chmbuilder/classes/pages/Classes.page9
-rw-r--r--buildscripts/chmbuilder/classes/pages/Classes.php19
-rw-r--r--buildscripts/chmbuilder/classes/pages/MainLayout.php8
-rw-r--r--buildscripts/chmbuilder/classes/pages/MainLayout.tpl33
-rw-r--r--buildscripts/chmbuilder/classes/pages/style.css647
12 files changed, 2137 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 &copy; 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 &copy; 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
diff --git a/buildscripts/chmbuilder/build.php b/buildscripts/chmbuilder/build.php
new file mode 100644
index 00000000..6c352964
--- /dev/null
+++ b/buildscripts/chmbuilder/build.php
@@ -0,0 +1,80 @@
+<?php
+
+$ROOT = dirname(__FILE__);
+
+//page root location
+$base = realpath($ROOT.'/../../demos/quickstart/protected/');
+$output_dir = realpath($ROOT.'/../../build/docs');
+$classData = realpath($ROOT.'/../classtree/classes.data');
+$classDocBase = realpath($ROOT.'/classes/');
+
+//-------------- END CONFIG ------------------
+
+if(!isset($isChild))
+ $isChild = false;
+
+$toc_file = $base.'/controls/TopicList.tpl';
+
+$pages = include($ROOT.'/../texbuilder/pages.php');
+
+include($ROOT.'/ChmQuickstartBuilder.php');
+include($ROOT.'/../../framework/PradoBase.php');
+class Prado extends PradoBase
+{
+ protected static $app;
+
+ public static function setApplication($application)
+ {
+ self::$app=$application;
+ }
+
+ public static function getApplication()
+ {
+ return self::$app;
+ }
+
+ public static function setPathOfAlias($alias,$path)
+ {
+ $aliases = self::getPathAliases();
+ if(!isset($aliases[$alias]))
+ parent::setPathOfAlias($alias,$path);
+ }
+}
+
+include($ROOT.'/../../framework/prado.php');
+
+if($isChild)
+{
+ $classBuilder = new ClassDocBuilder($classDocBase,$output_dir);
+ $classBuilder->buildDoc($argv[1]);
+}
+else
+{
+ $pages['Control Reference : Standard Controls'][] = 'Controls/Standard.page';
+
+
+ $quickstart= new ChmQuickstartBuilder($base,$output_dir);
+ $quickstart->buildDoc($pages);
+
+ //move class data to protected data directory for prado app.
+ $classFile = $ROOT.'/classes/Data/classes.data';
+ if(is_file($classData) && !is_file($classFile))
+ copy($classData, $classFile);
+ $classes = unserialize(file_get_contents($classFile));
+
+ $classBuilder = new ClassDocBuilder($classDocBase,$output_dir);
+
+ //use child process to build doc, otherwise it consumes too much memory
+ $child_builder = realpath($ROOT.'/build_child.php');
+ foreach($classes as $class =>$data)
+ {
+ passthru('php '.$child_builder.' '.$class);
+ }
+
+ $classBuilder->parseBasePage();
+
+ $toc = new HTMLHelpTOCBuilder();
+ $toc->buildToc($toc_file,$output_dir,array_keys($classes));
+}
+
+?> \ No newline at end of file
diff --git a/buildscripts/chmbuilder/build_child.php b/buildscripts/chmbuilder/build_child.php
new file mode 100644
index 00000000..91662373
--- /dev/null
+++ b/buildscripts/chmbuilder/build_child.php
@@ -0,0 +1,7 @@
+<?php
+
+$isChild = true;
+
+include(dirname(__FILE__).'/build.php');
+
+?> \ No newline at end of file
diff --git a/buildscripts/chmbuilder/chm_style.css b/buildscripts/chmbuilder/chm_style.css
new file mode 100644
index 00000000..344d3176
--- /dev/null
+++ b/buildscripts/chmbuilder/chm_style.css
@@ -0,0 +1,629 @@
+body {
+ font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Helvetica, Arial, sans-serif;
+ font-weight:normal;
+ font-size:10pt;
+ color:black;
+}
+
+h1, h2, h3, h4
+{
+ color: #333;
+}
+
+h1, h2
+{
+ padding-bottom: 3px;
+ border-bottom: 1px solid #ccc;
+}
+
+h1 {
+ font-size:13pt;
+}
+
+h2 {
+ font-size:12pt;
+}
+
+h3 {
+ font-size:10pt;
+ font-weight:bold;
+}
+
+a
+{
+ color: #cc3333;
+}
+
+
+#content {
+ background:#fff;
+ padding: 1em 1em 1em 1em;
+ line-height: 135%;
+}
+
+#footer {
+ clear:both;
+ color: gray;
+ font-size:8pt;
+ text-align:center;
+ margin-top:25px;
+ padding:10px;
+}
+
+.topic {
+ font-size: 9pt;
+ padding: 0px 0px 0px 0px;
+}
+
+.topic div {
+ background-repeat: no-repeat;
+ background-position: left center;
+ margin: 0px;
+ font-size: 8pt;
+ font-weight:bold;
+ color:#2A480A;
+ padding: 5px;
+ padding-left: 15px;
+ border-top: 1px solid #fff;
+ border-bottom: 1px solid #E2E2E2;
+}
+
+.topic ul
+{
+ margin: 0px;
+ padding: 0px;
+}
+
+.topic ul li
+{
+ list-style: none;
+ margin: 0px;
+ padding: 5px;
+ padding-left: 15px;
+ border-bottom: 1px dotted #D8D8D8;
+}
+
+.topic a {
+ color:#4F811A;
+ font-size: 8pt;
+ text-decoration: none;
+}
+
+.topic a:hover {
+ color:#2A480A;
+}
+
+.source {
+ padding: 0.5em;
+ border-style:solid;
+ border-width:1px;
+ border-color:#eeeeee;
+ background-color:#ffffee;
+ font-family: "Courier New", Courier, mono;
+ margin: 0.2em;
+}
+
+.source pre {
+ font-family: "Courier New", Courier, mono;
+ margin: 0;
+}
+
+.runbar
+{
+ margin: 1em 0 1em 0;
+}
+
+.runbar a:link, .runbar a:visited {
+ background-color:#E2E2E2;
+ font-size: 12px;
+ font-weight: normal;
+ padding: 3px;
+ padding-left: 6px;
+ padding-right: 6px;
+ border-top: 1px solid white;
+ border-left: 1px solid white;
+ border-bottom: 1px solid #aaaaaa;
+ border-right: 1px solid #aaaaaa;
+ text-decoration: none;
+}
+
+.runbar a:link.active, .runbar a:visited.active, .runbar a:hover {
+ background-color:#E2E2E2;
+ font-size: 12px;
+ font-weight: normal;
+ padding: 3px;
+ padding-left: 6px;
+ padding-right: 6px;
+ border-top: 1px solid #aaaaaa;
+ border-left: 1px solid #aaaaaa;
+ border-bottom: 1px solid white;
+ border-right: 1px solid white;
+}
+
+#sourceList {
+ background-color:#E2E2E2;
+ margin:10px 10px 0px 10px;
+ padding:10px;
+ border:1px solid silver;
+}
+
+#sourceView {
+ font-family: "Courier New", Courier, mono;
+ background-color:#ffffee;
+ margin:5px 10px 10px 10px;
+ border:1px solid silver;
+}
+
+code {
+ font-family: "Courier New", Courier, mono;
+}
+
+tt {
+ font-family: "Courier New", Courier, mono;
+ border-bottom: 1px dotted silver;
+}
+
+.sampleheader {
+ font-size:30px;
+ font-weight:bold;
+ text-align: right;
+ color: #666;
+ height:100px;
+}
+
+.sampleheader div.title
+{
+ display: none;
+}
+
+.sampleheader div.image
+{
+ display: block;
+ float: right;
+ width: 900px;
+ height: 100px;
+}
+
+.samplemenu
+{
+ padding:10px;
+ padding-right:10px;
+ background:#EDEDED;
+ border-bottom: 1px solid #A6A6A6;
+ border-top: 1px solid #DCDCDC;
+ text-align:right;
+ font-size: 9pt;
+}
+
+.samplemenu a {
+ color:#737373;
+ text-decoration:none;
+}
+
+.samplemenu a:hover {
+ color: #FF0000;
+}
+
+.sampleheader a {
+ font-size:30px;
+ font-weight:bold;
+ color: #666;
+ text-decoration: none;
+}
+
+.samplepanel {
+ margin: 0px;
+ border: 1px solid silver;
+ padding: 10px;
+ margin-bottom:10px;
+}
+
+.sampletitle {
+ width: 100%;
+ border-bottom:1px solid silver;
+ font-weight:bold;
+ margin-bottom:5px;
+}
+
+.sampletable {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+td.samplenote {
+ width: 300px;
+ text-align: right;
+ background: #BFE4FF;
+ border: 1px solid silver;
+ padding: 5px;
+ vertical-align: top;
+}
+
+td.sampleaction {
+ background: #ffffee;
+ border: 1px solid silver;
+ padding: 5px;
+ vertical-align: top;
+}
+
+
+dl
+{
+ margin: 0 2em;
+}
+
+dt
+{
+ font-weight: bold;
+ margin-bottom: 0.15em;
+}
+
+dd
+{
+ margin-left: 2em;
+ margin-bottom: 0.75em;
+}
+
+.quicksearch .search .searchBox
+{
+ width: 25em;
+}
+
+.quicksearch .search
+{
+ text-align: center;
+ padding: 2em;
+}
+
+.searchItem
+{
+ margin-top: 20px;
+ margin-left: 20px;
+ margin-right: 20px;
+}
+
+.searchItemBody
+{
+ margin-top: 0em;
+ font-size: 0.9em;
+}
+
+.searchItemLink
+{
+ font-size: 1.05em;
+}
+
+.searchterm
+{
+ font-weight: bold;
+}
+
+.searchAPIItem
+{
+ margin-top: 5px;
+ margin-left: 20px;
+ margin-right: 20px;
+}
+
+.searchHeader, .emptyResult
+{
+ margin-top: 30px;
+}
+
+.empty_search_result
+{
+ text-align: center;
+ margin: 30px;
+}
+
+/** Comments **/
+#comments
+{
+ margin: 10px;
+}
+
+.comment_header
+{
+ border-bottom: 1px solid silver;
+}
+
+.comment_item
+{
+ padding: 10px;
+ border: 1px solid silver;
+ margin: 0 10px 10px 10px;
+}
+
+.comment_item .number
+{
+ float: right;
+ font-size: 1.5em;
+ font-weight: bold;
+ color: silver;
+}
+
+.comment_item1
+{
+ background-color: #EDEDED;
+}
+
+.comment_item .email
+{
+ font-weight: bold;
+ display: block;
+}
+
+.comment_item .date
+{
+ font-size: 0.85em;
+ display: block;
+ border-bottom: 1px dotted silver;
+}
+
+.comment_item .comment
+{
+ padding: 10px;
+}
+
+.add_comments
+{
+ margin-top: 2em;
+}
+
+.add_comments .comment_email
+{
+ margin-bottom: 5px;
+}
+
+.add_comments .comment_email input
+{
+ width: 25em;
+}
+
+.add_comments .comment_content textarea
+{
+ width: 75%;
+ height: 200px;
+ padding: 5px;
+}
+
+.add_comments .comment_email label, .add_comments .comment_content label
+{
+ width: 8em;
+ float: left;
+ text-align: right;
+ padding-right: 5px;
+}
+
+.add_comments .add_comment
+{
+ padding-left: 8.2em;
+ padding-top: 0.5em;
+}
+
+.add_comments .please_add
+{
+ padding-left: 8.2em;
+}
+
+.add_comments h3, .comment_added h3
+{
+ border-bottom: 1px solid silver;
+}
+
+.comment_preview
+{
+ margin: 10px;
+ padding: 10px;
+ border: 1px solid silver;
+}
+
+.comment_preview .comment
+{
+ padding: 10px;
+}
+
+.comment_added
+{
+ margin-top: 3em;
+ border-top: 1px dotted silver;
+ padding: 10px;
+}
+
+.comment_added .comment
+{
+ padding: 10px;
+ margin-top: 10px;
+}
+
+.comment_added .thank
+{
+ background-color: #ffffcc;
+ padding: 20px;
+}
+
+pre code
+{
+ display: block;
+ padding: 0.5em;
+ border-style:solid;
+ border-width:1px;
+ border-color:#eeeeee;
+ background-color:#ffffee;
+ font-family: "Courier New", Courier, mono;
+ margin: 0.2em;
+}
+
+div.tip, div.info, div.note
+{
+ border:1px solid #0cf;
+ padding:1em;
+ margin: 1em 2em;
+ background-color: #eff;
+}
+
+div.info
+{
+ border-color: #32CD32;
+ background-color: #EBFFCE;
+}
+
+div.note
+{
+ border-color: Orange;
+ background-color: #FFF5E1;
+}
+
+div b.tip
+{
+ font-size: 1em;
+ padding-right: 0.5em;
+}
+
+img.figure
+{
+ display: block;
+ margin: 1em auto;
+ background-color: White;
+ padding: 15px;
+ border: 1px solid #eee;
+}
+
+div.caption
+{
+ text-align: center;
+}
+
+table.tabular, table.tabular td, table.tabular th
+{
+ border: 1px solid #ccc;
+ border-collapse: collapse;
+ padding: 0.3em;
+}
+
+table.tabular
+{
+ margin: 1em auto;
+ width: 80%;
+}
+
+table.tabular td
+{
+ padding: 0.75em;
+}
+
+
+/** highlight */
+.php .de1, .php .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
+.php .imp {font-weight: bold; color: red;}
+.php li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
+.php .kw1 {color: #b1b100;}
+.php .kw2 {color: #000000; font-weight: bold;}
+.php .kw3 {color: #000066;}
+.php .co1 {color: #808080; font-style: italic;}
+.php .co2 {color: #808080; font-style: italic;}
+.php .coMULTI {color: #808080; font-style: italic;}
+.php .es0 {color: #000099; font-weight: bold;}
+.php .br0 {color: #66cc66;}
+.php .st0 {color: #ff0000;}
+.php .nu0 {color: #cc66cc;}
+.php .me1 {color: #006600;}
+.php .me2 {color: #006600;}
+.php .re0 {color: #0000ff;}
+
+.xml .de1, .xml .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
+.xml .imp {font-weight: bold; color: red;}
+.xml li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
+.xml .coMULTI {color: #808080; font-style: italic;}
+.xml .es0 {color: #000099; font-weight: bold;}
+.xml .br0 {color: #66cc66;}
+.xml .st0 {color: #ff0000;}
+.xml .nu0 {color: #cc66cc;}
+.xml .sc0 {color: #00bbdd;}
+.xml .sc1 {color: #ddbb00;}
+.xml .sc2 {color: #339933;}
+.xml .sc3 {color: #009900;}
+.xml .re0 {color: #000066;}
+.xml .re1 {font-weight: bold; color: black;}
+.xml .re2 {font-weight: bold; color: black;}
+
+
+.prado .de1, .prado .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
+.prado .imp {font-weight: bold; color: red;}
+.prado li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
+.prado .coMULTI {color: #808080; font-style: italic;}
+.prado .es0 {color: #000099; font-weight: bold;}
+.prado .br0 {color: #66cc66;}
+.prado .st0 {color: #ff0000;}
+.prado .nu0 {color: #cc66cc;}
+.prado .sc0 {color: #00bbdd;}
+.prado .sc1 {color: #ddbb00;}
+.prado .sc2 {color: #339933;}
+.prado .sc3 {color: #009900;}
+.prado .re0 {color: #006; font-weight: bold; } /* prado com:ComponentName tags */
+.prado .re0 a.api { color: #006; text-decoration: none; border-bottom: 1px dotted #33f; }
+.prado .re1 {color: #006; font-weight: bold; } /* prado </com:TComponentName> tags */
+.prado .re2 {color: #c66; font-weight: bold; } /* prado </com:TComponentName> tags */
+
+
+.html .de1, .html .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
+.html .imp {font-weight: bold; color: red;}
+.html li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
+.html .kw1 {color: #b1b100;}
+.html .kw2 {color: #000000; font-weight: bold;}
+.html .kw3 {color: #000066;}
+.html .coMULTI {color: #808080; font-style: italic;}
+.html .es0 {color: #000099; font-weight: bold;}
+.html .br0 {color: #66cc66;}
+.html .st0 {color: #ff0000;}
+.html .nu0 {color: #cc66cc;}
+.html .sc0 {color: #00bbdd;}
+.html .sc1 {color: #ddbb00;}
+.html .sc2 {color: #009900;}
+
+.css .de1, .css .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
+.css .imp {font-weight: bold; color: red;}
+.css li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
+.css .kw1 {color: #000000; font-weight: bold;}
+.css .kw2 {color: #993333;}
+.css .co1 {color: #a1a100;}
+.css .coMULTI {color: #808080; font-style: italic;}
+.css .es0 {color: #000099; font-weight: bold;}
+.css .br0 {color: #66cc66;}
+.css .st0 {color: #ff0000;}
+.css .nu0 {color: #cc66cc;}
+.css .re0 {color: #cc00cc;}
+.css .re1 {color: #6666ff;}
+.css .re2 {color: #3333ff;}
+
+.javascript .de1, .javascript .de2 {font-family: 'Courier New', Courier, monospace; font-weight: normal;}
+.javascript .imp {font-weight: bold; color: red;}
+.javascript li {font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;}
+.javascript .kw1 {color: #000066; font-weight: bold;}
+.javascript .kw2 {color: #003366; font-weight: bold;}
+.javascript .kw3 {color: #000066;}
+.javascript .co1 {color: #009900; font-style: italic;}
+.javascript .coMULTI {color: #009900; font-style: italic;}
+.javascript .es0 {color: #000099; font-weight: bold;}
+.javascript .br0 {color: #66cc66;}
+.javascript .st0 {color: #3366CC;}
+.javascript .nu0 {color: #CC0000;}
+.javascript .me1 {color: #006600;}
+.javascript .re0 {color: #0066FF;}
+
+.source .copycode
+{
+ text-align: right;
+ float: right;
+}
+
+.source .copycode a
+{
+ cursor: pointer;
+ color: blue;
+}
+
+.source .copycode_hover a
+{
+ color: red;
+}
diff --git a/buildscripts/chmbuilder/classes/application.xml b/buildscripts/chmbuilder/classes/application.xml
new file mode 100644
index 00000000..13533b0c
--- /dev/null
+++ b/buildscripts/chmbuilder/classes/application.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<application mode="Normal">
+ <paths>
+ <using namespace="Application.pages.*" />
+ </paths>
+ <services>
+ <service id="page" class="TPageService" BasePath="Application.pages">
+ <pages MasterClass="MainLayout" />
+ </service>
+ </services>
+</application>
diff --git a/buildscripts/chmbuilder/classes/pages/ClassDoc.page b/buildscripts/chmbuilder/classes/pages/ClassDoc.page
new file mode 100644
index 00000000..ef941c5b
--- /dev/null
+++ b/buildscripts/chmbuilder/classes/pages/ClassDoc.page
@@ -0,0 +1,30 @@
+<%@ Title="PRADO - Documentation" %>
+
+<com:TContent ID="main">
+
+<div class="doc-namespace">
+Namespace: <a href="../manual/CHMdefaultConverter/li_<%= $this->Class['Package'] %>.html"><%= $this->Class['Package'] %></a>
+</div>
+<%= $this->Ancestors %>
+
+<div class="doc-title">
+<a href="../manual/CHMdefaultConverter/<%= $this->Class['Package'].'/'.$this->Class['Name'] %>.html"><%= $this->Class['Name'] %></a>
+</div>
+
+<div class="doc-menu">
+<a href="#properties">Properties</a> | <a href="#events">Events</a> | <a href="#methods">Methods</a> | <a href="#child">Derived classes</a> | <a href="Classes.html">All classes</a>
+</div>
+
+<div class="doc-subtitle"><a name="properties"></a>Properties</div>
+<%= $this->Properties %>
+
+<div class="doc-subtitle"><a name="events"></a>Events</div>
+<%= $this->Events %>
+
+<div class="doc-subtitle"><a name="methods"></a>Methods</div>
+<%= $this->Methods %>
+
+<div class="doc-subtitle"><a name="child"></a>Derived classes</div>
+<%= $this->Derived %>
+
+</com:TContent>
diff --git a/buildscripts/chmbuilder/classes/pages/ClassDoc.php b/buildscripts/chmbuilder/classes/pages/ClassDoc.php
new file mode 100644
index 00000000..733cfc5b
--- /dev/null
+++ b/buildscripts/chmbuilder/classes/pages/ClassDoc.php
@@ -0,0 +1,228 @@
+<?php
+
+class ClassDoc extends TPage
+{
+ public $Class;
+ private $_classes;
+
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $dataFile=Prado::getPathOfNamespace('Application.Data.classes','.data');
+ $this->_classes=unserialize(file_get_contents($dataFile));
+
+ if(($className=$this->Request['class'])!==null && isset($this->_classes[$className]))
+ {
+ $this->Class=$this->_classes[$className];
+ $this->Class['Name']=$className;
+ $this->Title='PRADO - Documentation of '.$className;
+ }
+ else
+ $this->Response->redirect('/docs/classdoc/');
+ }
+
+ public function getAncestors()
+ {
+ $ancestors=array();
+ $thisClass=$this->Class;
+ while(true)
+ {
+ $parentClass=$thisClass['ParentClass'];
+ if(isset($this->_classes[$parentClass]))
+ {
+ $ancestors[]=$parentClass;
+ $thisClass=$this->_classes[$parentClass];
+ }
+ else
+ break;
+ }
+ $ancestors=array_reverse($ancestors);
+ $s='';
+ foreach($ancestors as $ancestor)
+ $s.="<a href=\"$ancestor.html\">$ancestor</a> &raquo;\n";
+ if($s!=='')
+ $s="<div class=\"doc-ancestors\">\nInheritance: $s</div>\n";
+ return $s;
+ }
+
+ public function getProperties()
+ {
+ $class=$this->Class;
+ $className=$this->Class['Name'];
+ $s='';
+ foreach($class['Properties'] as $name=>$property)
+ {
+ $inherited=strcasecmp($property['class'],$className)!==0;
+ $rowclass=$inherited?'doc-inherited':'doc-native';
+ $s.="<tr class=\"$rowclass\">\n";
+ $access='';
+ if($property['readonly'])
+ $access.='R';
+ if($property['protected'])
+ $access.='P';
+ if($access==='')
+ $access='&nbsp;';
+ $s.="<td width=\"1\" nowrap=\"nowrap\" align=\"center\">$access</td>\n";
+
+ if($inherited)
+ {
+ $parentClass=$property['class'];
+ if(isset($this->_classes[$parentClass]))
+ {
+ $url="../manual/CHMdefaultConverter/{$this->_classes[$parentClass]['Package']}/{$parentClass}.html#methodget{$name}";
+ $s.="<td><a href=\"$url\">$name</a></td>\n";
+ }
+ else
+ $s.="<td>$name</td>\n";
+ }
+ else
+ {
+ $url="../manual/CHMdefaultConverter/{$class['Package']}/{$className}.html#methodget{$name}";
+ $s.="<td><a href=\"$url\">$name</a></td>\n";
+ }
+
+ $type=$property['type'];
+ if(isset($this->_classes[$type]))
+ {
+ $url="$type.html";
+ $s.="<td><a href=\"$url\">$type</a></td>\n";
+ }
+ else
+ $s.="<td>$type</td>\n";
+
+ $comments=rtrim($property['comments'],'.').'.';
+ if($inherited)
+ {
+ $parentClass=$property['class'];
+ if(isset($this->_classes[$parentClass]))
+ {
+ $url="$parentClass.html";
+ $comments.=" (inherited from <a href=\"$url\">$parentClass</a>)";
+ }
+ else
+ $comments.=" (inherited from {$parentClass})";
+ }
+ $s.="<td>$comments</td>\n";
+ $s.="</tr>\n";
+ }
+
+ $header="<tr>\n<th>&nbsp;</th><th>Name</th><th>Type</th><th>Description</th>\n</tr>\n";
+ return $s===''?'':"<div class=\"doc-properties\">\n<table>\n$header$s</table>\n</div>\n";
+ }
+
+ public function getEvents()
+ {
+ $class=$this->Class;
+ $className=$this->Class['Name'];
+ $s='';
+ foreach($class['Events'] as $name=>$event)
+ {
+ $inherited=strcasecmp($event['class'],$className)!==0;
+ $rowclass=$inherited?'doc-inherited':'doc-native';
+ $s.="<tr class=\"$rowclass\">\n";
+
+ $methodName=$name;
+ $methodName[0]='o';
+ if($inherited)
+ {
+ $parentClass=$event['class'];
+ if(isset($this->_classes[$parentClass]))
+ {
+ $url="../manual/CHMdefaultConverter/{$this->_classes[$parentClass]['Package']}/{$parentClass}.html#method{$methodName}";
+ $s.="<td><a href=\"$url\">$name</a></td>\n";
+ }
+ else
+ $s.="<td>$name</td>\n";
+ }
+ else
+ {
+ $url="../manual/CHMdefaultConverter/{$class['Package']}/{$className}.html#method{$methodName}";
+ $s.="<td><a href=\"$url\">$name</a></td>\n";
+ }
+
+ $comments=rtrim($event['comments'],'.').'.';
+ if($inherited)
+ {
+ $parentClass=$event['class'];
+ if(isset($this->_classes[$parentClass]))
+ {
+ $url="$parentClass.html";
+ $comments.=" (inherited from <a href=\"$url\">$parentClass</a>)";
+ }
+ else
+ $comments.=" (inherited from {$parentClass})";
+ }
+ $s.="<td>$comments</td>\n";
+ $s.="</tr>\n";
+ }
+ $header="<tr>\n<th>Name</th><th>Description</th>\n</tr>\n";
+ return $s===''?'':"<div class=\"doc-events\">\n<table>\n$header$s</table>\n</div>\n";
+ }
+
+ public function getMethods()
+ {
+ $class=$this->Class;
+ $className=$this->Class['Name'];
+ $s='';
+ foreach($class['Methods'] as $name=>$method)
+ {
+ $inherited=strcasecmp($method['class'],$className)!==0;
+ $rowclass=$inherited?'doc-inherited':'doc-native';
+ $s.="<tr class=\"$rowclass\">\n";
+ $access='';
+ if($method['static'])
+ $access.='S';
+ if($method['protected'])
+ $access.='P';
+ if($access==='')
+ $access='&nbsp;';
+ $s.="<td nowrap=\"nowrap\" width=\"1\" align=\"center\">$access</td>\n";
+
+ if($inherited)
+ {
+ $parentClass=$method['class'];
+ if(isset($this->_classes[$parentClass]))
+ {
+ $url="../manual/CHMdefaultConverter/{$this->_classes[$parentClass]['Package']}/{$parentClass}.html#method{$name}";
+ $s.="<td><a href=\"$url\">$name</a></td>\n";
+ }
+ else
+ $s.="<td>$name</td>\n";
+ }
+ else
+ {
+ $url="../manual/CHMdefaultConverter/{$class['Package']}/{$className}.html#method{$name}";
+ $s.="<td><a href=\"$url\">$name</a></td>\n";
+ }
+
+ $comments=rtrim($method['comments'],'.').'.';
+ if($inherited)
+ {
+ $parentClass=$method['class'];
+ if(isset($this->_classes[$parentClass]))
+ {
+ $url="$parentClass.html";
+ $comments.=" (inherited from <a href=\"$url\">$parentClass</a>)";
+ }
+ else
+ $comments.=" (inherited from {$parentClass})";
+ }
+ $s.="<td>$comments</td>\n";
+ $s.="</tr>\n";
+ }
+ $header="<tr>\n<th>&nbsp;</th><th>Name</th><th>Description</th>\n</tr>\n";
+ return $s===''?'':"<div class=\"doc-methods\">\n<table>\n$header$s</table>\n</div>\n";
+ }
+
+ public function getDerived()
+ {
+ $class=$this->Class;
+ $s='';
+ foreach($class['ChildClasses'] as $childName)
+ $s.="<li><a href=\"$childName.html\">$childName</a></li>\n";
+ return $s===''?'':"<div class=\"doc-derived\">\n<ul>\n$s</ul>\n</div>\n";
+ }
+
+}
+
+?>
diff --git a/buildscripts/chmbuilder/classes/pages/Classes.page b/buildscripts/chmbuilder/classes/pages/Classes.page
new file mode 100644
index 00000000..dd8f3440
--- /dev/null
+++ b/buildscripts/chmbuilder/classes/pages/Classes.page
@@ -0,0 +1,9 @@
+<%@ Title="PRADO - Class Documentation" %>
+
+<com:TContent ID="main">
+
+<h2>PRADO Framework Classes</h2>
+
+<com:TBulletedList ID="ClassList" DisplayMode="HyperLink" />
+
+</com:TContent>
diff --git a/buildscripts/chmbuilder/classes/pages/Classes.php b/buildscripts/chmbuilder/classes/pages/Classes.php
new file mode 100644
index 00000000..ee2672b4
--- /dev/null
+++ b/buildscripts/chmbuilder/classes/pages/Classes.php
@@ -0,0 +1,19 @@
+<?php
+
+class Classes extends TPage
+{
+ public function onLoad($param)
+ {
+ parent::onLoad($param);
+ $dataFile=Prado::getPathOfNamespace('Application.Data.classes','.data');
+ $classes=unserialize(file_get_contents($dataFile));
+ $data=array();
+ $baseUrl=$this->Request->ApplicationUrl;
+ foreach(array_keys($classes) as $className)
+ $data["$className.html"]=$className;
+ $this->ClassList->DataSource=$data;
+ $this->ClassList->dataBind();
+ }
+}
+
+?>
diff --git a/buildscripts/chmbuilder/classes/pages/MainLayout.php b/buildscripts/chmbuilder/classes/pages/MainLayout.php
new file mode 100644
index 00000000..e536e71d
--- /dev/null
+++ b/buildscripts/chmbuilder/classes/pages/MainLayout.php
@@ -0,0 +1,8 @@
+<?php
+
+class MainLayout extends TTemplateControl
+{
+
+}
+
+?> \ No newline at end of file
diff --git a/buildscripts/chmbuilder/classes/pages/MainLayout.tpl b/buildscripts/chmbuilder/classes/pages/MainLayout.tpl
new file mode 100644
index 00000000..47fcfc85
--- /dev/null
+++ b/buildscripts/chmbuilder/classes/pages/MainLayout.tpl
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or
+g/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
+
+<com:THead Title="PRADO PHP Framework">
+<meta name="Keywords" content="PHP framework" />
+<meta name="Description" content="PRADO is a component-based and event-driven framework for Web application development in PHP 5." />
+<meta name="Author" content="Qiang Xue" />
+<meta name="Subject" content="PHP framework, Web programming" />
+<com:TStyleSheet StyleSheetUrl=<%~ style.css %> />
+</com:THead>
+
+<body>
+
+<com:TForm>
+<div id="page">
+
+<div id="main">
+<com:TContentPlaceHolder ID="main" />
+<div style="clear: both;"></div>
+</div>
+
+</com:TForm>
+
+<div id="footer">
+ Copyright &copy; 2006 by the PRADO Group.<br/>
+</div>
+
+</div>
+
+</body>
+</html>
diff --git a/buildscripts/chmbuilder/classes/pages/style.css b/buildscripts/chmbuilder/classes/pages/style.css
new file mode 100644
index 00000000..64f6a892
--- /dev/null
+++ b/buildscripts/chmbuilder/classes/pages/style.css
@@ -0,0 +1,647 @@
+/**
+ * PradoSoft profile by Carl G. Mathisen and Stefan A. Petrov
+ * http://decart.no
+ */
+
+body
+{
+ text-align: center;
+}
+
+body, div, span, p, input
+{
+ font-family: Verdana, sans-serif, Arial;
+ font-size: 10pt;
+ color: #333333;
+}
+
+h1, h2, h3, h4
+{
+ font-family: Verdana, Helvetica, Arial, Lucida Grande, Trebuchet MS;
+ padding: 0px;
+ margin: 0px;
+ margin-bottom: 10px;
+ color: #821B18;
+ font-weight: normal;
+}
+
+h2
+{
+ font-size: 18px;
+}
+
+h3
+{
+ font-size: 16px;
+}
+
+div
+{
+ text-align: left;
+}
+
+.instructions
+{
+ background-color: #EEEEEE;
+}
+
+img
+{
+ border: none;
+}
+
+a
+{
+ color: #CD2C27;
+ text-decoration: none;
+}
+
+a:hover
+{
+ color: #821B18;
+ text-decoration: underline;
+}
+
+#page
+{
+ margin: 0 auto;
+ padding: 0;
+}
+
+#header
+{
+ position: relative;
+ height: 98px;
+}
+
+#logo
+{
+ height: 99px;
+}
+
+#mainmenu
+{
+ position: absolute;
+ top: 69px;
+}
+
+#mainmenu ul
+{
+ margin-left: 0;
+ padding-left: 0;
+ display: inline;
+}
+
+#mainmenu ul li
+{
+ margin-left: 0px;
+ list-style: none;
+ display: inline;
+}
+
+#mainmenu ul li a
+{
+ display: block;
+ float: left;
+ font-size: 14px;
+ font-weight: bold;
+ padding-left: 7px;
+ padding-right: 7px;
+ padding-top: 5px;
+ color: #FFFFCC;
+ text-decoration: none;
+ height: 29px;
+}
+
+#mainmenu ul li a:hover
+{
+ color: #fff;
+}
+
+#mainmenu ul li a.active
+{
+ color: #91A412;
+}
+
+/* main page */
+
+div.intro
+{
+}
+
+div.statements
+{
+}
+
+div.statements div
+{
+ position: absolute;
+ width: 250px;
+ top: 20px;
+}
+
+div.statements div p
+{
+ font-size: 13px;
+ color: #818181;
+}
+
+div.statements div.whatis
+{
+ left: 20px;
+}
+
+div.statements div.whatreq
+{
+ left: 290px;
+}
+
+div.statements div.cani
+{
+ left: 600px;
+ width: 210px;
+}
+
+/* navbar */
+#navbar
+{
+ border-bottom: 2px solid #E9EEEF;
+ height: 30px;
+ margin-bottom: 20px;
+}
+
+#navbar ul
+{
+ margin-left: 0;
+ padding-left: 0;
+ display: inline;
+}
+
+#navbar ul li
+{
+ margin-left: 0px;
+ list-style: none;
+ display: inline;
+}
+
+#navbar ul li a
+{
+ display: block;
+ float: left;
+ font-size: 14px;
+ font-weight: bold;
+ padding-right: 14px;
+ padding-top: 5px;
+ color: #CD2B26;
+ text-decoration: none;
+ height: 29px;
+}
+
+#navbar ul li a.active, #navbar ul li a.hover
+{
+ color: #821B18;
+}
+
+/* infobar */
+div#infobar
+{
+ float: right;
+ width: 200px;
+ padding-left: 20px;
+ border-left: 2px solid #E9EEEF;
+}
+
+div#infobar div
+{
+ margin-bottom: 20px;
+}
+
+div#infobar div#featured img
+{
+ margin-top: 10px;
+}
+
+/* articles */
+
+div#articles
+{
+ width: 560px;
+ float: left;
+}
+
+/* article */
+
+div.article
+{
+ margin-bottom: 40px;
+}
+
+div.article .date
+{
+ color: #9F9291;
+}
+
+div.article .more
+{
+ margin-right: 10px;
+ display: block;
+ text-align: right;
+}
+
+.logo
+{
+ position: absolute;
+ margin-left: 15px;
+ margin-top: 0px;
+ z-index: 1;
+}
+
+#main
+{
+ padding: 20px;
+ padding-top: 20px;
+ background-color: #fff;
+}
+
+div.mantis
+{
+ height: 190px;
+ background-color: #fff;
+ border-bottom: 1px solid #DCDCDC;
+}
+
+div.releases
+{
+ float: left;
+ width: 240px;
+ height: 190px;
+}
+
+div.releases div.official
+{
+ width: 190px;
+ position: relative;
+ left: 52px;
+ top: 128px;
+ font-size: 8pt;
+ color: #6D6D6D;
+}
+
+div.releases div.official a
+{
+ display: block;
+}
+
+div.whyprado
+{
+ display: block;
+ float: left;
+}
+
+div.whyprado ul.list
+{
+ margin-top: 40px;
+ margin-left: 40px;
+}
+
+div.whyprado ul.list li
+{
+ display: block;
+ margin: 5px;
+ padding: 0px;
+ font-size: 18px;
+ background-repeat: no-repeat;
+ background-position: bottom left;
+ padding-left: 30px;
+ list-style: none;
+}
+
+div.whyprado ul.list li.one
+{
+}
+
+div.whyprado ul.list li.two
+{
+}
+
+div.whyprado ul.list li.three
+{
+}
+
+div.whyprado ul.list li a
+{
+ color: #9F9291;
+ text-decoration: none;
+}
+
+#footer
+{
+ border-top: 1px solid #e9eeef;
+ background-color: #fff;
+ clear: both;
+ color: #A7A7A7;
+ font-size: 8pt;
+ text-align: center;
+ padding-top: 10px;
+ padding-bottom: 30px;
+}
+
+#features
+{
+ margin-left: 610px;
+ padding: 10px;
+ padding-left: 10px;
+ padding-right: 10px;
+ background-color: #BEDD75;
+ color: #344A1E;
+ font-size: 9pt;
+}
+
+#features ul
+{
+ margin: 10px;
+ padding: 0px;
+}
+
+#features ul li
+{
+ font-size: 8pt;
+ padding: 0px;
+ margin: 0px;
+ margin-top: 8px;
+}
+
+#features h3
+{
+ margin: 0px;
+ padding: 0px;
+ font-size: 10pt;
+ color: #292E1D;
+ text-align: center;
+ border-bottom: 1px solid silver;
+}
+
+#news
+{
+ float: left;
+ width: 590px;
+}
+
+.newstitle
+{
+ font-size: 12pt;
+ font-weight: bold;
+ color: #555;
+ margin-top: 10px;
+ margin-bottom: 0px;
+ border-bottom: 1px solid silver;
+}
+
+.newscontentmore
+{
+ margin-right: 10px;
+ display: block;
+ color: #50811A;
+ text-align: right;
+}
+
+.newscontentmore:hover
+{
+ color: red;
+}
+
+.newstime
+{
+ margin: 0px;
+ font-size:0.8em;
+ color:#aaa;
+ padding-left:10px;
+ text-align: right;
+}
+
+.newscontent
+{
+ margin-top: 5px;
+}
+
+#leftpanel
+{
+ float: left;
+ width: 550px;
+}
+
+#topics
+{
+ border: 1px solid #804040;
+ margin-left: 610px;
+ padding-bottom: 10px;
+}
+
+#topicsheader
+{
+ text-align:center;
+ font-weight:bold;
+ background-color:#804040;
+ color:#FFFFBC;
+ padding: 3px;
+ margin-bottom:0px;
+}
+
+.topicitem
+{
+ padding: 5px;
+}
+
+.topicitem a:hover
+{
+ text-decoration: underline;
+}
+
+.topicitem p
+{
+ margin: 0px;
+ font-size:0.8em;
+ color:#aaa;
+ padding-left:10px;
+ white-space:nowrap;
+}
+
+.reference
+{
+}
+
+.reference img
+{
+ margin: 10px;
+}
+
+.reference h3
+{
+}
+
+
+.download
+{
+ width: 100%;
+ background-color: #aaa;
+}
+
+.download td
+{
+ background-color: #FFFFFF;
+ padding: 5px;
+ font-size: 9pt;
+}
+
+.download td a
+{
+ font-weight: bold;
+}
+
+.download td.type
+{
+ font-family: "courier new", courier;
+ text-align: right;
+ vertical-align: top;
+}
+
+.download div.declaration
+{
+ font-family: "courier new", courier;
+}
+
+
+.download th
+{
+ background-color: #F0F0F0;
+ font-weight: bold;
+ padding: 5px;
+ text-align: left;
+}
+
+.download th.small
+{
+ font-size: 1.0em;
+}
+
+.download tr.reference td {
+ background-color: #FFEDED;
+}
+
+
+.doc-title
+{
+ font-size: 14pt;
+ font-weight: bold;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.doc-subtitle
+{
+ font-size: 11pt;
+ font-weight: bold;
+ background-color: #EEE;
+ padding: 5px;
+ margin-top: 20px;
+}
+
+.doc-namespace
+{
+ font-size: 8pt;
+}
+
+
+.doc-menu
+{
+}
+
+.doc-classes
+{
+}
+
+.doc-ancestors
+{
+ font-size: 8pt;
+}
+
+.doc-properties
+{
+ font-size: 9pt;
+}
+
+.doc-properties table
+{
+ border-collapse: collapse;
+ background-color: silver;
+ width: 100%;
+}
+
+.doc-properties td, .doc-properties th
+{
+ padding: 3px;
+ vertical-align: top;
+ background-color: white;
+ border: 1px solid silver;
+}
+
+.doc-events
+{
+ font-size: 9pt;
+}
+
+.doc-events table
+{
+ border-collapse: collapse;
+ background-color: silver;
+ width: 100%;
+}
+
+.doc-events td, .doc-events th
+{
+ padding: 3px;
+ vertical-align: top;
+ background-color: white;
+ border: 1px solid silver;
+}
+
+.doc-methods
+{
+ font-size: 9pt;
+}
+
+.doc-methods table
+{
+ border-collapse: collapse;
+ background-color: silver;
+ width: 100%;
+}
+
+.doc-methods td, .doc-methods th
+{
+ padding: 3px;
+ vertical-align: top;
+ background-color: white;
+ border: 1px solid silver;
+}
+
+.doc-derived
+{
+}
+
+.doc-inherited
+{
+}
+
+.doc-native td
+{
+ background-color: lightyellow;
+}
+
+.forum-topic
+{
+ padding: 10px;
+ border:1px solid silver;
+ margin-bottom: 10px;
+}
+