Mercurial > projects > dwt-win
annotate dwt/dwthelper/ResourceBundle.d @ 124:1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Tue, 12 Feb 2008 02:21:26 +0100 |
parents | 00a333240696 |
children | 184ab53b7785 |
rev | line source |
---|---|
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
1 /** |
0 | 2 * Authors: Frank Benoit <keinfarbton@googlemail.com> |
3 */ | |
4 module dwt.dwthelper.ResourceBundle; | |
5 | |
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
6 import tango.text.Util; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
7 import tango.io.Stdout; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
8 |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
9 |
0 | 10 class ResourceBundle { |
11 | |
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
12 char[][ char[] ] map; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
13 |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
14 public this( char[] data ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
15 char[] line; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
16 int dataIndex; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
17 |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
18 //tango.io.Stdout.Stdout.formatln( "properties put ..." ); |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
19 void readLine(){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
20 line.length = 0; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
21 char i = data[ dataIndex++ ]; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
22 while( dataIndex < data.length && i !is '\n' && i !is '\r' ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
23 line ~= i; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
24 i = data[ dataIndex++ ]; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
25 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
26 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
27 |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
28 //tango.io.Stdout.Stdout.formatln( "properties put {}", __LINE__ ); |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
29 bool linecontinue = false; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
30 bool iskeypart = true; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
31 char[] key; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
32 char[] value; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
33 nextline: |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
34 while( dataIndex < data.length ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
35 //tango.io.Stdout.Stdout.formatln( "properties put {} startline", __LINE__ ); |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
36 readLine(); |
124
1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
Frank Benoit <benoit@tionex.de>
parents:
84
diff
changeset
|
37 line = line.trim(); |
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
38 if( line.length is 0 ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
39 //tango.io.Stdout.Stdout.formatln( "properties put {} was 0 length", __LINE__ ); |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
40 continue; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
41 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
42 if( line[0] == '#' ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
43 //tango.io.Stdout.Stdout.formatln( "properties put {} was comment", __LINE__ ); |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
44 continue; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
45 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
46 int pos = 0; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
47 bool esc = false; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
48 if( !linecontinue ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
49 iskeypart = true; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
50 key = null; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
51 value = null; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
52 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
53 else{ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
54 linecontinue = false; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
55 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
56 while( pos < line.length ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
57 char c = line[pos]; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
58 if( esc ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
59 esc = false; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
60 switch( c ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
61 case 't': c = '\t'; break; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
62 case 'n': c = '\n'; break; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
63 case '\\': c = '\\'; break; |
124
1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
Frank Benoit <benoit@tionex.de>
parents:
84
diff
changeset
|
64 default: break; |
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
65 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
66 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
67 else{ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
68 if( c == '\\' ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
69 if( pos == line.length -1 ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
70 linecontinue = true; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
71 goto nextline; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
72 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
73 esc = true; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
74 pos++; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
75 continue; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
76 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
77 else if( iskeypart && c == '=' ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
78 pos++; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
79 iskeypart = false; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
80 continue; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
81 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
82 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
83 pos++; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
84 if( iskeypart ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
85 key ~= c; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
86 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
87 else{ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
88 value ~= c; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
89 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
90 } |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
91 if( iskeypart ){ |
124
1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
Frank Benoit <benoit@tionex.de>
parents:
84
diff
changeset
|
92 //tango.io.Stdout.Stdout.formatln( "dwt.dwthelper.ResourceBundle ctor cannot find '='." ); |
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
93 continue; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
94 } |
124
1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
Frank Benoit <benoit@tionex.de>
parents:
84
diff
changeset
|
95 key = key.trim(); |
1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
Frank Benoit <benoit@tionex.de>
parents:
84
diff
changeset
|
96 value = value.trim(); |
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
97 //tango.io.Stdout.Stdout.formatln( "properties put {}=>{}", key, value ); |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
98 |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
99 map[ key.dup ] = value.dup; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
100 //tango.io.Stdout.Stdout.formatln( "properties put {}", __LINE__ ); |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
101 } |
0 | 102 } |
103 | |
124
1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
Frank Benoit <benoit@tionex.de>
parents:
84
diff
changeset
|
104 public bool hasString( char[] key ){ |
1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
Frank Benoit <benoit@tionex.de>
parents:
84
diff
changeset
|
105 return ( key in map ) !is null; |
1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
Frank Benoit <benoit@tionex.de>
parents:
84
diff
changeset
|
106 } |
1da8c82b1c84
Add: hasString for ResourceBundle to indicate if the string has length 0 or is not present
Frank Benoit <benoit@tionex.de>
parents:
84
diff
changeset
|
107 |
0 | 108 public char[] getString( char[] key ){ |
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
109 if( auto v = key in map ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
110 return (*v).dup; |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
111 } |
0 | 112 return key; |
113 } | |
114 | |
115 public static ResourceBundle getBundle( char[] name ){ | |
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
116 return new ResourceBundle( null ); |
0 | 117 } |
84
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
118 public static ResourceBundle getBundleFromData( char[] data ){ |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
119 return new ResourceBundle( data ); |
00a333240696
FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents:
0
diff
changeset
|
120 } |
0 | 121 } |
122 | |
123 |