com.google.gdata.util.common.base
Class CharEscaper

java.lang.Object
  extended by com.google.gdata.util.common.base.CharEscaper
All Implemented Interfaces:
Escaper

public abstract class CharEscaper
extends java.lang.Object
implements Escaper

An object that converts literal text into a format safe for inclusion in a particular context (such as an XML document). Typically (but not always), the inverse process of "unescaping" the text is performed automatically by the relevant parser.

For example, an XML escaper would convert the literal string "Foo<Bar>" into "Foo&lt;Bar&gt;" to prevent "<Bar>" from being confused with an XML tag. When the resulting XML document is parsed, the parser API will return this text as the original literal string "Foo<Bar>".

A CharEscaper instance is required to be stateless, and safe when used concurrently by multiple threads.

Several popular escapers are defined as constants in the class CharEscapers. To create your own escapers, use CharEscaperBuilder, or extend this class and implement the escape(char) method.


Constructor Summary
CharEscaper()
           
 
Method Summary
 java.lang.Appendable escape(java.lang.Appendable out)
          Returns an Appendable instance which automatically escapes all text appended to it before passing the resulting text to an underlying Appendable.
protected abstract  char[] escape(char c)
          Returns the escaped form of the given character, or null if this character does not need to be escaped.
 java.lang.String escape(java.lang.String string)
          Returns the escaped form of a given literal string.
protected  java.lang.String escapeSlow(java.lang.String s, int index)
          Returns the escaped form of a given literal string, starting at the given index.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CharEscaper

public CharEscaper()
Method Detail

escape

public java.lang.String escape(java.lang.String string)
Returns the escaped form of a given literal string.

Specified by:
escape in interface Escaper
Parameters:
string - the literal string to be escaped
Returns:
the escaped form of string
Throws:
java.lang.NullPointerException - if string is null

escape

public java.lang.Appendable escape(java.lang.Appendable out)
Returns an Appendable instance which automatically escapes all text appended to it before passing the resulting text to an underlying Appendable.

The methods of the returned object will propagate any exceptions thrown by the underlying Appendable, and will throw NullPointerException if asked to append null, but do not otherwise throw any exceptions.

The escaping behavior is identical to that of escape(String), so the following code is always equivalent to escaper.escape(string):

   StringBuilder sb = new StringBuilder();
   escaper.escape(sb).append(string);
   return sb.toString();

Specified by:
escape in interface Escaper
Parameters:
out - the underlying Appendable to append escaped output to
Returns:
an Appendable which passes text to out after escaping it
Throws:
java.lang.NullPointerException - if out is null.

escapeSlow

protected java.lang.String escapeSlow(java.lang.String s,
                                      int index)
Returns the escaped form of a given literal string, starting at the given index. This method is called by the escape(String) method when it discovers that escaping is required. It is protected to allow subclasses to override the fastpath escaping function to inline their escaping test. See CharEscaperBuilder for an example usage.

Parameters:
s - the literal string to be escaped
index - the index to start escaping from
Returns:
the escaped form of string
Throws:
java.lang.NullPointerException - if string is null

escape

protected abstract char[] escape(char c)
Returns the escaped form of the given character, or null if this character does not need to be escaped. If an empty array is returned, this effectively strips the input character from the resulting text.

If the character does not need to be escaped, this method should return null, rather than a one-character array containing the character itself. This enables the escaping algorithm to perform more efficiently.

An escaper is expected to be able to deal with any char value, so this method should not throw any exceptions.

Parameters:
c - the character to escape if necessary
Returns:
the replacement characters, or null if no escaping was needed