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),