[richfaces-svn-commits] JBoss Rich Faces SVN: r14275 - in branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext: tags and 1 other directory.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Fri May 22 05:39:31 EDT 2009


Author: Alex.Kolonitsky
Date: 2009-05-22 05:39:30 -0400 (Fri, 22 May 2009)
New Revision: 14275

Added:
   branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/ParagraphTag.java
Modified:
   branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/HtmlToSeamTransformer.java
   branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/HtmlTag.java
   branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/LineTag.java
   branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/TagFactory.java
Log:
Editor: "Preformatted" format problem in seamTextMode
https://jira.jboss.org/jira/browse/RF-7030

Modified: branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/HtmlToSeamTransformer.java
===================================================================
--- branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/HtmlToSeamTransformer.java	2009-05-22 09:01:35 UTC (rev 14274)
+++ branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/HtmlToSeamTransformer.java	2009-05-22 09:39:30 UTC (rev 14275)
@@ -35,8 +35,6 @@
     
     private HtmlTag currentTag = null;
 
-    private boolean isHeaderProcessed = false;
-
     private boolean isFirstChars = false;
 
     public Stack<HtmlTag> getHtmlElementStack() {
@@ -107,70 +105,80 @@
         return false;
     }
     
-    public void text(char[] text, int start, int length) {
-        if (isFirstChars) {
-//            append(htmlElementStack.peek().printStartSuffix());
+    class StringCollector {
+        private int start = -1;
 
-            while (text[start] == '\n' && length > 0) {
-                start++;
-                length--;
-            }
-            isFirstChars = false;
+        public StringCollector(int start) {
+            this.start = start;
         }
+        
+        public void inc() {
+            start++;
+        }
+        
+        public void dec() {
+            start--;
+        }
+        
+        public void clear() {
+            start = -1;
+        }
+        
+        public int getStart() {
+            return start;
+        }
+    }
+    
+    public void text(char[] text, int start, int length) {
+        int localStart = -1;
+        
+        while (length > 0) {
+            switch (text[start]) {
+                case '*': case '|': case '^' : case '+':
+                case '=': case '#': case '\\': case '~':
+                case '[': case ']': case '`' :
+                case '<': case '>': case '&':
+                    if (localStart != -1) {
+                        out(text, localStart, start - localStart);
+                        localStart = -1;
+                    } 
+                    
+                    seamCharacters(text, start, 1);
+                    break;
 
+                case '\n': case '\r':
+                    if (localStart != -1) {
+                        out(text, localStart, start - localStart);
+                        localStart = -1;
+                    } 
 
-        while (length > 0) {
-            processChar(text, start, 1);
+                    final HtmlTag token = htmlElementStack.peek();
+                    if (!(HtmlToSeamSAXParser.ROOT_TAG_NAME.equals(token.getName())
+                          || token.isList())) {
+                        out(text, start, 1);
+                    }
 
-            setHeaderProcessed();
+                    break;
+                default:
+                    if (localStart == -1) {
+                        localStart = start;
+                    }
+            }
 
             start ++;
             length --;
         }
+        
+        if (localStart != -1) {
+            out(text, localStart, start - localStart);
+            localStart = -1;
+        } 
     }
 
-    private void setHeaderProcessed() {
-        final HtmlTag token = htmlElementStack.peek();
-        if (!token.isParagraph() && isHeaderProcessed) {
-            isHeaderProcessed = false;
-        }
-    }
-
-    private void processChar(final char[] text, final int start, final int localLength) {
-        switch (text[start]) {
-            case '*': case '|': case '^' : case '+':
-            case '=': case '#': case '\\': case '~':
-            case '[': case ']': case '`' :
-            case '<': case '>': case '&':
-                seamCharacters(text, start, localLength);
-                break;
-
-            case '\n':
-                final HtmlTag token = htmlElementStack.peek();
-                if (!(/*token.isParagraph()
-                      ||*/ isHeaderProcessed
-                      || HtmlToSeamSAXParser.ROOT_TAG_NAME.equals(token.getName())
-                      || token.isList())) {
-                    out(text, start, localLength);
-                }
-
-                break;
-            default:
-                out(text, start, localLength);
-                break;
-        }
-    }
-
     public void seamCharacters(char[] text, int start, int length) {
         appendBody(escapeSeamText(new String(text, start, length), preformatted));
     }
 
-    public void plain(char[] text, int start, int length) {
-        out(text, start, length);
-
-        setHeaderProcessed();
-    }
-
     public void out(char[] text, int start, int length) {
         appendBody(new String(text, start, length));
     }
@@ -228,11 +236,7 @@
 
         if (tag.isLink()) {
             value = "";
-        } else if (tag.isParagraph()) {
-            isHeaderProcessed = false;
-        } else if (tag.isHeader()) {
-            isHeaderProcessed = true;
-        }
+        } 
         
         appendBody(value);
         appendEnd();

Modified: branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/HtmlTag.java
===================================================================
--- branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/HtmlTag.java	2009-05-22 09:01:35 UTC (rev 14274)
+++ branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/HtmlTag.java	2009-05-22 09:39:30 UTC (rev 14275)
@@ -64,11 +64,12 @@
     }
 
     protected boolean isBreakLineChild(Object child) {
-        if (!(child instanceof String)) {
+        if (child == null || !(child instanceof String)) {
             return false;
         }
+        
         final String str = (String) child;
-        return "\r".equals(str) || "\n".equals(str) || "\r\n".equals(str);
+        return str.endsWith("\r") || str.endsWith("\n");
     }
     
     protected String printPlainStart(){

Modified: branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/LineTag.java
===================================================================
--- branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/LineTag.java	2009-05-22 09:01:35 UTC (rev 14274)
+++ branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/LineTag.java	2009-05-22 09:39:30 UTC (rev 14275)
@@ -26,7 +26,29 @@
         return super.printPlain();
     }
     
+    private boolean isFirstChars = true;
+    
     @Override
+    public void appendBody(String str) {
+        if (isFirstChars) {
+            char text[] = str.toCharArray();
+            int i = 0;
+            while (i < text.length && (text[i] == '\r' || text[i] == '\n')) {
+                i++;
+            }
+              
+            if (i < text.length) {
+                super.appendBody(str.substring(i));
+                isFirstChars = false;
+            } else {
+                return;
+            }
+        } else {
+            super.appendBody(str);
+        }
+    }
+
+    @Override
     protected void appendChildTag(StringBuilder res, HtmlTag child) {
         if (child instanceof LineTag) {
             res.append(((LineTag)child).printPlain());
@@ -36,6 +58,15 @@
     }
 
     @Override
+    protected String printBody() {
+        while (!isBodyEmpty() && isBreakLineChild(body.getLast())) {
+            body.removeLast();
+        }
+        
+        return super.printBody();
+    }
+    
+    @Override
     public String printEnd() {
         return "\n";
     }

Added: branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/ParagraphTag.java
===================================================================
--- branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/ParagraphTag.java	                        (rev 0)
+++ branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/ParagraphTag.java	2009-05-22 09:39:30 UTC (rev 14275)
@@ -0,0 +1,25 @@
+package org.richfaces.convert.seamtext.tags;
+
+public class ParagraphTag extends LineTag {
+
+    private static final long serialVersionUID = 1720000557944774249L;
+
+    protected ParagraphTag() {
+        super(P);
+    }
+    
+    @Override
+    public String printStart() {
+        return "";
+    }
+
+    @Override
+    public String printEnd() {
+        return "\n\n"; 
+    }
+
+    @Override
+    public String printStartSuffix() {
+        return "";
+    }
+}

Modified: branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/TagFactory.java
===================================================================
--- branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/TagFactory.java	2009-05-22 09:01:35 UTC (rev 14274)
+++ branches/community/3.3.X/ui/editor/src/main/java/org/richfaces/convert/seamtext/tags/TagFactory.java	2009-05-22 09:39:30 UTC (rev 14275)
@@ -55,31 +55,7 @@
                 }
             },
             
-            new HtmlTag(P) {
-                @Override
-                public String printStart() {
-                    return "";
-                }
-
-                @Override
-                protected String printBody() {
-                    while (isBreakLineChild(body.getLast())) {
-                        body.removeLast();
-                    }
-                    
-                    return super.printBody();
-                }
-
-                @Override
-                public String printEnd() {
-                    return "\n\n"; 
-                }
-
-                @Override
-                public String printStartSuffix() {
-                    return "";
-                }
-            }, 
+            new ParagraphTag(), 
             
             new FormattingTag(I,   SEAM_STAR),
             new FormattingTag(DEL, SEAM_TWIDDLE),




More information about the richfaces-svn-commits mailing list