annotate dwt/dwthelper/utils.d @ 97:2e6eb5bd2c16

starting OLE
author Frank Benoit <benoit@tionex.de>
date Fri, 08 Feb 2008 19:49:32 +0100
parents 00a333240696
children ecba636b634e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
1 /**
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
2 * Authors: Frank Benoit <keinfarbton@googlemail.com>
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
3 */
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
4 module dwt.dwthelper.utils;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
5
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
6 public import dwt.dwthelper.System;
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
7 public import Math = tango.math.Math;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
8
97
2e6eb5bd2c16 starting OLE
Frank Benoit <benoit@tionex.de>
parents: 84
diff changeset
9 public import tango.core.Exception : IllegalArgumentException;
2e6eb5bd2c16 starting OLE
Frank Benoit <benoit@tionex.de>
parents: 84
diff changeset
10
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
11 import tango.io.Stdout;
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
12 import tango.stdc.stringz;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
13 import tango.text.Util;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
14 import tango.text.Unicode;
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
15 import tango.text.convert.Utf;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
16 import tango.stdc.stdlib : exit;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
17
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
18 void implMissing( char[] file, uint line ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
19 Stderr.formatln( "implementation missing in file {} line {}", file, line );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
20 Stderr.formatln( "exiting ..." );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
21 exit(1);
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
22 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
23
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
24 abstract class ArrayWrapper{
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
25 }
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
26 abstract class ValueWrapper{
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
27 }
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
28
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
29 class ArrayWrapperT(T) : ArrayWrapper {
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
30 public T[] array;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
31 public this( T[] data ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
32 array = data;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
33 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
34 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
35
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
36 class ValueWrapperT(T) : ValueWrapper {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
37 public T value;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
38 public this( T data ){
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
39 value = data;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
40 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
41 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
42
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
43 alias ValueWrapperT!(bool) ValueWrapperBool;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
44 alias ArrayWrapperT!(byte) ArrayWrapperByte;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
45 alias ArrayWrapperT!(int) ArrayWrapperInt;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
46 alias ArrayWrapperT!(Object) ArrayWrapperObject;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
47 alias ArrayWrapperT!(char) ArrayWrapperString;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
48 alias ArrayWrapperT!(char[]) ArrayWrapperString2;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
49
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
50 dchar getFirstCodepoint( char[] str ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
51 foreach( dchar d; str ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
52 return d;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
53 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
54 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
55 dchar CharacterToLower( dchar c ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
56 dchar[] r = tango.text.Unicode.toLower( [c] );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
57 return r[0];
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
58 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
59 dchar CharacterToUpper( dchar c ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
60 dchar[] r = tango.text.Unicode.toUpper( [c] );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
61 return r[0];
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
62 }
52
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
63 bool CharacterIsWhitespace( dchar c ){
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
64 return tango.text.Unicode.isWhitespace( c );
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
65 }
65
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
66 bool CharacterIsDigit( dchar c ){
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
67 return tango.text.Unicode.isDigit( c );
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
68 }
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
69
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
70 public int indexOf( char[] str, char searched ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
71 int res = tango.text.Util.locate( str, searched );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
72 if( res is str.length ) res = -1;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
73 return res;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
74 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
75
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
76 public int indexOf( char[] str, char searched, int startpos ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
77 int res = tango.text.Util.locate( str, searched, startpos );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
78 if( res is str.length ) res = -1;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
79 return res;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
80 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
81
65
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
82 public int indexOf(char[] str, char[] ch){
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
83 return indexOf( str, ch, 0 );
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
84 }
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
85
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
86 public int indexOf(char[] str, char[] ch, int start){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
87 int res = tango.text.Util.locatePattern( str, ch, start );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
88 if( res is str.length ) res = -1;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
89 return res;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
90 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
91
84
00a333240696 FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents: 79
diff changeset
92 public char[] replace( char[] str, char from, char to ){
00a333240696 FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents: 79
diff changeset
93 return tango.text.Util.replace( str.dup, from, to );
00a333240696 FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents: 79
diff changeset
94 }
00a333240696 FileDialog, sync dwthelper with dwt-linux, some TCHAR issues
Frank Benoit <benoit@tionex.de>
parents: 79
diff changeset
95
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
96 public char[] substring( char[] str, int start ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
97 return str[ start .. $ ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
98 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
99
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
100 public char[] substring( char[] str, int start, int end ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
101 return str[ start .. end ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
102 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
103
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
104 public wchar[] substring( wchar[] str, int start ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
105 return str[ start .. $ ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
106 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
107
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
108 public wchar[] substring( wchar[] str, int start, int end ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
109 return str[ start .. end ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
110 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
111
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
112 public char charAt( char[] str, int pos ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
113 return str[ pos ];
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
114 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
115
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
116 public void getChars( char[] src, int srcBegin, int srcEnd, char[] dst, int dstBegin){
23
f5482da87ed8 Image, ImageData
Frank Benoit <benoit@tionex.de>
parents: 22
diff changeset
117 dst[ dstBegin .. dstBegin + srcEnd - srcBegin ] = src[ srcBegin .. srcEnd ];
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
118 }
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
119
28
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
120 public wchar[] toCharArray( char[] str ){
30
1e14cb29290a TextLayout
Frank Benoit <benoit@tionex.de>
parents: 28
diff changeset
121 return toString16( str );
28
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
122 }
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
123
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
124 public bool endsWith( char[] src, char[] pattern ){
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
125 if( src.length < pattern.length ){
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
126 return false;
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
127 }
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
128 return src[ $-pattern.length .. $ ] == pattern;
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
129 }
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
130
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
131 public char[] toLowerCase( char[] src ){
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
132 return tango.text.Unicode.toLower( src );
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
133 }
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
134
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
135 static char[] toHex(uint value, bool prefix = true, int radix = 8){
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
136 return tango.text.convert.Integer.toString(
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
137 value,
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
138 radix is 10 ? tango.text.convert.Integer.Style.Signed :
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
139 radix is 8 ? tango.text.convert.Integer.Style.Octal :
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
140 radix is 16 ? tango.text.convert.Integer.Style.Hex :
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
141 tango.text.convert.Integer.Style.Signed,
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
142 prefix ? tango.text.convert.Integer.Flags.Prefix : tango.text.convert.Integer.Flags.None
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
143 );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
144 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
145
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
146 class NumberFormatException : IllegalArgumentException {
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
147 this( char[] e ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
148 super(e);
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
149 }
57
41dbc4d9faab Update to tango trunk -r3152. Thanks DavidLeon for the adjustment of TracedException to Exception and creating the patch.
Frank Benoit <benoit@tionex.de>
parents: 52
diff changeset
150 this( Exception e ){
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
151 super(e.toString);
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
152 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
153 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
154
79
67d24430822a Delayed DLL load
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
155 private struct GCStats {
40
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
156 size_t poolsize; // total size of pool
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
157 size_t usedsize; // bytes allocated
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
158 size_t freeblocks; // number of blocks marked FREE
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
159 size_t freelistsize; // total of memory on free lists
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
160 size_t pageblocks; // number of blocks marked PAGE
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
161 }
79
67d24430822a Delayed DLL load
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
162 private extern(C) GCStats gc_stats();
67d24430822a Delayed DLL load
Frank Benoit <benoit@tionex.de>
parents: 78
diff changeset
163
40
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
164 size_t RuntimeTotalMemory(){
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
165 GCStats s = gc_stats();
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
166 return s.poolsize;
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
167 }
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
168
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
169
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
170
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
171