(Writer w, String s, ISeq args)
| 2117 | } |
| 2118 | |
| 2119 | static public ISeq doFormat(Writer w, String s, ISeq args) throws IOException{ |
| 2120 | for(int i = 0; i < s.length();) { |
| 2121 | char c = s.charAt(i++); |
| 2122 | switch(Character.toLowerCase(c)) { |
| 2123 | case '~': |
| 2124 | char d = s.charAt(i++); |
| 2125 | switch(Character.toLowerCase(d)) { |
| 2126 | case '%': |
| 2127 | w.write('\n'); |
| 2128 | break; |
| 2129 | case 't': |
| 2130 | w.write('\t'); |
| 2131 | break; |
| 2132 | case 'a': |
| 2133 | if(args == null) |
| 2134 | throw new IllegalArgumentException("Missing argument"); |
| 2135 | RT.formatAesthetic(w, RT.first(args)); |
| 2136 | args = RT.next(args); |
| 2137 | break; |
| 2138 | case 's': |
| 2139 | if(args == null) |
| 2140 | throw new IllegalArgumentException("Missing argument"); |
| 2141 | RT.formatStandard(w, RT.first(args)); |
| 2142 | args = RT.next(args); |
| 2143 | break; |
| 2144 | case '{': |
| 2145 | int j = s.indexOf("~}", i); //note - does not nest |
| 2146 | if(j == -1) |
| 2147 | throw new IllegalArgumentException("Missing ~}"); |
| 2148 | String subs = s.substring(i, j); |
| 2149 | for(ISeq sargs = RT.seq(RT.first(args)); sargs != null;) |
| 2150 | sargs = doFormat(w, subs, sargs); |
| 2151 | args = RT.next(args); |
| 2152 | i = j + 2; //skip ~} |
| 2153 | break; |
| 2154 | case '^': |
| 2155 | if(args == null) |
| 2156 | return null; |
| 2157 | break; |
| 2158 | case '~': |
| 2159 | w.write('~'); |
| 2160 | break; |
| 2161 | default: |
| 2162 | throw new IllegalArgumentException("Unsupported ~ directive: " + d); |
| 2163 | } |
| 2164 | break; |
| 2165 | default: |
| 2166 | w.write(c); |
| 2167 | } |
| 2168 | } |
| 2169 | return args; |
| 2170 | } |
| 2171 | ///////////////////////////////// values ////////////////////////// |
| 2172 | |
| 2173 | static public Object[] setValues(Object... vals){ |
no test coverage detected