1 10 package org.mmbase.util.transformers; 11 12 import java.io.Reader ; 13 import java.io.Writer ; 14 import java.util.HashMap ; 15 import java.util.Map ; 16 17 18 24 25 public class Javascript extends ConfigurableReaderTransformer implements CharTransformer { 26 private final static String SINGLE_QUOTES = "JAVASCRIPT_ESCAPE_SINGLE_QUOTES"; 27 private final static String DOUBLE_QUOTES = "JAVASCRIPT_ESCAPE_SINGLE_QUOTES"; 28 public final static int ESCAPE_SINGLE_QUOTES = 1; 29 public final static int ESCAPE_DOUBLE_QUOTES = 2; 30 31 public Javascript() { 32 super(ESCAPE_SINGLE_QUOTES); 33 } 34 35 public Javascript(int conf) { 36 super(conf); 37 } 38 39 44 public static Writer escapeChar(Reader r, Writer w, char escapeChar) { 45 try { 46 while (true) { 47 int c = r.read(); 48 if (c == -1) break; 49 if(c == escapeChar) w.write('\\'); 50 w.write(c); 51 } 52 } catch (java.io.IOException e) { 53 } 54 return w; 55 } 56 57 60 public static Writer escapeCharBack(Reader r, Writer w) { 61 try { 62 boolean skipNext = false; 63 while (true) { 64 int c = r.read(); 65 if (c == -1) break; 66 if(c == '\'') { 67 if (skipNext) { 68 skipNext = false; 69 } else { 70 w.write(c); 71 skipNext = true; 72 } 73 } else { 74 w.write(c); 75 skipNext = false; 76 } 77 } 78 } catch (java.io.IOException e) { 79 } 80 return w; 81 } 82 83 86 87 public Map transformers() { 88 Map h = new HashMap (); 89 h.put(SINGLE_QUOTES, new Config(Sql.class, ESCAPE_SINGLE_QUOTES, "Escape single quotes for Javascript statements")); 90 h.put(DOUBLE_QUOTES, new Config(Sql.class, ESCAPE_DOUBLE_QUOTES, "Escape single quotes for Javascript statements")); 91 return h; 92 } 93 94 public Writer transform(Reader r, Writer w) { 95 switch(to){ 96 case ESCAPE_SINGLE_QUOTES: return escapeChar(r, w, '\''); 97 case ESCAPE_DOUBLE_QUOTES: return escapeChar(r, w, '\"'); 98 default: throw new UnsupportedOperationException ("Cannot transform"); 99 } 100 } 101 102 public Writer transformBack(Reader r, Writer w) { 103 switch(to){ 104 case ESCAPE_SINGLE_QUOTES: 105 case ESCAPE_DOUBLE_QUOTES: return escapeCharBack(r, w); 106 default: throw new UnsupportedOperationException ("Cannot transform"); 107 } 108 } 109 110 public String getEncoding() { 111 switch(to){ 112 case ESCAPE_SINGLE_QUOTES: return SINGLE_QUOTES; 113 case ESCAPE_DOUBLE_QUOTES: return DOUBLE_QUOTES; 114 default: return "UNKNOWN"; 115 } 116 } 117 } 118 | Popular Tags |