diff --git a/src/org/joni/ApplyCaseFold.java b/src/org/joni/ApplyCaseFold.java index ca10da1..77b27fd 100644 --- a/src/org/joni/ApplyCaseFold.java +++ b/src/org/joni/ApplyCaseFold.java @@ -53,7 +53,7 @@ public void apply(int from, int[]to, int length, Object o) { if (Config.CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS) { if ((inCC && !cc.isNot()) || (!inCC && cc.isNot())) { if (addFlag) { - if (enc.minLength() > 1 || to[0] >= BitSet.SINGLE_BYTE_SIZE) { + if (enc.minLength() > 1 || to[0] >= BitSet.SINGLE_BYTE_SIZE || enc.codeToMbcLength(to[0]) > 1) { cc.addCodeRange(env, to[0], to[0], false); } else { /* /(?i:[^A-C])/.match("a") ==> fail. */ diff --git a/test/org/joni/test/TestUtf8CaseFoldingLatin1Supplement.java b/test/org/joni/test/TestUtf8CaseFoldingLatin1Supplement.java new file mode 100644 index 0000000..69796af --- /dev/null +++ b/test/org/joni/test/TestUtf8CaseFoldingLatin1Supplement.java @@ -0,0 +1,56 @@ +/* + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.joni.test; + +import org.jcodings.Encoding; +import org.jcodings.specific.UTF8Encoding; +import org.joni.Option; +import org.joni.Syntax; + +public class TestUtf8CaseFoldingLatin1Supplement extends Test { + + @Override + public int option() { + return Option.DEFAULT; + } + + @Override + public Encoding encoding() { + return UTF8Encoding.INSTANCE; + } + + @Override + public String testEncoding() { + return "utf-8"; + } + + @Override + public Syntax syntax() { + return Syntax.Java; + } + + @Override + public void test() throws InterruptedException { + // test ignorecase for Latin-1 Supplement + x2s("[\\u00e0-\\u00e5]", "\u00c2", 0, 2, Option.IGNORECASE); + x2s("[\\u00e2]", "\u00c2", 0, 2, Option.IGNORECASE); + x2s("\\u00e2", "\u00c2", 0, 2, Option.IGNORECASE); + } +}