-rw-r--r-- | development/documents/opie-todo.html | 46 | ||||
-rw-r--r-- | development/documents/opie-todo.inc | 262 | ||||
-rw-r--r-- | development/documents/opie-todo.xml | 59 | ||||
-rw-r--r-- | development/documents/opie.dtd | 24 |
4 files changed, 391 insertions, 0 deletions
diff --git a/development/documents/opie-todo.html b/development/documents/opie-todo.html new file mode 100644 index 0000000..839fe39 --- a/dev/null +++ b/development/documents/opie-todo.html @@ -0,0 +1,46 @@ +<!-- +<?php +$page = false; +if (file_exists('../page.inc')) { + include "../page.inc"; + page("verFeature3_2"); + $page = true; +} +?> +--> + +<?php + +$version = "1.0"; + +require_once "opie-todo.inc"; + +parse("opie-todo.xml"); +?> + +<table width="100%" border="0"> + <tr><td bgcolor="red"><div align="center">TODO</div></td><td bgcolor="#ffeeee"> + +<?php echo printHtml($version,'todo') ?> + + </td></tr> + + <tr><td bgcolor="yellow"><div align="center">In Progress</div></td><td bgcolor="#ffffee"> + +<?php echo printHtml($version,'inprogress') ?> + + </td></tr> + +<tr><td bgcolor="green"><div align="center">Finished</div></td><td bgcolor="#eeffee"> + +<?php printHtml($version,'done') ?> + +</td></tr> +</table> + +<?php +if ($page) { + footer(); +} + +?> diff --git a/development/documents/opie-todo.inc b/development/documents/opie-todo.inc new file mode 100644 index 0000000..69b4baa --- a/dev/null +++ b/development/documents/opie-todo.inc @@ -0,0 +1,262 @@ +<?php + +class KFeatures +{ + var $type = 'kdefeatures'; + var $parentID = null; + var $children = array(); + + function setParentID($id) + { + $this->parentID = $id; + } + function getParentID() + { + return $this->parentID; + } + function addChild(&$child) + { + $this->children[] = &$child; + } + function getHtml($target, $status) + { + $out = ''; + foreach ($this->children as $child) { + $out .= $child->getHtml($target, $status); + } + return $out; + } + +} + +class KCategory extends KFeatures +{ + + var $type = 'category'; + var $name = ''; + var $children = array(); + + function KCategory($name) + { + $this->name = $name; + } + function getHtml($target, $status) + { + $out = ''; + foreach ($this->children as $child) { + $temp = $child->getHtml( $target, $status); + # don't display empty categories + if ($child->type == "category" && strlen($temp)) + { + $out .= sprintf("\t<li>%s\t</li>\n", $temp); + } else { + $out .= $temp; + } + } + if (strlen($out)) { + return sprintf("<h2>%s</h2>\n\t<ul>\n%s\t</ul>\n\n",$this->name,$out); + } + return ''; + } +} + +class KFeature extends KFeatures +{ + + var $resp_name = array(); + var $resp_email = array(); + var $summary = ''; + var $status = ''; + var $target = ''; + var $type = 'feature'; + + function KFeature($status, $target) + { + $this->status = $status; + $this->target = $target; + } + function getStatus() + { + return $this->status; + } + function getTarget() + { + return $this->target; + } + function setResponsible($name = null, $email = null) + { + $this->resp_name[] = $name; + $this->resp_email[] = $email; + } + function getResponsible() + { + # Nobody responsible? + if (count($this->resp_name) == 0) return ''; + + $out = '<em>'; + for ($i = 0; $i < count($this->resp_name); $i++) { + if ($i > 0) $out .= ', '; + if ($this->resp_name[$i]) { + $out .= $this->resp_name[$i]; + } + if ($this->resp_name[$i] && $this->resp_email[$i]) $out .= " "; + if ($this->resp_email[$i]) { + $out .= '<'.$this->resp_email[$i].'>'; + } + } + $out .= '</em>'; + return $out; + } + function setSummary($summary) + { + $this->summary .= $summary.' '; + } + function getHtml($target, $status){ + if ($this->target == $target && $this->status == $status) { + return sprintf("\t\t<li>%s%s</li>\n",$this->summary,$this->getResponsible()); + } + return ''; + } + +} + +function startElement($parser, $name, $attrs) { + global $tags; + global $parentID; + + global $insummary; + global $pcdata; + global $curtag; + + switch ($name) { + case 'FEATURES': + $parentID = 0; + $obj = new KFeatures(); + $tags = array($obj); + + $insummary = false; + $pcdata = ''; + $curtag = ''; + break; + case 'CATEGORY': + $obj = new KCategory($attrs['NAME']); + $obj->setParentID($parentID); + $tags[] = $obj; + $currentID = count($tags) - 1; + $tags[$parentID]->addChild($tags[$currentID]); + $parentID = $currentID; + + break; + case 'FEATURE': + $obj = new KFeature($attrs['STATUS'], $attrs['TARGET']); + $obj->setParentID($parentID); + $tags[] = $obj; + $currentID = count($tags) - 1; + $tags[$parentID]->addChild($tags[$currentID]); + $parentID = $currentID; + break; + case 'RESPONSIBLE': + $n = count($tags) - 1; + $tags[$n]->setResponsible(@$attrs['NAME'], @$attrs['EMAIL']); + break; + case 'SUMMARY': + $insummary = true; + $pcdata = ''; + break; + default: + if (!$insummary) { + break; + } + $curtag = strtolower($name); + $att = ''; + foreach ($attrs as $k => $v) { + $att .= ' '.strtolower($k).'="'.$v.'"'; + } + + $pcdata .= '<'.$curtag.$att.'>'; + break; + } +} + +function endElement($parser, $name) { + global $parentID; + global $tags; + + global $curtag; + global $pcdata; + global $insummary; + + switch ($name) { + case "FEATURE": + $n = count($tags) - 1; + $parentID = $tags[$n]->getParentID(); + break; + case "CATEGORY": + $parentID = $tags[$parentID]->getParentID(); + break; + case "SUMMARY": + $n = count($tags) - 1; + $tags[$n]->setSummary($pcdata); + + $insummary = false; + $pcdata = ''; + break; + default: + if ($insummary) { + $pcdata .= '</'.$curtag.'>'; + } + break; + } +} + +function characterData($parser, $data) { + global $htmltag; + global $tags; + + global $pcdata; + global $curtag; + global $insummary; + + if (!$insummary) { + return; + } + $pcdata .= htmlspecialchars($data); +} + +function parse( $file ) { + + $xml_parser = xml_parser_create(); + + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); + xml_set_element_handler($xml_parser, "startElement", "endElement"); + xml_set_character_data_handler($xml_parser, "characterData"); + + if (!($fp = fopen($file, "r"))) { + die("could not open XML input"); + } + + + while ($data = fread($fp, 4096)) { + if (!xml_parse($xml_parser, $data, feof($fp))) { + die(sprintf("XML error: %s at line %d", + xml_error_string(xml_get_error_code($xml_parser)), + xml_get_current_line_number($xml_parser))); + } + } + + xml_parser_free($xml_parser); +} + + + +function printHtml($target, $status) +{ + global $tags; + if (!is_array($tags)) { + die('You must parse the xml file first with parse("filename.xml");'); + } + print($tags[0]->getHtml($target,$status)); +} + + +?> diff --git a/development/documents/opie-todo.xml b/development/documents/opie-todo.xml new file mode 100644 index 0000000..8766e92 --- a/dev/null +++ b/development/documents/opie-todo.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!DOCTYPE features SYSTEM "opie.dtd"> + +<!-- + +This file serves as central repository of planned KDE features. It's parsed by +the PHP scripts in "features.inc" which are used by "kde-3.2-features.html" to +generate HTML versions for the web. + +If you plan to add a feature to KDE please add it to this file. A feature can +have one of three status types: "todo", "inprogress", "done". Please update +the status from time to time. For a release there shouldn't be any features +with other states than "done". If you can't complete a feature for a release +please move the feature to the next release. The "target" attribute specifies +for which release the feature should be finished. At the moment only the value +"3.2" is evaluated, but we will add pages showing the features for later +versions as needed. + +Each feature consists of a summary giving a short description what the feature is +about and one or more responsible persons. + +A draft for a DTD of the features file can be found in "kde-features.dtd". Use +"xmllint -valid -noout kde-features.xml" to validate the xml file against the +DTD. If there are errors in the XML document they will be shown, if not the +command will not output anything. + +If you have questions or comments please post them to the mailing list or contact +Cornelius Schumacher <schumacher@kde.org>. + +--> + +<features> +<category name="Documentation"> + <feature status="todo" target="1.0"> + <summary>Fix this file</summary> + <responsible name="Carsten Niehaus" email="cniehaus@handhelds.org" /> + </feature> + <feature status="done" target="1.0"> + <summary>add this file</summary> + <responsible name="Carsten Niehaus" email="cniehaus@handhelds.org" /> + </feature> + <feature status="todo" target="1.0"> + <summary>Datebook Recurrence Dialog not fully translated/translatable</summary> + </feature> + </category> +<category name="UI Bugs"> + <feature> + + </feature> +</category> +<category name="HTML Documentation"> + <feature status="todo" target="1.0"> + <summary>A hell lot of Documentation is missing. Check help/en/html</summary> + </feature> + <feature status="todo" target="1.0"> + <summary>OSearch DOCU does refer to settings.html which should be osearch/settings.html</summary> + </feature> +</category> +</features> diff --git a/development/documents/opie.dtd b/development/documents/opie.dtd new file mode 100644 index 0000000..3ed436b --- a/dev/null +++ b/development/documents/opie.dtd @@ -0,0 +1,24 @@ + +<!ELEMENT features (category+)> + +<!ELEMENT category (feature|category)*> +<!ATTLIST category name CDATA #REQUIRED > + +<!ELEMENT feature (summary?,responsible*)> +<!ATTLIST feature status (inprogress|todo|done) "todo" + target CDATA #REQUIRED> + +<!ELEMENT responsible EMPTY> +<!ATTLIST responsible name CDATA #IMPLIED + email CDATA #IMPLIED> + +<!ELEMENT summary (#PCDATA|i|a|b|em|strong)*> + +<!ELEMENT i (#PCDATA)> +<!ELEMENT b (#PCDATA)> +<!ELEMENT em (#PCDATA)> +<!ELEMENT strong (#PCDATA)> + +<!ELEMENT a (#PCDATA)> +<!ATTLIST a href CDATA #IMPLIED> +<!ATTLIST a title CDATA #IMPLIED> |