1 10 package org.mmbase.util.transformers; 11 12 import java.io.Reader ; 13 import java.io.Writer ; 14 15 import org.mmbase.util.logging.*; 16 17 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 tab; 30 31 public TabToSpacesTransformer() { 32 this(3); 33 } 34 35 public TabToSpacesTransformer(int spaces) { 36 spaceNum = spaces; 37 { 38 StringBuffer buf = new StringBuffer (); 39 for (int i = 0; i < spaceNum; i++) { 40 buf.append(' '); 41 } 42 tab = buf.toString(); 43 } 44 } 45 46 public Writer transform(Reader r, Writer 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 e) { 58 log.error(e.toString()); 59 } 60 return w; 61 } 62 public Writer transformBack(Reader r, Writer 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 e) { 82 log.error(e.toString()); 83 } 84 return w; 85 86 } 87 88 89 public String toString() { 90 return "tab2spacestransformer"; 91 } 92 } 93 | Popular Tags |