@sciexpr/parser 0.1.0 → 0.1.1
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/index.cjs +16 -4
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +16 -4
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -182,9 +182,17 @@ var LatexParser = class {
|
|
|
182
182
|
// ==========================================================================
|
|
183
183
|
// Parse Expressions
|
|
184
184
|
// ==========================================================================
|
|
185
|
-
|
|
185
|
+
/**
|
|
186
|
+
* Parse a sequence of expressions.
|
|
187
|
+
* @param stopType Optional token type to stop at (e.g. CloseBrace inside a group).
|
|
188
|
+
* When set, the loop breaks BEFORE consuming the stop token.
|
|
189
|
+
*/
|
|
190
|
+
parseExpressions(stopType) {
|
|
186
191
|
const exprs = [];
|
|
187
192
|
while (!this.isEOF()) {
|
|
193
|
+
if (stopType !== void 0 && this.peek()?.type === stopType) {
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
188
196
|
const expr = this.parseExpression();
|
|
189
197
|
if (expr) exprs.push(expr);
|
|
190
198
|
}
|
|
@@ -220,6 +228,10 @@ var LatexParser = class {
|
|
|
220
228
|
this.advance();
|
|
221
229
|
expr = (0, import_core2.createSymbol)(token.value, this.classifySymbol(token.value));
|
|
222
230
|
break;
|
|
231
|
+
case "ampersand" /* Ampersand */:
|
|
232
|
+
this.advance();
|
|
233
|
+
expr = (0, import_core2.createSymbol)("&", import_core.SymbolType.Ordinary);
|
|
234
|
+
break;
|
|
223
235
|
case "number" /* Number */:
|
|
224
236
|
this.advance();
|
|
225
237
|
expr = (0, import_core2.createSymbol)(token.value, import_core.SymbolType.Number);
|
|
@@ -230,13 +242,13 @@ var LatexParser = class {
|
|
|
230
242
|
// Skip whitespace
|
|
231
243
|
case "openParen" /* OpenParen */:
|
|
232
244
|
this.advance();
|
|
233
|
-
const body = this.parseExpressions();
|
|
245
|
+
const body = this.parseExpressions("closeParen" /* CloseParen */);
|
|
234
246
|
this.skipType("closeParen" /* CloseParen */);
|
|
235
247
|
expr = (0, import_core2.createDelimiter)("(", ")", body.length === 1 ? body[0] : (0, import_core2.createGroup)(body));
|
|
236
248
|
break;
|
|
237
249
|
case "openBracket" /* OpenBracket */:
|
|
238
250
|
this.advance();
|
|
239
|
-
const bracketBody = this.parseExpressions();
|
|
251
|
+
const bracketBody = this.parseExpressions("closeBracket" /* CloseBracket */);
|
|
240
252
|
this.skipType("closeBracket" /* CloseBracket */);
|
|
241
253
|
expr = (0, import_core2.createDelimiter)("[", "]", bracketBody.length === 1 ? bracketBody[0] : (0, import_core2.createGroup)(bracketBody));
|
|
242
254
|
break;
|
|
@@ -346,7 +358,7 @@ var LatexParser = class {
|
|
|
346
358
|
/** 解析 { expressions } 分组 */
|
|
347
359
|
parseGroup() {
|
|
348
360
|
this.skipType("openBrace" /* OpenBrace */);
|
|
349
|
-
const children = this.parseExpressions();
|
|
361
|
+
const children = this.parseExpressions("closeBrace" /* CloseBrace */);
|
|
350
362
|
this.skipType("closeBrace" /* CloseBrace */);
|
|
351
363
|
return (0, import_core2.createGroup)(children);
|
|
352
364
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -83,6 +83,11 @@ declare class LatexParser implements IParser {
|
|
|
83
83
|
private displayMode;
|
|
84
84
|
canParse(input: string): boolean;
|
|
85
85
|
parse(input: string, options?: ParseOptions): ExpressionRoot;
|
|
86
|
+
/**
|
|
87
|
+
* Parse a sequence of expressions.
|
|
88
|
+
* @param stopType Optional token type to stop at (e.g. CloseBrace inside a group).
|
|
89
|
+
* When set, the loop breaks BEFORE consuming the stop token.
|
|
90
|
+
*/
|
|
86
91
|
private parseExpressions;
|
|
87
92
|
private parseExpression;
|
|
88
93
|
/** 处理上/下标:检查 ^ 和 _ 后附加到 base 节点 */
|
package/dist/index.d.ts
CHANGED
|
@@ -83,6 +83,11 @@ declare class LatexParser implements IParser {
|
|
|
83
83
|
private displayMode;
|
|
84
84
|
canParse(input: string): boolean;
|
|
85
85
|
parse(input: string, options?: ParseOptions): ExpressionRoot;
|
|
86
|
+
/**
|
|
87
|
+
* Parse a sequence of expressions.
|
|
88
|
+
* @param stopType Optional token type to stop at (e.g. CloseBrace inside a group).
|
|
89
|
+
* When set, the loop breaks BEFORE consuming the stop token.
|
|
90
|
+
*/
|
|
86
91
|
private parseExpressions;
|
|
87
92
|
private parseExpression;
|
|
88
93
|
/** 处理上/下标:检查 ^ 和 _ 后附加到 base 节点 */
|
package/dist/index.js
CHANGED
|
@@ -161,9 +161,17 @@ var LatexParser = class {
|
|
|
161
161
|
// ==========================================================================
|
|
162
162
|
// Parse Expressions
|
|
163
163
|
// ==========================================================================
|
|
164
|
-
|
|
164
|
+
/**
|
|
165
|
+
* Parse a sequence of expressions.
|
|
166
|
+
* @param stopType Optional token type to stop at (e.g. CloseBrace inside a group).
|
|
167
|
+
* When set, the loop breaks BEFORE consuming the stop token.
|
|
168
|
+
*/
|
|
169
|
+
parseExpressions(stopType) {
|
|
165
170
|
const exprs = [];
|
|
166
171
|
while (!this.isEOF()) {
|
|
172
|
+
if (stopType !== void 0 && this.peek()?.type === stopType) {
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
167
175
|
const expr = this.parseExpression();
|
|
168
176
|
if (expr) exprs.push(expr);
|
|
169
177
|
}
|
|
@@ -199,6 +207,10 @@ var LatexParser = class {
|
|
|
199
207
|
this.advance();
|
|
200
208
|
expr = createSymbol(token.value, this.classifySymbol(token.value));
|
|
201
209
|
break;
|
|
210
|
+
case "ampersand" /* Ampersand */:
|
|
211
|
+
this.advance();
|
|
212
|
+
expr = createSymbol("&", SymbolType.Ordinary);
|
|
213
|
+
break;
|
|
202
214
|
case "number" /* Number */:
|
|
203
215
|
this.advance();
|
|
204
216
|
expr = createSymbol(token.value, SymbolType.Number);
|
|
@@ -209,13 +221,13 @@ var LatexParser = class {
|
|
|
209
221
|
// Skip whitespace
|
|
210
222
|
case "openParen" /* OpenParen */:
|
|
211
223
|
this.advance();
|
|
212
|
-
const body = this.parseExpressions();
|
|
224
|
+
const body = this.parseExpressions("closeParen" /* CloseParen */);
|
|
213
225
|
this.skipType("closeParen" /* CloseParen */);
|
|
214
226
|
expr = createDelimiter("(", ")", body.length === 1 ? body[0] : createGroup(body));
|
|
215
227
|
break;
|
|
216
228
|
case "openBracket" /* OpenBracket */:
|
|
217
229
|
this.advance();
|
|
218
|
-
const bracketBody = this.parseExpressions();
|
|
230
|
+
const bracketBody = this.parseExpressions("closeBracket" /* CloseBracket */);
|
|
219
231
|
this.skipType("closeBracket" /* CloseBracket */);
|
|
220
232
|
expr = createDelimiter("[", "]", bracketBody.length === 1 ? bracketBody[0] : createGroup(bracketBody));
|
|
221
233
|
break;
|
|
@@ -325,7 +337,7 @@ var LatexParser = class {
|
|
|
325
337
|
/** 解析 { expressions } 分组 */
|
|
326
338
|
parseGroup() {
|
|
327
339
|
this.skipType("openBrace" /* OpenBrace */);
|
|
328
|
-
const children = this.parseExpressions();
|
|
340
|
+
const children = this.parseExpressions("closeBrace" /* CloseBrace */);
|
|
329
341
|
this.skipType("closeBrace" /* CloseBrace */);
|
|
330
342
|
return createGroup(children);
|
|
331
343
|
}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sciexpr/parser",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Scientific Expression Engine - LaTeX & Chemical formula parser",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
7
|
-
"module": "./dist/index.
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
12
|
-
"import": "./dist/index.
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
13
|
"require": "./dist/index.cjs"
|
|
14
14
|
}
|
|
15
15
|
},
|