1 /* 2 * Copyright 2007 - 2008 JEuclid, http://jeuclid.sf.net 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /* $Id: ConverterPlugin.java,v 70597ba9d706 2008/02/18 19:42:05 maxberger $ */ 18 19 package net.sourceforge.jeuclid.converter; 20 21 import java.awt.Dimension; 22 import java.io.IOException; 23 import java.io.OutputStream; 24 25 import net.sourceforge.jeuclid.LayoutContext; 26 27 import org.w3c.dom.Document; 28 import org.w3c.dom.Node; 29 30 /** 31 * Describes an Image converter. 32 * 33 * @version $Revision: 70597ba9d706 $ 34 */ 35 public interface ConverterPlugin { 36 /** 37 * Write the given MathBase object with its rendering parameters into the 38 * given output stream. 39 * 40 * @param doc 41 * A JEuclid DocumentElement 42 * @param outStream 43 * Target output stream. 44 * @param context 45 * LayoutContext to use. 46 * @return Rendering's dimension based on the spefic plugin's Graphics2D 47 * implementation. 48 * @throws IOException 49 * if an I/O error occurred during write. 50 */ 51 Dimension convert(Node doc, LayoutContext context, OutputStream outStream) 52 throws IOException; 53 54 /** 55 * Internal class describing an XML document and the dimensions of its 56 * default view. 57 */ 58 class DocumentWithDimension { 59 private final Document document; 60 61 private final Dimension dimension; 62 63 private final float baseline; 64 65 public DocumentWithDimension(final Document doc, final Dimension dim, 66 final float bline) { 67 super(); 68 this.document = doc; 69 this.dimension = dim; 70 this.baseline = bline; 71 } 72 73 /** 74 * @return the document resulting from this conversion, a suptype of 75 * Document (e.g. SVGDocument) if possible. 76 */ 77 public Document getDocument() { 78 return this.document; 79 } 80 81 /** 82 * @return The dimensions from this conversion 83 */ 84 public Dimension getDimension() { 85 return this.dimension; 86 } 87 88 /** 89 * @return the position of the baseline in pixels from the bottom. 90 */ 91 public float getBaseline() { 92 return this.baseline; 93 } 94 95 } 96 97 /** 98 * Convert from the given Math Object to an XML DOM Document. 99 * 100 * @param doc 101 * A JEuclid DocumentElement 102 * @param context 103 * LayoutContext to use. 104 * @return an instance of DocumentWithDimension, containing a Document of 105 * the appropriate subtype for this format (e.g. SVGDocument), if 106 * available. If conversion is not supported by this plugin, it 107 * may return null. 108 */ 109 DocumentWithDimension convert(final Node doc, final LayoutContext context); 110 111 }