This patch adds views for the forced break and horizontal dash (HR and BR tags). Both tags enforces breaking at they point. Our forced breaking still needs attention: the tailing part of the document is somehow lost after these tags.

2006-07-06  Audrius Meskauskas  <[EMAIL PROTECTED]>

   * javax/swing/text/html/HTMLEditorKit.java:
   (HTMLFactory.createElement): Uncomment
   code for BRView and HRuleView.
   * javax/swing/text/html/BRView.java,
   javax/swing/text/html/HRuleView.java: New files.
Index: HTMLEditorKit.java
===================================================================
RCS file: /sources/classpath/classpath/javax/swing/text/html/HTMLEditorKit.java,v
retrieving revision 1.28
diff -u -r1.28 HTMLEditorKit.java
--- HTMLEditorKit.java	5 Jun 2006 12:38:30 -0000	1.28
+++ HTMLEditorKit.java	6 Jul 2006 08:51:43 -0000
@@ -560,16 +560,15 @@
             view = new HTMLTableView(element);
           else if (tag.equals(HTML.Tag.TD))
             view = new ParagraphView(element);
-            
+          else if (tag.equals(HTML.Tag.HR))
+            view = new HRuleView(element);
+          else if (tag.equals(HTML.Tag.BR))
+            view = new BRView(element);
 
           /*
           else if (tag.equals(HTML.Tag.MENU) || tag.equals(HTML.Tag.DIR)
                    || tag.equals(HTML.Tag.UL) || tag.equals(HTML.Tag.OL))
             view = new ListView(element);
-          else if (tag.equals(HTML.Tag.HR))
-            view = new HRuleView(element);
-          else if (tag.equals(HTML.Tag.BR))
-            view = new BRView(element);
           else if (tag.equals(HTML.Tag.INPUT) || tag.equals(HTML.Tag.SELECT)
                    || tag.equals(HTML.Tag.TEXTAREA))
             view = new FormView(element);
Index: BRView.java
===================================================================
RCS file: BRView.java
diff -N BRView.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ BRView.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,71 @@
+/* BRView.java -- HTML BR tag view
+   Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.swing.text.html;
+
+import javax.swing.text.Element;
+
+/**
+ * Handled the HTML BR tag.
+ */
+class BRView
+    extends NullView 
+
+{
+  /**
+   * Creates the new BR view.
+   * 
+   * @param elem the HTML element, representing the view.
+   */
+  public BRView(Element elem)
+  {
+    super(elem);
+  }
+  
+  /**
+   * Always return ForcedBreakWeight for the X_AXIS, BadBreakWeight for the
+   * Y_AXIS.
+   */
+  public int getBreakWeight(int axis, float pos, float len)
+  {
+    if (axis == X_AXIS)
+      return ForcedBreakWeight;
+    else
+      return BadBreakWeight;
+  }
+}
Index: HRuleView.java
===================================================================
RCS file: HRuleView.java
diff -N HRuleView.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ HRuleView.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,151 @@
+/* HRuleView.java -- Horizontal dash in HTML documents.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package javax.swing.text.html;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.awt.Shape;
+
+import javax.swing.text.Element;
+import javax.swing.text.View;
+
+/**
+ * Represents the long horizontal separating dash that can be inserted into the
+ * HTML documents with HR tag.
+ */
+class HRuleView extends InlineView
+{
+  /**
+   * The null view, indicating, that nothing should be painted ahead the
+   * breaking point. 
+   */
+  View nullView;
+  
+  static int HEIGHT = 4;
+  
+  /**
+   * Creates the new HR view.
+   */
+  public HRuleView(Element element)
+  {
+    super(element);
+  }
+
+  /**
+   * Returns the ForcedBreakWeight for the vertical axis, indicating, the the
+   * view must be broken to be displayed correctly. The horizontal dash is
+   * not breakeable along the Y axis.
+   */
+  public int getBreakWeight(int axis, float pos, float len)
+  {
+    if (axis == X_AXIS)
+      return ForcedBreakWeight;      
+    else
+      return BadBreakWeight;      
+  }
+  
+  /**
+   * Draws the double line, upped black and the lower light gray.
+   */
+  public void paint(Graphics g, Shape a)
+  {
+    Rectangle bounds = a.getBounds();
+
+    int x = bounds.x;
+    int y = bounds.y;
+
+    int w = bounds.x + bounds.width;
+
+    // We move "half pixel up" from the actual horizontal position -
+    // this will be rounded to the closest actual int co-ordinate.
+    int h = bounds.y + (int) Math.round(bounds.height * 0.5 - 0.5);
+
+    g.setColor(Color.black);
+    g.drawLine(x, y++, w, h++);
+    g.setColor(Color.lightGray);    
+    g.drawLine(x, y, w, h);
+  }
+
+  /**
+   * Always returns the null view, indicating that the dash must be painted
+   * below the breaking point.
+   */
+  public View breakView(int axis, int offset, float pos, float len)
+  {
+    if (nullView == null)
+      nullView = new NullView(getElement());
+    return nullView;
+  }
+  
+  /**
+   * Returns the width of the container for the horizontal axis and the
+   * thickness of the dash area for the vertical axis.
+   */
+  public float getMaximumSpan(int axis)
+  {
+    if (axis == X_AXIS)
+      {
+        Component container = getContainer();
+        if (container != null)
+          return getContainer().getWidth();
+        else
+          return 640;
+      }
+    else
+      return HEIGHT;     
+  }
+  
+  /**
+   * Returns the same values as [EMAIL PROTECTED] #getMaximumSpan(int)}
+   */
+  public float getMinimumSpan(int axis)
+  {
+    return getMaximumSpan(axis);
+  }
+  
+  /**
+   * Returns the same values as [EMAIL PROTECTED] #getMaximumSpan(int)}
+   */
+  public float getPreferredSpan(int axis)
+  {
+    return getMaximumSpan(axis);
+  }
+}

Reply via email to