001 /*
002 * Copyright 2002 - 2007 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: MathMLParserSupport.java,v 2bab6eb875e8 2010/08/11 16:45:50 max $ */
018
019 package net.sourceforge.jeuclid;
020
021 import java.io.File;
022 import java.io.FileInputStream;
023 import java.io.IOException;
024 import java.io.InputStream;
025 import java.io.StringReader;
026
027 import javax.annotation.concurrent.ThreadSafe;
028 import javax.xml.parsers.DocumentBuilder;
029 import javax.xml.parsers.ParserConfigurationException;
030 import javax.xml.transform.stream.StreamSource;
031
032 import net.sourceforge.jeuclid.parser.Parser;
033
034 import org.w3c.dom.Document;
035 import org.xml.sax.SAXException;
036
037 /**
038 * Utility class for the support parsing MathML and OpenDocument Formula (ODF)
039 * files.
040 * <p>
041 * This class supports parsing of files that are either MathML or OpenDocument
042 * Formula (ODF) files. It also supports parsing MathML from a given text
043 * string.
044 *
045 * @version $Revision: 2bab6eb875e8 $
046 */
047 @ThreadSafe
048 public final class MathMLParserSupport {
049
050 /**
051 * Logger for this class
052 */
053 // private static final Log LOGGER = LogFactory
054 // .getLog(MathMLParserSupport.class);
055 private MathMLParserSupport() {
056 }
057
058 /**
059 * Creates a DocumentBuilder that can be used to parse MathML documents
060 * into a standard DOM model.
061 *
062 * @return a DocumentBuilder instance that is configured for MathML
063 * @throws ParserConfigurationException
064 * if the builder could not be configured properly.
065 */
066 public static DocumentBuilder createDocumentBuilder()
067 throws ParserConfigurationException {
068 final DocumentBuilder builder = Parser.getInstance()
069 .getDocumentBuilder();
070 return builder;
071 }
072
073 /**
074 * Parse an input stream in MathML XML format.
075 *
076 * @param inStream
077 * the stream to parse.
078 * @return the DOM Tree
079 * @throws SAXException
080 * if a parse error occurs.
081 * @throws IOException
082 * if a read I/O error occurs.
083 */
084 public static Document parseInputStreamXML(final InputStream inStream)
085 throws SAXException, IOException {
086 return Parser.getInstance().parseStreamSourceAsXml(
087 new StreamSource(inStream));
088 }
089
090 /**
091 * Parse an input stream in ODF format.
092 *
093 * @param inStream
094 * the stream to parse.
095 * @return the DOM Tree
096 * @throws SAXException
097 * if a parse error occurs.
098 * @throws IOException
099 * if a read I/O error occurs.
100 */
101 public static Document parseInputStreamODF(final InputStream inStream)
102 throws SAXException, IOException {
103 return Parser.getInstance().parseStreamSourceAsOdf(
104 new StreamSource(inStream));
105 }
106
107 /**
108 * Parse an input file and return the DOM tree.
109 * <p>
110 * This function will auto-detect if the given input is in MathML or ODF
111 * format.
112 *
113 * @param inFile
114 * the file to parse.
115 * @return the DOM Tree
116 * @throws SAXException
117 * if a parse error occurs.
118 * @throws IOException
119 * if a read I/O error occurs.
120 */
121 public static Document parseFile(final File inFile) throws SAXException,
122 IOException {
123 return Parser.getInstance().parseStreamSource(
124 new StreamSource(new FileInputStream(inFile)));
125 }
126
127 /**
128 * Create a DOM Document from a given string containing MathML content.
129 * This function uses a DOM Parser configured for MathML.
130 *
131 * @param content
132 * A String containing MathML.
133 * @return a DOM Document.
134 * @throws SAXException
135 * a parsing error occurred.
136 * @throws ParserConfigurationException
137 * a configuration error occurred.
138 * @throws IOException
139 * for any other IO exception.
140 */
141 public static Document parseString(final String content)
142 throws SAXException, ParserConfigurationException, IOException {
143 return Parser.getInstance().parseStreamSourceAsXml(
144 new StreamSource(new StringReader(content)));
145 }
146
147 }