circuitscript 0.0.22 → 0.0.24
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/antlr/CircuitScriptLexer.js +288 -0
- package/dist/cjs/antlr/CircuitScriptParser.js +4905 -0
- package/dist/cjs/antlr/CircuitScriptVisitor.js +6 -0
- package/{src/draw_symbols.ts → dist/cjs/draw_symbols.js} +303 -614
- package/dist/cjs/execute.js +780 -0
- package/{src/export.ts → dist/cjs/export.js} +34 -56
- package/dist/cjs/fonts.js +4 -0
- package/dist/cjs/geometry.js +430 -0
- package/dist/cjs/globals.js +60 -0
- package/dist/cjs/helpers.js +99 -0
- package/dist/cjs/index.js +29 -0
- package/{src/layout.ts → dist/cjs/layout.js} +413 -1002
- package/dist/cjs/lexer.js +114 -0
- package/dist/cjs/logger.js +17 -0
- package/dist/cjs/main.js +87 -0
- package/dist/cjs/objects/ClassComponent.js +142 -0
- package/dist/cjs/objects/ExecutionScope.js +134 -0
- package/dist/cjs/objects/Frame.js +22 -0
- package/{src/objects/Net.ts → dist/cjs/objects/Net.js} +9 -24
- package/dist/cjs/objects/ParamDefinition.js +42 -0
- package/dist/cjs/objects/PinDefinition.js +31 -0
- package/dist/cjs/objects/PinTypes.js +11 -0
- package/dist/cjs/objects/Wire.js +9 -0
- package/dist/cjs/objects/types.js +9 -0
- package/dist/cjs/parser.js +299 -0
- package/dist/cjs/regenerate-tests.js +23 -0
- package/dist/cjs/render.js +155 -0
- package/{src/server.ts → dist/cjs/server.js} +15 -21
- package/dist/cjs/sizing.js +105 -0
- package/{src/utils.ts → dist/cjs/utils.js} +25 -35
- package/{src/visitor.ts → dist/cjs/visitor.js} +392 -948
- package/{build/src/antlr/CircuitScriptLexer.js → dist/esm/antlr/CircuitScriptLexer.mjs} +90 -91
- package/{build/src/antlr/CircuitScriptParser.js → dist/esm/antlr/CircuitScriptParser.mjs} +138 -136
- package/{build/src/draw_symbols.js → dist/esm/draw_symbols.mjs} +11 -11
- package/{build/src/execute.js → dist/esm/execute.mjs} +9 -8
- package/{build/src/export.js → dist/esm/export.mjs} +2 -2
- package/{build/src/geometry.js → dist/esm/geometry.mjs} +3 -7
- package/{build/src/helpers.js → dist/esm/helpers.mjs} +27 -7
- package/dist/esm/index.mjs +13 -0
- package/{build/src/layout.js → dist/esm/layout.mjs} +11 -11
- package/{build/src/lexer.js → dist/esm/lexer.mjs} +2 -2
- package/{build/src/main.js → dist/esm/main.mjs} +5 -5
- package/{build/src/objects/ClassComponent.js → dist/esm/objects/ClassComponent.mjs} +3 -3
- package/{build/src/objects/PinDefinition.js → dist/esm/objects/PinDefinition.mjs} +1 -1
- package/dist/esm/parser.mjs +269 -0
- package/{build/src/regenerate-tests.js → dist/esm/regenerate-tests.mjs} +1 -1
- package/{build/src/render.js → dist/esm/render.mjs} +7 -24
- package/{build/src/sizing.js → dist/esm/sizing.mjs} +22 -8
- package/{build/src/visitor.js → dist/esm/visitor.mjs} +10 -29
- package/{build/src → dist/types}/antlr/CircuitScriptLexer.d.ts +23 -23
- package/{build/src → dist/types}/antlr/CircuitScriptParser.d.ts +24 -23
- package/{build/src → dist/types}/draw_symbols.d.ts +2 -2
- package/{build/src → dist/types}/execute.d.ts +2 -2
- package/{build/src → dist/types}/geometry.d.ts +1 -1
- package/dist/types/helpers.d.ts +9 -0
- package/dist/types/index.d.ts +13 -0
- package/{build/src → dist/types}/layout.d.ts +10 -10
- package/{build/src → dist/types}/objects/ClassComponent.d.ts +2 -2
- package/{build/src → dist/types}/objects/PinDefinition.d.ts +1 -1
- package/dist/types/parser.d.ts +38 -0
- package/{build/src → dist/types}/render.d.ts +1 -1
- package/{build/src → dist/types}/sizing.d.ts +3 -1
- package/{build/src → dist/types}/visitor.d.ts +5 -3
- package/package.json +30 -12
- package/.editorconfig +0 -15
- package/.eslintignore +0 -1
- package/.eslintrc.json +0 -27
- package/.gitlab-ci.yml +0 -81
- package/.prettierignore +0 -8
- package/.prettierrc +0 -16
- package/__tests__/expectedResults.ts +0 -657
- package/__tests__/helpers.ts +0 -82
- package/__tests__/parseScripts.ts +0 -593
- package/__tests__/renderData/script1.cst +0 -58
- package/__tests__/renderData/script1.cst.svg +0 -1
- package/__tests__/renderData/script2.cst +0 -16
- package/__tests__/renderData/script2.cst.svg +0 -1
- package/__tests__/renderData/script3.cst +0 -30
- package/__tests__/renderData/script3.cst.svg +0 -1
- package/__tests__/renderData/script4.cst +0 -54
- package/__tests__/renderData/script4.cst.svg +0 -1
- package/__tests__/renderData/script5.cst +0 -23
- package/__tests__/renderData/script5.cst.svg +0 -1
- package/__tests__/renderData/script6.cst +0 -28
- package/__tests__/renderData/script6.cst.svg +0 -1
- package/__tests__/renderData/script7.cst +0 -26
- package/__tests__/renderData/script7.cst.svg +0 -1
- package/__tests__/renderData/script8.cst +0 -37
- package/__tests__/renderData/script8.cst.svg +0 -1
- package/__tests__/testCLI.ts +0 -68
- package/__tests__/testMathOps.ts +0 -36
- package/__tests__/testMergeWires.ts +0 -141
- package/__tests__/testParse.ts +0 -263
- package/__tests__/testRender.ts +0 -38
- package/build/src/helpers.d.ts +0 -1
- package/build/src/parser.js +0 -69
- package/documentation.md +0 -238
- package/examples/example_arduino_uno.cst +0 -1146
- package/examples/example_garden_pump.cst +0 -567
- package/examples/lib.cst +0 -185
- package/fonts/Inter-Bold.ttf +0 -0
- package/fonts/Inter-Regular.ttf +0 -0
- package/fonts/OpenSans-Regular.ttf +0 -0
- package/fonts/Roboto-Regular.ttf +0 -0
- package/jest.config.js +0 -23
- package/libs/lib.cst +0 -185
- package/refresh.html +0 -42
- package/server.cjs +0 -50
- package/src/antlr/CircuitScript.g4 +0 -209
- package/src/antlr/CircuitScriptLexer.ts +0 -317
- package/src/antlr/CircuitScriptParser.ts +0 -4979
- package/src/antlr/CircuitScriptVisitor.ts +0 -420
- package/src/execute.ts +0 -1227
- package/src/fonts.ts +0 -1
- package/src/geometry.ts +0 -638
- package/src/globals.ts +0 -67
- package/src/helpers.ts +0 -114
- package/src/lexer.ts +0 -151
- package/src/logger.ts +0 -17
- package/src/main.ts +0 -105
- package/src/objects/ClassComponent.ts +0 -223
- package/src/objects/ExecutionScope.ts +0 -201
- package/src/objects/Frame.ts +0 -20
- package/src/objects/ParamDefinition.ts +0 -49
- package/src/objects/PinDefinition.ts +0 -49
- package/src/objects/PinTypes.ts +0 -7
- package/src/objects/Wire.ts +0 -19
- package/src/objects/types.ts +0 -66
- package/src/parser.ts +0 -106
- package/src/regenerate-tests.ts +0 -25
- package/src/render.ts +0 -260
- package/src/sizing.ts +0 -96
- package/tsconfig.json +0 -27
- package/tsconfig.release.json +0 -8
- /package/{build/src/antlr/CircuitScriptVisitor.js → dist/esm/antlr/CircuitScriptVisitor.mjs} +0 -0
- /package/{build/src/fonts.js → dist/esm/fonts.mjs} +0 -0
- /package/{build/src/globals.js → dist/esm/globals.mjs} +0 -0
- /package/{build/src/logger.js → dist/esm/logger.mjs} +0 -0
- /package/{build/src/objects/ExecutionScope.js → dist/esm/objects/ExecutionScope.mjs} +0 -0
- /package/{build/src/objects/Frame.js → dist/esm/objects/Frame.mjs} +0 -0
- /package/{build/src/objects/Net.js → dist/esm/objects/Net.mjs} +0 -0
- /package/{build/src/objects/ParamDefinition.js → dist/esm/objects/ParamDefinition.mjs} +0 -0
- /package/{build/src/objects/PinTypes.js → dist/esm/objects/PinTypes.mjs} +0 -0
- /package/{build/src/objects/Wire.js → dist/esm/objects/Wire.mjs} +0 -0
- /package/{build/src/objects/types.js → dist/esm/objects/types.mjs} +0 -0
- /package/{build/src/server.js → dist/esm/server.mjs} +0 -0
- /package/{build/src/utils.js → dist/esm/utils.mjs} +0 -0
- /package/{build/src → dist/types}/antlr/CircuitScriptVisitor.d.ts +0 -0
- /package/{build/src → dist/types}/export.d.ts +0 -0
- /package/{build/src → dist/types}/fonts.d.ts +0 -0
- /package/{build/src → dist/types}/globals.d.ts +0 -0
- /package/{build/src → dist/types}/lexer.d.ts +0 -0
- /package/{build/src → dist/types}/logger.d.ts +0 -0
- /package/{build/src → dist/types}/main.d.ts +0 -0
- /package/{build/src → dist/types}/objects/ExecutionScope.d.ts +0 -0
- /package/{build/src → dist/types}/objects/Frame.d.ts +0 -0
- /package/{build/src → dist/types}/objects/Net.d.ts +0 -0
- /package/{build/src → dist/types}/objects/ParamDefinition.d.ts +0 -0
- /package/{build/src → dist/types}/objects/PinTypes.d.ts +0 -0
- /package/{build/src → dist/types}/objects/Wire.d.ts +0 -0
- /package/{build/src → dist/types}/objects/types.d.ts +0 -0
- /package/{build/src → dist/types}/regenerate-tests.d.ts +0 -0
- /package/{build/src → dist/types}/server.d.ts +0 -0
- /package/{build/src → dist/types}/utils.d.ts +0 -0
package/src/render.ts
DELETED
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
import { createSVGWindow } from 'svgdom';
|
|
2
|
-
import { SVG, SVGTypeMapping, registerWindow } from '@svgdotjs/svg.js';
|
|
3
|
-
|
|
4
|
-
import { BoundBox, MergedWire, RenderComponent, RenderFrame,
|
|
5
|
-
RenderFrameType, RenderJunction, RenderText, RenderWire, getBounds } from "./layout.js";
|
|
6
|
-
import { applyFontsToSVG } from './sizing.js';
|
|
7
|
-
import { ParamKeys, bodyColor, junctionColor, junctionSize, wireColor } from './globals.js';
|
|
8
|
-
import { NumericValue } from './objects/ParamDefinition.js';
|
|
9
|
-
import { getBoundsSize } from './utils.js';
|
|
10
|
-
|
|
11
|
-
export function generateSVG2(graph: {
|
|
12
|
-
components: RenderComponent[],
|
|
13
|
-
wires: RenderWire[], junctions: RenderJunction[],
|
|
14
|
-
mergedWires: MergedWire[], debugRects: BoundBox[],
|
|
15
|
-
frameObjects: RenderFrame[],
|
|
16
|
-
textObjects: RenderText[],
|
|
17
|
-
}): string {
|
|
18
|
-
|
|
19
|
-
const window = createSVGWindow();
|
|
20
|
-
const document = window.document;
|
|
21
|
-
|
|
22
|
-
registerWindow(window, document);
|
|
23
|
-
|
|
24
|
-
const canvas = SVG(document.documentElement);
|
|
25
|
-
applyFontsToSVG(canvas);
|
|
26
|
-
|
|
27
|
-
generateSVGChild(canvas,
|
|
28
|
-
graph.components, graph.wires, graph.junctions, graph.mergedWires,
|
|
29
|
-
graph.frameObjects, graph.textObjects,
|
|
30
|
-
);
|
|
31
|
-
const {x, y, width, height} = canvas.bbox();
|
|
32
|
-
|
|
33
|
-
const margin = 5;
|
|
34
|
-
const widthAndMargin = width + margin * 2;
|
|
35
|
-
const heightAndMargin = height + margin * 2;
|
|
36
|
-
|
|
37
|
-
const scale = 1;
|
|
38
|
-
|
|
39
|
-
canvas.size(widthAndMargin * scale, heightAndMargin * scale);
|
|
40
|
-
canvas.viewbox(x - margin, y - margin, widthAndMargin, heightAndMargin);
|
|
41
|
-
|
|
42
|
-
return canvas.svg();
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function generateSVGChild(canvas: SVGTypeMapping<SVGAElement>,
|
|
46
|
-
components: RenderComponent[], wires: RenderWire[],
|
|
47
|
-
junctions: RenderJunction[], mergedWires:MergedWire[],
|
|
48
|
-
frameObjects:RenderFrame[], textObjects: RenderText[] ): void {
|
|
49
|
-
|
|
50
|
-
const displayWireId = false;
|
|
51
|
-
|
|
52
|
-
// Draw the display grid
|
|
53
|
-
const bounds = getBounds(components, wires, junctions, frameObjects);
|
|
54
|
-
|
|
55
|
-
drawGrid(
|
|
56
|
-
canvas.group().translate(0, 0),
|
|
57
|
-
{
|
|
58
|
-
x: bounds.xmin,
|
|
59
|
-
y: bounds.ymin,
|
|
60
|
-
x2: bounds.xmax,
|
|
61
|
-
y2: bounds.ymax
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
components.forEach(item => {
|
|
65
|
-
const { x, y, width, height } = item;
|
|
66
|
-
const symbolGroup = canvas.group();
|
|
67
|
-
symbolGroup.translate(x, y);
|
|
68
|
-
|
|
69
|
-
const { symbol = null } = item;
|
|
70
|
-
|
|
71
|
-
if (symbol !== null && symbol) {
|
|
72
|
-
let extra = {};
|
|
73
|
-
if (item.component.parameters.has('__is_net')) {
|
|
74
|
-
extra.net_name = item.component.parameters.get(ParamKeys.net_name);
|
|
75
|
-
|
|
76
|
-
} else if (item.component.parameters.has('value')) {
|
|
77
|
-
let tmpValue = item.component.parameters.get('value');
|
|
78
|
-
if (tmpValue instanceof NumericValue){
|
|
79
|
-
// Prepare value for display
|
|
80
|
-
tmpValue = (tmpValue as NumericValue).value;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
extra.value = tmpValue;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
extra.instance_name = item.component.instanceName;
|
|
87
|
-
|
|
88
|
-
if (item.component.parameters.has('place')){
|
|
89
|
-
extra.place = item.component.parameters.get('place');
|
|
90
|
-
} else {
|
|
91
|
-
extra.place = true; // Default is to place the item
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
symbol.draw(symbolGroup, extra);
|
|
95
|
-
|
|
96
|
-
} else {
|
|
97
|
-
// draw default shape
|
|
98
|
-
symbolGroup.rect(width, height)
|
|
99
|
-
.fill(bodyColor)
|
|
100
|
-
.stroke({ width: 1, color: '#333' });
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
if (displayWireId){
|
|
105
|
-
// Debugging method to draw the wire id next to the wires.
|
|
106
|
-
const wiresGroup = canvas.group().translate(0, 0);
|
|
107
|
-
|
|
108
|
-
wires.forEach(wire => {
|
|
109
|
-
// Draw the wire id at the start of the wire
|
|
110
|
-
wiresGroup.text(wire.id.toString())
|
|
111
|
-
.font({
|
|
112
|
-
family: 'Inter',
|
|
113
|
-
size: 10,
|
|
114
|
-
})
|
|
115
|
-
.translate(wire.x+5, wire.y+5)
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const mergedWireGroup = canvas.group();
|
|
120
|
-
|
|
121
|
-
// draw the merged wires
|
|
122
|
-
mergedWires.forEach(tmpItem => {
|
|
123
|
-
const { segments, intersectPoints } = tmpItem;
|
|
124
|
-
|
|
125
|
-
segments.forEach(segment => {
|
|
126
|
-
const pt1 = segment[0];
|
|
127
|
-
const pt2 = segment[1];
|
|
128
|
-
mergedWireGroup.line([pt1, pt2])
|
|
129
|
-
.stroke({ width: 1, color: wireColor, linecap: 'square' })
|
|
130
|
-
.fill('none');
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
intersectPoints.forEach(point => {
|
|
134
|
-
const [x, y, count] = point;
|
|
135
|
-
mergedWireGroup.circle(junctionSize)
|
|
136
|
-
.translate(x - junctionSize/2, y - junctionSize/2)
|
|
137
|
-
.fill(junctionColor)
|
|
138
|
-
.stroke('none');
|
|
139
|
-
|
|
140
|
-
// mergedWireGroup.text(count.toString())
|
|
141
|
-
// .translate(x + 2, y + 2)
|
|
142
|
-
// .font({
|
|
143
|
-
// family: 'Inter',
|
|
144
|
-
// size: 10,
|
|
145
|
-
// })
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
// const debugRectsGroup = canvas.group();
|
|
150
|
-
// debugRects.forEach(box => {
|
|
151
|
-
// // Draw a rect
|
|
152
|
-
// const width = box.xmax - box.xmin;
|
|
153
|
-
// const height = box.ymax - box.ymin;
|
|
154
|
-
// const tmpRect = debugRectsGroup.rect(width, height)
|
|
155
|
-
// .fill('none')
|
|
156
|
-
// .stroke({ width: 1, color: '#000'});
|
|
157
|
-
// tmpRect.translate(box.xmin, box.ymin);
|
|
158
|
-
// });
|
|
159
|
-
|
|
160
|
-
const frameGroup = canvas.group();
|
|
161
|
-
const showElementFrames = false;
|
|
162
|
-
|
|
163
|
-
frameObjects.forEach(item => {
|
|
164
|
-
const { bounds, borderWidth } = item;
|
|
165
|
-
if (borderWidth > 0){
|
|
166
|
-
const { width, height } = getBoundsSize(bounds);
|
|
167
|
-
|
|
168
|
-
let strokeColor = '#111';
|
|
169
|
-
if (item.type === RenderFrameType.Container) {
|
|
170
|
-
strokeColor = '#111';
|
|
171
|
-
} else if (item.type === RenderFrameType.Elements){
|
|
172
|
-
strokeColor = '#aaa';
|
|
173
|
-
if (!showElementFrames){
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const tmpRect = frameGroup.rect(width, height)
|
|
179
|
-
.fill('none')
|
|
180
|
-
.stroke({ width: borderWidth, color: strokeColor });
|
|
181
|
-
|
|
182
|
-
tmpRect.translate(item.x, item.y);
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
textObjects.forEach(item => {
|
|
187
|
-
const {x, y, symbol} = item;
|
|
188
|
-
const innerGroup = canvas.group();
|
|
189
|
-
innerGroup.translate(x, y);
|
|
190
|
-
symbol.draw(innerGroup);
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
const drawOrigin = false;
|
|
194
|
-
|
|
195
|
-
// Draw origin
|
|
196
|
-
drawOrigin && canvas.group().translate(0,0)
|
|
197
|
-
.circle(5)
|
|
198
|
-
.translate(-5/2, -5/2)
|
|
199
|
-
.stroke('none').fill('red');
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
function drawGrid(group: G, canvasSize: { x: number, y: number, x2: number, y2: number }): void {
|
|
203
|
-
const gridSize = 20;
|
|
204
|
-
const { x, y, x2, y2 } = canvasSize;
|
|
205
|
-
|
|
206
|
-
const gridStartX = (Math.floor(x / gridSize) - 1) * gridSize;
|
|
207
|
-
const gridStartY = (Math.floor(y / gridSize) - 1) * gridSize;
|
|
208
|
-
|
|
209
|
-
const gridEndX = (Math.ceil(x2 / gridSize) + 1) * gridSize;
|
|
210
|
-
const gridEndY = (Math.ceil(y2 / gridSize) + 1) * gridSize;
|
|
211
|
-
|
|
212
|
-
const numCols = Math.ceil((gridEndX - gridStartX) / gridSize);
|
|
213
|
-
// const numRows = Math.ceil((gridEndY - gridStartY) / gridSize);
|
|
214
|
-
|
|
215
|
-
// Draws (0, 0) point
|
|
216
|
-
// group.circle(5)
|
|
217
|
-
// .translate(-5 / 2, -5 / 2)
|
|
218
|
-
// .fill('red')
|
|
219
|
-
// .stroke('none');
|
|
220
|
-
|
|
221
|
-
const lines = [];
|
|
222
|
-
|
|
223
|
-
for (let i = 0; i <= numCols; i++) {
|
|
224
|
-
const startX = gridStartX + i * gridSize;
|
|
225
|
-
const startY = gridStartY-0.5;
|
|
226
|
-
const endY = gridEndY;
|
|
227
|
-
lines.push(`M ${startX} ${startY} L ${startX} ${endY}`);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
group.path(lines.join(" "))
|
|
231
|
-
.fill('none')
|
|
232
|
-
.attr({
|
|
233
|
-
'stroke-dasharray': '1,' + (gridSize-1),
|
|
234
|
-
})
|
|
235
|
-
.stroke({
|
|
236
|
-
width: 1,
|
|
237
|
-
color: '#aaa'
|
|
238
|
-
})
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
function calculateBoundingBox(components: RenderComponent[]): { width: number, height: number } {
|
|
242
|
-
let maxX = Number.NEGATIVE_INFINITY;
|
|
243
|
-
let minX = Number.POSITIVE_INFINITY;
|
|
244
|
-
|
|
245
|
-
let maxY = Number.NEGATIVE_INFINITY;
|
|
246
|
-
let minY = Number.POSITIVE_INFINITY;
|
|
247
|
-
|
|
248
|
-
components.forEach(item => {
|
|
249
|
-
minX = Math.min(item.x, minX);
|
|
250
|
-
maxX = Math.max(item.x + item.width, maxX);
|
|
251
|
-
|
|
252
|
-
minY = Math.min(item.y, minY);
|
|
253
|
-
maxY = Math.max(item.y + item.height, maxY);
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
return {
|
|
257
|
-
width: (maxX - minX),
|
|
258
|
-
height: (maxY - minY)
|
|
259
|
-
}
|
|
260
|
-
}
|
package/src/sizing.ts
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { Box, SVG, SVGTypeMapping, registerWindow } from '@svgdotjs/svg.js';
|
|
2
|
-
import { config, createSVGWindow } from 'svgdom';
|
|
3
|
-
import { HorizontalAlign, VerticalAlign } from './geometry.js';
|
|
4
|
-
import { defaultFont } from './globals.js';
|
|
5
|
-
|
|
6
|
-
let MainCanvas = null;
|
|
7
|
-
|
|
8
|
-
const supportedFonts = {
|
|
9
|
-
// 'Roboto': 'Roboto-Regular.ttf',
|
|
10
|
-
// 'Inter': 'Inter-Regular.ttf',
|
|
11
|
-
// 'Inter-Bold': 'Inter-Bold.ttf',
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export async function prepareSizing(fontsPath): Promise<void> {
|
|
15
|
-
await config.setFontDir(fontsPath)
|
|
16
|
-
.setFontFamilyMappings(supportedFonts)
|
|
17
|
-
.preloadFonts()
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function applyFontsToSVG(canvas: SVGTypeMapping): void {
|
|
21
|
-
// for (const fontName in supportedFonts) {
|
|
22
|
-
// canvas.fontface(fontName, "url('" + InterFontEncoded + "')");
|
|
23
|
-
// }
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export async function measureTextSize(text: string, fontFamily: string, fontSize: number): Promise<{ width: number, height: number }> {
|
|
27
|
-
// Async version, in case measuring text sizes need more time
|
|
28
|
-
return measureTextSize2(text, fontFamily, fontSize);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Cache measurements to avoid recalculations
|
|
32
|
-
const measureTextSizeCache: {
|
|
33
|
-
[key: string]: {
|
|
34
|
-
width: number,
|
|
35
|
-
height: number, box: Box
|
|
36
|
-
}
|
|
37
|
-
} = {};
|
|
38
|
-
const measureTextSizeCacheHits: { [key: string]: number } = {};
|
|
39
|
-
|
|
40
|
-
export function measureTextSize2(text: string, fontFamily: string,
|
|
41
|
-
fontSize: number, fontWeight = 'regular',
|
|
42
|
-
anchor = HorizontalAlign.Left,
|
|
43
|
-
vanchor = VerticalAlign.Bottom): { width: number, height: number, box: Box } {
|
|
44
|
-
|
|
45
|
-
// Reuse the canvas, so no need to keep creating
|
|
46
|
-
if (MainCanvas === null) {
|
|
47
|
-
const window = createSVGWindow();
|
|
48
|
-
const { document } = window;
|
|
49
|
-
registerWindow(window, document);
|
|
50
|
-
MainCanvas = SVG(document.documentElement);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Check if entry already exists in the cache
|
|
54
|
-
const key = `${text}-${fontFamily}-${fontSize}-${fontWeight}-${anchor}-${vanchor}`;
|
|
55
|
-
|
|
56
|
-
if (measureTextSizeCache[key] === undefined) {
|
|
57
|
-
let dominantBaseline = 'hanging';
|
|
58
|
-
switch(vanchor){
|
|
59
|
-
case VerticalAlign.Top:
|
|
60
|
-
dominantBaseline = 'hanging';
|
|
61
|
-
break;
|
|
62
|
-
|
|
63
|
-
case VerticalAlign.Middle:
|
|
64
|
-
dominantBaseline = 'middle';
|
|
65
|
-
break;
|
|
66
|
-
|
|
67
|
-
case VerticalAlign.Bottom:
|
|
68
|
-
dominantBaseline = 'text-top';
|
|
69
|
-
break;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
fontFamily = defaultFont;
|
|
73
|
-
|
|
74
|
-
const tmpTextElement = MainCanvas.text(text).font({
|
|
75
|
-
family: fontFamily,
|
|
76
|
-
size: fontSize,
|
|
77
|
-
anchor: anchor,
|
|
78
|
-
'dominant-baseline': dominantBaseline,
|
|
79
|
-
weight: fontWeight,
|
|
80
|
-
}).fill('#333');
|
|
81
|
-
|
|
82
|
-
const textbox = tmpTextElement.bbox();
|
|
83
|
-
const { width, height } = textbox;
|
|
84
|
-
tmpTextElement.remove();
|
|
85
|
-
|
|
86
|
-
measureTextSizeCache[key] = {
|
|
87
|
-
width: Math.round(width * 100) / 100,
|
|
88
|
-
height: Math.round(height * 100) / 100,
|
|
89
|
-
box: textbox,
|
|
90
|
-
}
|
|
91
|
-
measureTextSizeCacheHits[key] = 0;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
measureTextSizeCacheHits[key]++;
|
|
95
|
-
return measureTextSizeCache[key];
|
|
96
|
-
}
|
package/tsconfig.json
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "Node16",
|
|
5
|
-
"lib": ["ES2022"],
|
|
6
|
-
"moduleResolution": "Node16",
|
|
7
|
-
"rootDir": ".",
|
|
8
|
-
"outDir": "build",
|
|
9
|
-
"allowSyntheticDefaultImports": true,
|
|
10
|
-
"importHelpers": true,
|
|
11
|
-
"alwaysStrict": true,
|
|
12
|
-
"sourceMap": true,
|
|
13
|
-
"forceConsistentCasingInFileNames": true,
|
|
14
|
-
"noFallthroughCasesInSwitch": true,
|
|
15
|
-
"noImplicitReturns": true,
|
|
16
|
-
"noUnusedLocals": true,
|
|
17
|
-
"noUnusedParameters": true,
|
|
18
|
-
"noImplicitAny": false,
|
|
19
|
-
"noImplicitThis": false,
|
|
20
|
-
"strictNullChecks": false,
|
|
21
|
-
"resolveJsonModule": true,
|
|
22
|
-
"skipLibCheck": true,
|
|
23
|
-
"esModuleInterop":true,
|
|
24
|
-
"declaration": true
|
|
25
|
-
},
|
|
26
|
-
"include": ["src/**/*", "__tests__/**/*"]
|
|
27
|
-
}
|
package/tsconfig.release.json
DELETED
/package/{build/src/antlr/CircuitScriptVisitor.js → dist/esm/antlr/CircuitScriptVisitor.mjs}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|