windows-pr 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +8 -0
- data/lib/windows/error.rb +3 -3
- data/lib/windows/unicode.rb +20 -36
- data/test/tc_unicode.rb +59 -31
- data/windows-pr.gemspec +2 -2
- metadata +3 -2
data/CHANGES
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
= 0.9.1 - 28-Jul-2008
|
2
|
+
* Yet another refactoring of the multi_to_wide and wide_to_multi helper
|
3
|
+
methods in the Windows::Unicode module. In addition to a bug fix, they
|
4
|
+
now raise an ArgumentError if they fail.
|
5
|
+
* Yet another tweak to get_last_error in the Windows::Error module. It now
|
6
|
+
always uses the explicit ANSI version of the FormatMessage function.
|
7
|
+
* Added tests for the multi_to_wide and wide_to_multi helper methods.
|
8
|
+
|
1
9
|
= 0.9.0 - 26-Jul-2008
|
2
10
|
* The process of converting prototypes from 'P' to 'S' has begun. This
|
3
11
|
means that this library now requires win32-api 1.2.0 or later.
|
data/lib/windows/error.rb
CHANGED
@@ -418,10 +418,10 @@ module Windows
|
|
418
418
|
# returns a human readable string.
|
419
419
|
#
|
420
420
|
def get_last_error(err_num = GetLastError.call)
|
421
|
-
buf =
|
421
|
+
buf = 0.chr * 260
|
422
422
|
flags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY
|
423
|
-
|
424
|
-
buf.
|
423
|
+
FormatMessageA.call(flags, 0, err_num, 0, buf, buf.size, 0)
|
424
|
+
buf.strip
|
425
425
|
end
|
426
426
|
|
427
427
|
# Macros from WinError.h
|
data/lib/windows/unicode.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'windows/api'
|
2
2
|
require 'windows/msvcrt/string'
|
3
|
+
require 'windows/error'
|
3
4
|
|
4
5
|
module Windows
|
5
6
|
module Unicode
|
6
7
|
include Windows::MSVCRT::String
|
8
|
+
include Windows::Error
|
7
9
|
|
8
10
|
API.auto_namespace = 'Windows::Unicode'
|
9
11
|
API.auto_constant = true
|
@@ -95,24 +97,16 @@ module Windows
|
|
95
97
|
encoding = ($KCODE == 'UTF8') ? CP_UTF8 : CP_ACP
|
96
98
|
end
|
97
99
|
|
98
|
-
|
99
|
-
|
100
|
-
int = MultiByteToWideChar(
|
101
|
-
encoding,
|
102
|
-
0,
|
103
|
-
string,
|
104
|
-
strlen(string),
|
105
|
-
buf,
|
106
|
-
strlen(buf)
|
107
|
-
)
|
100
|
+
int = MultiByteToWideChar(encoding, 0, string, -1, nil, 0)
|
108
101
|
|
102
|
+
# Trailing nulls are retained
|
109
103
|
if int > 0
|
110
|
-
|
111
|
-
|
112
|
-
|
104
|
+
buf = ' ' * int * 2
|
105
|
+
MultiByteToWideChar(encoding, 0, string, -1, buf, int)
|
106
|
+
buf
|
113
107
|
else
|
114
|
-
|
115
|
-
end
|
108
|
+
raise ArgumentError, get_last_error
|
109
|
+
end
|
116
110
|
end
|
117
111
|
|
118
112
|
# Maps a wide character string to a new character string using the
|
@@ -121,34 +115,24 @@ module Windows
|
|
121
115
|
#
|
122
116
|
# If the function fails it simply returns the string as-is.
|
123
117
|
#
|
124
|
-
def wide_to_multi(
|
125
|
-
return nil unless
|
126
|
-
raise TypeError unless
|
118
|
+
def wide_to_multi(wstring, encoding=nil)
|
119
|
+
return nil unless wstring
|
120
|
+
raise TypeError unless wstring.is_a?(String)
|
127
121
|
|
128
122
|
unless encoding
|
129
123
|
encoding = ($KCODE == 'UTF8') ? CP_UTF8 : CP_ACP
|
130
124
|
end
|
131
|
-
|
132
|
-
buf = ' ' * wcslen(string)
|
133
|
-
|
134
|
-
int = WideCharToMultiByte(
|
135
|
-
encoding,
|
136
|
-
0,
|
137
|
-
string,
|
138
|
-
wcslen(string),
|
139
|
-
buf,
|
140
|
-
strlen(buf),
|
141
|
-
0,
|
142
|
-
0
|
143
|
-
)
|
144
125
|
|
126
|
+
int = WideCharToMultiByte(encoding, 0, wstring, -1, 0, 0, nil, nil)
|
127
|
+
|
128
|
+
# Trailing nulls are stripped
|
145
129
|
if int > 0
|
146
|
-
|
147
|
-
|
148
|
-
|
130
|
+
buf = ' ' * int
|
131
|
+
WideCharToMultiByte(encoding, 0, wstring, -1, buf, strlen(buf), nil, nil)
|
132
|
+
buf[ /^[^\0]*/ ]
|
149
133
|
else
|
150
|
-
|
151
|
-
end
|
134
|
+
raise ArgumentError, get_last_error
|
135
|
+
end
|
152
136
|
end
|
153
137
|
end
|
154
138
|
end
|
data/test/tc_unicode.rb
CHANGED
@@ -6,45 +6,73 @@
|
|
6
6
|
require "windows/unicode"
|
7
7
|
require "test/unit"
|
8
8
|
|
9
|
-
class UnicodeFoo
|
10
|
-
include Windows::Unicode
|
11
|
-
end
|
12
|
-
|
13
9
|
class TC_Windows_Unicode < Test::Unit::TestCase
|
14
|
-
|
15
|
-
@foo = UnicodeFoo.new
|
16
|
-
end
|
10
|
+
include Windows::Unicode
|
17
11
|
|
18
12
|
def test_numeric_constants
|
19
|
-
assert_equal(0,
|
20
|
-
assert_equal(1,
|
21
|
-
assert_equal(2,
|
22
|
-
assert_equal(3,
|
23
|
-
assert_equal(42,
|
24
|
-
assert_equal(65000,
|
25
|
-
assert_equal(65001,
|
13
|
+
assert_equal(0, CP_ACP)
|
14
|
+
assert_equal(1, CP_OEMCP)
|
15
|
+
assert_equal(2, CP_MACCP)
|
16
|
+
assert_equal(3, CP_THREAD_ACP)
|
17
|
+
assert_equal(42, CP_SYMBOL)
|
18
|
+
assert_equal(65000, CP_UTF7)
|
19
|
+
assert_equal(65001, CP_UTF8)
|
26
20
|
|
27
|
-
assert_equal(0x00000001,
|
28
|
-
assert_equal(0x00000002,
|
29
|
-
assert_equal(0x00000004,
|
30
|
-
assert_equal(0x00000008,
|
21
|
+
assert_equal(0x00000001, MB_PRECOMPOSED)
|
22
|
+
assert_equal(0x00000002, MB_COMPOSITE)
|
23
|
+
assert_equal(0x00000004, MB_USEGLYPHCHARS)
|
24
|
+
assert_equal(0x00000008, MB_ERR_INVALID_CHARS)
|
31
25
|
|
32
|
-
assert_equal(0x00000200,
|
33
|
-
assert_equal(0x00000010,
|
34
|
-
assert_equal(0x00000020,
|
35
|
-
assert_equal(0x00000040,
|
36
|
-
assert_equal(0x00000400,
|
26
|
+
assert_equal(0x00000200, WC_COMPOSITECHECK)
|
27
|
+
assert_equal(0x00000010, WC_DISCARDNS)
|
28
|
+
assert_equal(0x00000020, WC_SEPCHARS)
|
29
|
+
assert_equal(0x00000040, WC_DEFAULTCHAR)
|
30
|
+
assert_equal(0x00000400, WC_NO_BEST_FIT_CHARS)
|
37
31
|
end
|
38
32
|
|
39
33
|
def test_method_constants
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
34
|
+
assert_respond_to(self, :GetTextCharset)
|
35
|
+
assert_respond_to(self, :GetTextCharsetInfo)
|
36
|
+
assert_respond_to(self, :IsDBCSLeadByte)
|
37
|
+
assert_respond_to(self, :IsDBCSLeadByteEx)
|
38
|
+
assert_respond_to(self, :IsTextUnicode)
|
39
|
+
assert_respond_to(self, :MultiByteToWideChar)
|
40
|
+
assert_respond_to(self, :TranslateCharsetInfo)
|
41
|
+
assert_respond_to(self, :WideCharToMultiByte)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_multi_to_wide
|
45
|
+
assert_respond_to(self, :multi_to_wide)
|
46
|
+
assert_equal("\000\000", multi_to_wide(''))
|
47
|
+
assert_equal("h\000e\000l\000l\000o\000\000\000", multi_to_wide('hello'))
|
48
|
+
assert_equal("\316\000\" \316\000\273\000\316\000\273\000\316\000\254\000\317\000\222\001\000\000", multi_to_wide("Ελλάσ"))
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_multi_to_wide_with_encoding
|
52
|
+
assert_equal("h\000e\000l\000l\000o\000\000\000", multi_to_wide('hello', CP_UTF8))
|
53
|
+
assert_equal("\225\003\273\003\273\003\254\003\303\003\000\000", multi_to_wide("Ελλάσ", CP_UTF8))
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_multi_to_wide_expected_errors
|
57
|
+
assert_raise(TypeError){ multi_to_wide(1) }
|
58
|
+
assert_raise(TypeError){ multi_to_wide([]) }
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_wide_to_multi
|
62
|
+
assert_respond_to(self, :wide_to_multi)
|
63
|
+
assert_equal('', wide_to_multi("\000\000"))
|
64
|
+
assert_equal('hello', wide_to_multi("h\000e\000l\000l\000o\000\000\000"))
|
65
|
+
assert_equal("Ελλάσ", wide_to_multi("\316\000\" \316\000\273\000\316\000\273\000\316\000\254\000\317\000\222\001\000\000"))
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_wide_to_multi_with_encoding
|
69
|
+
assert_equal('hello', wide_to_multi("h\000e\000l\000l\000o\000\000\000"), CP_UTF8)
|
70
|
+
assert_equal("Ελλάσ", wide_to_multi("\225\003\273\003\273\003\254\003\303\003\000\000", CP_UTF8))
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_wide_to_multi_expected_errors
|
74
|
+
assert_raise(TypeError){ wide_to_multi(1) }
|
75
|
+
assert_raise(TypeError){ wide_to_multi([]) }
|
48
76
|
end
|
49
77
|
|
50
78
|
def teardown
|
data/windows-pr.gemspec
CHANGED
@@ -2,8 +2,8 @@ require "rubygems"
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
4
|
gem.name = "windows-pr"
|
5
|
-
gem.version = "0.9.
|
6
|
-
gem.
|
5
|
+
gem.version = "0.9.1"
|
6
|
+
gem.authors = ["Daniel J. Berger", "Park Heesob"]
|
7
7
|
gem.email = "djberg96@gmail.com"
|
8
8
|
gem.homepage = "http://www.rubyforge.org/projects/win32utils"
|
9
9
|
gem.rubyforge_project = "win32utils"
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: windows-pr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
8
|
+
- Park Heesob
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date: 2008-07-
|
13
|
+
date: 2008-07-29 00:00:00 -06:00
|
13
14
|
default_executable:
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|