summaryrefslogtreecommitdiff
path: root/development/documents
Side-by-side diff
Diffstat (limited to 'development/documents') (more/less context) (ignore whitespace changes)
-rw-r--r--development/documents/opie-todo.html46
-rw-r--r--development/documents/opie-todo.inc262
-rw-r--r--development/documents/opie-todo.xml59
-rw-r--r--development/documents/opie.dtd24
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 .= '&lt;'.$this->resp_email[$i].'&gt;';
+ }
+ }
+ $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>