{
  String encode(String text, boolean encodeCtl, boolean inAttr)  {    int len = text.length();    StringBuffer buf = null;    for (int i = 0; i < len; i++)      {        char c = text.charAt(i);        if (c == '<')          {            if (buf == null)              {                buf = new StringBuffer(text.substring(0, i));              }            buf.append("&lt;");          }        else if (c == '>')          {            if (buf == null)              {                buf = new StringBuffer(text.substring(0, i));              }            buf.append("&gt;");          }        else if (c == '&')          {            if (mode == Stylesheet.OUTPUT_HTML && (i + 1) < len &&                text.charAt(i + 1) == '{')              {                if (buf != null)                  {                    buf.append(c);                  }              }            else              {                if (buf == null)                  {                    buf = new StringBuffer(text.substring(0, i));                  }                buf.append("&amp;");              }          }        else if (c == '\'' && inAttr)          {            if (buf == null)              {                buf = new StringBuffer(text.substring(0, i));              }            if (mode == Stylesheet.OUTPUT_HTML)              // HTML does not define &apos;, use character entity ref              buf.append("&#x27;");            else            buf.append("&apos;");          }        else if (c == '"' && inAttr)          {            if (buf == null)              {                buf = new StringBuffer(text.substring(0, i));              }            buf.append("&quot;");          }        else if (encodeCtl)          {            if (c < 0x20)              {                if (buf == null)                  {                    buf = new StringBuffer(text.substring(0, i));                  }                buf.append('&');                buf.append('#');                buf.append((int) c);                buf.append(';');              }            else if (buf != null)              {                buf.append(c);              }          }        else if (buf != null)          {            buf.append(c);          }      }    return (buf == null) ? text : buf.toString();  }