Browse Source

allows better for other xml data


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194300 13f79535-47bb-0310-9956-ffa450edef68
tags/PRE_CODEFORMATTING
Keiron Liddle 23 years ago
parent
commit
c212005562
2 changed files with 121 additions and 90 deletions
  1. 3
    90
      src/org/apache/fop/svg/SVGObj.java
  2. 118
    0
      src/org/apache/fop/svg/XMLObj.java

+ 3
- 90
src/org/apache/fop/svg/SVGObj.java View File

@@ -8,27 +8,14 @@ package org.apache.fop.svg;

// FOP
import org.apache.fop.fo.*;
import org.apache.fop.layout.Area;
import org.apache.fop.layout.FontState;
import org.apache.fop.apps.FOPException;
import org.apache.fop.layout.LinkSet;

import org.apache.batik.dom.svg.*;

import org.w3c.dom.svg.*;
import org.w3c.dom.*;

import java.util.*;

/**
* Since SVG objects are not layed out then this class checks
* that this element is not being layed out inside some incorrect
* element.
*/
public abstract class SVGObj extends FObj {
public abstract class SVGObj extends XMLObj {

String tagName = "";
String[] props = {};
/**
*
* @param parent the parent formatting object
@@ -38,82 +25,8 @@ public abstract class SVGObj extends FObj {
super(parent, propertyList);
}

protected static Hashtable ns = new Hashtable();

public void addGraphic(Document doc, Element parent) {
Element element = doc.createElementNS("http://www.w3.org/2000/svg",
tagName);
// Element element = doc.createElement(tagName);
for (int count = 0; count < props.length; count++) {
if (this.properties.get(props[count]) != null) {
String rf = this.properties.get(props[count]).getString();
if (rf != null) {
if (props[count].indexOf(":") == -1) {
element.setAttribute(props[count], rf);
} else {
String pref = props[count].substring(0,
props[count].indexOf(":"));
if (pref.equals("xmlns")) {
ns.put(props[count].substring(
props[count].indexOf(":") + 1), rf);
}
ns.put("xlink", "http://www.w3.org/1999/xlink");
element.setAttributeNS((String) ns.get(pref),
props[count], rf);
}
}
}
}
parent.appendChild(element);
int numChildren = this.children.size();
for (int i = 0; i < numChildren; i++) {
Object child = children.elementAt(i);
if (child instanceof SVGObj) {
((SVGObj) child).addGraphic(doc, element);
} else if (child instanceof String) {
org.w3c.dom.Text text = doc.createTextNode((String) child);
element.appendChild(text);
}
}
}

/**
* layout this formatting object.
*
* @param area the area to layout the object into
* @return the status of the layout
*/
public Status layout(Area area) throws FOPException {
/* generate a warning */
System.err.println("WARNING: " + this.name + " outside svg:svg");

/* return status */
return new Status(Status.OK);
}

/**
* These method overrides prevent problems with the different types.
*/
public void setIsInTableCell() {
}

public void forceStartOffset(int offset) {
}

public void forceWidth(int width) {
}

public void resetMarker() {
}

public void setLinkSet(LinkSet linkSet) {
}

public Vector getMarkerSnapshot(Vector snapshot) {
return snapshot;
}

public void rollback(Vector snapshot) {
public String getNameSpace() {
return "http://www.w3.org/2000/svg";
}
}


+ 118
- 0
src/org/apache/fop/svg/XMLObj.java View File

@@ -0,0 +1,118 @@
/* $Id$
* 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;

// FOP
import org.apache.fop.fo.*;
import org.apache.fop.layout.Area;
import org.apache.fop.layout.FontState;
import org.apache.fop.apps.FOPException;
import org.apache.fop.layout.LinkSet;

import org.w3c.dom.*;

import java.util.*;

/**
* Since SVG objects are not layed out then this class checks
* that this element is not being layed out inside some incorrect
* element.
*/
public abstract class XMLObj extends FObj {

String tagName = "";
String[] props = {};
/**
*
* @param parent the parent formatting object
* @param propertyList the explicit properties of this object
*/
public XMLObj(FObj parent, PropertyList propertyList) {
super(parent, propertyList);
}

public abstract String getNameSpace();

protected static Hashtable ns = new Hashtable();

public void addGraphic(Document doc, Element parent) {
Element element = doc.createElementNS(getNameSpace(),
tagName);
// Element element = doc.createElement(tagName);
for (int count = 0; count < props.length; count++) {
if (this.properties.get(props[count]) != null) {
String rf = this.properties.get(props[count]).getString();
if (rf != null) {
if (props[count].indexOf(":") == -1) {
element.setAttribute(props[count], rf);
} else {
String pref = props[count].substring(0,
props[count].indexOf(":"));
if (pref.equals("xmlns")) {
ns.put(props[count].substring(
props[count].indexOf(":") + 1), rf);
}
ns.put("xlink", "http://www.w3.org/1999/xlink");
element.setAttributeNS((String) ns.get(pref),
props[count], rf);
}
}
}
}
parent.appendChild(element);
int numChildren = this.children.size();
for (int i = 0; i < numChildren; i++) {
Object child = children.elementAt(i);
if (child instanceof XMLObj) {
((XMLObj) child).addGraphic(doc, element);
} else if (child instanceof String) {
org.w3c.dom.Text text = doc.createTextNode((String) child);
element.appendChild(text);
}
}
}

/**
* layout this formatting object.
*
* @param area the area to layout the object into
* @return the status of the layout
*/
public Status layout(Area area) throws FOPException {
/* generate a warning */
System.err.println("WARNING: " + this.name + " outside foreign xml");

/* return status */
return new Status(Status.OK);
}

/**
* These method overrides prevent problems with the different types.
*/
public void setIsInTableCell() {
}

public void forceStartOffset(int offset) {
}

public void forceWidth(int width) {
}

public void resetMarker() {
}

public void setLinkSet(LinkSet linkSet) {
}

public Vector getMarkerSnapshot(Vector snapshot) {
return snapshot;
}

public void rollback(Vector snapshot) {
}
}


Loading…
Cancel
Save