001    /*
002     * Copyright 2007 - 2008 JEuclid, http://jeuclid.sf.net
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    /* $Id: JEuclidXMLHandler.java,v 32023847f457 2009/03/20 14:20:15 maxberger $ */
018    
019    /* 
020     * Parts of the contents are heavily inspired by work done for Barcode4J by
021     * Jeremias Maerki, available at http://barcode4j.sf.net/
022     */
023    package net.sourceforge.jeuclid.fop;
024    
025    import net.sourceforge.jeuclid.elements.AbstractJEuclidElement;
026    import net.sourceforge.jeuclid.xmlgraphics.Graphics2DImagePainterMathML;
027    
028    import org.apache.fop.render.Graphics2DAdapter;
029    import org.apache.fop.render.Renderer;
030    import org.apache.fop.render.RendererContext;
031    import org.apache.fop.render.XMLHandler;
032    import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;
033    import org.w3c.dom.Document;
034    
035    /**
036     * XMLHandler which draws MathML through a fop G2DAdapter.
037     * 
038     * @version $Revision: 32023847f457 $
039     */
040    public class JEuclidXMLHandler implements XMLHandler {
041    
042        /** Creates a new instance of JEuclidXMLHandler. */
043        public JEuclidXMLHandler() {
044        }
045    
046        /** {@inheritDoc} */
047        public void handleXML(final RendererContext rendererContext,
048                final Document document, final String ns) throws Exception {
049            final Graphics2DAdapter g2dAdapter = rendererContext.getRenderer()
050                    .getGraphics2DAdapter();
051    
052            if (g2dAdapter != null) {
053                final Graphics2DImagePainter painter = Graphics2DImagePainterMathML
054                        .createGraphics2DImagePainter(document);
055                g2dAdapter.paintImage(painter, rendererContext,
056                        ((Integer) rendererContext.getProperty("xpos"))
057                                .intValue(), ((Integer) rendererContext
058                                .getProperty("ypos")).intValue(),
059                        ((Integer) rendererContext.getProperty("width"))
060                                .intValue(), ((Integer) rendererContext
061                                .getProperty("height")).intValue());
062    
063            }
064        }
065    
066        /** {@inheritDoc} */
067        public boolean supportsRenderer(final Renderer renderer) {
068            return renderer.getGraphics2DAdapter() != null;
069        }
070    
071        /** {@inheritDoc} */
072        public String getNamespace() {
073            return AbstractJEuclidElement.URI;
074        }
075    
076    }