1 10 package org.mmbase.util.transformers; 11 12 import java.util.*; 13 import java.io.*; 14 import org.mmbase.util.functions.*; 15 16 import org.mmbase.util.logging.*; 17 18 19 25 26 public class WordWrapperFactory implements ParameterizedTransformerFactory { 27 private static final Logger log = Logging.getLoggerInstance(WordWrapperFactory.class); 28 29 protected static final Parameter[] PARAMS = new Parameter[] { 30 new Parameter("length", Integer .class, new Integer (80)) 31 }; 32 33 public Parameters createParameters() { 34 return new Parameters(PARAMS); 35 } 36 37 38 41 public Transformer createTransformer(final Parameters parameters) { 42 parameters.checkRequiredParameters(); 43 if (log.isDebugEnabled()) { 44 log.debug("Creating transformer, with " + parameters); 45 } 46 final int length = ((Integer ) parameters.get("length")).intValue(); 47 return new ReaderTransformer() { 48 49 public Writer transform(Reader r, Writer w) { 50 StringBuffer word = new StringBuffer (); try { 52 log.trace("Starting wrapping words."); 53 int ll = 0; while (true) { 55 int c = r.read(); 56 if (c == -1) break; 57 if (Character.isWhitespace((char) c)) { 58 if (ll + word.length() > length) { 59 w.write('\n'); 60 w.write(word.toString()); 61 ll = 0;word.length(); 62 } else { 63 w.write(word.toString()); 64 } 65 if (c == '\n') { 66 ll = 0; 67 w.write(c); 68 } else { 69 ll += word.length(); 70 if (ll < length) { 71 w.write(c); 72 } 73 ll++; 74 } 75 word.setLength(0); 76 } else { 77 word.append((char) c); 78 } 79 } 80 if (ll + word.length() > length) { 82 w.write('\n'); 83 } 84 w.write(word.toString()); 85 log.debug("Finished wrapping"); 86 } catch (java.io.IOException e) { 87 log.error(e.toString()); 88 } 89 return w; 90 }; 91 }; 92 93 } 94 95 96 } 97 | Popular Tags |