@@ -110,6 +110,8 @@ class Token {
110
110
size_t Indentation;
111
111
};
112
112
113
+ using EscapeMap = DenseMap<char , std::string>;
114
+
113
115
class ASTNode {
114
116
public:
115
117
enum Type {
@@ -123,25 +125,22 @@ class ASTNode {
123
125
};
124
126
125
127
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)
128
129
: Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
129
130
Escapes (Escapes), Ty(Type::Root), Parent(nullptr ),
130
131
ParentContext(nullptr ) {}
131
132
132
133
ASTNode (std::string Body, ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
133
134
llvm::StringMap<Lambda> &Lambdas,
134
- llvm::StringMap<SectionLambda> &SectionLambdas,
135
- llvm::DenseMap<char , std::string> &Escapes)
135
+ llvm::StringMap<SectionLambda> &SectionLambdas, EscapeMap &Escapes)
136
136
: Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
137
137
Escapes(Escapes), Ty(Type::Text), Body(std::move(Body)), Parent(Parent),
138
138
ParentContext(nullptr ) {}
139
139
140
140
// Constructor for Section/InvertSection/Variable/UnescapeVariable Nodes
141
141
ASTNode (Type Ty, Accessor Accessor, ASTNode *Parent,
142
142
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)
145
144
: Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
146
145
Escapes(Escapes), Ty(Ty), Parent(Parent),
147
146
AccessorValue(std::move(Accessor)), ParentContext(nullptr ) {}
@@ -171,7 +170,7 @@ class ASTNode {
171
170
StringMap<AstPtr> &Partials;
172
171
StringMap<Lambda> &Lambdas;
173
172
StringMap<SectionLambda> &SectionLambdas;
174
- DenseMap< char , std::string> &Escapes;
173
+ EscapeMap &Escapes;
175
174
Type Ty;
176
175
size_t Indentation = 0 ;
177
176
std::string RawBody;
@@ -187,15 +186,15 @@ class ASTNode {
187
186
AstPtr createRootNode (llvm::StringMap<AstPtr> &Partials,
188
187
llvm::StringMap<Lambda> &Lambdas,
189
188
llvm::StringMap<SectionLambda> &SectionLambdas,
190
- llvm::DenseMap< char , std::string> &Escapes) {
189
+ EscapeMap &Escapes) {
191
190
return std::make_unique<ASTNode>(Partials, Lambdas, SectionLambdas, Escapes);
192
191
}
193
192
194
193
AstPtr createNode (ASTNode::Type T, Accessor A, ASTNode *Parent,
195
194
llvm::StringMap<AstPtr> &Partials,
196
195
llvm::StringMap<Lambda> &Lambdas,
197
196
llvm::StringMap<SectionLambda> &SectionLambdas,
198
- llvm::DenseMap< char , std::string> &Escapes) {
197
+ EscapeMap &Escapes) {
199
198
return std::make_unique<ASTNode>(T, std::move (A), Parent, Partials, Lambdas,
200
199
SectionLambdas, Escapes);
201
200
}
@@ -204,7 +203,7 @@ AstPtr createTextNode(std::string Body, ASTNode *Parent,
204
203
llvm::StringMap<AstPtr> &Partials,
205
204
llvm::StringMap<Lambda> &Lambdas,
206
205
llvm::StringMap<SectionLambda> &SectionLambdas,
207
- llvm::DenseMap< char , std::string> &Escapes) {
206
+ EscapeMap &Escapes) {
208
207
return std::make_unique<ASTNode>(std::move (Body), Parent, Partials, Lambdas,
209
208
SectionLambdas, Escapes);
210
209
}
@@ -374,7 +373,7 @@ SmallVector<Token> tokenize(StringRef Template) {
374
373
class EscapeStringStream : public raw_ostream {
375
374
public:
376
375
explicit EscapeStringStream (llvm::raw_ostream &WrappedStream,
377
- DenseMap< char , std::string> &Escape)
376
+ EscapeMap &Escape)
378
377
: Escape(Escape), WrappedStream(WrappedStream) {
379
378
SetUnbuffered ();
380
379
}
@@ -394,7 +393,7 @@ class EscapeStringStream : public raw_ostream {
394
393
uint64_t current_pos () const override { return WrappedStream.tell (); }
395
394
396
395
private:
397
- DenseMap< char , std::string> &Escape;
396
+ EscapeMap &Escape;
398
397
llvm::raw_ostream &WrappedStream;
399
398
};
400
399
@@ -433,13 +432,13 @@ class Parser {
433
432
AstPtr parse (llvm::StringMap<AstPtr> &Partials,
434
433
llvm::StringMap<Lambda> &Lambdas,
435
434
llvm::StringMap<SectionLambda> &SectionLambdas,
436
- llvm::DenseMap< char , std::string> &Escapes);
435
+ EscapeMap &Escapes);
437
436
438
437
private:
439
438
void parseMustache (ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
440
439
llvm::StringMap<Lambda> &Lambdas,
441
440
llvm::StringMap<SectionLambda> &SectionLambdas,
442
- llvm::DenseMap< char , std::string> &Escapes);
441
+ EscapeMap &Escapes);
443
442
444
443
SmallVector<Token> Tokens;
445
444
size_t CurrentPtr;
@@ -449,7 +448,7 @@ class Parser {
449
448
AstPtr Parser::parse (llvm::StringMap<AstPtr> &Partials,
450
449
llvm::StringMap<Lambda> &Lambdas,
451
450
llvm::StringMap<SectionLambda> &SectionLambdas,
452
- llvm::DenseMap< char , std::string> &Escapes) {
451
+ EscapeMap &Escapes) {
453
452
Tokens = tokenize (TemplateStr);
454
453
CurrentPtr = 0 ;
455
454
AstPtr RootNode = createRootNode (Partials, Lambdas, SectionLambdas, Escapes);
@@ -460,7 +459,7 @@ AstPtr Parser::parse(llvm::StringMap<AstPtr> &Partials,
460
459
void Parser::parseMustache (ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
461
460
llvm::StringMap<Lambda> &Lambdas,
462
461
llvm::StringMap<SectionLambda> &SectionLambdas,
463
- llvm::DenseMap< char , std::string> &Escapes) {
462
+ EscapeMap &Escapes) {
464
463
465
464
while (CurrentPtr < Tokens.size ()) {
466
465
Token CurrentToken = Tokens[CurrentPtr];
@@ -724,19 +723,17 @@ void Template::registerLambda(std::string Name, SectionLambda L) {
724
723
SectionLambdas[Name] = L;
725
724
}
726
725
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); }
730
727
731
728
Template::Template (StringRef TemplateStr) {
732
729
Parser P = Parser (TemplateStr);
733
730
Tree = P.parse (Partials, Lambdas, SectionLambdas, Escapes);
734
731
// 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
+ {' \' ' , " '" }};
740
737
overrideEscapeCharacters (HtmlEntities);
741
738
}
742
739
0 commit comments