@@ -110,6 +110,8 @@ class Token {
110110 size_t Indentation;
111111};
112112
113+ using EscapeMap = DenseMap<char , std::string>;
114+
113115class ASTNode {
114116public:
115117 enum Type {
@@ -123,25 +125,22 @@ class ASTNode {
123125 };
124126
125127 ASTNode (llvm::StringMap<AstPtr> &Partials, llvm::StringMap<Lambda> &Lambdas,
126- llvm::StringMap<SectionLambda> &SectionLambdas,
127- llvm::DenseMap<char , std::string> &Escapes)
128+ llvm::StringMap<SectionLambda> &SectionLambdas, EscapeMap &Escapes)
128129 : Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
129130 Escapes (Escapes), Ty(Type::Root), Parent(nullptr ),
130131 ParentContext(nullptr ) {}
131132
132133 ASTNode (std::string Body, ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
133134 llvm::StringMap<Lambda> &Lambdas,
134- llvm::StringMap<SectionLambda> &SectionLambdas,
135- llvm::DenseMap<char , std::string> &Escapes)
135+ llvm::StringMap<SectionLambda> &SectionLambdas, EscapeMap &Escapes)
136136 : Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
137137 Escapes(Escapes), Ty(Type::Text), Body(std::move(Body)), Parent(Parent),
138138 ParentContext(nullptr ) {}
139139
140140 // Constructor for Section/InvertSection/Variable/UnescapeVariable Nodes
141141 ASTNode (Type Ty, Accessor Accessor, ASTNode *Parent,
142142 llvm::StringMap<AstPtr> &Partials, llvm::StringMap<Lambda> &Lambdas,
143- llvm::StringMap<SectionLambda> &SectionLambdas,
144- llvm::DenseMap<char , std::string> &Escapes)
143+ llvm::StringMap<SectionLambda> &SectionLambdas, EscapeMap &Escapes)
145144 : Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
146145 Escapes(Escapes), Ty(Ty), Parent(Parent),
147146 AccessorValue(std::move(Accessor)), ParentContext(nullptr ) {}
@@ -171,7 +170,7 @@ class ASTNode {
171170 StringMap<AstPtr> &Partials;
172171 StringMap<Lambda> &Lambdas;
173172 StringMap<SectionLambda> &SectionLambdas;
174- DenseMap< char , std::string> &Escapes;
173+ EscapeMap &Escapes;
175174 Type Ty;
176175 size_t Indentation = 0 ;
177176 std::string RawBody;
@@ -187,15 +186,15 @@ class ASTNode {
187186AstPtr createRootNode (llvm::StringMap<AstPtr> &Partials,
188187 llvm::StringMap<Lambda> &Lambdas,
189188 llvm::StringMap<SectionLambda> &SectionLambdas,
190- llvm::DenseMap< char , std::string> &Escapes) {
189+ EscapeMap &Escapes) {
191190 return std::make_unique<ASTNode>(Partials, Lambdas, SectionLambdas, Escapes);
192191}
193192
194193AstPtr createNode (ASTNode::Type T, Accessor A, ASTNode *Parent,
195194 llvm::StringMap<AstPtr> &Partials,
196195 llvm::StringMap<Lambda> &Lambdas,
197196 llvm::StringMap<SectionLambda> &SectionLambdas,
198- llvm::DenseMap< char , std::string> &Escapes) {
197+ EscapeMap &Escapes) {
199198 return std::make_unique<ASTNode>(T, std::move (A), Parent, Partials, Lambdas,
200199 SectionLambdas, Escapes);
201200}
@@ -204,7 +203,7 @@ AstPtr createTextNode(std::string Body, ASTNode *Parent,
204203 llvm::StringMap<AstPtr> &Partials,
205204 llvm::StringMap<Lambda> &Lambdas,
206205 llvm::StringMap<SectionLambda> &SectionLambdas,
207- llvm::DenseMap< char , std::string> &Escapes) {
206+ EscapeMap &Escapes) {
208207 return std::make_unique<ASTNode>(std::move (Body), Parent, Partials, Lambdas,
209208 SectionLambdas, Escapes);
210209}
@@ -374,7 +373,7 @@ SmallVector<Token> tokenize(StringRef Template) {
374373class EscapeStringStream : public raw_ostream {
375374public:
376375 explicit EscapeStringStream (llvm::raw_ostream &WrappedStream,
377- DenseMap< char , std::string> &Escape)
376+ EscapeMap &Escape)
378377 : Escape(Escape), WrappedStream(WrappedStream) {
379378 SetUnbuffered ();
380379 }
@@ -394,7 +393,7 @@ class EscapeStringStream : public raw_ostream {
394393 uint64_t current_pos () const override { return WrappedStream.tell (); }
395394
396395private:
397- DenseMap< char , std::string> &Escape;
396+ EscapeMap &Escape;
398397 llvm::raw_ostream &WrappedStream;
399398};
400399
@@ -433,13 +432,13 @@ class Parser {
433432 AstPtr parse (llvm::StringMap<AstPtr> &Partials,
434433 llvm::StringMap<Lambda> &Lambdas,
435434 llvm::StringMap<SectionLambda> &SectionLambdas,
436- llvm::DenseMap< char , std::string> &Escapes);
435+ EscapeMap &Escapes);
437436
438437private:
439438 void parseMustache (ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
440439 llvm::StringMap<Lambda> &Lambdas,
441440 llvm::StringMap<SectionLambda> &SectionLambdas,
442- llvm::DenseMap< char , std::string> &Escapes);
441+ EscapeMap &Escapes);
443442
444443 SmallVector<Token> Tokens;
445444 size_t CurrentPtr;
@@ -449,7 +448,7 @@ class Parser {
449448AstPtr Parser::parse (llvm::StringMap<AstPtr> &Partials,
450449 llvm::StringMap<Lambda> &Lambdas,
451450 llvm::StringMap<SectionLambda> &SectionLambdas,
452- llvm::DenseMap< char , std::string> &Escapes) {
451+ EscapeMap &Escapes) {
453452 Tokens = tokenize (TemplateStr);
454453 CurrentPtr = 0 ;
455454 AstPtr RootNode = createRootNode (Partials, Lambdas, SectionLambdas, Escapes);
@@ -460,7 +459,7 @@ AstPtr Parser::parse(llvm::StringMap<AstPtr> &Partials,
460459void Parser::parseMustache (ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
461460 llvm::StringMap<Lambda> &Lambdas,
462461 llvm::StringMap<SectionLambda> &SectionLambdas,
463- llvm::DenseMap< char , std::string> &Escapes) {
462+ EscapeMap &Escapes) {
464463
465464 while (CurrentPtr < Tokens.size ()) {
466465 Token CurrentToken = Tokens[CurrentPtr];
@@ -724,19 +723,17 @@ void Template::registerLambda(std::string Name, SectionLambda L) {
724723 SectionLambdas[Name] = L;
725724}
726725
727- void Template::overrideEscapeCharacters (DenseMap<char , std::string> E) {
728- Escapes = std::move (E);
729- }
726+ void Template::overrideEscapeCharacters (EscapeMap E) { Escapes = std::move (E); }
730727
731728Template::Template (StringRef TemplateStr) {
732729 Parser P = Parser (TemplateStr);
733730 Tree = P.parse (Partials, Lambdas, SectionLambdas, Escapes);
734731 // The default behavior is to escape html entities.
735- DenseMap< char , std::string> HtmlEntities = {{' &' , " &" },
736- {' <' , " <" },
737- {' >' , " >" },
738- {' "' , " "" },
739- {' \' ' , " '" }};
732+ const EscapeMap HtmlEntities = {{' &' , " &" },
733+ {' <' , " <" },
734+ {' >' , " >" },
735+ {' "' , " "" },
736+ {' \' ' , " '" }};
740737 overrideEscapeCharacters (HtmlEntities);
741738}
742739
0 commit comments