summaryrefslogtreecommitdiff
path: root/development
authormickeyl <mickeyl>2003-10-29 22:07:36 (UTC)
committer mickeyl <mickeyl>2003-10-29 22:07:36 (UTC)
commitd53637f46cf217fc760d7aac58b4596843a73803 (patch) (side-by-side diff)
tree25289be556fa1ce0ba8539b7f42aeaa037bdf7fd /development
parent1af1f1d9f398d38a2bc666cd2edff5725da7a770 (diff)
downloadopie-d53637f46cf217fc760d7aac58b4596843a73803.zip
opie-d53637f46cf217fc760d7aac58b4596843a73803.tar.gz
opie-d53637f46cf217fc760d7aac58b4596843a73803.tar.bz2
merge development/* and help/*
Diffstat (limited to 'development') (more/less context) (show whitespace changes)
-rwxr-xr-xdevelopment/create_html_docu20
-rwxr-xr-xdevelopment/cvs_add_html_skeleton5
-rwxr-xr-xdevelopment/cvs_add_translation16
-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
-rwxr-xr-xdevelopment/mkHelpSkeleton116
-rw-r--r--development/opie-1.mrproject151
-rwxr-xr-xdevelopment/sort_desktop_files.pl76
10 files changed, 775 insertions, 0 deletions
diff --git a/development/create_html_docu b/development/create_html_docu
new file mode 100755
index 0000000..9ee0310
--- a/dev/null
+++ b/development/create_html_docu
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# $1 appname
+# $2 AppName
+# $3 Icon
+# $4 filename to output
+
+echo "<html><head><title>$2</title></head><body>" > $4
+echo "<img src=\"$3.png\">" >> $4
+echo "<h1>$2</h1>" >> $4
+
+echo "<P align=\"center\">FIXME Description<br>" >> $4
+echo "<ul align=\"left\">" >> $4
+echo "<li><a href=\"$1/about.html\">About</a></li>" >> $4
+echo "</ul>" >> $4
+echo "</body></html>" >> $4
+mkdir $OPIEDIR/help/en/html/$1
+
+
+
diff --git a/development/cvs_add_html_skeleton b/development/cvs_add_html_skeleton
new file mode 100755
index 0000000..c8d6351
--- a/dev/null
+++ b/development/cvs_add_html_skeleton
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+echo "Adding HTML files for $1 to CVS"
+
+cvs add help/en/html/$1 help/en/html/$1.html help/en/html/opie-$1-help-en.control \ No newline at end of file
diff --git a/development/cvs_add_translation b/development/cvs_add_translation
new file mode 100755
index 0000000..78268e2
--- a/dev/null
+++ b/development/cvs_add_translation
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+foo=""
+
+for i in i18n/??;
+do
+ foo="$foo $i/$1"
+
+done
+for i in i18n/??_??;
+do
+ foo="$foo $i/$1"
+
+done
+
+cvs add $foo
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>
diff --git a/development/mkHelpSkeleton b/development/mkHelpSkeleton
new file mode 100755
index 0000000..d7914fe
--- a/dev/null
+++ b/development/mkHelpSkeleton
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+"""
+This skript creates a help skeleton for a certain application
+(C) Michael 'Mickey' Lauer who did this even if he had a lot of other stuff to do... THANKS
+"""
+
+import os
+import sys
+
+COUNTRYCODES = "da de en fr nl pl hu no pt it pt_BR ja sl zh_CN es ko zh_TW".split()
+OPIEDIR = os.environ["OPIEDIR"]
+
+#Package: opie-appskey-help-en
+#Files: help/en/html/opie-appskey.html
+#Priority: optional
+#Section: opie/onlinedoc
+#Maintainer: ljp <llornkcor@handhelds.org>
+#Architecture: arm
+#Version: $QPE_VERSION-$SUB_VERSION
+#Depends: opie-appskey
+#License: GPL
+#Description: Application Key help files (english)
+
+def doit( name, cc ):
+ """Create a help skeleton corresponding to a package described by a desktop file."""
+
+ desktop = {}
+ for line in file( name ):
+ try:
+ key, value = line.split( '=' )
+ except ValueError:
+ pass
+ else:
+ desktop[key.strip()] = value.strip()
+
+ try:
+ application = desktop["Exec"]
+ except:
+ fail( "No Exec given in .desktop file" )
+
+ print "Generating help skeleton for application '%s'..." % application
+ helpdirname = "%s/help/%s/html" % ( OPIEDIR, cc )
+ helpappdirname = "%s/%s" % ( helpdirname, application )
+ makecontrol( helpdirname, application, cc, desktop )
+ makedir( helpappdirname )
+ makehtml( helpdirname, application, cc, desktop )
+
+#------------------------------------------------------#
+def makehtml( directory, application, cc, desktop ):
+ """Creates the help template file."""
+
+ helpfilename = "%s/%s.html" % ( directory, application )
+ print "Creating help file '%s'" % helpfilename
+ h = file( helpfilename, "w" )
+ print >> h, """<html> <head> <title>%s</title> </head>
+<body>
+ <center><h1>%s</h1></center>
+ <hr>
+</body>
+</html>
+""" % ( application, application )
+
+#------------------------------------------------------#
+def makecontrol( directory, application, cc, desktop ):
+ """Creates the .control file."""
+
+ controlfilename = "%s/opie-%s-help-%s.control" % ( directory, application, cc )
+ print "Creating control file '%s'" % controlfilename
+ c = file( controlfilename, "w" )
+ print >> c, "Package: opie-%s-help-%s" % ( application, cc )
+ print >> c, "Files: help/%s/html/%s.html help/%s/html/%s" % ( cc, application, cc, application )
+ print >> c, "Priority: optional"
+ print >> c, "Section: opie/onlinedoc"
+ print >> c, "Maintainer: %s" % desktop.get( "Maintainer", "Team Opie <opie@handhelds.org>" )
+ print >> c, "Version: $QPE_VERSION-$SUB_VERSION"
+ print >> c, "Depends: opie-%s" % application
+ print >> c, "License: GPL"
+ print >> c, "Description: %s help files (%s)" % ( application, cc )
+
+#------------------------------------------------------#
+def makedir( name ):
+ """Creates a directory."""
+
+ print "Creating directory '%s'" % name
+ if not os.path.exists( name ): os.mkdir( name )
+
+#------------------------------------------------------#
+def fail( reason ):
+ """Fails with a reason."""
+ print reason
+ sys.exit( -1 )
+
+#------------------------------------------------------#
+def checkUsage( args ):
+ """Checks calling syntax."""
+
+ if len( args ) < 2:
+ fail( """
+Usage: %s <application>.desktop [countrycode]
+
+If no countrycode is given, defaults to 'en'
+If countrycode 'all' is given, generates skeletons
+for all known countrycodes: %s""" % ( args[0], ", ".join( COUNTRYCODES ) ) )
+
+#------------------------------------------------------#
+
+if __name__ == "__main__":
+ checkUsage( sys.argv )
+
+ if len ( sys.argv ) == 2:
+ doit( sys.argv[1], "en" )
+ elif len( sys.argv ) == 3:
+ if sys.argv[2] == "all":
+ [ doit( sys.argv[1], x ) for x in split() ]
+ else:
+ doit( sys.argv[1], sys.argv[2] )
diff --git a/development/opie-1.mrproject b/development/opie-1.mrproject
new file mode 100644
index 0000000..34836ac
--- a/dev/null
+++ b/development/opie-1.mrproject
@@ -0,0 +1,151 @@
+<?xml version="1.0"?>
+<project name="OPIE" company="OPIE" manager="Holger Freyther" phase="fixing bugs" project-start="20030518T000000Z" mrproject-version="2" calendar="1">
+ <properties>
+ <property name="cost" type="cost" owner="resource" label="Cost" description="standard cost for a resource"/>
+ </properties>
+ <phases>
+ <phase name="fixing bugs"/>
+ <phase name="prepare release"/>
+ </phases>
+ <calendars>
+ <day-types>
+ <day-type id="0" name="Arbeitstag" description="Ein Vorgabe-Arbeitstag"/>
+ <day-type id="1" name="Kein Arbeitstag" description="Ein Vorgabetag, an dem nicht gearbeitet wird"/>
+ <day-type id="2" name="Basis verwenden" description="Tag aus dem Basis-Kalender verwenden"/>
+ </day-types>
+ <calendar id="1" name="Default">
+ <default-week mon="0" tue="0" wed="0" thu="0" fri="0" sat="1" sun="1"/>
+ <overridden-day-types>
+ <overridden-day-type id="0">
+ <interval start="0800" end="1200"/>
+ <interval start="1300" end="1700"/>
+ </overridden-day-type>
+ </overridden-day-types>
+ <days/>
+ </calendar>
+ </calendars>
+ <tasks>
+ <task id="1" name="Todo" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <task id="2" name="General showstoppers" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <task id="3" name="Majority of apps lack HTML documentation" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="4" name="class OFileDialog" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="5" name="Package Manager again broken?" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="6" name="Syncing with QD hope TT helps here" note="" work="575100" start="20030518T000000Z" end="20030524T154500Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="7" name="No PPP Network Plugin ( Usability )" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="8" name="Documents Tab" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="9" name="Datebook Settings Dialog layout bugs" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="10" name="What mail application to use?" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="11" name="What about our opie-bigapps dumpyard? make it compile?" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="12" name="Include osearch ( fairly easy )" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ </task>
+ <task id="13" name="Crashes and Odd Behaviour" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <task id="14" name="OPIE FTP crashes on startup" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="15" name="OPIE FTP has layout issues with translation. menubar too big and covering the tabwidget" note="" work="28800" start="20030518T000000Z" end="20030518T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="16" name="PDF Viewer crashes on all of my pdfs" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="17" name="opie-writer with multiple pages new KDE backport?" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="18" name="uBrowser and www.heise.de end in endless loop" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="19" name="Datebook in Weekview and WeekLst The by week navigation ( &lt; &gt; ) and (&lt;&lt; &gt;&gt; ) show odd behaviour ( &gt; ) is not working" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="20" name="Datebook ConfigDialog has wrong layout" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="21" name="NetSytsemtime ErrorDialog too small for one line text use &lt;qt&gt;" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="22" name="NetSytsemtime does default to 24h but opie to AM/PM fix it" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="23" name="Formatter has problem with UI and different langs" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="24" name="Networksettings is missing a PPP Module" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="25" name="Networksettings is not in my FEED" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="26" name="Security and Layout on translations" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="27" name="Usermanager floatable toolbar fix it" note="" work="278100" start="20030518T000000Z" end="20030521T051500Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="28" name="Todolist on ARM is crahing on Delete All Completed" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="29" name="Todolist odditites with Recurrence star date and handling of alarms" note="" work="28800" start="20030518T000000Z" end="20030518T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ </task>
+ <task id="30" name="improve i18n/docu" note="" work="1728000" start="20030518T000000Z" end="20030607T000000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <task id="31" name="use i18n/xx with every app" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="32" name="check if the coreapps work in !en-langages" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="33" name="translate the .desktop-files" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="34" name="update/write documentation" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="35" name="opie-console is missing German translation" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="36" name="OPIE IRC refuses to be translated? namespaces?" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="37" name="OPIE sheet refuses to be translated as well" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="38" name="TinyKATE misses translation? possible at all?" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="39" name="VNC German translation and consistency Bookmarkname vs. Lesezeichen" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="40" name="opie-writer ts doable?" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="41" name="Asteroids +Translation Message does not fit screen" note="" work="278100" start="20030518T000000Z" end="20030521T051500Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="42" name="Launcher/QPE not everything is translated" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="43" name="backgammon TS" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="44" name="KBounce Pause and ABout dialog not translated translatable?" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="45" name="Datebook Recurrence Dialog not fully translated or translatable" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="46" name="SF Cave TS" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="47" name="buzzword translation of the buzzwords?" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="48" name="Backup and Restore .desktop + TS" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="49" name="Quit Application has Layout issues with Translation set the label to richtext" note="" work="280800" start="20030518T000000Z" end="20030521T060000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="50" name="OPIE PLayerI PlayListWidget refuses to be translated" note="" work="274500" start="20030518T000000Z" end="20030521T041500Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="51" name="Usermanager missing TS possible?" note="" work="280800" start="20030518T000000Z" end="20030521T060000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="52" name="Caption of wordgame says sample.. fix it" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ </task>
+ <task id="53" name="DOCU bugs" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <task id="54" name="OSEARCH link to settings is wrong" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ </task>
+ </task>
+ <task id="55" name="Packaging bugs" note="" work="28800" start="20030518T000000Z" end="20030518T080000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <task id="56" name="task-opie-pim is missing osearch" note="" work="28800" start="20030518T000000Z" end="20030518T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="57" name="task-opie-settings: remove tabmanager which is not part of the release" note="" work="28800" start="20030518T000000Z" end="20030518T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ </task>
+ <task id="58" name="OPIE beta1" note="" work="288000" start="20030601T000000Z" end="20030604T080000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <constraint type="start-no-earlier-than" time="20030601T000000Z"/>
+ </task>
+ <task id="59" name="OPIE beta 2" note="" work="266400" start="20030614T000000Z" end="20030617T020000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <predecessors>
+ <predecessor id="1" predecessor-id="58" type="FS"/>
+ </predecessors>
+ <task id="60" name="decide which lang. will be released" note="" work="288000" start="20030614T000000Z" end="20030617T080000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <constraint type="start-no-earlier-than" time="20030614T000000Z"/>
+ </task>
+ </task>
+ <task id="61" name="OPIE rc1" note="" work="144000" start="20030627T170000Z" end="20030629T090000Z" percent-complete="0" type="normal" scheduling="fixed-work">
+ <predecessors>
+ <predecessor id="1" predecessor-id="30" type="FS"/>
+ <predecessor id="1" predecessor-id="1" type="FS"/>
+ <predecessor id="1" predecessor-id="60" type="FS"/>
+ <predecessor id="1" predecessor-id="59" type="FS"/>
+ </predecessors>
+ <task id="62" name="test final images" note="" work="144000" start="20030627T170000Z" end="20030629T090000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="63" name="write Announcement" note="Sonntag, 18.05.2003, 16:14&#10;" work="144000" start="20030627T170000Z" end="20030629T090000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ <task id="64" name="update Webpages" note="" work="144000" start="20030627T170000Z" end="20030629T090000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
+ </task>
+ <task id="65" name="OPIE 1.0" note="" work="0" start="20030704T170000Z" end="20030704T170000Z" percent-complete="0" type="milestone" scheduling="fixed-work">
+ <predecessors>
+ <predecessor id="1" predecessor-id="61" type="FS"/>
+ </predecessors>
+ </task>
+ </tasks>
+ <resource-groups default_group="2">
+ <group id="1" name="opie-i18n" admin-name="Carsten Niehaus" admin-phone="" admin-email="cniehaus@handhelds.org"/>
+ <group id="2" name="opie-core" admin-name="Holger Freyther" admin-phone="" admin-email="freyther@handhelds.org"/>
+ </resource-groups>
+ <resources>
+ <resource group="1" id="1" name="Carsten Niehaus" type="1" units="0" email="cniehaus@handhelds.org" note="" std-rate="0">
+ <properties>
+ <property name="cost" value=""/>
+ </properties>
+ </resource>
+ <resource group="2" id="2" name="Holger Freyther" type="1" units="0" email="freyther@kde.org" note="" std-rate="0">
+ <properties>
+ <property name="cost" value=""/>
+ </properties>
+ </resource>
+ <resource group="2" id="3" name="Patrick Vogt" type="1" units="0" email="tille@handhelds.org" note="" std-rate="0">
+ <properties>
+ <property name="cost" value=""/>
+ </properties>
+ </resource>
+ </resources>
+ <allocations>
+ <allocation task-id="31" resource-id="1" units="100"/>
+ <allocation task-id="33" resource-id="1" units="100"/>
+ <allocation task-id="30" resource-id="1" units="100"/>
+ <allocation task-id="32" resource-id="1" units="100"/>
+ <allocation task-id="4" resource-id="2" units="100"/>
+ <allocation task-id="30" resource-id="2" units="100"/>
+ <allocation task-id="29" resource-id="2" units="100"/>
+ <allocation task-id="6" resource-id="2" units="100"/>
+ <allocation task-id="7" resource-id="3" units="100"/>
+ </allocations>
+</project>
diff --git a/development/sort_desktop_files.pl b/development/sort_desktop_files.pl
new file mode 100755
index 0000000..e553b9e
--- a/dev/null
+++ b/development/sort_desktop_files.pl
@@ -0,0 +1,76 @@
+#!/usr/bin/perl -w
+# Copyright (c) 2002,2003 by
+# Bruno Rodrigues <bruno.rodrigues@litux.org>
+# under the GNU GPL license 2.0 or newer
+# sort_desktop_files.pl,v 1.1.2.1 2003/07/01 02:22:56 davipt Exp
+# -----------------------------------------------------
+# This script reads a .desktop file and sorts its values
+# in the following format:
+# [Desktop Entry]
+# field1=val1 \
+# field2=val2 > Sorted by field name
+# ... /
+# Name=name
+# Comment=comment
+# Name[lang1]=... \
+# Comment[lang1]=... > Sorted by language name
+# Name[lang2]=... /
+
+use strict;
+use vars qw{$line %data %tr};
+
+%data = (); %tr = ();
+
+# Read first line and make sure it's "[Desktop Entry]"
+$line = <>; chop($line);
+die "E: File does not start with [Desktop Entry] ($line)\n" unless $line =~ /^\[Desktop Entry\]$/;
+
+my $end=0;
+while($line = <>) {
+ # Ignore fields without values
+ next if $line =~ /^\s*([^\s]+)\s*=\s*$/;
+
+ # Ignore empty line in the end
+ if($line =~ /^\s*$/) {
+ if($end==0) { $end=1; next;
+ } else { die "E: Empty line in middle of file\n";
+ }
+ }
+
+ # Die if line is not "field = value"
+ die "E: Error in line - not field=value ($line)\n" unless $line =~ /^\s*([^\s]+)\s*=\s*(.+?)\s*$/;
+
+ my ($key, $data) = ($1, $2);
+
+ # Grab Name[lang] and Comment[lang]
+ if($key =~ /^(Name|Comment)\[(.+)\]$/i) {
+ $tr{$2}{$1} = $data;
+ }
+ # Grab Name and Comment
+ elsif($key =~ /^(Name|Comment)$/i) {
+ $tr{"0"}{$1} = $data;
+ }
+ # Die if there is other field[x]
+ elsif($key =~ /\[|\]/) {
+ die "E: Error in line - unknown field with [] ($line)\n";
+ }
+ # Grab regular fields
+ else {
+ $data{$1} = $2;
+ }
+}
+
+
+print "[Desktop Entry]\n";
+foreach my $key (sort keys %data) {
+ print "$key=".$data{$key}."\n";
+}
+foreach my $key (sort keys %tr) {
+ my %tr2 = %{$tr{$key}};
+ foreach my $k2 (reverse sort keys %tr2) {
+ print $k2;
+ print "[$key]" unless $key eq "0";
+ print "=". $tr2{$k2}. "\n";
+ }
+}
+