@@ -170,7 +170,7 @@ function utext_open(s::UTF16String)
170
170
err = UErrorCode[0 ]
171
171
p = ccall ((_utext_openUChars,iculib), Ptr{Void},
172
172
(Ptr{Void},Ptr{Uint16},Int64,Ptr{UErrorCode}),
173
- C_NULL , s. data, length (s. data), err)
173
+ C_NULL , s. data, length (s. data)- 1 , err)
174
174
@assert U_SUCCESS (err[1 ])
175
175
UText (p)
176
176
end
@@ -188,9 +188,9 @@ for f in [:u_strToLower, :u_strToUpper]
188
188
err = UErrorCode[0 ]
189
189
n = ccall (($ (symbol (string (' _' ,f))),iculib), Int32,
190
190
(Ptr{Uint16},Int32,Ptr{Uint16},Int32,Ptr{Uint8},Ptr{UErrorCode}),
191
- dest, destsiz, src, length (src), locale, err)
191
+ dest, destsiz, src, length (src)- 1 , locale, err)
192
192
U_FAILURE (err[1 ]) && error (" failed to map case" )
193
- return UTF16String (dest[1 : n])
193
+ return UTF16String (dest[1 : n+ 1 ])
194
194
end
195
195
end
196
196
end
@@ -202,9 +202,9 @@ function u_strFoldCase(s::UTF16String)
202
202
err = UErrorCode[0 ]
203
203
n = ccall ((_u_strFoldCase,iculib), Int32,
204
204
(Ptr{Uint16},Int32,Ptr{Uint16},Int32,Uint32,Ptr{UErrorCode}),
205
- dest, destsiz, src, length (src), 0 , err)
205
+ dest, destsiz, src, length (src)- 1 , 0 , err)
206
206
U_FAILURE (err[1 ]) && error (" failed to map case" )
207
- return UTF16String (dest[1 : n])
207
+ return UTF16String (dest[1 : n+ 1 ])
208
208
end
209
209
210
210
function u_strToTitle (s:: UTF16String )
@@ -216,9 +216,9 @@ function u_strToTitle(s::UTF16String)
216
216
Ptr{Void}, (Ptr{Void},), casemap)
217
217
n = ccall ((_u_strToTitle,iculib), Int32,
218
218
(Ptr{Uint16},Int32,Ptr{Uint16},Int32,Ptr{Void},Ptr{Uint8},Ptr{UErrorCode}),
219
- dest, destsiz, src, length (src), breakiter, locale, err)
219
+ dest, destsiz, src, length (src)- 1 , breakiter, locale, err)
220
220
U_FAILURE (err[1 ]) && error (" failed to map case" )
221
- return UTF16String (dest[1 : n])
221
+ return UTF16String (dest[1 : n+ 1 ])
222
222
end
223
223
224
224
# # ucasemap ##
@@ -344,13 +344,13 @@ function ucnv_open(name::ASCIIString)
344
344
end
345
345
346
346
function ucnv_toUChars (cnv:: UConverter , b:: Array{Uint8,1} )
347
- u = Array (Uint16, 2 * length (b))
347
+ u = zeros (Uint16, 2 * length (b))
348
348
err = UErrorCode[0 ]
349
349
n = ccall ((_ucnv_toUChars,iculibi18n), Int32,
350
350
(Ptr{Void},Ptr{UChar},Int32,Ptr{Cchar},Int32,Ptr{UErrorCode}),
351
351
cnv. p, u, length (u), b, length (b), err)
352
352
U_SUCCESS (err[1 ]) || error (" ICU: could not open converter " , name)
353
- UTF16String (u[1 : n])
353
+ UTF16String (u[1 : n+ 1 ])
354
354
end
355
355
356
356
# # ucol ##
@@ -370,7 +370,7 @@ function ucol_open(loc::LocaleString)
370
370
UCollator (p)
371
371
end
372
372
373
- function ucol_strcoll (c:: UCollator , a:: Array{Uint8,1} , b:: Array{Uint8,1} )
373
+ function ucol_strcoll (c:: UCollator , a:: UTF8String , b:: UTF8String )
374
374
err = UErrorCode[0 ]
375
375
o = ccall ((_ucol_strcollUTF8,iculibi18n), Int32,
376
376
(Ptr{Void},Ptr{Uint8},Int32,Ptr{Uint8},Int32,Ptr{UErrorCode}),
@@ -379,20 +379,15 @@ function ucol_strcoll(c::UCollator, a::Array{Uint8,1}, b::Array{Uint8,1})
379
379
o
380
380
end
381
381
382
- function ucol_strcoll (c:: UCollator , a:: Array{Uint16,1} , b:: Array{Uint16,1} )
382
+ function ucol_strcoll (c:: UCollator , a:: UTF16String , b:: UTF16String )
383
383
err = UErrorCode[0 ]
384
384
o = ccall ((_ucol_strcoll,iculibi18n), Int32,
385
385
(Ptr{Void},Ptr{Uint16},Int32,Ptr{Uint16},Int32,Ptr{UErrorCode}),
386
- c. p, a, length (a) , b, length (b) , err)
386
+ c. p, a. data , length (a. data) - 1 , b. data , length (b. data) - 1 , err)
387
387
@assert U_SUCCESS (err[1 ])
388
388
o
389
389
end
390
390
391
- ucol_strcoll (c:: UCollator , a:: UTF8String , b:: UTF8String ) =
392
- ucol_strcoll (c, a. data, b. data)
393
- ucol_strcoll (c:: UCollator , a:: UTF16String , b:: UTF16String ) =
394
- ucol_strcoll (c, a. data, b. data)
395
-
396
391
# # calendar ##
397
392
398
393
export ICUCalendar,
@@ -472,7 +467,7 @@ function ICUCalendar(timezone::String)
472
467
err = UErrorCode[0 ]
473
468
p = ccall ((_ucal_open,iculibi18n), Ptr{Void},
474
469
(Ptr{Uint16},Int32,Ptr{Uint8},Int32,Ptr{UErrorCode}),
475
- tz_u16. data, length (tz_u16. data), locale, 0 , err)
470
+ tz_u16. data, length (tz_u16. data)- 1 , locale, 0 , err)
476
471
ICUCalendar (p)
477
472
end
478
473
function ICUCalendar ()
@@ -541,21 +536,21 @@ end
541
536
542
537
function getTimeZoneDisplayName (cal:: ICUCalendar )
543
538
bufsz = 64
544
- buf = Array (Uint16, bufsz)
539
+ buf = zeros (Uint16, bufsz)
545
540
err = UErrorCode[0 ]
546
541
len = ccall ((_ucal_getTimeZoneDisplayName,iculibi18n), Int32,
547
542
(Ptr{Void},Int32,Ptr{Uint8},Ptr{UChar},Int32,Ptr{UErrorCode}),
548
543
cal. ptr, 1 , locale, buf, bufsz, err)
549
- UTF16String (buf[1 : len])
544
+ UTF16String (buf[1 : len+ 1 ])
550
545
end
551
546
552
547
function getDefaultTimeZone ()
553
548
bufsz = 64
554
- buf = Array (Uint16, bufsz)
549
+ buf = zeros (Uint16, bufsz)
555
550
err = UErrorCode[0 ]
556
551
len = ccall ((_ucal_getDefaultTimeZone,iculibi18n), Int32,
557
552
(Ptr{UChar},Int32,Ptr{UErrorCode}), buf, bufsz, err)
558
- UTF16String (buf[1 : len])
553
+ UTF16String (buf[1 : len+ 1 ])
559
554
end
560
555
561
556
export ICUDateFormat,
@@ -587,8 +582,8 @@ function ICUDateFormat(pattern::String, tz::String)
587
582
err = UErrorCode[0 ]
588
583
p = ccall ((_udat_open,iculibi18n), Ptr{Void},
589
584
(Int32, Int32, Ptr{Uint8}, Ptr{UChar}, Int32, Ptr{UChar}, Int32, Ptr{UErrorCode}),
590
- - 2 , - 2 , locale, tz_u16. data, length (tz_u16. data),
591
- pattern_u16. data, length (pattern_u16. data), err)
585
+ - 2 , - 2 , locale, tz_u16. data, length (tz_u16. data)- 1 ,
586
+ pattern_u16. data, length (pattern_u16. data)- 1 , err)
592
587
U_FAILURE (err[1 ]) && error (" bad date format" )
593
588
ICUDateFormat (p)
594
589
end
@@ -597,7 +592,7 @@ function ICUDateFormat(tstyle::Integer, dstyle::Integer, tz::String)
597
592
err = UErrorCode[0 ]
598
593
p = ccall ((_udat_open,iculibi18n), Ptr{Void},
599
594
(Int32, Int32, Ptr{Uint8}, Ptr{UChar}, Int32, Ptr{UChar}, Int32, Ptr{UErrorCode}),
600
- tstyle, dstyle, locale, tz_u16. data, length (tz_u16. data), C_NULL , - 1 , err)
595
+ tstyle, dstyle, locale, tz_u16. data, length (tz_u16. data)- 1 , C_NULL , - 1 , err)
601
596
U_FAILURE (err[1 ]) && error (" bad date format" )
602
597
ICUDateFormat (p)
603
598
end
@@ -613,15 +608,15 @@ function format(df::ICUDateFormat, millis::Float64)
613
608
(Ptr{Void}, Float64, Ptr{UChar}, Int32, Ptr{Void}, Ptr{UErrorCode}),
614
609
df. ptr, millis, buf, buflen, C_NULL , err)
615
610
U_FAILURE (err[1 ]) && error (" failed to format time" )
616
- UTF16String (buf[1 : len])
611
+ UTF16String (buf[1 : len+ 1 ])
617
612
end
618
613
619
614
function parse (df:: ICUDateFormat , s:: String )
620
615
s16 = utf16 (s)
621
616
err = UErrorCode[0 ]
622
617
ret = ccall ((_udat_parse,iculibi18n), Float64,
623
618
(Ptr{Void}, Ptr{UChar}, Int32, Ptr{Int32}, Ptr{UErrorCode}),
624
- df. ptr, s16. data, length (s16. data), C_NULL , err)
619
+ df. ptr, s16. data, length (s16. data)- 1 , C_NULL , err)
625
620
U_FAILURE (err[1 ]) && error (" failed to parse string" )
626
621
ret
627
622
end
0 commit comments