Update of /var/cvs/src/org/mmbase/util/transformers
In directory james.mmbase.org:/tmp/cvs-serv7956/src/org/mmbase/util/transformers
Modified Files:
Tag: MMBase-1_8
SpaceReducer.java
Log Message:
bugfix: SpaceReducer was not stateless
See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/util/transformers
Index: SpaceReducer.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/util/transformers/SpaceReducer.java,v
retrieving revision 1.12.2.5
retrieving revision 1.12.2.6
diff -u -b -r1.12.2.5 -r1.12.2.6
--- SpaceReducer.java 19 Mar 2008 13:57:51 -0000 1.12.2.5
+++ SpaceReducer.java 24 Mar 2008 08:31:49 -0000 1.12.2.6
@@ -10,6 +10,7 @@
package org.mmbase.util.transformers;
import java.io.*;
+import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
@@ -18,6 +19,7 @@
import org.mmbase.util.logging.*;
+
/**
* Replace 1 or more spaces by 1 space, and 1 or more newlines by 1
* newline. Any other combination of newlines and spaces is replaced
@@ -29,42 +31,33 @@
* @author Michiel Meeuwissen
* @author Ernst Bunders
* @since MMBase-1.7
- * @version $Id: SpaceReducer.java,v 1.12.2.5 2008/03/19 13:57:51 pierre Exp $
+ * @version $Id: SpaceReducer.java,v 1.12.2.6 2008/03/24 08:31:49 ernst Exp $
*/
public class SpaceReducer extends ReaderTransformer implements CharTransformer
{
private static Logger log = Logging.getLoggerInstance(SpaceReducer.class);
- /**
- * This is a list of tags, of who's body the empty lines should not be
filtered.
- */
- private static List tagsToPass = new ArrayList();
- static{
- tagsToPass.add(new Tag("pre"));
- tagsToPass.add(new Tag("textarea"));
- }
- protected Tag currentlyOpened = null;
-
- protected boolean transform(PrintWriter bw, String line) {
+ protected boolean transform(PrintWriter bw, String line, Status status) {
boolean result = false;
- if(!line.trim().equals("") || currentlyOpened != null){
+ if(!line.trim().equals("") || status.getCurrentlyOpen() != null){
bw.write(line);
result = true;
}
- if(currentlyOpened != null){
+ if(status.getCurrentlyOpen() != null){
//look for a closing tag.
- currentlyOpened.setLine(line);
- if(currentlyOpened.hasClosed()){
- currentlyOpened = null;
+ status.getCurrentlyOpen().setLine(line);
+ if(status.getCurrentlyOpen().hasClosed()){
+ status.setCurrentlyOpen(null);
}
- } else {
+ }else{
//look for an opening tag
- for (Iterator i = tagsToPass.iterator(); i.hasNext(); ) {
- Tag tag = (Tag)i.next();
+ for (Iterator i = status.getTagsToPass().iterator(); i.hasNext();
) {
+ Tag tag = (Tag) i.next();
tag.setLine(line);
if(tag.hasOpened()){
- currentlyOpened = tag;
+ status.setCurrentlyOpen(tag);
+ break;
}
}
}
@@ -76,8 +69,9 @@
BufferedReader br = new BufferedReader(r);
PrintWriter bw = new PrintWriter(new BufferedWriter(w));
String line = br.readLine();
+ Status status = new Status();
while (line != null) {
- boolean nl = transform(bw, line);
+ boolean nl = transform(bw, line, status);
line = br.readLine();
if (nl && line != null) bw.write('\n');
}
@@ -176,7 +170,7 @@
private int countOccurences(Pattern pattern, String line) {
Matcher m = pattern.matcher(line);
int counter = 0;
- while(m.find() && counter < 5){
+ while(m.find()){
counter ++;
line = line.substring(m.end(), line.length());
m = pattern.matcher(line);
@@ -212,6 +206,27 @@
}
}
+ public static class Status {
+ private List tagsToPass = new ArrayList();
+ private Tag currentlyOpen = null;
+
+ public Status(){
+ tagsToPass.add(new Tag("pre"));
+ tagsToPass.add(new Tag("textarea"));
+ }
+
+ public List getTagsToPass() {
+ return tagsToPass;
+ }
+
+ public Tag getCurrentlyOpen() {
+ return currentlyOpen;
+ }
+ public void setCurrentlyOpen(Tag currentlyOpen) {
+ this.currentlyOpen = currentlyOpen;
+ }
+ }
+
/**
* method to test the tag class
* TODO: this should be a unit test
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs