1 52 53 package freemarker.core; 54 55 import freemarker.template.*; 56 import freemarker.template.utility.StringUtil; 57 58 import java.io.StringReader ; 59 import java.util.StringTokenizer ; 60 61 62 65 66 abstract class StringBuiltins { 67 abstract static class StringBuiltIn extends BuiltIn { 68 TemplateModel _getAsTemplateModel(Environment env) 69 throws TemplateException 70 { 71 return calculateResult(target.getStringValue(env), env); 72 } 73 abstract TemplateModel calculateResult(String s, Environment env) throws TemplateException; 74 } 75 76 static class capitalizeBI extends StringBuiltIn { 77 TemplateModel calculateResult(String s, Environment env) { 78 return new SimpleScalar(StringUtil.capitalize(s)); 79 } 80 } 81 82 static class chop_linebreakBI extends StringBuiltIn { 83 TemplateModel calculateResult(String s, Environment env) { 84 return new SimpleScalar(StringUtil.chomp(s)); 85 } 86 } 87 88 static class j_stringBI extends StringBuiltIn { 89 TemplateModel calculateResult(String s, Environment env) { 90 return new SimpleScalar(StringUtil.javaStringEnc(s)); 91 } 92 } 93 94 static class js_stringBI extends StringBuiltIn { 95 TemplateModel calculateResult(String s, Environment env) { 96 return new SimpleScalar(StringUtil.javaScriptStringEnc(s)); 97 } 98 } 99 100 static class cap_firstBI extends StringBuiltIn { 101 TemplateModel calculateResult(String s, Environment env) { 102 int i = 0; 103 int ln = s.length(); 104 while (i < ln && Character.isWhitespace(s.charAt(i))) { 105 i++; 106 } 107 if (i < ln) { 108 StringBuffer b = new StringBuffer (s); 109 b.setCharAt(i, Character.toUpperCase(s.charAt(i))); 110 s = b.toString(); 111 } 112 return new SimpleScalar(s); 113 } 114 } 115 116 static class uncap_firstBI extends StringBuiltIn { 117 TemplateModel calculateResult(String s, Environment env) { 118 int i = 0; 119 int ln = s.length(); 120 while (i < ln && Character.isWhitespace(s.charAt(i))) { 121 i++; 122 } 123 if (i < ln) { 124 StringBuffer b = new StringBuffer (s); 125 b.setCharAt(i, Character.toLowerCase(s.charAt(i))); 126 s = b.toString(); 127 } 128 return new SimpleScalar(s); 129 } 130 } 131 132 static class upper_caseBI extends StringBuiltIn { 133 TemplateModel calculateResult(String s, Environment env) 134 { 135 return new SimpleScalar(s.toUpperCase(env.getLocale())); 136 } 137 } 138 139 static class lower_caseBI extends StringBuiltIn { 140 TemplateModel calculateResult(String s, Environment env) 141 { 142 return new SimpleScalar(s.toLowerCase(env.getLocale())); 143 } 144 } 145 146 static class word_listBI extends StringBuiltIn { 147 TemplateModel calculateResult(String s, Environment env) { 148 SimpleSequence result = new SimpleSequence(); 149 StringTokenizer st = new StringTokenizer (s); 150 while (st.hasMoreTokens()) { 151 result.add(st.nextToken()); 152 } 153 return result; 154 } 155 } 156 157 static class evalBI extends StringBuiltIn { 158 TemplateModel calculateResult(String s, Environment env) throws TemplateException 159 { 160 SimpleCharStream scs = new SimpleCharStream( 161 new StringReader ("(" + s + ")"), target.beginLine, 162 target.beginColumn, s.length() + 2); 163 FMParserTokenManager token_source = new FMParserTokenManager(scs); 164 token_source.SwitchTo(FMParserConstants.FM_EXPRESSION); 165 FMParser parser = new FMParser(token_source); 166 parser.template = getTemplate(); 167 Expression exp = null; 168 try { 169 exp = parser.Expression(); 170 } catch (ParseException pe) { 171 throw new TemplateException(pe, env); 172 } 173 return exp.getAsTemplateModel(env); 174 } 175 } 176 177 static class numberBI extends StringBuiltIn { 178 TemplateModel calculateResult(String s, Environment env) throws TemplateException 179 { 180 try { 181 return new SimpleNumber(env.getArithmeticEngine().toNumber(s)); 182 } 183 catch(NumberFormatException nfe) { 184 String mess = "Error: " + getStartLocation() 185 + "\nExpecting a number here, found: " + s; 186 throw new NonNumericalException(mess, env); 187 } 188 } 189 } 190 191 } | Popular Tags |