diff options
author | David Tardon <dtardon@redhat.com> | 2014-09-02 17:34:43 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2014-09-02 18:18:40 +0200 |
commit | 3a6a821801774abf5af291a4f0495f8a726833ad (patch) | |
tree | f29df6de85353f50b44ca744327b9179e3094967 | |
parent | 2aeb5abc475cbd219994c863f43b8a6044e13494 (diff) |
step 1: initial parser
-rw-r--r-- | src/lib/Makefile.am | 2 | ||||
-rw-r--r-- | src/lib/SDFDocument.cpp | 6 | ||||
-rw-r--r-- | src/lib/SDFParser.cpp | 64 | ||||
-rw-r--r-- | src/lib/SDFParser.h | 44 |
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: */ |