@@ -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 {
@@ -124,15 +126,15 @@ class ASTNode {
124
126
125
127
ASTNode (llvm::StringMap<AstPtr> &Partials, llvm::StringMap<Lambda> &Lambdas,
126
128
llvm::StringMap<SectionLambda> &SectionLambdas,
127
- llvm::DenseMap< char , std::string> &Escapes)
129
+ EscapeMap &Escapes)
128
130
: Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
129
131
Escapes (Escapes), Ty(Type::Root), Parent(nullptr ),
130
132
ParentContext(nullptr ) {}
131
133
132
134
ASTNode (std::string Body, ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
133
135
llvm::StringMap<Lambda> &Lambdas,
134
136
llvm::StringMap<SectionLambda> &SectionLambdas,
135
- llvm::DenseMap< char , std::string> &Escapes)
137
+ EscapeMap &Escapes)
136
138
: Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
137
139
Escapes(Escapes), Ty(Type::Text), Body(std::move(Body)), Parent(Parent),
138
140
ParentContext(nullptr ) {}
@@ -141,7 +143,7 @@ class ASTNode {
141
143
ASTNode (Type Ty, Accessor Accessor, ASTNode *Parent,
142
144
llvm::StringMap<AstPtr> &Partials, llvm::StringMap<Lambda> &Lambdas,
143
145
llvm::StringMap<SectionLambda> &SectionLambdas,
144
- llvm::DenseMap< char , std::string> &Escapes)
146
+ EscapeMap &Escapes)
145
147
: Partials(Partials), Lambdas(Lambdas), SectionLambdas(SectionLambdas),
146
148
Escapes(Escapes), Ty(Ty), Parent(Parent),
147
149
AccessorValue(std::move(Accessor)), ParentContext(nullptr ) {}
@@ -171,7 +173,7 @@ class ASTNode {
171
173
StringMap<AstPtr> &Partials;
172
174
StringMap<Lambda> &Lambdas;
173
175
StringMap<SectionLambda> &SectionLambdas;
174
- DenseMap< char , std::string> &Escapes;
176
+ EscapeMap &Escapes;
175
177
Type Ty;
176
178
size_t Indentation = 0 ;
177
179
std::string RawBody;
@@ -187,15 +189,15 @@ class ASTNode {
187
189
AstPtr createRootNode (llvm::StringMap<AstPtr> &Partials,
188
190
llvm::StringMap<Lambda> &Lambdas,
189
191
llvm::StringMap<SectionLambda> &SectionLambdas,
190
- llvm::DenseMap< char , std::string> &Escapes) {
192
+ EscapeMap &Escapes) {
191
193
return std::make_unique<ASTNode>(Partials, Lambdas, SectionLambdas, Escapes);
192
194
}
193
195
194
196
AstPtr createNode (ASTNode::Type T, Accessor A, ASTNode *Parent,
195
197
llvm::StringMap<AstPtr> &Partials,
196
198
llvm::StringMap<Lambda> &Lambdas,
197
199
llvm::StringMap<SectionLambda> &SectionLambdas,
198
- llvm::DenseMap< char , std::string> &Escapes) {
200
+ EscapeMap &Escapes) {
199
201
return std::make_unique<ASTNode>(T, std::move (A), Parent, Partials, Lambdas,
200
202
SectionLambdas, Escapes);
201
203
}
@@ -204,7 +206,7 @@ AstPtr createTextNode(std::string Body, ASTNode *Parent,
204
206
llvm::StringMap<AstPtr> &Partials,
205
207
llvm::StringMap<Lambda> &Lambdas,
206
208
llvm::StringMap<SectionLambda> &SectionLambdas,
207
- llvm::DenseMap< char , std::string> &Escapes) {
209
+ EscapeMap &Escapes) {
208
210
return std::make_unique<ASTNode>(std::move (Body), Parent, Partials, Lambdas,
209
211
SectionLambdas, Escapes);
210
212
}
@@ -374,7 +376,7 @@ SmallVector<Token> tokenize(StringRef Template) {
374
376
class EscapeStringStream : public raw_ostream {
375
377
public:
376
378
explicit EscapeStringStream (llvm::raw_ostream &WrappedStream,
377
- DenseMap< char , std::string> &Escape)
379
+ EscapeMap &Escape)
378
380
: Escape(Escape), WrappedStream(WrappedStream) {
379
381
SetUnbuffered ();
380
382
}
@@ -394,7 +396,7 @@ class EscapeStringStream : public raw_ostream {
394
396
uint64_t current_pos () const override { return WrappedStream.tell (); }
395
397
396
398
private:
397
- DenseMap< char , std::string> &Escape;
399
+ EscapeMap &Escape;
398
400
llvm::raw_ostream &WrappedStream;
399
401
};
400
402
@@ -433,13 +435,13 @@ class Parser {
433
435
AstPtr parse (llvm::StringMap<AstPtr> &Partials,
434
436
llvm::StringMap<Lambda> &Lambdas,
435
437
llvm::StringMap<SectionLambda> &SectionLambdas,
436
- llvm::DenseMap< char , std::string> &Escapes);
438
+ EscapeMap &Escapes);
437
439
438
440
private:
439
441
void parseMustache (ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
440
442
llvm::StringMap<Lambda> &Lambdas,
441
443
llvm::StringMap<SectionLambda> &SectionLambdas,
442
- llvm::DenseMap< char , std::string> &Escapes);
444
+ EscapeMap &Escapes);
443
445
444
446
SmallVector<Token> Tokens;
445
447
size_t CurrentPtr;
@@ -449,7 +451,7 @@ class Parser {
449
451
AstPtr Parser::parse (llvm::StringMap<AstPtr> &Partials,
450
452
llvm::StringMap<Lambda> &Lambdas,
451
453
llvm::StringMap<SectionLambda> &SectionLambdas,
452
- llvm::DenseMap< char , std::string> &Escapes) {
454
+ EscapeMap &Escapes) {
453
455
Tokens = tokenize (TemplateStr);
454
456
CurrentPtr = 0 ;
455
457
AstPtr RootNode = createRootNode (Partials, Lambdas, SectionLambdas, Escapes);
@@ -460,7 +462,7 @@ AstPtr Parser::parse(llvm::StringMap<AstPtr> &Partials,
460
462
void Parser::parseMustache (ASTNode *Parent, llvm::StringMap<AstPtr> &Partials,
461
463
llvm::StringMap<Lambda> &Lambdas,
462
464
llvm::StringMap<SectionLambda> &SectionLambdas,
463
- llvm::DenseMap< char , std::string> &Escapes) {
465
+ EscapeMap &Escapes) {
464
466
465
467
while (CurrentPtr < Tokens.size ()) {
466
468
Token CurrentToken = Tokens[CurrentPtr];
@@ -726,15 +728,16 @@ void Template::registerLambda(std::string Name, SectionLambda L) {
726
728
SectionLambdas[Name] = L;
727
729
}
728
730
729
- void Template::overrideEscapeCharacters (DenseMap< char , std::string> E) {
731
+ void Template::overrideEscapeCharacters (EscapeMap E) {
730
732
Escapes = std::move (E);
731
733
}
732
734
733
735
Template::Template (StringRef TemplateStr) {
734
736
Parser P = Parser (TemplateStr);
735
737
Tree = P.parse (Partials, Lambdas, SectionLambdas, Escapes);
736
738
// The default behavior is to escape html entities.
737
- DenseMap<char , std::string> HtmlEntities = {{' &' , " &" },
739
+ const
740
+ EscapeMap HtmlEntities = {{' &' , " &" },
738
741
{' <' , " <" },
739
742
{' >' , " >" },
740
743
{' "' , " "" },
0 commit comments