-rwxr-xr-x | development/create_html_docu | 20 | ||||
-rwxr-xr-x | development/cvs_add_html_skeleton | 5 | ||||
-rwxr-xr-x | development/cvs_add_translation | 16 | ||||
-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 | ||||
-rwxr-xr-x | development/mkHelpSkeleton | 116 | ||||
-rw-r--r-- | development/opie-1.mrproject | 151 | ||||
-rwxr-xr-x | development/sort_desktop_files.pl | 76 |
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 | |||
8 | echo "<html><head><title>$2</title></head><body>" > $4 | ||
9 | echo "<img src=\"$3.png\">" >> $4 | ||
10 | echo "<h1>$2</h1>" >> $4 | ||
11 | |||
12 | echo "<P align=\"center\">FIXME Description<br>" >> $4 | ||
13 | echo "<ul align=\"left\">" >> $4 | ||
14 | echo "<li><a href=\"$1/about.html\">About</a></li>" >> $4 | ||
15 | echo "</ul>" >> $4 | ||
16 | echo "</body></html>" >> $4 | ||
17 | mkdir $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 | |||
3 | echo "Adding HTML files for $1 to CVS" | ||
4 | |||
5 | 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 @@ | |||
1 | #!/bin/sh | ||
2 | |||
3 | foo="" | ||
4 | |||
5 | for i in i18n/??; | ||
6 | do | ||
7 | foo="$foo $i/$1" | ||
8 | |||
9 | done | ||
10 | for i in i18n/??_??; | ||
11 | do | ||
12 | foo="$foo $i/$1" | ||
13 | |||
14 | done | ||
15 | |||
16 | 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 @@ | |||
1 | <!-- | ||
2 | <?php | ||
3 | $page = false; | ||
4 | if (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 | |||
16 | require_once "opie-todo.inc"; | ||
17 | |||
18 | parse("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 | ||
42 | if ($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 | |||
3 | class 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 | |||
32 | class 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 | |||
63 | class 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 .= '<'.$this->resp_email[$i].'>'; | ||
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 | |||
123 | function 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 | |||
181 | function 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 | |||
212 | function 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 | |||
226 | function 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 | |||
252 | function 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 | |||
6 | This file serves as central repository of planned KDE features. It's parsed by | ||
7 | the PHP scripts in "features.inc" which are used by "kde-3.2-features.html" to | ||
8 | generate HTML versions for the web. | ||
9 | |||
10 | If you plan to add a feature to KDE please add it to this file. A feature can | ||
11 | have one of three status types: "todo", "inprogress", "done". Please update | ||
12 | the status from time to time. For a release there shouldn't be any features | ||
13 | with other states than "done". If you can't complete a feature for a release | ||
14 | please move the feature to the next release. The "target" attribute specifies | ||
15 | for 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 | ||
17 | versions as needed. | ||
18 | |||
19 | Each feature consists of a summary giving a short description what the feature is | ||
20 | about and one or more responsible persons. | ||
21 | |||
22 | A 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 | ||
24 | DTD. If there are errors in the XML document they will be shown, if not the | ||
25 | command will not output anything. | ||
26 | |||
27 | If you have questions or comments please post them to the mailing list or contact | ||
28 | Cornelius 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 | """ | ||
3 | This 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 | |||
7 | import os | ||
8 | import sys | ||
9 | |||
10 | COUNTRYCODES = "da de en fr nl pl hu no pt it pt_BR ja sl zh_CN es ko zh_TW".split() | ||
11 | OPIEDIR = 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 | |||
24 | def 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 | #------------------------------------------------------# | ||
49 | def 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 | #------------------------------------------------------# | ||
64 | def 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 | #------------------------------------------------------# | ||
81 | def 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 | #------------------------------------------------------# | ||
88 | def fail( reason ): | ||
89 | """Fails with a reason.""" | ||
90 | print reason | ||
91 | sys.exit( -1 ) | ||
92 | |||
93 | #------------------------------------------------------# | ||
94 | def checkUsage( args ): | ||
95 | """Checks calling syntax.""" | ||
96 | |||
97 | if len( args ) < 2: | ||
98 | fail( """ | ||
99 | Usage: %s <application>.desktop [countrycode] | ||
100 | |||
101 | If no countrycode is given, defaults to 'en' | ||
102 | If countrycode 'all' is given, generates skeletons | ||
103 | for all known countrycodes: %s""" % ( args[0], ", ".join( COUNTRYCODES ) ) ) | ||
104 | |||
105 | #------------------------------------------------------# | ||
106 | |||
107 | if __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 ( < > ) and (<< >> ) show odd behaviour ( > ) 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 <qt>" 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 " 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 | |||
19 | use strict; | ||
20 | use 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); | ||
26 | die "E: File does not start with [Desktop Entry] ($line)\n" unless $line =~ /^\[Desktop Entry\]$/; | ||
27 | |||
28 | my $end=0; | ||
29 | while($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 | |||
64 | print "[Desktop Entry]\n"; | ||
65 | foreach my $key (sort keys %data) { | ||
66 | print "$key=".$data{$key}."\n"; | ||
67 | } | ||
68 | foreach 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 | |||