circuitscript 0.0.21 → 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/dist/types/antlr/CircuitScriptLexer.d.ts +71 -0
- package/dist/types/antlr/CircuitScriptParser.d.ts +675 -0
- package/dist/types/antlr/CircuitScriptVisitor.d.ts +115 -0
- package/dist/types/draw_symbols.d.ts +162 -0
- package/dist/types/execute.d.ts +85 -0
- package/dist/types/export.d.ts +2 -0
- package/dist/types/fonts.d.ts +1 -0
- package/dist/types/geometry.d.ts +84 -0
- package/dist/types/globals.d.ts +50 -0
- package/dist/types/helpers.d.ts +9 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/layout.d.ts +147 -0
- package/dist/types/lexer.d.ts +19 -0
- package/dist/types/logger.d.ts +6 -0
- package/dist/types/main.d.ts +2 -0
- package/dist/types/objects/ClassComponent.d.ts +40 -0
- package/dist/types/objects/ExecutionScope.d.ts +64 -0
- package/dist/types/objects/Frame.d.ts +15 -0
- package/dist/types/objects/Net.d.ts +10 -0
- package/dist/types/objects/ParamDefinition.d.ts +20 -0
- package/dist/types/objects/PinDefinition.d.ts +24 -0
- package/dist/types/objects/PinTypes.d.ts +7 -0
- package/dist/types/objects/Wire.d.ts +11 -0
- package/dist/types/objects/types.d.ts +49 -0
- package/dist/types/parser.d.ts +38 -0
- package/dist/types/regenerate-tests.d.ts +1 -0
- package/dist/types/render.d.ts +10 -0
- package/dist/types/server.d.ts +1 -0
- package/dist/types/sizing.d.ts +15 -0
- package/dist/types/utils.d.ts +19 -0
- package/dist/types/visitor.d.ts +135 -0
- 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/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 -26
- 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/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,26 +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
|
-
},
|
|
25
|
-
"include": ["src/**/*", "__tests__/**/*"]
|
|
26
|
-
}
|
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
|