code: @Transformer
      public static RawData escape(Object o, Object escape) {
          if (isEmpty(o)) return RawData.NULL;
          if (o instanceof RawData)
              return (RawData) o;
          if (escape instanceof Escape) return ((Escape) escape).apply(o);
          if (isEmpty(escape)) return escape(o);
          String se = escape.toString();
          if ("json".equalsIgnoreCase(se)) return escapeJson(o);
          if ("xml".equalsIgnoreCase(se)) return escapeXml(o);
          if ("javascript".equalsIgnoreCase(se) || "js".equalsIgnoreCase(se)) return escapeJavaScript(o);
          if ("csv".equalsIgnoreCase(se)) return escapeCsv(o);
          if ("html".equalsIgnoreCase(se)) return escapeHtml(o);
          if ("raw".equalsIgnoreCase(se)) return raw(o);
          throw new IllegalArgumentException("Unknown escape scheme: " + se);
      }
docs: Return a {@link org.rythmengine.utils.RawData} type wrapper of
  an object with specified escaping scheme.
  <p/>
  <p>
  You can pass any type of object to specify the escaping scheme. However
  they will in the end converted to {@link #toString(Object) converted to String}
  and then determine which escaping to use:
  <p/>
  <ul>
  <li>json: {@link #escapeJSON(Object)} </li>
  <li>xml: {@link #escapeXML(Object)} </li>
  <li>javascript|js: {@link #escapeJavaScript(Object)} </li>
  <li>csv: {@link #escapeCSV(Object)} </li>
  <li>html: {@link #escapeCSV(Object)} </li>
  </ul>
  </p>
  <p/>
  <p>Note Object instance is converted to String before escaping</p>
  
  @param o
  @param escape
  @return escaped data