@idfkit/core 0.2.0-rc.2 → 0.2.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/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/introspect/describe.d.ts +1 -12
- package/dist/introspect/describe.d.ts.map +1 -1
- package/dist/introspect/describe.js +16 -0
- package/dist/introspect/describe.js.map +1 -1
- package/dist/parse/idf.d.ts.map +1 -1
- package/dist/parse/idf.js +26 -46
- package/dist/parse/idf.js.map +1 -1
- package/dist/parse/lexer.d.ts +6 -13
- package/dist/parse/lexer.d.ts.map +1 -1
- package/dist/parse/lexer.js +44 -109
- package/dist/parse/lexer.js.map +1 -1
- package/dist/parse/scan.d.ts +34 -0
- package/dist/parse/scan.d.ts.map +1 -0
- package/dist/parse/scan.js +177 -0
- package/dist/parse/scan.js.map +1 -0
- package/dist/syntax/classify.d.ts +25 -0
- package/dist/syntax/classify.d.ts.map +1 -0
- package/dist/syntax/classify.js +59 -0
- package/dist/syntax/classify.js.map +1 -0
- package/dist/syntax/layer.d.ts +67 -0
- package/dist/syntax/layer.d.ts.map +1 -0
- package/dist/syntax/layer.js +134 -0
- package/dist/syntax/layer.js.map +1 -0
- package/dist/syntax/region.d.ts +73 -0
- package/dist/syntax/region.d.ts.map +1 -0
- package/dist/syntax/region.js +105 -0
- package/dist/syntax/region.js.map +1 -0
- package/dist/syntax/tokens.d.ts +80 -0
- package/dist/syntax/tokens.d.ts.map +1 -0
- package/dist/syntax/tokens.js +140 -0
- package/dist/syntax/tokens.js.map +1 -0
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -31,6 +31,12 @@ export { getIdfVersion, IdfParseError, parseIdf } from './parse/idf.js';
|
|
|
31
31
|
export type { ParseDiagnostic, ParseOptions, ParseResult } from './parse/idf.js';
|
|
32
32
|
export { getEpJsonVersion, parseEpJson } from './parse/epjson.js';
|
|
33
33
|
export type { EpJson } from './parse/epjson.js';
|
|
34
|
+
export { scanIdf } from './syntax/layer.js';
|
|
35
|
+
export type { Statement, SyntaxLayer } from './syntax/layer.js';
|
|
36
|
+
export { classify } from './syntax/classify.js';
|
|
37
|
+
export type { Token, TokenKind } from './syntax/tokens.js';
|
|
38
|
+
export { lineColumnAt, offsetAt } from './syntax/region.js';
|
|
39
|
+
export type { LineColumn, Region } from './syntax/region.js';
|
|
34
40
|
export { writeIdf, writeObject } from './write/idf.js';
|
|
35
41
|
export type { ObjectWriteOptions, WriteIdfOptions } from './write/idf.js';
|
|
36
42
|
export { toEpJson, writeEpJson } from './write/epjson.js';
|
|
@@ -42,5 +48,5 @@ export type { FieldDescription, ObjectDescription } from './introspect/describe.
|
|
|
42
48
|
export { docsUrlForObject, engineeringReferenceUrl, ioReferenceUrl, searchUrl, } from './docs-url/index.js';
|
|
43
49
|
export type { DocsUrl } from './docs-url/index.js';
|
|
44
50
|
export { Schema, SchemaBundle, httpSource } from '@idfkit/schemas';
|
|
45
|
-
export type { BundleSource, SchemaDelta, SlimField, SlimType } from '@idfkit/schemas';
|
|
51
|
+
export type { BundleSource, ProsePool, SchemaDelta, SlimField, SlimType } from '@idfkit/schemas';
|
|
46
52
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -27,6 +27,9 @@ export { CONFORMANCE_LEVEL } from './conformance.js';
|
|
|
27
27
|
export { lex } from './parse/lexer.js';
|
|
28
28
|
export { getIdfVersion, IdfParseError, parseIdf } from './parse/idf.js';
|
|
29
29
|
export { getEpJsonVersion, parseEpJson } from './parse/epjson.js';
|
|
30
|
+
export { scanIdf } from './syntax/layer.js';
|
|
31
|
+
export { classify } from './syntax/classify.js';
|
|
32
|
+
export { lineColumnAt, offsetAt } from './syntax/region.js';
|
|
30
33
|
export { writeIdf, writeObject } from './write/idf.js';
|
|
31
34
|
export { toEpJson, writeEpJson } from './write/epjson.js';
|
|
32
35
|
export { Severity, validateDocument, validateObject } from './validate/index.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQxC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,8EAA8E;AAC9E,+EAA+E;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG1D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQxC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,8EAA8E;AAC9E,+EAA+E;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGlE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG1D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Schema } from '@idfkit/schemas';
|
|
1
|
+
import type { ProsePool, Schema } from '@idfkit/schemas';
|
|
2
2
|
/**
|
|
3
3
|
* Description of a single field in an EnergyPlus object type.
|
|
4
4
|
*
|
|
@@ -102,16 +102,5 @@ export interface ObjectDescription {
|
|
|
102
102
|
* Python raises `UnknownObjectTypeError`, which has no registered TypeScript
|
|
103
103
|
* counterpart and so must not become a new exported class.
|
|
104
104
|
*/
|
|
105
|
-
/**
|
|
106
|
-
* The schema's explanatory prose, loaded on demand.
|
|
107
|
-
*
|
|
108
|
-
* A plain array of strings, indexed by `SlimType.m` and `SlimField.n`. It is
|
|
109
|
-
* passed in rather than reached for, and that is deliberate: reading it is
|
|
110
|
-
* asynchronous, `describeObjectType` is synchronous, and making the function
|
|
111
|
-
* async to fetch a file most callers do not want would be a breaking change
|
|
112
|
-
* serving the minority. Loading it is the caller's step, and its cost is
|
|
113
|
-
* visible at the call site instead of hidden inside a description.
|
|
114
|
-
*/
|
|
115
|
-
export type ProsePool = readonly string[];
|
|
116
105
|
export declare function describeObjectType(schema: Schema, objType: string, prose?: ProsePool): ObjectDescription;
|
|
117
106
|
//# sourceMappingURL=describe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../src/introspect/describe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAuB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../src/introspect/describe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAuB,MAAM,iBAAiB,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC;;;;;;;OAOG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACxD,2EAA2E;IAC3E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACxD;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACpD;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC7C,6CAA6C;IAC7C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,SAAS,GAChB,iBAAiB,CAmCnB"}
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Describe an EnergyPlus object type: its fields, their order, and their
|
|
3
|
+
* constraints.
|
|
4
|
+
*
|
|
5
|
+
* Synchronous and pure, like the rest of `@idfkit/core`'s root entry: the
|
|
6
|
+
* schema is already in memory, and this only reads it.
|
|
7
|
+
*
|
|
8
|
+
* Ports `idfkit.introspection.describe_object_type`. Where the slim schema
|
|
9
|
+
* cannot reproduce Python exactly the loss is recorded in a comment at the
|
|
10
|
+
* point it happens rather than papered over with a plausible substitute.
|
|
11
|
+
*
|
|
12
|
+
* @throws If `objType` is not defined in this schema version. The message is
|
|
13
|
+
* the one `Schema.require` already produces everywhere else in the package;
|
|
14
|
+
* Python raises `UnknownObjectTypeError`, which has no registered TypeScript
|
|
15
|
+
* counterpart and so must not become a new exported class.
|
|
16
|
+
*/
|
|
1
17
|
export function describeObjectType(schema, objType, prose) {
|
|
2
18
|
const type = schema.require(objType);
|
|
3
19
|
// Exact-cased input resolves to itself, so this matches Python's verbatim
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/introspect/describe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/introspect/describe.ts"],"names":[],"mappings":"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"}
|
package/dist/parse/idf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idf.d.ts","sourceRoot":"","sources":["../../src/parse/idf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAO,KAAK,aAAa,EAAkB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"idf.d.ts","sourceRoot":"","sources":["../../src/parse/idf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAY,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAO,KAAK,aAAa,EAAkB,MAAM,YAAY,CAAC;AAGrE,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IAC5D,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACzB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,EACxD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,YAAiB,GACzB,WAAW,CAAC,CAAC,CAAC,CAoFhB;AAqMD,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;gBAErC,UAAU,EAAE,eAAe,GAAG,SAAS,eAAe,EAAE;CAcrE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc9D"}
|
package/dist/parse/idf.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IdfDocument } from '../document.js';
|
|
2
2
|
import { lex } from './lexer.js';
|
|
3
|
+
import { scan } from './scan.js';
|
|
3
4
|
/**
|
|
4
5
|
* Parse IDF text into a document.
|
|
5
6
|
*
|
|
@@ -202,62 +203,41 @@ function stringIsLegal(definition, field, value) {
|
|
|
202
203
|
return slim.se.some((allowed) => allowed.toLowerCase() === folded);
|
|
203
204
|
}
|
|
204
205
|
/**
|
|
205
|
-
* The 1-based line a field sits on, found by rescanning from
|
|
206
|
+
* The 1-based line a field sits on, found by rescanning the statement from its own offset.
|
|
206
207
|
*
|
|
207
208
|
* The lexer records one offset per object rather than a line per field, because a finding about a
|
|
208
|
-
* field is rare and an array per object is not. This
|
|
209
|
-
*
|
|
210
|
-
* lexer itself follows.
|
|
209
|
+
* field is rare and an array per object is not. This is the rescan that offset exists for, and it
|
|
210
|
+
* runs only while a finding is being built.
|
|
211
211
|
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
212
|
+
* The rescan goes through the shared scanner, so "step over the comment between a separator and
|
|
213
|
+
* its value" is the rule the lexer itself followed rather than a second copy of it. A field's
|
|
214
|
+
* comma is routinely followed by `!- Field Name` on the same line, and a helper that stopped at
|
|
215
|
+
* the `!` would report the line the PREVIOUS value sits on, one too early.
|
|
216
|
+
*
|
|
217
|
+
* `index` counts into `RawObject.values`, which has already had the type name shifted off, so the
|
|
218
|
+
* field wanted is the scanner's `index + 1`: the comma that ends `Building,` is what puts
|
|
219
|
+
* `values[0]` on the line after it. The scan stops at that field, or at the end of the statement
|
|
220
|
+
* when the statement has fewer fields than the finding names, in which case the object's own line
|
|
221
|
+
* is the best answer available.
|
|
215
222
|
*
|
|
216
223
|
* @internal
|
|
217
224
|
*/
|
|
218
225
|
function fieldLine(text, object, index) {
|
|
219
226
|
if (object.offset === undefined)
|
|
220
227
|
return object.line;
|
|
221
|
-
const
|
|
222
|
-
let seen = 0;
|
|
223
|
-
let position = object.offset;
|
|
224
|
-
while (position < text.length && seen < separators) {
|
|
225
|
-
const char = text[position];
|
|
226
|
-
if (char === '!') {
|
|
227
|
-
const newline = text.indexOf('\n', position);
|
|
228
|
-
if (newline < 0)
|
|
229
|
-
break;
|
|
230
|
-
position = newline + 1;
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
if (char === ';')
|
|
234
|
-
break;
|
|
235
|
-
if (char === ',')
|
|
236
|
-
seen += 1;
|
|
237
|
-
position += 1;
|
|
238
|
-
}
|
|
239
|
-
if (seen < separators)
|
|
240
|
-
return object.line;
|
|
241
|
-
// Step over whitespace AND any comment between the separator and the value. A field's comma is
|
|
242
|
-
// routinely followed by `!- Field Name` on the same line, and stopping at the `!` would report
|
|
243
|
-
// the line the PREVIOUS value sits on, one too early.
|
|
244
|
-
while (position < text.length) {
|
|
245
|
-
const char = text[position] ?? '';
|
|
246
|
-
if (char === '!') {
|
|
247
|
-
const newline = text.indexOf('\n', position);
|
|
248
|
-
if (newline < 0)
|
|
249
|
-
break;
|
|
250
|
-
position = newline + 1;
|
|
251
|
-
continue;
|
|
252
|
-
}
|
|
253
|
-
if (!/\s/.test(char))
|
|
254
|
-
break;
|
|
255
|
-
position += 1;
|
|
256
|
-
}
|
|
228
|
+
const wanted = index + 1;
|
|
257
229
|
let line = object.line;
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
230
|
+
scan(text, {
|
|
231
|
+
fieldEnd(field, _start, _end, valueLine) {
|
|
232
|
+
if (field < wanted)
|
|
233
|
+
return;
|
|
234
|
+
line = valueLine;
|
|
235
|
+
return false;
|
|
236
|
+
},
|
|
237
|
+
statementEnd() {
|
|
238
|
+
return false;
|
|
239
|
+
},
|
|
240
|
+
}, { from: object.offset, line: object.line, column: object.column });
|
|
261
241
|
return line;
|
|
262
242
|
}
|
|
263
243
|
function coerce(definition, field, raw) {
|
package/dist/parse/idf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idf.js","sourceRoot":"","sources":["../../src/parse/idf.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,GAAG,EAAsC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"idf.js","sourceRoot":"","sources":["../../src/parse/idf.ts"],"names":[],"mappings":"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"}
|
package/dist/parse/lexer.d.ts
CHANGED
|
@@ -54,20 +54,13 @@ export interface LexOptions {
|
|
|
54
54
|
/**
|
|
55
55
|
* Split IDF text into raw objects.
|
|
56
56
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* the problem was. A scanner is about the same amount of code, is linear in the
|
|
61
|
-
* input, and always knows its line number.
|
|
57
|
+
* The character rules are not here: they live in `scan.ts`, which the syntax layer reads through
|
|
58
|
+
* as well. Two copies of "step over a comment between a separator and its value" that differ by
|
|
59
|
+
* one character put a finding on the wrong field, so there is one copy (research R3).
|
|
62
60
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* - `;` terminates an object
|
|
67
|
-
* - everything else is field text, trimmed
|
|
68
|
-
*
|
|
69
|
-
* There are no string literals and no escape sequences, so a comma cannot occur
|
|
70
|
-
* inside a field value. Real files depend on that.
|
|
61
|
+
* This function is what remains once those rules are elsewhere: assembling values from the text
|
|
62
|
+
* runs the scan reports, and turning a statement into a `RawObject` or into a diagnostic. It asks
|
|
63
|
+
* for no comment and no region, so it pays for neither, and it builds no syntax layer.
|
|
71
64
|
*/
|
|
72
65
|
export declare function lex(text: string, options?: LexOptions): RawObject[];
|
|
73
66
|
//# sourceMappingURL=lexer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/parse/lexer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/parse/lexer.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,mBAAmB,GACnB,cAAc,GACd,OAAO,GACP,iBAAiB,GACjB,YAAY,GACZ,iBAAiB,GACjB,oBAAoB,GACpB,gBAAgB,CAAC;AAErB,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,IAAI,CAAC;CACpD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,SAAS,EAAE,CAgFvE"}
|
package/dist/parse/lexer.js
CHANGED
|
@@ -1,98 +1,66 @@
|
|
|
1
|
+
import { scan } from './scan.js';
|
|
1
2
|
/**
|
|
2
3
|
* Split IDF text into raw objects.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the problem was. A scanner is about the same amount of code, is linear in the
|
|
8
|
-
* input, and always knows its line number.
|
|
5
|
+
* The character rules are not here: they live in `scan.ts`, which the syntax layer reads through
|
|
6
|
+
* as well. Two copies of "step over a comment between a separator and its value" that differ by
|
|
7
|
+
* one character put a finding on the wrong field, so there is one copy (research R3).
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* - `;` terminates an object
|
|
14
|
-
* - everything else is field text, trimmed
|
|
15
|
-
*
|
|
16
|
-
* There are no string literals and no escape sequences, so a comma cannot occur
|
|
17
|
-
* inside a field value. Real files depend on that.
|
|
9
|
+
* This function is what remains once those rules are elsewhere: assembling values from the text
|
|
10
|
+
* runs the scan reports, and turning a statement into a `RawObject` or into a diagnostic. It asks
|
|
11
|
+
* for no comment and no region, so it pays for neither, and it builds no syntax layer.
|
|
18
12
|
*/
|
|
19
13
|
export function lex(text, options = {}) {
|
|
20
14
|
const objects = [];
|
|
21
15
|
const report = options.onDiagnostic;
|
|
22
|
-
|
|
23
|
-
/** Field text pieces, split whenever a comment interrupts a field. */
|
|
16
|
+
/** Field text pieces, one per run the scan reports, joined when the field closes. */
|
|
24
17
|
let chunks = [];
|
|
25
18
|
/** Fields of the object being read; index 0 ends up being the type name. */
|
|
26
19
|
let values = [];
|
|
27
|
-
let index = 0;
|
|
28
|
-
let line = 1;
|
|
29
|
-
let fieldStart = 0;
|
|
30
|
-
let objectLine = 1;
|
|
31
|
-
let objectStarted = false;
|
|
32
|
-
/** Offset of the first character of the current line, for turning an offset into a column. */
|
|
33
|
-
let lineStart = 0;
|
|
34
20
|
/**
|
|
35
|
-
*
|
|
21
|
+
* Where the current statement starts.
|
|
36
22
|
*
|
|
37
23
|
* The first NON-BLANK character, not the start of the field text: Python's regex matches the
|
|
38
24
|
* type name itself, so an object indented three spaces reports column 4 there and has to report
|
|
39
25
|
* column 4 here too, or the corpus compares two different notions of position.
|
|
40
26
|
*/
|
|
27
|
+
let objectLine = 1;
|
|
41
28
|
let objectColumn = 0;
|
|
42
|
-
/** Absolute offset of the current object's first non-blank character. */
|
|
43
29
|
let objectOffset = -1;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const endField = (end) => {
|
|
47
|
-
chunks.push(text.slice(fieldStart, end));
|
|
48
|
-
const value = chunks.join('').trim();
|
|
49
|
-
chunks = [];
|
|
50
|
-
return value;
|
|
51
|
-
};
|
|
52
|
-
while (index < length) {
|
|
53
|
-
const char = text[index];
|
|
54
|
-
// The first non-blank character of an object fixes where the object starts. Recorded here
|
|
55
|
-
// rather than at the delimiter, because by then the leading whitespace has been consumed and
|
|
56
|
-
// the offset that remains points at the padding rather than at the name.
|
|
57
|
-
if (objectColumn === 0 && char !== undefined && !/\s/.test(char)) {
|
|
30
|
+
scan(text, {
|
|
31
|
+
statementStart(offset, line, column) {
|
|
58
32
|
objectLine = line;
|
|
59
|
-
objectColumn =
|
|
60
|
-
objectOffset =
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
33
|
+
objectColumn = column;
|
|
34
|
+
objectOffset = offset;
|
|
35
|
+
},
|
|
36
|
+
fieldText(start, end) {
|
|
37
|
+
chunks.push(text.slice(start, end));
|
|
38
|
+
},
|
|
39
|
+
fieldEnd() {
|
|
40
|
+
values.push(chunks.join('').trim());
|
|
41
|
+
chunks = [];
|
|
42
|
+
},
|
|
43
|
+
statementEnd(_end, unterminated) {
|
|
44
|
+
if (unterminated) {
|
|
45
|
+
// The scan closes the field the input ran out inside, so the trailing text arrived as the
|
|
46
|
+
// last value rather than as a leftover. Popping it leaves `values` holding exactly what a
|
|
47
|
+
// terminated statement would have held, which is what the message reads from.
|
|
48
|
+
const trailing = values.pop() ?? '';
|
|
49
|
+
if (trailing !== '' || values.length > 0) {
|
|
50
|
+
report?.({
|
|
51
|
+
message: `Unterminated object near "${trailing.slice(0, 40) || values[0]}" (missing ";")`,
|
|
52
|
+
line: objectLine,
|
|
53
|
+
code: 'ParseError',
|
|
54
|
+
column: objectColumn || undefined,
|
|
55
|
+
// `values` has not been shifted, because the shift happens on `;` and there was none,
|
|
56
|
+
// so the type name is still at the front. Reporting it is what lets the corpus compare
|
|
57
|
+
// this finding against Python's on `(code, line, typeName)`.
|
|
58
|
+
typeName: values[0],
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
values = [];
|
|
62
|
+
return;
|
|
72
63
|
}
|
|
73
|
-
index = newline + 1;
|
|
74
|
-
fieldStart = index;
|
|
75
|
-
line += 1;
|
|
76
|
-
lineStart = index;
|
|
77
|
-
if (!objectStarted && chunks.join('').trim() === '') {
|
|
78
|
-
chunks = [];
|
|
79
|
-
objectLine = line;
|
|
80
|
-
objectColumn = 0;
|
|
81
|
-
objectOffset = -1;
|
|
82
|
-
}
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
if (char === ',') {
|
|
86
|
-
values.push(endField(index));
|
|
87
|
-
objectStarted = true;
|
|
88
|
-
index += 1;
|
|
89
|
-
fieldStart = index;
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
if (char === ';') {
|
|
93
|
-
values.push(endField(index));
|
|
94
|
-
index += 1;
|
|
95
|
-
fieldStart = index;
|
|
96
64
|
const typeName = values.shift() ?? '';
|
|
97
65
|
if (typeName === '') {
|
|
98
66
|
report?.({
|
|
@@ -112,41 +80,8 @@ export function lex(text, options = {}) {
|
|
|
112
80
|
});
|
|
113
81
|
}
|
|
114
82
|
values = [];
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
objectColumn = 0;
|
|
118
|
-
objectOffset = -1;
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
if (char === '\n') {
|
|
122
|
-
line += 1;
|
|
123
|
-
lineStart = index + 1;
|
|
124
|
-
if (!objectStarted &&
|
|
125
|
-
chunks.join('').trim() === '' &&
|
|
126
|
-
text.slice(fieldStart, index).trim() === '') {
|
|
127
|
-
// Blank line before any object content: keep the start line current.
|
|
128
|
-
chunks = [];
|
|
129
|
-
fieldStart = index + 1;
|
|
130
|
-
objectLine = line;
|
|
131
|
-
objectColumn = 0;
|
|
132
|
-
objectOffset = -1;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
index += 1;
|
|
136
|
-
}
|
|
137
|
-
const trailing = (chunks.join('') + text.slice(fieldStart, length)).trim();
|
|
138
|
-
if (trailing !== '' || values.length > 0) {
|
|
139
|
-
report?.({
|
|
140
|
-
message: `Unterminated object near "${trailing.slice(0, 40) || values[0]}" (missing ";")`,
|
|
141
|
-
line: objectLine,
|
|
142
|
-
code: 'ParseError',
|
|
143
|
-
column: objectColumn || undefined,
|
|
144
|
-
// `values` has not been shifted, because the shift happens on `;` and there was none, so the
|
|
145
|
-
// type name is still at the front. Reporting it is what lets the corpus compare this finding
|
|
146
|
-
// against Python's on `(code, line, typeName)`.
|
|
147
|
-
typeName: values[0],
|
|
148
|
-
});
|
|
149
|
-
}
|
|
83
|
+
},
|
|
84
|
+
});
|
|
150
85
|
return objects;
|
|
151
86
|
}
|
|
152
87
|
//# sourceMappingURL=lexer.js.map
|
package/dist/parse/lexer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/parse/lexer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/parse/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAmEjC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,UAAsB,EAAE;IACxD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAEpC,qFAAqF;IACrF,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B;;;;;;OAMG;IACH,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IAEtB,IAAI,CAAC,IAAI,EAAE;QACT,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM;YACjC,UAAU,GAAG,IAAI,CAAC;YAClB,YAAY,GAAG,MAAM,CAAC;YACtB,YAAY,GAAG,MAAM,CAAC;QACxB,CAAC;QAED,SAAS,CAAC,KAAK,EAAE,GAAG;YAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,QAAQ;YACN,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;QAED,YAAY,CAAC,IAAI,EAAE,YAAY;YAC7B,IAAI,YAAY,EAAE,CAAC;gBACjB,0FAA0F;gBAC1F,0FAA0F;gBAC1F,8EAA8E;gBAC9E,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBACpC,IAAI,QAAQ,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzC,MAAM,EAAE,CAAC;wBACP,OAAO,EAAE,6BAA6B,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,iBAAiB;wBACzF,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,YAAY;wBAClB,MAAM,EAAE,YAAY,IAAI,SAAS;wBACjC,sFAAsF;wBACtF,uFAAuF;wBACvF,6DAA6D;wBAC7D,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;qBACpB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,GAAG,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;YACtC,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;gBACpB,MAAM,EAAE,CAAC;oBACP,OAAO,EAAE,0BAA0B;oBACnC,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,YAAY,IAAI,SAAS;oBACjC,IAAI,EAAE,YAAY;iBACnB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,MAAM;oBACN,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,YAAY,IAAI,SAAS;oBACjC,MAAM,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;iBACrD,CAAC,CAAC;YACL,CAAC;YACD,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The IDF character rules, in one place.
|
|
3
|
+
*
|
|
4
|
+
* The grammar is small:
|
|
5
|
+
* - `!` starts a comment running to the end of its line
|
|
6
|
+
* - `,` separates fields
|
|
7
|
+
* - `;` terminates a statement
|
|
8
|
+
* - everything else is field text
|
|
9
|
+
*
|
|
10
|
+
* There are no string literals and no escape sequences, so a comma cannot occur inside a field
|
|
11
|
+
* value and an `!` always starts a comment. Real files depend on both.
|
|
12
|
+
*
|
|
13
|
+
* A hand-written character walk rather than a regex. The Python library matches objects with a
|
|
14
|
+
* `(?:[^;!]*(?:![^\n]*\n)?)*?` inner loop; that is a nested quantifier, so it backtracks badly on
|
|
15
|
+
* malformed input and cannot report where the problem was. A scan is about the same amount of
|
|
16
|
+
* code, is linear in the input, and always knows its line number.
|
|
17
|
+
*
|
|
18
|
+
* **Why this file exists at all.** Every position this library reports depends on the syntax layer
|
|
19
|
+
* and the model-building read agreeing about where a field begins and ends. Two implementations of
|
|
20
|
+
* "step over a comment between a separator and its value" that differ by one character put a
|
|
21
|
+
* finding on the wrong field, and that class of bug stays invisible until a file puts a comment
|
|
22
|
+
* somewhere unusual. The rules used to exist twice, once inside `lex` and once inside the
|
|
23
|
+
* `fieldLine` helper of `idf.ts`; both are now callers of this scan (research R3).
|
|
24
|
+
*
|
|
25
|
+
* **This module is internal and stays internal.** It is not exported from the package root. The
|
|
26
|
+
* syntax layer, which is public, is what a consumer outside the package reaches for; keeping the
|
|
27
|
+
* scan itself unexported is the reason the layer ships in core rather than beside the language
|
|
28
|
+
* service, because a package boundary drawn around both halves would have forced this file into a
|
|
29
|
+
* published export purely so the other half could reach it.
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/parse/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG"}
|