@cavelang/parser 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/token.d.ts +9 -0
- package/dist/src/token.d.ts.map +1 -1
- package/dist/src/token.js +42 -0
- package/dist/src/token.js.map +1 -1
- package/package.json +2 -2
- package/src/token.ts +44 -0
package/dist/src/token.d.ts
CHANGED
|
@@ -57,4 +57,13 @@ export declare const joinComment: (head: string, comment?: string) => string;
|
|
|
57
57
|
* neither joins nor interrupts the comment block above a claim (§6.4).
|
|
58
58
|
*/
|
|
59
59
|
export declare const txOfLine: (raw: string) => undefined | string;
|
|
60
|
+
/**
|
|
61
|
+
* Positions of `needle` occurrences outside `"…"` and `` `…` `` literals —
|
|
62
|
+
* where a rule line splits on `=>` and `,` (spec §24.1), an action body on
|
|
63
|
+
* `,` (§25.1), and an inline mapping on `,` (§23.1): a separator inside a
|
|
64
|
+
* quoted term never splits.
|
|
65
|
+
*/
|
|
66
|
+
export declare const topLevel: (text: string, needle: string) => number[];
|
|
67
|
+
/** Splits `text` at every top-level `needle`, trimming the parts. */
|
|
68
|
+
export declare const splitTopLevel: (text: string, needle: string) => string[];
|
|
60
69
|
//# sourceMappingURL=token.d.ts.map
|
package/dist/src/token.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,MAAM,KAAK,GACb;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,MAAM,MAAM,CAAC,GAAG,KAAK,CAAA;AAErB,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,KAAG,KACV,CAAA;AAE1B,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,KAAG,KACJ,CAAA;AAEjC,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,KAAG,KACJ,CAAA;AAoBjC,qEAAqE;AACrE,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,KAAK,EAClB,CAAA;AAE3B;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,gBAAgB,MAAM,KAAG,MACkC,CAAA;AAEvF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAsB3E,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAO5D,CAAA;AAID;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,SAAS,GAAG,MAC1B,CAAA"}
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,MAAM,KAAK,GACb;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,MAAM,MAAM,CAAC,GAAG,KAAK,CAAA;AAErB,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,KAAG,KACV,CAAA;AAE1B,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,KAAG,KACJ,CAAA;AAEjC,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,KAAG,KACJ,CAAA;AAoBjC,qEAAqE;AACrE,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,KAAK,EAClB,CAAA;AAE3B;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,gBAAgB,MAAM,KAAG,MACkC,CAAA;AAEvF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAsB3E,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,UAAU,MAAM,KAAG,MAO5D,CAAA;AAID;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,SAAS,GAAG,MAC1B,CAAA;AAEzB;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAM,EAwB7D,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAM,EASlE,CAAA"}
|
package/dist/src/token.js
CHANGED
|
@@ -79,4 +79,46 @@ const txLineRe = /^\s*;@\s+(\S+)\s*$/;
|
|
|
79
79
|
* neither joins nor interrupts the comment block above a claim (§6.4).
|
|
80
80
|
*/
|
|
81
81
|
export const txOfLine = (raw) => txLineRe.exec(raw)?.[1];
|
|
82
|
+
/**
|
|
83
|
+
* Positions of `needle` occurrences outside `"…"` and `` `…` `` literals —
|
|
84
|
+
* where a rule line splits on `=>` and `,` (spec §24.1), an action body on
|
|
85
|
+
* `,` (§25.1), and an inline mapping on `,` (§23.1): a separator inside a
|
|
86
|
+
* quoted term never splits.
|
|
87
|
+
*/
|
|
88
|
+
export const topLevel = (text, needle) => {
|
|
89
|
+
if (needle === '') {
|
|
90
|
+
throw new Error('topLevel: the separator must not be empty');
|
|
91
|
+
}
|
|
92
|
+
const positions = [];
|
|
93
|
+
let quote;
|
|
94
|
+
for (let i = 0; i < text.length; i++) {
|
|
95
|
+
const char = text[i];
|
|
96
|
+
if (quote !== undefined) {
|
|
97
|
+
if (char === quote) {
|
|
98
|
+
quote = undefined;
|
|
99
|
+
}
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (char === '"' || char === '`') {
|
|
103
|
+
quote = char;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (text.startsWith(needle, i)) {
|
|
107
|
+
positions.push(i);
|
|
108
|
+
i += needle.length - 1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return positions;
|
|
112
|
+
};
|
|
113
|
+
/** Splits `text` at every top-level `needle`, trimming the parts. */
|
|
114
|
+
export const splitTopLevel = (text, needle) => {
|
|
115
|
+
const parts = [];
|
|
116
|
+
let start = 0;
|
|
117
|
+
for (const at of topLevel(text, needle)) {
|
|
118
|
+
parts.push(text.slice(start, at).trim());
|
|
119
|
+
start = at + needle.length;
|
|
120
|
+
}
|
|
121
|
+
parts.push(text.slice(start).trim());
|
|
122
|
+
return parts;
|
|
123
|
+
};
|
|
82
124
|
//# sourceMappingURL=token.js.map
|
package/dist/src/token.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cavelang/parser",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.35.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CAVE text to AST parser built on @prelude/parser combinators.",
|
|
6
6
|
"keywords": [
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@prelude/parser": "^8.0.1",
|
|
47
|
-
"@cavelang/core": "0.
|
|
47
|
+
"@cavelang/core": "0.35.0"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"build": "tsc -b",
|
package/src/token.ts
CHANGED
|
@@ -115,3 +115,47 @@ const txLineRe = /^\s*;@\s+(\S+)\s*$/
|
|
|
115
115
|
*/
|
|
116
116
|
export const txOfLine = (raw: string): undefined | string =>
|
|
117
117
|
txLineRe.exec(raw)?.[1]
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Positions of `needle` occurrences outside `"…"` and `` `…` `` literals —
|
|
121
|
+
* where a rule line splits on `=>` and `,` (spec §24.1), an action body on
|
|
122
|
+
* `,` (§25.1), and an inline mapping on `,` (§23.1): a separator inside a
|
|
123
|
+
* quoted term never splits.
|
|
124
|
+
*/
|
|
125
|
+
export const topLevel = (text: string, needle: string): number[] => {
|
|
126
|
+
if (needle === '') {
|
|
127
|
+
throw new Error('topLevel: the separator must not be empty')
|
|
128
|
+
}
|
|
129
|
+
const positions: number[] = []
|
|
130
|
+
let quote: undefined | string
|
|
131
|
+
for (let i = 0; i < text.length; i++) {
|
|
132
|
+
const char = text[i]!
|
|
133
|
+
if (quote !== undefined) {
|
|
134
|
+
if (char === quote) {
|
|
135
|
+
quote = undefined
|
|
136
|
+
}
|
|
137
|
+
continue
|
|
138
|
+
}
|
|
139
|
+
if (char === '"' || char === '`') {
|
|
140
|
+
quote = char
|
|
141
|
+
continue
|
|
142
|
+
}
|
|
143
|
+
if (text.startsWith(needle, i)) {
|
|
144
|
+
positions.push(i)
|
|
145
|
+
i += needle.length - 1
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return positions
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** Splits `text` at every top-level `needle`, trimming the parts. */
|
|
152
|
+
export const splitTopLevel = (text: string, needle: string): string[] => {
|
|
153
|
+
const parts: string[] = []
|
|
154
|
+
let start = 0
|
|
155
|
+
for (const at of topLevel(text, needle)) {
|
|
156
|
+
parts.push(text.slice(start, at).trim())
|
|
157
|
+
start = at + needle.length
|
|
158
|
+
}
|
|
159
|
+
parts.push(text.slice(start).trim())
|
|
160
|
+
return parts
|
|
161
|
+
}
|