circuitscript 0.0.38 → 0.1.2
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 +69 -46
- package/dist/cjs/SymbolValidatorVisitor.js +1 -1
- package/dist/cjs/antlr/CircuitScriptLexer.js +80 -80
- package/dist/cjs/antlr/CircuitScriptParser.js +580 -613
- package/dist/cjs/builtinMethods.js +32 -10
- package/dist/cjs/draw_symbols.js +375 -233
- package/dist/cjs/execute.js +142 -131
- package/dist/cjs/export.js +2 -4
- package/dist/cjs/geometry.js +52 -19
- package/dist/cjs/globals.js +14 -9
- package/dist/cjs/helpers.js +16 -3
- package/dist/cjs/layout.js +143 -151
- package/dist/cjs/logger.js +8 -1
- package/dist/cjs/objects/ClassComponent.js +22 -22
- package/dist/cjs/objects/ExecutionScope.js +10 -4
- package/dist/cjs/objects/Frame.js +4 -1
- package/dist/cjs/objects/ParamDefinition.js +120 -4
- package/dist/cjs/objects/PinDefinition.js +1 -4
- package/dist/cjs/objects/types.js +41 -0
- package/dist/cjs/render.js +41 -110
- package/dist/cjs/sizing.js +33 -7
- package/dist/cjs/utils.js +92 -2
- package/dist/cjs/visitor.js +279 -284
- package/dist/esm/BaseVisitor.mjs +70 -47
- package/dist/esm/SymbolValidatorVisitor.mjs +1 -1
- package/dist/esm/antlr/CircuitScriptLexer.mjs +80 -80
- package/dist/esm/antlr/CircuitScriptParser.mjs +580 -613
- package/dist/esm/builtinMethods.mjs +29 -10
- package/dist/esm/draw_symbols.mjs +381 -238
- package/dist/esm/execute.mjs +144 -133
- package/dist/esm/export.mjs +2 -4
- package/dist/esm/geometry.mjs +52 -19
- package/dist/esm/globals.mjs +13 -8
- package/dist/esm/helpers.mjs +17 -4
- package/dist/esm/layout.mjs +144 -153
- package/dist/esm/logger.mjs +8 -1
- package/dist/esm/objects/ClassComponent.mjs +21 -26
- package/dist/esm/objects/ExecutionScope.mjs +10 -4
- package/dist/esm/objects/Frame.mjs +4 -1
- package/dist/esm/objects/ParamDefinition.mjs +119 -3
- package/dist/esm/objects/PinDefinition.mjs +0 -2
- package/dist/esm/objects/types.mjs +42 -0
- package/dist/esm/render.mjs +44 -113
- package/dist/esm/sizing.mjs +34 -8
- package/dist/esm/utils.mjs +86 -1
- package/dist/esm/visitor.mjs +281 -286
- package/dist/types/BaseVisitor.d.ts +3 -2
- package/dist/types/antlr/CircuitScriptParser.d.ts +5 -3
- package/dist/types/draw_symbols.d.ts +81 -49
- package/dist/types/execute.d.ts +16 -11
- package/dist/types/geometry.d.ts +31 -19
- package/dist/types/globals.d.ts +15 -10
- package/dist/types/helpers.d.ts +2 -1
- package/dist/types/layout.d.ts +22 -21
- package/dist/types/logger.d.ts +1 -1
- package/dist/types/objects/ClassComponent.d.ts +19 -16
- package/dist/types/objects/ExecutionScope.d.ts +2 -1
- package/dist/types/objects/Frame.d.ts +5 -3
- package/dist/types/objects/ParamDefinition.d.ts +31 -2
- package/dist/types/objects/PinDefinition.d.ts +0 -2
- package/dist/types/objects/types.d.ts +7 -2
- package/dist/types/render.d.ts +2 -1
- package/dist/types/utils.d.ts +9 -1
- package/dist/types/visitor.d.ts +5 -5
- package/libs/lib.cst +102 -32
- package/package.json +7 -3
package/dist/esm/sizing.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SVG, registerWindow } from '@svgdotjs/svg.js';
|
|
2
|
-
import { HorizontalAlign, VerticalAlign } from './geometry.mjs';
|
|
2
|
+
import { HorizontalAlign, HorizontalAlignProp, VerticalAlign, VerticalAlignProp } from './geometry.mjs';
|
|
3
3
|
import { defaultFont } from './globals.mjs';
|
|
4
4
|
import { JSModuleType, detectJSModuleType } from './helpers.mjs';
|
|
5
5
|
let MainCanvas = null;
|
|
@@ -38,27 +38,53 @@ export function measureTextSize2(text, fontFamily, fontSize, fontWeight = 'regul
|
|
|
38
38
|
}
|
|
39
39
|
const key = `${text}-${fontFamily}-${fontSize}-${fontWeight}-${anchor}-${vanchor}`;
|
|
40
40
|
if (measureTextSizeCache[key] === undefined) {
|
|
41
|
-
let dominantBaseline =
|
|
41
|
+
let dominantBaseline = VerticalAlignProp.Hanging;
|
|
42
42
|
switch (vanchor) {
|
|
43
43
|
case VerticalAlign.Top:
|
|
44
|
-
dominantBaseline =
|
|
44
|
+
dominantBaseline = VerticalAlignProp.Hanging;
|
|
45
45
|
break;
|
|
46
46
|
case VerticalAlign.Middle:
|
|
47
|
-
dominantBaseline =
|
|
47
|
+
dominantBaseline = VerticalAlignProp.Central;
|
|
48
48
|
break;
|
|
49
49
|
case VerticalAlign.Bottom:
|
|
50
|
-
dominantBaseline =
|
|
50
|
+
dominantBaseline = VerticalAlignProp.TextTop;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
let useAnchor = HorizontalAlignProp.Start;
|
|
54
|
+
switch (anchor) {
|
|
55
|
+
case HorizontalAlign.Left:
|
|
56
|
+
useAnchor = HorizontalAlignProp.Start;
|
|
57
|
+
break;
|
|
58
|
+
case HorizontalAlign.Middle:
|
|
59
|
+
useAnchor = HorizontalAlignProp.Middle;
|
|
60
|
+
break;
|
|
61
|
+
case HorizontalAlign.Right:
|
|
62
|
+
useAnchor = HorizontalAlignProp.End;
|
|
51
63
|
break;
|
|
52
64
|
}
|
|
53
65
|
fontFamily = defaultFont;
|
|
54
66
|
const tmpTextElement = MainCanvas.text(text).font({
|
|
55
67
|
family: fontFamily,
|
|
56
68
|
size: fontSize,
|
|
57
|
-
anchor:
|
|
69
|
+
anchor: useAnchor,
|
|
58
70
|
'dominant-baseline': dominantBaseline,
|
|
59
71
|
weight: fontWeight,
|
|
60
|
-
})
|
|
61
|
-
|
|
72
|
+
})
|
|
73
|
+
.attr("xml:space", "preserve")
|
|
74
|
+
.fill('#333');
|
|
75
|
+
let textbox = tmpTextElement.bbox();
|
|
76
|
+
const tmpTextBox = { ...textbox };
|
|
77
|
+
if (dominantBaseline === VerticalAlignProp.Hanging) {
|
|
78
|
+
tmpTextBox.y = textbox.cy - textbox.height;
|
|
79
|
+
tmpTextBox.y2 = tmpTextBox.y + textbox.height;
|
|
80
|
+
textbox = tmpTextBox;
|
|
81
|
+
}
|
|
82
|
+
else if (dominantBaseline === VerticalAlignProp.Central) {
|
|
83
|
+
tmpTextBox.y -= textbox.cy;
|
|
84
|
+
tmpTextBox.y2 -= textbox.cy;
|
|
85
|
+
tmpTextBox.cy = 0;
|
|
86
|
+
textbox = tmpTextBox;
|
|
87
|
+
}
|
|
62
88
|
const { width, height } = textbox;
|
|
63
89
|
tmpTextElement.remove();
|
|
64
90
|
measureTextSizeCache[key] = {
|
package/dist/esm/utils.mjs
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Big } from 'big.js';
|
|
2
|
+
import { NumericValue } from "./objects/ParamDefinition";
|
|
1
3
|
export class SimpleStopwatch {
|
|
2
4
|
startTime;
|
|
3
5
|
constructor() {
|
|
@@ -64,5 +66,88 @@ export function getPortType(component) {
|
|
|
64
66
|
return foundPinType;
|
|
65
67
|
}
|
|
66
68
|
export function roundValue(value) {
|
|
67
|
-
return
|
|
69
|
+
return resolveToNumericValue(new Big(value.toBigNumber().toFixed(7)));
|
|
70
|
+
}
|
|
71
|
+
export function throwWithContext(context, message) {
|
|
72
|
+
const startLine = context.start?.line;
|
|
73
|
+
const startColumn = context.start?.column;
|
|
74
|
+
const startString = startLine + ":" + startColumn;
|
|
75
|
+
const stopLine = context.stop?.line;
|
|
76
|
+
const stopColumn = context.stop?.column;
|
|
77
|
+
let stopString = "";
|
|
78
|
+
if (startLine === stopLine) {
|
|
79
|
+
stopString = stopColumn?.toString();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
stopString = stopLine + ":" + stopString;
|
|
83
|
+
}
|
|
84
|
+
throw `Parse exception at [${startString} - ${stopString}] : ${message}`;
|
|
85
|
+
}
|
|
86
|
+
export function combineMaps(map1, map2) {
|
|
87
|
+
const newMap = new Map(map1);
|
|
88
|
+
map2.forEach((value, key) => {
|
|
89
|
+
newMap.set(key, value);
|
|
90
|
+
});
|
|
91
|
+
return newMap;
|
|
92
|
+
}
|
|
93
|
+
export function getNumberExponential(value) {
|
|
94
|
+
value = value.trim();
|
|
95
|
+
switch (value) {
|
|
96
|
+
case 'G':
|
|
97
|
+
return 9;
|
|
98
|
+
case 'M':
|
|
99
|
+
return 6;
|
|
100
|
+
case 'k':
|
|
101
|
+
case 'K':
|
|
102
|
+
return 3;
|
|
103
|
+
case 'm':
|
|
104
|
+
return -3;
|
|
105
|
+
case 'u':
|
|
106
|
+
return -6;
|
|
107
|
+
case 'n':
|
|
108
|
+
return -9;
|
|
109
|
+
case 'p':
|
|
110
|
+
return -12;
|
|
111
|
+
case 'f':
|
|
112
|
+
return -15;
|
|
113
|
+
default:
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export function getNumberExponentialText(value) {
|
|
118
|
+
switch (value) {
|
|
119
|
+
case -15:
|
|
120
|
+
return 'f';
|
|
121
|
+
case -12:
|
|
122
|
+
return 'p';
|
|
123
|
+
case -9:
|
|
124
|
+
return 'n';
|
|
125
|
+
case -6:
|
|
126
|
+
return 'u';
|
|
127
|
+
case -3:
|
|
128
|
+
return 'm';
|
|
129
|
+
case 3:
|
|
130
|
+
return 'k';
|
|
131
|
+
case 6:
|
|
132
|
+
return 'M';
|
|
133
|
+
case 9:
|
|
134
|
+
return 'G';
|
|
135
|
+
case 0:
|
|
136
|
+
default:
|
|
137
|
+
return '';
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export function resolveToNumericValue(value) {
|
|
141
|
+
if (value.toNumber() === 0) {
|
|
142
|
+
return new NumericValue(0);
|
|
143
|
+
}
|
|
144
|
+
const isNeg = value.lt(0);
|
|
145
|
+
const positiveValue = isNeg ? value.neg() : value;
|
|
146
|
+
const prefixPart = Math.floor(Math.log10(positiveValue.toNumber()) / 3);
|
|
147
|
+
let useValue = value;
|
|
148
|
+
if (prefixPart !== 0) {
|
|
149
|
+
const tmpValue1 = positiveValue.div(Math.pow(10, prefixPart * 3));
|
|
150
|
+
useValue = isNeg ? tmpValue1.neg() : tmpValue1;
|
|
151
|
+
}
|
|
152
|
+
return new NumericValue(useValue, prefixPart * 3);
|
|
68
153
|
}
|