@@ -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 {
@@ -124,15 +126,15 @@ class ASTNode {
124126
125127 ASTNode (llvm::StringMap<AstPtr> &Partials, llvm::StringMap<Lambda> &Lambdas,
126128 llvm::StringMap<SectionLambda> &SectionLambdas,
127- llvm::DenseMap< char , std::string> &Escapes)
129+ EscapeMap &Escapes)
128130 : Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
129131 Escapes (Escapes), Ty(Type::Root), Parent(nullptr ),
130132 ParentContext(nullptr ) {}
131133
132134 ASTNode (std::string Body, ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
133135 llvm::StringMap<Lambda> &Lambdas,
134136 llvm::StringMap<SectionLambda> &SectionLambdas,
135- llvm::DenseMap< char , std::string> &Escapes)
137+ EscapeMap &Escapes)
136138 : Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
137139 Escapes(Escapes), Ty(Type::Text), Body(std::move(Body)), Parent(Parent),
138140 ParentContext(nullptr ) {}
@@ -141,7 +143,7 @@ class ASTNode {
141143 ASTNode (Type Ty, Accessor Accessor, ASTNode *Parent,
142144 llvm::StringMap<AstPtr> &Partials, llvm::StringMap<Lambda> &Lambdas,
143145 llvm::StringMap<SectionLambda> &SectionLambdas,
144- llvm::DenseMap< char , std::string> &Escapes)
146+ EscapeMap &Escapes)
145147 : Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
146148 Escapes(Escapes), Ty(Ty), Parent(Parent),
147149 AccessorValue(std::move(Accessor)), ParentContext(nullptr ) {}
@@ -171,7 +173,7 @@ class ASTNode {
171173 StringMap<AstPtr> &Partials;
172174 StringMap<Lambda> &Lambdas;
173175 StringMap<SectionLambda> &SectionLambdas;
174- DenseMap< char , std::string> &Escapes;
176+ EscapeMap &Escapes;
175177 Type Ty;
176178 size_t Indentation = 0 ;
177179 std::string RawBody;
@@ -187,15 +189,15 @@ class ASTNode {
187189AstPtr createRootNode (llvm::StringMap<AstPtr> &Partials,
188190 llvm::StringMap<Lambda> &Lambdas,
189191 llvm::StringMap<SectionLambda> &SectionLambdas,
190- llvm::DenseMap< char , std::string> &Escapes) {
192+ EscapeMap &Escapes) {
191193 return std::make_unique<ASTNode>(Partials, Lambdas, SectionLambdas, Escapes);
192194}
193195
194196AstPtr createNode (ASTNode::Type T, Accessor A, ASTNode *Parent,
195197 llvm::StringMap<AstPtr> &Partials,
196198 llvm::StringMap<Lambda> &Lambdas,
197199 llvm::StringMap<SectionLambda> &SectionLambdas,
198- llvm::DenseMap< char , std::string> &Escapes) {
200+ EscapeMap &Escapes) {
199201 return std::make_unique<ASTNode>(T, std::move (A), Parent, Partials, Lambdas,
200202 SectionLambdas, Escapes);
201203}
@@ -204,7 +206,7 @@ AstPtr createTextNode(std::string Body, ASTNode *Parent,
204206 llvm::StringMap<AstPtr> &Partials,
205207 llvm::StringMap<Lambda> &Lambdas,
206208 llvm::StringMap<SectionLambda> &SectionLambdas,
207- llvm::DenseMap< char , std::string> &Escapes) {
209+ EscapeMap &Escapes) {
208210 return std::make_unique<ASTNode>(std::move (Body), Parent, Partials, Lambdas,
209211 SectionLambdas, Escapes);
210212}
@@ -374,7 +376,7 @@ SmallVector<Token> tokenize(StringRef Template) {
374376class EscapeStringStream : public raw_ostream {
375377public:
376378 explicit EscapeStringStream (llvm::raw_ostream &WrappedStream,
377- DenseMap< char , std::string> &Escape)
379+ EscapeMap &Escape)
378380 : Escape(Escape), WrappedStream(WrappedStream) {
379381 SetUnbuffered ();
380382 }
@@ -394,7 +396,7 @@ class EscapeStringStream : public raw_ostream {
394396 uint64_t current_pos () const override { return WrappedStream.tell (); }
395397
396398private:
397- DenseMap< char , std::string> &Escape;
399+ EscapeMap &Escape;
398400 llvm::raw_ostream &WrappedStream;
399401};
400402
@@ -433,13 +435,13 @@ class Parser {
433435 AstPtr parse (llvm::StringMap<AstPtr> &Partials,
434436 llvm::StringMap<Lambda> &Lambdas,
435437 llvm::StringMap<SectionLambda> &SectionLambdas,
436- llvm::DenseMap< char , std::string> &Escapes);
438+ EscapeMap &Escapes);
437439
438440private:
439441 void parseMustache (ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
440442 llvm::StringMap<Lambda> &Lambdas,
441443 llvm::StringMap<SectionLambda> &SectionLambdas,
442- llvm::DenseMap< char , std::string> &Escapes);
444+ EscapeMap &Escapes);
443445
444446 SmallVector<Token> Tokens;
445447 size_t CurrentPtr;
@@ -449,7 +451,7 @@ class Parser {
449451AstPtr Parser::parse (llvm::StringMap<AstPtr> &Partials,
450452 llvm::StringMap<Lambda> &Lambdas,
451453 llvm::StringMap<SectionLambda> &SectionLambdas,
452- llvm::DenseMap< char , std::string> &Escapes) {
454+ EscapeMap &Escapes) {
453455 Tokens = tokenize (TemplateStr);
454456 CurrentPtr = 0 ;
455457 AstPtr RootNode = createRootNode (Partials, Lambdas, SectionLambdas, Escapes);
@@ -460,7 +462,7 @@ AstPtr Parser::parse(llvm::StringMap<AstPtr> &Partials,
460462void Parser::parseMustache (ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
461463 llvm::StringMap<Lambda> &Lambdas,
462464 llvm::StringMap<SectionLambda> &SectionLambdas,
463- llvm::DenseMap< char , std::string> &Escapes) {
465+ EscapeMap &Escapes) {
464466
465467 while (CurrentPtr < Tokens.size ()) {
466468 Token CurrentToken = Tokens[CurrentPtr];
@@ -726,15 +728,16 @@ void Template::registerLambda(std::string Name, SectionLambda L) {
726728 SectionLambdas[Name] = L;
727729}
728730
729- void Template::overrideEscapeCharacters (DenseMap< char , std::string> E) {
731+ void Template::overrideEscapeCharacters (EscapeMap E) {
730732 Escapes = std::move (E);
731733}
732734
733735Template::Template (StringRef TemplateStr) {
734736 Parser P = Parser (TemplateStr);
735737 Tree = P.parse (Partials, Lambdas, SectionLambdas, Escapes);
736738 // The default behavior is to escape html entities.
737- DenseMap<char , std::string> HtmlEntities = {{' &' , " &" },
739+ const
740+ EscapeMap HtmlEntities = {{' &' , " &" },
738741 {' <' , " <" },
739742 {' >' , " >" },
740743 {' "' , " "" },
0 commit comments