/* * (c) Copyright Ascensio System SIA 2010-2014 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, * EU, LV-1021. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ function CPPTXContentLoader() { this.Reader = new BinaryPPTYLoader(); this.Writer = null; this.stream = null; this.TempMainObject = null; this.ParaDrawing = null; this.LogicDocument = null; this.BaseReader = null; this.ImageMapChecker = new Object(); this.Start_UseFullUrl = function () { this.Reader.Start_UseFullUrl(); }; this.End_UseFullUrl = function () { return this.Reader.End_UseFullUrl(); }; this.ReadDrawing = function (reader, stream, logicDocument, paraDrawing) { this.BaseReader = reader; if (this.Reader == null) { this.Reader = new BinaryPPTYLoader(); } if (null != paraDrawing) { this.ParaDrawing = paraDrawing; this.TempMainObject = null; } this.LogicDocument = logicDocument; this.Reader.ImageMapChecker = this.ImageMapChecker; if (null == this.stream) { this.stream = new FileStream(); this.stream.obj = stream.obj; this.stream.data = stream.data; this.stream.size = stream.size; } this.stream.pos = stream.pos; this.stream.cur = stream.cur; this.Reader.stream = this.stream; var GrObject = null; var s = this.stream; var _main_type = s.GetUChar(); var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; s.Skip2(5); var _type = s.GetUChar(); switch (_type) { case 1: GrObject = this.ReadShape(); break; case 2: GrObject = this.ReadPic(); break; case 3: GrObject = this.ReadCxn(); break; case 4: GrObject = this.ReadGroupShape(); break; case 5: s.SkipRecord(); break; default: break; } s.Seek2(_end_rec); stream.pos = s.pos; stream.cur = s.cur; return GrObject; }; this.ReadGraphicObject = function (stream) { if (this.Reader == null) { this.Reader = new BinaryPPTYLoader(); } this.LogicDocument = null; this.Reader.ImageMapChecker = this.ImageMapChecker; if (null == this.stream) { this.stream = new FileStream(); this.stream.obj = stream.obj; this.stream.data = stream.data; this.stream.size = stream.size; } this.stream.pos = stream.pos; this.stream.cur = stream.cur; this.Reader.stream = this.stream; var s = this.stream; var _main_type = s.GetUChar(); var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; s.Skip2(5); var GrObject = this.Reader.ReadGraphicObject(); s.Seek2(_end_rec); stream.pos = s.pos; stream.cur = s.cur; return GrObject; }; this.ReadTextBody = function (reader, stream, shape) { this.BaseReader = reader; if (this.Reader == null) { this.Reader = new BinaryPPTYLoader(); } this.LogicDocument = null; this.Reader.ImageMapChecker = this.ImageMapChecker; if (null == this.stream) { this.stream = new FileStream(); this.stream.obj = stream.obj; this.stream.data = stream.data; this.stream.size = stream.size; } this.stream.pos = stream.pos; this.stream.cur = stream.cur; this.Reader.stream = this.stream; var s = this.stream; var _main_type = s.GetUChar(); var txBody = this.Reader.ReadTextBody(shape); stream.pos = s.pos; stream.cur = s.cur; return txBody; }; this.ReadTextBodyTxPr = function (reader, stream, shape) { this.BaseReader = reader; if (this.Reader == null) { this.Reader = new BinaryPPTYLoader(); } this.LogicDocument = null; this.Reader.ImageMapChecker = this.ImageMapChecker; if (null == this.stream) { this.stream = new FileStream(); this.stream.obj = stream.obj; this.stream.data = stream.data; this.stream.size = stream.size; } this.stream.pos = stream.pos; this.stream.cur = stream.cur; this.Reader.stream = this.stream; var s = this.stream; var _main_type = s.GetUChar(); var txBody = this.Reader.ReadTextBodyTxPr(shape); stream.pos = s.pos; stream.cur = s.cur; return txBody; }; this.ReadShapeProperty = function (stream) { if (this.Reader == null) { this.Reader = new BinaryPPTYLoader(); } this.LogicDocument = null; this.Reader.ImageMapChecker = this.ImageMapChecker; if (null == this.stream) { this.stream = new FileStream(); this.stream.obj = stream.obj; this.stream.data = stream.data; this.stream.size = stream.size; } this.stream.pos = stream.pos; this.stream.cur = stream.cur; this.Reader.stream = this.stream; var s = this.stream; var _main_type = s.GetUChar(); var oNewSpPr = new CSpPr(); this.Reader.ReadSpPr(oNewSpPr); stream.pos = s.pos; stream.cur = s.cur; return oNewSpPr; }; this.ReadShape = function () { var s = this.stream; var shape = new WordShape(this.TempMainObject == null ? this.ParaDrawing : null, this.LogicDocument, this.LogicDocument.DrawingDocument, this.TempMainObject); var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: shape.attrUseBgFill = s.GetBool(); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: s.SkipRecord(); break; case 1: var spPr = new CSpPr(); this.ReadSpPr(spPr); shape.setSpPr(spPr); break; case 2: shape.setStyle(this.Reader.ReadShapeStyle()); break; case 3: s.SkipRecord(); break; case 4: var oThis = this.BaseReader; shape.addDocContent(new CDocumentContent(shape, this.LogicDocument.DrawingDocument, 0, 0, 0, 0, false, false)); var _old_cont = shape.textBoxContent.Content[0]; shape.textBoxContent.Internal_Content_RemoveAll(); s.Skip2(4); oThis.stream.pos = s.pos; oThis.stream.cur = s.cur; var oBinary_DocumentTableReader = new Binary_DocumentTableReader(shape.textBoxContent, oThis.oReadResult, null, oThis.stream, false, oThis.oComments); var nDocLength = oThis.stream.GetULongLE(); var content_arr = []; oThis.bcr.Read1(nDocLength, function (t, l) { return oBinary_DocumentTableReader.ReadDocumentContent(t, l, content_arr); }); for (var i = 0, length = content_arr.length; i < length; ++i) { shape.textBoxContent.Internal_Content_Add(i, content_arr[i]); } s.pos = oThis.stream.pos; s.cur = oThis.stream.cur; if (shape.textBoxContent.Content.length == 0) { shape.textBoxContent.Internal_Content_Add(0, _old_cont); } break; case 5: var bodyPr = new CBodyPr(); this.Reader.CorrectBodyPr(bodyPr); shape.setBodyPr(bodyPr); default: break; } } s.Seek2(_end_rec); return shape; }; this.ReadCxn = function () { var s = this.stream; var shape = new WordShape(null, this.LogicDocument, this.LogicDocument.DrawingDocument, this.TempMainObject); shape.setParent(this.TempMainObject == null ? this.ParaDrawing : null); var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: shape.attrUseBgFill = s.GetBool(); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: s.SkipRecord(); break; case 1: var spPr = new CSpPr(); this.ReadSpPr(spPr); shape.setSpPr(spPr); break; case 2: shape.setStyle(this.Reader.ReadShapeStyle()); break; default: break; } } s.Seek2(_end_rec); return shape; }; this.ReadPic = function () { var s = this.stream; var pic = new WordImage(null, this.LogicDocument, this.LogicDocument.DrawingDocument, this.TempMainObject); pic.setParent(this.TempMainObject == null ? this.ParaDrawing : null); var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: s.SkipRecord(); break; case 1: var unifill = this.Reader.ReadUniFill(); pic.setBlipFill(unifill.fill); pic.spPr.Fill = new CUniFill(); pic.spPr.Fill.fill = pic.blipFill; pic.brush = pic.spPr.Fill; break; case 2: var spPr = new CSpPr(); this.ReadSpPr(spPr); pic.setSpPr(spPr); break; case 3: pic.setStyle(this.Reader.ReadShapeStyle()); break; default: break; } } s.Seek2(_end_rec); return pic; }; this.ReadGroupShape = function () { var s = this.stream; var shape = new WordGroupShapes(null, this.LogicDocument, this.LogicDocument.DrawingDocument, this.TempMainObject); shape.setParent(this.TempMainObject == null ? this.ParaDrawing : null); this.TempGroupObject = shape; var arrGraphicObjects = shape.arrGraphicObjects; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: s.SkipRecord(); break; case 1: var spPr = new CSpPr(); this.ReadSpPr(spPr); shape.setSpPr(spPr); break; case 2: s.Skip2(4); var _c = s.GetULong(); for (var i = 0; i < _c; i++) { s.Skip2(1); var __len = s.GetULong(); if (__len == 0) { continue; } var _type = s.GetUChar(); switch (_type) { case 1: shape.addGraphicObject(this.ReadShape()); break; case 2: shape.addGraphicObject(this.ReadPic()); break; case 3: shape.addGraphicObject(this.ReadCxn()); break; case 4: shape.addGraphicObject(this.ReadGroupShape()); this.TempGroupObject = shape; break; case 5: var _chart = this.Reader.ReadChartDataInGroup(shape); if (null != _chart) { shape.addGraphicObject(_chart); } break; default: break; } } break; default: break; } } s.Seek2(_end_rec); this.TempGroupObject = null; return shape; }; this.ReadSpPr = function (spPr) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { spPr.bwMode = s.GetUChar(); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: spPr.xfrm = this.Reader.ReadXfrm(); break; case 1: spPr.geometry = this.Reader.ReadGeometry(spPr.xfrm); break; case 2: spPr.Fill = this.Reader.ReadUniFill(); break; case 3: spPr.ln = this.Reader.ReadLn(); break; case 4: var _len = s.GetULong(); s.Skip2(_len); break; case 5: var _len = s.GetULong(); s.Skip2(_len); break; case 6: var _len = s.GetULong(); s.Skip2(_len); break; default: break; } } s.Seek2(_end_rec); }; this.CorrectXfrm = function (_xfrm) { if (!_xfrm) { return; } if (null == _xfrm.rot) { return; } var nInvertRotate = 0; if (true === _xfrm.flipH) { nInvertRotate += 1; } if (true === _xfrm.flipV) { nInvertRotate += 1; } var _rot = _xfrm.rot; var _del = 2 * Math.PI; if (nInvertRotate) { _rot = -_rot; } if (_rot >= _del) { var _intD = (_rot / _del) >> 0; _rot = _rot - _intD * _del; } else { if (_rot < 0) { var _intD = (-_rot / _del) >> 0; _intD = 1 + _intD; _rot = _rot + _intD * _del; } } _xfrm.rot = _rot; }; this.ReadTheme = function (reader, stream) { this.BaseReader = reader; if (this.Reader == null) { this.Reader = new BinaryPPTYLoader(); } if (null == this.stream) { this.stream = new FileStream(); this.stream.obj = stream.obj; this.stream.data = stream.data; this.stream.size = stream.size; } this.stream.pos = stream.pos; this.stream.cur = stream.cur; this.Reader.stream = this.stream; return this.Reader.ReadTheme(); }; this.CheckImagesNeeds = function (logicDoc) { var index = 0; logicDoc.ImageMap = new Object(); for (var i in this.ImageMapChecker) { logicDoc.ImageMap[index++] = i; } }; this.Clear = function () { this.stream = null; this.ImageMapChecker = new Object(); }; } function CPPTXContentWriter() { this.BinaryFileWriter = new CBinaryFileWriter(); this.BinaryFileWriter.Init(); this.TreeDrawingIndex = 0; this.ShapeTextBoxContent = null; this.arrayStackStartsTextBoxContent = []; this.arrayStackStarts = []; this.Start_UseFullUrl = function (origin) { this.BinaryFileWriter.Start_UseFullUrl(origin); }; this.Start_UseDocumentOrigin = function (origin) { this.BinaryFileWriter.Start_UseDocumentOrigin(origin); }; this.End_UseFullUrl = function () { return this.BinaryFileWriter.End_UseFullUrl(); }; this._Start = function () { this.ShapeTextBoxContent = new CMemory(); this.arrayStackStartsTextBoxContent = []; this.arrayStackStarts = []; }; this._End = function () { this.ShapeTextBoxContent = null; }; this.WriteTextBody = function (memory, textBody) { if (this.BinaryFileWriter.UseContinueWriter) { this.BinaryFileWriter.ImData = memory.ImData; this.BinaryFileWriter.data = memory.data; this.BinaryFileWriter.len = memory.len; this.BinaryFileWriter.pos = memory.pos; } else { this.TreeDrawingIndex++; this.arrayStackStarts.push(this.BinaryFileWriter.pos); } var _writer = this.BinaryFileWriter; _writer.StartRecord(0); _writer.WriteTxBody(textBody); _writer.EndRecord(); if (this.BinaryFileWriter.UseContinueWriter) { memory.ImData = this.BinaryFileWriter.ImData; memory.data = this.BinaryFileWriter.data; memory.len = this.BinaryFileWriter.len; memory.pos = this.BinaryFileWriter.pos; } else { this.TreeDrawingIndex--; var oldPos = this.arrayStackStarts[this.arrayStackStarts.length - 1]; memory.WriteBuffer(this.BinaryFileWriter.data, oldPos, this.BinaryFileWriter.pos - oldPos); this.BinaryFileWriter.pos = oldPos; this.arrayStackStarts.splice(this.arrayStackStarts.length - 1, 1); } }; this.WriteSpPr = function (memory, spPr) { if (this.BinaryFileWriter.UseContinueWriter) { this.BinaryFileWriter.ImData = memory.ImData; this.BinaryFileWriter.data = memory.data; this.BinaryFileWriter.len = memory.len; this.BinaryFileWriter.pos = memory.pos; } else { this.TreeDrawingIndex++; this.arrayStackStarts.push(this.BinaryFileWriter.pos); this.BinaryFileWriter.pos = 0; } var _writer = this.BinaryFileWriter; _writer.StartRecord(0); _writer.WriteSpPr(spPr); _writer.EndRecord(); if (this.BinaryFileWriter.UseContinueWriter) { memory.ImData = this.BinaryFileWriter.ImData; memory.data = this.BinaryFileWriter.data; memory.len = this.BinaryFileWriter.len; memory.pos = this.BinaryFileWriter.pos; } else { this.TreeDrawingIndex--; var oldPos = this.arrayStackStarts[this.arrayStackStarts.length - 1]; memory.WriteBuffer(this.BinaryFileWriter.data, oldPos, this.BinaryFileWriter.pos - oldPos); this.BinaryFileWriter.pos = oldPos; this.arrayStackStarts.splice(this.arrayStackStarts.length - 1, 1); } }; this.WriteDrawing = function (memory, grObject, Document, oMapCommentId, oNumIdMap, copyParams) { this.TreeDrawingIndex++; this.arrayStackStarts.push(this.BinaryFileWriter.pos); this.BinaryFileWriter.StartRecord(0); this.BinaryFileWriter.StartRecord(1); if ("undefined" !== typeof(WordShape) && grObject instanceof WordShape) { this.WriteShape(grObject, Document, oMapCommentId, oNumIdMap, copyParams); } else { if ("undefined" !== typeof(CShape) && grObject instanceof CShape) { this.WriteShape2(grObject, Document, oMapCommentId, oNumIdMap, copyParams); } else { if (("undefined" !== typeof(WordImage) && grObject instanceof WordImage) || ("undefined" !== typeof(CImageShape) && grObject instanceof CImageShape)) { this.WriteImage(grObject); } else { if (("undefined" !== typeof(WordGroupShapes) && grObject instanceof WordGroupShapes) || ("undefined" !== typeof(CGroupShape) && grObject instanceof CGroupShape)) { this.WriteGroup(grObject, Document, oMapCommentId, oNumIdMap, copyParams); } } } } this.BinaryFileWriter.EndRecord(); this.BinaryFileWriter.EndRecord(); this.TreeDrawingIndex--; var oldPos = this.arrayStackStarts[this.arrayStackStarts.length - 1]; memory.WriteBuffer(this.BinaryFileWriter.data, oldPos, this.BinaryFileWriter.pos - oldPos); this.BinaryFileWriter.pos = oldPos; this.arrayStackStarts.splice(this.arrayStackStarts.length - 1, 1); }; this.WriteShape2 = function (shape, Document, oMapCommentId, oNumIdMap, copyParams) { var _writer = this.BinaryFileWriter; _writer.WriteShape(shape); }; this.WriteShape = function (shape, Document, oMapCommentId, oNumIdMap, copyParams) { var _writer = this.BinaryFileWriter; _writer.StartRecord(1); _writer.WriteUChar(g_nodeAttributeStart); _writer._WriteBool2(0, shape.attrUseBgFill); _writer.WriteUChar(g_nodeAttributeEnd); shape.spPr.WriteXfrm = shape.spPr.xfrm; shape.spPr.Geometry = shape.spPr.geometry; var tmpFill = shape.spPr.Fill; var isUseTmpFill = false; if (tmpFill !== undefined && tmpFill != null) { var trans = ((tmpFill.transparent != null) && (tmpFill.transparent != 255)) ? tmpFill.transparent : null; if (trans != null) { if (tmpFill.fill === undefined || tmpFill.fill == null) { isUseTmpFill = true; shape.spPr.Fill = shape.brush; } } } _writer.WriteRecord1(1, shape.spPr, _writer.WriteSpPr); _writer.WriteRecord2(2, shape.style, _writer.WriteShapeStyle); if (shape.textBoxContent) { _writer.StartRecord(4); var memory = this.ShapeTextBoxContent; this.arrayStackStartsTextBoxContent.push(memory.pos); var bdtw = new BinaryDocumentTableWriter(memory, Document, oMapCommentId, oNumIdMap, copyParams); var bcw = new BinaryCommonWriter(memory); bcw.WriteItemWithLength(function () { bdtw.WriteDocumentContent(shape.textBoxContent); }); var oldPos = this.arrayStackStartsTextBoxContent[this.arrayStackStartsTextBoxContent.length - 1]; _writer.WriteBuffer(memory.data, oldPos, memory.pos - oldPos); memory.pos = oldPos; this.arrayStackStartsTextBoxContent.splice(this.arrayStackStartsTextBoxContent.length - 1, 1); _writer.EndRecord(); _writer.StartRecord(5); _writer.WriteBodyPr(shape.bodyPr); _writer.EndRecord(); } delete shape.spPr.Geometry; if (isUseTmpFill) { shape.spPr.Fill = tmpFill; } delete shape.spPr.WriteXfrm; _writer.EndRecord(); }; this.WriteImage = function (image) { var _writer = this.BinaryFileWriter; _writer.StartRecord(2); image.spPr.WriteXfrm = image.spPr.xfrm; image.spPr.Geometry = image.spPr.geometry; if (image.spPr.Geometry === undefined || image.spPr.Geometry == null) { image.spPr.Geometry = CreateGeometry("rect"); } var _unifill = null; if (image.blipFill instanceof CUniFill) { _unifill = image.blipFill; } else { _unifill = new CUniFill(); _unifill.fill = image.blipFill; } _writer.WriteRecord1(1, _unifill, _writer.WriteUniFill); _writer.WriteRecord1(2, image.spPr, _writer.WriteSpPr); _writer.WriteRecord2(3, image.style, _writer.WriteShapeStyle); delete image.spPr.WriteXfrm; delete image.spPr.Geometry; _writer.EndRecord(); }; this.WriteImageBySrc = function (memory, src, w, h) { this.arrayStackStarts.push(this.BinaryFileWriter.pos); var _writer = this.BinaryFileWriter; _writer.StartRecord(0); _writer.StartRecord(1); _writer.StartRecord(2); var spPr = new CSpPr(); spPr.WriteXfrm = new CXfrm(); spPr.WriteXfrm.offX = 0; spPr.WriteXfrm.offY = 0; spPr.WriteXfrm.extX = w; spPr.WriteXfrm.extY = h; spPr.Geometry = CreateGeometry("rect"); var _unifill = new CUniFill(); _unifill.fill = new CBlipFill(); _unifill.fill.RasterImageId = src; _writer.WriteRecord1(1, _unifill, _writer.WriteUniFill); _writer.WriteRecord1(2, spPr, _writer.WriteSpPr); _writer.EndRecord(); _writer.EndRecord(); _writer.EndRecord(); var oldPos = this.arrayStackStarts[this.arrayStackStarts.length - 1]; memory.WriteBuffer(this.BinaryFileWriter.data, oldPos, this.BinaryFileWriter.pos - oldPos); this.BinaryFileWriter.pos = oldPos; this.arrayStackStarts.splice(this.arrayStackStarts.length - 1, 1); }; this.WriteGroup = function (group, Document, oMapCommentId, oNumIdMap, copyParams) { var _writer = this.BinaryFileWriter; _writer.StartRecord(4); group.spPr.WriteXfrm = group.spPr.xfrm; if (group.spPr.WriteXfrm) { group.spPr.WriteXfrm.chOffX = 0; group.spPr.WriteXfrm.chOffY = 0; group.spPr.WriteXfrm.chExtX = group.spPr.WriteXfrm.extX; group.spPr.WriteXfrm.chExtY = group.spPr.WriteXfrm.extY; } _writer.WriteRecord1(1, group.spPr, _writer.WriteGrpSpPr); delete group.spPr.WriteXfrm; var spTree = group.arrGraphicObjects; var _len = spTree.length; if (0 != _len) { _writer.StartRecord(2); _writer.WriteULong(_len); for (var i = 0; i < _len; i++) { _writer.StartRecord(0); var elem = spTree[i]; if ("undefined" !== typeof(WordShape) && elem instanceof WordShape) { this.WriteShape(elem, Document, oMapCommentId, oNumIdMap, copyParams); } else { if ("undefined" !== typeof(CShape) && elem instanceof CShape) { this.WriteShape2(elem, Document, oMapCommentId, oNumIdMap, copyParams); } else { if (("undefined" !== typeof(WordImage) && elem instanceof WordImage) || ("undefined" !== typeof(CImageShape) && elem instanceof CImageShape)) { this.WriteImage(elem); } else { if (("undefined" !== typeof(WordGroupShapes) && elem instanceof WordGroupShapes) || ("undefined" !== typeof(CGroupShape) && elem instanceof CGroupShape)) { this.WriteGroup(elem, Document, oMapCommentId, oNumIdMap, copyParams); } else { if ("undefined" !== typeof(CChartAsGroup) && elem instanceof CChartAsGroup) { this.BinaryFileWriter.WriteChart(elem); } } } } } _writer.EndRecord(0); } _writer.EndRecord(); } _writer.EndRecord(); }; this.WriteTheme = function (memory, theme) { this.BinaryFileWriter.pos = 0; this.BinaryFileWriter.WriteTheme(theme); memory.WriteBuffer(this.BinaryFileWriter.data, 0, this.BinaryFileWriter.pos); this.BinaryFileWriter.pos = 0; }; } window.global_pptx_content_loader = new CPPTXContentLoader(); window.global_pptx_content_writer = new CPPTXContentWriter();