keiron      01/07/11 03:04:08

  Added:       src/org/apache/fop/svg SVGUtilities.java
  Log:
  a utility file for creating some svg things
  
  Revision  Changes    Path
  1.1                  xml-fop/src/org/apache/fop/svg/SVGUtilities.java
  
  Index: SVGUtilities.java
  ===================================================================
  /* $Id: SVGUtilities.java,v 1.1 2001/07/11 10:04:07 keiron Exp $
   * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
   * For details on use and redistribution please refer to the
   * LICENSE file included with these sources.
   */
  
  package org.apache.fop.svg;
  
  import java.util.*;
  import java.text.*;
  import java.awt.*;
  import java.awt.geom.AffineTransform;
  import java.awt.geom.Rectangle2D;
  import java.awt.font.FontRenderContext;
  
  import org.apache.fop.fo.*;
  import org.apache.fop.fo.properties.*;
  import org.apache.fop.layout.*;
  import org.apache.fop.apps.*;
  import org.apache.fop.datatypes.*;
  import org.apache.fop.layout.inline.*;
  import org.apache.fop.svg.*;
  import org.w3c.dom.*;
  import org.w3c.dom.svg.*;
  import org.w3c.dom.css.*;
  
  import org.apache.batik.dom.svg.SVGDOMImplementation;
  
  /**
   * Some utilities for creating svg DOM documents and elements.
   */
  public class SVGUtilities {
      final static String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
  
  
      public static final Document createSVGDocument(float width,
              float height) {
          DOMImplementation impl =
            SVGDOMImplementation.getDOMImplementation();
          Document doc = impl.createDocument(svgNS, "svg", null);
  
          Element svgRoot = doc.getDocumentElement();
          svgRoot.setAttributeNS(null, "width", "" + width);
          svgRoot.setAttributeNS(null, "height", "" + height);
          return doc;
      }
  
      /**
       * Get the string width for a particular string given the font.
       */
      public static final float getStringWidth(String str,
              java.awt.Font font) {
          Rectangle2D rect = font.getStringBounds(str, 0, str.length(),
                                                  new FontRenderContext(new 
AffineTransform(), true, true));
          return (float) rect.getWidth();
      }
  
      /**
       * Get the string height for a particular string given the font.
       */
      public static final float getStringHeight(String str,
              java.awt.Font font) {
          Rectangle2D rect = font.getStringBounds(str, 0, str.length(),
                                                  new FontRenderContext(new 
AffineTransform(), true, true));
          return (float) rect.getHeight();
      }
  
      /**
       * Get the string bounds for a particular string given the font.
       */
      public static final Rectangle2D getStringBounds(String str,
              java.awt.Font font) {
          return font.getStringBounds(str, 0, str.length(),
                                      new FontRenderContext(new AffineTransform(), 
true, true));
      }
  
      /**
       * Create an SVG Line
       */
      public static final Element createLine(Document doc, float x,
                                             float y, float x2, float y2) {
          Element ellipse = doc.createElementNS(svgNS, "line");
          ellipse.setAttributeNS(null, "x1", "" + x);
          ellipse.setAttributeNS(null, "x2", "" + x2);
          ellipse.setAttributeNS(null, "y1", "" + y);
          ellipse.setAttributeNS(null, "y2", "" + y2);
          return ellipse;
      }
  
      /**
       * Create an SVG Ellipse
       */
      public static final Element createEllipse(Document doc, float cx,
              float cy, float rx, float ry) {
          Element ellipse = doc.createElementNS(svgNS, "ellipse");
          ellipse.setAttributeNS(null, "cx", "" + cx);
          ellipse.setAttributeNS(null, "rx", "" + rx);
          ellipse.setAttributeNS(null, "cy", "" + cy);
          ellipse.setAttributeNS(null, "ry", "" + ry);
          return ellipse;
      }
  
      /**
       * Create an SVG Path.
       */
      public static final Element createPath(Document doc, String str) {
          Element path = doc.createElementNS(svgNS, "path");
          path.setAttributeNS(null, "d", str);
          return path;
      }
  
      /**
       * Create an SVG Text object.
       */
      public static final Element createText(Document doc, float x,
                                             float y, String str) {
          Element textGraph = doc.createElementNS(svgNS, "text");
          textGraph.setAttributeNS(null, "x", "" + x);
          textGraph.setAttributeNS(null, "y", "" + y);
          org.w3c.dom.Text text = doc.createTextNode(str);
          textGraph.appendChild(text);
          return textGraph;
      }
  
      /**
       * Create an SVG Rectangle.
       */
      public static final Element createRect(Document doc, float x,
                                             float y, float width, float height) {
          Element border = doc.createElementNS(svgNS, "rect");
          border.setAttributeNS(null, "x", "" + x);
          border.setAttributeNS(null, "y", "" + y);
          border.setAttributeNS(null, "width", "" + width);
          border.setAttributeNS(null, "height", "" + height);
          return border;
      }
  
      /**
       * Create an SVG G.
       */
      public static final Element createG(Document doc) {
          Element border = doc.createElementNS(svgNS, "g");
          return border;
      }
  
      /**
       * Create an SVG Clip.
       */
      public static final Element createClip(Document doc, Element els,
                                             String id) {
          Element border = doc.createElementNS(svgNS, "clipPath");
          border.setAttributeNS(null, "id", id);
          border.appendChild(els);
          return border;
      }
  
      public static final Element createImage(Document doc, String ref,
                                              float width, float height) {
          Element border = doc.createElementNS(svgNS, "image");
          border.setAttributeNS("http://www.w3.org/1999/xlink";, "xlink:href",
                                ref);
          border.setAttributeNS(null, "width", "" + width);
          border.setAttributeNS(null, "height", "" + height);
          return border;
      }
  
      /**
       * Create some SVG text that is wrapped into a specified width..
       */
      public static final Element wrapText(Document doc, String str,
                                           java.awt.Font font, float width) {
          Element g = createG(doc);
          Element text;
          StringTokenizer st = new StringTokenizer(str, " \t\r\n");
          float totalWidth = 0;
          String totalStr = "";
          int line = 0;
          float height = getStringHeight(str, font);
          while (st.hasMoreTokens()) {
              String token = st.nextToken();
              float strwidth = getStringWidth(token, font);
              totalWidth += strwidth;
              if (totalWidth > width) {
                  if (totalStr.equals("")) {
                      totalStr = token;
                      token = "";
                      strwidth = 0;
                  }
                  text = createText(doc, 0, line * (height + 5), totalStr);
                  g.appendChild(text);
                  totalStr = token;
                  totalWidth = strwidth;
                  line++;
              } else {
                  totalStr = totalStr + " " + token;
              }
          }
  
          return g;
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to