Skip to content

Commit b942c13

Browse files
committed
Fix for uppercase changes
1 parent 614db48 commit b942c13

File tree

5 files changed

+23
-22
lines changed

5 files changed

+23
-22
lines changed

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ git:
1717
## (tests will run but not make your overall status red)
1818
matrix:
1919
allow_failures:
20-
- julia: 1.0
20+
# - julia: 1.0
2121
- julia: nightly
2222

2323
## uncomment and modify the following lines to manually install system packages

Project.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ authors = ["ScottPJones <[email protected]>"]
44
keywords = ["Strings"]
55
license = "MIT"
66
uuid = "e79e7a6a-7bb1-5a4d-9d64-da657b06f53a"
7-
version = "0.1.9"
7+
version = "0.1.10"
88

99
[deps]
1010
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"

REQUIRE

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
julia 0.6 2-
22
MurmurHash3 0.1.5
33
ModuleInterfaceTools 0.1.6
4-
StrAPI 0.1.7
4+
StrAPI 0.1.8
55
CharSetEncodings 0.1.8
6-
ChrBase 0.1.5
6+
ChrBase 0.1.6

appveyor.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ platform:
1313
## (tests will run but not make your overall status red)
1414
matrix:
1515
allow_failures:
16-
- julia_version: 1.0
16+
# - julia_version: 1.0
1717
- julia_version: latest
1818

1919
branches:

src/casefold.jl

+18-17
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,21 @@ Copyright 2017-2018 Gandalf Software, Inc., Scott P. Jones
55
Licensed under MIT License, see LICENSE.md
66
=#
77

8+
_wide_lower_l(c) = ifelse(c > (V6_COMPAT ? 0xdf : 0xde), c != 0xf7, c == 0xb5)
9+
10+
@inline _wide_lower_ch(ch) =
11+
ch <= 0x7f ? _islower_a(ch) : (ch > 0xff ? _islower_u(ch) : _wide_lower_l(ch))
12+
13+
@inline _isupper_ch(ch) =
14+
ch <= 0x7f ? _isupper_a(ch) : (ch > 0xff ? _isupper_u(ch) : _isupper_l(ch))
15+
16+
_wide_lower_latin(ch) = (ch == 0xb5) | (ch == 0xff) | (!V6_COMPAT && (ch == 0xdf))
17+
18+
_wide_out_upper(ch) =
19+
ifelse(ch == 0xb5, 0x39c,
20+
ifelse(ch == 0xff, 0x178, ifelse(!V6_COMPAT && ch == 0xdf, 0x1e9e, ch%UInt16)))
21+
22+
823
function uppercase_first(str::MaybeSub{S}) where {C<:ASCIICSE,S<:Str{C}}
924
(len = ncodeunits(str)) == 0 && return str
1025
@preserve str begin
@@ -109,12 +124,6 @@ function uppercase_first(str::MaybeSub{S}) where {C<:LatinCSE,S<:Str{C}}
109124
end
110125
end
111126

112-
@static if V6_COMPAT
113-
_wide_lower_latin(ch) = (ch == 0xb5) | (ch == 0xff)
114-
else
115-
_wide_lower_latin(ch) = (ch == 0xb5) | (ch == 0xff) | (ch == 0xdf)
116-
end
117-
118127
# Special handling for characters that can't map into Latin1
119128
function uppercase_first(str::MaybeSub{S}) where {C<:_LatinCSE,S<:Str{C}}
120129
(len = ncodeunits(str)) == 0 && return str
@@ -128,7 +137,7 @@ function uppercase_first(str::MaybeSub{S}) where {C<:_LatinCSE,S<:Str{C}}
128137
Str(C, buf)
129138
elseif _wide_lower_latin(ch)
130139
buf, out = _allocate(UInt16, len)
131-
set_codeunit!(out, ifelse(ch == 0xb5, 0x39c, ifelse(ch == 0xff, 0x178, 0x1e9e)))
140+
set_codeunit!(out, _wide_out_upper(ch))
132141
# Perform the widen operation on the rest (should be done via SIMD)
133142
@inbounds for i = 2:len
134143
set_codeunit!(out += 2, get_codeunit(pnt += 2)%UInt16)
@@ -191,15 +200,7 @@ function _widenupper(beg::Ptr{UInt8}, off, len)
191200
out = bytoff(out, off)
192201
while out < fin
193202
ch = get_codeunit(cur)
194-
if ch == 0xb5
195-
set_codeunit!(out, 0x39c)
196-
elseif ch == 0xff
197-
set_codeunit!(out, 0x178)
198-
elseif !V6_COMPAT && (ch == 0xdf)
199-
set_codeunit!(out, 0x1e9e)
200-
else
201-
set_codeunit!(out, _can_upper(ch) ? ch - 0x20 : ch)
202-
end
203+
set_codeunit!(out, _can_upper(ch) ? ch - 0x20 : _wide_out_upper(ch))
203204
cur += 1
204205
out += 2
205206
end
@@ -319,7 +320,7 @@ function lowercase(str::MaybeSub{S}) where {C<:Union{UCS2_CSEs,UTF32_CSEs},S<:St
319320
pnt = beg = pointer(str)
320321
fin = beg + sizeof(str)
321322
while pnt < fin
322-
_can_lower_ch(get_codeunit(pnt)) && return _lower(C, beg, pnt-beg, ncodeunits(str))
323+
_isupper_ch(get_codeunit(pnt)) && return _lower(C, beg, pnt-beg, ncodeunits(str))
323324
pnt += sizeof(CU)
324325
end
325326
end

0 commit comments

Comments
 (0)