Skip to content

Commit

Permalink
fix: operator boundary not correctly recognized, fixes #342
Browse files Browse the repository at this point in the history
  • Loading branch information
harttle committed May 4, 2021
1 parent 69f1a39 commit 3e3d84a
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/parser/match-operator.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { IDENTIFIER } from '../util/character'
import { IDENTIFIER, TYPES } from '../util/character'
import { Trie } from '../util/operator-trie'

export function matchOperator (str: string, begin: number, trie: Trie, end = str.length) {
Expand All @@ -10,6 +10,6 @@ export function matchOperator (str: string, begin: number, trie: Trie, end = str
if (node['end']) info = node
}
if (!info) return -1
if (info['needBoundary'] && str.charCodeAt(i) & IDENTIFIER) return -1
if (info['needBoundary'] && (TYPES[str.charCodeAt(i)] & IDENTIFIER)) return -1
return i
}
3 changes: 2 additions & 1 deletion src/util/operator-trie.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Operators } from '../render/operator'
import { IDENTIFIER, TYPES } from '../util/character'

export interface Trie {
[key: string]: any;
Expand All @@ -13,7 +14,7 @@ export function createTrie (operators: Operators): Trie {
const c = name[i]
node[c] = node[c] || {}

if (i === name.length - 1 && c !== '=') {
if (i === name.length - 1 && (TYPES[name.charCodeAt(i)] & IDENTIFIER)) {
node[c].needBoundary = true
}

Expand Down
8 changes: 7 additions & 1 deletion test/e2e/issues.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,17 @@ describe('Issues', function () {
)
expect(html).to.equal('falsefalse')
})
it('#321 comparison for empty/nil', async () => {
it('#320 newline_to_br filter should output <br /> instead of <br/>', async () => {
const engine = new Liquid()
const html = await engine.parseAndRender(
`{{ 'a \n b \n c' | newline_to_br | split: '<br />' }}`
)
expect(html).to.equal('a ,\n b ,\n c')
})
it('#342 New lines in logical operator', async () => {
const engine = new Liquid()
const tpl = `{%\r\nif\r\ntrue\r\nor\r\nfalse\r\n%}\r\ntrue\r\n{%\r\nendif\r\n%}`
const html = await engine.parseAndRender(tpl)
expect(html).to.equal('\r\ntrue\r\n')
})
})

0 comments on commit 3e3d84a

Please sign in to comment.