Skip to content

Commit 99eb22f

Browse files
committed
fixed line:column info
1 parent d9e553f commit 99eb22f

File tree

3 files changed

+28
-15
lines changed

3 files changed

+28
-15
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,21 @@ A simple parser for Jevko in JavaScript.
77
### Node.js
88

99
```
10-
npm install jevko/parsejevko.js#semver:0.1.0
10+
npm install jevko/parsejevko.js#semver:0.1.1
1111
```
1212

1313
### Deno and the browser
1414

1515
Import from [jsDelivr](https://www.jsdelivr.com/):
1616

1717
```js
18-
import {parseJevko} from 'https://cdn.jsdelivr.net/gh/jevko/parsejevko.js@v0.1.0/mod.js'
18+
import {parseJevko} from 'https://cdn.jsdelivr.net/gh/jevko/parsejevko.js@v0.1.1/mod.js'
1919
```
2020

2121
## Quickstart
2222

2323
```js
24-
import {parseJevko} from 'https://cdn.jsdelivr.net/gh/jevko/parsejevko.js@v0.1.0/mod.js'
24+
import {parseJevko} from 'https://cdn.jsdelivr.net/gh/jevko/parsejevko.js@v0.1.1/mod.js'
2525

2626
parseJevko(`hello [world]`)
2727
// -> {

parseJevko.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,14 @@ export const parseJevko = (str, {
99
for (let i = 0; i < str.length; ++i) {
1010
const c = str[i]
1111

12-
if (c === '\n') {
13-
++line
14-
column = 1
15-
} else {
16-
++column
17-
}
18-
1912
if (isEscaped) {
2013
if (c === escaper || c === opener || c === closer) {
2114
buffer += c
2215
isEscaped = false
2316
} else throw SyntaxError(`Invalid escape at ${line}:${column}!`)
24-
} else if (c === escaper) {isEscaped = true}
25-
else if (c === opener) {
17+
} else if (c === escaper) {
18+
isEscaped = true
19+
} else if (c === opener) {
2620
const jevko = {subjevkos: []}
2721
parent.subjevkos.push({prefix: buffer, jevko})
2822
parents.push(parent)
@@ -33,9 +27,18 @@ export const parseJevko = (str, {
3327
buffer = ''
3428
if (parents.length < 1) throw SyntaxError(`Unexpected close at ${line}:${column}!`)
3529
parent = parents.pop()
36-
} else {buffer += c}
30+
} else {
31+
buffer += c
32+
}
33+
34+
if (c === '\n') {
35+
++line
36+
column = 1
37+
} else {
38+
++column
39+
}
3740
}
38-
if (isEscaped || parents.length > 0) throw SyntaxError(`Unexpected end at ${line}:${column}!`)
41+
if (isEscaped || parents.length > 0) throw SyntaxError(`Unexpected end!`)
3942
parent.suffix = buffer
4043
parent.opener = opener
4144
parent.closer = closer

test.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,14 @@ Synonyms [at least 48 published]`)
2424
console.assert(parsed.subjevkos.length === 5)
2525
console.assert(parsed.suffix === "")
2626

27-
console.assert(parsed.subjevkos[2].jevko.subjevkos.some(({prefix}) => prefix.includes(" Kingdom ")))
27+
console.assert(parsed.subjevkos[2].jevko.subjevkos.some(({prefix}) => prefix.includes(" Kingdom ")))
28+
29+
try {
30+
parseJevko(`
31+
this should crash [
32+
with unexpected \`] at 5:1
33+
]
34+
]`)
35+
} catch (e) {
36+
console.assert(e.message.includes('5:1'), e)
37+
}

0 commit comments

Comments
 (0)