| /* |
| ******************************************************************************* |
| * Copyright (C) 2002-2010, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| */ |
| package com.ibm.icu.dev.test.util; |
| |
| import com.ibm.icu.impl.Utility; |
| import com.ibm.icu.text.UTF16; |
| |
| public abstract class Quoter { |
| private static boolean DEBUG = false; |
| |
| protected boolean quoting = false; |
| protected StringBuffer output = new StringBuffer(); |
| |
| public void setQuoting(boolean value) { |
| quoting = value; |
| } |
| public boolean isQuoting() { |
| return quoting; |
| } |
| public void clear() { |
| quoting = false; |
| output.setLength(0); |
| } |
| public int length() { |
| return output.length(); |
| } |
| public Quoter append(String string) { |
| output.append(string); |
| return this; |
| } |
| public Quoter append(int codepoint) { |
| return append(UTF16.valueOf(codepoint)); |
| } |
| // warning, allows access to internals |
| public String toString() { |
| setQuoting(false); // finish quoting |
| return output.toString(); |
| } |
| /** |
| * Implements standard ICU rule quoting |
| */ |
| public static class RuleQuoter extends Quoter { |
| private StringBuffer quoteBuffer = new StringBuffer(); |
| public void setQuoting(boolean value) { |
| if (quoting == value) return; |
| if (quoting) { // stop quoting |
| Utility.appendToRule(output, (int)-1, true, false, quoteBuffer); // close previous quote |
| } |
| quoting = value; |
| } |
| public Quoter append(String s) { |
| if (DEBUG) System.out.println("\"" + s + "\""); |
| if (quoting) { |
| Utility.appendToRule(output, s, false, false, quoteBuffer); |
| } else { |
| output.append(s); |
| } |
| return this; |
| } |
| } |
| } |