summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/css/CSSParser.cpp5
-rw-r--r--src/plugins/css/CSSParser.hpp7
-rw-r--r--src/plugins/xml/XmlParser.cpp17
-rw-r--r--src/plugins/xml/XmlParser.hpp4
4 files changed, 12 insertions, 21 deletions
diff --git a/src/plugins/css/CSSParser.cpp b/src/plugins/css/CSSParser.cpp
index 9a041f2..40486cc 100644
--- a/src/plugins/css/CSSParser.cpp
+++ b/src/plugins/css/CSSParser.cpp
@@ -75,10 +75,9 @@ static const std::map<int, CodeTokenDescriptor> CSS_DESCRIPTORS = {
{ESCAPE, {CodeTokenMode::ESCAPE, ESCAPE}},
{LINEBREAK, {CodeTokenMode::LINEBREAK, LINEBREAK}}};
-Rooted<Node> CSSParser::parse(std::istream &is, ParserContext &ctx)
+Rooted<Node> CSSParser::parse(CharReader &reader, ParserContext &ctx)
{
- CharReader input{is};
- CodeTokenizer tokenizer{input, CSS_ROOT, CSS_DESCRIPTORS};
+ CodeTokenizer tokenizer{reader, CSS_ROOT, CSS_DESCRIPTORS};
tokenizer.ignoreComments = true;
tokenizer.ignoreLinebreaks = true;
Rooted<SelectorNode> root = {new SelectorNode{ctx.manager, "root"}};
diff --git a/src/plugins/css/CSSParser.hpp b/src/plugins/css/CSSParser.hpp
index eeb5b2c..6d84dbf 100644
--- a/src/plugins/css/CSSParser.hpp
+++ b/src/plugins/css/CSSParser.hpp
@@ -142,13 +142,16 @@ public:
* rules. You are permitted to just insert a CSS Selector expression
* specifying some part of a DocumentTree you want to refer to.
*
- * @param is is a reference to the input stream that should be parsed.
+ * @param reader is a reference to the CharReader instance from which the
+ * input data should be read.
* @param ctx is a reference to the context that should be used while
* parsing the document.
* @return returns the root node of the resulting SelectorTree. For more
* information on the return conventions consult the Parser.hpp.
*/
- Rooted<Node> parse(std::istream &is, ParserContext &ctx) override;
+ Rooted<Node> parse(CharReader &reader, ParserContext &ctx) override;
+
+ using Parser::parse;
/**
* As befits a class called CSSParser, this Parser parses CSS.
diff --git a/src/plugins/xml/XmlParser.cpp b/src/plugins/xml/XmlParser.cpp
index 47ed97a..90ea7fa 100644
--- a/src/plugins/xml/XmlParser.cpp
+++ b/src/plugins/xml/XmlParser.cpp
@@ -182,14 +182,13 @@ std::set<std::string> XmlParser::mimetypes()
return std::set<std::string>{{"text/vnd.ousia.oxm", "text/vnd.ousia.oxd"}};
}
-Rooted<Node> XmlParser::parse(std::istream &is, ParserContext &ctx)
+Rooted<Node> XmlParser::parse(CharReader &reader, ParserContext &ctx)
{
// Create the parser object
ScopedExpatXmlParser p{"UTF-8"};
// Create the parser stack instance and pass the reference to the state
// machine descriptor
- CharReader reader(is);
ParserStack stack{ctx, XML_HANDLERS};
XML_SetUserData(&p, &stack);
@@ -207,18 +206,8 @@ Rooted<Node> XmlParser::parse(std::istream &is, ParserContext &ctx)
throw LoggableException{"Internal error: XML parser out of memory!"};
}
- // Read the input file line by line (this needs to be done to allow
- // for nice error messages)
- // TODO: Add a corresponding function to the reader
- size_t bytesRead = 0;
- char *tar = buf;
- while (bytesRead < BUFFER_SIZE && reader.read(*tar)) {
- bytesRead++;
- if (*tar == '\n') {
- break;
- }
- tar++;
- }
+ // Read into the buffer
+ size_t bytesRead = reader.readRaw(buf, BUFFER_SIZE);
// Parse the data and handle any XML error
if (!XML_ParseBuffer(&p, bytesRead, bytesRead == 0)) {
diff --git a/src/plugins/xml/XmlParser.hpp b/src/plugins/xml/XmlParser.hpp
index b19af1e..62f0128 100644
--- a/src/plugins/xml/XmlParser.hpp
+++ b/src/plugins/xml/XmlParser.hpp
@@ -52,11 +52,11 @@ public:
* Parses the given input stream as XML file and returns the parsed
* top-level node.
*
- * @param is is the input stream that will be parsed.
+ * @param reader is the CharReader from which the input should be read.
* @param ctx is a reference to the ParserContext instance that should be
* used.
*/
- Rooted<Node> parse(std::istream &is, ParserContext &ctx) override;
+ Rooted<Node> parse(CharReader &reader, ParserContext &ctx) override;
using Parser::parse;
};