Skip to content

Commit afd50a8

Browse files
haozhunsebthom
authored andcommitted
fix: char class casefold for certain chars
1 parent 03ac9a5 commit afd50a8

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

src/org/joni/ApplyCaseFold.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void apply(int from, int[]to, int length, Object o) {
5353
if (Config.CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS) {
5454
if ((inCC && !cc.isNot()) || (!inCC && cc.isNot())) {
5555
if (addFlag) {
56-
if (enc.minLength() > 1 || to[0] >= BitSet.SINGLE_BYTE_SIZE) {
56+
if (enc.minLength() > 1 || to[0] >= BitSet.SINGLE_BYTE_SIZE || enc.codeToMbcLength(to[0]) > 1) {
5757
cc.addCodeRange(env, to[0], to[0], false);
5858
} else {
5959
/* /(?i:[^A-C])/.match("a") ==> fail. */
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
3+
* this software and associated documentation files (the "Software"), to deal in
4+
* the Software without restriction, including without limitation the rights to
5+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
6+
* of the Software, and to permit persons to whom the Software is furnished to do
7+
* so, subject to the following conditions:
8+
*
9+
* The above copyright notice and this permission notice shall be included in all
10+
* copies or substantial portions of the Software.
11+
*
12+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18+
* SOFTWARE.
19+
*/
20+
package org.joni.test;
21+
22+
import org.jcodings.Encoding;
23+
import org.jcodings.specific.UTF8Encoding;
24+
import org.joni.Option;
25+
import org.joni.Syntax;
26+
27+
public class TestUtf8CaseFoldingLatin1Supplement extends Test {
28+
29+
@Override
30+
public int option() {
31+
return Option.DEFAULT;
32+
}
33+
34+
@Override
35+
public Encoding encoding() {
36+
return UTF8Encoding.INSTANCE;
37+
}
38+
39+
@Override
40+
public String testEncoding() {
41+
return "utf-8";
42+
}
43+
44+
@Override
45+
public Syntax syntax() {
46+
return Syntax.Java;
47+
}
48+
49+
@Override
50+
public void test() throws InterruptedException {
51+
// test ignorecase for Latin-1 Supplement
52+
x2s("[\\u00e0-\\u00e5]", "\u00c2", 0, 2, Option.IGNORECASE);
53+
x2s("[\\u00e2]", "\u00c2", 0, 2, Option.IGNORECASE);
54+
x2s("\\u00e2", "\u00c2", 0, 2, Option.IGNORECASE);
55+
}
56+
}

0 commit comments

Comments
 (0)