/* ******************************************************************************* * Copyright (C) 2002-2012, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ package com.ibm.icu.dev.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; } } }