KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > util > transformers > Javascript


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.util.transformers;
11
12 import java.io.Reader JavaDoc;
13 import java.io.Writer JavaDoc;
14 import java.util.HashMap JavaDoc;
15 import java.util.Map JavaDoc;
16
17
18 /**
19  * Encodings related Javascript It can escape single quotes, by replacing them by \\', as is needed in document.write actions.
20
21  * @author Michiel Meeuwissen
22  * @since MMBase-1.7.4
23  */

24
25 public class Javascript extends ConfigurableReaderTransformer implements CharTransformer {
26     private final static String JavaDoc SINGLE_QUOTES = "JAVASCRIPT_ESCAPE_SINGLE_QUOTES";
27     private final static String JavaDoc 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     /**
40      * Escapes a quote
41      * @param escapeChar The quote character to be escaped.
42      * @return the writer
43      */

44     public static Writer JavaDoc escapeChar(Reader JavaDoc r, Writer JavaDoc 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 JavaDoc e) {
53         }
54         return w;
55     }
56
57     /**
58      * Unescapes \-escapes in a string.
59      */

60     public static Writer JavaDoc escapeCharBack(Reader JavaDoc r, Writer JavaDoc 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 JavaDoc e) {
79         }
80         return w;
81     }
82
83     /**
84      * Used when registering this class as a possible Transformer
85      */

86
87     public Map JavaDoc transformers() {
88         Map JavaDoc h = new HashMap JavaDoc();
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 JavaDoc transform(Reader JavaDoc r, Writer JavaDoc 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 JavaDoc("Cannot transform");
99         }
100     }
101
102     public Writer JavaDoc transformBack(Reader JavaDoc r, Writer JavaDoc w) {
103         switch(to){
104         case ESCAPE_SINGLE_QUOTES:
105         case ESCAPE_DOUBLE_QUOTES: return escapeCharBack(r, w);
106         default: throw new UnsupportedOperationException JavaDoc("Cannot transform");
107         }
108     }
109
110     public String JavaDoc 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