Merge pull request #28 from wojtask9/master

support multiline tags
This commit is contained in:
Jun Yang
2017-04-10 19:06:16 +08:00
committed by GitHub
4 changed files with 19 additions and 4 deletions
+1 -1
View File
@@ -27,7 +27,7 @@ var hash = new RegExp(`(?:${identifier.source})\\s*:\\s*(?:${value.source})`);
var hashCapture = new RegExp(`(${identifier.source})\\s*:\\s*(${value.source})`, 'g');
// full match
var tagLine = new RegExp(`^\\s*(${identifier.source})\\s*(.*)\\s*$`);
var tagLine = new RegExp(`^\\s*(${identifier.source})\\s*([\\s\\S]*)\\s*$`);
var literalLine = new RegExp(`^${literal.source}$`, 'i');
var variableLine = new RegExp(`^${variable.source}$`);
var numberLine = new RegExp(`^${number.source}$`);
+1 -1
View File
@@ -9,7 +9,7 @@ function parse(html, filepath, options) {
html = whiteSpaceCtrl(html, options);
var tokens = [];
var syntax = /({%-?(.*?)-?%})|({{(.*?)}})/g;
var syntax = /({%-?([\s\S]*?)-?%})|({{([\s\S]*?)}})/g;
var result, htmlFragment, token;
var lastMatchEnd = 0, lastMatchBegin = -1, parsedLinesCount = 0;
+2 -2
View File
@@ -62,9 +62,9 @@ describe('tag', function() {
});
token = {
type: 'tag',
value: 'foo aa:foo bb: arr[0] cc: 2.3 dd:bar.coo',
value: 'foo aa:foo bb: arr[0] cc: 2.3\ndd:bar.coo',
name: 'foo',
args: 'aa:foo bb: arr[0] cc: 2.3 dd:bar.coo'
args: 'aa:foo bb: arr[0] cc: 2.3\ndd:bar.coo'
};
});
it('should call tag.render with scope', function() {
+15
View File
@@ -56,6 +56,21 @@ describe('tokenizer', function() {
expect(tokens[3].type).to.equal('html');
expect(tokens[3].raw).to.equal(' \n ');
});
it('should handle multiple lines tag', function() {
var html = '{%foo\na:a\nb:1.23\n%}';
var tokens = parse(html);
expect(tokens.length).to.equal(1);
expect(tokens[0].type).to.equal('tag');
expect(tokens[0].args).to.equal('a:a\nb:1.23');
expect(tokens[0].raw).to.equal('{%foo\na:a\nb:1.23\n%}');
});
it('should handle multiple lines output', function() {
var html = '{{foo\n|\date:\n"%Y-%m-%d"\n}}';
var tokens = parse(html);
expect(tokens.length).to.equal(1);
expect(tokens[0].type).to.equal('output');
expect(tokens[0].raw).to.equal('{{foo\n|\date:\n"%Y-%m-%d"\n}}');
});
});
describe('whitespace control', function() {
it('should not strip by default', function() {