KickJava   Java API By Example, From Geeks To Geeks.

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


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
15 import org.mmbase.util.logging.*;
16
17 /**
18  * Replace every tab by n spaces.
19  *
20  * @author Michiel Meeuwissen
21  * @since MMBase-1.7
22  */

23
24 public class TabToSpacesTransformer extends ReaderTransformer implements CharTransformer {
25
26     private static final Logger log = Logging.getLoggerInstance(TabToSpacesTransformer.class);
27
28     private int spaceNum;
29     private String JavaDoc tab;
30
31     public TabToSpacesTransformer() {
32         this(3);
33     }
34
35     public TabToSpacesTransformer(int spaces) {
36         spaceNum = spaces;
37         {
38             StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
39             for (int i = 0; i < spaceNum; i++) {
40                 buf.append(' ');
41             }
42             tab = buf.toString();
43         }
44     }
45
46     public Writer JavaDoc transform(Reader JavaDoc r, Writer JavaDoc w) {
47         try {
48             while (true) {
49                 int c = r.read();
50                 if (c == -1) break;
51                 if (c == '\t') {
52                     w.write(tab);
53                     continue;
54                 }
55                 w.write(c);
56             }
57         } catch (java.io.IOException JavaDoc e) {
58             log.error(e.toString());
59         }
60         return w;
61     }
62     public Writer JavaDoc transformBack(Reader JavaDoc r, Writer JavaDoc w) {
63         int spaces = 1;
64         try {
65             while (true) {
66                 int c = r.read();
67                 if (c == -1) break;
68                 if (c == ' ') {
69                     if (spaces == spaceNum) {
70                         w.write('\t');
71                         spaces = 1;
72                     } else {
73                         spaces++;
74                     }
75                 } else {
76                     while(spaces > 1) { --spaces; w.write(' '); }
77                     w.write(c);
78                 }
79                 
80             }
81         } catch (java.io.IOException JavaDoc e) {
82             log.error(e.toString());
83         }
84         return w;
85      
86     }
87
88
89     public String JavaDoc toString() {
90         return "tab2spacestransformer";
91     }
92 }
93
Popular Tags