summaryrefslogtreecommitdiff
path: root/src/core/parser/stack/Stack.cpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-04-12 17:38:36 +0200
committerAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2016-04-25 22:24:15 +0200
commit2416462060ef54cb737688f648d150313b82e5f4 (patch)
tree3de90284b12531c98ac1b5058d8d788348a3b9f3 /src/core/parser/stack/Stack.cpp
parent8bfc7878a725d8f1c2754893bc8b660ff78f89bf (diff)
Pass "greedy" flag to Handler::startToken
Diffstat (limited to 'src/core/parser/stack/Stack.cpp')
-rw-r--r--src/core/parser/stack/Stack.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/core/parser/stack/Stack.cpp b/src/core/parser/stack/Stack.cpp
index 2fe4a8f..c67f43c 100644
--- a/src/core/parser/stack/Stack.cpp
+++ b/src/core/parser/stack/Stack.cpp
@@ -117,6 +117,12 @@ public:
bool hadDefaultField : 1;
/**
+ * Set to false, if the handler is not greedy (true is the default value).
+ * If false, the handler will only be passed one piece of "data" at most.
+ */
+ bool greedy : 1;
+
+ /**
* Default constructor of the HandlerInfo class.
*/
HandlerInfo();
@@ -187,7 +193,8 @@ HandlerInfo::HandlerInfo(std::shared_ptr<Handler> handler)
inDefaultField(false),
inImplicitDefaultField(false),
inValidField(false),
- hadDefaultField(false)
+ hadDefaultField(false),
+ greedy(true)
{
}
@@ -203,7 +210,8 @@ HandlerInfo::HandlerInfo(bool implicit, bool inField, bool inDefaultField,
inDefaultField(inDefaultField),
inImplicitDefaultField(inImplicitDefaultField),
inValidField(true),
- hadDefaultField(false)
+ hadDefaultField(false),
+ greedy(true)
{
}
@@ -1073,8 +1081,9 @@ bool StackImpl::handleOpenTokens(Logger &logger, const Token &token,
// the valid flag
HandlerInfo &info = currentInfo();
info.valid = false;
+ info.greedy = (!shortForm) || descr.greedyShortForm;
try {
- info.valid = handler->startToken(descr.descriptor);
+ info.valid = handler->startToken(descr.descriptor, info.greedy);
}
catch (LoggableException ex) {
logger.log(ex);