circuitscript 0.1.7 → 0.1.9
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/cjs/BaseVisitor.js +7 -6
- package/dist/cjs/draw_symbols.js +3 -0
- package/dist/cjs/execute.js +90 -2
- package/dist/cjs/export.js +0 -5
- package/dist/cjs/helpers.js +20 -2
- package/dist/cjs/layout.js +88 -82
- package/dist/cjs/objects/ClassComponent.js +1 -0
- package/dist/cjs/objects/ExecutionScope.js +5 -4
- package/dist/cjs/regenerate-tests.js +6 -5
- package/dist/cjs/utils.js +57 -14
- package/dist/cjs/validate.js +19 -0
- package/dist/cjs/visitor.js +84 -38
- package/dist/esm/BaseVisitor.js +7 -6
- package/dist/esm/draw_symbols.js +4 -1
- package/dist/esm/execute.js +91 -3
- package/dist/esm/export.js +1 -6
- package/dist/esm/helpers.js +21 -3
- package/dist/esm/layout.js +66 -80
- package/dist/esm/objects/ClassComponent.js +1 -0
- package/dist/esm/objects/ExecutionScope.js +5 -4
- package/dist/esm/regenerate-tests.js +6 -5
- package/dist/esm/utils.js +54 -13
- package/dist/esm/validate.js +19 -0
- package/dist/esm/visitor.js +85 -39
- package/dist/types/BaseVisitor.d.ts +3 -1
- package/dist/types/execute.d.ts +6 -1
- package/dist/types/layout.d.ts +148 -0
- package/dist/types/objects/ClassComponent.d.ts +1 -0
- package/dist/types/objects/ExecutionScope.d.ts +3 -2
- package/dist/types/utils.d.ts +9 -1
- package/dist/types/visitor.d.ts +2 -0
- package/package.json +2 -2
|
@@ -6,6 +6,7 @@ import { ClassComponent } from "./objects/ClassComponent.js";
|
|
|
6
6
|
import { Net } from "./objects/Net.js";
|
|
7
7
|
import { CallableParameter, CFunctionOptions, ComplexType, Direction, FunctionDefinedParameter, ReferenceType } from "./objects/types.js";
|
|
8
8
|
import { ParserRuleContext } from 'antlr4ng';
|
|
9
|
+
import { ExecutionWarning } from "./utils.js";
|
|
9
10
|
import { BaseError } from './utils.js';
|
|
10
11
|
import { ExecutionScope } from './objects/ExecutionScope.js';
|
|
11
12
|
import { NodeScriptEnvironment } from "./environment.js";
|
|
@@ -24,6 +25,7 @@ export declare class BaseVisitor extends CircuitScriptVisitor<ComplexType | Refe
|
|
|
24
25
|
onErrorHandler: OnErrorHandler | null;
|
|
25
26
|
environment: NodeScriptEnvironment;
|
|
26
27
|
protected importedFiles: ImportFile[];
|
|
28
|
+
protected warnings: ExecutionWarning[];
|
|
27
29
|
onImportFile: (visitor: BaseVisitor, filePath: string, fileData: string, onErrorHandler: OnErrorHandler) => Promise<{
|
|
28
30
|
hasError: boolean;
|
|
29
31
|
hasParseError: boolean;
|
|
@@ -60,7 +62,7 @@ export declare class BaseVisitor extends CircuitScriptVisitor<ComplexType | Refe
|
|
|
60
62
|
visitArrayExpr: (ctx: ArrayExprContext) => void;
|
|
61
63
|
protected setResult(ctx: ParserRuleContext, value: any): void;
|
|
62
64
|
protected getResult(ctx: ParserRuleContext): any;
|
|
63
|
-
|
|
65
|
+
visitResult(ctx: ParserRuleContext): any;
|
|
64
66
|
protected handleImportFile(name: string, throwErrors?: boolean, ctx?: ParserRuleContext | null): Promise<ImportFile>;
|
|
65
67
|
visitRoundedBracketsExpr: (ctx: RoundedBracketsExprContext) => void;
|
|
66
68
|
protected setupDefinedParameters(funcDefinedParameters: FunctionDefinedParameter[], passedInParameters: CallableParameter[], executor: ExecutionContext): void;
|
package/dist/types/execute.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BlockTypes, FrameType } from './globals.js';
|
|
2
|
+
import { ExecutionWarning } from "./utils.js";
|
|
2
3
|
import { ClassComponent } from './objects/ClassComponent.js';
|
|
3
4
|
import { ExecutionScope } from './objects/ExecutionScope.js';
|
|
4
5
|
import { Net } from './objects/Net.js';
|
|
@@ -28,7 +29,9 @@ export declare class ExecutionContext {
|
|
|
28
29
|
__functionCache: {};
|
|
29
30
|
parentContext: ExecutionContext;
|
|
30
31
|
componentAngleFollowsWire: boolean;
|
|
31
|
-
|
|
32
|
+
warnings: ExecutionWarning[];
|
|
33
|
+
constructor(name: string, namespace: string, netNamespace: string, executionLevel: number | undefined, indentLevel: number | undefined, silent: boolean | undefined, logger: Logger, warnings: ExecutionWarning[], parent: ExecutionContext);
|
|
34
|
+
logWarning(message: string, context?: ParserRuleContext, fileName?: string): void;
|
|
32
35
|
log(...params: any[]): void;
|
|
33
36
|
private setupRoot;
|
|
34
37
|
getUniqueInstanceName(): string;
|
|
@@ -46,6 +49,8 @@ export declare class ExecutionContext {
|
|
|
46
49
|
angle?: NumericValue;
|
|
47
50
|
followWireOrientation: boolean;
|
|
48
51
|
}, isModule?: boolean): ClassComponent;
|
|
52
|
+
private removeArrangePropDuplicates;
|
|
53
|
+
private getArrangePropPins;
|
|
49
54
|
printPoint(extra?: string): void;
|
|
50
55
|
addComponentExisting(component: ClassComponent, pin: number): ComponentPin;
|
|
51
56
|
toComponent(component: ClassComponent, pinId: number | null, options?: {
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Graph } from '@dagrejs/graphlib';
|
|
2
|
+
import { SymbolGraphic, SymbolText, SymbolDrawingCommands } from "./draw_symbols.js";
|
|
3
|
+
import { ClassComponent } from "./objects/ClassComponent.js";
|
|
4
|
+
import { SequenceItem } from "./objects/ExecutionScope.js";
|
|
5
|
+
import { WireAutoDirection } from './globals.js';
|
|
6
|
+
import { WireSegment } from './objects/Wire.js';
|
|
7
|
+
import { Net } from './objects/Net.js';
|
|
8
|
+
import { Logger } from './logger.js';
|
|
9
|
+
import { Frame, FramePlotDirection } from './objects/Frame.js';
|
|
10
|
+
import { BoundBox } from './utils.js';
|
|
11
|
+
import { NumericValue } from './objects/ParamDefinition.js';
|
|
12
|
+
export declare class LayoutEngine {
|
|
13
|
+
logger: Logger;
|
|
14
|
+
layoutWarnings: string[];
|
|
15
|
+
showBaseFrame: boolean;
|
|
16
|
+
constructor(options?: {
|
|
17
|
+
showBaseFrame: boolean;
|
|
18
|
+
});
|
|
19
|
+
protected print(...params: any[]): void;
|
|
20
|
+
protected printLevel(level: number, ...params: any[]): void;
|
|
21
|
+
protected padLevel(value: number): string;
|
|
22
|
+
runLayout(sequence: SequenceItem[], nets: [ClassComponent, pin: number, net: Net][]): SheetFrame[];
|
|
23
|
+
private flattenFrameItems;
|
|
24
|
+
private findJunctions;
|
|
25
|
+
private placeFrames;
|
|
26
|
+
collectElementFrames(frame: RenderFrame, level?: number): RenderFrame[];
|
|
27
|
+
applyFrameOffset(frame: RenderFrame, level?: number): void;
|
|
28
|
+
private placeAndSizeFrame;
|
|
29
|
+
dumpFrame(frame: RenderFrame, level?: number): void;
|
|
30
|
+
private prepareFrames;
|
|
31
|
+
private checkAddFrameTitle;
|
|
32
|
+
generateLayoutGraph(sequence: SequenceItem[], nets: [ClassComponent, pin: number, net: Net][]): {
|
|
33
|
+
graph: Graph;
|
|
34
|
+
containerFrames: RenderFrame[];
|
|
35
|
+
};
|
|
36
|
+
private setGraphEdge;
|
|
37
|
+
private sizeSubGraphs;
|
|
38
|
+
private walkAndPlaceGraph;
|
|
39
|
+
private placeSubgraphV2;
|
|
40
|
+
mergeOriginNodes(node1: RenderItem, pin1: number, node2: RenderItem, pin2: number, originNode1: string, originNode2: string, originNodes: RenderItem[], originNodeGroups: Map<string, RenderItem[]>): void;
|
|
41
|
+
translateNodeBy(offsetX: number, offsetY: number, item: RenderItem): void;
|
|
42
|
+
placeNodeAtPosition(fromX: NumericValue, fromY: NumericValue, item: RenderItem, pin: number, depth?: number): void;
|
|
43
|
+
placeFloatingItems(graph: Graph, item: RenderItem, depth?: number): void;
|
|
44
|
+
printWarnings(): void;
|
|
45
|
+
}
|
|
46
|
+
type RenderItem = RenderComponent | RenderWire | RenderText;
|
|
47
|
+
export declare function applyComponentParamsToSymbol(component: ClassComponent, symbol: SymbolGraphic): void;
|
|
48
|
+
export declare function getBounds(components: (RenderComponent | RenderText)[], wires: RenderWire[], junctions: RenderJunction[], frames: RenderFrame[]): BoundBox;
|
|
49
|
+
export declare class RenderObject {
|
|
50
|
+
x: NumericValue;
|
|
51
|
+
y: NumericValue;
|
|
52
|
+
isFloating: boolean;
|
|
53
|
+
floatingRelativeTo: [selfPin: number, nodeId: string, pin: number][];
|
|
54
|
+
}
|
|
55
|
+
export declare class RenderWire extends RenderObject {
|
|
56
|
+
id: number;
|
|
57
|
+
segments: WireSegment[];
|
|
58
|
+
points: {
|
|
59
|
+
x: number;
|
|
60
|
+
y: number;
|
|
61
|
+
}[];
|
|
62
|
+
netName: string;
|
|
63
|
+
constructor(x: NumericValue, y: NumericValue, segments: WireSegment[]);
|
|
64
|
+
refreshPoints(): void;
|
|
65
|
+
getAutoPoints(value: [x: NumericValue, y: NumericValue], direction: WireAutoDirection): [dx: number, dy: number][];
|
|
66
|
+
getWireEnd(): {
|
|
67
|
+
x: number;
|
|
68
|
+
y: number;
|
|
69
|
+
};
|
|
70
|
+
isEndAutoLength(): boolean;
|
|
71
|
+
getEndAuto(): [instance: ClassComponent, pin: number];
|
|
72
|
+
setEndAuto(untilX: NumericValue, untilY: NumericValue): void;
|
|
73
|
+
toString(): string;
|
|
74
|
+
}
|
|
75
|
+
export type MergedWire = {
|
|
76
|
+
netName: string;
|
|
77
|
+
segments: [x: number, y: number][][];
|
|
78
|
+
intersectPoints: [x: number, y: number, count: number][];
|
|
79
|
+
};
|
|
80
|
+
export declare class RenderComponent extends RenderObject {
|
|
81
|
+
component: ClassComponent;
|
|
82
|
+
symbol: SymbolGraphic;
|
|
83
|
+
width: number;
|
|
84
|
+
height: number;
|
|
85
|
+
displaySymbol: string | null;
|
|
86
|
+
constructor(component: ClassComponent, width: number, height: number);
|
|
87
|
+
doesOverlap(other: RenderComponent): boolean;
|
|
88
|
+
toString(): string;
|
|
89
|
+
}
|
|
90
|
+
export declare class RenderText extends RenderObject {
|
|
91
|
+
symbol: SymbolText;
|
|
92
|
+
_fontSize: NumericValue;
|
|
93
|
+
_fontWeight: string;
|
|
94
|
+
get fontSize(): NumericValue;
|
|
95
|
+
set fontSize(value: NumericValue);
|
|
96
|
+
get fontWeight(): string;
|
|
97
|
+
set fontWeight(value: string);
|
|
98
|
+
constructor(text: string);
|
|
99
|
+
}
|
|
100
|
+
export declare class RenderFrame extends RenderObject {
|
|
101
|
+
bounds: BoundBox | null;
|
|
102
|
+
frame: Frame;
|
|
103
|
+
innerItems: (RenderComponent | RenderFrame | RenderText)[];
|
|
104
|
+
translateX: number;
|
|
105
|
+
translateY: number;
|
|
106
|
+
padding: NumericValue;
|
|
107
|
+
gap: NumericValue;
|
|
108
|
+
borderWidth: NumericValue;
|
|
109
|
+
direction: FramePlotDirection;
|
|
110
|
+
width: NumericValue | null;
|
|
111
|
+
height: NumericValue | null;
|
|
112
|
+
subgraphId: string;
|
|
113
|
+
renderType: RenderFrameType;
|
|
114
|
+
containsTitle: boolean;
|
|
115
|
+
constructor(frame: Frame, type?: RenderFrameType);
|
|
116
|
+
toString(): string;
|
|
117
|
+
}
|
|
118
|
+
export declare enum RenderFrameType {
|
|
119
|
+
Container = 1,
|
|
120
|
+
Elements = 2
|
|
121
|
+
}
|
|
122
|
+
export declare class RenderJunction {
|
|
123
|
+
x: NumericValue;
|
|
124
|
+
y: NumericValue;
|
|
125
|
+
constructor(x: NumericValue, y: NumericValue);
|
|
126
|
+
}
|
|
127
|
+
export type SheetFrame = {
|
|
128
|
+
frame: RenderFrame;
|
|
129
|
+
frames: RenderFrame[];
|
|
130
|
+
components: RenderComponent[];
|
|
131
|
+
wires: RenderWire[];
|
|
132
|
+
textObjects: RenderText[];
|
|
133
|
+
junctions: RenderJunction[];
|
|
134
|
+
mergedWires: MergedWire[];
|
|
135
|
+
};
|
|
136
|
+
export declare function CalculatePinPositions(component: ClassComponent): Map<number, {
|
|
137
|
+
x: NumericValue;
|
|
138
|
+
y: NumericValue;
|
|
139
|
+
angle: NumericValue;
|
|
140
|
+
}>;
|
|
141
|
+
export declare function ExtractDrawingRects(drawing: SymbolDrawingCommands): {
|
|
142
|
+
x: NumericValue;
|
|
143
|
+
y: NumericValue;
|
|
144
|
+
width: NumericValue;
|
|
145
|
+
height: NumericValue;
|
|
146
|
+
className: string | undefined;
|
|
147
|
+
}[];
|
|
148
|
+
export { BoundBox };
|
|
@@ -18,6 +18,7 @@ export declare class ClassComponent {
|
|
|
18
18
|
_copyID?: number;
|
|
19
19
|
_copyFrom?: ClassComponent;
|
|
20
20
|
_pointLinkComponent?: ClassComponent;
|
|
21
|
+
_unplacedPins: number[];
|
|
21
22
|
arrangeProps: Map<string, NumericValue[]> | null;
|
|
22
23
|
displayProp: SymbolDrawingCommands | null;
|
|
23
24
|
widthProp: number | null;
|
|
@@ -5,6 +5,7 @@ import { LayoutDirection } from '../globals.js';
|
|
|
5
5
|
import { Wire, WireSegment } from './Wire.js';
|
|
6
6
|
import { Frame } from './Frame.js';
|
|
7
7
|
import { ParserRuleContext } from 'antlr4ng';
|
|
8
|
+
import { BaseVisitor } from 'src/BaseVisitor.js';
|
|
8
9
|
type OnPropertyHandler = (path: PropertyTreeKey[], value: any, valueContext: ParserRuleContext) => void;
|
|
9
10
|
export type PropertyTreeKey = [ctx: ParserRuleContext, value: any] | ['index', number];
|
|
10
11
|
export declare class ExecutionScope {
|
|
@@ -50,10 +51,10 @@ export declare class ExecutionScope {
|
|
|
50
51
|
setCurrent(component: ClassComponent | null, pin?: number | null): void;
|
|
51
52
|
enterContext(context: ParserRuleContext): void;
|
|
52
53
|
exitContext(): ParserRuleContext;
|
|
53
|
-
findPropertyKeyTree
|
|
54
|
+
private findPropertyKeyTree;
|
|
54
55
|
setOnPropertyHandler(handler: OnPropertyHandler): void;
|
|
55
56
|
popOnPropertyHandler(): OnPropertyHandler;
|
|
56
|
-
triggerPropertyHandler(value: any, valueCtx: ParserRuleContext): void;
|
|
57
|
+
triggerPropertyHandler(visitor: BaseVisitor, value: any, valueCtx: ParserRuleContext): void;
|
|
57
58
|
}
|
|
58
59
|
export declare enum SequenceAction {
|
|
59
60
|
To = "to",
|
package/dist/types/utils.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { ClassComponent } from "./objects/ClassComponent.js";
|
|
|
4
4
|
import { NumericValue } from "./objects/ParamDefinition.js";
|
|
5
5
|
import { SequenceAction, SequenceItem } from './objects/ExecutionScope.js';
|
|
6
6
|
import { BlockTypes } from './globals.js';
|
|
7
|
+
import { ExecutionWarning } from './utils.js';
|
|
7
8
|
export declare class SimpleStopwatch {
|
|
8
9
|
startTime: Date;
|
|
9
10
|
constructor();
|
|
@@ -49,9 +50,10 @@ export declare class BaseError extends Error {
|
|
|
49
50
|
startToken?: Token;
|
|
50
51
|
endToken?: Token;
|
|
51
52
|
filePath?: string;
|
|
52
|
-
constructor(message: string,
|
|
53
|
+
constructor(message: string, startTokenOrCtx?: Token | ParserRuleContext, endToken?: Token, filePath?: string);
|
|
53
54
|
toString(): string;
|
|
54
55
|
}
|
|
56
|
+
export declare function getLinePositionAsString(ctx: ParserRuleContext): string | null;
|
|
55
57
|
export declare class ParseSyntaxError extends BaseError {
|
|
56
58
|
name: string;
|
|
57
59
|
}
|
|
@@ -65,3 +67,9 @@ export declare class RenderError extends Error {
|
|
|
65
67
|
stage?: string;
|
|
66
68
|
constructor(message: string, stage?: string);
|
|
67
69
|
}
|
|
70
|
+
export type ExecutionWarning = {
|
|
71
|
+
message: string;
|
|
72
|
+
fileName?: string;
|
|
73
|
+
ctx?: ParserRuleContext;
|
|
74
|
+
};
|
|
75
|
+
export declare function printWarnings(warnings: ExecutionWarning[]): void;
|
package/dist/types/visitor.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Add_component_exprContext, AdditionExprContext, At_blockContext, At_blo
|
|
|
2
2
|
import { ClassComponent } from './objects/ClassComponent.js';
|
|
3
3
|
import { PinTypes } from './objects/PinTypes.js';
|
|
4
4
|
import { ComponentPin, ComponentPinNet, ComponentPinNetPair } from './objects/types.js';
|
|
5
|
+
import { ExecutionWarning } from "./utils.js";
|
|
5
6
|
import { Net } from './objects/Net.js';
|
|
6
7
|
import { BaseVisitor } from './BaseVisitor.js';
|
|
7
8
|
import { ParserRuleContext } from 'antlr4ng';
|
|
@@ -83,6 +84,7 @@ export declare class ParserVisitor extends BaseVisitor {
|
|
|
83
84
|
};
|
|
84
85
|
private resolveNets;
|
|
85
86
|
private getPropertyExprList;
|
|
87
|
+
getWarnings(): ExecutionWarning[];
|
|
86
88
|
}
|
|
87
89
|
export type NetListItem = {
|
|
88
90
|
instanceName: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "circuitscript",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"description": "Interpreter for the circuitscript language",
|
|
5
5
|
"homepage": "https://circuitscript.net",
|
|
6
6
|
"engines": {
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"boilerplate_author": "Jakub Synowiec <jsynowiec@users.noreply.github.com>",
|
|
79
79
|
"license": "MIT",
|
|
80
80
|
"dependencies": {
|
|
81
|
-
"@dagrejs/graphlib": "2.
|
|
81
|
+
"@dagrejs/graphlib": "^2.2.4",
|
|
82
82
|
"@flatten-js/core": "1.5.5",
|
|
83
83
|
"@svgdotjs/svg.js": "3.2.0",
|
|
84
84
|
"antlr4ng": "^3.0.4",
|