summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2014-09-02 17:34:43 +0200
committerDavid Tardon <dtardon@redhat.com>2014-09-02 18:18:40 +0200
commit3a6a821801774abf5af291a4f0495f8a726833ad (patch)
treef29df6de85353f50b44ca744327b9179e3094967
parent2aeb5abc475cbd219994c863f43b8a6044e13494 (diff)
step 1: initial parser
-rw-r--r--src/lib/Makefile.am2
-rw-r--r--src/lib/SDFDocument.cpp6
-rw-r--r--src/lib/SDFParser.cpp64
-rw-r--r--src/lib/SDFParser.h44
4 files changed, 115 insertions, 1 deletions
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index f3a95e6..079b5cc 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -28,6 +28,8 @@ libsdf_@SDF_MAJOR_VERSION@_@SDF_MINOR_VERSION@_la_DEPENDENCIES = @LIBSDF_WIN32_R
libsdf_@SDF_MAJOR_VERSION@_@SDF_MINOR_VERSION@_la_LDFLAGS = $(version_info) -export-dynamic -no-undefined
libsdf_@SDF_MAJOR_VERSION@_@SDF_MINOR_VERSION@_la_SOURCES = \
SDFDocument.cpp \
+ SDFParser.cpp \
+ SDFParser.h \
libsdf_utils.cpp \
libsdf_utils.h
diff --git a/src/lib/SDFDocument.cpp b/src/lib/SDFDocument.cpp
index 07743fd..db2b97d 100644
--- a/src/lib/SDFDocument.cpp
+++ b/src/lib/SDFDocument.cpp
@@ -18,6 +18,7 @@
#include <libsdf/libsdf.h>
#include "libsdf_utils.h"
+#include "SDFParser.h"
using boost::scoped_ptr;
using boost::shared_ptr;
@@ -56,7 +57,10 @@ SDFAPI bool SDFDocument::parse(librevenge::RVNGInputStream *const input, libreve
input_->seek(0, librevenge::RVNG_SEEK_SET);
- return false;
+ const RVNGInputStreamPtr_t content(input_->getSubStreamByName("content"));
+ SDFParser parser(content, document);
+ parser.parse();
+ return true;
}
catch (...)
{
diff --git a/src/lib/SDFParser.cpp b/src/lib/SDFParser.cpp
new file mode 100644
index 0000000..e876c41
--- /dev/null
+++ b/src/lib/SDFParser.cpp
@@ -0,0 +1,64 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libsdf project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <string>
+
+#include "SDFParser.h"
+
+namespace libsdf
+{
+
+using librevenge::RVNGPropertyList;
+
+using std::string;
+
+SDFParser::SDFParser(const RVNGInputStreamPtr_t &input, librevenge::RVNGTextInterface *const generator)
+ : m_input(input)
+ , m_generator(generator)
+{
+}
+
+void SDFParser::parse()
+{
+ m_generator->startDocument(RVNGPropertyList());
+ m_generator->openPageSpan(RVNGPropertyList());
+
+ while (!m_input->isEnd())
+ parseLine();
+
+ m_generator->closePageSpan();
+ m_generator->endDocument();
+}
+
+void SDFParser::parseLine()
+{
+ m_generator->openParagraph(RVNGPropertyList());
+ m_generator->openSpan(RVNGPropertyList());
+
+ string text;
+
+ while (!m_input->isEnd())
+ {
+ const unsigned char c = readU8(m_input);
+ if ('\n' == c)
+ break;
+
+ text.push_back(c);
+ }
+
+ if (!text.empty())
+ m_generator->insertText(text.c_str());
+
+ m_generator->closeSpan();
+ m_generator->closeParagraph();
+}
+
+} // namespace libsdf
+
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
diff --git a/src/lib/SDFParser.h b/src/lib/SDFParser.h
new file mode 100644
index 0000000..19b00ca
--- /dev/null
+++ b/src/lib/SDFParser.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * This file is part of the libsdf project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_SDFPARSER_H
+#define INCLUDED_SDFPARSER_H
+
+#include <librevenge/librevenge.h>
+#include <librevenge-stream/librevenge-stream.h>
+
+#include "libsdf_utils.h"
+
+namespace libsdf
+{
+
+class SDFParser
+{
+ // disable copying
+ SDFParser(const SDFParser &);
+ SDFParser &operator=(const SDFParser &);
+
+public:
+ SDFParser(const RVNGInputStreamPtr_t &input, librevenge::RVNGTextInterface *generator);
+
+ void parse();
+
+private:
+ void parseLine();
+
+private:
+ const RVNGInputStreamPtr_t m_input;
+ librevenge::RVNGTextInterface *m_generator;
+};
+
+} // namespace libsdf
+
+#endif // INCLUDED_SDFPARSER_H
+
+/* vim:set shiftwidth=2 softtabstop=2 expandtab: */