UNPKG

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
/* 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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