UtilityExtensions.java
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
* Copyright (C) 2002-2010, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.impl;
import com.ibm.icu.text.Replaceable;
import com.ibm.icu.text.ReplaceableString;
import com.ibm.icu.text.Transliterator;
import com.ibm.icu.text.UnicodeMatcher;
/**
* @author Ram
*/
// This class contains utility functions so testing not needed
/// CLOVER:OFF
public class UtilityExtensions {
/**
* Append the given string to the rule. Calls the single-character version of appendToRule for
* each character.
*/
public static void appendToRule(
StringBuilder rule,
String text,
boolean isLiteral,
boolean escapeUnprintable,
StringBuilder quoteBuf) {
for (int i = 0; i < text.length(); ++i) {
// Okay to process in 16-bit code units here
Utility.appendToRule(rule, text.charAt(i), isLiteral, escapeUnprintable, quoteBuf);
}
}
/**
* Given a matcher reference, which may be null, append its pattern as a literal to the given
* rule.
*/
public static void appendToRule(
StringBuilder rule,
UnicodeMatcher matcher,
boolean escapeUnprintable,
StringBuilder quoteBuf) {
if (matcher != null) {
appendToRule(
rule, matcher.toPattern(escapeUnprintable), true, escapeUnprintable, quoteBuf);
}
}
/**
* For debugging purposes; format the given text in the form aaa{bbb|ccc|ddd}eee, where the {}
* indicate the context start and limit, and the || indicate the start and limit.
*/
public static String formatInput(ReplaceableString input, Transliterator.Position pos) {
StringBuilder appendTo = new StringBuilder();
formatInput(appendTo, input, pos);
return com.ibm.icu.impl.Utility.escape(appendTo.toString());
}
/**
* For debugging purposes; format the given text in the form aaa{bbb|ccc|ddd}eee, where the {}
* indicate the context start and limit, and the || indicate the start and limit.
*/
public static StringBuilder formatInput(
StringBuilder appendTo, ReplaceableString input, Transliterator.Position pos) {
if (0 <= pos.contextStart
&& pos.contextStart <= pos.start
&& pos.start <= pos.limit
&& pos.limit <= pos.contextLimit
&& pos.contextLimit <= input.length()) {
String b, c, d;
// a = input.substring(0, pos.contextStart);
b = input.substring(pos.contextStart, pos.start);
c = input.substring(pos.start, pos.limit);
d = input.substring(pos.limit, pos.contextLimit);
// e = input.substring(pos.contextLimit, input.length());
appendTo. // append(a).
append('{')
.append(b)
.append('|')
.append(c)
.append('|')
.append(d)
.append('}')
// .append(e)
;
} else {
appendTo.append(
"INVALID Position {cs="
+ pos.contextStart
+ ", s="
+ pos.start
+ ", l="
+ pos.limit
+ ", cl="
+ pos.contextLimit
+ "} on "
+ input);
}
return appendTo;
}
/** Convenience method. */
public static String formatInput(Replaceable input, Transliterator.Position pos) {
return formatInput((ReplaceableString) input, pos);
}
/** Convenience method. */
public static StringBuilder formatInput(
StringBuilder appendTo, Replaceable input, Transliterator.Position pos) {
return formatInput(appendTo, (ReplaceableString) input, pos);
}
}
// CLOVER:ON