/* * (c) Copyright Ascensio System SIA 2010-2014 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, * EU, LV-1021. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ 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 = new Object(); this.NextTableStyleId = 0; this.ImageMapChecker = null; this.IsUseFullSrc = false; this.RebuildImages = []; this.Start_UseFullUrl = function () { this.IsUseFullUrl = true; }; this.End_UseFullUrl = function () { var _result = this.RebuildImages; this.IsUseFullUrl = false; this.RebuildImages = []; return _result; }; this.Load = function (base64_ppty, presentation) { this.presentation = presentation; this.ImageMapChecker = new Object(); 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 = new Object(); this.presentation.Fonts = new Array(); this.presentation.EmbeddedFonts = new Array(); 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 (this.presentation.globalTableStyles.length == 0) { this.presentation.globalTableStyles[0] = CreateDefaultStylesForTables(); } } } 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].Width = this.presentation.Width; this.presentation.slideMasters[i].Height = 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(); } } 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)); } } 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 = new Object(); 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]); 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 _styles = this.presentation.globalTableStyles; var s = this.stream; var _type = s.GetUChar(); 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 _def = s.GetString2(); break; default: break; } } var _type = s.GetUChar(); s.Skip2(4); while (s.cur < _end_rec) { s.Skip2(1); this.ReadTableStyle(); } 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(); this.map_table_styles[_id] = this.NextTableStyleId; this.NextTableStyleId++; 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); this.presentation.globalTableStyles[this.presentation.globalTableStyles.length] = _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); while (true) { var _at2 = s.GetUChar(); if (_at2 == g_nodeAttributeEnd) { break; } switch (_at2) { case 0: var _i = s.GetUChar(); break; case 1: var _b = s.GetUChar(); break; default: break; } } while (s.cur < _end_rec2) { var _at3 = s.GetUChar(); switch (_at3) { case 0: _part.TextPr.fontRef = this.ReadFontRef(); break; case 1: _part.TextPr.unifill = new CUniFill(); _part.TextPr.unifill.fill = new CSolidFill(); _part.TextPr.unifill.fill.color = this.ReadUniColor(); 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 == _style.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 == _style.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.lnRef = 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.color = new CPrstColor(); uni_color.color.id = s.GetString2(); s.Skip2(1); if (s.cur < _e) { if (0 == s.GetUChar()) { uni_color.Mods.Mods = this.ReadColorModifiers(); } } break; case COLOR_TYPE_SCHEME: s.Skip2(2); uni_color.color = new CSchemeColor(); uni_color.color.id = s.GetUChar(); s.Skip2(1); if (s.cur < _e) { if (0 == s.GetUChar()) { uni_color.Mods.Mods = this.ReadColorModifiers(); } } break; case COLOR_TYPE_SRGB: s.Skip2(1); uni_color.color = new CRGBColor(); s.Skip2(1); uni_color.color.RGBA.R = s.GetUChar(); s.Skip2(1); uni_color.color.RGBA.G = s.GetUChar(); s.Skip2(1); uni_color.color.RGBA.B = s.GetUChar(); s.Skip2(1); if (s.cur < _e) { if (0 == s.GetUChar()) { uni_color.Mods.Mods = this.ReadColorModifiers(); } } break; case COLOR_TYPE_SYS: s.Skip2(1); uni_color.color = new CSysColor(); while (true) { var _at = s.GetUChar(); if (_at == g_nodeAttributeEnd) { break; } switch (_at) { case 0: uni_color.color.id = s.GetString2(); break; case 1: uni_color.color.RGBA.R = s.GetUChar(); break; case 2: uni_color.color.RGBA.G = s.GetUChar(); break; case 3: uni_color.color.RGBA.B = s.GetUChar(); break; default: break; } } if (s.cur < _e) { if (0 == s.GetUChar()) { uni_color.Mods.Mods = this.ReadColorModifiers(); } } break; } } s.Seek2(read_end); return uni_color; }; 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 = new Array(); } var _mod = new CColorMod(); _ret[_ret.length] = _mod; while (true) { var _type = s.GetUChar(); if (0 == _type) { _mod.name = s.GetString2(); var _find = _mod.name.indexOf(":"); if (_find >= 0 && _find < (_mod.name.length - 1)) { _mod.name = _mod.name.substring(_find + 1); } } else { if (1 == _type) { _mod.val = s.GetLong(); } else { if (g_nodeAttributeEnd == _type) { break; } else { break; } } } } } s.Seek2(_e1); } s.Seek2(_end); return _ret; }; this.ReadRect = function (bIsMain) { var _ret = new CSrcRect(); 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; } 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.angle = s.GetLong(); break; case 1: _lin.scale = 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.path = 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.fill = 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.transparent = (255 * s.GetLong() / 100000) >> 0; } } s.Seek2(_e22); } else { s.SkipRecord(); } } break; case 3: s.Skip2(6); uni_fill.fill.RasterImageId = s.GetString2(); var _s = uni_fill.fill.RasterImageId; var indS = _s.indexOf("emf"); if (indS == -1) { indS = _s.indexOf("wmf"); } if (indS != -1) { _s = _s.substring(0, indS); _s += "svg"; uni_fill.fill.RasterImageId = _s; } if (this.IsThemeLoader) { uni_fill.fill.RasterImageId = "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.srcRect = this.ReadRect(true); break; case 2: uni_fill.fill.tile = 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.srcRect = _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.fill = 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(); 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(); uni_fill.fill.colors[uni_fill.fill.colors.length] = _gs; } s.Seek2(_e1); uni_fill.fill.colors.sort(function (a, b) { return a.pos - b.pos; }); break; case 1: uni_fill.fill.lin = this.ReadGradLin(); break; case 2: uni_fill.fill.path = 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.path = null; } } break; case FILL_TYPE_PATT: uni_fill.fill = new CPattFill(); s.Skip2(1); while (true) { var _atPF = s.GetUChar(); if (_atPF == g_nodeAttributeEnd) { break; } switch (_atPF) { case 0: uni_fill.fill.ftype = s.GetUChar(); break; default: break; } } while (s.cur < _e) { var rec = s.GetUChar(); switch (rec) { case 0: uni_fill.fill.fgClr = this.ReadUniColor(); break; case 1: uni_fill.fill.bgClr = this.ReadUniColor(); break; default: s.SkipRecord(); } } break; case FILL_TYPE_SOLID: s.Skip2(1); uni_fill.fill = new CSolidFill(); uni_fill.fill.color = this.ReadUniColor(); 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.transparent = (255 * mods[i].val / 100000) >> 0; mods.splice(i, 1); break; } } break; case FILL_TYPE_NOFILL: uni_fill.fill = 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: this.ReadClrScheme(extra.clrScheme); break; case 1: extra.clrMap = 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.name = s.GetString2(); } } while (s.cur < _e) { var _rec = s.GetUChar(); clrscheme.colors[_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.color_map[_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.algn = s.GetUChar(); break; case 1: ln.cap = s.GetUChar(); break; case 2: ln.cmpd = s.GetUChar(); break; case 3: ln.w = s.GetLong(); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: ln.Fill = this.ReadUniFill(); break; case 1: s.SkipRecord(); break; case 2: ln.Join = this.ReadLineJoin(); break; case 3: ln.headEnd = this.ReadLineEnd(); break; case 4: ln.tailEnd = 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.type = s.GetUChar(); break; case 1: endL.w = s.GetUChar(); break; case 2: endL.len = 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.type = s.GetLong(); break; case 1: join.limit = 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) { 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.idx = s.GetLong(); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: ref.Color = 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.idx = s.GetUChar(); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: ref.Color = 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 { 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.name = 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.latin = this.ReadTextFontTypeface(); break; case 1: fontcolls.ea = this.ReadTextFontTypeface(); break; case 2: fontcolls.cs = 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.name = 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.bwMode = s.GetUChar(); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: spPr.xfrm = this.ReadXfrm(); break; case 1: spPr.geometry = this.ReadGeometry(spPr.xfrm); break; case 2: spPr.Fill = this.ReadUniFill(); break; case 3: spPr.ln = 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.bwMode = s.GetUChar(); } else { break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: spPr.xfrm = this.ReadXfrm(); break; case 1: spPr.Fill = 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.offX = s.GetLong() / c_dScalePPTXSizes; break; case 1: ret.offY = s.GetLong() / c_dScalePPTXSizes; break; case 2: ret.extX = s.GetLong() / c_dScalePPTXSizes; break; case 3: ret.extY = s.GetLong() / c_dScalePPTXSizes; break; case 4: ret.chOffX = s.GetLong() / c_dScalePPTXSizes; break; case 5: ret.chOffY = s.GetLong() / c_dScalePPTXSizes; break; case 6: ret.chExtX = s.GetLong() / c_dScalePPTXSizes; break; case 7: ret.chExtY = s.GetLong() / c_dScalePPTXSizes; break; case 8: ret.flipH = s.GetBool(); break; case 9: ret.flipV = s.GetBool(); break; case 10: ret.rot = (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.lnRef = this.ReadStyleRef(); break; case 1: def.fillRef = this.ReadStyleRef(); break; case 2: def.effectRef = this.ReadStyleRef(); break; case 3: def.fontRef = 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.preset = 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; 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); break; case 2: shape.setStyle(this.ReadShapeStyle()); break; case 3: shape.setTextBody(new CTextBody(shape)); shape.setTextBody(this.ReadTextBody(shape)); break; default: break; } } s.Seek2(_end_rec); return shape; }; this.ReadGroupShape = function () { var s = this.stream; var shape = new CGroupShape(this.TempMainObject); if (null != this.TempGroupObject) { shape.Container = this.TempGroupObject; } 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); 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 = new Array(); 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; } break; case 2: var _object = this.ReadPic(); if (!IsHiddenObj(_object)) { shapes[shapes.length] = _object; } break; case 3: var _object = this.ReadCxn(); if (!IsHiddenObj(_object)) { shapes[shapes.length] = _object; } break; case 4: var _object = this.ReadGroupShape(); if (!IsHiddenObj(_object)) { shapes[shapes.length] = _object; } break; case 5: var _ret = this.ReadGrFrame(); if (null != _ret) { shapes[shapes.length] = _ret; } 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); if (null != this.TempGroupObject) { pic.Container = this.TempGroupObject; } 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()); break; case 2: var spPr = new CSpPr(); 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(this.TempMainObject); if (null != this.TempGroupObject) { shape.Container = this.TempGroupObject; } 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.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; _chart = new CChartAsGroup(this.TempGroupObject); if (g_oTableId) { g_oTableId.m_bTurnOff = true; } var chart = new asc_CChart(); if (g_oTableId) { g_oTableId.m_bTurnOff = false; } var _stream = new FT_Stream2(); _stream.data = s.data; _stream.pos = s.pos; _stream.cur = s.cur; _stream.size = s.size; var oBinary_ChartReader = new Binary_ChartReader(_stream, chart, _chart); oBinary_ChartReader.ReadExternal(_length); if (null != chart.range.interval && chart.range.interval.length > 0) { if (_xfrm) { if (_chart.setXfrm) { _chart.setXfrm(_xfrm.offX, _xfrm.offY, _xfrm.extX, _xfrm.extY, _xfrm.rot, _xfrm.flipH, _xfrm.flipV); } else { _chart.setPosition(_xfrm.offX, _xfrm.offY); _chart.setExtents(_xfrm.extX, _xfrm.extY); } } _chart.setAscChart(chart); } else { _chart = null; } 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(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 CChartAsGroup !== "undefined") { _chart = new CChartAsGroup(this.TempMainObject); var _stream = new FT_Stream2(); _stream.data = s.data; _stream.pos = s.pos; _stream.cur = s.cur; _stream.size = s.size; var oBinary_ChartReader = new Binary_ChartReader(_stream, _chart.chart, _chart); oBinary_ChartReader.ReadExternal(_length); if (null == _chart.chart.range.interval || _chart.chart.range.interval.length <= 0) { _chart = null; } } s.Seek2(_pos + _length); break; default: break; } } s.Seek2(_end_rec); this.TempGroupObject = null; if (_table == null && _chart == null) { return null; } if (_table != null) { _graphic_frame.spPr.xfrm = _xfrm; _graphic_frame.setSpPr(_graphic_frame.spPr); _graphic_frame.setNvSpPr(_nvGraphicFramePr); _graphic_frame.setGraphicObject(_table); } else { if (_chart != null) { _chart.spPr.xfrm = _xfrm; _chart.setAscChart(_chart.chart); _chart.setSpPr(_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, false, 0, 0, 0, _xfrm.extX, _xfrm.extY, rows, cols.length, cols); if (null != props) { _table.Set_Pr(props.props); _table.Set_TableLook(props.look); _table.Set_TableStyle(props.style); } 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 (row.Content.length == _count) { for (var i = 0; i < _count; i++) { s.Skip2(1); var bIsNoHMerge = this.ReadCell(row.Content[i]); if (bIsNoHMerge === false) { row.Content.splice(i, 1); i--; _count--; } } } 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.Pr.VMerge = vmerge_Restart; } break; case 2: cell.Pr.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.Pr.VMerge = vmerge_Continue; } break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: this.ReadCellProps(cell.Pr); 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; props.TableCellMar = new Object(); props.TableCellMar.Top = new CTableMeasurement(tblwidth_Mm, 1.27); props.TableCellMar.Left = new CTableMeasurement(tblwidth_Mm, 2.54); props.TableCellMar.Bottom = new CTableMeasurement(tblwidth_Mm, 1.27); props.TableCellMar.Right = new CTableMeasurement(tblwidth_Mm, 2.54); 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: props.TableCellBorders.Left = this.ReadTableBorderLn(); break; case 1: props.TableCellBorders.Top = this.ReadTableBorderLn(); break; case 2: props.TableCellBorders.Right = this.ReadTableBorderLn(); break; case 3: 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 = new Object(); 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: var ind = this.map_table_styles[s.GetString2()]; if (undefined !== ind) { obj.style = ind; } 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.isPhoto = s.GetBool(); break; case 1: nvPr.userDrawn = s.GetBool(); break; default: break; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: nvPr.ph = 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.hasCustomPrompt = s.GetBool(); break; case 1: ph.idx = s.GetString2(); break; case 2: ph.orient = s.GetUChar(); break; case 3: ph.sz = s.GetUChar(); break; case 4: ph.type = 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: s.Skip2(4); 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: var _font_latin = this.ReadTextFontTypeface(); rPr.FontFamily = { Name: _font_latin, Index: -1 }; rPr.RFonts.Ascii = { Name: _font_latin, Index: -1 }; rPr.RFonts.EastAsia = { Name: _font_latin, Index: -1 }; rPr.RFonts.HAnsi = { Name: _font_latin, Index: -1 }; rPr.RFonts.CS = { Name: _font_latin, Index: -1 }; break; case 4: var ea = this.ReadTextFontTypeface(); break; case 5: var cs = this.ReadTextFontTypeface(); break; case 6: var sym = this.ReadTextFontTypeface(); 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 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: tPr.pPr.Jc = align_Center; break; case 1: tPr.pPr.Jc = align_Justify; break; case 2: tPr.pPr.Jc = align_Justify; break; case 3: tPr.pPr.Jc = align_Justify; break; case 4: tPr.pPr.Jc = align_Left; break; case 5: tPr.pPr.Jc = align_Right; break; case 6: tPr.pPr.Jc = align_Justify; break; default: tPr.pPr.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: if (undefined === tPr.pPr.Ind) { tPr.pPr.Ind = new Object(); } tPr.pPr.Ind.FirstLine = s.GetLong() / 36000; break; case 6: s.Skip2(1); break; case 7: tPr.lvl = s.GetLong(); break; case 8: if (undefined === tPr.pPr.Ind) { tPr.pPr.Ind = new Object(); } tPr.pPr.Ind.Left = s.GetLong() / 36000; break; case 9: if (undefined === tPr.pPr.Ind) { tPr.pPr.Ind = new Object(); } tPr.pPr.Ind.Right = s.GetLong() / 36000; break; case 10: s.Skip2(1); break; default: break; } } 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: if (tPr.pPr.Spacing == undefined) { tPr.pPr.Spacing = {}; } Pct = s.GetLong(); tPr.pPr.Spacing.Line = Pct / 100000; tPr.pPr.Spacing.LineRule = linerule_Auto; break; case 1: if (tPr.pPr.Spacing == undefined) { tPr.pPr.Spacing = {}; } Pts = s.GetLong(); tPr.pPr.Spacing.Line = Pts * 0.00352777778; tPr.pPr.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(); if (tPr.pPr.Spacing == undefined) { tPr.pPr.Spacing = {}; } tPr.pPr.Spacing.After = 0; break; case 1: Pts = s.GetLong(); if (tPr.pPr.Spacing == undefined) { tPr.pPr.Spacing = {}; } tPr.pPr.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(); if (tPr.pPr.Spacing == undefined) { tPr.pPr.Spacing = {}; } tPr.pPr.Spacing.Before = 0; break; case 1: Pts = s.GetLong(); if (tPr.pPr.Spacing == undefined) { tPr.pPr.Spacing = {}; } tPr.pPr.Spacing.Before = Pts * 0.00352777778; break; default: break; } } break; case 3: tPr.bullet.bulletColor = new CBulletColor(); var cur_pos = s.cur; var _len = s.GetULong(); if (0 != _len) { tPr.bullet.bulletColor.type = s.GetUChar(); if (tPr.bullet.bulletColor.type == BULLET_TYPE_COLOR_CLRTX) { s.SkipRecord(); } else { var _l = s.GetULong(); s.Skip2(1); tPr.bullet.bulletColor.UniColor = this.ReadUniColor(); } } s.Seek2(cur_pos + _len + 4); break; case 4: tPr.bullet.bulletSize = new CBulletSize(); var cur_pos = s.cur; var _len = s.GetULong(); if (0 != _len) { tPr.bullet.bulletSize.type = s.GetUChar(); if (tPr.bullet.bulletSize.type == BULLET_TYPE_SIZE_TX) { s.SkipRecord(); } else { var _l = s.GetULong(); s.Skip2(2); tPr.bullet.bulletSize.val = s.GetLong(); s.Skip2(1); } } s.Seek2(cur_pos + _len + 4); break; case 5: tPr.bullet.bulletTypeface = new CBulletTypeface(); var cur_pos = s.cur; var _len = s.GetULong(); if (0 != _len) { tPr.bullet.bulletTypeface.type = s.GetUChar(); if (tPr.bullet.bulletTypeface.type == BULLET_TYPE_TYPEFACE_BUFONT) { tPr.bullet.bulletTypeface.typeface = this.ReadTextFontTypeface(); } else { s.SkipRecord(); } } s.Seek2(cur_pos + _len + 4); break; case 6: tPr.bullet.bulletType = new CBulletType(); var cur_pos = s.cur; var _len = s.GetULong(); if (0 != _len) { tPr.bullet.bulletType.type = s.GetUChar(); if (tPr.bullet.bulletType.type == BULLET_TYPE_BULLET_NONE) { s.SkipRecord(); } else { if (tPr.bullet.bulletType.type == BULLET_TYPE_BULLET_BLIP) { s.SkipRecord(); } else { if (tPr.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: tPr.bullet.bulletType.AutoNumType = s.GetUChar(); break; case 1: tPr.bullet.bulletType.startAt = s.GetLong(); break; default: break; } } } else { if (tPr.bullet.bulletType.type == BULLET_TYPE_BULLET_CHAR) { s.Skip2(6); tPr.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) { tPr.pPr.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; } } tPr.pPr.Tabs.Add(new CParaTab(_value, _pos)); } } break; case 8: tPr.rPr = this.ReadRunProperties(); if (tPr.pPr.defRPr !== null && typeof tPr.pPr.defRPr === "object" && typeof tPr.pPr.defRPr.Set_FromObject === " function") { tPr.pPr.defRPr.Set_FromObject(tPr.rPr); } default: s.SkipRecord(); } } s.Seek2(_end_rec); return tPr; }; 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.txBody) { txbody = shape.txBody; } else { shape.setTextBody(new CTextBody(shape)); txbody = shape.txBody; } 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); } 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) { txbody.textFieldFlag = true; } 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(shape); 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); } 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) { txbody.textFieldFlag = true; } 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); var EndPos = par.Internal_GetEndPos(); var s = this.stream; var _rec_start = s.cur; var _end_rec = _rec_start + s.GetULong() + 4; var textPropsForRecalc; if (DocumentContent.Parent instanceof CTextBody) { textPropsForRecalc = DocumentContent.Parent.textPropsForRecalc; } else { if (DocumentContent.Parent instanceof CTableCell && DocumentContent.Parent.Row && DocumentContent.Parent.Row.Table && DocumentContent.Parent.Row.Table.Parent && DocumentContent.Parent.Row.Table.Parent.textPropsForRecalc) { textPropsForRecalc = DocumentContent.Parent.Row.Table.Parent.textPropsForRecalc; } } while (s.cur < _end_rec) { var _at = s.GetUChar(); switch (_at) { case 0: var textProperties = this.ReadTextParagraphPr(); if (textProperties.pPr != undefined) { if (par.Set_Pr) { par.Set_Pr(textProperties.pPr); } else { par.Pr = textProperties.pPr; } } if (textProperties.rPr != undefined) { par.rPr = textProperties.rPr; } if (textProperties.bullet) { if (par.setPresentationBullet) { par.setPresentationBullet(textProperties.bullet); } } if (textProperties.lvl != undefined) { par.Set_PresentationLevel(textProperties.lvl); } else { par.Set_PresentationLevel(0); } break; case 1: var endRunPr = this.ReadRunProperties(); var _value_text_pr = new CTextPr(); _value_text_pr.Set_FromObject(endRunPr); if (typeof par.setTextPr === "function") { par.setTextPr(new ParaTextPr()); } par.TextPr.Apply_TextPr(_value_text_pr); if (Array.isArray(textPropsForRecalc)) { textPropsForRecalc.push(par.TextPr); } 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 bIsHyper = false; if (null != _run) { if (_run.hlink !== undefined) { var unifill = new CUniFill(); unifill.fill = new CSolidFill(); if (!unifill.fill.color) { unifill.fill.color = new CUniColor(); } unifill.fill.color.color = new CSchemeColor(); unifill.fill.color.color.id = 11; var hlink = _run.hlink; delete _run.hlink; _run.unifill = unifill; _run.Underline = true; var tx_pr = new ParaTextPr(_run); if (textPropsForRecalc) { textPropsForRecalc.push(tx_pr); } par.Internal_Content_Add(EndPos++, tx_pr); bIsHyper = true; var hypStart = new ParaHyperlinkStart(); hypStart.Value = hlink.url; par.Internal_Content_Add(EndPos++, hypStart); } else { var tx_pr = new ParaTextPr(_run); if (textPropsForRecalc) { textPropsForRecalc.push(tx_pr); } par.Internal_Content_Add(EndPos++, tx_pr); } } for (var j = 0, length = _text.length; j < length; ++j) { if (_text[j] == "\t") { par.Internal_Content_Add(EndPos++, new ParaTab()); } else { if (_text[j] == "\n") { par.Internal_Content_Add(EndPos++, new ParaNewLine(break_Line)); } else { if (_text[j] == "\r") {} else { if (_text[j] != " ") { par.Internal_Content_Add(EndPos++, new ParaText(_text[j])); } else { par.Internal_Content_Add(EndPos++, new ParaSpace(1)); } } } } } if (bIsHyper) { par.Internal_Content_Add(EndPos++, new ParaHyperlinkEnd()); } 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(); } } } par.f_id = f_id; par.f_type = f_type; par.f_text = f_text; 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 bIsHyper = false; if (null != _run) { if (_run.hlink !== undefined) { var unifill = new CUniFill(); unifill.fill = new CSolidFill(); unifill.fill.color.color = new CSchemeColor(); unifill.fill.color.color.id = g_clr_hlink; var hlink = _run.hlink; delete _run.hlink; _run.unifill = unifill; _run.Underline = true; var tx_pr = new ParaTextPr(_run); if (textPropsForRecalc) { textPropsForRecalc.push(tx_pr); } par.Internal_Content_Add(EndPos++, tx_pr); bIsHyper = true; var hypStart = new ParaHyperlinkStart(); hypStart.Value = hlink.url; par.Internal_Content_Add(EndPos++, hypStart); } else { var tx_pr = new ParaTextPr(_run); if (textPropsForRecalc) { textPropsForRecalc.push(tx_pr); } par.Internal_Content_Add(EndPos++, tx_pr); } } par.Internal_Content_Add(EndPos++, new ParaNewLine(break_Line)); if (bIsHyper) { par.Internal_Content_Add(EndPos++, new ParaHyperlinkEnd()); } break; default: break; } } break; default: break; } } s.Seek2(_end_rec); if (par.IsEmpty() && endRunPr) { var tx_pr = new ParaTextPr(endRunPr); if (textPropsForRecalc) { textPropsForRecalc.push(tx_pr); } par.Internal_Content_Add(EndPos++, tx_pr); } if (textPropsForRecalc) { textPropsForRecalc.push({ Value: { unifill: par.folHlinkColor } }); } 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 = new Array(); this.TitlesOfParts = new Array(); 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 = new Object(); 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); }; }