MCPcopy Create free account
hub / github.com/antlr/codebuff / StringRenderer

Class StringRenderer

output/java8/1.4.12/StringRenderer.java:45–105  ·  view source on GitHub ↗

This render knows to perform a few format operations on String objects: upper: Convert to upper case. lower: Convert to lower case. cap: Convert first character to upper case. url-encode: xml-encode:</l

Source from the content-addressed store, hash-verified

43
44
45public class StringRenderer implements AttributeRenderer {
46 // trim(s) and strlen(s) built-in funcs; these are format options
47 @Override
48 public String toString(Object o, String formatString, Locale locale) {
49 String s = (String)o;
50 if ( formatString==null ) return s;
51 if ( formatString.equals("upper") ) return s.toUpperCase(locale);
52 if ( formatString.equals("lower") ) return s.toLowerCase(locale);
53 if ( formatString.equals("cap") ) {
54 return (s.length()>0) ? Character.toUpperCase(s.charAt(0))+s.substring(1) : s;
55 }
56 if ( formatString.equals("url-encode") ) {
57 try {
58 return URLEncoder.encode(s, "UTF-8");
59 }
60 catch (UnsupportedEncodingException ex) {
61 // UTF-8 is standard, should always be available
62 }
63 }
64 if ( formatString.equals("xml-encode") ) {
65 return escapeHTML(s);
66 }
67 return String.format(locale, formatString, s);
68 }
69
70 public static String escapeHTML(String s) {
71 if ( s==null ) {
72 return null;
73 }
74
75 StringBuilder buf = new StringBuilder(s.length());
76 int len = s.length();
77 for (int i = 0; i< len; i++) {
78 char c = s.charAt(i);
79 switch ( c ) {
80 case '&' :
81 buf.append("&amp;");
82 break;
83 case '<' :
84 buf.append("&lt;");
85 break;
86 case '>' :
87 buf.append("&gt;");
88 break;
89 case '\r' : case '\n' : case '\t' :
90 buf.append(c);
91 break;
92 default:
93 boolean control = c<' '; // 32
94 boolean aboveASCII = c>126;
95 if ( control || aboveASCII ) {
96 buf.append("&#");
97 buf.append((int)c);
98 buf.append(";");
99 }
100 else buf.append(c);
101 }
102 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected