1
#include "html2enmlconverter.h"
3
#include <QXmlStreamReader>
4
#include <QXmlStreamWriter>
7
// Taken from http://xml.evernote.com/pub/enml2.dtd
8
QStringList supportedTags = QStringList() << "a" << "abbr" << "acronym" << "address" << "area" << "b" << "bdo" << "big" <<
9
"blockquote" << "br" << "caption" << "center" << "cite" << "code" << "col" <<
10
"colgroup" << "dd" << "del" << "dfn" << "div" << "dl" << "dt" << "em" <<
11
"en-crypt" << "en-media" << "en-todo" << "font" << "h1" << "h2" << "h3" <<
12
"h4" << "h5" << "h6" << "hr" << "i" << "img" << "ins" << "kbd" << "li" <<
13
"map" << "ol" << "p" << "pre" << "q" << "s" << "samp" << "small" << "span" <<
14
"strike" << "strong" << "sub" << "sup" << "table" << "tbody" << "td" <<
15
"tfoot" << "th" << "thead" << "tr" << "tt" << "u" << "ul" << "var";
18
Html2EnmlConverter::Html2EnmlConverter()
22
QString Html2EnmlConverter::html2enml(const QString &html)
26
QXmlStreamWriter writer(&evml);
27
writer.writeStartDocument();
28
writer.writeDTD("<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">");
31
QXmlStreamReader reader(html);
36
while (!reader.atEnd() && !reader.hasError()) {
37
QXmlStreamReader::TokenType token = reader.readNext();
38
if(token == QXmlStreamReader::StartDocument) {
42
// Handle start elements
43
if(token == QXmlStreamReader::StartElement) {
44
// skip everything if body hasn't started yet
46
if (reader.name() == "body") {
47
writer.writeStartElement("en-note");
52
// Write supported start elements to output (including attributes)
53
if (supportedTags.contains(reader.name().toString())) {
54
writer.writeStartElement(reader.name().toString());
55
writer.writeAttributes(reader.attributes());
59
// Write *all* normal text inside <body> </body> to output
60
if (isBody && token == QXmlStreamReader::Characters) {
61
writer.writeCharacters(reader.text().toString());
64
// handle end elements
65
if (token == QXmlStreamReader::EndElement) {
67
// skip everything after body
68
if (reader.name() == "body") {
69
writer.writeEndElement();
74
// Write closing tags for supported elements
75
if (supportedTags.contains(reader.name().toString())) {
76
writer.writeEndElement();
81
writer.writeEndDocument();