@hadi77ir/pdfme-svg 0.1.0
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/README.md +63 -0
- package/dist/applyparseattributes.d.ts +6 -0
- package/dist/applyparseattributes.d.ts.map +1 -0
- package/dist/applyparseattributes.js +333 -0
- package/dist/applyparseattributes.js.map +1 -0
- package/dist/context/attributestate.d.ts +34 -0
- package/dist/context/attributestate.d.ts.map +1 -0
- package/dist/context/attributestate.js +109 -0
- package/dist/context/attributestate.js.map +1 -0
- package/dist/context/context.d.ts +59 -0
- package/dist/context/context.d.ts.map +1 -0
- package/dist/context/context.js +46 -0
- package/dist/context/context.js.map +1 -0
- package/dist/context/referenceshandler.d.ts +15 -0
- package/dist/context/referenceshandler.d.ts.map +1 -0
- package/dist/context/referenceshandler.js +31 -0
- package/dist/context/referenceshandler.js.map +1 -0
- package/dist/context/stylesheets.d.ts +13 -0
- package/dist/context/stylesheets.d.ts.map +1 -0
- package/dist/context/stylesheets.js +163 -0
- package/dist/context/stylesheets.js.map +1 -0
- package/dist/context/textmeasure.d.ts +19 -0
- package/dist/context/textmeasure.d.ts.map +1 -0
- package/dist/context/textmeasure.js +93 -0
- package/dist/context/textmeasure.js.map +1 -0
- package/dist/context/viewport.d.ts +6 -0
- package/dist/context/viewport.d.ts.map +1 -0
- package/dist/context/viewport.js +7 -0
- package/dist/context/viewport.js.map +1 -0
- package/dist/fill/ColorFill.d.ts +10 -0
- package/dist/fill/ColorFill.d.ts.map +1 -0
- package/dist/fill/ColorFill.js +10 -0
- package/dist/fill/ColorFill.js.map +1 -0
- package/dist/fill/Fill.d.ts +14 -0
- package/dist/fill/Fill.d.ts.map +1 -0
- package/dist/fill/Fill.js +2 -0
- package/dist/fill/Fill.js.map +1 -0
- package/dist/fill/GradientFill.d.ts +11 -0
- package/dist/fill/GradientFill.d.ts.map +1 -0
- package/dist/fill/GradientFill.js +37 -0
- package/dist/fill/GradientFill.js.map +1 -0
- package/dist/fill/PatternFill.d.ts +11 -0
- package/dist/fill/PatternFill.d.ts.map +1 -0
- package/dist/fill/PatternFill.js +67 -0
- package/dist/fill/PatternFill.js.map +1 -0
- package/dist/fill/parseFill.d.ts +4 -0
- package/dist/fill/parseFill.d.ts.map +1 -0
- package/dist/fill/parseFill.js +61 -0
- package/dist/fill/parseFill.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +232 -0
- package/dist/index.js.map +1 -0
- package/dist/jspdf-shim.d.ts +132 -0
- package/dist/jspdf-shim.d.ts.map +1 -0
- package/dist/jspdf-shim.js +744 -0
- package/dist/jspdf-shim.js.map +1 -0
- package/dist/jspdf.d.ts +2 -0
- package/dist/jspdf.d.ts.map +1 -0
- package/dist/jspdf.js +2 -0
- package/dist/jspdf.js.map +1 -0
- package/dist/markerlist.d.ts +24 -0
- package/dist/markerlist.d.ts.map +1 -0
- package/dist/markerlist.js +47 -0
- package/dist/markerlist.js.map +1 -0
- package/dist/nodes/anchor.d.ts +6 -0
- package/dist/nodes/anchor.d.ts.map +1 -0
- package/dist/nodes/anchor.js +15 -0
- package/dist/nodes/anchor.js.map +1 -0
- package/dist/nodes/circle.d.ts +11 -0
- package/dist/nodes/circle.d.ts.map +1 -0
- package/dist/nodes/circle.js +17 -0
- package/dist/nodes/circle.js.map +1 -0
- package/dist/nodes/clippath.d.ts +10 -0
- package/dist/nodes/clippath.d.ts.map +1 -0
- package/dist/nodes/clippath.js +48 -0
- package/dist/nodes/clippath.js.map +1 -0
- package/dist/nodes/containernode.d.ts +8 -0
- package/dist/nodes/containernode.d.ts.map +1 -0
- package/dist/nodes/containernode.js +13 -0
- package/dist/nodes/containernode.js.map +1 -0
- package/dist/nodes/ellipse.d.ts +9 -0
- package/dist/nodes/ellipse.d.ts.map +1 -0
- package/dist/nodes/ellipse.js +14 -0
- package/dist/nodes/ellipse.js.map +1 -0
- package/dist/nodes/ellipsebase.d.ts +14 -0
- package/dist/nodes/ellipsebase.d.ts.map +1 -0
- package/dist/nodes/ellipsebase.js +30 -0
- package/dist/nodes/ellipsebase.js.map +1 -0
- package/dist/nodes/geometrynode.d.ts +19 -0
- package/dist/nodes/geometrynode.d.ts.map +1 -0
- package/dist/nodes/geometrynode.js +213 -0
- package/dist/nodes/geometrynode.js.map +1 -0
- package/dist/nodes/gradient.d.ts +28 -0
- package/dist/nodes/gradient.d.ts.map +1 -0
- package/dist/nodes/gradient.js +87 -0
- package/dist/nodes/gradient.js.map +1 -0
- package/dist/nodes/graphicsnode.d.ts +4 -0
- package/dist/nodes/graphicsnode.d.ts.map +1 -0
- package/dist/nodes/graphicsnode.js +4 -0
- package/dist/nodes/graphicsnode.js.map +1 -0
- package/dist/nodes/group.d.ts +8 -0
- package/dist/nodes/group.d.ts.map +1 -0
- package/dist/nodes/group.js +11 -0
- package/dist/nodes/group.js.map +1 -0
- package/dist/nodes/image.d.ts +23 -0
- package/dist/nodes/image.d.ts.map +1 -0
- package/dist/nodes/image.js +152 -0
- package/dist/nodes/image.js.map +1 -0
- package/dist/nodes/line.d.ts +13 -0
- package/dist/nodes/line.d.ts.map +1 -0
- package/dist/nodes/line.js +30 -0
- package/dist/nodes/line.js.map +1 -0
- package/dist/nodes/lineargradient.d.ts +7 -0
- package/dist/nodes/lineargradient.d.ts.map +1 -0
- package/dist/nodes/lineargradient.js +15 -0
- package/dist/nodes/lineargradient.js.map +1 -0
- package/dist/nodes/marker.d.ts +11 -0
- package/dist/nodes/marker.d.ts.map +1 -0
- package/dist/nodes/marker.js +70 -0
- package/dist/nodes/marker.js.map +1 -0
- package/dist/nodes/nonrenderednode.d.ts +11 -0
- package/dist/nodes/nonrenderednode.d.ts.map +1 -0
- package/dist/nodes/nonrenderednode.js +15 -0
- package/dist/nodes/nonrenderednode.js.map +1 -0
- package/dist/nodes/path.d.ts +12 -0
- package/dist/nodes/path.d.ts.map +1 -0
- package/dist/nodes/path.js +75 -0
- package/dist/nodes/path.js.map +1 -0
- package/dist/nodes/pattern.d.ts +11 -0
- package/dist/nodes/pattern.d.ts.map +1 -0
- package/dist/nodes/pattern.js +39 -0
- package/dist/nodes/pattern.js.map +1 -0
- package/dist/nodes/polygon.d.ts +6 -0
- package/dist/nodes/polygon.d.ts.map +1 -0
- package/dist/nodes/polygon.js +7 -0
- package/dist/nodes/polygon.js.map +1 -0
- package/dist/nodes/polyline.d.ts +6 -0
- package/dist/nodes/polyline.d.ts.map +1 -0
- package/dist/nodes/polyline.js +7 -0
- package/dist/nodes/polyline.js.map +1 -0
- package/dist/nodes/radialgradient.d.ts +7 -0
- package/dist/nodes/radialgradient.d.ts.map +1 -0
- package/dist/nodes/radialgradient.js +21 -0
- package/dist/nodes/radialgradient.js.map +1 -0
- package/dist/nodes/rect.d.ts +12 -0
- package/dist/nodes/rect.d.ts.map +1 -0
- package/dist/nodes/rect.js +50 -0
- package/dist/nodes/rect.js.map +1 -0
- package/dist/nodes/renderednode.d.ts +7 -0
- package/dist/nodes/renderednode.d.ts.map +1 -0
- package/dist/nodes/renderednode.js +43 -0
- package/dist/nodes/renderednode.js.map +1 -0
- package/dist/nodes/svg.d.ts +21 -0
- package/dist/nodes/svg.d.ts.map +1 -0
- package/dist/nodes/svg.js +175 -0
- package/dist/nodes/svg.js.map +1 -0
- package/dist/nodes/svgnode.d.ts +18 -0
- package/dist/nodes/svgnode.d.ts.map +1 -0
- package/dist/nodes/svgnode.js +30 -0
- package/dist/nodes/svgnode.js.map +1 -0
- package/dist/nodes/symbol.d.ts +10 -0
- package/dist/nodes/symbol.d.ts.map +1 -0
- package/dist/nodes/symbol.js +62 -0
- package/dist/nodes/symbol.js.map +1 -0
- package/dist/nodes/text.d.ts +13 -0
- package/dist/nodes/text.d.ts.map +1 -0
- package/dist/nodes/text.js +172 -0
- package/dist/nodes/text.js.map +1 -0
- package/dist/nodes/traverse.d.ts +15 -0
- package/dist/nodes/traverse.d.ts.map +1 -0
- package/dist/nodes/traverse.js +47 -0
- package/dist/nodes/traverse.js.map +1 -0
- package/dist/nodes/use.d.ts +15 -0
- package/dist/nodes/use.d.ts.map +1 -0
- package/dist/nodes/use.js +99 -0
- package/dist/nodes/use.js.map +1 -0
- package/dist/nodes/void.d.ts +11 -0
- package/dist/nodes/void.d.ts.map +1 -0
- package/dist/nodes/void.js +19 -0
- package/dist/nodes/void.js.map +1 -0
- package/dist/parse.d.ts +5 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +96 -0
- package/dist/parse.js.map +1 -0
- package/dist/svg2pdf.d.ts +10 -0
- package/dist/svg2pdf.d.ts.map +1 -0
- package/dist/svg2pdf.js +49 -0
- package/dist/svg2pdf.js.map +1 -0
- package/dist/textchunk.d.ts +36 -0
- package/dist/textchunk.d.ts.map +1 -0
- package/dist/textchunk.js +144 -0
- package/dist/textchunk.js.map +1 -0
- package/dist/utils/applyclippath.d.ts +6 -0
- package/dist/utils/applyclippath.d.ts.map +1 -0
- package/dist/utils/applyclippath.js +20 -0
- package/dist/utils/applyclippath.js.map +1 -0
- package/dist/utils/bbox.d.ts +6 -0
- package/dist/utils/bbox.d.ts.map +1 -0
- package/dist/utils/bbox.js +62 -0
- package/dist/utils/bbox.js.map +1 -0
- package/dist/utils/constants.d.ts +7 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +17 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/fonts.d.ts +14 -0
- package/dist/utils/fonts.d.ts.map +1 -0
- package/dist/utils/fonts.js +59 -0
- package/dist/utils/fonts.js.map +1 -0
- package/dist/utils/geometry.d.ts +11 -0
- package/dist/utils/geometry.d.ts.map +1 -0
- package/dist/utils/geometry.js +26 -0
- package/dist/utils/geometry.js.map +1 -0
- package/dist/utils/misc.d.ts +12 -0
- package/dist/utils/misc.d.ts.map +1 -0
- package/dist/utils/misc.js +26 -0
- package/dist/utils/misc.js.map +1 -0
- package/dist/utils/node.d.ts +9 -0
- package/dist/utils/node.d.ts.map +1 -0
- package/dist/utils/node.js +58 -0
- package/dist/utils/node.js.map +1 -0
- package/dist/utils/parsing.d.ts +13 -0
- package/dist/utils/parsing.d.ts.map +1 -0
- package/dist/utils/parsing.js +41 -0
- package/dist/utils/parsing.js.map +1 -0
- package/dist/utils/path.d.ts +39 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +86 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/rgbcolor.d.ts +15 -0
- package/dist/utils/rgbcolor.d.ts.map +1 -0
- package/dist/utils/rgbcolor.js +297 -0
- package/dist/utils/rgbcolor.js.map +1 -0
- package/dist/utils/text.d.ts +15 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +57 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/utils/transform.d.ts +5 -0
- package/dist/utils/transform.d.ts.map +1 -0
- package/dist/utils/transform.js +113 -0
- package/dist/utils/transform.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { AttributeState } from './attributestate';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @package
|
|
5
|
+
* @param values
|
|
6
|
+
* @constructor
|
|
7
|
+
* @property pdf
|
|
8
|
+
* @property attributeState Keeps track of parent attributes that are inherited automatically
|
|
9
|
+
* @property refsHandler The handler that will render references on demand
|
|
10
|
+
* @property styleSheets
|
|
11
|
+
* @property textMeasure
|
|
12
|
+
* @property transform The current transformation matrix
|
|
13
|
+
* @property withinClipPath
|
|
14
|
+
*/
|
|
15
|
+
export class Context {
|
|
16
|
+
constructor(pdf, values) {
|
|
17
|
+
this.pdf = pdf;
|
|
18
|
+
this.svg2pdfParameters = values.svg2pdfParameters;
|
|
19
|
+
this.attributeState = values.attributeState
|
|
20
|
+
? values.attributeState.clone()
|
|
21
|
+
: AttributeState.default();
|
|
22
|
+
this.viewport = values.viewport;
|
|
23
|
+
this.refsHandler = values.refsHandler;
|
|
24
|
+
this.styleSheets = values.styleSheets;
|
|
25
|
+
this.textMeasure = values.textMeasure;
|
|
26
|
+
this.transform = values.transform ?? this.pdf.unitMatrix;
|
|
27
|
+
this.withinClipPath = values.withinClipPath ?? false;
|
|
28
|
+
this.withinUse = values.withinUse ?? false;
|
|
29
|
+
}
|
|
30
|
+
clone(values = {}) {
|
|
31
|
+
return new Context(this.pdf, {
|
|
32
|
+
svg2pdfParameters: this.svg2pdfParameters,
|
|
33
|
+
attributeState: values.attributeState
|
|
34
|
+
? values.attributeState.clone()
|
|
35
|
+
: this.attributeState.clone(),
|
|
36
|
+
viewport: values.viewport ?? this.viewport,
|
|
37
|
+
refsHandler: this.refsHandler,
|
|
38
|
+
styleSheets: this.styleSheets,
|
|
39
|
+
textMeasure: this.textMeasure,
|
|
40
|
+
transform: values.transform ?? this.transform,
|
|
41
|
+
withinClipPath: values.withinClipPath ?? this.withinClipPath,
|
|
42
|
+
withinUse: values.withinUse ?? this.withinUse
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMjD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,OAAO;IAYlB,YAAY,GAAU,EAAE,MAAsB;QAC5C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAA;QAEjD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc;YACzC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE;YAC/B,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC/B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;QACrC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;QACrC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;QACrC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAA;QACxD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,KAAK,CAAA;QACpD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAA;IAC5C,CAAC;IAED,KAAK,CACH,SAMI,EAAE;QAEN,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,cAAc,EAAE,MAAM,CAAC,cAAc;gBACnC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE;gBAC/B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAC1C,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAC7C,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;YAC5D,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;SAC9C,CAAC,CAAA;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SvgNode } from '../nodes/svgnode';
|
|
2
|
+
import { ContextColors } from './attributestate';
|
|
3
|
+
export declare class ReferencesHandler {
|
|
4
|
+
private readonly renderedElements;
|
|
5
|
+
private readonly idMap;
|
|
6
|
+
private readonly idPrefix;
|
|
7
|
+
private static instanceCounter;
|
|
8
|
+
constructor(idMap: {
|
|
9
|
+
[id: string]: SvgNode;
|
|
10
|
+
});
|
|
11
|
+
getRendered(id: string, contextColors: ContextColors | null, renderCallback: (node: SvgNode) => Promise<void>): Promise<SvgNode>;
|
|
12
|
+
get(id: string): SvgNode;
|
|
13
|
+
generateKey(id: string, contextColors: ContextColors | null): string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=referenceshandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referenceshandler.d.ts","sourceRoot":"","sources":["../../src/context/referenceshandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4B;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAI;gBAEtB,KAAK,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAM/B,WAAW,CACtB,EAAE,EAAE,MAAM,EACV,aAAa,EAAE,aAAa,GAAG,IAAI,EACnC,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAC/C,OAAO,CAAC,OAAO,CAAC;IAcnB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIjB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM;CAU5E"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import cssEsc from 'cssesc';
|
|
2
|
+
export class ReferencesHandler {
|
|
3
|
+
constructor(idMap) {
|
|
4
|
+
this.renderedElements = {};
|
|
5
|
+
this.idMap = idMap;
|
|
6
|
+
this.idPrefix = String(ReferencesHandler.instanceCounter++);
|
|
7
|
+
}
|
|
8
|
+
async getRendered(id, contextColors, renderCallback) {
|
|
9
|
+
const key = this.generateKey(id, contextColors);
|
|
10
|
+
if (this.renderedElements.hasOwnProperty(key)) {
|
|
11
|
+
return this.renderedElements[id];
|
|
12
|
+
}
|
|
13
|
+
const svgNode = this.get(id);
|
|
14
|
+
this.renderedElements[key] = svgNode;
|
|
15
|
+
await renderCallback(svgNode);
|
|
16
|
+
return svgNode;
|
|
17
|
+
}
|
|
18
|
+
get(id) {
|
|
19
|
+
return this.idMap[cssEsc(id, { isIdentifier: true })];
|
|
20
|
+
}
|
|
21
|
+
generateKey(id, contextColors) {
|
|
22
|
+
let colorHash = '';
|
|
23
|
+
const keys = ['color', 'contextFill', 'contextStroke'];
|
|
24
|
+
if (contextColors) {
|
|
25
|
+
colorHash = keys.map(key => contextColors[key]?.toRGBA() ?? '').join('|');
|
|
26
|
+
}
|
|
27
|
+
return this.idPrefix + '|' + id + '|' + colorHash;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
ReferencesHandler.instanceCounter = 0;
|
|
31
|
+
//# sourceMappingURL=referenceshandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referenceshandler.js","sourceRoot":"","sources":["../../src/context/referenceshandler.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAI3B,MAAM,OAAO,iBAAiB;IAM5B,YAAY,KAAgC;QAC1C,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC,CAAA;IAC7D,CAAC;IAEM,KAAK,CAAC,WAAW,CACtB,EAAU,EACV,aAAmC,EACnC,cAAgD;QAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;QAC/C,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;QAClC,CAAC;QAED,MAAM,OAAO,GAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACrC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;QAEpC,MAAM,cAAc,CAAC,OAAO,CAAC,CAAA;QAE7B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACvD,CAAC;IAEM,WAAW,CAAC,EAAU,EAAE,aAAmC;QAChE,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,eAAe,CAAU,CAAA;QAE/D,IAAI,aAAa,EAAE,CAAC;YAClB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3E,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,SAAS,CAAA;IACnD,CAAC;;AAvCc,iCAAe,GAAG,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class StyleSheets {
|
|
2
|
+
private rootSvg;
|
|
3
|
+
private readonly loadExternalSheets;
|
|
4
|
+
private readonly styleSheets;
|
|
5
|
+
constructor(rootSvg: Element, loadExtSheets: boolean);
|
|
6
|
+
load(): Promise<void>;
|
|
7
|
+
private collectStyleSheetTexts;
|
|
8
|
+
parseCssSheets(sheetTexts: string[]): void;
|
|
9
|
+
private static splitSelectorAtCommas;
|
|
10
|
+
private static loadSheet;
|
|
11
|
+
getPropertyValue(node: Element, propertyCss: string): string | undefined;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=stylesheets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stylesheets.d.ts","sourceRoot":"","sources":["../../src/context/stylesheets.ts"],"names":[],"mappings":"AAGA,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;gBAEjC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO;IAMvC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAKpB,sBAAsB;IA0CpC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IA6B1C,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAgDpC,OAAO,CAAC,MAAM,CAAC,SAAS;IAwBxB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CA0BzE"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { compare as compareSpecificity } from 'specificity';
|
|
2
|
+
import { nodeIs } from '../utils/node';
|
|
3
|
+
export class StyleSheets {
|
|
4
|
+
constructor(rootSvg, loadExtSheets) {
|
|
5
|
+
this.rootSvg = rootSvg;
|
|
6
|
+
this.loadExternalSheets = loadExtSheets;
|
|
7
|
+
this.styleSheets = [];
|
|
8
|
+
}
|
|
9
|
+
async load() {
|
|
10
|
+
const sheetTexts = await this.collectStyleSheetTexts();
|
|
11
|
+
this.parseCssSheets(sheetTexts);
|
|
12
|
+
}
|
|
13
|
+
async collectStyleSheetTexts() {
|
|
14
|
+
const sheetTexts = [];
|
|
15
|
+
if (this.loadExternalSheets && this.rootSvg.ownerDocument) {
|
|
16
|
+
for (let i = 0; i < this.rootSvg.ownerDocument.childNodes.length; i++) {
|
|
17
|
+
const node = this.rootSvg.ownerDocument.childNodes[i];
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
if (node.nodeName === 'xml-stylesheet' && typeof node.data === 'string') {
|
|
21
|
+
sheetTexts.push(StyleSheets.loadSheet(
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
node.data
|
|
25
|
+
.match(/href=["'].*?["']/)[0]
|
|
26
|
+
.split('=')[1]
|
|
27
|
+
.slice(1, -1)));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const styleElements = this.rootSvg.querySelectorAll('style,link');
|
|
32
|
+
for (let i = 0; i < styleElements.length; i++) {
|
|
33
|
+
const styleElement = styleElements[i];
|
|
34
|
+
if (nodeIs(styleElement, 'style')) {
|
|
35
|
+
sheetTexts.push(styleElement.textContent);
|
|
36
|
+
}
|
|
37
|
+
else if (this.loadExternalSheets &&
|
|
38
|
+
nodeIs(styleElement, 'link') &&
|
|
39
|
+
styleElement.getAttribute('rel') === 'stylesheet' &&
|
|
40
|
+
styleElement.hasAttribute('href')) {
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
42
|
+
sheetTexts.push(StyleSheets.loadSheet(styleElement.getAttribute('href')));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return (await Promise.all(sheetTexts)).filter((sheet) => sheet !== null);
|
|
46
|
+
}
|
|
47
|
+
parseCssSheets(sheetTexts) {
|
|
48
|
+
const styleDoc = document.implementation.createHTMLDocument('');
|
|
49
|
+
for (const sheetText of sheetTexts) {
|
|
50
|
+
const style = styleDoc.createElement('style');
|
|
51
|
+
style.textContent = sheetText;
|
|
52
|
+
styleDoc.body.appendChild(style);
|
|
53
|
+
const sheet = style.sheet;
|
|
54
|
+
if (sheet instanceof CSSStyleSheet) {
|
|
55
|
+
for (let i = sheet.cssRules.length - 1; i >= 0; i--) {
|
|
56
|
+
const cssRule = sheet.cssRules[i];
|
|
57
|
+
if (!(cssRule instanceof CSSStyleRule)) {
|
|
58
|
+
sheet.deleteRule(i);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const cssStyleRule = cssRule;
|
|
62
|
+
if (cssStyleRule.selectorText.indexOf(',') >= 0) {
|
|
63
|
+
sheet.deleteRule(i);
|
|
64
|
+
const body = cssStyleRule.cssText.substring(cssStyleRule.selectorText.length);
|
|
65
|
+
const selectors = StyleSheets.splitSelectorAtCommas(cssStyleRule.selectorText);
|
|
66
|
+
for (let j = 0; j < selectors.length; j++) {
|
|
67
|
+
sheet.insertRule(selectors[j] + body, i + j);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
this.styleSheets.push(sheet);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
static splitSelectorAtCommas(selectorText) {
|
|
76
|
+
const initialRegex = /,|["']/g;
|
|
77
|
+
const closingDoubleQuotesRegex = /[^\\]["]/g;
|
|
78
|
+
const closingSingleQuotesRegex = /[^\\][']/g;
|
|
79
|
+
const parts = [];
|
|
80
|
+
let state = 'initial';
|
|
81
|
+
let match;
|
|
82
|
+
let lastCommaIndex = -1;
|
|
83
|
+
let closingQuotesRegex = closingDoubleQuotesRegex;
|
|
84
|
+
for (let i = 0; i < selectorText.length;) {
|
|
85
|
+
switch (state) {
|
|
86
|
+
case 'initial':
|
|
87
|
+
initialRegex.lastIndex = i;
|
|
88
|
+
match = initialRegex.exec(selectorText);
|
|
89
|
+
if (match) {
|
|
90
|
+
if (match[0] === ',') {
|
|
91
|
+
parts.push(selectorText.substring(lastCommaIndex + 1, initialRegex.lastIndex - 1).trim());
|
|
92
|
+
lastCommaIndex = initialRegex.lastIndex - 1;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
state = 'withinQuotes';
|
|
96
|
+
closingQuotesRegex =
|
|
97
|
+
match[0] === '"' ? closingDoubleQuotesRegex : closingSingleQuotesRegex;
|
|
98
|
+
}
|
|
99
|
+
i = initialRegex.lastIndex;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
parts.push(selectorText.substring(lastCommaIndex + 1).trim());
|
|
103
|
+
i = selectorText.length;
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
case 'withinQuotes':
|
|
107
|
+
closingQuotesRegex.lastIndex = i;
|
|
108
|
+
match = closingQuotesRegex.exec(selectorText);
|
|
109
|
+
if (match) {
|
|
110
|
+
i = closingQuotesRegex.lastIndex;
|
|
111
|
+
state = 'initial';
|
|
112
|
+
}
|
|
113
|
+
// else this is a syntax error - omit the last part...
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return parts;
|
|
118
|
+
}
|
|
119
|
+
static loadSheet(url) {
|
|
120
|
+
return (new Promise((resolve, reject) => {
|
|
121
|
+
const xhr = new XMLHttpRequest();
|
|
122
|
+
xhr.open('GET', url, true);
|
|
123
|
+
xhr.responseType = 'text';
|
|
124
|
+
xhr.onload = () => {
|
|
125
|
+
if (xhr.status !== 200) {
|
|
126
|
+
reject(new Error(`Error ${xhr.status}: Failed to load '${url}'`));
|
|
127
|
+
}
|
|
128
|
+
resolve(xhr.responseText);
|
|
129
|
+
};
|
|
130
|
+
xhr.onerror = reject;
|
|
131
|
+
xhr.onabort = reject;
|
|
132
|
+
xhr.send(null);
|
|
133
|
+
})
|
|
134
|
+
// ignore the error since some stylesheets may not be accessible
|
|
135
|
+
// due to CORS policies
|
|
136
|
+
.catch(() => null));
|
|
137
|
+
}
|
|
138
|
+
getPropertyValue(node, propertyCss) {
|
|
139
|
+
const matchingRules = [];
|
|
140
|
+
for (const sheet of this.styleSheets) {
|
|
141
|
+
for (let i = 0; i < sheet.cssRules.length; i++) {
|
|
142
|
+
const rule = sheet.cssRules[i];
|
|
143
|
+
if (rule.style.getPropertyValue(propertyCss) && node.matches(rule.selectorText)) {
|
|
144
|
+
matchingRules.push(rule);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (matchingRules.length === 0) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
const compare = (a, b) => {
|
|
152
|
+
const priorityA = a.style.getPropertyPriority(propertyCss);
|
|
153
|
+
const priorityB = b.style.getPropertyPriority(propertyCss);
|
|
154
|
+
if (priorityA !== priorityB) {
|
|
155
|
+
return priorityA === 'important' ? 1 : -1;
|
|
156
|
+
}
|
|
157
|
+
return compareSpecificity(a.selectorText, b.selectorText);
|
|
158
|
+
};
|
|
159
|
+
const mostSpecificRule = matchingRules.reduce((previousValue, currentValue) => compare(previousValue, currentValue) === 1 ? previousValue : currentValue);
|
|
160
|
+
return mostSpecificRule.style.getPropertyValue(propertyCss) || undefined;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=stylesheets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stylesheets.js","sourceRoot":"","sources":["../../src/context/stylesheets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AttributeState } from './attributestate';
|
|
2
|
+
export declare class TextMeasure {
|
|
3
|
+
private textMeasuringTextElement?;
|
|
4
|
+
private measureMethods;
|
|
5
|
+
private static readonly testString;
|
|
6
|
+
private static readonly epsilon;
|
|
7
|
+
getTextOffset(text: string, attributeState: AttributeState): number;
|
|
8
|
+
measureTextWidth(text: string, attributeState: AttributeState): number;
|
|
9
|
+
private getMeasurementTextNode;
|
|
10
|
+
private canvasTextMeasure;
|
|
11
|
+
private svgTextMeasure;
|
|
12
|
+
/**
|
|
13
|
+
* Canvas text measuring is a lot faster than svg measuring. However, it is inaccurate for some fonts. So test each
|
|
14
|
+
* font once and decide if canvas is accurate enough.
|
|
15
|
+
*/
|
|
16
|
+
private getMeasureFunction;
|
|
17
|
+
cleanupTextMeasuring(): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=textmeasure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textmeasure.d.ts","sourceRoot":"","sources":["../../src/context/textmeasure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAWjD,qBAAa,WAAW;IACtB,OAAO,CAAC,wBAAwB,CAAC,CAAgB;IACjD,OAAO,CAAC,cAAc,CAA6C;IAEnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CACiE;IACnG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAM;IAErC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM;IAqBnE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM;IAkBtE,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,cAAc;IAmBtB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAgC1B,oBAAoB,IAAI,IAAI;CAS7B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { svgNamespaceURI } from '../utils/constants';
|
|
2
|
+
export class TextMeasure {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.measureMethods = {};
|
|
5
|
+
}
|
|
6
|
+
getTextOffset(text, attributeState) {
|
|
7
|
+
const textAnchor = attributeState.textAnchor;
|
|
8
|
+
if (textAnchor === 'start') {
|
|
9
|
+
return 0;
|
|
10
|
+
}
|
|
11
|
+
const width = this.measureTextWidth(text, attributeState);
|
|
12
|
+
let xOffset = 0;
|
|
13
|
+
switch (textAnchor) {
|
|
14
|
+
case 'end':
|
|
15
|
+
xOffset = width;
|
|
16
|
+
break;
|
|
17
|
+
case 'middle':
|
|
18
|
+
xOffset = width / 2;
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
return xOffset;
|
|
22
|
+
}
|
|
23
|
+
measureTextWidth(text, attributeState) {
|
|
24
|
+
if (text.length === 0) {
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
const fontFamily = attributeState.fontFamily;
|
|
28
|
+
const measure = this.getMeasureFunction(fontFamily);
|
|
29
|
+
return measure.call(this, text, attributeState.fontFamily, attributeState.fontSize + 'px', attributeState.fontStyle, attributeState.fontWeight);
|
|
30
|
+
}
|
|
31
|
+
getMeasurementTextNode() {
|
|
32
|
+
if (!this.textMeasuringTextElement) {
|
|
33
|
+
this.textMeasuringTextElement = document.createElementNS(svgNamespaceURI, 'text');
|
|
34
|
+
const svg = document.createElementNS(svgNamespaceURI, 'svg');
|
|
35
|
+
svg.appendChild(this.textMeasuringTextElement);
|
|
36
|
+
svg.style.setProperty('position', 'absolute');
|
|
37
|
+
svg.style.setProperty('visibility', 'hidden');
|
|
38
|
+
document.body.appendChild(svg);
|
|
39
|
+
}
|
|
40
|
+
return this.textMeasuringTextElement;
|
|
41
|
+
}
|
|
42
|
+
canvasTextMeasure(text, fontFamily, fontSize, fontStyle, fontWeight) {
|
|
43
|
+
const canvas = document.createElement('canvas');
|
|
44
|
+
const context = canvas.getContext('2d');
|
|
45
|
+
if (context != null) {
|
|
46
|
+
context.font = [fontStyle, fontWeight, fontSize, fontFamily].join(' ');
|
|
47
|
+
return context.measureText(text).width;
|
|
48
|
+
}
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
svgTextMeasure(text, fontFamily, fontSize, fontStyle, fontWeight, measurementTextNode = this.getMeasurementTextNode()) {
|
|
52
|
+
const textNode = measurementTextNode;
|
|
53
|
+
textNode.setAttribute('font-family', fontFamily);
|
|
54
|
+
textNode.setAttribute('font-size', fontSize);
|
|
55
|
+
textNode.setAttribute('font-style', fontStyle);
|
|
56
|
+
textNode.setAttribute('font-weight', fontWeight);
|
|
57
|
+
textNode.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');
|
|
58
|
+
textNode.textContent = text;
|
|
59
|
+
return textNode.getBBox().width;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Canvas text measuring is a lot faster than svg measuring. However, it is inaccurate for some fonts. So test each
|
|
63
|
+
* font once and decide if canvas is accurate enough.
|
|
64
|
+
*/
|
|
65
|
+
getMeasureFunction(fontFamily) {
|
|
66
|
+
let method = this.measureMethods[fontFamily];
|
|
67
|
+
if (!method) {
|
|
68
|
+
const fontSize = '16px';
|
|
69
|
+
const fontStyle = 'normal';
|
|
70
|
+
const fontWeight = 'normal';
|
|
71
|
+
const canvasWidth = this.canvasTextMeasure(TextMeasure.testString, fontFamily, fontSize, fontStyle, fontWeight);
|
|
72
|
+
const svgWidth = this.svgTextMeasure(TextMeasure.testString, fontFamily, fontSize, fontStyle, fontWeight);
|
|
73
|
+
method =
|
|
74
|
+
Math.abs(canvasWidth - svgWidth) < TextMeasure.epsilon
|
|
75
|
+
? this.canvasTextMeasure
|
|
76
|
+
: this.svgTextMeasure;
|
|
77
|
+
this.measureMethods[fontFamily] = method;
|
|
78
|
+
}
|
|
79
|
+
return method;
|
|
80
|
+
}
|
|
81
|
+
cleanupTextMeasuring() {
|
|
82
|
+
if (this.textMeasuringTextElement) {
|
|
83
|
+
const parentNode = this.textMeasuringTextElement.parentNode;
|
|
84
|
+
if (parentNode) {
|
|
85
|
+
document.body.removeChild(parentNode);
|
|
86
|
+
}
|
|
87
|
+
this.textMeasuringTextElement = undefined;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
TextMeasure.testString = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789!"$%&/()=?\'\\+*-_.:,;^}][{#~|<>';
|
|
92
|
+
TextMeasure.epsilon = 0.1;
|
|
93
|
+
//# sourceMappingURL=textmeasure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textmeasure.js","sourceRoot":"","sources":["../../src/context/textmeasure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../../src/context/viewport.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ;IACA,KAAK,EAAE,MAAM;IAAS,MAAM,EAAE,MAAM;gBAApC,KAAK,EAAE,MAAM,EAAS,MAAM,EAAE,MAAM;CACxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport.js","sourceRoot":"","sources":["../../src/context/viewport.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAQ;IACnB,YAAmB,KAAa,EAAS,MAAc;QAApC,UAAK,GAAL,KAAK,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;CAC5D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Fill, FillData } from './Fill';
|
|
2
|
+
import { RGBColor } from '../utils/rgbcolor';
|
|
3
|
+
import { Context } from '../context/context';
|
|
4
|
+
import { GraphicsNode } from '../nodes/graphicsnode';
|
|
5
|
+
export declare class ColorFill implements Fill {
|
|
6
|
+
readonly color: RGBColor;
|
|
7
|
+
constructor(color: RGBColor);
|
|
8
|
+
getFillData(forNode: GraphicsNode, context: Context): Promise<FillData | undefined>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ColorFill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorFill.d.ts","sourceRoot":"","sources":["../../src/fill/ColorFill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD,qBAAa,SAAU,YAAW,IAAI;IACpC,SAAgB,KAAK,EAAE,QAAQ,CAAA;gBAEnB,KAAK,EAAE,QAAQ;IAKrB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CAG1F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorFill.js","sourceRoot":"","sources":["../../src/fill/ColorFill.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,SAAS;IAGpB,YAAY,KAAe;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,WAAW,CAAC,OAAqB,EAAE,OAAgB;QACvD,OAAO,SAAS,CAAA;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Context } from '../context/context';
|
|
2
|
+
import { GraphicsNode } from '../nodes/graphicsnode';
|
|
3
|
+
import { Matrix } from 'jspdf';
|
|
4
|
+
export interface Fill {
|
|
5
|
+
getFillData(forNode: GraphicsNode, context: Context): Promise<FillData | undefined>;
|
|
6
|
+
}
|
|
7
|
+
export interface FillData {
|
|
8
|
+
key: string;
|
|
9
|
+
matrix?: Matrix;
|
|
10
|
+
boundingBox?: number[];
|
|
11
|
+
xStep?: number;
|
|
12
|
+
yStep?: number;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=Fill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Fill.d.ts","sourceRoot":"","sources":["../../src/fill/Fill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,MAAM,WAAW,IAAI;IACnB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;CACpF;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Fill.js","sourceRoot":"","sources":["../../src/fill/Fill.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Fill, FillData } from './Fill';
|
|
2
|
+
import { Context } from '../context/context';
|
|
3
|
+
import { Gradient } from '../nodes/gradient';
|
|
4
|
+
import { GraphicsNode } from '../nodes/graphicsnode';
|
|
5
|
+
export declare class GradientFill implements Fill {
|
|
6
|
+
private readonly key;
|
|
7
|
+
private readonly gradient;
|
|
8
|
+
constructor(key: string, gradient: Gradient);
|
|
9
|
+
getFillData(forNode: GraphicsNode, context: Context): Promise<FillData | undefined>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=GradientFill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GradientFill.d.ts","sourceRoot":"","sources":["../../src/fill/GradientFill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAG5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD,qBAAa,YAAa,YAAW,IAAI;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEvB,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAKrC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CAsC1F"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Context } from '../context/context';
|
|
2
|
+
import { parseTransform } from '../utils/transform';
|
|
3
|
+
import { getAttribute } from '../utils/node';
|
|
4
|
+
export class GradientFill {
|
|
5
|
+
constructor(key, gradient) {
|
|
6
|
+
this.key = key;
|
|
7
|
+
this.gradient = gradient;
|
|
8
|
+
}
|
|
9
|
+
async getFillData(forNode, context) {
|
|
10
|
+
await context.refsHandler.getRendered(this.key, null, node => node.apply(new Context(context.pdf, {
|
|
11
|
+
refsHandler: context.refsHandler,
|
|
12
|
+
textMeasure: context.textMeasure,
|
|
13
|
+
styleSheets: context.styleSheets,
|
|
14
|
+
viewport: context.viewport,
|
|
15
|
+
svg2pdfParameters: context.svg2pdfParameters
|
|
16
|
+
})));
|
|
17
|
+
// matrix to convert between gradient space and user space
|
|
18
|
+
// for "userSpaceOnUse" this is the current transformation: tfMatrix
|
|
19
|
+
// for "objectBoundingBox" or default, the gradient gets scaled and transformed to the bounding box
|
|
20
|
+
let gradientUnitsMatrix;
|
|
21
|
+
if (!this.gradient.element.hasAttribute('gradientUnits') ||
|
|
22
|
+
this.gradient.element.getAttribute('gradientUnits').toLowerCase() === 'objectboundingbox') {
|
|
23
|
+
const bBox = forNode.getBoundingBox(context);
|
|
24
|
+
gradientUnitsMatrix = context.pdf.Matrix(bBox[2], 0, 0, bBox[3], bBox[0], bBox[1]);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
gradientUnitsMatrix = context.pdf.unitMatrix;
|
|
28
|
+
}
|
|
29
|
+
// matrix that is applied to the gradient before any other transformations
|
|
30
|
+
const gradientTransform = parseTransform(getAttribute(this.gradient.element, context.styleSheets, 'gradientTransform', 'transform'), context);
|
|
31
|
+
return {
|
|
32
|
+
key: this.key,
|
|
33
|
+
matrix: context.pdf.matrixMult(gradientTransform, gradientUnitsMatrix)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=GradientFill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GradientFill.js","sourceRoot":"","sources":["../../src/fill/GradientFill.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAI5C,MAAM,OAAO,YAAY;IAIvB,YAAY,GAAW,EAAE,QAAkB;QACzC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAqB,EAAE,OAAgB;QACvD,MAAM,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAC1D,IAAiB,CAAC,KAAK,CACtB,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YACvB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC7C,CAAC,CACH,CACF,CAAA;QAED,0DAA0D;QAC1D,oEAAoE;QACpE,mGAAmG;QACnG,IAAI,mBAAmB,CAAA;QACvB,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAE,CAAC,WAAW,EAAE,KAAK,mBAAmB,EAC1F,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YAC5C,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACpF,CAAC;aAAM,CAAC;YACN,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAA;QAC9C,CAAC;QAED,0EAA0E;QAC1E,MAAM,iBAAiB,GAAG,cAAc,CACtC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,mBAAmB,EAAE,WAAW,CAAC,EAC1F,OAAO,CACR,CAAA;QAED,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SACvE,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Fill, FillData } from './Fill';
|
|
2
|
+
import { Context } from '../context/context';
|
|
3
|
+
import { Pattern } from '../nodes/pattern';
|
|
4
|
+
import { GraphicsNode } from '../nodes/graphicsnode';
|
|
5
|
+
export declare class PatternFill implements Fill {
|
|
6
|
+
private readonly key;
|
|
7
|
+
private readonly pattern;
|
|
8
|
+
constructor(key: string, pattern: Pattern);
|
|
9
|
+
getFillData(forNode: GraphicsNode, context: Context): Promise<FillData | undefined>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=PatternFill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatternFill.d.ts","sourceRoot":"","sources":["../../src/fill/PatternFill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAG5C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAGpD,qBAAa,WAAY,YAAW,IAAI;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAKnC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CA+E1F"}
|