01: /*
02: JSPWiki - a JSP-based WikiWiki clone.
03:
04: Copyright (C) 2001-2002 Janne Jalkanen (Janne.Jalkanen@iki.fi)
05:
06: This program is free software; you can redistribute it and/or modify
07: it under the terms of the GNU Lesser General Public License as published by
08: the Free Software Foundation; either version 2.1 of the License, or
09: (at your option) any later version.
10:
11: This program is distributed in the hope that it will be useful,
12: but WITHOUT ANY WARRANTY; without even the implied warranty of
13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: GNU Lesser General Public License for more details.
15:
16: You should have received a copy of the GNU Lesser General Public License
17: along with this program; if not, write to the Free Software
18: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19: */
20: package com.ecyrd.jspwiki.htmltowiki;
21:
22: import java.io.IOException;
23: import java.io.StringReader;
24:
25: import org.jdom.Document;
26: import org.jdom.Element;
27: import org.jdom.JDOMException;
28: import org.jdom.input.SAXBuilder;
29: import org.jdom.output.XMLOutputter;
30:
31: import com.ecyrd.jspwiki.WikiContext;
32:
33: /**
34: * Converting Html to Wiki Markup with NekoHtml for converting html to xhtml and
35: * Xhtml2WikiTranslator for converting xhtml to Wiki Markup.
36: *
37: * @author Sebastian Baltes (sbaltes@gmx.com)
38: */
39: public class HtmlStringToWikiTranslator {
40:
41: private static final String CYBERNEKO_PARSER = "org.cyberneko.html.parsers.SAXParser";
42:
43: public HtmlStringToWikiTranslator() {
44: }
45:
46: public String translate(String html) throws JDOMException,
47: IOException {
48: return translate(html, new XHtmlToWikiConfig());
49: }
50:
51: public String translate(String html, WikiContext wikiContext)
52: throws JDOMException, IOException {
53: return translate(html, new XHtmlToWikiConfig(wikiContext));
54: }
55:
56: public String translate(String html, XHtmlToWikiConfig config)
57: throws JDOMException, IOException {
58: Element element = htmlStringToElement(html);
59: XHtmlElementToWikiTranslator xhtmlTranslator = new XHtmlElementToWikiTranslator(
60: element, config);
61: String wikiMarkup = xhtmlTranslator.getWikiString();
62: return wikiMarkup;
63: }
64:
65: /**
66: * use NekoHtml to parse HTML like well formed XHTML
67: *
68: * @param html
69: * @return xhtml jdom root element (node "HTML")
70: * @throws JDOMException
71: * @throws IOException
72: */
73: private Element htmlStringToElement(String html)
74: throws JDOMException, IOException {
75: SAXBuilder builder = new SAXBuilder(CYBERNEKO_PARSER, true);
76: Document doc = builder.build(new StringReader(html));
77: Element element = doc.getRootElement();
78: return element;
79: }
80:
81: public static String element2String(Element element) {
82: Document document = new Document(element);
83: XMLOutputter outputter = new XMLOutputter();
84: return outputter.outputString(document);
85: }
86:
87: }
|