igniteui-angular-spreadsheet
Version:
Ignite UI Angular spreadsheet component for displaying and editing Microsoft Excel workbooks for modern web apps.
856 lines • 90.6 kB
JavaScript
/*
THIS INFRAGISTICS ULTIMATE SOFTWARE LICENSE AGREEMENT ("AGREEMENT") LOCATED HERE:
https://www.infragistics.com/legal/license/igultimate-la
https://www.infragistics.com/legal/license/igultimate-eula
GOVERNS THE LICENSING, INSTALLATION AND USE OF INFRAGISTICS SOFTWARE. BY DOWNLOADING AND/OR INSTALLING AND USING INFRAGISTICS SOFTWARE: you are indicating that you have read and understand this Agreement, and agree to be legally bound by it on behalf of the yourself and your company.
*/
import { Base, Boolean_$type, markType, callStaticConstructors, typeCast, String_$type, fromEnum, EnumUtil, toNullable } from "igniteui-angular-core";
import { IPath2DCommandVisitor$2_$type } from "igniteui-angular-excel";
import { ShapeGuideVariables } from "./ShapeGuideVariables";
import { MathUtilities } from "igniteui-angular-excel";
import { CT_Path2DArcTo } from "igniteui-angular-excel";
import { CT_Path2DClose } from "igniteui-angular-excel";
import { CT_Path2DCubicBezierTo } from "igniteui-angular-excel";
import { CT_AdjPoint2D } from "igniteui-angular-excel";
import { CT_Path2DLineTo } from "igniteui-angular-excel";
import { CT_Path2DMoveTo } from "igniteui-angular-excel";
import { CT_Path2DQuadBezierTo } from "igniteui-angular-excel";
import { truncate } from "igniteui-angular-core";
import { StringBuilder } from "igniteui-angular-core";
import { Color } from "igniteui-angular-core";
import { WorkbookColorInfo } from "igniteui-angular-excel";
import { ShapeFillSolid } from "igniteui-angular-excel";
import { SpreadsheetUtilities } from "./SpreadsheetUtilities";
import { Rect } from "igniteui-angular-core";
import { ImageData } from "igniteui-angular-excel";
import { Workbook } from "igniteui-angular-excel";
import { ShapeFillNoFill } from "igniteui-angular-excel";
import { ShapeFillImage } from "igniteui-angular-excel";
import { ShapeOutlineNoOutline } from "igniteui-angular-excel";
import { ShapeOutlineSolid } from "igniteui-angular-excel";
import { ExcelUtils } from "igniteui-angular-excel";
import { XmlConvert } from "igniteui-angular-core";
import { WorksheetImage } from "igniteui-angular-excel";
import { Dictionary$2 } from "igniteui-angular-core";
import { CT_Path2D } from "igniteui-angular-excel";
import { ImageFormat } from "igniteui-angular-excel";
import { Convert } from "igniteui-angular-core";
import { IPath2DCommand_$type } from "igniteui-angular-excel";
import { List$1 } from "igniteui-angular-core";
import { CT_CustomGeometry2D } from "igniteui-angular-excel";
import { ShapeGuide } from "./ShapeGuide";
import { CT_TextBodyProperties } from "igniteui-angular-excel";
import { CT_GeomGuideList } from "igniteui-angular-excel";
import { ST_ShapeType_$type } from "igniteui-angular-excel";
import { ST_PathFillMode_$type } from "igniteui-angular-excel";
import { ST_PositiveCoordinate } from "igniteui-angular-excel";
import { WorksheetShapeWithText } from "igniteui-angular-excel";
import { CT_GeomRect } from "igniteui-angular-excel";
import { UnknownShape } from "igniteui-angular-excel";
import { CT_Path2DList } from "igniteui-angular-excel";
import { ST_AdjAngle } from "igniteui-angular-excel";
import { ST_Angle } from "igniteui-angular-excel";
import { ST_AdjCoordinate } from "igniteui-angular-excel";
import { CT_GeomGuide } from "igniteui-angular-excel";
import { ICT_ShapePropertiesOwner_$type } from "igniteui-angular-excel";
import { CT_PresetGeometry2D } from "igniteui-angular-excel";
import { nullableEquals, nullableNotEquals, nullableIsNull } from "igniteui-angular-core";
import { stringIsNullOrEmpty } from "igniteui-angular-core";
import { XmlTextReader } from "igniteui-angular-core";
import { StringReader } from "igniteui-angular-core";
import { MemoryStream } from "igniteui-angular-core";
import { GZipStream } from "igniteui-angular-excel";
/**
* @hidden
*/
export let ShapeGeometryPathBuilder = /*@__PURE__*/ (() => {
class ShapeGeometryPathBuilder extends Base {
constructor(a, b, c, d) {
super();
this.a = 0;
this.b = 0;
this.e = 0;
this.f = 0;
this.c = 0;
this.d = 0;
this.e = a;
this.f = b;
this.c = c;
this.d = d;
this.a = c;
this.b = d;
}
m(a, b, c, d) {
let e = this.a + 2 / 3 * (a - this.a);
let f = this.b + 2 / 3 * (b - this.b);
let g = c + 2 / 3 * (a - c);
let h = d + 2 / 3 * (b - d);
this.j(e, f, g, h, c, d);
}
static g(a, b, c) {
let d = Math.PI * 2;
let e = Math.PI * a / 180;
if (Math.abs(Math.cos(e)) < 1E-05 || Math.abs(Math.sin(e)) < 1E-05) {
return e;
}
let f = Math.atan2(Math.sin(e) / Math.abs(c), Math.cos(e) / Math.abs(b));
let g = truncate(MathUtilities.f(e / d)) - truncate(MathUtilities.f(f / d));
return f + g * d;
}
visitCT_Path2DArcTo(value, argument) {
return this._visitCT_Path2DArcTo$i.apply(this, arguments);
}
_visitCT_Path2DArcTo$i(a, b) {
let c = ShapeGeometry.l(b, a.d);
let d = ShapeGeometry.l(b, a.c);
let e = ShapeGeometry.k(b, a.a);
let f = ShapeGeometry.k(b, a.b);
let g = f / 180 * Math.PI;
let h = ShapeGeometryPathBuilder.g(e, c, d);
let i = this.a - c * Math.cos(h);
let j = this.b - d * Math.sin(h);
this.h(i, j, c, d, e, f);
let k = ShapeGeometryPathBuilder.g(e + f, c, d);
let l = i + c * Math.cos(k);
let m = j + d * Math.sin(k);
this.a = l;
this.b = m;
return true;
}
visitCT_Path2DClose(value, argument) {
return this._visitCT_Path2DClose$i.apply(this, arguments);
}
_visitCT_Path2DClose$i(a, b) {
this.i();
return true;
}
visitCT_Path2DCubicBezierTo(value, argument) {
return this._visitCT_Path2DCubicBezierTo$i.apply(this, arguments);
}
_visitCT_Path2DCubicBezierTo$i(a, b) {
let c = ShapeGeometry.l(b, a.a.a) + this.c;
let d = ShapeGeometry.l(b, a.a.b) + this.d;
let e = ShapeGeometry.l(b, a.b.a) + this.c;
let f = ShapeGeometry.l(b, a.b.b) + this.d;
let g = ShapeGeometry.l(b, a.c.a) + this.c;
let h = ShapeGeometry.l(b, a.c.b) + this.d;
this.j(c, d, e, f, g, h);
this.a = g;
this.b = h;
return true;
}
visitCT_Path2DLineTo(value, argument) {
return this._visitCT_Path2DLineTo$i.apply(this, arguments);
}
_visitCT_Path2DLineTo$i(a, b) {
let c = ShapeGeometry.l(b, a.a.a) + this.c;
let d = ShapeGeometry.l(b, a.a.b) + this.d;
this.k(c, d);
this.a = c;
this.b = d;
return true;
}
visitCT_Path2DMoveTo(value, argument) {
return this._visitCT_Path2DMoveTo$i.apply(this, arguments);
}
_visitCT_Path2DMoveTo$i(a, b) {
let c = ShapeGeometry.l(b, a.a.a) + this.c;
let d = ShapeGeometry.l(b, a.a.b) + this.d;
this.l(c, d);
this.a = c;
this.b = d;
return true;
}
visitCT_Path2DQuadBezierTo(value, argument) {
return this._visitCT_Path2DQuadBezierTo$i.apply(this, arguments);
}
_visitCT_Path2DQuadBezierTo$i(a, b) {
let c = ShapeGeometry.l(b, a.a.a) + this.c;
let d = ShapeGeometry.l(b, a.a.b) + this.d;
let e = ShapeGeometry.l(b, a.b.a) + this.c;
let f = ShapeGeometry.l(b, a.b.b) + this.d;
this.m(c, d, e, f);
this.a = e;
this.b = f;
return true;
}
}
ShapeGeometryPathBuilder.$t = markType(ShapeGeometryPathBuilder, 'ShapeGeometryPathBuilder', Base.$, [IPath2DCommandVisitor$2_$type.specialize(ShapeGuideVariables.$, Boolean_$type)]);
return ShapeGeometryPathBuilder;
})();
/**
* @hidden
*/
export let SvgPathCreator = /*@__PURE__*/ (() => {
class SvgPathCreator extends ShapeGeometryPathBuilder {
constructor(a, b, c, d, e) {
super(b, c, d, e);
this.n = null;
this.n = a;
}
h(a, b, c, d, e, f) {
if (f >= 360) {
this.o(d, c, e, 180, a, b);
this.o(d, c, e + 180, 180, a, b);
}
else {
this.o(d, c, e, f, a, b);
}
}
i() {
this.n.l(" Z");
}
j(a, b, c, d, e, f) {
this.n.l(" C ");
this.p(a, b);
this.n.l(", ");
this.p(c, d);
this.n.l(", ");
this.p(e, f);
}
k(a, b) {
this.n.l(" L ");
this.p(a, b);
}
l(a, b) {
this.n.l(" M ");
this.p(a, b);
}
m(a, b, c, d) {
this.n.l(" Q ");
this.p(a, b);
this.n.l(", ");
this.p(c, d);
}
o(a, b, c, d, e, f) {
let g = ShapeGeometryPathBuilder.g(c + d, b, a);
let h = e + b * Math.cos(g);
let i = f + a * Math.sin(g);
this.n.l(" A ");
this.p(b, a);
this.n.l(" 0 ");
this.n.l(Math.abs(d) >= 180 ? "1 " : "0 ");
this.n.l(d >= 0 ? "1 " : "0 ");
this.p(h, i);
}
p(a, b) {
this.n.k(a * this.e);
this.n.l(" ");
this.n.k(b * this.f);
}
}
SvgPathCreator.$t = markType(SvgPathCreator, 'SvgPathCreator', ShapeGeometryPathBuilder.$);
return SvgPathCreator;
})();
/**
* @hidden
*/
export let ShapeGeometry = /*@__PURE__*/ (() => {
class ShapeGeometry extends Base {
constructor(a, b) {
super();
this.e = null;
this.p = null;
this.i = null;
this.j = null;
this.p = a;
this.e = b;
this.i = new List$1(ShapeGuide.$, 0);
this.j = new List$1(ShapeGuide.$, 0);
}
static staticInit() {
SpreadsheetUtilities.ce = ShapeGeometry.h;
SpreadsheetUtilities.cf = ShapeGeometry.x;
SpreadsheetUtilities.cd = ShapeGeometry.g;
}
static q(a, b, c, d) {
if (b == null || typeCast(ShapeFillNoFill.$, b) !== null) {
a.l(" fill-opacity=\"0\"");
}
else if (typeCast(ShapeFillSolid.$, b) !== null) {
let e = b;
let f = c != null ? c.workbook : null;
let g = e.colorInfo._aj(f, false, true);
a.l(" fill=\"");
a.l(g.l == 0 ? "none" : g.colorString);
a.l("\"");
}
else if (typeCast(ShapeFillImage.$, b) !== null) {
let h = b._f;
let i = d(h);
a.l(" fill=\"");
a.l("url(#" + i + ")");
a.l("\"");
}
}
static s(a, b, c, d) {
if (b == null || typeCast(ShapeOutlineNoOutline.$, b) !== null) {
}
else if (typeCast(ShapeOutlineSolid.$, b) !== null) {
let e = 1;
let f = b;
let g = c != null ? c.workbook : null;
let h = f.colorInfo._aj(g, false, true);
let i = ExcelUtils.c3(f._d);
i = Math.max(Workbook._eu(c.workbook, i, true) * d, e);
if (h.l != 0) {
a.l(" stroke=\"");
a.l(h.colorString);
a.l("\"");
}
a.l(" stroke-width=\"");
a.k(i);
a.l("\"");
a.l(" stroke-linejoin=\"miter\" stroke-miterlimit=\"10\"");
}
}
static x(a, b, c, d, e, f, g) {
let h = a.c;
let i = null;
let j = (k) => {
if (i == null) {
i = new Dictionary$2(ImageData.$, String_$type, 0);
}
let l;
if (!((() => { let m = i.tryGetValue(k, l); l = m.p1; return m.ret; })())) {
let m;
if (stringIsNullOrEmpty(g._b8)) {
m = "img" + ShapeGeometry.o;
ShapeGeometry.o++;
}
else {
m = XmlConvert.v(g._b8);
}
l = m + i.count;
i.item(k, l);
}
return l;
};
let k = typeCast(WorksheetImage.$, g);
let l = k != null && k._image != null ? new ShapeFillImage(new ImageData(0, k._image.d, k._image.b)) : null;
let m;
if (l == null || SpreadsheetUtilities.au(g) == null) {
m = ShapeGeometry.w(StringBuilder.$, a, b * 15, c * 15, g, (n, o, p, q, r, s, t, u, v) => ShapeGeometry.u(n, o, p, q, r, s, t, u, v, d / r, e / s, f, j, l));
}
else {
m = ShapeGeometry.w(StringBuilder.$, a, b * 15, c * 15, g, (n, o, p, q, r, s, t, u, v) => ShapeGeometry.u(n, o, p, q, r, s, t, null, v, d / r, e / s, f, j, l));
ShapeGeometry.w(StringBuilder.$, a, b * 15 + (d * 15), c * 15 + (e * 15), g, (n, o, p, q, r, s, t, u, v) => ShapeGeometry.u(n, o, p, q, r, s, null, u, null, d / r / 2, e / s / 2, f, j, null));
}
if (i != null && i.count > 0) {
let n = "<defs>";
for (let o of fromEnum(i)) {
n += "<pattern patternUnits=\"userSpaceOnUse\" x=\"" + d + "\" y=\"" + e + "\" width=\"" + b + "\" height=\"" + c + "\" id=\"" + o.value + "\">";
n += " <image preserveAspectRatio=\"none\"";
n += " xlink:href=\"";
n += "data:" + ImageFormat.u(o.key.d) + ";base64," + Convert.toBase64String(o.key.b);
n += "\"";
n += " width=\"" + b + "\"";
n += " height=\"" + c + "\"";
n += "/>";
n += "</pattern>";
}
n += "</defs>";
a.x(h, n);
}
return m;
}
static u(a, b, c, d, e, f, g, h, i, j, k, l, m, n) {
let o = new StringBuilder(0);
let p = new SvgPathCreator(o, e, f, j, k);
for (let q of fromEnum(c.b)) {
q._accept$2$i(ShapeGuideVariables.$, Boolean_$type, p, d);
}
if (g != null || h != null) {
a.l("<path d=\"");
a.l(o.toString());
a.l("\"");
ShapeGeometry.q(a, g, b, m);
ShapeGeometry.s(a, h, b, l);
a.l("/>");
}
if (i != null) {
a.l("<path d=\"");
a.l(o.toString());
a.l("\"");
ShapeGeometry.q(a, i, b, m);
ShapeGeometry.s(a, h, b, l);
a.l("/>");
}
if (n != null) {
a.l("<path d=\"");
a.l(o.toString());
a.l("\"");
ShapeGeometry.q(a, n, b, m);
a.l("/>");
}
}
static g(a) {
let b = false;
if (a != null && typeCast(CT_TextBodyProperties.$, a._o) !== null) {
let c = a._o.q;
if (nullableEquals(c, null) || c.value == 0) {
b = true;
}
}
return b;
}
static w($t, a, b, c, d, e) {
if (d == null) {
return Rect.empty;
}
let f = null;
if (typeCast(UnknownShape.$, d) !== null && typeCast(CT_CustomGeometry2D.$, d._eo) !== null) {
f = PredefinedShapes.b.c(d._eo);
}
else if (nullableNotEquals(d._b1, null)) {
f = PredefinedShapes.b.d(EnumUtil.getName(ST_ShapeType_$type, d._b1.value));
}
else if (typeCast(WorksheetImage.$, d) !== null) {
f = PredefinedShapes.b.d(EnumUtil.getName(ST_ShapeType_$type, 4));
}
if (f == null) {
return Rect.empty;
}
let g = SpreadsheetUtilities.at(d);
let h = SpreadsheetUtilities.au(d);
let i = ShapeGeometry.f(d);
let j = d.worksheet;
let k = ExcelUtils.dp(b);
let l = ExcelUtils.dp(c);
let m = new ShapeGuideVariables();
m.f = k;
m.e = l;
if (f.j.count == 0 && f.i.count == 0) {
f.v();
}
ShapeGeometry.r(m, f.i);
if (i != null) {
let n = new List$1(ShapeGuide.$, 0);
ShapeGeometry.t(i, n);
ShapeGeometry.r(m, n);
}
ShapeGeometry.r(m, f.j);
if (f.e.f != null) {
let o = f.e.f.b;
for (let p = 0; p < o.count; p++) {
let q = o._inner[p];
let r = ST_PositiveCoordinate.g(q.g, toNullable(ST_PositiveCoordinate.$, null)) ? k / ST_PositiveCoordinate.o(q.g.value) : 1;
let s = ST_PositiveCoordinate.g(q.e, toNullable(ST_PositiveCoordinate.$, null)) ? l / ST_PositiveCoordinate.o(q.e.value) : 1;
let t = g;
let u = null;
let v = h;
if (nullableEquals(q.f, false)) {
v = null;
}
let w = q.d;
switch (!nullableIsNull(w) ? w.value : 1) {
case 0:
t = null;
break;
case 1: break;
case 4:
u = ShapeGeometry.a;
break;
case 5:
u = ShapeGeometry.b;
break;
case 2:
u = ShapeGeometry.c;
break;
case 3:
u = ShapeGeometry.d;
break;
}
e(a, j, q, m, r, s, t, v, u);
}
}
let x;
if (f.e.e == null) {
x = Rect.empty;
}
else {
let y = typeCast(WorksheetShapeWithText.$, d);
if (y == null || !y._d1) {
x = Rect.empty;
}
else {
let z = y.text;
let aa = f.e.e;
let ab = ShapeGeometry.l(m, aa.b);
let ac = ShapeGeometry.l(m, aa.d);
let ad = ShapeGeometry.l(m, aa.c);
let ae = ShapeGeometry.l(m, aa.a);
let af = typeCast(CT_TextBodyProperties.$, z._o);
if (af != null) {
let ag = ShapeGeometry.m(af.j, 9.6);
let ah = ShapeGeometry.m(af.s, 4.8);
let ai = ShapeGeometry.m(af.m, 9.6);
let aj = ShapeGeometry.m(af.f, 4.8);
ab += ag;
ad -= ai;
ac += ah;
ae -= aj;
}
if (ad <= ab || ae <= ac) {
x = Rect.empty;
}
else {
x = new Rect(0, ab, ac, ad - ab, ae - ac);
}
}
}
return x;
}
static h(a) {
if (typeCast(WorksheetImage.$, a) !== null) {
return true;
}
if (nullableNotEquals(a._b1, null)) {
return PredefinedShapes.b.d(EnumUtil.getName(ST_ShapeType_$type, a._b1.value)) != null;
}
if (typeCast(UnknownShape.$, a) !== null) {
return a._eo != null;
}
return false;
}
static k(a, b) {
if (nullableNotEquals(b.e, null)) {
return a.c(b.e.value.a) / 60000;
}
if (ST_Angle.g(b.d, toNullable(ST_Angle.$, null))) {
return b.d.value.n();
}
return 0;
}
static l(a, b) {
return ShapeGeometry.n(a, b) / 15;
}
static m(a, b) {
if (nullableNotEquals(a, null)) {
let c = a.value.j();
c = ExcelUtils.c3(c);
return c / 15;
}
return b;
}
static n(a, b) {
if (nullableNotEquals(b.e, null)) {
let c = a.c(b.e.value.a);
c = ExcelUtils.c3(truncate(c));
return c;
}
if (nullableNotEquals(b.d, null)) {
return b.d.value.k();
}
return 0;
}
static r(a, b) {
for (let c of fromEnum(b)) {
let d = c.b(a);
a.b.item(c.c, c);
a.g(c.c, d);
}
}
static t(a, b) {
if (a != null) {
for (let c of fromEnum(a.b)) {
b.add(ShapeGuide.a(c.b, c.a));
}
}
}
static f(a) {
let b = null;
if (a != null) {
let c = typeCast(ICT_ShapePropertiesOwner_$type, a._b3);
if (c != null && c.spPr != null) {
let d = typeCast(CT_PresetGeometry2D.$, c.spPr.e);
if (d != null && d.a != null) {
b = d.a;
}
}
}
return b;
}
v() {
ShapeGeometry.t(this.e.c, this.i);
ShapeGeometry.t(this.e.d, this.j);
}
}
ShapeGeometry.$t = markType(ShapeGeometry, 'ShapeGeometry');
ShapeGeometry.o = 0;
ShapeGeometry.a = new ShapeFillSolid(new WorkbookColorInfo(Color.u(102, 0, 0, 0)));
ShapeGeometry.b = new ShapeFillSolid(new WorkbookColorInfo(Color.u(51, 0, 0, 0)));
ShapeGeometry.c = new ShapeFillSolid(new WorkbookColorInfo(Color.u(102, 255, 255, 255)));
ShapeGeometry.d = new ShapeFillSolid(new WorkbookColorInfo(Color.u(51, 255, 255, 255)));
return ShapeGeometry;
})();
/**
* @hidden
*/
export let PredefinedShapes = /*@__PURE__*/ (() => {
class PredefinedShapes extends Base {
constructor() {
super();
this.f = null;
this.f = new Dictionary$2(String_$type, ShapeGeometry.$, 0);
}
static get b() {
if (PredefinedShapes.a == null) {
{
if (PredefinedShapes.a == null) {
let a = new PredefinedShapes();
PredefinedShapes.a = a;
}
}
}
return PredefinedShapes.a;
}
c(a) {
if (a.a == null && a.c == null) {
let b = a.g;
let c = new StringReader(b);
let d = new XmlTextReader(3, c);
if (!d.i) {
d.a6();
this.j(a, d);
}
}
return new ShapeGeometry(null, a);
}
d(a) {
if (!this.f.containsKey(a)) {
this.k(null);
}
let b;
if (((() => { let c = this.f.tryGetValue(a, b); b = c.p1; return c.ret; })())) {
return b;
}
return null;
}
static h() {
let a = new MemoryStream(0);
{
let b = new MemoryStream(2, Convert.fromBase64String(PredefinedShapes.i));
try {
if (b == null) {
return null;
}
try {
{
let c = new GZipStream(b, 0);
try {
let d = new Array(4096);
while (true) {
let e = c.read(d, 0, d.length);
if (e == 0) {
break;
}
a.write(d, 0, e);
}
}
finally {
if (c != null) {
c.dispose();
}
}
}
}
catch (f) {
}
}
finally {
if (b != null) {
b.dispose();
}
}
}
a.position = 0;
return a;
}
j(a, b) {
this.l(CT_CustomGeometry2D.$, a, b, (c) => {
switch (b.ag) {
case "avLst":
a.c = new CT_GeomGuideList();
this.o(b, a.c);
return true;
case "gdLst":
a.d = new CT_GeomGuideList();
this.o(b, a.d);
return true;
case "pathLst":
a.f = new CT_Path2DList();
this.n(b, a.f);
return true;
default:
case "ahLst":
case "cxnLst": return b.i;
case "rect":
a.e = ((() => {
let $ret = new CT_GeomRect();
$ret.b = ST_AdjCoordinate.a(b.ab("l"));
$ret.d = ST_AdjCoordinate.a(b.ab("t"));
$ret.c = ST_AdjCoordinate.a(b.ab("r"));
$ret.a = ST_AdjCoordinate.a(b.ab("b"));
return $ret;
})());
return b.i;
}
});
}
k(a) {
{
let b = PredefinedShapes.h();
try {
let c = new XmlTextReader(1, b);
c.a6();
let d = false;
while (d || c.t()) {
d = false;
if (c.a7 == 1 && !c.i) {
let e = c.ai;
if (a != null && !a.contains(e)) {
d = true;
c.a2();
continue;
}
let f = new CT_CustomGeometry2D();
this.j(f, c);
this.f.item(e, new ShapeGeometry(e, f));
}
}
}
finally {
if (b != null) {
b.dispose();
}
}
}
}
l($t, a, b, c) {
if (b.i) {
return;
}
b.q();
let d = b.x;
let e = false;
while (d <= b.x && (e || b.t())) {
e = false;
if (b.a7 == 1) {
if (!c(a)) {
e = true;
b.a2();
}
}
if (b.a7 == 15) {
if (b.x == d) {
break;
}
}
}
}
m(a, b) {
this.l(List$1.$.specialize(IPath2DCommand_$type), b, a, (c) => {
switch (a.ag) {
case "close":
c.add(new CT_Path2DClose());
return true;
case "arcTo":
let d = new CT_Path2DArcTo();
d.d = ST_AdjCoordinate.a(a.ab("wR"));
d.c = ST_AdjCoordinate.a(a.ab("hR"));
d.a = ST_AdjAngle.a(a.ab("stAng"));
d.b = ST_AdjAngle.a(a.ab("swAng"));
c.add(d);
return a.i;
}
let e = new List$1(CT_AdjPoint2D.$, 0);
this.p(a, e);
switch (a.ag) {
case "moveTo":
let f = new CT_Path2DMoveTo();
f.a = e._inner[0];
c.add(f);
return true;
case "lnTo":
let g = new CT_Path2DLineTo();
g.a = e._inner[0];
c.add(g);
return true;
case "quadBezTo":
let h = new CT_Path2DQuadBezierTo();
h.a = e._inner[0];
h.b = e._inner[1];
c.add(h);
return true;
case "cubicBezTo":
let i = new CT_Path2DCubicBezierTo();
i.a = e._inner[0];
i.b = e._inner[1];
i.c = e._inner[2];
c.add(i);
return true;
default: return a.i;
}
});
}
n(a, b) {
this.l(CT_Path2DList.$, b, a, (c) => {
if (a.ag == "path") {
let d = new CT_Path2D();
d.c = toNullable(Boolean_$type, PredefinedShapes.e(a, "extrusionOk", true));
d.d = toNullable(ST_PathFillMode_$type, EnumUtil.getEnumValue(ST_PathFillMode_$type, EnumUtil.parse(ST_PathFillMode_$type, (((e) => e != null ? e : "norm")(a.ab("fill"))), false)));
d.f = toNullable(Boolean_$type, PredefinedShapes.e(a, "stroke", true));
let e = a.ab("w");
if (!stringIsNullOrEmpty(e)) {
d.g = toNullable(ST_PositiveCoordinate.$, new ST_PositiveCoordinate(1, XmlConvert.n(e)));
}
let f = a.ab("h");
if (!stringIsNullOrEmpty(f)) {
d.e = toNullable(ST_PositiveCoordinate.$, new ST_PositiveCoordinate(1, XmlConvert.n(f)));
}
this.m(a, d.b);
c.b.add(d);
return true;
}
return false;
});
}
p(a, b) {
this.l(List$1.$.specialize(CT_AdjPoint2D.$), b, a, (c) => {
if (a.ag == "pt") {
let d = new CT_AdjPoint2D();
d.a = ST_AdjCoordinate.a(a.ab("x"));
d.b = ST_AdjCoordinate.a(a.ab("y"));
c.add(d);
return true;
}
else {
return a.i;
}
});
}
o(a, b) {
this.l(CT_GeomGuideList.$, b, a, (c) => {
if (a.ag == "gd") {
let d = new CT_GeomGuide();
d.b = a.ab("name");
d.a = a.ab("fmla");
c.b.add(d);
return true;
}
return a.i;
});
}
static e(a, b, c) {
let d = a.ab(b);
return d != null ? XmlConvert.d(d) : c;
}
static g(a, b, c) {
let d = a.ab(b);
return d != null ? XmlConvert.o(d) : c;
}
}
PredefinedShapes.$t = markType(PredefinedShapes, 'PredefinedShapes');
PredefinedShapes.a = null;
PredefinedShapes.i = "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