From c6810179617d2aaf53255994cd38ab925d569a87 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 17 Aug 2014 01:17:05 -0400 Subject: [PATCH] Parser - Converted ::findSubstitution to use recursive scan. --- src/Parser.cpp | 57 +++++++++++++++++++++----------------------------- src/Parser.h | 2 +- 2 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/Parser.cpp b/src/Parser.cpp index 218da720f..ccf2b57c1 100644 --- a/src/Parser.cpp +++ b/src/Parser.cpp @@ -178,7 +178,7 @@ Tree* Parser::parse () findOverrides (); applyOverrides (); - findSubstitution (); + scan (&Parser::findSubstitution); scan (&Parser::findPattern); findTag (); scan (&Parser::findAttribute); @@ -816,42 +816,33 @@ void Parser::findPattern (Tree* t) //////////////////////////////////////////////////////////////////////////////// // /from/to/[g] -void Parser::findSubstitution () +void Parser::findSubstitution (Tree* t) { - std::vector ::iterator i; - for (i = _tree->_branches.begin (); i != _tree->_branches.end (); ++i) + context.debug ("findSubstitution"); + context.debug (t->dump ()); + + std::string raw = t->attribute ("raw"); + Nibbler n (raw); + + std::string from; + std::string to; + bool global = false; + if (n.getQuoted ('/', from) && + n.backN () && + n.getQuoted ('/', to)) { - // Parser override operator. - if ((*i)->attribute ("raw") == "--") - break; + if (n.skip ('g')) + global = true; - // Skip known args. - if (! (*i)->hasTag ("?")) - continue; - - std::string raw = (*i)->attribute ("raw"); - Nibbler n (raw); - - std::string from; - std::string to; - bool global = false; - if (n.getQuoted ('/', from) && - n.backN () && - n.getQuoted ('/', to)) + if (n.depleted () && + !Directory (raw).exists ()) { - if (n.skip ('g')) - global = true; - - if (n.depleted () && - !Directory (raw).exists ()) - { - (*i)->unTag ("?"); - (*i)->removeAllBranches (); - (*i)->tag ("SUBSTITUTION"); - (*i)->attribute ("from", from); - (*i)->attribute ("to", to); - (*i)->attribute ("global", global ? 1 : 0); - } + t->unTag ("?"); + t->removeAllBranches (); + t->tag ("SUBSTITUTION"); + t->attribute ("from", from); + t->attribute ("to", to); + t->attribute ("global", global ? 1 : 0); } } } diff --git a/src/Parser.h b/src/Parser.h index 115d44485..30fe1b66e 100644 --- a/src/Parser.h +++ b/src/Parser.h @@ -71,7 +71,7 @@ private: void scan (void (Parser::*callback)(Tree*), Tree* tree = NULL); void findTerminator (Tree*); void findPattern (Tree*); - void findSubstitution (); + void findSubstitution (Tree*); void findTag (); void findAttribute (Tree*); void findAttributeModifier (Tree*);