Hey guys, Here a patch for the bugs #47406 and #48264. Both bugs are about using an external CSS in the xhtml based formats in PhD, so the patch implements the --css option.
comments? --Moacir
Index: phpdotnet/phd/Package/Generic/XHTML.php =================================================================== --- phpdotnet/phd/Package/Generic/XHTML.php (revision 288345) +++ phpdotnet/phd/Package/Generic/XHTML.php (working copy) @@ -432,6 +432,8 @@ 'dbhtml' => 'PI_DBHTMLHandler', ); + protected $stylesheets = array(); + public function __construct() { parent::__construct(); $this->registerPIHandlers($this->pihandlers); @@ -514,6 +516,30 @@ return $retval; } + protected function fetchStylesheet() { + $stylesDir = $this->getOutputDir(); + if (!$stylesDir) { + $stylesDir = Config::output_dir(); + } + $stylesDir .= 'styles/'; + if (file_exists($stylesDir)) { + if (!is_dir($stylesDir)) { + v("The styles/ directory is a file?", E_USER_ERROR); + } + } else { + if (!mkdir($stylesDir)) { + v("Can't create the styles/ directory", E_USER_ERROR); + } + } + foreach ((array)Config::css() as $css) { + $dest = $stylesDir . basename($css); + if (@copy($css, $dest)) { + $this->stylesheets[] = basename($css); + } else { + v(sprintf('Impossible to copy the %s file.', $css), E_USER_WARNING); + } + } + } /* Functions format_* */ public function format_suppressed_tags($open, $name, $attrs, $props) { Index: phpdotnet/phd/Package/Generic/BigXHTML.php =================================================================== --- phpdotnet/phd/Package/Generic/BigXHTML.php (revision 288345) +++ phpdotnet/phd/Package/Generic/BigXHTML.php (working copy) @@ -36,6 +36,10 @@ public function header() { $root = Format::getRootIndex(); + $cssLinks = ''; + foreach ((array)$this->stylesheets as $css) { + $cssLinks .= " <link media=\"all\" rel=\"stylesheet\" type=\"text/css\" href=\"styles/".$css."\" />\n"; + } return <<<HEADER <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> @@ -43,6 +47,7 @@ <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>{$root["ldesc"]}</title> +{$cssLinks} </head> <body> HEADER; @@ -74,9 +79,12 @@ if ($val) { if (!is_resource($this->getFileStream())) { $filename = Config::output_dir() . strtolower($this->getFormatName()) . '.' . $this->getExt(); + $this->postConstruct(); + if (Config::css()) { + $this->fetchStylesheet(); + } $this->setFileStream(fopen($filename, "w+")); fwrite($this->getFileStream(), $this->header()); - $this->postConstruct(); } } break; Index: phpdotnet/phd/Package/Generic/ChunkedXHTML.php =================================================================== --- phpdotnet/phd/Package/Generic/ChunkedXHTML.php (revision 288345) +++ phpdotnet/phd/Package/Generic/ChunkedXHTML.php (working copy) @@ -78,6 +78,9 @@ v("Can't create output directory", E_USER_ERROR); } } + if (Config::css()) { + $this->fetchStylesheet(); + } break; case Render::VERBOSE: v("Starting %s rendering", $this->getFormatName(), VERBOSE_FORMAT_RENDERING); @@ -90,6 +93,11 @@ $lang = Config::language(); $root = Format::getRootIndex(); + $cssLinks = ''; + foreach ((array)$this->stylesheets as $css) { + $cssLinks .= " <link media=\"all\" rel=\"stylesheet\" type=\"text/css\" href=\"styles/".$css."\" />\n"; + } + $prev = $next = $parent = array("href" => null, "desc" => null); if ($parentId = $this->getParent($id)) { @@ -112,6 +120,7 @@ <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>'.(($title != $root["ldesc"]) ? $root["ldesc"].': ' : "").$title.'</title> +'.$cssLinks.' </head> <body> <table width="100%"> Index: phpdotnet/phd/Config.php =================================================================== --- phpdotnet/phd/Config.php (revision 288345) +++ phpdotnet/phd/Config.php (working copy) @@ -36,6 +36,7 @@ "package" => array( "Generic", ), + 'css' => array(), ); public static function init(array $a) { Index: phpdotnet/phd/BuildOptionsParser.php =================================================================== --- phpdotnet/phd/BuildOptionsParser.php (revision 288345) +++ phpdotnet/phd/BuildOptionsParser.php (working copy) @@ -24,6 +24,7 @@ "version" => "V", // Print out version information "help" => "h", // Print out help "package:" => "P:", // The package of formats + "css:" => "C:", // External CSS ); } @@ -212,6 +213,9 @@ } public function option_c($k, $v) { + if ($k == "C") { + return $this->option_css($k, $v); + } $this->option_color($k, $v); } public function option_color($k, $v) @@ -234,6 +238,15 @@ trigger_error("yes/no || on/off || true/false || 1/0 expected", E_USER_ERROR); } } + public function option_css($k, $v) { + $styles = array(); + foreach((array)$v as $key => $val) { + if (!in_array($val, $styles)) { + $styles[] = $val; + } + } + Config::set_css($styles); + } /** * Prints out the current PhD and PHP version.