bjori Sun Aug 5 17:47:09 2007 UTC
Modified files: /phd/include PhDFormat.class.php /phd/formats xhtml.php Log: Improve CALS table rendering
http://cvs.php.net/viewvc.cgi/phd/include/PhDFormat.class.php?r1=1.1&r2=1.2&diff_format=u Index: phd/include/PhDFormat.class.php diff -u phd/include/PhDFormat.class.php:1.1 phd/include/PhDFormat.class.php:1.2 --- phd/include/PhDFormat.class.php:1.1 Sun Aug 5 14:49:55 2007 +++ phd/include/PhDFormat.class.php Sun Aug 5 17:47:08 2007 @@ -1,11 +1,12 @@ <?php -/* $Id: PhDFormat.class.php,v 1.1 2007/08/05 14:49:55 bjori Exp $ */ +/* $Id: PhDFormat.class.php,v 1.2 2007/08/05 17:47:08 bjori Exp $ */ abstract class PhDFormat { private $reader; private $IDs = array(); private $IDMap = array(); - protected $ext = ""; + private $TABLE = array(); + protected $ext = ""; /* abstract */ protected $map = array(); public function __construct(PhDReader $reader, array $IDs, array $IDMap, $ext) { @@ -55,9 +56,55 @@ abstract public function transformFromMap($open, $tag, $name); abstract public function CDATA($data); abstract public function __call($func, $args); + + /* Table helper functions */ + public function tgroup() { + $attrs = self::getAttributes(); + + $this->TABLE["cols"] = $attrs["cols"]; + unset($attrs["cols"]); + + $this->TABLE["defaults"] = $attrs; + $this->TABLE["colspec"] = array(); + + return $attrs; + } + public function colspec() { + /* defaults */ + $defaults["colname"] = count($this->TABLE["colspec"])+1; + $defaults["colnum"] = count($this->TABLE["colspec"])+1; + $defaults["align"] = "left"; + + $attrs = self::getAttributes(); + $colspec = array_merge($defaults, $this->TABLE["defaults"], $attrs); + + $this->TABLE["colspec"][$colspec["colnum"]] = $colspec; + return $colspec; + } + public function valign() { + $valign = self::readAttribute("valign"); + return $valign ? $valign : "middle"; + } + public function colspan() { + if ($start = $this->readAttribute("namest")) { + $from = array_search($start, $this->TABLE["colspec"]); + $end = $this->readAttribute("nameend"); + $to = array_search($end, $this->TABLE["colspec"]); + return $end-$to; + } + return 1; + } + public function rowspan() { + $rows = 1; + if ($morerows = $this->readAttribute("morerows")) { + $rows += $morerows; + } + return $rows; + } + } /* -* 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/formats/xhtml.php?r1=1.8&r2=1.9&diff_format=u Index: phd/formats/xhtml.php diff -u phd/formats/xhtml.php:1.8 phd/formats/xhtml.php:1.9 --- phd/formats/xhtml.php:1.8 Sun Aug 5 14:49:55 2007 +++ phd/formats/xhtml.php Sun Aug 5 17:47:09 2007 @@ -1,5 +1,5 @@ <?php -/* $Id: xhtml.php,v 1.8 2007/08/05 14:49:55 bjori Exp $ */ +/* $Id: xhtml.php,v 1.9 2007/08/05 17:47:09 bjori Exp $ */ class XHTMLPhDFormat extends PhDFormat { protected $map = array( /* {{{ */ @@ -36,13 +36,13 @@ 'constant' => 'span', 'emphasis' => 'em', 'enumname' => 'span', - 'entry' => array( + 'entry' => array ( /* DEFAULT */ 'format_entry', 'row' => array( - /* DEFAULT */ 'format_row_entry', - 'thead' => 'format_thead_entry', - 'tfoot' => 'format_tfoot_entry', - 'tbody' => 'format_tbody_entry', + /* DEFAULT */ 'format_entry', + 'thead' => 'format_th_entry', + 'tfoot' => 'format_th_entry', + 'tbody' => 'format_entry', ), ), 'envar' => 'span', @@ -298,8 +298,6 @@ } - /* TODO: Move the logic to PhDFormat? */ - /* NOTE: This is not a full implementation, just a proof-of-concept */ public function format_table($open, $name) { if ($open) { return '<table border="5">'; @@ -308,72 +306,63 @@ } public function format_tgroup($open, $name) { if ($open) { - $this->TABLE_COLS = $this->readAttribute("cols"); - $this->COLSPEC = array(); + $attrs = PhDFormat::tgroup(); return "<colgroup>\n"; } return "</colgroup>\n"; } public function format_colspec($open, $name) { if ($open) { - $colname = $this->readAttribute("colname"); - if ($colnum = $this->readAttribute("colnum")) { - $this->COLSPEC[$colnum] = $colname; - } else { - $count = count($this->COLSPEC); - $this->COLSPEC[$count] = $colname; + $colspec = PhDFormat::colspec(); + + $moreattr = ""; + if ($colspec["align"] == "char" && isset($colspec["char"])) { + $moreattr .= sprintf(' char="%s"', htmlspecialchars($colspec["char"], ENT_QUOTES)); + if (isset($colspec["charoff"])) { + $moreattr .= sprintf(' charoff="%s"', htmlspecialchars($colspec["charoff"], ENT_QUOTES)); + } + } + if (isset($colspec["colwidth"])) { + $moreattr .= sprintf(' width="%d"', $colspec["colwidth"]); } - return "<col />"; // Probably throw in couple of width and align attributes + + return sprintf('<col align="%s"%s />', $colspec["align"], $moreattr); } /* noop */ } public function format_thead($open, $name) { if ($open) { - return "<thead>"; + $valign = PhDFormat::valign(); + return sprintf('<thead valign="%s">', $valign); } - return "</thread>\n"; + return "</thead>\n"; } public function format_tbody($open, $name) { if ($open) { - return "<tbody>"; + $valign = PhDFormat::valign(); + return sprintf('<tbody valign="%s">', $valign); } return "</tbody>"; } public function format_row($open, $name) { if ($open) { - return "<tr>\n"; + $valign = PhDFormat::valign(); + return sprintf('<tr valign="%s">', $valign); } return "</tr>\n"; } - public function format_thead_entry($open, $name) { + public function format_th_entry($open, $name) { if ($open) { - if ($start = $this->readAttribute("namest")) { - $from = array_search($start, $this->COLSPEC); - $end = $this->readAttribute("nameend"); - $to = array_search($end, $this->COLSPEC); - return sprintf('<th colspan="%d">', $end-$to); - } - return '<th>'; + $colspan = PhDFormat::colspan(); + return sprintf('<th colspan="%d">', $colspan); } return '</th>'; } - public function format_tfoot_entry($open, $name) { - return $this->format_thead_entry($open, $name); - } - public function format_tbody_entry($open, $name) { + public function format_entry($open, $name) { if ($open) { - $colspan = 1; - $rows = 1; - if ($start = $this->readAttribute("namest")) { - $from = array_search($start, $this->COLSPEC); - $end = $this->readAttribute("nameend"); - $to = array_search($end, $this->COLSPEC); - $colspan = $to-$from+1; - } - if ($morerows = $this->readAttribute("morerows")) { - $rows += $morerows; - } - return sprintf('<td colspan="%d" rowspan="%d">', $colspan, $rows); + $colspan = PhDFormat::colspan(); + $rowspan = PhDFormat::rowspan(); + return sprintf('<td colspan="%d" rowspan="%d">', $colspan, $rowspan); } return "</td>"; } @@ -381,7 +370,7 @@ } /* -* 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 + */