summaryrefslogtreecommitdiff
path: root/development
Unidiff
Diffstat (limited to 'development') (more/less context) (ignore 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 @@
1#!/bin/sh
2
3# $1 appname
4# $2 AppName
5# $3 Icon
6# $4 filename to output
7
8echo "<html><head><title>$2</title></head><body>" > $4
9echo "<img src=\"$3.png\">" >> $4
10echo "<h1>$2</h1>" >> $4
11
12echo "<P align=\"center\">FIXME Description<br>" >> $4
13echo "<ul align=\"left\">" >> $4
14echo "<li><a href=\"$1/about.html\">About</a></li>" >> $4
15echo "</ul>" >> $4
16echo "</body></html>" >> $4
17mkdir $OPIEDIR/help/en/html/$1
18
19
20
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 @@
1#!/bin/sh
2
3echo "Adding HTML files for $1 to CVS"
4
5cvs 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 @@
1#!/bin/sh
2
3foo=""
4
5for i in i18n/??;
6do
7 foo="$foo $i/$1"
8
9done
10for i in i18n/??_??;
11do
12 foo="$foo $i/$1"
13
14done
15
16cvs 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 @@
1<!--
2<?php
3$page = false;
4if (file_exists('../page.inc')) {
5 include "../page.inc";
6 page("verFeature3_2");
7 $page = true;
8}
9?>
10-->
11
12<?php
13
14$version = "1.0";
15
16require_once "opie-todo.inc";
17
18parse("opie-todo.xml");
19?>
20
21<table width="100%" border="0">
22 <tr><td bgcolor="red"><div align="center">TODO</div></td><td bgcolor="#ffeeee">
23
24<?php echo printHtml($version,'todo') ?>
25
26 </td></tr>
27
28 <tr><td bgcolor="yellow"><div align="center">In Progress</div></td><td bgcolor="#ffffee">
29
30<?php echo printHtml($version,'inprogress') ?>
31
32 </td></tr>
33
34<tr><td bgcolor="green"><div align="center">Finished</div></td><td bgcolor="#eeffee">
35
36<?php printHtml($version,'done') ?>
37
38</td></tr>
39</table>
40
41<?php
42if ($page) {
43 footer();
44}
45
46?>
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 @@
1<?php
2
3class KFeatures
4{
5 var $type = 'kdefeatures';
6 var $parentID = null;
7 var $children = array();
8
9 function setParentID($id)
10 {
11 $this->parentID = $id;
12 }
13 function getParentID()
14 {
15 return $this->parentID;
16 }
17 function addChild(&$child)
18 {
19 $this->children[] = &$child;
20 }
21 function getHtml($target, $status)
22 {
23 $out = '';
24 foreach ($this->children as $child) {
25 $out .= $child->getHtml($target, $status);
26 }
27 return $out;
28 }
29
30}
31
32class KCategory extends KFeatures
33{
34
35 var $type = 'category';
36 var $name = '';
37 var $children = array();
38
39 function KCategory($name)
40 {
41 $this->name = $name;
42 }
43 function getHtml($target, $status)
44 {
45 $out = '';
46 foreach ($this->children as $child) {
47 $temp = $child->getHtml( $target, $status);
48 # don't display empty categories
49 if ($child->type == "category" && strlen($temp))
50 {
51 $out .= sprintf("\t<li>%s\t</li>\n", $temp);
52 } else {
53 $out .= $temp;
54 }
55 }
56 if (strlen($out)) {
57 return sprintf("<h2>%s</h2>\n\t<ul>\n%s\t</ul>\n\n",$this->name,$out);
58 }
59 return '';
60 }
61}
62
63class KFeature extends KFeatures
64{
65
66 var $resp_name = array();
67 var $resp_email = array();
68 var $summary = '';
69 var $status = '';
70 var $target = '';
71 var $type = 'feature';
72
73 function KFeature($status, $target)
74 {
75 $this->status = $status;
76 $this->target = $target;
77 }
78 function getStatus()
79 {
80 return $this->status;
81 }
82 function getTarget()
83 {
84 return $this->target;
85 }
86 function setResponsible($name = null, $email = null)
87 {
88 $this->resp_name[] = $name;
89 $this->resp_email[] = $email;
90 }
91 function getResponsible()
92 {
93 # Nobody responsible?
94 if (count($this->resp_name) == 0) return '';
95
96 $out = '<em>';
97 for ($i = 0; $i < count($this->resp_name); $i++) {
98 if ($i > 0) $out .= ', ';
99 if ($this->resp_name[$i]) {
100 $out .= $this->resp_name[$i];
101 }
102 if ($this->resp_name[$i] && $this->resp_email[$i]) $out .= " ";
103 if ($this->resp_email[$i]) {
104 $out .= '&lt;'.$this->resp_email[$i].'&gt;';
105 }
106 }
107 $out .= '</em>';
108 return $out;
109 }
110 function setSummary($summary)
111 {
112 $this->summary .= $summary.' ';
113 }
114 function getHtml($target, $status){
115 if ($this->target == $target && $this->status == $status) {
116 return sprintf("\t\t<li>%s%s</li>\n",$this->summary,$this->getResponsible());
117 }
118 return '';
119 }
120
121}
122
123function startElement($parser, $name, $attrs) {
124 global $tags;
125 global $parentID;
126
127 global $insummary;
128 global $pcdata;
129 global $curtag;
130
131 switch ($name) {
132 case 'FEATURES':
133 $parentID = 0;
134 $obj = new KFeatures();
135 $tags = array($obj);
136
137 $insummary = false;
138 $pcdata = '';
139 $curtag = '';
140 break;
141 case 'CATEGORY':
142 $obj = new KCategory($attrs['NAME']);
143 $obj->setParentID($parentID);
144 $tags[] = $obj;
145 $currentID = count($tags) - 1;
146 $tags[$parentID]->addChild($tags[$currentID]);
147 $parentID = $currentID;
148
149 break;
150 case 'FEATURE':
151 $obj = new KFeature($attrs['STATUS'], $attrs['TARGET']);
152 $obj->setParentID($parentID);
153 $tags[] = $obj;
154 $currentID = count($tags) - 1;
155 $tags[$parentID]->addChild($tags[$currentID]);
156 $parentID = $currentID;
157 break;
158 case 'RESPONSIBLE':
159 $n = count($tags) - 1;
160 $tags[$n]->setResponsible(@$attrs['NAME'], @$attrs['EMAIL']);
161 break;
162 case 'SUMMARY':
163 $insummary = true;
164 $pcdata = '';
165 break;
166 default:
167 if (!$insummary) {
168 break;
169 }
170 $curtag = strtolower($name);
171 $att = '';
172 foreach ($attrs as $k => $v) {
173 $att .= ' '.strtolower($k).'="'.$v.'"';
174 }
175
176 $pcdata .= '<'.$curtag.$att.'>';
177 break;
178 }
179}
180
181function endElement($parser, $name) {
182 global $parentID;
183 global $tags;
184
185 global $curtag;
186 global $pcdata;
187 global $insummary;
188
189 switch ($name) {
190 case "FEATURE":
191 $n = count($tags) - 1;
192 $parentID = $tags[$n]->getParentID();
193 break;
194 case "CATEGORY":
195 $parentID = $tags[$parentID]->getParentID();
196 break;
197 case "SUMMARY":
198 $n = count($tags) - 1;
199 $tags[$n]->setSummary($pcdata);
200
201 $insummary = false;
202 $pcdata = '';
203 break;
204 default:
205 if ($insummary) {
206 $pcdata .= '</'.$curtag.'>';
207 }
208 break;
209 }
210}
211
212function characterData($parser, $data) {
213 global $htmltag;
214 global $tags;
215
216 global $pcdata;
217 global $curtag;
218 global $insummary;
219
220 if (!$insummary) {
221 return;
222 }
223 $pcdata .= htmlspecialchars($data);
224}
225
226function parse( $file ) {
227
228 $xml_parser = xml_parser_create();
229
230 xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
231 xml_set_element_handler($xml_parser, "startElement", "endElement");
232 xml_set_character_data_handler($xml_parser, "characterData");
233
234 if (!($fp = fopen($file, "r"))) {
235 die("could not open XML input");
236 }
237
238
239 while ($data = fread($fp, 4096)) {
240 if (!xml_parse($xml_parser, $data, feof($fp))) {
241 die(sprintf("XML error: %s at line %d",
242 xml_error_string(xml_get_error_code($xml_parser)),
243 xml_get_current_line_number($xml_parser)));
244 }
245 }
246
247 xml_parser_free($xml_parser);
248}
249
250
251
252function printHtml($target, $status)
253{
254 global $tags;
255 if (!is_array($tags)) {
256 die('You must parse the xml file first with parse("filename.xml");');
257 }
258 print($tags[0]->getHtml($target,$status));
259}
260
261
262?>
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 @@
1<?xml version="1.0" encoding="iso-8859-1"?>
2<!DOCTYPE features SYSTEM "opie.dtd">
3
4<!--
5
6This file serves as central repository of planned KDE features. It's parsed by
7the PHP scripts in "features.inc" which are used by "kde-3.2-features.html" to
8generate HTML versions for the web.
9
10If you plan to add a feature to KDE please add it to this file. A feature can
11have one of three status types: "todo", "inprogress", "done". Please update
12the status from time to time. For a release there shouldn't be any features
13with other states than "done". If you can't complete a feature for a release
14please move the feature to the next release. The "target" attribute specifies
15for which release the feature should be finished. At the moment only the value
16"3.2" is evaluated, but we will add pages showing the features for later
17versions as needed.
18
19Each feature consists of a summary giving a short description what the feature is
20about and one or more responsible persons.
21
22A draft for a DTD of the features file can be found in "kde-features.dtd". Use
23"xmllint -valid -noout kde-features.xml" to validate the xml file against the
24DTD. If there are errors in the XML document they will be shown, if not the
25command will not output anything.
26
27If you have questions or comments please post them to the mailing list or contact
28Cornelius Schumacher <schumacher@kde.org>.
29
30-->
31
32<features>
33<category name="Documentation">
34 <feature status="todo" target="1.0">
35 <summary>Fix this file</summary>
36 <responsible name="Carsten Niehaus" email="cniehaus@handhelds.org" />
37 </feature>
38 <feature status="done" target="1.0">
39 <summary>add this file</summary>
40 <responsible name="Carsten Niehaus" email="cniehaus@handhelds.org" />
41 </feature>
42 <feature status="todo" target="1.0">
43 <summary>Datebook Recurrence Dialog not fully translated/translatable</summary>
44 </feature>
45 </category>
46<category name="UI Bugs">
47 <feature>
48
49 </feature>
50</category>
51<category name="HTML Documentation">
52 <feature status="todo" target="1.0">
53 <summary>A hell lot of Documentation is missing. Check help/en/html</summary>
54 </feature>
55 <feature status="todo" target="1.0">
56 <summary>OSearch DOCU does refer to settings.html which should be osearch/settings.html</summary>
57 </feature>
58</category>
59</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 @@
1
2<!ELEMENT features (category+)>
3
4<!ELEMENT category (feature|category)*>
5<!ATTLIST category name CDATA #REQUIRED >
6
7<!ELEMENT feature (summary?,responsible*)>
8<!ATTLIST feature status (inprogress|todo|done) "todo"
9 target CDATA #REQUIRED>
10
11<!ELEMENT responsible EMPTY>
12<!ATTLIST responsible name CDATA #IMPLIED
13 email CDATA #IMPLIED>
14
15<!ELEMENT summary (#PCDATA|i|a|b|em|strong)*>
16
17<!ELEMENT i (#PCDATA)>
18<!ELEMENT b (#PCDATA)>
19<!ELEMENT em (#PCDATA)>
20<!ELEMENT strong (#PCDATA)>
21
22<!ELEMENT a (#PCDATA)>
23<!ATTLIST a href CDATA #IMPLIED>
24<!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 @@
1#!/usr/bin/env python
2"""
3This skript creates a help skeleton for a certain application
4(C) Michael 'Mickey' Lauer who did this even if he had a lot of other stuff to do... THANKS
5"""
6
7import os
8import sys
9
10COUNTRYCODES = "da de en fr nl pl hu no pt it pt_BR ja sl zh_CN es ko zh_TW".split()
11OPIEDIR = os.environ["OPIEDIR"]
12
13#Package: opie-appskey-help-en
14#Files: help/en/html/opie-appskey.html
15#Priority: optional
16#Section: opie/onlinedoc
17#Maintainer: ljp <llornkcor@handhelds.org>
18#Architecture: arm
19#Version: $QPE_VERSION-$SUB_VERSION
20#Depends: opie-appskey
21#License: GPL
22#Description: Application Key help files (english)
23
24def doit( name, cc ):
25 """Create a help skeleton corresponding to a package described by a desktop file."""
26
27 desktop = {}
28 for line in file( name ):
29 try:
30 key, value = line.split( '=' )
31 except ValueError:
32 pass
33 else:
34 desktop[key.strip()] = value.strip()
35
36 try:
37 application = desktop["Exec"]
38 except:
39 fail( "No Exec given in .desktop file" )
40
41 print "Generating help skeleton for application '%s'..." % application
42 helpdirname = "%s/help/%s/html" % ( OPIEDIR, cc )
43 helpappdirname = "%s/%s" % ( helpdirname, application )
44 makecontrol( helpdirname, application, cc, desktop )
45 makedir( helpappdirname )
46 makehtml( helpdirname, application, cc, desktop )
47
48#------------------------------------------------------#
49def makehtml( directory, application, cc, desktop ):
50 """Creates the help template file."""
51
52 helpfilename = "%s/%s.html" % ( directory, application )
53 print "Creating help file '%s'" % helpfilename
54 h = file( helpfilename, "w" )
55 print >> h, """<html> <head> <title>%s</title> </head>
56<body>
57 <center><h1>%s</h1></center>
58 <hr>
59</body>
60</html>
61""" % ( application, application )
62
63#------------------------------------------------------#
64def makecontrol( directory, application, cc, desktop ):
65 """Creates the .control file."""
66
67 controlfilename = "%s/opie-%s-help-%s.control" % ( directory, application, cc )
68 print "Creating control file '%s'" % controlfilename
69 c = file( controlfilename, "w" )
70 print >> c, "Package: opie-%s-help-%s" % ( application, cc )
71 print >> c, "Files: help/%s/html/%s.html help/%s/html/%s" % ( cc, application, cc, application )
72 print >> c, "Priority: optional"
73 print >> c, "Section: opie/onlinedoc"
74 print >> c, "Maintainer: %s" % desktop.get( "Maintainer", "Team Opie <opie@handhelds.org>" )
75 print >> c, "Version: $QPE_VERSION-$SUB_VERSION"
76 print >> c, "Depends: opie-%s" % application
77 print >> c, "License: GPL"
78 print >> c, "Description: %s help files (%s)" % ( application, cc )
79
80#------------------------------------------------------#
81def makedir( name ):
82 """Creates a directory."""
83
84 print "Creating directory '%s'" % name
85 if not os.path.exists( name ): os.mkdir( name )
86
87#------------------------------------------------------#
88def fail( reason ):
89 """Fails with a reason."""
90 print reason
91 sys.exit( -1 )
92
93#------------------------------------------------------#
94def checkUsage( args ):
95 """Checks calling syntax."""
96
97 if len( args ) < 2:
98 fail( """
99Usage: %s <application>.desktop [countrycode]
100
101If no countrycode is given, defaults to 'en'
102If countrycode 'all' is given, generates skeletons
103for all known countrycodes: %s""" % ( args[0], ", ".join( COUNTRYCODES ) ) )
104
105#------------------------------------------------------#
106
107if __name__ == "__main__":
108 checkUsage( sys.argv )
109
110 if len ( sys.argv ) == 2:
111 doit( sys.argv[1], "en" )
112 elif len( sys.argv ) == 3:
113 if sys.argv[2] == "all":
114 [ doit( sys.argv[1], x ) for x in split() ]
115 else:
116 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 @@
1<?xml version="1.0"?>
2<project name="OPIE" company="OPIE" manager="Holger Freyther" phase="fixing bugs" project-start="20030518T000000Z" mrproject-version="2" calendar="1">
3 <properties>
4 <property name="cost" type="cost" owner="resource" label="Cost" description="standard cost for a resource"/>
5 </properties>
6 <phases>
7 <phase name="fixing bugs"/>
8 <phase name="prepare release"/>
9 </phases>
10 <calendars>
11 <day-types>
12 <day-type id="0" name="Arbeitstag" description="Ein Vorgabe-Arbeitstag"/>
13 <day-type id="1" name="Kein Arbeitstag" description="Ein Vorgabetag, an dem nicht gearbeitet wird"/>
14 <day-type id="2" name="Basis verwenden" description="Tag aus dem Basis-Kalender verwenden"/>
15 </day-types>
16 <calendar id="1" name="Default">
17 <default-week mon="0" tue="0" wed="0" thu="0" fri="0" sat="1" sun="1"/>
18 <overridden-day-types>
19 <overridden-day-type id="0">
20 <interval start="0800" end="1200"/>
21 <interval start="1300" end="1700"/>
22 </overridden-day-type>
23 </overridden-day-types>
24 <days/>
25 </calendar>
26 </calendars>
27 <tasks>
28 <task id="1" name="Todo" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work">
29 <task id="2" name="General showstoppers" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work">
30 <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"/>
31 <task id="4" name="class OFileDialog" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
32 <task id="5" name="Package Manager again broken?" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
33 <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"/>
34 <task id="7" name="No PPP Network Plugin ( Usability )" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
35 <task id="8" name="Documents Tab" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
36 <task id="9" name="Datebook Settings Dialog layout bugs" note="" work="576000" start="20030518T000000Z" end="20030524T160000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
37 <task id="10" name="What mail application to use?" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
38 <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"/>
39 <task id="12" name="Include osearch ( fairly easy )" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
40 </task>
41 <task id="13" name="Crashes and Odd Behaviour" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work">
42 <task id="14" name="OPIE FTP crashes on startup" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
43 <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"/>
44 <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"/>
45 <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"/>
46 <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"/>
47 <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"/>
48 <task id="20" name="Datebook ConfigDialog has wrong layout" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
49 <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"/>
50 <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"/>
51 <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"/>
52 <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"/>
53 <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"/>
54 <task id="26" name="Security and Layout on translations" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
55 <task id="27" name="Usermanager floatable toolbar fix it" note="" work="278100" start="20030518T000000Z" end="20030521T051500Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
56 <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"/>
57 <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"/>
58 </task>
59 <task id="30" name="improve i18n/docu" note="" work="1728000" start="20030518T000000Z" end="20030607T000000Z" percent-complete="0" type="normal" scheduling="fixed-work">
60 <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"/>
61 <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"/>
62 <task id="33" name="translate the .desktop-files" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
63 <task id="34" name="update/write documentation" note="" work="864000" start="20030518T000000Z" end="20030528T000000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
64 <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"/>
65 <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"/>
66 <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"/>
67 <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"/>
68 <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"/>
69 <task id="40" name="opie-writer ts doable?" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
70 <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"/>
71 <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"/>
72 <task id="43" name="backgammon TS" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
73 <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"/>
74 <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"/>
75 <task id="46" name="SF Cave TS" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
76 <task id="47" name="buzzword translation of the buzzwords?" note="" work="284400" start="20030518T000000Z" end="20030521T070000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
77 <task id="48" name="Backup and Restore .desktop + TS" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
78 <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"/>
79 <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"/>
80 <task id="51" name="Usermanager missing TS possible?" note="" work="280800" start="20030518T000000Z" end="20030521T060000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
81 <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"/>
82 </task>
83 <task id="53" name="DOCU bugs" note="" work="288000" start="20030518T000000Z" end="20030521T080000Z" percent-complete="0" type="normal" scheduling="fixed-work">
84 <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"/>
85 </task>
86 </task>
87 <task id="55" name="Packaging bugs" note="" work="28800" start="20030518T000000Z" end="20030518T080000Z" percent-complete="0" type="normal" scheduling="fixed-work">
88 <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"/>
89 <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"/>
90 </task>
91 <task id="58" name="OPIE beta1" note="" work="288000" start="20030601T000000Z" end="20030604T080000Z" percent-complete="0" type="normal" scheduling="fixed-work">
92 <constraint type="start-no-earlier-than" time="20030601T000000Z"/>
93 </task>
94 <task id="59" name="OPIE beta 2" note="" work="266400" start="20030614T000000Z" end="20030617T020000Z" percent-complete="0" type="normal" scheduling="fixed-work">
95 <predecessors>
96 <predecessor id="1" predecessor-id="58" type="FS"/>
97 </predecessors>
98 <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">
99 <constraint type="start-no-earlier-than" time="20030614T000000Z"/>
100 </task>
101 </task>
102 <task id="61" name="OPIE rc1" note="" work="144000" start="20030627T170000Z" end="20030629T090000Z" percent-complete="0" type="normal" scheduling="fixed-work">
103 <predecessors>
104 <predecessor id="1" predecessor-id="30" type="FS"/>
105 <predecessor id="1" predecessor-id="1" type="FS"/>
106 <predecessor id="1" predecessor-id="60" type="FS"/>
107 <predecessor id="1" predecessor-id="59" type="FS"/>
108 </predecessors>
109 <task id="62" name="test final images" note="" work="144000" start="20030627T170000Z" end="20030629T090000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
110 <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"/>
111 <task id="64" name="update Webpages" note="" work="144000" start="20030627T170000Z" end="20030629T090000Z" percent-complete="0" type="normal" scheduling="fixed-work"/>
112 </task>
113 <task id="65" name="OPIE 1.0" note="" work="0" start="20030704T170000Z" end="20030704T170000Z" percent-complete="0" type="milestone" scheduling="fixed-work">
114 <predecessors>
115 <predecessor id="1" predecessor-id="61" type="FS"/>
116 </predecessors>
117 </task>
118 </tasks>
119 <resource-groups default_group="2">
120 <group id="1" name="opie-i18n" admin-name="Carsten Niehaus" admin-phone="" admin-email="cniehaus@handhelds.org"/>
121 <group id="2" name="opie-core" admin-name="Holger Freyther" admin-phone="" admin-email="freyther@handhelds.org"/>
122 </resource-groups>
123 <resources>
124 <resource group="1" id="1" name="Carsten Niehaus" type="1" units="0" email="cniehaus@handhelds.org" note="" std-rate="0">
125 <properties>
126 <property name="cost" value=""/>
127 </properties>
128 </resource>
129 <resource group="2" id="2" name="Holger Freyther" type="1" units="0" email="freyther@kde.org" note="" std-rate="0">
130 <properties>
131 <property name="cost" value=""/>
132 </properties>
133 </resource>
134 <resource group="2" id="3" name="Patrick Vogt" type="1" units="0" email="tille@handhelds.org" note="" std-rate="0">
135 <properties>
136 <property name="cost" value=""/>
137 </properties>
138 </resource>
139 </resources>
140 <allocations>
141 <allocation task-id="31" resource-id="1" units="100"/>
142 <allocation task-id="33" resource-id="1" units="100"/>
143 <allocation task-id="30" resource-id="1" units="100"/>
144 <allocation task-id="32" resource-id="1" units="100"/>
145 <allocation task-id="4" resource-id="2" units="100"/>
146 <allocation task-id="30" resource-id="2" units="100"/>
147 <allocation task-id="29" resource-id="2" units="100"/>
148 <allocation task-id="6" resource-id="2" units="100"/>
149 <allocation task-id="7" resource-id="3" units="100"/>
150 </allocations>
151</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 @@
1#!/usr/bin/perl -w
2# Copyright (c) 2002,2003 by
3# Bruno Rodrigues <bruno.rodrigues@litux.org>
4# under the GNU GPL license 2.0 or newer
5# sort_desktop_files.pl,v 1.1.2.1 2003/07/01 02:22:56 davipt Exp
6# -----------------------------------------------------
7# This script reads a .desktop file and sorts its values
8# in the following format:
9# [Desktop Entry]
10# field1=val1 \
11# field2=val2 > Sorted by field name
12# ... /
13# Name=name
14# Comment=comment
15# Name[lang1]=... \
16# Comment[lang1]=... > Sorted by language name
17# Name[lang2]=... /
18
19use strict;
20use vars qw{$line %data %tr};
21
22%data = (); %tr = ();
23
24# Read first line and make sure it's "[Desktop Entry]"
25$line = <>; chop($line);
26die "E: File does not start with [Desktop Entry] ($line)\n" unless $line =~ /^\[Desktop Entry\]$/;
27
28my $end=0;
29while($line = <>) {
30 # Ignore fields without values
31 next if $line =~ /^\s*([^\s]+)\s*=\s*$/;
32
33 # Ignore empty line in the end
34 if($line =~ /^\s*$/) {
35 if($end==0) { $end=1; next;
36 } else { die "E: Empty line in middle of file\n";
37 }
38 }
39
40 # Die if line is not "field = value"
41 die "E: Error in line - not field=value ($line)\n" unless $line =~ /^\s*([^\s]+)\s*=\s*(.+?)\s*$/;
42
43 my ($key, $data) = ($1, $2);
44
45 # Grab Name[lang] and Comment[lang]
46 if($key =~ /^(Name|Comment)\[(.+)\]$/i) {
47 $tr{$2}{$1} = $data;
48 }
49 # Grab Name and Comment
50 elsif($key =~ /^(Name|Comment)$/i) {
51 $tr{"0"}{$1} = $data;
52 }
53 # Die if there is other field[x]
54 elsif($key =~ /\[|\]/) {
55 die "E: Error in line - unknown field with [] ($line)\n";
56 }
57 # Grab regular fields
58 else {
59 $data{$1} = $2;
60 }
61}
62
63
64print "[Desktop Entry]\n";
65foreach my $key (sort keys %data) {
66 print "$key=".$data{$key}."\n";
67}
68foreach my $key (sort keys %tr) {
69 my %tr2 = %{$tr{$key}};
70 foreach my $k2 (reverse sort keys %tr2) {
71 print $k2;
72 print "[$key]" unless $key eq "0";
73 print "=". $tr2{$k2}. "\n";
74 }
75}
76