/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
* (C) Copyright IBM Corp. 1996, 1997 - All Rights Reserved
*
* The original version of this source code and documentation is copyrighted
* and owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These
* materials are provided under terms of a License Agreement between Taligent
* and Sun. This technology is protected by multiple US and International
* patents. This notice and attribution to Taligent may not be removed.
* Taligent is a registered trademark of Taligent, Inc.
*
*/
/**
* Utility class for normalizing and merging patterns for collation.
* This is to be used with MergeCollation for adding patterns to an
* existing rule table.
* @see MergeCollation
* @author Mark Davis, Helena Shih
*/
class PatternEntry {
/**
* Gets the current extension, quoted
*/
}
/**
* Gets the current chars, quoted
*/
}
/**
* WARNING this is used for searching in a Vector.
* Because Vector.indexOf doesn't take a comparator,
* this method is ill-defined and ignores strength.
*/
return result;
}
public int hashCode() {
}
/**
* For debugging.
*/
}
/**
* Gets the strength of the entry.
*/
final int getStrength() {
return strength;
}
/**
* Gets the expanding characters of the entry.
*/
return extension;
}
/**
* Gets the core characters of the entry.
*/
return chars;
}
// ===== privates =====
boolean showExtension,
boolean showWhiteSpace,
{
else
if (showWhiteSpace)
if (showWhiteSpace)
}
switch (strength) {
}
if (showWhiteSpace)
}
}
boolean inQuote = false;
inQuote = true;
} else {
inQuote = true;
} else {
switch (ch) {
case 0x0010: case '\f': case '\r':
case '\t': case '\n': case '@':
inQuote = true;
break;
case '\'':
inQuote = true;
break;
default:
if (inQuote) {
}
break;
}
}
}
if (inQuote)
}
//========================================================================
// Parsing a pattern into a list of PatternEntries....
//========================================================================
{
: "";
}
static class Parser {
private int i;
this.i = 0;
}
int newStrength = UNSET;
boolean inChars = true;
boolean inQuote = false;
if (inQuote) {
if (ch == '\'') {
inQuote = false;
} else {
}
} else switch (ch) {
newStrength = RESET; break;
case '\t':
case '\n':
case '\f':
case '\r':
case ' ': break; // skip whitespace TODO use Character
case '/': inChars = false; break;
case '\'':
inQuote = true;
break;
default:
if (newStrength == UNSET) {
throw new ParseException
("missing char (=,;<&) : " +
i);
}
throw new ParseException
if (inChars) {
} else {
}
break;
}
i++;
}
if (newStrength == UNSET)
return null;
throw new ParseException
("missing chars (=,;<&): " +
i);
}
}
// We re-use these objects in order to improve performance
}
return ((ch == '\u0020') ||
}
}