@drawcall/charta 0.1.15 → 0.1.17
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/generator.d.ts +8 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +51 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/place/index.d.ts +1 -1
- package/dist/place/index.d.ts.map +1 -1
- package/dist/place/index.js +4 -4
- package/package.json +1 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Call } from './parser.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a charta text from a parsed AST.
|
|
4
|
+
* This is the inverse of parse() - it takes the Call[][][] structure
|
|
5
|
+
* and produces the original charta text format.
|
|
6
|
+
*/
|
|
7
|
+
export declare function generate(ast: Call[][][]): string;
|
|
8
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,aAAa,CAAA;AAEjD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,CAsBhD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a charta text from a parsed AST.
|
|
3
|
+
* This is the inverse of parse() - it takes the Call[][][] structure
|
|
4
|
+
* and produces the original charta text format.
|
|
5
|
+
*/
|
|
6
|
+
export function generate(ast) {
|
|
7
|
+
if (ast.length === 0)
|
|
8
|
+
return '';
|
|
9
|
+
const rows = [];
|
|
10
|
+
for (const row of ast) {
|
|
11
|
+
const cells = [];
|
|
12
|
+
for (const cell of row) {
|
|
13
|
+
const calls = [];
|
|
14
|
+
for (const call of cell) {
|
|
15
|
+
calls.push(generateCall(call));
|
|
16
|
+
}
|
|
17
|
+
cells.push(calls.join(' '));
|
|
18
|
+
}
|
|
19
|
+
rows.push(cells.join(' | '));
|
|
20
|
+
}
|
|
21
|
+
return rows.join('\n');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generates a single call string from a Call object.
|
|
25
|
+
* Format: name(param1, param2, key=value, ...)
|
|
26
|
+
*/
|
|
27
|
+
function generateCall(call) {
|
|
28
|
+
const args = [];
|
|
29
|
+
// Add positional parameters
|
|
30
|
+
for (const param of call.locationParams) {
|
|
31
|
+
args.push(formatValue(param));
|
|
32
|
+
}
|
|
33
|
+
// Add key-value parameters
|
|
34
|
+
for (const [key, value] of call.keyParams) {
|
|
35
|
+
args.push(`${key}=${formatValue(value)}`);
|
|
36
|
+
}
|
|
37
|
+
return `${call.name}(${args.join(', ')})`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Formats a value, quoting it if necessary.
|
|
41
|
+
* A value needs to be quoted if it contains special characters
|
|
42
|
+
* that would interfere with parsing: space, tab, comma, parentheses, equals, pipe, newline, or quotes.
|
|
43
|
+
*/
|
|
44
|
+
function formatValue(value) {
|
|
45
|
+
// Check if value contains characters that require quoting
|
|
46
|
+
if (/[ \t,()=|\n"]/.test(value)) {
|
|
47
|
+
// Escape any quotes within the value and wrap in quotes
|
|
48
|
+
return `"${value.replace(/"/g, '\\"')}"`;
|
|
49
|
+
}
|
|
50
|
+
return value;
|
|
51
|
+
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/place/index.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export type PlaceGroupOptions = {
|
|
|
35
35
|
skipBuild?: boolean;
|
|
36
36
|
};
|
|
37
37
|
export declare class PlaceGroup extends Group {
|
|
38
|
-
|
|
38
|
+
readonly batchBuilders: Map<string, PrefabBatchBuilder>;
|
|
39
39
|
constructor(interpreter: Interpreter, _materialFallback?: Material, opts?: PlaceGroupOptions);
|
|
40
40
|
dispose(): void;
|
|
41
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/place/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAQ,MAAM,OAAO,CAAA;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAO/C,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;AAEvD,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,UAAU,CAAA;IACpB,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,WAAW,CAAA;IACxB,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAC5D,IAAI,EAAE,MAAM,CAAA;CACb,KAAK,IAAI,CAAA;AAKV,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAOvD;AAED,qBAAa,kBAAkB;aAIX,UAAU,EAAE,OAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAJpC,SAAgB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAK;gBAG3B,UAAU,EAAE,OAAO,EAClB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ;IAG5E,GAAG,CAAC,MAAM,EAAE,OAAO;IAKZ,KAAK,IAAI,QAAQ;CAGzB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/place/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAQ,MAAM,OAAO,CAAA;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAO/C,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;AAEvD,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,UAAU,CAAA;IACpB,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,WAAW,CAAA;IACxB,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IAC5D,IAAI,EAAE,MAAM,CAAA;CACb,KAAK,IAAI,CAAA;AAKV,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAOvD;AAED,qBAAa,kBAAkB;aAIX,UAAU,EAAE,OAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAJpC,SAAgB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAK;gBAG3B,UAAU,EAAE,OAAO,EAClB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ;IAG5E,GAAG,CAAC,MAAM,EAAE,OAAO;IAKZ,KAAK,IAAI,QAAQ;CAGzB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,aAAa,kCAAwC;gBAEzD,WAAW,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAE,iBAAsB;IAuPhG,OAAO;CAOR"}
|
package/dist/place/index.js
CHANGED
|
@@ -31,7 +31,7 @@ export class PrefabBatchBuilder {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
export class PlaceGroup extends Group {
|
|
34
|
-
batchBuilders = new
|
|
34
|
+
batchBuilders = new Map();
|
|
35
35
|
constructor(interpreter, _materialFallback, opts = {}) {
|
|
36
36
|
super();
|
|
37
37
|
const { mock = false, skipBuild = false } = opts;
|
|
@@ -112,7 +112,7 @@ export class PlaceGroup extends Group {
|
|
|
112
112
|
// In mock mode, we only validate asset existence - skip expensive placement computation
|
|
113
113
|
if (mock)
|
|
114
114
|
continue;
|
|
115
|
-
this.batchBuilders.
|
|
115
|
+
this.batchBuilders.set(parsed.model, batchBuilder);
|
|
116
116
|
const usualSize = new Vector3();
|
|
117
117
|
usualSize.copy(batchBuilder.prefabSize);
|
|
118
118
|
const layerIndex = interpreter.countCalls([row, col], (c) => c.name === 'ground' || c.name === 'ceiling', 0, callIdx) - 1;
|
|
@@ -189,7 +189,7 @@ export class PlaceGroup extends Group {
|
|
|
189
189
|
// In mock mode, skip expensive transform computation and placement
|
|
190
190
|
if (mock)
|
|
191
191
|
continue;
|
|
192
|
-
this.batchBuilders.
|
|
192
|
+
this.batchBuilders.set(parsed.model, batchBuilder);
|
|
193
193
|
const layerIndex = interpreter.countCalls([row, col], (c) => c.name === 'ground' || c.name === 'ceiling', 0, callIdx) - 1;
|
|
194
194
|
const yaw = parsed.yaw ?? 0;
|
|
195
195
|
const alignMode = (parsed.align ?? 'up').toLowerCase();
|
|
@@ -207,7 +207,7 @@ export class PlaceGroup extends Group {
|
|
|
207
207
|
}
|
|
208
208
|
// Build step: skip if mock or skipBuild is enabled
|
|
209
209
|
if (!mock && !skipBuild) {
|
|
210
|
-
for (const batchBuilder of this.batchBuilders) {
|
|
210
|
+
for (const batchBuilder of this.batchBuilders.values()) {
|
|
211
211
|
this.add(batchBuilder.build());
|
|
212
212
|
}
|
|
213
213
|
}
|