annotate dwt/dwthelper/utils.d @ 15:1bea9f0c6f63

FontData, Font
author Frank Benoit <benoit@tionex.de>
date Fri, 25 Jan 2008 19:16:45 +0100
parents 5406a8f6526d
children 5f2e72114476
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
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
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
9 import tango.io.Stdout;
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
10 import tango.stdc.stringz;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
11 import tango.text.Util;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
12 import tango.text.Unicode;
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
13 import tango.text.convert.Utf;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
14 import tango.core.Exception;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
15 import tango.stdc.stdlib : exit;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
16
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
17 void implMissing( char[] file, uint line ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
18 Stderr.formatln( "implementation missing in file {} line {}", file, line );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
19 Stderr.formatln( "exiting ..." );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
20 exit(1);
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
21 }
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 abstract class ArrayWrapper{
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
24 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
25
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
26 class ArrayWrapperT(T) : ArrayWrapper {
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
27 public T[] array;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
28 public this( T[] data ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
29 array = data;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
30 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
31 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
32
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
33 alias ArrayWrapperT!(byte) ArrayWrapperByte;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
34 alias ArrayWrapperT!(int) ArrayWrapperInt;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
35 alias ArrayWrapperT!(Object) ArrayWrapperObject;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
36 alias ArrayWrapperT!(char) ArrayWrapperString;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
37 alias ArrayWrapperT!(char[]) ArrayWrapperString2;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
38
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
39 dchar getFirstCodepoint( char[] str ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
40 foreach( dchar d; str ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
41 return d;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
42 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
43 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
44 dchar CharacterToLower( dchar c ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
45 dchar[] r = tango.text.Unicode.toLower( [c] );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
46 return r[0];
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
47 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
48 dchar CharacterToUpper( dchar c ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
49 dchar[] r = tango.text.Unicode.toUpper( [c] );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
50 return r[0];
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
51 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
52
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
53 public int indexOf( char[] str, char searched ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
54 int res = tango.text.Util.locate( str, searched );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
55 if( res is str.length ) res = -1;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
56 return res;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
57 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
58
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
59 public int indexOf( char[] str, char searched, int startpos ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
60 int res = tango.text.Util.locate( str, searched, startpos );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
61 if( res is str.length ) res = -1;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
62 return res;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
63 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
64
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
65 public int indexOf(char[] str, char[] ch, int start){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
66 int res = tango.text.Util.locatePattern( str, ch, start );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
67 if( res is str.length ) res = -1;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
68 return res;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
69 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
70
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
71 public char[] substring( char[] str, int start ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
72 return str[ start .. $ ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
73 }
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 public char[] substring( char[] str, int start, int end ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
76 return str[ start .. end ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
77 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
78
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
79 public wchar[] substring( wchar[] str, int start ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
80 return str[ start .. $ ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
81 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
82
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
83 public wchar[] substring( wchar[] str, int start, int end ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
84 return str[ start .. end ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
85 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
86
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
87 public char charAt( char[] str, int pos ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
88 return str[ pos ];
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
89 }
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 static char[] toHex(uint value, bool prefix = true, int radix = 8){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
92 return tango.text.convert.Integer.toString(
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
93 value,
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
94 radix is 10 ? tango.text.convert.Integer.Style.Signed :
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
95 radix is 8 ? tango.text.convert.Integer.Style.Octal :
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
96 radix is 16 ? tango.text.convert.Integer.Style.Hex :
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
97 tango.text.convert.Integer.Style.Signed,
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
98 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
99 );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
100 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
101
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
102 class NumberFormatException : IllegalArgumentException {
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
103 this( char[] e ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
104 super(e);
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
105 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
106 this( TracedException e ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
107 super(e.toString);
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
108 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
109 }
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
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
113
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