You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ap...@apache.org on 2007/08/14 11:41:43 UTC

svn commit: r565677 - in /harmony/enhanced/classlib/trunk/modules/swing/src: main/java/common/javax/swing/text/html/parser/Lexer.java test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java

Author: apetrenko
Date: Tue Aug 14 02:41:41 2007
New Revision: 565677

URL: http://svn.apache.org/viewvc?view=rev&rev=565677
Log:
Patch for HARMONY-4615 "[classlib][swing] HTML tags inside tag <pre> are handled incorrectly"

Modified:
    harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java
    harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java

Modified: harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java?view=diff&rev=565677&r1=565676&r2=565677
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/main/java/common/javax/swing/text/html/parser/Lexer.java Tue Aug 14 02:41:41 2007
@@ -381,6 +381,8 @@
 	private int offsetCDATA=0;
 	
 	private LexerTextStateType textState = LexerTextStateType.DEFAULT;
+	
+	private int preEntryCounter;
 
 	/**
 	 * Decsribes whether a piece of text (no white space) was parsed.
@@ -635,7 +637,7 @@
 		textParsed = false;
 		terminatorSkipped = false;
 		lastWasLineTerminator = false;
-		textState = LexerTextStateType.DEFAULT;
+		
 		return textToken;
 	}
 
@@ -792,7 +794,13 @@
    * @param newState the new lexical state
    */
   public final void yybegin(int newState) {
-    zzLexicalState = newState;
+      if ((newState == ENDTAG) && isPreformatted(yytext().substring(2))) {
+          preEntryCounter --;
+          textState = (preEntryCounter == 0) ? LexerTextStateType.DEFAULT : 
+              LexerTextStateType.PREFORMATTED;
+      }
+      
+      zzLexicalState = newState;
   }
 
 
@@ -1451,6 +1459,7 @@
 			yybegin(TAG_IGNORE_ATTS);
 		} else {
 			if (isPreformatted(tagName)) {
+			    preEntryCounter ++;
 				textState = LexerTextStateType.PREFORMATTED;
 			}
 			currentCDATAClosingTag = null;

Modified: harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java?view=diff&rev=565677&r1=565676&r2=565677
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/swing/src/test/api/java.injected/javax/swing/text/html/HTMLDocument_Reader_ActionsTest.java Tue Aug 14 02:41:41 2007
@@ -582,6 +582,19 @@
         assertEquals(13, pre.getElement(1).getEndOffset());
     }
     
+    public void testHarmony_4615() throws Exception {
+        final HTMLDocument doc = new HTMLDocument();
+
+        new HTMLEditorKit().read(new StringReader("<html><body><pre>line1\n" //$NON-NLS-1$
+                + "<font color='red'>line2 \n line3</font>" //$NON-NLS-1$
+                + "line3</pre>line4 \n line4</body></html>"), doc, 0); //$NON-NLS-1$
+
+        assertEquals("line1\n", doc.getText(1, 6)); //$NON-NLS-1$
+        assertEquals("line2 \n line3", doc.getText(7, 13)); //$NON-NLS-1$
+        assertEquals("line3", doc.getText(20, 5)); //$NON-NLS-1$
+        assertEquals("line4 line4", doc.getText(26, 11)); //$NON-NLS-1$
+    }
+    
     public void testTag_ContentWhitespaces() {
         SimpleAttributeSet attr = new SimpleAttributeSet();
         attr.addAttribute("aaaa", "bbbb");