/* * (c) Copyright Ascensio System SIA 2010-2015 * * 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 * */ "use strict"; var c_dScalePPTXSizes = 36000; function IsHiddenObj(object) { if (!object) { return false; } var _uniProps = object.nvSpPr; if (!_uniProps) { _uniProps = object.nvPicPr; } if (!_uniProps) { _uniProps = object.nvGrpSpPr; } if (!_uniProps) { return false; } if (_uniProps.cNvPr && _uniProps.cNvPr.isHidden) { return true; } return false; } function FileStream(data, size) { this.obj = null; this.data = data; this.size = size; this.pos = 0; this.cur = 0; this.Seek = function (_pos) { if (_pos > this.size) { return 1; } this.pos = _pos; return 0; }; this.Seek2 = function (_cur) { if (_cur > this.size) { return 1; } this.cur = _cur; return 0; }; this.Skip = function (_skip) { if (_skip < 0) { return 1; } return this.Seek(this.pos + _skip); }; this.Skip2 = function (_skip) { if (_skip < 0) { return 1; } return this.Seek2(this.cur + _skip); }; this.GetUChar = function () { if (this.cur >= this.size) { return 0; } return this.data[this.cur++]; }; this.GetBool = function () { if (this.cur >= this.size) { return 0; } return (this.data[this.cur++] == 1) ? true : false; }; this.GetUShort = function () { if (this.cur + 1 >= this.size) { return 0; } return (this.data[this.cur++] | this.data[this.cur++] << 8); }; this.GetULong = function () { if (this.cur + 3 >= this.size) { return 0; } var r = (this.data[this.cur++] | this.data[this.cur++] << 8 | this.data[this.cur++] << 16 | this.data[this.cur++] << 24); if (r < 0) { r += (4294967295 + 1); } return r; }; this.GetLong = function () { if (this.cur + 3 >= this.size) { return 0; } return (this.data[this.cur++] | this.data[this.cur++] << 8 | this.data[this.cur++] << 16 | this.data[this.cur++] << 24); }; this.GetString = function (len) { len *= 2; if (this.cur + len > this.size) { return ""; } var t = ""; for (var i = 0; i < len; i += 2) { var _c = this.data[this.cur + i + 1] << 8 | this.data[this.cur + i]; if (_c == 0) { break; } t += String.fromCharCode(_c); } this.cur += len; return t; }; this.GetString1 = function (len) { if (this.cur + len > this.size) { return ""; } var t = ""; for (var i = 0; i < len; i++) { var _c = this.data[this.cur + i]; if (_c == 0) { break; } t += String.fromCharCode(_c); } this.cur += len; return t; }; this.GetString2 = function () { var len = this.GetULong(); return this.GetString(len); }; this.GetString2A = function () { var len = this.GetULong(); return this.GetString1(len); }; this.EnterFrame = function (count) { if (this.pos >= this.size || this.size - this.pos < count) { return 1; } this.cur = this.pos; this.pos += count; return 0; }; this.SkipRecord = function () { var _len = this.GetULong(); this.Skip2(_len); }; this.GetPercentage = function () { var s = this.GetString2(); var _len = s.length; if (_len == 0) { return null; } var _ret = null; if ((_len - 1) == s.indexOf("%")) { s.substring(0, _len - 1); _ret = parseFloat(s); if (isNaN(_ret)) { _ret = null; } } else { _ret = parseFloat(s); if (isNaN(_ret)) { _ret = null; } else { _ret /= 1000; } } return _ret; }; } var g_nodeAttributeStart = 250; var g_nodeAttributeEnd = 251; function CBuilderImages(blip_fill, full_url) { this.Url = full_url; this.BlipFill = blip_fill; } CBuilderImages.prototype = { SetUrl: function (url) { this.BlipFill.RasterImageId = url; } }; function BinaryPPTYLoader() { this.stream = null; this.presentation = null; this.TempGroupObject = null; this.TempMainObject = null; this.IsThemeLoader = false; this.Api = null; this.map_table_styles = {}; this.NextTableStyleId = 0; this.ImageMapChecker = null; this.IsUseFullSrc = false; this.RebuildImages = []; this.textBodyTextFit = []; this.Start_UseFullUrl = function () { this.IsUseFullUrl = true; }; this.End_UseFullUrl = function () { var _result = this.RebuildImages; this.IsUseFullUrl = false; this.RebuildImages = []; return _result; }; this.Check_TextFit = function () { for (var i = 0; i < this.textBodyTextFit.length; ++i) { this.textBodyTextFit[i].checkTextFit(); } this.textBodyTextFit.length = 0; }; this.Load = function (base64_ppty, presentation) { this.presentation = presentation; this.ImageMapChecker = {}; var srcLen = base64_ppty.length; var nWritten = 0; var index = 0; var read_main_prop = ""; while (true) { var _c = base64_ppty.charCodeAt(index); if (_c == ";".charCodeAt(0)) { break; } read_main_prop += String.fromCharCode(_c); index++; } index++; if ("PPTY" != read_main_prop) { return false; } read_main_prop = ""; while (true) { var _c = base64_ppty.charCodeAt(index); if (_c == ";".charCodeAt(0)) { break; } read_main_prop += String.fromCharCode(_c); index++; } index++; var _version_num_str = read_main_prop.substring(1); read_main_prop = ""; while (true) { var _c = base64_ppty.charCodeAt(index); if (_c == ";".charCodeAt(0)) { break; } read_main_prop += String.fromCharCode(_c); index++; } index++; var dstLen_str = read_main_prop; var dstLen = parseInt(dstLen_str); var pointer = g_memory.Alloc(dstLen); this.stream = new FileStream(pointer.data, dstLen); this.stream.obj = pointer.obj; var dstPx = this.stream.data; if (window.chrome) { while (index < srcLen) { var dwCurr = 0; var i; var nBits = 0; for (i = 0; i < 4; i++) { if (index >= srcLen) { break; } var nCh = DecodeBase64Char(base64_ppty.charCodeAt(index++)); if (nCh == -1) { i--; continue; } dwCurr <<= 6; dwCurr |= nCh; nBits += 6; } dwCurr <<= 24 - nBits; for (i = 0; i < nBits / 8; i++) { dstPx[nWritten++] = ((dwCurr & 16711680) >>> 16); dwCurr <<= 8; } } } else { var p = b64_decode; while (index < srcLen) { var dwCurr = 0; var i; var nBits = 0; for (i = 0; i < 4; i++) { if (index >= srcLen) { break; } var nCh = p[base64_ppty.charCodeAt(index++)]; if (nCh == undefined) { i--; continue; } dwCurr <<= 6; dwCurr |= nCh; nBits += 6; } dwCurr <<= 24 - nBits; for (i = 0; i < nBits / 8; i++) { dstPx[nWritten++] = ((dwCurr & 16711680) >>> 16); dwCurr <<= 8; } } } this.presentation.ImageMap = {}; this.presentation.Fonts = []; this.presentation.EmbeddedFonts = []; if (presentation.globalTableStyles) { this.NextTableStyleId = this.presentation.globalTableStyles.length; } this.LoadDocument(); this.ImageMapChecker = null; }; this.Load2 = function (data, presentation) { this.presentation = presentation; this.ImageMapChecker = {}; this.stream = new FileStream(data, data.length); this.stream.obj = null; this.presentation.ImageMap = {}; this.presentation.Fonts = []; this.presentation.EmbeddedFonts = []; if (presentation.globalTableStyles) { this.NextTableStyleId = this.presentation.globalTableStyles.length; } this.LoadDocument(); this.ImageMapChecker = null; }; this.LoadDocument = function () { var _main_tables = {}; var s = this.stream; var err = 0; err = s.EnterFrame(5 * 30); if (err != 0) { return err; } for (var i = 0; i < 30; i++) { var _type = s.GetUChar(); if (0 == _type) { break; } _main_tables["" + _type] = s.GetULong(); } if (undefined != _main_tables["255"]) { s.Seek2(_main_tables["255"]); var _sign = s.GetString1(4); var _ver = s.GetULong(); } if (!this.IsThemeLoader) { if (undefined != _main_tables["1"]) { s.Seek2(_main_tables["1"]); this.presentation.App = new CApp(); this.presentation.App.fromStream(s); } if (undefined != _main_tables["2"]) { s.Seek2(_main_tables["2"]); this.presentation.Core = new CCore(); this.presentation.Core.fromStream(s); } } if (undefined != _main_tables["3"]) { s.Seek2(_main_tables["3"]); this.presentation.pres = new CPres(); var pres = this.presentation.pres; pres.fromStream(s, this); this.presentation.defaultTextStyle = pres.defaultTextStyle; this.presentation.Width = pres.SldSz.cx / c_dScalePPTXSizes; this.presentation.Height = pres.SldSz.cy / c_dScalePPTXSizes; } if (!this.IsThemeLoader) { if (undefined != _main_tables["4"]) { s.Seek2(_main_tables["4"]); this.presentation.ViewProps = this.ReadViewProps(); } if (undefined != _main_tables["5"]) { s.Seek2(_main_tables["5"]); this.presentation.VmlDrawing = this.ReadVmlDrawing(); } if (undefined != _main_tables["6"]) { s.Seek2(_main_tables["6"]); this.presentation.TableStyles = this.ReadTableStyles(); } } if (undefined != _main_tables["20"]) { s.Seek2(_main_tables["20"]); var _themes_count = s.GetULong(); for (var i = 0; i < _themes_count; i++) { this.presentation.themes[i] = this.ReadTheme(); } } if (undefined != _main_tables["22"]) { s.Seek2(_main_tables["22"]); var _sm_count = s.GetULong(); for (var i = 0; i < _sm_count; i++) { this.presentation.slideMasters[i] = this.ReadSlideMaster(); this.presentation.slideMasters[i].setSlideSize(this.presentation.Width, this.presentation.Height); } } if (undefined != _main_tables["23"]) { s.Seek2(_main_tables["23"]); var _sl_count = s.GetULong(); for (var i = 0; i < _sl_count; i++) { this.presentation.slideLayouts[i] = this.ReadSlideLayout(); this.presentation.slideLayouts[i].setSlideSize(this.presentation.Width, this.presentation.Height); } } if (!this.IsThemeLoader) { if (undefined != _main_tables["24"]) { s.Seek2(_main_tables["24"]); var _s_count = s.GetULong(); for (var i = 0; i < _s_count; i++) { this.presentation.insertSlide(i, this.ReadSlide(i)); this.presentation.Slides[i].setSlideSize(this.presentation.Width, this.presentation.Height); } } if (undefined != _main_tables["25"]) { s.Seek2(_main_tables["25"]); var _nm_count = s.GetULong(); for (var i = 0; i < _nm_count; i++) { this.presentation.notesMasters[i] = this.ReadNoteMaster(); } } if (undefined != _main_tables["26"]) { s.Seek2(_main_tables["26"]); var _n_count = s.GetULong(); for (var i = 0; i < _n_count; i++) { this.presentation.notes[i] = this.ReadNote(); } } } if (null == this.ImageMapChecker) { if (undefined != _main_tables["42"]) { s.Seek2(_main_tables["42"]); var _type = s.GetUChar(); var _len = s.GetULong(); s.Skip2(1); var _cur_ind = 0; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } var image_id = s.GetString2(); if (this.IsThemeLoader) { image_id = "theme" + (this.Api.ThemeLoader.CurrentLoadThemeIndex + 1) + "/media/" + image_id; } this.presentation.ImageMap[_cur_ind++] = image_id; } } } else { var _cur_ind = 0; for (var k in this.ImageMapChecker) { if (this.IsThemeLoader) { image_id = "theme" + (this.Api.ThemeLoader.CurrentLoadThemeIndex + 1) + "/media/" + k; } this.presentation.ImageMap[_cur_ind++] = k; } } if (undefined != _main_tables["43"]) { s.Seek2(_main_tables["43"]); var _type = s.GetUChar(); var _len = s.GetULong(); s.Skip2(1); var _cur_ind = 0; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } var f_name = s.GetString2(); this.presentation.Fonts[this.presentation.Fonts.length] = new CFont(f_name, 0, "", 0, 15); } } if (undefined != _main_tables["41"]) { s.Seek2(_main_tables["41"]); s.Skip2(5); var _count = s.GetULong(); for (var i = 0; i < _count; i++) { var _master_type = s.GetUChar(); this.ReadMasterInfo(i); } } if (undefined != _main_tables["44"] && this.Api.isUseEmbeddedCutFonts) { var _embedded_fonts = []; s.Seek2(_main_tables["44"]); s.Skip2(5); var _count = s.GetULong(); for (var i = 0; i < _count; i++) { var _at = s.GetUChar(); if (_at != g_nodeAttributeStart) { break; } var _f_i = {}; while (true) { _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: _f_i.Name = s.GetString2(); break; case 1: _f_i.Style = s.GetULong(); break; case 2: _f_i.IsCut = s.GetBool(); break; case 3: _f_i.IndexCut = s.GetULong(); break; default: break; } } _embedded_fonts.push(_f_i); } var font_cuts = this.Api.FontLoader.embedded_cut_manager; font_cuts.Url = this.Api.DocumentUrl + "fonts/fonts.js"; font_cuts.init_cut_fonts(_embedded_fonts); font_cuts.bIsCutFontsUse = true; } if (!this.IsThemeLoader) { if (undefined != _main_tables["40"]) { s.Seek2(_main_tables["40"]); s.Skip2(6); var _slideNum = 0; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } var indexL = s.GetULong(); this.presentation.Slides[_slideNum].setLayout(this.presentation.slideLayouts[indexL]); this.presentation.Slides[_slideNum].Master = this.presentation.slideLayouts[indexL].Master; _slideNum++; } } } if (this.Api != null && !this.IsThemeLoader) { if (this.presentation.themes.length == 0) { this.presentation.themes[0] = GenerateDefaultTheme(this.presentation); } if (this.presentation.slideMasters.length == 0) { this.presentation.slideMasters[0] = GenerateDefaultMasterSlide(this.presentation.themes[0]); this.presentation.slideLayouts[0] = this.presentation.slideMasters[0].sldLayoutLst[0]; } if (this.presentation.Slides.length == 0) { this.presentation.Slides[0] = GenerateDefaultSlide(this.presentation.slideLayouts[0]); } } else { if (this.Api != null && this.IsThemeLoader) { var theme_loader = this.Api.ThemeLoader; var _info = theme_loader.themes_info_editor[theme_loader.CurrentLoadThemeIndex]; _info.ImageMap = this.presentation.ImageMap; _info.FontMap = this.presentation.Fonts; } } }; this.ReadMasterInfo = function (indexMaster) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; var master = this.presentation.slideMasters[indexMaster]; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: var indexTh = s.GetULong(); master.setTheme(this.presentation.themes[indexTh]); master.ThemeIndex = -indexTh - 1; break; case 1: s.GetString2A(); break; default: break; } } var _lay_count = s.GetULong(); for (var i = 0; i < _lay_count; i++) { s.Skip2(6); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: var indexL = s.GetULong(); master.addToSldLayoutLstToPos(master.sldLayoutLst.length, this.presentation.slideLayouts[indexL]); this.presentation.slideLayouts[indexL].setMaster(master); break; case 1: s.GetString2A(); break; default: break; } } } s.Seek2(_end_rec); if (this.Api != null && this.IsThemeLoader) { var theme_loader = this.Api.ThemeLoader; var theme_load_info = new CThemeLoadInfo(); theme_load_info.Master = master; theme_load_info.Theme = master.Theme; var _lay_cnt = master.sldLayoutLst.length; for (var i = 0; i < _lay_cnt; i++) { theme_load_info.Layouts[i] = master.sldLayoutLst[i]; } theme_loader.themes_info_editor[theme_loader.CurrentLoadThemeIndex] = theme_load_info; } }; this.ReadViewProps = function () { return null; }; this.ReadVmlDrawing = function () { return null; }; this.ReadTableStyles = function () { var s = this.stream; var _type = s.GetUChar(); var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; s.Skip2(1); var _old_default = this.presentation.DefaultTableStyleId; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: var _def = s.GetString2(); this.presentation.DefaultTableStyleId = _def; break; default: break; } } var _type = s.GetUChar(); s.Skip2(4); while (s.cur < _end_rec) { s.Skip2(1); this.ReadTableStyle(); } if (!this.presentation.globalTableStyles.Style[this.presentation.DefaultTableStyleId]) { this.presentation.DefaultTableStyleId = _old_default; } s.Seek2(_end_rec); }; this.ReadTableStyle = function () { var s = this.stream; var _style = new CStyle("", null, null, styletype_Table); var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: var _id = s.GetString2(); if (isRealObject(this.presentation.TableStylesIdMap)) { this.presentation.TableStylesIdMap[_style.Id] = true; } this.map_table_styles[_id] = _style; break; case 1: _style.Name = s.GetString2(); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: var _end_rec2 = s.cur + s.GetLong() + 4; while (s.cur < _end_rec2) { var _at2 = s.GetUChar(); switch (_at2) { case 0: var _end_rec3 = s.cur + s.GetLong() + 4; while (s.cur < _end_rec3) { var _at3 = s.GetUChar(); switch (_at3) { case 0: var _unifill = this.ReadUniFill(); if (_unifill.fill !== undefined && _unifill.fill != null) { if (undefined === _style.TablePr.Shd || null == _style.TablePr.Shd) { _style.TablePr.Shd = new CDocumentShd(); _style.TablePr.Shd.Value = shd_Clear; } _style.TablePr.Shd.Unifill = _unifill; } default: break; } } break; case 1: if (undefined === _style.TablePr.Shd || null == _style.TablePr.Shd) { _style.TablePr.Shd = new CDocumentShd(); _style.TablePr.Shd.Value = shd_Clear; } _style.TablePr.Shd.FillRef = this.ReadStyleRef(); break; default: break; } } s.Seek2(_end_rec2); break; case 1: _style.TableWholeTable = this.ReadTableStylePart(); break; case 2: _style.TableBand1Horz = this.ReadTableStylePart(); break; case 3: _style.TableBand2Horz = this.ReadTableStylePart(); break; case 4: _style.TableBand1Vert = this.ReadTableStylePart(); break; case 5: _style.TableBand2Vert = this.ReadTableStylePart(); break; case 6: _style.TableLastCol = this.ReadTableStylePart(); break; case 7: _style.TableFirstCol = this.ReadTableStylePart(); break; case 8: _style.TableFirstRow = this.ReadTableStylePart(); break; case 9: _style.TableLastRow = this.ReadTableStylePart(); break; case 10: _style.TableBRCell = this.ReadTableStylePart(); break; case 11: _style.TableBLCell = this.ReadTableStylePart(); break; case 12: _style.TableTRCell = this.ReadTableStylePart(); break; case 13: _style.TableTLCell = this.ReadTableStylePart(); break; default: break; } } s.Seek2(_end_rec); if (_style.TableWholeTable.TablePr.TableBorders.InsideH) { _style.TablePr.TableBorders.InsideH = _style.TableWholeTable.TablePr.TableBorders.InsideH; delete _style.TableWholeTable.TablePr.TableBorders.InsideH; } if (_style.TableWholeTable.TablePr.TableBorders.InsideV) { _style.TablePr.TableBorders.InsideV = _style.TableWholeTable.TablePr.TableBorders.InsideV; delete _style.TableWholeTable.TablePr.TableBorders.InsideV; } if (_style.TableWholeTable.TableCellPr.TableCellBorders.Top) { _style.TablePr.TableBorders.Top = _style.TableWholeTable.TableCellPr.TableCellBorders.Top; delete _style.TableWholeTable.TableCellPr.TableCellBorders.Top; } if (_style.TableWholeTable.TableCellPr.TableCellBorders.Bottom) { _style.TablePr.TableBorders.Bottom = _style.TableWholeTable.TableCellPr.TableCellBorders.Bottom; delete _style.TableWholeTable.TableCellPr.TableCellBorders.Bottom; } if (_style.TableWholeTable.TableCellPr.TableCellBorders.Left) { _style.TablePr.TableBorders.Left = _style.TableWholeTable.TableCellPr.TableCellBorders.Left; delete _style.TableWholeTable.TableCellPr.TableCellBorders.Left; } if (_style.TableWholeTable.TableCellPr.TableCellBorders.Right) { _style.TablePr.TableBorders.Right = _style.TableWholeTable.TableCellPr.TableCellBorders.Right; delete _style.TableWholeTable.TableCellPr.TableCellBorders.Right; } if (this.presentation.globalTableStyles) { this.presentation.globalTableStyles.Add(_style); } }; this.ReadTableStylePart = function () { var s = this.stream; var _part = new CTableStylePr(); var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: var _end_rec2 = s.cur + s.GetLong() + 4; s.Skip2(1); var _i, _b; while (true) { var _at2 = s.GetUChar(); if (_at2 == g_nodeAttributeEnd) { break; } switch (_at2) { case 0: _i = s.GetUChar(); break; case 1: _b = s.GetUChar(); break; default: break; } } if (_i === 0) { _part.TextPr.Italic = true; } else { if (_i === 1) { _part.TextPr.Italic = false; } } if (_b === 0) { _part.TextPr.Bold = true; } else { if (_b === 1) { _part.TextPr.Bold = false; } } while (s.cur < _end_rec2) { var _at3 = s.GetUChar(); switch (_at3) { case 0: _part.TextPr.FontRef = this.ReadFontRef(); break; case 1: var _Unicolor = this.ReadUniColor(); if (_Unicolor.color) { _part.TextPr.Unifill = new CUniFill(); _part.TextPr.Unifill.fill = new CSolidFill(); _part.TextPr.Unifill.fill.color = _Unicolor; } break; default: break; } } s.Seek2(_end_rec2); break; case 1: var _end_rec2 = s.cur + s.GetLong() + 4; while (s.cur < _end_rec2) { var _at2 = s.GetUChar(); switch (_at2) { case 0: this.ReadTcBdr(_part); break; case 1: if (undefined === _part.TableCellPr.Shd || null == _part.TableCellPr.Shd) { _part.TableCellPr.Shd = new CDocumentShd(); _part.TableCellPr.Shd.Value = shd_Clear; } _part.TableCellPr.Shd.FillRef = this.ReadStyleRef(); break; case 2: var _end_rec3 = s.cur + s.GetLong() + 4; while (s.cur < _end_rec3) { var _at3 = s.GetUChar(); switch (_at3) { case 0: var _unifill = this.ReadUniFill(); if (_unifill.fill !== undefined && _unifill.fill != null) { if (undefined === _part.TableCellPr.Shd || null == _part.TableCellPr.Shd) { _part.TableCellPr.Shd = new CDocumentShd(); _part.TableCellPr.Shd.Value = shd_Clear; } _part.TableCellPr.Shd.Unifill = _unifill; } break; default: break; } } break; case 3: s.SkipRecord(); break; default: break; } } s.Seek2(_end_rec2); break; default: break; } } s.Seek2(_end_rec); return _part; }; this.ReadTcBdr = function (_part) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: _part.TableCellPr.TableCellBorders.Left = new CDocumentBorder(); this.ReadTableBorderLineStyle(_part.TableCellPr.TableCellBorders.Left); break; case 1: _part.TableCellPr.TableCellBorders.Right = new CDocumentBorder(); this.ReadTableBorderLineStyle(_part.TableCellPr.TableCellBorders.Right); break; case 2: _part.TableCellPr.TableCellBorders.Top = new CDocumentBorder(); this.ReadTableBorderLineStyle(_part.TableCellPr.TableCellBorders.Top); break; case 3: _part.TableCellPr.TableCellBorders.Bottom = new CDocumentBorder(); this.ReadTableBorderLineStyle(_part.TableCellPr.TableCellBorders.Bottom); break; case 4: _part.TablePr.TableBorders.InsideH = new CDocumentBorder(); this.ReadTableBorderLineStyle(_part.TablePr.TableBorders.InsideH); break; case 5: _part.TablePr.TableBorders.InsideV = new CDocumentBorder(); this.ReadTableBorderLineStyle(_part.TablePr.TableBorders.InsideV); break; case 6: case 7: s.SkipRecord(); default: break; } } s.Seek2(_end_rec); return _part; }; this.ReadTableBorderLineStyle = function (_border) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: var ln = this.ReadLn(); _border.Unifill = ln.Fill; _border.Size = (ln.w == null) ? 12700 : ((ln.w) >> 0); _border.Size /= 36000; _border.Value = border_Single; break; case 1: _border.LineRef = this.ReadStyleRef(); _border.Value = border_Single; break; default: break; } } s.Seek2(_end_rec); }; this.ReadUniColor = function () { var s = this.stream; var _len = s.GetULong(); var read_start = s.cur; var read_end = read_start + _len; var uni_color = new CUniColor(); if (s.cur < read_end) { var _type = s.GetUChar(); var _e = s.cur + s.GetULong() + 4; switch (_type) { case COLOR_TYPE_PRST: s.Skip2(2); uni_color.setColor(new CPrstColor()); uni_color.color.setId(s.GetString2()); s.Skip2(1); if (s.cur < _e) { if (0 == s.GetUChar()) { uni_color.setMods(this.ReadColorMods()); } } break; case COLOR_TYPE_SCHEME: s.Skip2(2); uni_color.setColor(new CSchemeColor()); uni_color.color.setId(s.GetUChar()); s.Skip2(1); if (s.cur < _e) { if (0 == s.GetUChar()) { uni_color.setMods(this.ReadColorMods()); } } break; case COLOR_TYPE_SRGB: var r, g, b; s.Skip2(1); uni_color.setColor(new CRGBColor()); s.Skip2(1); r = s.GetUChar(); s.Skip2(1); g = s.GetUChar(); s.Skip2(1); b = s.GetUChar(); s.Skip2(1); uni_color.color.setColor(r, g, b); if (s.cur < _e) { if (0 == s.GetUChar()) { uni_color.setMods(this.ReadColorMods()); } } break; case COLOR_TYPE_SYS: s.Skip2(1); uni_color.setColor(new CSysColor()); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: uni_color.color.setId(s.GetString2()); break; case 1: uni_color.color.setR(s.GetUChar()); break; case 2: uni_color.color.setG(s.GetUChar()); break; case 3: uni_color.color.setB(s.GetUChar()); break; default: break; } } if (s.cur < _e) { if (0 == s.GetUChar()) { uni_color.setMods(this.ReadColorMods()); } } break; } } s.Seek2(read_end); return uni_color; }; this.ReadColorMods = function () { var ret = new CColorModifiers(); var _mods = this.ReadColorModifiers(); for (var i = 0; i < _mods.length; ++i) { ret.addMod(_mods[i]); } return ret; }; this.ReadColorModifiers = function () { var s = this.stream; var _start = s.cur; var _end = _start + s.GetULong() + 4; var _ret = null; var _count = s.GetULong(); for (var i = 0; i < _count; i++) { if (s.cur > _end) { break; } s.Skip2(1); var _s1 = s.cur; var _e1 = _s1 + s.GetULong() + 4; if (_s1 < _e1) { s.Skip2(1); if (null == _ret) { _ret = []; } var _mod = new CColorMod(); _ret[_ret.length] = _mod; while (true) { var _type = s.GetUChar(); if (0 == _type) { _mod.setName(s.GetString2()); var _find = _mod.name.indexOf(":"); if (_find >= 0 && _find < (_mod.name.length - 1)) { _mod.setName(_mod.name.substring(_find + 1)); } } else { if (1 == _type) { _mod.setVal(s.GetLong()); } else { if (g_nodeAttributeEnd == _type) { break; } else { break; } } } } } s.Seek2(_e1); } s.Seek2(_end); return _ret; }; this.ReadRect = function (bIsMain) { var _ret = {}; var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: _ret.l = s.GetPercentage(); break; case 1: _ret.t = s.GetPercentage(); break; case 2: _ret.r = s.GetPercentage(); break; case 3: _ret.b = s.GetPercentage(); break; default: break; } } s.Seek2(_end_rec); if (null == _ret.l && null == _ret.t && null == _ret.r && null == _ret.b) { return null; } if (_ret.l == null) { _ret.l = 0; } if (_ret.t == null) { _ret.t = 0; } if (_ret.r == null) { _ret.r = 0; } if (_ret.b == null) { _ret.b = 0; } if (!bIsMain) { var _absW = Math.abs(_ret.l) + Math.abs(_ret.r) + 100; var _absH = Math.abs(_ret.t) + Math.abs(_ret.b) + 100; _ret.l = -100 * _ret.l / _absW; _ret.t = -100 * _ret.t / _absH; _ret.r = -100 * _ret.r / _absW; _ret.b = -100 * _ret.b / _absH; } _ret.r = 100 - _ret.r; _ret.b = 100 - _ret.b; if (_ret.l > _ret.r) { var tmp = _ret.l; _ret.l = _ret.r; _ret.r = tmp; } if (_ret.t > _ret.b) { var tmp = _ret.t; _ret.t = _ret.b; _ret.b = tmp; } var ret = new CSrcRect(); ret.setLTRB(_ret.l, _ret.t, _ret.r, _ret.b); return ret; }; this.ReadGradLin = function () { var _lin = new GradLin(); var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: _lin.setAngle(s.GetLong()); break; case 1: _lin.setScale(s.GetBool()); default: break; } } s.Seek2(_end_rec); return _lin; }; this.ReadGradPath = function () { var _path = new GradPath(); var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: _path.setPath(s.GetUChar()); break; default: break; } } s.Seek2(_end_rec); return _path; }; this.ReadUniFill = function () { var s = this.stream; var read_start = s.cur; var read_end = read_start + s.GetULong() + 4; var uni_fill = new CUniFill(); if (s.cur < read_end) { var _type = s.GetUChar(); var _e = s.cur + s.GetULong() + 4; switch (_type) { case FILL_TYPE_BLIP: s.Skip2(1); uni_fill.setFill(new CBlipFill()); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: s.Skip2(4); break; case 1: s.Skip2(1); break; default: break; } } while (s.cur < _e) { var rec = s.GetUChar(); switch (rec) { case 0: var _s2 = s.cur; var _e2 = _s2 + s.GetLong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (g_nodeAttributeEnd == _at) { break; } if (_at == 0) { s.Skip2(1); } } while (s.cur < _e2) { var _t = s.GetUChar(); switch (_t) { case 0: case 1: s.Skip2(4); break; case 10: case 11: s.GetString2(); break; case 2: s.Skip2(4); var count_effects = s.GetLong(); for (var _eff = 0; _eff < count_effects; ++_eff) { s.Skip2(1); var __rec_len = s.GetLong(); if (0 == __rec_len) { continue; } var recE = s.GetUChar(); if (recE == 21) { var _e22 = s.cur + s.GetLong() + 4; s.Skip2(1); while (true) { var _at222 = s.GetUChar(); if (g_nodeAttributeEnd == _at222) { break; } if (_at222 == 0) { uni_fill.setTransparent((255 * s.GetLong() / 100000) >> 0); } } s.Seek2(_e22); } else { s.SkipRecord(); } } break; case 3: s.Skip2(6); uni_fill.fill.setRasterImageId(s.GetString2()); var _s = uni_fill.fill.RasterImageId; var indS = _s.lastIndexOf("emf"); if (indS == -1) { indS = _s.lastIndexOf("wmf"); } if (indS != -1 && (indS == (_s.length - 3))) { _s = _s.substring(0, indS); _s += "svg"; uni_fill.fill.setRasterImageId(_s); } if (this.IsThemeLoader) { uni_fill.fill.setRasterImageId("theme" + (this.Api.ThemeLoader.CurrentLoadThemeIndex + 1) + "/media/" + uni_fill.fill.RasterImageId); } if (this.ImageMapChecker != null) { this.ImageMapChecker[uni_fill.fill.RasterImageId] = true; } if (this.IsUseFullUrl) { this.RebuildImages.push(new CBuilderImages(uni_fill.fill, uni_fill.fill.RasterImageId)); } s.Skip2(1); break; default: s.SkipRecord(); break; } } s.Seek2(_e2); break; case 1: uni_fill.fill.setSrcRect(this.ReadRect(true)); break; case 2: uni_fill.fill.setTile(true); s.SkipRecord(); break; case 3: var _e2 = s.cur + s.GetLong() + 4; while (s.cur < _e2) { var _t = s.GetUChar(); switch (_t) { case 0: var _srcRect = this.ReadRect(false); if (_srcRect != null) { uni_fill.fill.setSrcRect(_srcRect); } break; default: s.SkipRecord(); break; } } s.Seek2(_e2); break; default: var _len = s.GetULong(); s.Skip2(_len); } } break; case FILL_TYPE_GRAD: s.Skip2(1); uni_fill.setFill(new CGradFill()); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: s.Skip2(1); break; case 1: s.Skip2(1); break; default: break; } } while (s.cur < _e) { var rec = s.GetUChar(); switch (rec) { case 0: var _s1 = s.cur; var _e1 = _s1 + s.GetULong() + 4; var _count = s.GetULong(); var colors_ = []; for (var i = 0; i < _count; i++) { if (s.cur >= _e1) { break; } s.Skip2(1); s.Skip2(4); var _gs = new CGs(); s.Skip2(1); s.Skip2(1); _gs.pos = s.GetLong(); s.Skip2(1); s.Skip2(1); _gs.color = this.ReadUniColor(); colors_[colors_.length] = _gs; } s.Seek2(_e1); colors_.sort(function (a, b) { return a.pos - b.pos; }); for (var z = 0; z < colors_.length; ++z) { uni_fill.fill.addColor(colors_[z]); } break; case 1: uni_fill.fill.setLin(this.ReadGradLin()); break; case 2: uni_fill.fill.setPath(this.ReadGradPath()); break; case 3: s.SkipRecord(); break; default: var _len = s.GetULong(); s.Skip2(_len); } if (null != uni_fill.fill.lin && null != uni_fill.fill.path) { uni_fill.fill.setPath(null); } } break; case FILL_TYPE_PATT: uni_fill.setFill(new CPattFill()); s.Skip2(1); while (true) { var _atPF = s.GetUChar(); if (_atPF == g_nodeAttributeEnd) { break; } switch (_atPF) { case 0: uni_fill.fill.setFType(s.GetUChar()); break; default: break; } } while (s.cur < _e) { var rec = s.GetUChar(); switch (rec) { case 0: uni_fill.fill.setFgColor(this.ReadUniColor()); break; case 1: uni_fill.fill.setBgColor(this.ReadUniColor()); break; default: s.SkipRecord(); } } break; case FILL_TYPE_SOLID: s.Skip2(1); uni_fill.setFill(new CSolidFill()); uni_fill.fill.setColor(this.ReadUniColor()); if (uni_fill.fill && uni_fill.fill.color && uni_fill.fill.color.Mods && uni_fill.fill.color.Mods.Mods) { var mods = uni_fill.fill.color.Mods.Mods; var _len = mods.length; for (var i = 0; i < _len; i++) { if (mods[i].name == "alpha") { uni_fill.setTransparent((255 * mods[i].val / 100000) >> 0); uni_fill.fill.color.Mods.removeMod(i); break; } } } else { uni_fill.fill.color.setMods(new CColorModifiers()); } break; case FILL_TYPE_NOFILL: uni_fill.setFill(new CNoFill()); break; } } s.Seek2(read_end); return uni_fill; }; this.ReadExtraColorScheme = function () { var extra = new ExtraClrScheme(); var s = this.stream; var _e = s.cur + s.GetULong() + 4; while (s.cur < _e) { var _rec = s.GetUChar(); switch (_rec) { case 0: extra.setClrScheme(new ClrScheme()); this.ReadClrScheme(extra.clrScheme); break; case 1: extra.setClrMap(new ClrMap()); this.ReadClrMap(extra.clrMap); break; default: break; } } s.Seek2(_e); return extra; }; this.ReadClrScheme = function (clrscheme) { var s = this.stream; var _e = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { clrscheme.setName(s.GetString2()); } } while (s.cur < _e) { var _rec = s.GetUChar(); clrscheme.addColor(_rec, this.ReadUniColor()); } s.Seek2(_e); }; this.ReadClrMap = function (clrmap) { var s = this.stream; var _e = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } clrmap.setClr(_at, s.GetUChar()); } s.Seek2(_e); }; this.ReadClrOverride = function () { var s = this.stream; var _e = s.cur + s.GetULong() + 4; var clr_map = null; if (s.cur < _e) { clr_map = new ClrMap(); s.Skip2(1); this.ReadClrMap(clr_map); } s.Seek2(_e); return clr_map; }; this.ReadLn = function () { var ln = new CLn(); var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: ln.setAlgn(s.GetUChar()); break; case 1: ln.setCap(s.GetUChar()); break; case 2: ln.setCmpd(s.GetUChar()); break; case 3: ln.setW(s.GetLong()); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: ln.setFill(this.ReadUniFill()); break; case 1: s.SkipRecord(); break; case 2: ln.setJoin(this.ReadLineJoin()); break; case 3: ln.setHeadEnd(this.ReadLineEnd()); break; case 4: ln.setTailEnd(this.ReadLineEnd()); break; default: break; } } s.Seek2(_end_rec); return ln; }; this.ReadLineEnd = function () { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; var endL = new EndArrow(); s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: endL.setType(s.GetUChar()); break; case 1: endL.setW(s.GetUChar()); break; case 2: endL.setLen(s.GetUChar()); break; default: break; } } s.Seek2(_end_rec); return endL; }; this.ReadLineJoin = function () { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; var join = new LineJoin(); s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: join.setType(s.GetLong()); break; case 1: join.setLimit(s.GetLong()); break; default: break; } } s.Seek2(_end_rec); return join; }; this.ReadSlideMaster = function () { var master = new MasterSlide(this.presentation, null); this.TempMainObject = master; var s = this.stream; s.Skip2(1); var end = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: master.preserve = s.GetBool(); break; default: break; } } while (s.cur < end) { var _rec = s.GetUChar(); switch (_rec) { case 0: var cSld = new CSld(); this.ReadCSld(cSld); for (var i = 0; i < cSld.spTree.length; ++i) { master.shapeAdd(i, cSld.spTree[i]); } if (cSld.Bg) { master.changeBackground(cSld.Bg); } master.setCSldName(cSld.name); break; case 1: var clrMap = new ClrMap(); this.ReadClrMap(clrMap); master.setClMapOverride(clrMap); break; case 2: case 3: case 4: var _len = s.GetULong(); s.Skip2(_len); break; case 5: master.hf = this.ReadHF(); break; case 6: master.setTxStyles(this.ReadTxStyles()); break; default: break; } } s.Seek2(end); this.TempMainObject = null; return master; }; this.ReadTxStyles = function () { var txStyles = new CTextStyles(); var s = this.stream; var end = s.cur + s.GetULong() + 4; while (s.cur < end) { var _rec = s.GetUChar(); switch (_rec) { case 0: txStyles.titleStyle = this.ReadTextListStyle(); break; case 1: txStyles.bodyStyle = this.ReadTextListStyle(); break; case 2: txStyles.otherStyle = this.ReadTextListStyle(); break; default: break; } } s.Seek2(end); return txStyles; }; this.ReadSlideLayout = function () { var layout = new SlideLayout(null); this.TempMainObject = layout; var s = this.stream; s.Skip2(1); var end = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: layout.setMatchingName(s.GetString2()); break; case 1: layout.preserve = s.GetBool(); break; case 2: layout.setShowPhAnim(s.GetBool()); break; case 3: layout.setShowMasterSp(s.GetBool()); break; case 4: layout.userDrawn = s.GetBool(); break; case 5: layout.setType(s.GetUChar()); break; default: break; } } while (s.cur < end) { var _rec = s.GetUChar(); switch (_rec) { case 0: var cSld = new CSld(); this.ReadCSld(cSld); for (var i = 0; i < cSld.spTree.length; ++i) { layout.shapeAdd(i, cSld.spTree[i]); } if (cSld.Bg) { layout.changeBackground(cSld.Bg); } layout.setCSldName(cSld.name); break; case 1: layout.setClMapOverride(this.ReadClrOverride()); break; case 4: layout.hf = this.ReadHF(); break; default: var _len = s.GetULong(); s.Skip2(_len); break; } } s.Seek2(end); this.TempMainObject = null; return layout; }; this.ReadSlide = function (sldIndex) { var slide = new Slide(this.presentation, null, sldIndex); this.TempMainObject = slide; slide.maxId = -1; var s = this.stream; s.Skip2(1); var end = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { slide.setShow(s.GetBool()); } else { if (1 == _at) { slide.setShowPhAnim(s.GetBool()); } else { if (2 == _at) { slide.setShowMasterSp(s.GetBool()); } } } } while (s.cur < end) { var _rec = s.GetUChar(); switch (_rec) { case 0: var cSld = new CSld(); this.ReadCSld(cSld); for (var i = 0; i < cSld.spTree.length; ++i) { slide.shapeAdd(i, cSld.spTree[i]); } if (cSld.Bg) { slide.changeBackground(cSld.Bg); } slide.setCSldName(cSld.name); break; case 1: slide.setClMapOverride(this.ReadClrOverride()); break; case 2: var _timing = this.ReadTransition(); slide.applyTiming(_timing); break; case 4: var end2 = s.cur + s.GetLong() + 4; while (s.cur < end2) { var _rec2 = s.GetUChar(); switch (_rec2) { case 0: s.Skip2(4); var lCount = s.GetULong(); for (var i = 0; i < lCount; i++) { s.Skip2(1); var _comment = new CWriteCommentData(); var _end_rec3 = s.cur + s.GetLong() + 4; s.Skip2(1); while (true) { var _at3 = s.GetUChar(); if (_at3 == g_nodeAttributeEnd) { break; } switch (_at3) { case 0: _comment.WriteAuthorId = s.GetLong(); break; case 1: _comment.WriteTime = s.GetString2(); break; case 2: _comment.WriteCommentId = s.GetLong(); break; case 3: _comment.x = s.GetLong(); break; case 4: _comment.y = s.GetLong(); break; case 5: _comment.WriteText = s.GetString2(); break; case 6: _comment.WriteParentAuthorId = s.GetLong(); break; case 7: _comment.WriteParentCommentId = s.GetLong(); break; case 8: _comment.AdditionalData = s.GetString2(); break; default: break; } } s.Seek2(_end_rec3); _comment.Calculate2(); slide.writecomments.push(_comment); } break; default: s.SkipRecord(); break; } } s.Seek2(end2); break; default: var _len = s.GetULong(); s.Skip2(_len); break; } } slide.Load_Comments(this.presentation.CommentAuthors); s.Seek2(end); this.TempMainObject = null; return slide; }; this.ReadTransition = function () { var _timing = new CAscSlideTiming(); _timing.setDefaultParams(); var s = this.stream; var end = s.cur + s.GetULong() + 4; if (s.cur == end) { return _timing; } s.Skip2(1); var _presentDuration = false; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { _timing.SlideAdvanceOnMouseClick = s.GetBool(); } else { if (1 == _at) { _timing.SlideAdvanceAfter = true; _timing.SlideAdvanceDuration = s.GetULong(); } else { if (2 == _at) { _timing.TransitionDuration = s.GetULong(); _presentDuration = true; } else { if (3 == _at) { var _spd = s.GetUChar(); if (!_presentDuration) { _timing.TransitionDuration = 250; if (_spd == 1) { _timing.TransitionDuration = 500; } else { if (_spd == 2) { _timing.TransitionDuration = 750; } } } } } } } } while (s.cur < end) { var _rec = s.GetUChar(); switch (_rec) { case 0: var _type = ""; var _paramNames = []; var _paramValues = []; var _end_rec2 = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at2 = s.GetUChar(); if (_at2 == g_nodeAttributeEnd) { break; } switch (_at2) { case 0: _type = s.GetString2(); break; case 1: _paramNames.push(s.GetString2()); break; case 2: _paramValues.push(s.GetString2()); break; default: break; } } if (_paramNames.length == _paramValues.length && _type != "") { var _len = _paramNames.length; if ("p:fade" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Fade; _timing.TransitionOption = c_oAscSlideTransitionParams.Fade_Smoothly; if (1 == _len && _paramNames[0] == "thruBlk" && _paramValues[0] == "1") { _timing.TransitionOption = c_oAscSlideTransitionParams.Fade_Through_Black; } } else { if ("p:push" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Push; _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Bottom; if (1 == _len && _paramNames[0] == "dir") { if ("l" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Right; } if ("r" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Left; } if ("d" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Top; } } } else { if ("p:wipe" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Wipe; _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Right; if (1 == _len && _paramNames[0] == "dir") { if ("u" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Bottom; } if ("r" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Left; } if ("d" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Top; } } } else { if ("p:strips" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Wipe; _timing.TransitionOption = c_oAscSlideTransitionParams.Param_TopRight; if (1 == _len && _paramNames[0] == "dir") { if ("rd" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_TopLeft; } if ("ru" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_BottomLeft; } if ("lu" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_BottomRight; } } } else { if ("p:cover" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Cover; _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Right; if (1 == _len && _paramNames[0] == "dir") { if ("u" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Bottom; } if ("r" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Left; } if ("d" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Top; } if ("rd" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_TopLeft; } if ("ru" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_BottomLeft; } if ("lu" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_BottomRight; } if ("ld" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_TopRight; } } } else { if ("p:pull" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.UnCover; _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Right; if (1 == _len && _paramNames[0] == "dir") { if ("u" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Bottom; } if ("r" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Left; } if ("d" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_Top; } if ("rd" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_TopLeft; } if ("ru" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_BottomLeft; } if ("lu" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_BottomRight; } if ("ld" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Param_TopRight; } } } else { if ("p:split" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Split; var _is_vert = true; var _is_out = true; for (var i = 0; i < _len; i++) { if (_paramNames[i] == "orient") { _is_vert = (_paramValues[i] == "vert") ? true : false; } else { if (_paramNames[i] == "dir") { _is_out = (_paramValues[i] == "out") ? true : false; } } } if (_is_vert) { if (_is_out) { _timing.TransitionOption = c_oAscSlideTransitionParams.Split_VerticalOut; } else { _timing.TransitionOption = c_oAscSlideTransitionParams.Split_VerticalIn; } } else { if (_is_out) { _timing.TransitionOption = c_oAscSlideTransitionParams.Split_HorizontalOut; } else { _timing.TransitionOption = c_oAscSlideTransitionParams.Split_HorizontalIn; } } } else { if ("p:wheel" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Clock; _timing.TransitionOption = c_oAscSlideTransitionParams.Clock_Clockwise; } else { if ("p14:wheelReverse" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Clock; _timing.TransitionOption = c_oAscSlideTransitionParams.Clock_Counterclockwise; } else { if ("p:wedge" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Clock; _timing.TransitionOption = c_oAscSlideTransitionParams.Clock_Wedge; } else { if ("p14:warp" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Zoom; _timing.TransitionOption = c_oAscSlideTransitionParams.Zoom_Out; if (1 == _len && _paramNames[0] == "dir") { if ("in" == _paramValues[0]) { _timing.TransitionOption = c_oAscSlideTransitionParams.Zoom_In; } } } else { if ("p:newsflash" == _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Zoom; _timing.TransitionOption = c_oAscSlideTransitionParams.Zoom_AndRotate; } else { if ("p:none" != _type) { _timing.TransitionType = c_oAscSlideTransitionTypes.Fade; _timing.TransitionOption = c_oAscSlideTransitionParams.Fade_Smoothly; } } } } } } } } } } } } } } s.Seek2(_end_rec2); break; default: s.SkipRecord(); break; } } s.Seek2(end); return _timing; }; this.ReadHF = function () { var hf = new HF(); var s = this.stream; var _e = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { hf.dt = s.GetBool(); } else { if (1 == _at) { hf.ftr = s.GetBool(); } else { if (2 == _at) { hf.hdr = s.GetBool(); } else { if (3 == _at) { hf.sldNum = s.GetBool(); } } } } } s.Seek2(_e); return hf; }; this.ReadNoteMaster = function () { return null; }; this.ReadNote = function () { return null; }; this.ReadCSld = function (csld) { var s = this.stream; var _end_rec = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { csld.name = s.GetString2(); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: csld.Bg = this.ReadBg(); break; case 1: csld.spTree = this.ReadGroupShapeMain(); break; default: s.Seek2(_end_rec); return; } } s.Seek2(_end_rec); }; this.ReadBg = function () { var bg = new CBg(); var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetLong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { bg.bwMode = s.GetUChar(); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: bg.bgPr = this.ReadBgPr(); break; case 1: bg.bgRef = this.ReadStyleRef(); break; default: break; } } s.Seek2(_end_rec); return bg; }; this.ReadBgPr = function () { var bgpr = new CBgPr(); var s = this.stream; var _end_rec = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { bgpr.shadeToTitle = s.GetBool(); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: bgpr.Fill = this.ReadUniFill(); break; case 1: var _len = s.GetULong(); s.Skip2(_len); break; default: break; } } s.Seek2(_end_rec); return bgpr; }; this.ReadStyleRef = function () { var ref = new StyleRef(); 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) { ref.setIdx(s.GetLong()); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: ref.setColor(this.ReadUniColor()); break; default: break; } } s.Seek2(_end_rec); return ref; }; this.ReadFontRef = function () { var ref = new FontRef(); 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) { ref.setIdx(s.GetUChar()); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: ref.setColor(this.ReadUniColor()); break; default: break; } } s.Seek2(_end_rec); return ref; }; this.ReadTheme = function () { var theme = new CTheme(); theme.presentation = this.presentation; var s = this.stream; var type = s.GetUChar(); 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) { theme.name = s.GetString2(); } else { if (1 == _at) { theme.isThemeOverride = s.GetBool(); } else { break; } } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: var themeElements = new ThemeElements(); this.ReadThemeElements(themeElements); theme.setFontScheme(themeElements.fontScheme); theme.setFormatScheme(themeElements.fmtScheme); theme.changeColorScheme(themeElements.clrScheme); break; case 1: theme.spDef = this.ReadDefaultShapeProperties(); break; case 2: theme.lnDef = this.ReadDefaultShapeProperties(); break; case 3: theme.txDef = this.ReadDefaultShapeProperties(); break; case 4: s.Skip2(4); var _len = s.GetULong(); for (var i = 0; i < _len; i++) { s.Skip2(1); theme.extraClrSchemeLst[i] = this.ReadExtraColorScheme(); } } } s.Seek2(_end_rec); return theme; }; this.ReadThemeElements = function (thelems) { var s = this.stream; 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: this.ReadClrScheme(thelems.clrScheme); break; case 1: this.ReadFontScheme(thelems.fontScheme); break; case 2: this.ReadFmtScheme(thelems.fmtScheme); break; default: break; } } s.Seek2(_end_rec); }; this.ReadFontScheme = function (fontscheme) { 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) { fontscheme.setName(s.GetString2()); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: this.ReadFontCollection(fontscheme.majorFont); break; case 1: this.ReadFontCollection(fontscheme.minorFont); break; default: break; } } s.Seek2(_end_rec); }; this.ReadFontCollection = function (fontcolls) { var s = this.stream; 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: fontcolls.setLatin(this.ReadTextFontTypeface()); break; case 1: fontcolls.setEA(this.ReadTextFontTypeface()); break; case 2: fontcolls.setCS(this.ReadTextFontTypeface()); break; case 3: var _len = s.GetULong(); s.Skip2(_len); break; default: break; } } s.Seek2(_end_rec); }; this.ReadTextFontTypeface = function () { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; var charset = ""; var panose = ""; var pitchFamily = ""; var typeface = ""; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: charset = s.GetString2(); break; case 1: panose = s.GetString2(); break; case 2: pitchFamily = s.GetString2(); break; case 3: typeface = s.GetString2(); break; default: break; } } s.Seek2(_end_rec); return typeface; }; this.ReadFmtScheme = function (fmt) { 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) { fmt.setName(s.GetString2()); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: s.Skip2(4); var _c = s.GetULong(); for (var i = 0; i < _c; i++) { s.Skip2(1); fmt.fillStyleLst[i] = this.ReadUniFill(); } break; case 1: s.Skip2(4); var _c = s.GetULong(); for (var i = 0; i < _c; i++) { s.Skip2(1); fmt.lnStyleLst[i] = this.ReadLn(); } break; case 2: var _len = s.GetULong(); s.Skip2(_len); break; case 3: s.Skip2(4); var _c = s.GetULong(); for (var i = 0; i < _c; i++) { s.Skip2(1); fmt.bgFillStyleLst[i] = this.ReadUniFill(); } break; default: break; } } s.Seek2(_end_rec); }; this.ReadDefaultShapeProperties = function () { var def = new DefaultShapeDefinition(); var s = this.stream; 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: this.ReadSpPr(def.spPr); break; case 1: var _len = s.GetULong(); s.Skip2(_len); break; case 2: var _len = s.GetULong(); s.Skip2(_len); break; case 3: def.style = this.ReadShapeStyle(); break; default: break; } } s.Seek2(_end_rec); return def; }; 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.setBwMode(s.GetUChar()); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: spPr.setXfrm(this.ReadXfrm()); spPr.xfrm.setParent(spPr); break; case 1: spPr.setGeometry(this.ReadGeometry(spPr.xfrm)); if (spPr.geometry) { spPr.geometry.setParent(spPr); } break; case 2: spPr.setFill(this.ReadUniFill()); break; case 3: spPr.setLn(this.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.ReadGrSpPr = 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.setBwMode(s.GetUChar()); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: spPr.setXfrm(this.ReadXfrm()); spPr.xfrm.setParent(spPr); break; case 1: spPr.setFill(this.ReadUniFill()); break; case 2: var _len = s.GetULong(); s.Skip2(_len); break; case 3: var _len = s.GetULong(); s.Skip2(_len); break; default: break; } } s.Seek2(_end_rec); }; this.ReadXfrm = function () { var ret = new CXfrm(); 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; } switch (_at) { case 0: ret.setOffX(s.GetLong() / c_dScalePPTXSizes); break; case 1: ret.setOffY(s.GetLong() / c_dScalePPTXSizes); break; case 2: ret.setExtX(s.GetLong() / c_dScalePPTXSizes); break; case 3: ret.setExtY(s.GetLong() / c_dScalePPTXSizes); break; case 4: ret.setChOffX(s.GetLong() / c_dScalePPTXSizes); break; case 5: ret.setChOffY(s.GetLong() / c_dScalePPTXSizes); break; case 6: ret.setChExtX(s.GetLong() / c_dScalePPTXSizes); break; case 7: ret.setChExtY(s.GetLong() / c_dScalePPTXSizes); break; case 8: ret.setFlipH(s.GetBool()); break; case 9: ret.setFlipV(s.GetBool()); break; case 10: ret.setRot((s.GetLong() / 60000) * Math.PI / 180); break; default: break; } } s.Seek2(_end_rec); return ret; }; this.ReadShapeStyle = function () { var def = new CShapeStyle(); var s = this.stream; 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: def.setLnRef(this.ReadStyleRef()); break; case 1: def.setFillRef(this.ReadStyleRef()); break; case 2: def.setEffectRef(this.ReadStyleRef()); break; case 3: def.setFontRef(this.ReadFontRef()); break; default: break; } } s.Seek2(_end_rec); return def; }; this.ReadGeometry = function (_xfrm) { var geom = null; var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; if (s.cur < _end_rec) { var _t = s.GetUChar(); if (1 == _t) { var _len = s.GetULong(); var _s = s.cur; var _e = _s + _len; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { var tmpStr = s.GetString2(); geom = CreateGeometry(tmpStr); geom.isLine = tmpStr == "line"; geom.setPreset(tmpStr); } else { break; } } while (s.cur < _e) { var _at = s.GetUChar(); switch (_at) { case 0: this.ReadGeomAdj(geom); break; default: break; } } } else { if (2 == _t) { var _len = s.GetULong(); var _s = s.cur; var _e = _s + _len; geom = CreateGeometry(""); geom.preset = null; while (s.cur < _e) { var _at = s.GetUChar(); switch (_at) { case 0: this.ReadGeomAdj(geom); break; case 1: this.ReadGeomGd(geom); break; case 2: this.ReadGeomAh(geom); break; case 3: this.ReadGeomCxn(geom); break; case 4: this.ReadGeomPathLst(geom, _xfrm); break; case 5: this.ReadGeomRect(geom); break; default: break; } } } } } s.Seek2(_end_rec); return geom; }; this.ReadGeomAdj = function (geom) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; var _c = s.GetULong(); for (var i = 0; i < _c; i++) { s.Skip2(6); var arr = []; var cp = 0; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (cp == 1) { arr[cp] = s.GetLong(); } else { arr[cp] = s.GetString2(); } cp++; } if (arr.length >= 3) { geom.AddAdj(arr[0], arr[1], arr[2]); } } s.Seek2(_end_rec); }; this.ReadGeomGd = function (geom) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; var _c = s.GetULong(); for (var i = 0; i < _c; i++) { s.Skip2(6); var arr = []; var cp = 0; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (cp == 1) { arr[cp] = s.GetLong(); } else { arr[cp] = s.GetString2(); } cp++; } geom.AddGuide(arr[0], arr[1], arr[2], arr[3], arr[4]); } s.Seek2(_end_rec); }; this.ReadGeomAh = function (geom) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; var _c = s.GetULong(); for (var i = 0; i < _c; i++) { var _type1 = s.GetUChar(); s.Skip2(4); var _type = s.GetUChar(); s.Skip2(5); var arr = []; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } arr[_at] = s.GetString2(); } if (1 == _type) { geom.AddHandlePolar(arr[2], arr[6], arr[4], arr[3], arr[7], arr[5], arr[0], arr[1]); } else { geom.AddHandleXY(arr[2], arr[6], arr[4], arr[3], arr[7], arr[5], arr[0], arr[1]); } } s.Seek2(_end_rec); }; this.ReadGeomCxn = function (geom) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; var _c = s.GetULong(); for (var i = 0; i < _c; i++) { var _type = s.GetUChar(); s.Skip2(5); var arr = []; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } arr[_at] = s.GetString2(); } geom.AddCnx(arr[2], arr[0], arr[1]); } s.Seek2(_end_rec); }; this.ReadGeomRect = function (geom) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; s.Skip2(1); var arr = []; arr[0] = "l"; arr[1] = "t"; arr[2] = "r"; arr[3] = "b"; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } arr[_at] = s.GetString2(); } geom.AddRect(arr[0], arr[1], arr[2], arr[3]); s.Seek2(_end_rec); }; this.ReadGeomPathLst = function (geom, _xfrm) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; var _c = s.GetULong(); for (var i = 0; i < _c; i++) { var _type = s.GetUChar(); var _len = s.GetULong(); var _s = s.cur; var _e = _s + _len; s.Skip2(1); var extrusionOk = false; var fill = 5; var stroke = true; var w = undefined; var h = undefined; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: extrusionOk = s.GetBool(); break; case 1: fill = s.GetUChar(); break; case 2: h = s.GetLong(); break; case 3: stroke = s.GetBool(); break; case 4: w = s.GetLong(); break; default: break; } } geom.AddPathCommand(0, extrusionOk, (fill == 4) ? "none" : "norm", stroke, w, h); var isKoords = false; while (s.cur < _e) { var _at = s.GetUChar(); switch (_at) { case 0: s.Skip2(4); var _cc = s.GetULong(); for (var j = 0; j < _cc; j++) { s.Skip2(5); isKoords |= this.ReadUniPath2D(geom); } break; default: break; } } s.Seek2(_e); } var _path = geom.pathLst[geom.pathLst.length - 1]; if (isKoords && undefined === _path.pathW && undefined === _path.pathH) { _path.pathW = _xfrm.extX * c_dScalePPTXSizes; _path.pathH = _xfrm.extY * c_dScalePPTXSizes; if (_path.pathW != undefined) { _path.divPW = 100 / _path.pathW; _path.divPH = 100 / _path.pathH; } } s.Seek2(_end_rec); }; this.ReadUniPath2D = function (geom) { var s = this.stream; var _type = s.GetUChar(); var _len = s.GetULong(); var _s = s.cur; var _e = _s + _len; if (3 == _type) { geom.AddPathCommand(6); s.Seek2(_e); return; } s.Skip2(1); var isKoord = false; var arr = []; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } arr[_at] = s.GetString2(); if (!isKoord && !isNaN(parseInt(arr[_at]))) { isKoord = true; } } switch (_type) { case 1: geom.AddPathCommand(1, arr[0], arr[1]); break; case 2: geom.AddPathCommand(2, arr[0], arr[1]); break; case 3: geom.AddPathCommand(6); break; case 4: geom.AddPathCommand(5, arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]); break; case 5: geom.AddPathCommand(3, arr[0], arr[1], arr[2], arr[3]); break; case 6: geom.AddPathCommand(4, arr[0], arr[1], arr[2], arr[3]); break; default: break; } s.Seek2(_e); return isKoord; }; this.ReadGraphicObject = function () { var s = this.stream; var _type = s.GetUChar(); var _object = null; switch (_type) { case 1: _object = this.ReadShape(); break; case 2: _object = this.ReadPic(); break; case 3: _object = this.ReadCxn(); break; case 4: _object = this.ReadGroupShape(); break; case 5: _object = this.ReadGrFrame(); default: break; } return _object; }; this.ReadShape = function () { var s = this.stream; var shape = new CShape(this.TempMainObject); if (null != this.TempGroupObject) { shape.Container = this.TempGroupObject; } var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; shape.setBDeleted(false); 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: shape.setNvSpPr(this.ReadNvUniProp()); break; case 1: var sp_pr = new CSpPr(); this.ReadSpPr(sp_pr); shape.setSpPr(sp_pr); sp_pr.setParent(shape); break; case 2: shape.setStyle(this.ReadShapeStyle()); break; case 3: shape.setTxBody(this.ReadTextBody(shape)); shape.txBody.setParent(shape); break; default: break; } } s.Seek2(_end_rec); return shape; }; this.ReadGroupShape = function () { var s = this.stream; var shape = new CGroupShape(); shape.setBDeleted(false); this.TempGroupObject = shape; 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: shape.setNvSpPr(this.ReadNvUniProp()); break; case 1: var spPr = new CSpPr(); this.ReadGrSpPr(spPr); shape.setSpPr(spPr); spPr.setParent(shape); 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(); var _object = null; switch (_type) { case 1: _object = this.ReadShape(); if (!IsHiddenObj(_object)) { shape.addToSpTree(shape.spTree.length, _object); shape.spTree[shape.spTree.length - 1].setGroup(shape); } break; case 2: _object = this.ReadPic(); if (!IsHiddenObj(_object)) { shape.addToSpTree(shape.spTree.length, _object); shape.spTree[shape.spTree.length - 1].setGroup(shape); } break; case 3: _object = this.ReadCxn(); if (!IsHiddenObj(_object)) { shape.addToSpTree(shape.spTree.length, _object); shape.spTree[shape.spTree.length - 1].setGroup(shape); } break; case 4: _object = this.ReadGroupShape(); if (!IsHiddenObj(_object)) { shape.addToSpTree(shape.spTree.length, _object); shape.spTree[shape.spTree.length - 1].setGroup(shape); this.TempGroupObject = shape; } break; case 5: var _ret = null; if ("undefined" != typeof(CGraphicFrame)) { _ret = this.ReadGrFrame(); } else { _ret = this.ReadChartDataInGroup(shape); } if (null != _ret) { shape.addToSpTree(shape.spTree.length, _ret); shape.spTree[shape.spTree.length - 1].setGroup(shape); } break; default: break; } } break; default: break; } } s.Seek2(_end_rec); this.TempGroupObject = null; return shape; }; this.ReadGroupShapeMain = function () { var s = this.stream; var shapes = []; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; s.Skip2(5); while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: var _len = s.GetULong(); s.Skip2(_len); break; case 1: var _len = s.GetULong(); s.Skip2(_len); 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: var _object = this.ReadShape(); if (!IsHiddenObj(_object)) { shapes[shapes.length] = _object; _object.setParent2(this.TempMainObject); } break; case 2: var _object = this.ReadPic(); if (!IsHiddenObj(_object)) { shapes[shapes.length] = _object; _object.setParent2(this.TempMainObject); } break; case 3: var _object = this.ReadCxn(); if (!IsHiddenObj(_object)) { shapes[shapes.length] = _object; _object.setParent2(this.TempMainObject); } break; case 4: var _object = this.ReadGroupShape(); if (!IsHiddenObj(_object)) { shapes[shapes.length] = _object; _object.setParent2(this.TempMainObject); } break; case 5: var _ret = this.ReadGrFrame(); if (null != _ret) { shapes[shapes.length] = _ret; _ret.setParent2(this.TempMainObject); } break; default: break; } } break; default: break; } } s.Seek2(_end_rec); return shapes; }; this.ReadPic = function () { var s = this.stream; var pic = new CImageShape(this.TempMainObject); pic.setBDeleted(false); 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: pic.setNvSpPr(this.ReadNvUniProp()); break; case 1: pic.setBlipFill(this.ReadUniFill().fill); break; case 2: var spPr = new CSpPr(); spPr.setParent(pic); this.ReadSpPr(spPr); pic.setSpPr(spPr); break; case 3: pic.setStyle(this.ReadShapeStyle()); break; default: break; } } s.Seek2(_end_rec); return pic; }; this.ReadCxn = function () { var s = this.stream; var shape = new CShape(); shape.setBDeleted(false); 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: shape.setNvSpPr(this.ReadNvUniProp()); break; case 1: var spPr = new CSpPr(); spPr.setParent(shape); this.ReadSpPr(spPr); shape.setSpPr(spPr); break; case 2: shape.setStyle(this.ReadShapeStyle()); break; default: break; } } s.Seek2(_end_rec); return shape; }; this.ReadChartDataInGroup = function (group) { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; this.TempGroupObject = group; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: var spid = s.GetString2(); break; default: break; } } var _nvGraphicFramePr = null; var _xfrm = null; var _chart = null; while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: _nvGraphicFramePr = this.ReadNvUniProp(); break; case 1: _xfrm = this.ReadXfrm(); break; case 2: s.SkipRecord(); break; case 3: var _length = s.GetLong(); var _pos = s.cur; var _stream = new FT_Stream2(); _stream.data = s.data; _stream.pos = s.pos; _stream.cur = s.cur; _stream.size = s.size; _chart = new CChartSpace(); _chart.setBDeleted(false); var oBinaryChartReader = new BinaryChartReader(_stream); oBinaryChartReader.ExternalReadCT_ChartSpace(_length, _chart, this.presentation); _chart.setBDeleted(false); if (_xfrm) { if (!_chart.spPr) { _chart.setSpPr(new CSpPr()); _chart.spPr.setParent(_chart); } _chart.spPr.setXfrm(_xfrm); _xfrm.setParent(_chart.spPr); } s.Seek2(_pos + _length); break; default: break; } } s.Seek2(_end_rec); this.TempGroupObject = null; if (_chart == null) { return null; } return _chart; }; this.ReadGrFrame = function () { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; var _graphic_frame = new CGraphicFrame(); _graphic_frame.setParent2(this.TempMainObject); this.TempGroupObject = _graphic_frame; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: var spid = s.GetString2(); break; default: break; } } var _nvGraphicFramePr = null; var _xfrm = null; var _table = null; var _chart = null; while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: _nvGraphicFramePr = this.ReadNvUniProp(); break; case 1: _xfrm = this.ReadXfrm(); break; case 2: _table = this.ReadTable(_xfrm, _graphic_frame); break; case 3: var _length = s.GetLong(); var _pos = s.cur; if (typeof CChartSpace !== "undefined") { var _stream = new FT_Stream2(); _stream.data = s.data; _stream.pos = s.pos; _stream.cur = s.cur; _stream.size = s.size; _chart = new CChartSpace(); _chart.setBDeleted(false); window.global_pptx_content_loader.ImageMapChecker = this.ImageMapChecker; window.global_pptx_content_loader.Reader.ImageMapChecker = this.ImageMapChecker; var oBinaryChartReader = new BinaryChartReader(_stream); oBinaryChartReader.ExternalReadCT_ChartSpace(_length, _chart, this.presentation); } s.Seek2(_pos + _length); break; default: break; } } s.Seek2(_end_rec); this.TempGroupObject = null; if (_table == null && _chart == null) { return null; } if (_table != null) { if (!_graphic_frame.spPr) { _graphic_frame.setSpPr(new CSpPr()); _graphic_frame.spPr.setParent(_graphic_frame); } _graphic_frame.spPr.setXfrm(_xfrm); _xfrm.setParent(_graphic_frame.spPr); _graphic_frame.setSpPr(_graphic_frame.spPr); _graphic_frame.setNvSpPr(_nvGraphicFramePr); _graphic_frame.setGraphicObject(_table); _graphic_frame.setBDeleted(false); } else { if (_chart != null) { if (!_chart.spPr) { _chart.setSpPr(new CSpPr()); _chart.spPr.setParent(_chart); } _chart.spPr.setXfrm(_xfrm); _xfrm.setParent(_chart.spPr); return _chart; } } return _graphic_frame; }; this.ReadNvUniProp = function () { var prop = new UniNvPr(); var s = this.stream; 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: this.ReadCNvPr(prop.cNvPr); break; case 1: var _len = s.GetULong(); s.Skip2(_len); break; case 2: this.ReadNvPr(prop.nvPr); break; default: break; } } s.Seek2(_end_rec); return prop; }; this.ReadCNvPr = function (cNvPr) { 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; } switch (_at) { case 0: cNvPr.id = s.GetLong(); if (this.TempMainObject && cNvPr.id > this.TempMainObject.maxId) { this.TempMainObject.maxId = cNvPr.id; } break; case 1: cNvPr.name = s.GetString2(); break; case 2: cNvPr.isHidden = (1 == s.GetUChar()) ? true : false; break; case 3: s.GetString2(); break; case 4: s.GetString2(); break; default: break; } } s.Seek2(_end_rec); }; this.ReadTable = function (_xfrm, _graphic_frame) { if (_xfrm == null) { this.stream.SkipRecord(); return null; } var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; var cols = null; var rows = null; var _return_to_rows = 0; var props = null; while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: props = this.ReadTablePr(); break; case 1: s.Skip2(4); var _len = s.GetULong(); cols = new Array(_len); for (var i = 0; i < _len; i++) { s.Skip2(7); cols[i] = s.GetULong() / 36000; s.Skip2(1); } break; case 2: var _end_rec2 = s.cur + s.GetULong() + 4; rows = s.GetULong(); _return_to_rows = s.cur; s.Seek2(_end_rec2); break; default: break; } } var _table = new CTable(this.presentation.DrawingDocument, _graphic_frame, true, 0, 0, 0, _xfrm.extX, 100000, rows, cols.length, cols, true); if (null != props) { var style; if (this.map_table_styles[props.style]) { _table.Set_TableStyle(this.map_table_styles[props.style].Id); } _table.Set_Pr(props.props); _table.Set_TableLook(props.look); } _table.Set_TableLayout(tbllayout_Fixed); s.Seek2(_return_to_rows); for (var i = 0; i < rows; i++) { s.Skip2(1); this.ReadTableRow(_table.Content[i]); } s.Seek2(_end_rec); return _table; }; this.ReadTableRow = function (row) { 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; } switch (_at) { case 0: row.Set_Height(s.GetULong() / 36000, heightrule_AtLeast); break; default: break; } } s.Skip2(5); var _count = s.GetULong(); if (true) { for (var i = 0; i < _count; i++) { s.Skip2(1); var bIsNoHMerge = this.ReadCell(row.Content[i]); if (bIsNoHMerge === false) { row.Remove_Cell(i); i--; _count--; } var _gridCol = 1; if ("number" == typeof(row.Content[i].Pr.GridSpan)) { _gridCol = row.Content[i].Pr.GridSpan; } if (_gridCol > (_count - i)) { _gridCol = _count - i; row.Content[i].Pr.GridSpan = _gridCol; if (1 == row.Content[i].Pr.GridSpan) { row.Content[i].Pr.GridSpan = undefined; } } _gridCol--; while (_gridCol > 0) { i++; if (i >= _count) { break; } s.Skip2(1); this.ReadCell(row.Content[i]); row.Remove_Cell(i); i--; _count--; --_gridCol; } } } s.Seek2(_end_rec); }; this.ReadCell = function (cell) { cell.Content.Internal_Content_RemoveAll(); 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; } switch (_at) { case 0: var _id = s.GetString2(); break; case 1: var rowSpan = s.GetULong(); if (1 < rowSpan) { cell.Set_VMerge(vmerge_Restart); } break; case 2: cell.Set_GridSpan(s.GetULong()); break; case 3: var bIsHMerge = s.GetBool(); if (bIsHMerge) { s.Seek2(_end_rec); return false; } break; case 4: var bIsVMerge = s.GetBool(); if (bIsVMerge && cell.Pr.VMerge != vmerge_Restart) { cell.Set_VMerge(vmerge_Continue); } break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: var props = new CTableCellPr(); this.ReadCellProps(props); props.Merge(cell.Pr); cell.Set_Pr(props); break; case 1: this.ReadTextBody2(cell.Content); break; default: break; } } s.Seek2(_end_rec); return true; }; this.ReadCellProps = function (props) { 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; } switch (_at) { case 0: if (props.TableCellMar == null) { props.TableCellMar = {}; } props.TableCellMar.Left = new CTableMeasurement(tblwidth_Mm, s.GetULong() / 36000); break; case 1: if (props.TableCellMar == null) { props.TableCellMar = {}; } props.TableCellMar.Top = new CTableMeasurement(tblwidth_Mm, s.GetULong() / 36000); break; case 2: if (props.TableCellMar == null) { props.TableCellMar = {}; } props.TableCellMar.Right = new CTableMeasurement(tblwidth_Mm, s.GetULong() / 36000); break; case 3: if (props.TableCellMar == null) { props.TableCellMar = {}; } props.TableCellMar.Bottom = new CTableMeasurement(tblwidth_Mm, s.GetULong() / 36000); break; case 4: s.Skip2(1); break; case 5: s.Skip2(1); break; case 6: s.Skip2(1); break; case 7: s.Skip2(1); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: if (!props.TableCellBorders) { props.TableCellBorders = {}; } props.TableCellBorders.Left = this.ReadTableBorderLn(); break; case 1: if (!props.TableCellBorders) { props.TableCellBorders = {}; } props.TableCellBorders.Top = this.ReadTableBorderLn(); break; case 2: if (!props.TableCellBorders) { props.TableCellBorders = {}; } props.TableCellBorders.Right = this.ReadTableBorderLn(); break; case 3: if (!props.TableCellBorders) { props.TableCellBorders = {}; } props.TableCellBorders.Bottom = this.ReadTableBorderLn(); break; case 4: s.SkipRecord(); break; case 5: s.SkipRecord(); break; case 6: var _unifill = this.ReadUniFill(); if (_unifill.fill !== undefined && _unifill.fill != null) { props.Shd = new CDocumentShd(); props.Shd.Value = shd_Clear; props.Shd.Unifill = _unifill; } break; case 7: s.SkipRecord(); break; default: s.SkipRecord(); break; } } s.Seek2(_end_rec); }; this.ReadTableBorderLn = function () { var ln = this.ReadLn(); var border = new CDocumentBorder(); border.Unifill = ln.Fill; border.Size = (ln.w == null) ? 12700 : ((ln.w) >> 0); border.Size /= 36000; border.Value = border_Single; return border; }; this.ReadTablePr = function () { var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; s.Skip2(1); var obj = {}; obj.props = new CTablePr(); obj.look = new CTableLook(false, false, false, false, false, false); obj.style = -1; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: obj.style = s.GetString2(); break; case 1: s.Skip2(1); break; case 2: obj.look.m_bFirst_Row = s.GetBool(); break; case 3: obj.look.m_bFirst_Col = s.GetBool(); break; case 4: obj.look.m_bLast_Row = s.GetBool(); break; case 5: obj.look.m_bLast_Col = s.GetBool(); break; case 6: obj.look.m_bBand_Hor = s.GetBool(); break; case 7: obj.look.m_bBand_Ver = s.GetBool(); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: var _unifill = this.ReadUniFill(); if (_unifill.fill !== undefined && _unifill.fill != null) { obj.props.Shd = new CDocumentShd(); obj.props.Shd.Value = shd_Clear; obj.props.Shd.Unifill = _unifill; } break; default: s.SkipRecord(); break; } } s.Seek2(_end_rec); return obj; }; this.ReadNvPr = function (nvPr) { 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; } switch (_at) { case 0: nvPr.setIsPhoto(s.GetBool()); break; case 1: nvPr.setUserDrawn(s.GetBool()); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: nvPr.setPh(this.ReadPH()); break; default: var _len = s.GetULong(); s.Skip2(_len); break; } } s.Seek2(_end_rec); }; this.ReadPH = function () { var ph = new Ph(); 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; } switch (_at) { case 0: ph.setHasCustomPrompt(s.GetBool()); break; case 1: ph.setIdx(s.GetString2()); break; case 2: ph.setOrient(s.GetUChar()); break; case 3: ph.setSz(s.GetUChar()); break; case 4: ph.setType(s.GetUChar()); break; default: break; } } s.Seek2(_end_rec); return ph; }; this.ReadRunProperties = function () { var rPr = new CTextPr(); var s = this.stream; var _end_rec = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: var altLang = s.GetString2(); break; case 1: rPr.Bold = s.GetBool(); break; case 2: var baseline = s.GetLong(); if (baseline < 0) { rPr.VertAlign = vertalign_SubScript; } else { if (baseline > 0) { rPr.VertAlign = vertalign_SuperScript; } } break; case 3: var bmk = s.GetString2(); break; case 4: var _cap = s.GetUChar(); if (_cap == 0) { rPr.Caps = true; rPr.SmallCaps = false; } else { if (_cap == 1) { rPr.Caps = false; rPr.SmallCaps = true; } else { if (_cap == 2) { rPr.SmallCaps = false; rPr.Caps = false; } } } break; case 5: s.Skip2(1); break; case 6: s.Skip2(1); break; case 7: rPr.Italic = s.GetBool(); break; case 8: s.Skip2(4); break; case 9: s.Skip2(1); break; case 10: var lang = s.GetString2(); break; case 11: s.Skip2(1); break; case 12: s.Skip2(1); break; case 13: s.Skip2(1); break; case 14: s.Skip2(4); break; case 15: rPr.Spacing = s.GetLong() * 25.4 / 7200; break; case 16: var _strike = s.GetUChar(); if (0 == _strike) { rPr.Strikeout = false; rPr.DStrikeout = true; } else { if (2 == _strike) { rPr.Strikeout = true; rPr.DStrikeout = false; } else { rPr.Strikeout = false; rPr.DStrikeout = false; } } break; case 17: var _size = s.GetLong() / 100; _size = ((_size * 2) + 0.5) >> 0; _size /= 2; rPr.FontSize = _size; break; case 18: rPr.Underline = (s.GetUChar() != 12); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: s.SkipRecord(); break; case 1: rPr.Unifill = this.ReadUniFill(); break; case 2: s.SkipRecord(); break; case 3: rPr.RFonts.Ascii = { Name: this.ReadTextFontTypeface(), Index: -1 }; break; case 4: rPr.RFonts.EastAsia = { Name: this.ReadTextFontTypeface(), Index: -1 }; break; case 5: rPr.RFonts.CS = { Name: this.ReadTextFontTypeface(), Index: -1 }; break; case 6: rPr.RFonts.HAnsi = { Name: this.ReadTextFontTypeface(), Index: -1 }; break; case 7: rPr.hlink = this.ReadHyperlink(); if (null == rPr.hlink) { delete rPr.hlink; } break; case 8: s.SkipRecord(); default: s.SkipRecord(); } } s.Seek2(_end_rec); return rPr; }; this.ReadHyperlink = function () { var hyper = new CHyperlink(); var s = this.stream; var _end_rec = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: hyper.url = s.GetString2(); break; case 1: var s1 = s.GetString2(); break; case 2: hyper.action = s.GetString2(); break; case 3: var tgt = s.GetString2(); break; case 4: var tooltip = s.GetString2(); break; case 5: s.Skip2(1); break; case 6: s.Skip2(1); break; case 7: s.Skip2(1); break; default: break; } } s.Seek2(_end_rec); if (hyper.action != null && hyper.action != "") { if (hyper.action == "ppaction://hlinkshowjump?jump=firstslide") { hyper.url = "ppaction://hlinkshowjump?jump=firstslide"; } else { if (hyper.action == "ppaction://hlinkshowjump?jump=lastslide") { hyper.url = "ppaction://hlinkshowjump?jump=lastslide"; } else { if (hyper.action == "ppaction://hlinkshowjump?jump=nextslide") { hyper.url = "ppaction://hlinkshowjump?jump=nextslide"; } else { if (hyper.action == "ppaction://hlinkshowjump?jump=previousslide") { hyper.url = "ppaction://hlinkshowjump?jump=previousslide"; } else { if (hyper.action == "ppaction://hlinksldjump") { if (hyper.url != null && hyper.url.indexOf("slide") == 0) { var _url = hyper.url.substring(5); var _indexXml = _url.indexOf("."); if (-1 != _indexXml) { _url = _url.substring(0, _indexXml); } var _slideNum = parseInt(_url); if (isNaN(_slideNum)) { _slideNum = 1; }--_slideNum; hyper.url = hyper.action + "slide" + _slideNum; } else { hyper.url = null; } } else { hyper.url = null; } } } } } } if (hyper.url == null) { return null; } return hyper; }; this.CorrectBodyPr = function (bodyPr) { var s = this.stream; var _end_rec = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: bodyPr.flatTx = s.GetLong(); break; case 1: bodyPr.anchor = s.GetUChar(); break; case 2: bodyPr.anchorCtr = s.GetBool(); break; case 3: bodyPr.bIns = s.GetLong() / 36000; break; case 4: bodyPr.compatLnSpc = s.GetBool(); break; case 5: bodyPr.forceAA = s.GetBool(); break; case 6: bodyPr.fromWordArt = s.GetBool(); break; case 7: bodyPr.horzOverflow = s.GetUChar(); break; case 8: bodyPr.lIns = s.GetLong() / 36000; break; case 9: bodyPr.numCol = s.GetLong(); break; case 10: bodyPr.rIns = s.GetLong() / 36000; break; case 11: bodyPr.rot = s.GetLong(); break; case 12: bodyPr.rtlCol = s.GetBool(); break; case 13: bodyPr.spcCol = s.GetLong(); break; case 14: bodyPr.spcFirstLastPara = s.GetBool(); break; case 15: bodyPr.tIns = s.GetLong() / 36000; break; case 16: bodyPr.upright = s.GetBool(); break; case 17: bodyPr.vert = s.GetUChar(); if (bodyPr.vert === nVertTTwordArtVert) { bodyPr.vert = nVertTTvert; } break; case 18: bodyPr.vertOverflow = s.GetUChar(); break; case 19: bodyPr.wrap = s.GetUChar(); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 1: var _end_rec2 = s.cur + s.GetULong() + 4; s.Skip2(1); var txFit = new CTextFit(); txFit.type = -1; while (true) { var _at2 = s.GetUChar(); if (_at2 == g_nodeAttributeEnd) { break; } switch (_at2) { case 0: txFit.type = s.GetLong() - 1; break; case 1: txFit.fontScale = s.GetLong(); break; case 2: txFit.lnSpcReduction = s.GetLong(); break; default: break; } } if (txFit.type != -1) { bodyPr.textFit = txFit; } s.Seek2(_end_rec2); break; default: s.SkipRecord(); } } s.Seek2(_end_rec); }; this.ReadBodyPr = function () { var bodyPr = new CBodyPr(); this.CorrectBodyPr(bodyPr); return bodyPr; }; this.ReadTextParagraphPr = function () { var para_pr = new CParaPr(); var tPr = new CTextParagraphPr(); var s = this.stream; var _end_rec = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: var _align = s.GetUChar(); switch (_align) { case 0: para_pr.Jc = align_Center; break; case 1: para_pr.Jc = align_Justify; break; case 2: para_pr.Jc = align_Justify; break; case 3: para_pr.Jc = align_Justify; break; case 4: para_pr.Jc = align_Left; break; case 5: para_pr.Jc = align_Right; break; case 6: para_pr.Jc = align_Justify; break; default: para_pr.Jc = align_Center; break; } break; case 1: var default_tab = s.GetLong() / 36000; break; case 2: s.Skip2(1); break; case 3: s.Skip2(1); break; case 4: s.Skip2(1); break; case 5: para_pr.Ind.FirstLine = s.GetLong() / 36000; break; case 6: s.Skip2(1); break; case 7: para_pr.Lvl = s.GetLong(); break; case 8: para_pr.Ind.Left = s.GetLong() / 36000; break; case 9: para_pr.Ind.Right = s.GetLong() / 36000; break; case 10: s.Skip2(1); break; default: break; } } var bullet = new CBullet(); var b_bullet = false; while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: s.Skip2(5); var Pts = null; var Pct = null; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: Pct = s.GetLong(); para_pr.Spacing.Line = Pct / 100000; para_pr.Spacing.LineRule = linerule_Auto; break; case 1: Pts = s.GetLong(); para_pr.Spacing.Line = Pts * 0.00352777778; para_pr.Spacing.LineRule = linerule_Exact; break; default: break; } } break; case 1: s.Skip2(5); var Pts = null; var Pct = null; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: Pct = s.GetLong(); para_pr.Spacing.After = 0; break; case 1: Pts = s.GetLong(); para_pr.Spacing.After = Pts * 0.00352777778; break; default: break; } } break; case 2: s.Skip2(5); var Pts = null; var Pct = null; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: Pct = s.GetLong(); para_pr.Spacing.Before = 0; break; case 1: Pts = s.GetLong(); para_pr.Spacing.Before = Pts * 0.00352777778; break; default: break; } } break; case 3: b_bullet = true; bullet.bulletColor = new CBulletColor(); var cur_pos = s.cur; var _len = s.GetULong(); if (0 != _len) { bullet.bulletColor.type = s.GetUChar(); if (bullet.bulletColor.type == BULLET_TYPE_COLOR_CLRTX) { s.SkipRecord(); } else { var _l = s.GetULong(); s.Skip2(1); bullet.bulletColor.UniColor = this.ReadUniColor(); } } s.Seek2(cur_pos + _len + 4); break; case 4: b_bullet = true; bullet.bulletSize = new CBulletSize(); var cur_pos = s.cur; var _len = s.GetULong(); if (0 != _len) { bullet.bulletSize.type = s.GetUChar(); if (bullet.bulletSize.type == BULLET_TYPE_SIZE_TX) { s.SkipRecord(); } else { var _l = s.GetULong(); s.Skip2(2); bullet.bulletSize.val = s.GetLong(); s.Skip2(1); } } s.Seek2(cur_pos + _len + 4); break; case 5: b_bullet = true; bullet.bulletTypeface = new CBulletTypeface(); var cur_pos = s.cur; var _len = s.GetULong(); if (0 != _len) { bullet.bulletTypeface.type = s.GetUChar(); if (bullet.bulletTypeface.type == BULLET_TYPE_TYPEFACE_BUFONT) { bullet.bulletTypeface.typeface = this.ReadTextFontTypeface(); } else { s.SkipRecord(); } } s.Seek2(cur_pos + _len + 4); break; case 6: b_bullet = true; bullet.bulletType = new CBulletType(); var cur_pos = s.cur; var _len = s.GetULong(); if (0 != _len) { bullet.bulletType.type = s.GetUChar(); if (bullet.bulletType.type == BULLET_TYPE_BULLET_NONE) { s.SkipRecord(); } else { if (bullet.bulletType.type == BULLET_TYPE_BULLET_BLIP) { s.SkipRecord(); } else { if (bullet.bulletType.type == BULLET_TYPE_BULLET_AUTONUM) { s.Skip2(5); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: bullet.bulletType.AutoNumType = s.GetUChar(); break; case 1: bullet.bulletType.startAt = s.GetLong(); break; default: break; } } } else { if (bullet.bulletType.type == BULLET_TYPE_BULLET_CHAR) { s.Skip2(6); bullet.bulletType.Char = s.GetString2(); s.Skip2(1); } } } } } s.Seek2(cur_pos + _len + 4); break; case 7: s.Skip2(4); var _c = s.GetULong(); if (0 != _c) { para_pr.Tabs = new CParaTabs(); var _value, _pos; for (var i = 0; i < _c; i++) { s.Skip2(6); _value = null; _pos = null; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: _value = s.GetUChar(); if (_value == 0) { _value = tab_Center; } else { if (_value == 3) { _value = tab_Right; } else { _value = tab_Left; } } break; case 1: _pos = s.GetLong() / 36000; break; default: break; } } para_pr.Tabs.Add(new CParaTab(_value, _pos)); } } break; case 8: var r_pr = this.ReadRunProperties(); if (r_pr) { para_pr.DefaultRunPr = new CTextPr(); if (r_pr.Unifill && !r_pr.Unifill.fill) { r_pr.Unifill = undefined; } para_pr.DefaultRunPr.Set_FromObject(r_pr); } default: s.SkipRecord(); } } if (b_bullet) { para_pr.Bullet = bullet; } s.Seek2(_end_rec); return para_pr; }; this.ReadTextListStyle = function () { var styles = new TextListStyle(); var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; while (s.cur < _end_rec) { var _at = s.GetUChar(); styles.levels[_at] = this.ReadTextParagraphPr(); } s.Seek2(_end_rec); return styles; }; this.ReadTextBody = function (shape) { var txbody; if (shape) { if (shape.txBody) { txbody = shape.txBody; } else { txbody = new CTextBody(); txbody.setParent(shape); } } else { txbody = new CTextBody(); } var s = this.stream; 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: txbody.setBodyPr(this.ReadBodyPr()); if (txbody.bodyPr && txbody.bodyPr.textFit) { this.textBodyTextFit.push(txbody); } break; case 1: txbody.setLstStyle(this.ReadTextListStyle()); break; case 2: s.Skip2(4); var _c = s.GetULong(); txbody.setContent(new CDocumentContent(txbody, this.presentation ? this.presentation.DrawingDocument : null, 0, 0, 0, 0, 0, 0, true)); if (_c > 0) { txbody.content.Internal_Content_RemoveAll(); } var _last_field_type = false; for (var i = 0; i < _c; i++) { s.Skip2(1); var _paragraph = this.ReadParagraph(txbody.content); txbody.content.Internal_Content_Add(txbody.content.Content.length, _paragraph); if (_paragraph.f_type != undefined || _paragraph.f_text != undefined || _paragraph.f_id != undefined) { _last_field_type = true; } } if (shape && (this.TempMainObject && typeof Slide !== "undefined" && this.TempMainObject instanceof Slide && shape.isPlaceholder && shape.isPlaceholder() && (shape.getPlaceholderType() === phType_sldNum || shape.getPlaceholderType() === phType_dt)) && _last_field_type) { var str_field = txbody.getFieldText(_last_field_type, this.TempMainObject, (this.presentation && this.presentation.pres && isRealNumber(this.presentation.pres.attrFirstSlideNum)) ? this.presentation.pres.attrFirstSlideNum : 1); if (str_field.length > 0) { txbody.content.Internal_Content_RemoveAll(); txbody.content.Internal_Content_Add(txbody.content.Content.length, new Paragraph(txbody.content.DrawingDocument, txbody.content, 0, 0, 0, 0, 0, true)); AddToContentFromString(txbody.content, str_field); if (_paragraph.f_runPr || _paragraph.f_paraPr) { txbody.content.Set_ApplyToAll(true); if (_paragraph.f_runPr) { var _value_text_pr = new CTextPr(); if (_paragraph.f_runPr.Unifill && !_paragraph.f_runPr.Unifill.fill) { _paragraph.f_runPr.Unifill = undefined; } _value_text_pr.Set_FromObject(_paragraph.f_runPr); txbody.content.Paragraph_Add(new ParaTextPr(_value_text_pr), false); delete _paragraph.f_runPr; } if (_paragraph.f_paraPr) { txbody.content.Content[0].Set_Pr(_paragraph.f_paraPr); delete _paragraph.f_paraPr; } txbody.content.Set_ApplyToAll(false); } } } break; default: break; } } s.Seek2(_end_rec); return txbody; }; this.ReadTextBodyTxPr = function (shape) { var txbody; if (shape.txPr) { txbody = shape.txPr; } else { shape.txPr = new CTextBody(); txbody = shape.txPr; } var s = this.stream; 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: shape.setBodyPr(this.ReadBodyPr()); break; case 1: txbody.setLstStyle(this.ReadTextListStyle()); break; case 2: s.Skip2(4); var _c = s.GetULong(); if (!txbody.content) { txbody.content = new CDocumentContent(shape, this.presentation ? this.presentation.DrawingDocument : null, 0, 0, 0, 0, 0, 0, true); } if (_c > 0) { txbody.content.Internal_Content_RemoveAll(); } var _last_field_type = false; for (var i = 0; i < _c; i++) { s.Skip2(1); var _paragraph = this.ReadParagraph(txbody.content); _paragraph.Set_Parent(txbody.content); txbody.content.Internal_Content_Add(txbody.content.Content.length, _paragraph); if (_paragraph.f_type != undefined || _paragraph.f_text != undefined || _paragraph.f_id != undefined) { _last_field_type = true; } } if (_last_field_type) {} break; default: break; } } s.Seek2(_end_rec); return txbody; }; this.ReadTextBody2 = function (content) { var s = this.stream; 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: s.SkipRecord(); break; case 2: s.Skip2(4); var _c = s.GetULong(); for (var i = 0; i < _c; i++) { s.Skip2(1); var _paragraph = this.ReadParagraph(content); content.Internal_Content_Add(content.Content.length, _paragraph); } break; default: break; } } s.Seek2(_end_rec); }; this.ReadParagraph = function (DocumentContent) { var par = new Paragraph(DocumentContent.DrawingDocument, DocumentContent, 0, 0, 0, 0, 0, true); var EndPos = 0; var s = this.stream; 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: par.Set_Pr(this.ReadTextParagraphPr()); break; case 1: var endRunPr = this.ReadRunProperties(); var _value_text_pr = new CTextPr(); if (endRunPr.Unifill && !endRunPr.Unifill.fill) { endRunPr.Unifill = undefined; } _value_text_pr.Set_FromObject(endRunPr); par.TextPr.Apply_TextPr(_value_text_pr); break; case 2: s.Skip2(4); var _c = s.GetULong(); for (var i = 0; i < _c; i++) { s.Skip2(5); var _type = s.GetUChar(); switch (_type) { case PARRUN_TYPE_RUN: var _end = s.cur + s.GetULong() + 4; s.Skip2(1); var _text = ""; while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { _text = s.GetString2(); } } var _run = null; while (s.cur < _end) { var _rec = s.GetUChar(); if (0 == _rec) { _run = this.ReadRunProperties(); } else { s.SkipRecord(); } } s.Seek2(_end); var new_run = new ParaRun(par, false), hyperlink = null; if (null != _run) { var text_pr = new CTextPr(); if (_run.Unifill && !_run.Unifill.fill) { _run.Unifill = undefined; } if (_run.hlink !== undefined) { hyperlink = new ParaHyperlink(); hyperlink.Set_Value(_run.hlink.url); if (!_run.Unifill) { _run.Unifill = CreateUniFillSchemeColorWidthTint(11, 0); } _run.Underline = true; } text_pr.Set_FromObject(_run); new_run.Set_Pr(text_pr); } var pos = 0; for (var j = 0, length = _text.length; j < length; ++j) { if (_text[j] == "\t") { new_run.Add_ToContent(pos++, new ParaTab(), false); } else { if (_text[j] == "\n") { new_run.Add_ToContent(pos++, new ParaNewLine(break_Line), false); } else { if (_text[j] == "\r") {} else { if (_text[j] != " ") { new_run.Add_ToContent(pos++, new ParaText(_text[j]), false); } else { new_run.Add_ToContent(pos++, new ParaSpace(1), false); } } } } } if (hyperlink !== null) { hyperlink.Add_ToContent(0, new_run, false); par.Internal_Content_Add(EndPos++, hyperlink); } else { par.Internal_Content_Add(EndPos++, new_run); } break; case PARRUN_TYPE_FLD: var _end = s.cur + s.GetULong() + 4; s.Skip2(1); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } if (0 == _at) { var f_id = s.GetString2(); } else { if (1 == _at) { var f_type = s.GetString2(); } else { var f_text = s.GetString2(); } } } var _rPr = null, _pPr = null; while (s.cur < _end) { var _at2 = s.GetUChar(); switch (_at2) { case 0: _rPr = this.ReadRunProperties(); break; case 1: _pPr = this.ReadTextParagraphPr(); break; default: break; } } par.f_id = f_id; par.f_type = f_type; par.f_text = f_text; par.f_runPr = _rPr; par.f_paraPr = _pPr; s.Seek2(_end); break; case PARRUN_TYPE_BR: var _end = s.cur + s.GetULong() + 4; var _run = null; while (s.cur < _end) { var _rec = s.GetUChar(); if (0 == _rec) { _run = this.ReadRunProperties(); } else { s.SkipRecord(); } } s.Seek2(_end); var new_run = new ParaRun(par, false), hyperlink = null; if (null != _run) { if (_run.hlink !== undefined) { hyperlink = new ParaHyperlink(); hyperlink.Set_Value(_run.hlink.url); } var text_pr = new CTextPr(); if (_run.Unifill && !_run.Unifill.fill) { _run.Unifill = undefined; } text_pr.Set_FromObject(_run); new_run.Set_Pr(text_pr); } new_run.Add_ToContent(0, new ParaNewLine(break_Line)); if (hyperlink !== null) { hyperlink.Add_ToContent(0, new_run, false); par.Internal_Content_Add(EndPos++, hyperlink); } else { par.Internal_Content_Add(EndPos++, new_run); } break; default: break; } } break; default: break; } } s.Seek2(_end_rec); return par; }; } function CApp() { this.Template = null; this.TotalTime = null; this.Words = null; this.Application = null; this.PresentationFormat = null; this.Paragraphs = null; this.Slides = null; this.Notes = null; this.HiddenSlides = null; this.MMClips = null; this.ScaleCrop = null; this.HeadingPairs = []; this.TitlesOfParts = []; this.Company = null; this.LinksUpToDate = null; this.SharedDoc = null; this.HyperlinksChanged = null; this.AppVersion = null; this.fromStream = function (s) { var _type = s.GetUChar(); var _len = s.GetULong(); var _sa = s.GetUChar(); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: this.Template = s.GetString2(); break; case 1: this.Application = s.GetString2(); break; case 2: this.PresentationFormat = s.GetString2(); break; case 3: this.Company = s.GetString2(); break; case 4: this.AppVersion = s.GetString2(); break; case 5: this.TotalTime = s.GetLong(); break; case 6: this.Words = s.GetLong(); break; case 7: this.Paragraphs = s.GetLong(); break; case 8: this.Slides = s.GetLong(); break; case 9: this.Notes = s.GetLong(); break; case 10: this.HiddenSlides = s.GetLong(); break; case 11: this.MMClips = s.GetLong(); break; case 12: this.ScaleCrop = s.GetBool(); break; case 13: this.LinksUpToDate = s.GetBool(); break; case 14: this.SharedDoc = s.GetBool(); break; case 15: this.HyperlinksChanged = s.GetBool(); break; default: return; } } }; } function CCore() { this.title = null; this.creator = null; this.lastModifiedBy = null; this.revision = null; this.created = null; this.modified = null; this.fromStream = function (s) { var _type = s.GetUChar(); var _len = s.GetULong(); var _sa = s.GetUChar(); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: this.title = s.GetString2(); break; case 1: this.creator = s.GetString2(); break; case 2: this.lastModifiedBy = s.GetString2(); break; case 3: this.revision = s.GetString2(); break; case 4: this.created = s.GetString2(); break; case 5: this.modified = s.GetString2(); break; default: return; } } }; } function CPres() { this.defaultTextStyle = null; this.SldSz = null; this.NotesSz = null; this.attrAutoCompressPictures = null; this.attrBookmarkIdSeed = null; this.attrCompatMode = null; this.attrConformance = null; this.attrEmbedTrueTypeFonts = null; this.attrFirstSlideNum = null; this.attrRemovePersonalInfoOnSave = null; this.attrRtl = null; this.attrSaveSubsetFonts = null; this.attrServerZoom = null; this.attrShowSpecialPlsOnTitleSld = null; this.attrStrictFirstAndLastChars = null; this.fromStream = function (s, reader) { var _type = s.GetUChar(); var _len = s.GetULong(); var _start_pos = s.cur; var _end_pos = _len + _start_pos; var _sa = s.GetUChar(); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: this.attrAutoCompressPictures = s.GetBool(); break; case 1: this.attrBookmarkIdSeed = s.GetLong(); break; case 2: this.attrCompatMode = s.GetBool(); break; case 3: this.attrConformance = s.GetUChar(); break; case 4: this.attrEmbedTrueTypeFonts = s.GetBool(); break; case 5: this.attrFirstSlideNum = s.GetLong(); break; case 6: this.attrRemovePersonalInfoOnSave = s.GetBool(); break; case 7: this.attrRtl = s.GetBool(); break; case 8: this.attrSaveSubsetFonts = s.GetBool(); break; case 9: this.attrServerZoom = s.GetString2(); break; case 10: this.attrShowSpecialPlsOnTitleSld = s.GetBool(); break; case 11: this.attrStrictFirstAndLastChars = s.GetBool(); break; default: return; } } while (true) { if (s.cur >= _end_pos) { break; } _type = s.GetUChar(); switch (_type) { case 0: this.defaultTextStyle = reader.ReadTextListStyle(); break; case 1: s.SkipRecord(); break; case 2: s.SkipRecord(); break; case 3: s.SkipRecord(); break; case 4: s.SkipRecord(); break; case 5: this.SldSz = {}; s.Skip2(5); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: this.SldSz.cx = s.GetLong(); break; case 1: this.SldSz.cy = s.GetLong(); break; case 2: this.SldSz.type = s.GetUChar(); break; default: return; } } break; case 6: var _end_rec2 = s.cur + s.GetULong() + 4; while (s.cur < _end_rec2) { var _rec = s.GetUChar(); switch (_rec) { case 0: s.Skip2(4); var lCount = s.GetULong(); for (var i = 0; i < lCount; i++) { s.Skip2(1); var _author = new CCommentAuthor(); var _end_rec3 = s.cur + s.GetLong() + 4; s.Skip2(1); while (true) { var _at2 = s.GetUChar(); if (_at2 == g_nodeAttributeEnd) { break; } switch (_at2) { case 0: _author.Id = s.GetLong(); break; case 1: _author.LastId = s.GetLong(); break; case 2: var _clr_idx = s.GetLong(); break; case 3: _author.Name = s.GetString2(); break; case 4: _author.Initials = s.GetString2(); break; default: break; } } s.Seek2(_end_rec3); reader.presentation.CommentAuthors[_author.Name] = _author; } break; default: s.SkipRecord(); break; } } s.Seek2(_end_rec2); break; default: s.Seek2(_end_pos); return; } } s.Seek2(_end_pos); }; }