KickJava   Java API By Example, From Geeks To Geeks.

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


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.util.*;
13 import java.io.*;
14 import org.mmbase.util.functions.*;
15
16 import org.mmbase.util.logging.*;
17
18
19 /**
20  * Word wrapping as a transformer factory. Can be used in taglib e.g. like escape="wrap(20)"
21  *
22  * @author Michiel Meeuwissen
23  * @since MMBase-1.8
24  */

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 JavaDoc.class, new Integer JavaDoc(80))
31     };
32
33     public Parameters createParameters() {
34         return new Parameters(PARAMS);
35     }
36
37
38     /**
39      * Creates a parameterized transformer.
40      */

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 JavaDoc) parameters.get("length")).intValue();
47         return new ReaderTransformer() {
48
49             public Writer transform(Reader r, Writer w) {
50                 StringBuffer JavaDoc word = new StringBuffer JavaDoc(); // current word
51
try {
52                     log.trace("Starting wrapping words.");
53                     int ll = 0; // 'line lenght'
54
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                     // write last word
81
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 JavaDoc e) {
87                     log.error(e.toString());
88                 }
89                 return w;
90             };
91         };
92
93     }
94
95
96 }
97
Popular Tags