├── .gitignore ├── .gitmodules ├── .jscs.json ├── .jshintrc ├── .npmignore ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── README.md ├── bin └── ppt.njs ├── bits ├── 00_header.js ├── 01_version.js ├── 20_helpers.js ├── 50_odraw.js ├── 62_basic.js ├── 63_fstypes.js ├── 64_doctype.js ├── 65_slidetypes.js ├── 66_sstypes.js ├── 67_shapetypes.js ├── 69_text.js ├── 70_external.js ├── 71_misctypes.js ├── 75_parsetab.js ├── 80_ppt.js ├── 90_utils.js ├── 98_exports.js └── 99_footer.js ├── dist ├── LICENSE ├── cpexcel.js ├── ppt.core.min.js ├── ppt.core.min.map ├── ppt.full.min.js ├── ppt.full.min.map ├── ppt.js ├── ppt.min.js └── ppt.min.map ├── package.json └── ppt.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | misc/coverage.html 3 | misc/prof.js 4 | v8.log 5 | tmp 6 | *.ppt 7 | *.pptx 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "test_files_pres"] 2 | path = test_files_pres 3 | url = https://github.com/SheetJS/test_files_pres 4 | [submodule "test_files"] 5 | path = test_files 6 | url = https://github.com/SheetJS/test_files_pres 7 | -------------------------------------------------------------------------------- /.jscs.json: -------------------------------------------------------------------------------- 1 | { 2 | "requireCommaBeforeLineBreak": true, 3 | "disallowTrailingWhitespace": true, 4 | "disallowTrailingComma": true 5 | } 6 | 7 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "bitwise": false, 3 | "curly": false 4 | } 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | test_files/ 2 | index.html 3 | misc/ 4 | node_modules 5 | tmp 6 | *.ppt 7 | *.pptx 8 | .gitignore 9 | .jshintrc 10 | CONTRIBUTING.md 11 | Makefile 12 | tests.lst 13 | .npmignore 14 | shim.js 15 | test.js 16 | .jscs.json 17 | .gitmodules 18 | .travis.yml 19 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | The SheetJS Libraries should be free and clear to use in your projects. In 4 | order to maintain that, every contributor must be vigilant. 5 | 6 | There have been many projects in the past that have been very lax regarding 7 | licensing, and we are of the opinion that those are ticking timebombs and that 8 | no corporate product should depend on them. 9 | 10 | 11 | # Required Reading 12 | 13 | These are pretty short reads and emphasize the importance of proper licensing: 14 | 15 | - https://github.com/kennethreitz/tablib/issues/114 (discussion of other tools) 16 | 17 | - http://www.codinghorror.com/blog/2007/04/pick-a-license-any-license.html 18 | 19 | 20 | # Raising Issues 21 | 22 | Issues should generally be accompanied by test files. Since github does not 23 | support attachments, the best method is to send files to 24 | (subject line should contain issue number or message) or to share using some 25 | storage service. Unless expressly permitted, any attachments will not be 26 | shared or included in a test suite (although I will ask :) 27 | 28 | # Pre-Contribution Checklist 29 | 30 | Before thinking about contributing, make sure that: 31 | 32 | - You are not, nor have ever been, an employee of Microsoft Corporation. 33 | 34 | - You have not signed any NDAs or Shared Source Agreements with Microsoft 35 | Corporation or a subsidiary 36 | 37 | - You have not consulted any existing relevant codebase (if you have, please 38 | take note of which codebases were consulted). 39 | 40 | If you cannot attest to each of these items, the best approach is to raise an 41 | issue. If it is a particularly high-priority issue, please drop an email to 42 | and it will be prioritized. 43 | 44 | 45 | # Intra-Contribution 46 | 47 | Keep these in mind as you work: 48 | 49 | - Your contributions are your original work. Take note of any resources you 50 | consult in the process (and be extra careful not to use unlicensed code on 51 | the internet. 52 | 53 | - You are working on your own time. Unless they explicitly grant permission, 54 | your employer may be the ultimate owner of your IP 55 | 56 | 57 | # Post-Contribution 58 | 59 | Before contributions are merged, you will receive an email (at the address 60 | associated with the git commit) and will be asked to confirm the aforementioned 61 | items. 62 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2014 SheetJS 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | LIB=ppt 2 | DEPS=$(sort $(wildcard bits/*.js)) 3 | TARGET=$(LIB).js 4 | FMT=ppt misc full 5 | REQS= 6 | ADDONS=dist/cpexcel.js 7 | 8 | $(TARGET): $(DEPS) 9 | cat $^ | tr -d '\15\32' > $@ 10 | 11 | bits/01_version.js: package.json 12 | echo "PPT.version = '"`grep version package.json | awk '{gsub(/[^0-9a-z\.-]/,"",$$2); print $$2}'`"';" > $@ 13 | 14 | .PHONY: clean 15 | clean: 16 | rm -f $(TARGET) 17 | 18 | .PHONY: clean-data 19 | clean-data: 20 | rm -f *.ppt 21 | 22 | .PHONY: init 23 | init: 24 | git submodule init 25 | git submodule update 26 | git submodule foreach git pull origin master 27 | #git submodule foreach make 28 | 29 | 30 | .PHONY: test mocha 31 | test mocha: test.js 32 | mkdir -p tmp 33 | mocha -R spec -t 20000 34 | 35 | .PHONY: prof 36 | prof: 37 | cat misc/prof.js test.js > prof.js 38 | node --prof prof.js 39 | 40 | TESTFMT=$(patsubst %,test_%,$(FMT)) 41 | .PHONY: $(TESTFMT) 42 | $(TESTFMT): test_%: 43 | FMTS=$* make test 44 | 45 | 46 | .PHONY: lint 47 | lint: $(TARGET) 48 | jshint --show-non-errors $(TARGET) 49 | jscs $(TARGET) 50 | 51 | 52 | .PHONY: cov cov-spin 53 | cov: misc/coverage.html 54 | cov-spin: 55 | make cov & bash misc/spin.sh $$! 56 | 57 | COVFMT=$(patsubst %,cov_%,$(FMT)) 58 | .PHONY: $(COVFMT) 59 | $(COVFMT): cov_%: 60 | FMTS=$* make cov 61 | 62 | misc/coverage.html: $(TARGET) test.js 63 | mocha --require blanket -R html-cov > $@ 64 | 65 | .PHONY: coveralls coveralls-spin 66 | coveralls: 67 | mocha --require blanket --reporter mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js 68 | 69 | coveralls-spin: 70 | make coveralls & bash misc/spin.sh $$! 71 | 72 | bower.json: misc/_bower.json package.json 73 | cat $< | sed 's/_VERSION_/'`grep version package.json | awk '{gsub(/[^0-9a-z\.-]/,"",$$2); print $$2}'`'/' > $@ 74 | 75 | .PHONY: dist 76 | dist: dist-deps $(TARGET) 77 | cp $(TARGET) dist/ 78 | cp LICENSE dist/ 79 | uglifyjs $(TARGET) -o dist/$(LIB).min.js --source-map dist/$(LIB).min.map --preamble "$$(head -n 1 bits/00_header.js)" 80 | uglifyjs $(REQS) $(TARGET) -o dist/$(LIB).core.min.js --source-map dist/$(LIB).core.min.map --preamble "$$(head -n 1 bits/00_header.js)" 81 | uglifyjs $(REQS) $(ADDONS) $(TARGET) -o dist/$(LIB).full.min.js --source-map dist/$(LIB).full.min.map --preamble "$$(head -n 1 bits/00_header.js)" 82 | 83 | .PHONY: dist-deps 84 | dist-deps: 85 | cp node_modules/codepage/dist/cpexcel.full.js dist/cpexcel.js 86 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ppt 2 | 3 | Parser and writer for PowerPoint PPT files. Pure-JS cleanroom implementation 4 | from the Microsoft Open Specifications and related documents. 5 | 6 | ## Installation 7 | 8 | In [nodejs](https://www.npmjs.org/package/ppt): 9 | 10 | npm install ppt 11 | 12 | ## CLI Tool 13 | 14 | The node module ships with a binary `ppt` that dumps the text content of a PPT 15 | presentation. The only argument is the file name: 16 | 17 | ``` 18 | $ ppt test.ppt 19 | ... 20 | ``` 21 | 22 | ## Contributing 23 | 24 | Due to the precarious nature of the Open Specifications Promise, it is very 25 | important to ensure code is cleanroom. Consult CONTRIBUTING.md 26 | 27 | ## License 28 | 29 | Please consult the attached LICENSE file for details. All rights not explicitly 30 | granted by the Apache 2.0 license are reserved by the Original Author. 31 | 32 | It is the opinion of the Original Author that this code conforms to the terms of 33 | the Microsoft Open Specifications Promise, falling under the same terms as 34 | OpenOffice (which is governed by the Apache License v2). Given the vagaries of 35 | the promise, the Original Author makes no legal claim that in fact end users are 36 | protected from future actions. It is highly recommended that, for commercial 37 | uses, you consult a lawyer before proceeding. 38 | 39 | ## References 40 | 41 | OSP-covered specifications: 42 | 43 | - [MS-PPT]: PowerPoint (.ppt) Binary File Format 44 | - [MS-ODRAW]: Office Drawing Binary File Format 45 | 46 | ## Badges 47 | 48 | [![Build Status](https://travis-ci.org/SheetJS/js-ppt.svg?branch=master)](https://travis-ci.org/SheetJS/js-ppt) 49 | 50 | [![Coverage Status](http://img.shields.io/coveralls/SheetJS/js-ppt/master.svg)](https://coveralls.io/r/SheetJS/js-ppt?branch=master) 51 | 52 | [![Analytics](https://ga-beacon.appspot.com/UA-36810333-1/js-ppt/README?pixel)](https://ga-beacon.appspot.com/UA-36810333-1/js-ppt/README?pixel) 53 | -------------------------------------------------------------------------------- /bin/ppt.njs: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | /* vim: set ts=2: */ 3 | var PPT = require('../'); 4 | var filename = process.argv[2]; 5 | var opts = {}; 6 | 7 | if(filename === "--dev") { 8 | opts.WTF = opts.dump = 1; 9 | filename = process.argv[3]; 10 | } 11 | 12 | var w = PPT.readFile(filename, opts); 13 | console.log(PPT.utils.to_text(w).join("\n")); 14 | -------------------------------------------------------------------------------- /bits/00_header.js: -------------------------------------------------------------------------------- 1 | /* ppt.js (C) 2014 SheetJS -- http://sheetjs.com */ 2 | /* vim: set ts=2: */ 3 | var PPT = {}; 4 | (function make_ppt(PPT) { 5 | -------------------------------------------------------------------------------- /bits/01_version.js: -------------------------------------------------------------------------------- 1 | PPT.version = '0.0.2'; 2 | -------------------------------------------------------------------------------- /bits/20_helpers.js: -------------------------------------------------------------------------------- 1 | if(typeof require !== 'undefined') { 2 | if(typeof CFB === 'undefined') CFB = require('cf'+'b'); 3 | if(typeof cptable === 'undefined') cptable = require('code'+'page'); 4 | } 5 | var parsenoop = function(blob, length) { throw new Error("n"); }; 6 | var parsenoop2 = function(blob, length) { blob.l += length; }; 7 | 8 | /* helper to read arrays of records */ 9 | function recordhopper(blob, cb, end, opts) { 10 | var filter = !!opts.records; 11 | while(blob.l < end) { 12 | var rh = parse_RecordHeader(blob); 13 | var R = RecordEnum[rh.Type]; 14 | if(opts.dump) console.error(rh.Type.toString(16), R, blob.l - 8, rh.Length, blob.length); 15 | if(!R) R = RecordEnum[0x6969]; 16 | if(filter && opts.records.indexOf(R.n) === -1 && opts.records.indexOf(rh.Type) === -1) { blob.l += rh.Length; continue; } 17 | var val = R.f(blob, rh.Length, opts); 18 | cb(R, val, rh.Length); 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /bits/50_odraw.js: -------------------------------------------------------------------------------- 1 | /* [MS-ODRAW] v20140721 */ 2 | 3 | 4 | /* [MS-ODRAW] 2.2.9 OfficeArtFOPT */ 5 | function parse_OfficeArtFOPT(blob, length, opts) { blob.l += length; } 6 | 7 | /* [MS-ODRAW] 2.2.10 OfficeArtSecondaryFOPT */ 8 | function parse_OfficeArtSecondaryFOPT(blob, length, opts) { blob.l += length; } 9 | 10 | /* [MS-ODRAW] 2.2.11 OfficeArtTertiaryFOPT */ 11 | function parse_OfficeArtTertiaryFOPT(blob, length, opts) { blob.l += length; } 12 | 13 | /* [MS-ODRAW] 2.2.12 OfficeArtDggContainer */ 14 | function parse_OfficeArtDggContainer(blob, length, opts) { 15 | recordhopper(blob, function oadggc(R, val) { 16 | switch(R.n) { 17 | default: if(opts.WTF) throw R.n; break; 18 | } 19 | }, blob.l + length, opts); 20 | } 21 | 22 | /* [MS-ODRAW] 2.2.13 OfficeArtDgContainer */ 23 | function parse_OfficeArtDgContainer(blob, length, opts) { 24 | var o = {}; 25 | recordhopper(blob, function oadgc(R, val) { 26 | switch(R.n) { 27 | case 'OfficeArtFDG': break; 28 | case 'OfficeArtSpgrContainer': o.groupShape = val; break; 29 | case 'OfficeArtSpContainer': o.shape = val; break; 30 | default: if(opts.WTF) throw R.n; break; 31 | } 32 | }, blob.l + length, opts); 33 | return o; 34 | } 35 | 36 | /* [MS-ODRAW] 2.2.14 OfficeArtSpContainer */ 37 | function parse_OfficeArtSpContainer(blob, length, opts) { 38 | var o = {}; 39 | recordhopper(blob, function oasc(R, val) { 40 | switch(R.n) { 41 | case 'OfficeArtChildAnchor': break; 42 | case 'OfficeArtClientAnchor': break; 43 | case 'OfficeArtClientData': break; 44 | case 'OfficeArtClientTextbox': o.clientTextbox = val; break; 45 | 46 | case 'OfficeArtFSPGR': break; 47 | case 'OfficeArtFSP': break; 48 | case 'OfficeArtFOPT': break; 49 | case 'OfficeArtTertiaryFOPT': break; 50 | default: if(opts.WTF) throw R.n; break; 51 | } 52 | }, blob.l + length, opts); 53 | return o; 54 | } 55 | 56 | /* [MS-ODRAW] 2.2.16 OfficeArtSpgrContainer */ 57 | function parse_OfficeArtSpgrContainer(blob, length, opts) { 58 | var o = []; 59 | recordhopper(blob, function oasgc(R, val) { 60 | switch(R.n) { 61 | case 'OfficeArtSpContainer': 62 | case 'OfficeArtSpgrContainer': 63 | o.push(val); break; 64 | default: if(opts.WTF) throw R.n; break; 65 | } 66 | }, blob.l + length, opts); 67 | return o; 68 | } 69 | 70 | /* [MS-ODRAW] 2.2.18 OfficeArtSolverContainer */ 71 | function parse_OfficeArtSolverContainer(blob, length, opts) { blob.l += length; } 72 | 73 | /* [MS-ODRAW] 2.2.20 OfficeArtBStoreContainer */ 74 | function parse_OfficeArtBStoreContainer(blob, length, opts) { blob.l += length; } 75 | 76 | /* [MS-ODRAW] 2.2.24 OfficeArtBlipEMF */ 77 | function parse_OfficeArtBlipEMF(blob, length, opts) { blob.l += length; } 78 | 79 | /* [MS-ODRAW] 2.2.25 OfficeArtBlipWMF */ 80 | function parse_OfficeArtBlipWMF(blob, length, opts) { blob.l += length; } 81 | 82 | /* [MS-ODRAW] 2.2.26 OfficeArtBlipPICT */ 83 | function parse_OfficeArtBlipPICT(blob, length, opts) { blob.l += length; } 84 | 85 | /* [MS-ODRAW] 2.2.27 OfficeArtBlipJPEG */ 86 | function parse_OfficeArtBlipJPEG(blob, length, opts) { blob.l += length; } 87 | 88 | /* [MS-ODRAW] 2.2.28 OfficeArtBlipPNG */ 89 | function parse_OfficeArtBlipPNG(blob, length, opts) { blob.l += length; } 90 | 91 | /* [MS-ODRAW] 2.2.29 OfficeArtBlipDIB */ 92 | function parse_OfficeArtBlipDIB(blob, length, opts) { blob.l += length; } 93 | 94 | /* [MS-ODRAW] 2.2.30 OfficeArtBlipTIFF */ 95 | function parse_OfficeArtBlipTIFF(blob, length, opts) { blob.l += length; } 96 | 97 | /* [MS-ODRAW] 2.2.32 OfficeArtFBSE */ 98 | function parse_OfficeArtFBSE(blob, length, opts) { blob.l += length; } 99 | 100 | /* [MS-ODRAW] 2.2.33 OfficeArtFDGSL */ 101 | function parse_OfficeArtFDGSL(blob, length, opts) { blob.l += length; } 102 | 103 | /* [MS-ODRAW] 2.2.34 OfficeArtFCalloutRule */ 104 | function parse_OfficeArtFCalloutRule(blob, length, opts) { blob.l += length; } 105 | 106 | /* [MS-ODRAW] 2.2.35 OfficeArtFArcRule */ 107 | function parse_OfficeArtFArcRule(blob, length, opts) { blob.l += length; } 108 | 109 | /* [MS-ODRAW] 2.2.36 OfficeArtFConnectorRule */ 110 | function parse_OfficeArtFConnectorRule(blob, length, opts) { blob.l += length; } 111 | 112 | /* [MS-ODRAW] 2.2.37 OfficeArtFPSPL */ 113 | function parse_OfficeArtFPSPL(blob, length, opts) { blob.l += length; } 114 | 115 | /* [MS-ODRAW] 2.2.38 OfficeArtFSPGR */ 116 | function parse_OfficeArtFSPGR(blob, length, opts) { blob.l += length; } 117 | 118 | /* [MS-ODRAW] 2.2.39 OfficeArtChildAnchor */ 119 | function parse_OfficeArtChildAnchor(blob, length, opts) { blob.l += length; } 120 | 121 | /* [MS-ODRAW] 2.2.40 OfficeArtFSP */ 122 | function parse_OfficeArtFSP(blob, length, opts) { blob.l += length; } 123 | 124 | /* [MS-ODRAW] 2.2.41 OfficeArtFRITContainer */ 125 | function parse_OfficeArtFRITContainer(blob, length, opts) { blob.l += length; } 126 | 127 | /* [MS-ODRAW] 2.2.42 OfficeArtFRIT */ 128 | function parse_OfficeArtFRIT(blob, length, opts) { blob.l += length; } 129 | 130 | /* [MS-ODRAW] 2.2.43 OfficeArtMRUContainer */ 131 | function parse_OfficeArtMRUContainer(blob, length, opts) { blob.l += length; } 132 | 133 | /* [MS-ODRAW] 2.2.45 OfficeArtSplitMenuColorContainer */ 134 | function parse_OfficeArtSplitMenuColorContainer(blob, length, opts) { blob.l += length; } 135 | 136 | /* [MS-ODRAW] 2.2.48 OfficeArtFDGGBlock */ 137 | function parse_OfficeArtFDGGBlock(blob, length, opts) { blob.l += length; } 138 | 139 | /* [MS-ODRAW] 2.2.49 OfficeArtFDG */ 140 | function parse_OfficeArtFDG(blob, length, opts) { 141 | return { csp: blob.read_shift(4), spidCur: blob.read_shift(4) }; 142 | } 143 | 144 | -------------------------------------------------------------------------------- /bits/62_basic.js: -------------------------------------------------------------------------------- 1 | /* all references based on [MS-PPT] v20140721 */ 2 | /* [MS-PPT] 2.2 Basic Types */ 3 | 4 | /* CString (UTF-16LE unicode string) */ 5 | function parse_CString(blob, length, opts) { 6 | var o = cptable.utils.decode(1200, blob.slice(blob.l, blob.l+length)); 7 | blob.l += length; 8 | return o; 9 | } 10 | -------------------------------------------------------------------------------- /bits/63_fstypes.js: -------------------------------------------------------------------------------- 1 | /* [MS-PPT] 2.3 File Structure Types */ 2 | 3 | /* [MS-PPT] 2.3.1 RecordHeader */ 4 | function parse_RecordHeader(blob) { 5 | var recverinst = blob.read_shift(2); 6 | var RecordType = blob.read_shift(2); 7 | var length = blob.read_shift(4); 8 | return { Type: RecordType, Length: length, Metadata: recverinst }; 9 | } 10 | 11 | /* [MS-PPT] 2.3.2 CurrentUserAtom */ 12 | function parse_CurrentUserAtom(blob, length, opts) { 13 | blob.l += 8; 14 | var offset = blob.read_shift(4); 15 | blob.l += length - 12; 16 | return { offset: offset }; 17 | } 18 | 19 | /* [MS-PPT] 2.3.3 UserEditAtom */ 20 | function parse_UserEditAtom(blob, length, opts) { 21 | var o = {}; 22 | blob.l += 8; 23 | o.offsetLastEdit = blob.read_shift(4); 24 | o.offsetPersistDirectory = blob.read_shift(4); 25 | blob.l += length - 16; 26 | return o; 27 | } 28 | 29 | /* [MS-PPT] 2.3.4 PersistDirectoryAtom */ 30 | function parse_PersistDirectoryAtom(blob, length, opts) { 31 | var end = blob.l + length; 32 | var idcnt, pId, cPersist, cnt, i; 33 | var dir = [], dirobj, offsets; 34 | 35 | /* 2.3.5 PersistDirectoryEntry[] */ 36 | while(blob.l < end) { 37 | idcnt = blob.read_shift(4); 38 | pId = idcnt & 0xFFFFF; 39 | cPersist = idcnt >>> 20; 40 | offsets = []; 41 | 42 | /* 2.3.6 PersistOffsetEntry[] */ 43 | cnt = pId; 44 | for(i = 0; i < cPersist; ++i) dir[pId + i] = blob.read_shift(4); 45 | } 46 | return dir; 47 | } 48 | 49 | -------------------------------------------------------------------------------- /bits/64_doctype.js: -------------------------------------------------------------------------------- 1 | /* [MS-PPT] 2.4 Document Types */ 2 | 3 | /* [MS-PPT] 2.4.1 DocumentContainer */ 4 | function parse_DocumentContainer(blob, length, opts) { 5 | var o = { l: blob.l - 8 }; 6 | recordhopper(blob, function doc(R, val, len) { 7 | switch(R.n) { 8 | case 'RT_DocumentAtom': break; 9 | case 'RT_Environment': break; 10 | case 'RT_DrawingGroup': break; 11 | case 'RT_SlideListWithText': o.slideList = val; break; 12 | case 'RT_List': break; 13 | case 'RT_HeadersFooters': blob.l -= len; break; 14 | case 'RT_HeadersFootersAtom': break; 15 | case 'RT_RoundTripCustomTableStyles12Atom': break; 16 | case 'RT_EndDocumentAtom': break; 17 | case 'RT_SlideShowDocInfoAtom': break; 18 | case 'RT_ExternalObjectList': break; 19 | default: if(opts.WTF) throw R.n; break; 20 | } 21 | }, blob.l + length, opts); 22 | return o; 23 | } 24 | 25 | /* [MS-PPT] 2.4.2 DocumentAtom */ 26 | function parse_DocumentAtom(blob, length, opts) { blob.l += length; } 27 | 28 | /* [MS-PPT] 2.4.3 DrawingGroupContainer */ 29 | function parse_DrawingGroupContainer(blob, length, opts) { blob.l += length; } 30 | 31 | /* [MS-PPT] 2.4.4 DocInfoListContainer */ 32 | function parse_DocInfoListContainer(blob, length, opts) { 33 | recordhopper(blob, function dilist(R, val) { 34 | switch(R.n) { 35 | case 'RT_NotesTextViewInfo9': break; 36 | case 'RT_SlideViewInfo': break; 37 | case 'RT_ProgTags': break; 38 | case 'RT_NormalViewSetInfo9': break; 39 | case 'RT_OutlineViewInfo': break; 40 | case 'RT_SorterViewInfo': break; 41 | case 'RT_VbaInfo': break; 42 | default: if(opts.WTF) throw R.n; break; 43 | } 44 | }, blob.l + length, opts); 45 | } 46 | 47 | /* [MS-PPT] 2.4.10 VBAInfoContainer */ 48 | function parse_VBAInfoContainer(blob, length, opts) { blob.l += length; } 49 | 50 | /* [MS-PPT] 2.4.13 EndDocumentAtom */ 51 | function parse_EndDocumentAtom(blob, length) { if(length !== 0) throw "EndDocumentAtom length != 0"; } 52 | 53 | /* [MS-PPT] 2.4.14.3 SlideListWithTextContainer */ 54 | function parse_SlideListWithTextContainer(blob, length, opts) { 55 | var o = []; 56 | recordhopper(blob, function slwt(R, val) { 57 | switch(R.n) { 58 | case 'RT_SlidePersistAtom': break; 59 | case 'RT_StyleTextPropAtom': break; 60 | case 'RT_TextHeaderAtom': break; 61 | case 'RT_TextSpecialInfoAtom': break; 62 | case 'RT_TextBytesAtom': 63 | case 'RT_TextCharsAtom': 64 | o.push(val); break; 65 | default: if(opts.WTF) throw R.n; break; 66 | } 67 | }, blob.l + length, opts); 68 | return o; 69 | } 70 | 71 | /* [MS-PPT] 2.4.14.5 SlidePersistAtom */ 72 | function parse_SlidePersistAtom(blob, length, opts) { 73 | var end = blob.l + length; 74 | var pId = blob.read_shift(4); 75 | blob.l += 4; 76 | var cTexts = blob.read_shift(4); 77 | var slideId = blob.read_shift(4); 78 | blob.l += 4; 79 | return { persistIdRef: pId, cTexts: cTexts, slideId: slideId }; 80 | } 81 | 82 | /* [MS-PPT] 2.4.15.2 HeadersFootersAtom */ 83 | function parse_HeadersFootersAtom(blob, length, opts) { blob.l += length; } 84 | 85 | /* [MS-PPT] 2.4.21.2 NormalViewSetInfoContainer */ 86 | function parse_NormalViewSetInfoContainer(blob, length, opts) { blob.l += length; } 87 | 88 | /* [MS-PPT] 2.4.21.4 NotesTextViewInfoContainer */ 89 | function parse_NotesTextViewInfoContainer(blob, length, opts) { blob.l += length; } 90 | 91 | /* [MS-PPT] 2.4.21.6 OutlineViewInfoContainer */ 92 | function parse_OutlineViewInfoContainer(blob, length, opts) { blob.l += length; } 93 | 94 | /* [MS-PPT] 2.4.21.13 SorterViewInfoContainer */ 95 | function parse_SorterViewInfoContainer(blob, length, opts) { blob.l += length; } 96 | 97 | -------------------------------------------------------------------------------- /bits/65_slidetypes.js: -------------------------------------------------------------------------------- 1 | /* [MS-PPT] 2.5 Slide Types */ 2 | 3 | /* [MS-PPT] 2.5.1 SlideContainer */ 4 | function parse_SlideContainer(blob, length, opts) { 5 | var o = {}; 6 | recordhopper(blob, function rtslide(R, val) { 7 | switch(R.n) { 8 | case 'RT_SlideAtom': break; 9 | case 'RT_Drawing': o.drawing = val; break; 10 | case 'RT_ColorSchemeAtom': break; 11 | case 'RT_ProgTags': break; 12 | case 'RT_RoundTripContentMasterId12Atom': break; 13 | case 'RT_RoundTripCompositeMasterId12Atom': break; 14 | default: if(opts.WTF) throw R.n; break; 15 | } 16 | }, blob.l + length, opts); 17 | return o; 18 | } 19 | 20 | /* [MS-PPT] 2.5.3 MainMasterContainer */ 21 | function parse_MainMasterContainer(blob, length, opts) { 22 | var o = {}; 23 | recordhopper(blob, function mmaster(R, val) { 24 | switch(R.n) { 25 | case 'RT_SlideAtom': break; 26 | case 'RT_ColorSchemeAtom': break; 27 | case 'RT_TextMasterStyleAtom': break; 28 | case 'RT_RoundTripOArtTextStyles12Atom': break; 29 | case 'RT_RoundTripTheme12Atom': break; 30 | case 'RT_RoundTripColorMapping12Atom': break; 31 | case 'RT_RoundTripContentMasterInfo12Atom': break; 32 | case 'RT_RoundTripNotesMasterTextStyles12Atom': break; 33 | case 'RT_RoundTripOriginalMainMasterId12Atom': break; 34 | case 'RT_RoundTripCompositeMasterId12Atom': break; 35 | case 'RT_Drawing': o.drawing = val; break; 36 | case 'RT_CString': break; 37 | default: if(opts.WTF) throw R.n; break; 38 | } 39 | }, blob.l + length, opts); 40 | return o; 41 | } 42 | 43 | /* [MS-PPT] 2.5.6 NotesContainer */ 44 | function parse_NotesContainer(blob, length, opts) { 45 | var o = {}; 46 | recordhopper(blob, function notes(R, val) { 47 | switch(R.n) { 48 | case 'RT_NotesAtom': break; 49 | case 'RT_Drawing': o.drawing = val; break; 50 | case 'RT_ColorSchemeAtom': break; 51 | case 'RT_ProgTags': break; 52 | case 'RT_RoundTripTheme12Atom': break; 53 | case 'RT_RoundTripColorMapping12Atom': break; 54 | case 'RT_RoundTripNotesMasterTextStyles12Atom': break; 55 | default: if(opts.WTF) throw R.n; break; 56 | } 57 | }, blob.l + length, opts); 58 | return o; 59 | } 60 | 61 | /* [MS-PPT] 2.5.8 HandoutContainer */ 62 | function parse_HandoutContainer(blob, length, opts) { blob.l += length; } 63 | 64 | /* [MS-PPT] 2.5.10 SlideAtom */ 65 | function parse_SlideAtom(blob, length, opts) { 66 | var geom = blob.read_shift(4); 67 | var pt = []; 68 | for(var i = 0; i < 8; ++i) pt[i] = blob.read_shift(1); 69 | var masterIdRef = blob.read_shift(4); 70 | var notesIdRef = blob.read_shift(4); 71 | var slideFlags = blob.read_shift(2); 72 | blob.l += 2; 73 | } 74 | 75 | /* [MS-PPT] 2.5.12 NotesAtom */ 76 | function parse_NotesAtom(blob, length, opts) { blob.l += length; } 77 | 78 | /* [MS-PPT] 2.5.13 DrawingContainer */ 79 | function parse_DrawingContainer(blob, length, opts) { 80 | var o; 81 | recordhopper(blob, function dc(R, val) { 82 | switch(R.n) { 83 | case 'OfficeArtDgContainer': 84 | o = val; break; 85 | default: if(opts.WTF) throw R.n; break; 86 | } 87 | }, blob.l + length, opts); 88 | return o; 89 | } 90 | 91 | -------------------------------------------------------------------------------- /bits/66_sstypes.js: -------------------------------------------------------------------------------- 1 | /* [MS-PPT] 2.6 Slide Show Types */ 2 | 3 | /* [MS-PPT] 2.6.1 SlideShowDocInfoAtom */ 4 | function parse_SlideShowDocInfoAtom(blob, length, opts) { blob.l += length; } 5 | 6 | -------------------------------------------------------------------------------- /bits/67_shapetypes.js: -------------------------------------------------------------------------------- 1 | /* [MS-PPT] 2.7 Shape Types */ 2 | 3 | /* [MS-PPT] 2.7.1 OfficeArtClientAnchor */ 4 | function parse_OfficeArtClientAnchor(blob, length, opts) { blob.l += length; } 5 | 6 | /* [MS-PPT] 2.7.3 OfficeArtClientData */ 7 | function parse_OfficeArtClientData(blob, length, opts) { blob.l += length; } 8 | 9 | -------------------------------------------------------------------------------- /bits/69_text.js: -------------------------------------------------------------------------------- 1 | /* [MS-PPT] 2.9 Basic Types */ 2 | /* [MS-PPT] 2.9.1 DocumentTextInfoContainer */ 3 | function parse_DocumentTextInfoContainer(blob, length, opts) { 4 | recordhopper(blob, function env(R, val) { 5 | switch(R.n) { 6 | case 'RT_Kinsoku': break; 7 | case 'RT_FontCollection': break; 8 | case 'RT_TextCharFormatExceptionAtom': break; 9 | case 'RT_TextParagraphFormatExceptionAtom': break; 10 | case 'RT_TextSpecialInfoDefaultAtom': break; 11 | case 'RT_TextMasterStyleAtom': break; 12 | default: if(opts.WTF) throw R.n; break; 13 | } 14 | }, blob.l + length, opts); 15 | } 16 | 17 | /* [MS-PPT] 2.9.2 KinsokuContainer */ 18 | function parse_KinsokuContainer(blob, length, opts) { blob.l += length; } 19 | 20 | /* [MS-PPT] 2.9.8 FontCollectionContainer */ 21 | function parse_FontCollectionContainer(blob, length, opts) { blob.l += length; } 22 | 23 | /* [MS-PPT] 2.9.13 TextCFExceptionAtom */ 24 | function parse_TextCFExceptionAtom(blob, length, opts) { blob.l += length; } 25 | 26 | /* [MS-PPT] 2.9.19 TextPFExceptionAtom */ 27 | function parse_TextPFExceptionAtom(blob, length, opts) { blob.l += length; } 28 | 29 | /* [MS-PPT] 2.9.28 DefaultRulerAtom */ 30 | function parse_DefaultRulerAtom(blob, length, opts) { blob.l += length; } 31 | 32 | /* [MS-PPT] 2.9.29 TextRulerAtom */ 33 | function parse_TextRulerAtom(blob, length, opts) { blob.l += length; } 34 | 35 | /* [MS-PPT] 2.9.31 TextSIExceptionAtom */ 36 | function parse_TextSIExceptionAtom(blob, length, opts) { blob.l += length; } 37 | 38 | /* [MS-PPT] 2.9.35 TextMasterStyleAtom */ 39 | function parse_TextMasterStyleAtom(blob, length, opts) { blob.l += length; } 40 | 41 | /* [MS-PPT] 2.9.41 TextHeaderAtom */ 42 | function parse_TextHeaderAtom(blob, length, opts) { return blob.read_shift(4); } 43 | 44 | /* [MS-PPT] 2.9.42 TextCharsAtom */ 45 | var parse_TextCharsAtom = parse_CString; 46 | 47 | /* [MS-PPT] 2.9.43 TextBytesAtom */ 48 | function parse_TextBytesAtom(blob, length, opts) { 49 | var o = []; 50 | for(var i=0; i!=length; ++i) o.push(String.fromCharCode(blob.read_shift(1))); 51 | return o.join(""); 52 | } 53 | 54 | /* [MS-PPT] 2.9.47 SlideNumberMCAtom */ 55 | function parse_SlideNumberMCAtom(blob, length, opts) { blob.l += length; } 56 | 57 | /* [MS-PPT] 2.9.44 StyleTextPropAtom */ 58 | function parse_StyleTextPropAtom(blob, length, opts) { blob.l += length; } 59 | 60 | /* [MS-PPT] 2.9.50 DateTimeMCAtom */ 61 | function parse_DateTimeMCAtom(blob, length, opts) { blob.l += length; } 62 | 63 | /* [MS-PPT] 2.9.51 GenericDateMCAtom */ 64 | function parse_GenericDateMCAtom(blob, length, opts) { blob.l += length; } 65 | 66 | /* [MS-PPT] 2.9.54 TextSpecialInfoAtom */ 67 | function parse_TextSpecialInfoAtom(blob, length, opts) { blob.l += length; } 68 | 69 | /* [MS-PPT] 2.9.76 OfficeArtClientTextbox */ 70 | function parse_OfficeArtClientTextbox(blob, length, opts) { 71 | var o = {t:""}; 72 | recordhopper(blob, function oact(R, val) { 73 | switch(R.n) { 74 | case 'RT_TextBytesAtom': 75 | case 'RT_TextCharsAtom': 76 | o.t = val.replace(/\r/g,"\n"); 77 | break; 78 | case 'RT_TextHeaderAtom': break; 79 | case 'RT_OutlineTextRefAtom': 80 | case 'RT_TextRulerAtom': 81 | case 'RT_MasterTextPropAtom': 82 | case 'RT_StyleTextPropAtom': 83 | case 'RT_TextBookmarkAtom': 84 | case 'RT_TextSpecialInfoAtom': 85 | case 'RT_SlideNumberMetaCharAtom': 86 | case 'RT_DateTimeMetaCharAtom': 87 | case 'RT_GenericDateMetaCharAtom': 88 | case 'RT_HeaderMetaCharAtom': 89 | case 'RT_FooterMetaCharAtom': 90 | case 'RT_RtfDateTimeMetaCharAtom': 91 | case 'RT_InteractiveInfo': 92 | case 'RT_TextInteractiveInfoAtom': 93 | break; 94 | default: if(opts.WTF) throw R.n; break; 95 | } 96 | }, blob.l + length, opts); 97 | return o; 98 | } 99 | 100 | /* [MS-PPT] 2.9.79 MasterTextPropAtom */ 101 | function parse_MasterTextPropAtom(blob, length, opts) { blob.l += length; } 102 | 103 | -------------------------------------------------------------------------------- /bits/70_external.js: -------------------------------------------------------------------------------- 1 | /* [MS-PPT] 2.10 External Object Types */ 2 | 3 | /* [MS-PPT] 2.10.1 ExObjListContainer */ 4 | function parse_ExObjListContainer(blob, length, opts) { blob.l += length; } 5 | 6 | /* [MS-PPT] 2.10.3 ExObjListAtom */ 7 | function parse_ExObjListAtom(blob, length, opts) { blob.l += length; } 8 | 9 | -------------------------------------------------------------------------------- /bits/71_misctypes.js: -------------------------------------------------------------------------------- 1 | /* [MS-PPT] 2.11 Other Types */ 2 | 3 | /* [MS-PPT] 2.11.9 RoundTripColorMappingAtom */ 4 | function parse_RoundTripColorMappingAtom(blob, length, opts) { blob.l += length; } 5 | 6 | /* [MS-PPT] 2.11.10 RoundTripCompositeMasterId12Atom */ 7 | function parse_RoundTripCompositeMasterId12Atom(blob, length, opts) { blob.l += length; } 8 | 9 | /* [MS-PPT] 2.11.11 RoundTripContentMasterId12Atom */ 10 | function parse_RoundTripContentMasterId12Atom(blob, length, opts) { blob.l += length; } 11 | 12 | /* [MS-PPT] 2.11.12 RoundTripContentMasterInfo12Atom */ 13 | function parse_RoundTripContentMasterInfo12Atom(blob, length, opts) { blob.l += length; } 14 | 15 | /* [MS-PPT] 2.11.13 RoundTripCustomTableStyles12Atom */ 16 | function parse_RoundTripCustomTableStyles12Atom(blob, length, opts) { blob.l += length; } 17 | 18 | /* [MS-PPT] 2.11.18 RoundTripNotesMasterTextStyles12Atom */ 19 | function parse_RoundTripNotesMasterTextStyles12Atom(blob, length, opts) { blob.l += length; } 20 | 21 | /* [MS-PPT] 2.11.19 RoundTripOArtTextStyles12Atom */ 22 | function parse_RoundTripOArtTextStyles12Atom(blob, length, opts) { blob.l += length; } 23 | 24 | /* [MS-PPT] 2.11.20 RoundTripOriginalMainMasterId12Atom */ 25 | function parse_RoundTripOriginalMainMasterId12Atom(blob, length, opts) { blob.l += length; } 26 | 27 | /* [MS-PPT] 2.11.27 RoundTripThemeAtom */ 28 | function parse_RoundTripThemeAtom(blob, length, opts) { blob.l += length; } 29 | 30 | -------------------------------------------------------------------------------- /bits/75_parsetab.js: -------------------------------------------------------------------------------- 1 | /* [MS-PPT] 2.13.24 RecordType (other records are noted below) */ 2 | var RecordEnum = { 3 | 0x03E8: { n:"RT_Document", f:parse_DocumentContainer }, 4 | 0x03E9: { n:"RT_DocumentAtom", f:parse_DocumentAtom }, 5 | 0x03EA: { n:"RT_EndDocumentAtom", f:parse_EndDocumentAtom }, 6 | 0x03EE: { n:"RT_Slide", f:parse_SlideContainer }, 7 | 0x03EF: { n:"RT_SlideAtom", f:parse_SlideAtom }, 8 | 0x03F0: { n:"RT_Notes", f:parse_NotesContainer }, 9 | 0x03F1: { n:"RT_NotesAtom", f:parse_NotesAtom }, 10 | 0x03F2: { n:"RT_Environment", f:parse_DocumentTextInfoContainer }, 11 | 0x03F3: { n:"RT_SlidePersistAtom", f:parse_SlidePersistAtom }, 12 | 0x03F8: { n:"RT_MainMaster", f:parse_MainMasterContainer }, 13 | 0x03F9: { n:"RT_SlideShowSlideInfoAtom", f:parsenoop }, 14 | 0x03FA: { n:"RT_SlideViewInfo", f:parse_SlideViewInfo$ }, 15 | 0x03FB: { n:"RT_GuideAtom", f:parsenoop }, 16 | 0x03FD: { n:"RT_ViewInfoAtom", f:parsenoop }, 17 | 0x03FE: { n:"RT_SlideViewInfoAtom", f:parsenoop }, 18 | 0x03FF: { n:"RT_VbaInfo", f:parse_VBAInfoContainer }, 19 | 0x0400: { n:"RT_VbaInfoAtom", f:parsenoop }, 20 | 0x0401: { n:"RT_SlideShowDocInfoAtom", f:parse_SlideShowDocInfoAtom }, 21 | 0x0402: { n:"RT_Summary", f:parsenoop }, 22 | 0x0406: { n:"RT_DocRoutingSlipAtom", f:parsenoop }, 23 | 0x0407: { n:"RT_OutlineViewInfo", f:parse_OutlineViewInfoContainer }, 24 | 0x0408: { n:"RT_SorterViewInfo", f:parse_SorterViewInfoContainer }, 25 | 0x0409: { n:"RT_ExternalObjectList", f:parse_ExObjListContainer }, 26 | 0x040A: { n:"RT_ExternalObjectListAtom", f:parse_ExObjListAtom }, 27 | 0x040B: { n:"RT_DrawingGroup", f:parse_DrawingGroupContainer }, 28 | 0x040C: { n:"RT_Drawing", f:parse_DrawingContainer }, 29 | 0x040D: { n:"RT_GridSpacing10Atom", f:parsenoop }, 30 | 0x040E: { n:"RT_RoundTripTheme12Atom", f:parse_RoundTripThemeAtom }, 31 | 0x040F: { n:"RT_RoundTripColorMapping12Atom", f:parse_RoundTripColorMappingAtom }, 32 | 0x0410: { n:"RT_NamedShows", f:parsenoop }, 33 | 0x0411: { n:"RT_NamedShow", f:parsenoop }, 34 | 0x0412: { n:"RT_NamedShowSlidesAtom", f:parsenoop }, 35 | 0x0413: { n:"RT_NotesTextViewInfo9", f:parse_NotesTextViewInfoContainer }, 36 | 0x0414: { n:"RT_NormalViewSetInfo9", f:parse_NormalViewSetInfoContainer }, 37 | 0x0415: { n:"RT_NormalViewSetInfo9Atom", f:parsenoop }, 38 | 0x041C: { n:"RT_RoundTripOriginalMainMasterId12Atom", f:parse_RoundTripOriginalMainMasterId12Atom }, 39 | 0x041D: { n:"RT_RoundTripCompositeMasterId12Atom", f:parse_RoundTripCompositeMasterId12Atom }, 40 | 0x041E: { n:"RT_RoundTripContentMasterInfo12Atom", f:parse_RoundTripContentMasterInfo12Atom }, 41 | 0x041F: { n:"RT_RoundTripShapeId12Atom", f:parsenoop }, 42 | 0x0420: { n:"RT_RoundTripHFPlaceholder12Atom", f:parsenoop }, 43 | 0x0422: { n:"RT_RoundTripContentMasterId12Atom", f:parse_RoundTripContentMasterId12Atom}, 44 | 0x0423: { n:"RT_RoundTripOArtTextStyles12Atom", f:parse_RoundTripOArtTextStyles12Atom}, 45 | 0x0424: { n:"RT_RoundTripHeaderFooterDefaults12Atom", f:parsenoop }, 46 | 0x0425: { n:"RT_RoundTripDocFlags12Atom", f:parsenoop }, 47 | 0x0426: { n:"RT_RoundTripShapeCheckSumForCL12Atom", f:parsenoop }, 48 | 0x0427: { n:"RT_RoundTripNotesMasterTextStyles12Atom", f:parse_RoundTripNotesMasterTextStyles12Atom }, 49 | 0x0428: { n:"RT_RoundTripCustomTableStyles12Atom", f:parse_RoundTripCustomTableStyles12Atom }, 50 | 0x07D0: { n:"RT_List", f:parse_DocInfoListContainer }, 51 | 0x07D5: { n:"RT_FontCollection", f:parse_FontCollectionContainer }, 52 | 0x07D6: { n:"RT_FontCollection10", f:parsenoop }, 53 | 0x07E3: { n:"RT_BookmarkCollection", f:parsenoop }, 54 | 0x07E4: { n:"RT_SoundCollection", f:parsenoop }, 55 | 0x07E5: { n:"RT_SoundCollectionAtom", f:parsenoop }, 56 | 0x07E6: { n:"RT_Sound", f:parsenoop }, 57 | 0x07E7: { n:"RT_SoundDataBlob", f:parsenoop }, 58 | 0x07E9: { n:"RT_BookmarkSeedAtom", f:parsenoop }, 59 | 0x07F0: { n:"RT_ColorSchemeAtom", f:parse_ColorSchemeAtom$ }, 60 | 0x07F8: { n:"RT_BlipCollection9", f:parsenoop }, 61 | 0x07F9: { n:"RT_BlipEntity9Atom", f:parsenoop }, 62 | 0x0BC1: { n:"RT_ExternalObjectRefAtom", f:parsenoop }, 63 | 0x0BC3: { n:"RT_PlaceholderAtom", f:parsenoop }, 64 | 0x0BDB: { n:"RT_ShapeAtom", f:parsenoop }, 65 | 0x0BDC: { n:"RT_ShapeFlags10Atom", f:parsenoop }, 66 | 0x0BDD: { n:"RT_RoundTripNewPlaceholderId12Atom", f:parsenoop }, 67 | 0x0F9E: { n:"RT_OutlineTextRefAtom", f:parsenoop2 }, 68 | 0x0F9F: { n:"RT_TextHeaderAtom", f:parse_TextHeaderAtom }, 69 | 0x0FA0: { n:"RT_TextCharsAtom", f:parse_TextCharsAtom }, 70 | 0x0FA1: { n:"RT_StyleTextPropAtom", f:parse_StyleTextPropAtom }, 71 | 0x0FA2: { n:"RT_MasterTextPropAtom", f:parse_MasterTextPropAtom }, 72 | 0x0FA3: { n:"RT_TextMasterStyleAtom", f:parse_TextMasterStyleAtom }, 73 | 0x0FA4: { n:"RT_TextCharFormatExceptionAtom", f:parse_TextCFExceptionAtom }, 74 | 0x0FA5: { n:"RT_TextParagraphFormatExceptionAtom", f:parse_TextPFExceptionAtom }, 75 | 0x0FA6: { n:"RT_TextRulerAtom", f:parse_TextRulerAtom }, 76 | 0x0FA7: { n:"RT_TextBookmarkAtom", f:parsenoop }, 77 | 0x0FA8: { n:"RT_TextBytesAtom", f:parse_TextBytesAtom }, 78 | 0x0FA9: { n:"RT_TextSpecialInfoDefaultAtom", f:parse_TextSIExceptionAtom }, 79 | 0x0FAA: { n:"RT_TextSpecialInfoAtom", f:parse_TextSpecialInfoAtom }, 80 | 0x0FAB: { n:"RT_DefaultRulerAtom", f:parsenoop }, 81 | 0x0FAC: { n:"RT_StyleTextProp9Atom", f:parsenoop }, 82 | 0x0FAD: { n:"RT_TextMasterStyle9Atom", f:parsenoop }, 83 | 0x0FAE: { n:"RT_OutlineTextProps9", f:parsenoop }, 84 | 0x0FAF: { n:"RT_OutlineTextPropsHeader9Atom", f:parsenoop }, 85 | 0x0FB0: { n:"RT_TextDefaults9Atom", f:parsenoop }, 86 | 0x0FB1: { n:"RT_StyleTextProp10Atom", f:parsenoop }, 87 | 0x0FB2: { n:"RT_TextMasterStyle10Atom", f:parsenoop }, 88 | 0x0FB3: { n:"RT_OutlineTextProps10", f:parsenoop }, 89 | 0x0FB4: { n:"RT_TextDefaults10Atom", f:parsenoop }, 90 | 0x0FB5: { n:"RT_OutlineTextProps11", f:parsenoop }, 91 | 0x0FB6: { n:"RT_StyleTextProp11Atom", f:parsenoop }, 92 | 0x0FB7: { n:"RT_FontEntityAtom", f:parsenoop }, 93 | 0x0FB8: { n:"RT_FontEmbedDataBlob", f:parsenoop }, 94 | 0x0FBA: { n:"RT_CString", f:parse_CString }, 95 | 0x0FC1: { n:"RT_MetaFile", f:parsenoop }, 96 | 0x0FC3: { n:"RT_ExternalOleObjectAtom", f:parsenoop }, 97 | 0x0FC8: { n:"RT_Kinsoku", f:parse_KinsokuContainer }, 98 | 0x0FC9: { n:"RT_Handout", f:parse_HandoutContainer }, 99 | 0x0FCC: { n:"RT_ExternalOleEmbed", f:parsenoop }, 100 | 0x0FCD: { n:"RT_ExternalOleEmbedAtom", f:parsenoop }, 101 | 0x0FCE: { n:"RT_ExternalOleLink", f:parsenoop }, 102 | 0x0FD0: { n:"RT_BookmarkEntityAtom", f:parsenoop }, 103 | 0x0FD1: { n:"RT_ExternalOleLinkAtom", f:parsenoop }, 104 | 0x0FD2: { n:"RT_KinsokuAtom", f:parsenoop }, 105 | 0x0FD3: { n:"RT_ExternalHyperlinkAtom", f:parsenoop }, 106 | 0x0FD7: { n:"RT_ExternalHyperlink", f:parsenoop }, 107 | 0x0FD8: { n:"RT_SlideNumberMetaCharAtom", f:parse_SlideNumberMCAtom }, 108 | 0x0FD9: { n:"RT_HeadersFooters", f:parse_HeadersFooters$ }, 109 | 0x0FDA: { n:"RT_HeadersFootersAtom", f:parse_HeadersFootersAtom }, 110 | 0x0FDF: { n:"RT_TextInteractiveInfoAtom", f:parsenoop }, 111 | 0x0FE4: { n:"RT_ExternalHyperlink9", f:parsenoop }, 112 | 0x0FE7: { n:"RT_RecolorInfoAtom", f:parsenoop }, 113 | 0x0FEE: { n:"RT_ExternalOleControl", f:parsenoop }, 114 | 0x0FF0: { n:"RT_SlideListWithText", f:parse_SlideListWithTextContainer }, 115 | 0x0FF1: { n:"RT_AnimationInfoAtom", f:parsenoop }, 116 | 0x0FF2: { n:"RT_InteractiveInfo", f:parsenoop }, 117 | 0x0FF3: { n:"RT_InteractiveInfoAtom", f:parsenoop }, 118 | 0x0FF5: { n:"RT_UserEditAtom", f:parse_UserEditAtom }, 119 | 0x0FF6: { n:"RT_CurrentUserAtom", f:parse_CurrentUserAtom }, 120 | 0x0FF7: { n:"RT_DateTimeMetaCharAtom", f:parse_DateTimeMCAtom }, 121 | 0x0FF8: { n:"RT_GenericDateMetaCharAtom", f:parse_GenericDateMCAtom }, 122 | 0x0FF9: { n:"RT_HeaderMetaCharAtom", f:parsenoop }, 123 | 0x0FFA: { n:"RT_FooterMetaCharAtom", f:parsenoop2 }, 124 | 0x0FFB: { n:"RT_ExternalOleControlAtom", f:parsenoop }, 125 | 0x1004: { n:"RT_ExternalMediaAtom", f:parsenoop }, 126 | 0x1005: { n:"RT_ExternalVideo", f:parsenoop }, 127 | 0x1006: { n:"RT_ExternalAviMovie", f:parsenoop }, 128 | 0x1007: { n:"RT_ExternalMciMovie", f:parsenoop }, 129 | 0x100D: { n:"RT_ExternalMidiAudio", f:parsenoop }, 130 | 0x100E: { n:"RT_ExternalCdAudio", f:parsenoop }, 131 | 0x100F: { n:"RT_ExternalWavAudioEmbedded", f:parsenoop }, 132 | 0x1010: { n:"RT_ExternalWavAudioLink", f:parsenoop }, 133 | 0x1011: { n:"RT_ExternalOleObjectStg", f:parse_ExternalOleObjectStg$ }, 134 | 0x1012: { n:"RT_ExternalCdAudioAtom", f:parsenoop }, 135 | 0x1013: { n:"RT_ExternalWavAudioEmbeddedAtom", f:parsenoop }, 136 | 0x1014: { n:"RT_AnimationInfo", f:parsenoop }, 137 | 0x1015: { n:"RT_RtfDateTimeMetaCharAtom", f:parsenoop }, 138 | 0x1018: { n:"RT_ExternalHyperlinkFlagsAtom", f:parsenoop }, 139 | 0x1388: { n:"RT_ProgTags", f:parse_ProgTags$ }, 140 | 0x1389: { n:"RT_ProgStringTag", f:parsenoop }, 141 | 0x138A: { n:"RT_ProgBinaryTag", f:parsenoop }, 142 | 0x138B: { n:"RT_BinaryTagDataBlob", f:parsenoop }, 143 | 0x1770: { n:"RT_PrintOptionsAtom", f:parsenoop }, 144 | 0x1772: { n:"RT_PersistDirectoryAtom", f:parse_PersistDirectoryAtom }, 145 | 0x177A: { n:"RT_PresentationAdvisorFlags9Atom", f:parsenoop }, 146 | 0x177B: { n:"RT_HtmlDocInfo9Atom", f:parsenoop }, 147 | 0x177C: { n:"RT_HtmlPublishInfoAtom", f:parsenoop }, 148 | 0x177D: { n:"RT_HtmlPublishInfo9", f:parsenoop }, 149 | 0x177E: { n:"RT_BroadcastDocInfo9", f:parsenoop }, 150 | 0x177F: { n:"RT_BroadcastDocInfo9Atom", f:parsenoop }, 151 | 0x1784: { n:"RT_EnvelopeFlags9Atom", f:parsenoop }, 152 | 0x1785: { n:"RT_EnvelopeData9Atom", f:parsenoop }, 153 | 0x2AFB: { n:"RT_VisualShapeAtom", f:parsenoop }, 154 | 0x2B00: { n:"RT_HashCodeAtom", f:parsenoop }, 155 | 0x2B01: { n:"RT_VisualPageAtom", f:parsenoop }, 156 | 0x2B02: { n:"RT_BuildList", f:parsenoop }, 157 | 0x2B03: { n:"RT_BuildAtom", f:parsenoop }, 158 | 0x2B04: { n:"RT_ChartBuild", f:parsenoop }, 159 | 0x2B05: { n:"RT_ChartBuildAtom", f:parsenoop }, 160 | 0x2B06: { n:"RT_DiagramBuild", f:parsenoop }, 161 | 0x2B07: { n:"RT_DiagramBuildAtom", f:parsenoop }, 162 | 0x2B08: { n:"RT_ParaBuild", f:parsenoop }, 163 | 0x2B09: { n:"RT_ParaBuildAtom", f:parsenoop }, 164 | 0x2B0A: { n:"RT_LevelInfoAtom", f:parsenoop }, 165 | 0x2B0B: { n:"RT_RoundTripAnimationAtom12Atom", f:parsenoop }, 166 | 0x2B0D: { n:"RT_RoundTripAnimationHashAtom12Atom", f:parsenoop }, 167 | 0x2EE0: { n:"RT_Comment10", f:parsenoop }, 168 | 0x2EE1: { n:"RT_Comment10Atom", f:parsenoop }, 169 | 0x2EE4: { n:"RT_CommentIndex10", f:parsenoop }, 170 | 0x2EE5: { n:"RT_CommentIndex10Atom", f:parsenoop }, 171 | 0x2EE6: { n:"RT_LinkedShape10Atom", f:parsenoop }, 172 | 0x2EE7: { n:"RT_LinkedSlide10Atom", f:parsenoop }, 173 | 0x2EEA: { n:"RT_SlideFlags10Atom", f:parsenoop }, 174 | 0x2EEB: { n:"RT_SlideTime10Atom", f:parsenoop }, 175 | 0x2EEC: { n:"RT_DiffTree10", f:parsenoop }, 176 | 0x2EED: { n:"RT_Diff10", f:parsenoop }, 177 | 0x2EEE: { n:"RT_Diff10Atom", f:parsenoop }, 178 | 0x2EEF: { n:"RT_SlideListTableSize10Atom", f:parsenoop }, 179 | 0x2EF0: { n:"RT_SlideListEntry10Atom", f:parsenoop }, 180 | 0x2EF1: { n:"RT_SlideListTable10", f:parsenoop }, 181 | 0x2F14: { n:"RT_CryptSession10Container", f:parsenoop }, 182 | 0x32C8: { n:"RT_FontEmbedFlags10Atom", f:parsenoop }, 183 | 0x36B0: { n:"RT_FilterPrivacyFlags10Atom", f:parsenoop }, 184 | 0x36B1: { n:"RT_DocToolbarStates10Atom", f:parsenoop }, 185 | 0x36B2: { n:"RT_PhotoAlbumInfo10Atom", f:parsenoop }, 186 | 0x36B3: { n:"RT_SmartTagStore11Container", f:parsenoop }, 187 | 0x3714: { n:"RT_RoundTripSlideSyncInfo12", f:parsenoop }, 188 | 0x3715: { n:"RT_RoundTripSlideSyncInfoAtom12", f:parsenoop }, 189 | 0x6969: { n:"RT_SheetJSAtom", f:parsenoop }, 190 | 0xF125: { n:"RT_TimeConditionContainer", f:parsenoop }, 191 | 0xF127: { n:"RT_TimeNode", f:parsenoop }, 192 | 0xF128: { n:"RT_TimeCondition", f:parsenoop }, 193 | 0xF129: { n:"RT_TimeModifier", f:parsenoop }, 194 | 0xF12A: { n:"RT_TimeBehaviorContainer", f:parsenoop }, 195 | 0xF12B: { n:"RT_TimeAnimateBehaviorContainer", f:parsenoop }, 196 | 0xF12C: { n:"RT_TimeColorBehaviorContainer", f:parsenoop }, 197 | 0xF12D: { n:"RT_TimeEffectBehaviorContainer", f:parsenoop }, 198 | 0xF12E: { n:"RT_TimeMotionBehaviorContainer", f:parsenoop }, 199 | 0xF12F: { n:"RT_TimeRotationBehaviorContainer", f:parsenoop }, 200 | 0xF130: { n:"RT_TimeScaleBehaviorContainer", f:parsenoop }, 201 | 0xF131: { n:"RT_TimeSetBehaviorContainer", f:parsenoop }, 202 | 0xF132: { n:"RT_TimeCommandBehaviorContainer", f:parsenoop }, 203 | 0xF133: { n:"RT_TimeBehavior", f:parsenoop }, 204 | 0xF134: { n:"RT_TimeAnimateBehavior", f:parsenoop }, 205 | 0xF135: { n:"RT_TimeColorBehavior", f:parsenoop }, 206 | 0xF136: { n:"RT_TimeEffectBehavior", f:parsenoop }, 207 | 0xF137: { n:"RT_TimeMotionBehavior", f:parsenoop }, 208 | 0xF138: { n:"RT_TimeRotationBehavior", f:parsenoop }, 209 | 0xF139: { n:"RT_TimeScaleBehavior", f:parsenoop }, 210 | 0xF13A: { n:"RT_TimeSetBehavior", f:parsenoop }, 211 | 0xF13B: { n:"RT_TimeCommandBehavior", f:parsenoop }, 212 | 0xF13C: { n:"RT_TimeClientVisualElement", f:parsenoop }, 213 | 0xF13D: { n:"RT_TimePropertyList", f:parsenoop }, 214 | 0xF13E: { n:"RT_TimeVariantList", f:parsenoop }, 215 | 0xF13F: { n:"RT_TimeAnimationValueList", f:parsenoop }, 216 | 0xF140: { n:"RT_TimeIterateData", f:parsenoop }, 217 | 0xF141: { n:"RT_TimeSequenceData", f:parsenoop }, 218 | 0xF142: { n:"RT_TimeVariant", f:parsenoop }, 219 | 0xF143: { n:"RT_TimeAnimationValue", f:parsenoop }, 220 | 0xF144: { n:"RT_TimeExtTimeNodeContainer", f:parsenoop }, 221 | 0xF145: { n:"RT_TimeSubEffectContainer", f:parsenoop }, 222 | 223 | /* [MS-ODRAW] uses the same record format */ 224 | 0xF000: { n:"OfficeArtDggContainer", f:parse_OfficeArtDggContainer }, 225 | 0xF001: { n:"OfficeArtBStoreContainer", f:parse_OfficeArtBStoreContainer }, 226 | 0xF002: { n:"OfficeArtDgContainer", f:parse_OfficeArtDgContainer }, 227 | 0xF003: { n:"OfficeArtSpgrContainer", f:parse_OfficeArtSpgrContainer }, 228 | 0xF004: { n:"OfficeArtSpContainer", f:parse_OfficeArtSpContainer }, 229 | 0xF005: { n:"OfficeArtSolverContainer", f:parse_OfficeArtSolverContainer }, 230 | 0xF006: { n:"OfficeArtFDGGBlock", f:parse_OfficeArtFDGGBlock }, 231 | 0xF007: { n:"OfficeArtFBSE", f:parse_OfficeArtFBSE }, 232 | 0xF008: { n:"OfficeArtFDG", f:parse_OfficeArtFDG }, 233 | 0xF009: { n:"OfficeArtFSPGR", f:parse_OfficeArtFSPGR }, 234 | 0xF00A: { n:"OfficeArtFSP", f:parse_OfficeArtFSP }, 235 | 0xF00B: { n:"OfficeArtFOPT", f:parse_OfficeArtFOPT }, 236 | 0xF00F: { n:"OfficeArtChildAnchor", f:parse_OfficeArtChildAnchor }, 237 | 0xF012: { n:"OfficeArtFConnectorRule", f:parse_OfficeArtFConnectorRule }, 238 | 0xF014: { n:"OfficeArtFArcRule", f:parse_OfficeArtFArcRule }, 239 | 0xF017: { n:"OfficeArtFCalloutRule", f:parse_OfficeArtFCalloutRule }, 240 | 0xF01A: { n:"OfficeArtBlipEMF", f:parse_OfficeArtBlipEMF }, 241 | 0xF01B: { n:"OfficeArtBlipWMF", f:parse_OfficeArtBlipWMF }, 242 | 0xF01C: { n:"OfficeArtBlipPICT", f:parse_OfficeArtBlipPICT }, 243 | 0xF01D: { n:"OfficeArtBlipJPEG", f:parse_OfficeArtBlipJPEG }, 244 | 0xF01E: { n:"OfficeArtBlipPNG", f:parse_OfficeArtBlipPNG }, 245 | 0xF01F: { n:"OfficeArtBlipDIB", f:parse_OfficeArtBlipDIB }, 246 | 0xF029: { n:"OfficeArtBlipTIFF", f:parse_OfficeArtBlipTIFF }, 247 | 0xF118: { n:"OfficeArtFRITContainer", f:parse_OfficeArtFRITContainer }, 248 | 0xF119: { n:"OfficeArtFDGSL", f:parse_OfficeArtFDGSL }, 249 | 0xF11A: { n:"OfficeArtMRUContainer", f:parse_OfficeArtMRUContainer }, 250 | 0xF11D: { n:"OfficeArtFPSPL", f:parse_OfficeArtFPSPL }, 251 | 0xF11E: { n:"OfficeArtSplitMenuColorContainer", f:parse_OfficeArtSplitMenuColorContainer }, 252 | 0xF121: { n:"OfficeArtSecondaryFOPT", f:parse_OfficeArtSecondaryFOPT }, 253 | 0xF122: { n:"OfficeArtTertiaryFOPT", f:parse_OfficeArtTertiaryFOPT }, 254 | 255 | /* [MS-ODRAW] assumes the host application defines these records */ 256 | 0xF00D: { n:"OfficeArtClientTextbox", f:parse_OfficeArtClientTextbox }, 257 | 0xF010: { n:"OfficeArtClientAnchor", f:parse_OfficeArtClientAnchor }, 258 | 0xF011: { n:"OfficeArtClientData", f:parse_OfficeArtClientData }, 259 | 260 | 0xFC1C: { n:"RT_MagicAtom", f:parsenoop } 261 | }; 262 | -------------------------------------------------------------------------------- /bits/80_ppt.js: -------------------------------------------------------------------------------- 1 | function parse_SlideViewInfo$(blob, length, opts) { blob.l += length; } 2 | function parse_ProgTags$(blob, length, opts) { blob.l += length; } 3 | function parse_HeadersFooters$(blob, length, opts) { blob.l += length; } 4 | function parse_ColorSchemeAtom$(blob, length, opts) { blob.l += length; } 5 | function parse_ExternalOleObjectStg$(blob, length, opts) { blob.l += length; } 6 | 7 | function process_ppt(ppt, opts) { 8 | opts = opts || {}; 9 | 10 | /* 2.1.1 Current User Stream */ 11 | var custream = ppt.find('Current User'); 12 | var cublob = custream.content; 13 | 14 | /* 2.1.2 PowerPoint Document Stream */ 15 | var pptstream = ppt.find('PowerPoint Document'); 16 | var pptblob = pptstream.content; 17 | 18 | var cu, uea; 19 | 20 | /* Part 1.1 */ 21 | recordhopper(cublob, function pptdoc1(R, val, len) { 22 | if(cu) throw "unexpected second RT_CurrentUserAtom in Current User stream"; 23 | cu = val; 24 | }, cublob.length, { 25 | records: ['RT_CurrentUserAtom'] 26 | }); 27 | 28 | /* Part 1.2 */ 29 | pptblob.l = cu.offset; 30 | 31 | /* Part 1.3 - 1.7 */ 32 | var ueas = [], persists = [], state = 0; 33 | recordhopper(pptblob, function pptdoc2(R, val, len) { 34 | if(R.n === 'RT_UserEditAtom') { 35 | /* 1.3 */ 36 | ueas.push(val); 37 | state = 1; 38 | /* 1.4 */ 39 | pptblob.l = val.offsetPersistDirectory; 40 | } else { 41 | /* 1.5 */ 42 | persists.push(val); 43 | /* 1.6 */ 44 | pptblob.l = ueas[ueas.length-1].offsetLastEdit; 45 | if(pptblob.l === 0) pptblob.l = pptblob.length; 46 | } 47 | }, pptblob.length, { 48 | records: ['RT_PersistDirectoryAtom', 'RT_UserEditAtom'] 49 | }); 50 | 51 | if(opts.dump) { 52 | console.log(ueas); 53 | console.log(persists); 54 | } 55 | opts.persist = persists; 56 | 57 | var o = { 58 | slides: [], 59 | docs: [] 60 | }; 61 | 62 | /* second pass */ 63 | pptblob.l = 0; 64 | recordhopper(pptblob, function pptdoc3(R, val, len) { 65 | switch(R.n) { 66 | case 'RT_Slide': o.slides.push(val); break; 67 | case 'RT_Document': o.docs.push(val); break; 68 | case 'RT_Notes': break; 69 | case 'RT_MainMaster': break; 70 | case 'RT_Handout': break; 71 | 72 | case 'RT_PersistDirectoryAtom': break; 73 | case 'RT_UserEditAtom': break; 74 | case 'RT_ExternalOleObjectStg': break; 75 | default: if(opts.WTF) throw R.n; break; 76 | } 77 | }, pptblob.length, opts); 78 | 79 | return o; 80 | } 81 | 82 | function readFile(filename, opts) { 83 | var ppt = CFB.read(filename, {type:'file'}); 84 | return process_ppt(ppt, opts); 85 | } 86 | 87 | -------------------------------------------------------------------------------- /bits/90_utils.js: -------------------------------------------------------------------------------- 1 | var to_text_d = function(docs) { 2 | var out = []; 3 | docs.forEach(function(d) { 4 | var o, i; 5 | try { o = d.slideList; } catch(e) { return; } 6 | for(i = 0; i != o.length; ++i) { out.push(o[i]); } 7 | }); 8 | return out; 9 | }; 10 | 11 | var to_text_s = function(slides) { 12 | var out = []; 13 | slides.forEach(function(s) { 14 | var o, i; 15 | try { o = s.drawing.groupShape; } catch(e) { return; } 16 | for(i = 0; i != o.length; ++i) { 17 | if(!o[i].clientTextbox) continue; 18 | out.push(o[i].clientTextbox.t); 19 | } 20 | }); 21 | return out; 22 | }; 23 | 24 | var to_text = function(pres) { 25 | if(pres.docs.length > 0 && pres.docs[0].slideList.length > 0) return to_text_d(pres.docs); 26 | else return to_text_s(pres.slides); 27 | }; 28 | 29 | var utils = { 30 | to_text: to_text 31 | }; 32 | -------------------------------------------------------------------------------- /bits/98_exports.js: -------------------------------------------------------------------------------- 1 | PPT.parse_pptcfb = process_ppt; 2 | PPT.readFile = readFile; 3 | PPT.utils = utils; 4 | -------------------------------------------------------------------------------- /bits/99_footer.js: -------------------------------------------------------------------------------- 1 | })(typeof exports !== 'undefined' ? exports : PPT); 2 | -------------------------------------------------------------------------------- /dist/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2014 SheetJS 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /dist/ppt.core.min.js: -------------------------------------------------------------------------------- 1 | /* ppt.js (C) 2014 SheetJS -- http://sheetjs.com */ 2 | var PPT={};(function make_ppt(PPT){PPT.version="0.0.2";if(typeof require!=="undefined"){if(typeof CFB==="undefined")CFB=require("cf"+"b");if(typeof cptable==="undefined")cptable=require("code"+"page")}var parsenoop=function(blob,length){throw new Error("n")};var parsenoop2=function(blob,length){blob.l+=length};function recordhopper(blob,cb,end,opts){var filter=!!opts.records;while(blob.l>>20;offsets=[];cnt=pId;for(i=0;i0&&pres.docs[0].slideList.length>0)return to_text_d(pres.docs);else return to_text_s(pres.slides)};var utils={to_text:to_text};PPT.parse_pptcfb=process_ppt;PPT.readFile=readFile;PPT.utils=utils})(typeof exports!=="undefined"?exports:PPT); 3 | //# sourceMappingURL=dist/ppt.core.min.map -------------------------------------------------------------------------------- /dist/ppt.core.min.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"dist/ppt.core.min.js","sources":["ppt.js"],"names":["PPT","make_ppt","version","require","CFB","cptable","parsenoop","blob","length","Error","parsenoop2","l","recordhopper","cb","end","opts","filter","records","rh","parse_RecordHeader","R","RecordEnum","Type","dump","console","error","toString","Length","indexOf","n","val","f","parse_OfficeArtFOPT","parse_OfficeArtSecondaryFOPT","parse_OfficeArtTertiaryFOPT","parse_OfficeArtDggContainer","oadggc","WTF","parse_OfficeArtDgContainer","o","oadgc","groupShape","shape","parse_OfficeArtSpContainer","oasc","clientTextbox","parse_OfficeArtSpgrContainer","oasgc","push","parse_OfficeArtSolverContainer","parse_OfficeArtBStoreContainer","parse_OfficeArtBlipEMF","parse_OfficeArtBlipWMF","parse_OfficeArtBlipPICT","parse_OfficeArtBlipJPEG","parse_OfficeArtBlipPNG","parse_OfficeArtBlipDIB","parse_OfficeArtBlipTIFF","parse_OfficeArtFBSE","parse_OfficeArtFDGSL","parse_OfficeArtFCalloutRule","parse_OfficeArtFArcRule","parse_OfficeArtFConnectorRule","parse_OfficeArtFPSPL","parse_OfficeArtFSPGR","parse_OfficeArtChildAnchor","parse_OfficeArtFSP","parse_OfficeArtFRITContainer","parse_OfficeArtFRIT","parse_OfficeArtMRUContainer","parse_OfficeArtSplitMenuColorContainer","parse_OfficeArtFDGGBlock","parse_OfficeArtFDG","csp","read_shift","spidCur","parse_CString","utils","decode","slice","recverinst","RecordType","Metadata","parse_CurrentUserAtom","offset","parse_UserEditAtom","offsetLastEdit","offsetPersistDirectory","parse_PersistDirectoryAtom","idcnt","pId","cPersist","cnt","i","dir","dirobj","offsets","parse_DocumentContainer","doc","len","slideList","parse_DocumentAtom","parse_DrawingGroupContainer","parse_DocInfoListContainer","dilist","parse_VBAInfoContainer","parse_EndDocumentAtom","parse_SlideListWithTextContainer","slwt","parse_SlidePersistAtom","cTexts","slideId","persistIdRef","parse_HeadersFootersAtom","parse_NormalViewSetInfoContainer","parse_NotesTextViewInfoContainer","parse_OutlineViewInfoContainer","parse_SorterViewInfoContainer","parse_SlideContainer","rtslide","drawing","parse_MainMasterContainer","mmaster","parse_NotesContainer","notes","parse_HandoutContainer","parse_SlideAtom","geom","pt","masterIdRef","notesIdRef","slideFlags","parse_NotesAtom","parse_DrawingContainer","dc","parse_SlideShowDocInfoAtom","parse_OfficeArtClientAnchor","parse_OfficeArtClientData","parse_DocumentTextInfoContainer","env","parse_KinsokuContainer","parse_FontCollectionContainer","parse_TextCFExceptionAtom","parse_TextPFExceptionAtom","parse_DefaultRulerAtom","parse_TextRulerAtom","parse_TextSIExceptionAtom","parse_TextMasterStyleAtom","parse_TextHeaderAtom","parse_TextCharsAtom","parse_TextBytesAtom","String","fromCharCode","join","parse_SlideNumberMCAtom","parse_StyleTextPropAtom","parse_DateTimeMCAtom","parse_GenericDateMCAtom","parse_TextSpecialInfoAtom","parse_OfficeArtClientTextbox","t","oact","replace","parse_MasterTextPropAtom","parse_ExObjListContainer","parse_ExObjListAtom","parse_RoundTripColorMappingAtom","parse_RoundTripCompositeMasterId12Atom","parse_RoundTripContentMasterId12Atom","parse_RoundTripContentMasterInfo12Atom","parse_RoundTripCustomTableStyles12Atom","parse_RoundTripNotesMasterTextStyles12Atom","parse_RoundTripOArtTextStyles12Atom","parse_RoundTripOriginalMainMasterId12Atom","parse_RoundTripThemeAtom",1000,1001,1002,1006,1007,1008,1009,1010,1011,1016,1017,1018,"parse_SlideViewInfo$",1019,1021,1022,1023,1024,1025,1026,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1052,1053,1054,1055,1056,1058,1059,1060,1061,1062,1063,1064,2000,2005,2006,2019,2020,2021,2022,2023,2025,2032,"parse_ColorSchemeAtom$",2040,2041,3009,3011,3035,3036,3037,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4026,4033,4035,4040,4041,4044,4045,4046,4048,4049,4050,4051,4055,4056,4057,"parse_HeadersFooters$",4058,4063,4068,4071,4078,4080,4081,4082,4083,4085,4086,4087,4088,4089,4090,4091,4100,4101,4102,4103,4109,4110,4111,4112,4113,"parse_ExternalOleObjectStg$",4114,4115,4116,4117,4120,5000,"parse_ProgTags$",5001,5002,5003,6000,6002,6010,6011,6012,6013,6014,6015,6020,6021,11003,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11021,12000,12001,12004,12005,12006,12007,12010,12011,12012,12013,12014,12015,12016,12017,12052,13000,14000,14001,14002,14003,14100,14101,26985,61733,61735,61736,61737,61738,61739,61740,61741,61742,61743,61744,61745,61746,61747,61748,61749,61750,61751,61752,61753,61754,61755,61756,61757,61758,61759,61760,61761,61762,61763,61764,61765,61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61455,61458,61460,61463,61466,61467,61468,61469,61470,61471,61481,61720,61721,61722,61725,61726,61729,61730,61453,61456,61457,64540,"process_ppt","ppt","custream","find","cublob","content","pptstream","pptblob","cu","uea","pptdoc1","ueas","persists","state","pptdoc2","log","persist","slides","docs","pptdoc3","readFile","filename","read","type","to_text_d","out","forEach","d","e","to_text_s","s","to_text","pres","parse_pptcfb","exports"],"mappings":"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"} -------------------------------------------------------------------------------- /dist/ppt.min.js: -------------------------------------------------------------------------------- 1 | /* ppt.js (C) 2014 SheetJS -- http://sheetjs.com */ 2 | var PPT={};(function make_ppt(PPT){PPT.version="0.0.2";if(typeof require!=="undefined"){if(typeof CFB==="undefined")CFB=require("cf"+"b");if(typeof cptable==="undefined")cptable=require("code"+"page")}var parsenoop=function(blob,length){throw new Error("n")};var parsenoop2=function(blob,length){blob.l+=length};function recordhopper(blob,cb,end,opts){var filter=!!opts.records;while(blob.l>>20;offsets=[];cnt=pId;for(i=0;i0&&pres.docs[0].slideList.length>0)return to_text_d(pres.docs);else return to_text_s(pres.slides)};var utils={to_text:to_text};PPT.parse_pptcfb=process_ppt;PPT.readFile=readFile;PPT.utils=utils})(typeof exports!=="undefined"?exports:PPT); 3 | //# sourceMappingURL=dist/ppt.min.map -------------------------------------------------------------------------------- /dist/ppt.min.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"dist/ppt.min.js","sources":["ppt.js"],"names":["PPT","make_ppt","version","require","CFB","cptable","parsenoop","blob","length","Error","parsenoop2","l","recordhopper","cb","end","opts","filter","records","rh","parse_RecordHeader","R","RecordEnum","Type","dump","console","error","toString","Length","indexOf","n","val","f","parse_OfficeArtFOPT","parse_OfficeArtSecondaryFOPT","parse_OfficeArtTertiaryFOPT","parse_OfficeArtDggContainer","oadggc","WTF","parse_OfficeArtDgContainer","o","oadgc","groupShape","shape","parse_OfficeArtSpContainer","oasc","clientTextbox","parse_OfficeArtSpgrContainer","oasgc","push","parse_OfficeArtSolverContainer","parse_OfficeArtBStoreContainer","parse_OfficeArtBlipEMF","parse_OfficeArtBlipWMF","parse_OfficeArtBlipPICT","parse_OfficeArtBlipJPEG","parse_OfficeArtBlipPNG","parse_OfficeArtBlipDIB","parse_OfficeArtBlipTIFF","parse_OfficeArtFBSE","parse_OfficeArtFDGSL","parse_OfficeArtFCalloutRule","parse_OfficeArtFArcRule","parse_OfficeArtFConnectorRule","parse_OfficeArtFPSPL","parse_OfficeArtFSPGR","parse_OfficeArtChildAnchor","parse_OfficeArtFSP","parse_OfficeArtFRITContainer","parse_OfficeArtFRIT","parse_OfficeArtMRUContainer","parse_OfficeArtSplitMenuColorContainer","parse_OfficeArtFDGGBlock","parse_OfficeArtFDG","csp","read_shift","spidCur","parse_CString","utils","decode","slice","recverinst","RecordType","Metadata","parse_CurrentUserAtom","offset","parse_UserEditAtom","offsetLastEdit","offsetPersistDirectory","parse_PersistDirectoryAtom","idcnt","pId","cPersist","cnt","i","dir","dirobj","offsets","parse_DocumentContainer","doc","len","slideList","parse_DocumentAtom","parse_DrawingGroupContainer","parse_DocInfoListContainer","dilist","parse_VBAInfoContainer","parse_EndDocumentAtom","parse_SlideListWithTextContainer","slwt","parse_SlidePersistAtom","cTexts","slideId","persistIdRef","parse_HeadersFootersAtom","parse_NormalViewSetInfoContainer","parse_NotesTextViewInfoContainer","parse_OutlineViewInfoContainer","parse_SorterViewInfoContainer","parse_SlideContainer","rtslide","drawing","parse_MainMasterContainer","mmaster","parse_NotesContainer","notes","parse_HandoutContainer","parse_SlideAtom","geom","pt","masterIdRef","notesIdRef","slideFlags","parse_NotesAtom","parse_DrawingContainer","dc","parse_SlideShowDocInfoAtom","parse_OfficeArtClientAnchor","parse_OfficeArtClientData","parse_DocumentTextInfoContainer","env","parse_KinsokuContainer","parse_FontCollectionContainer","parse_TextCFExceptionAtom","parse_TextPFExceptionAtom","parse_DefaultRulerAtom","parse_TextRulerAtom","parse_TextSIExceptionAtom","parse_TextMasterStyleAtom","parse_TextHeaderAtom","parse_TextCharsAtom","parse_TextBytesAtom","String","fromCharCode","join","parse_SlideNumberMCAtom","parse_StyleTextPropAtom","parse_DateTimeMCAtom","parse_GenericDateMCAtom","parse_TextSpecialInfoAtom","parse_OfficeArtClientTextbox","t","oact","replace","parse_MasterTextPropAtom","parse_ExObjListContainer","parse_ExObjListAtom","parse_RoundTripColorMappingAtom","parse_RoundTripCompositeMasterId12Atom","parse_RoundTripContentMasterId12Atom","parse_RoundTripContentMasterInfo12Atom","parse_RoundTripCustomTableStyles12Atom","parse_RoundTripNotesMasterTextStyles12Atom","parse_RoundTripOArtTextStyles12Atom","parse_RoundTripOriginalMainMasterId12Atom","parse_RoundTripThemeAtom",1000,1001,1002,1006,1007,1008,1009,1010,1011,1016,1017,1018,"parse_SlideViewInfo$",1019,1021,1022,1023,1024,1025,1026,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1052,1053,1054,1055,1056,1058,1059,1060,1061,1062,1063,1064,2000,2005,2006,2019,2020,2021,2022,2023,2025,2032,"parse_ColorSchemeAtom$",2040,2041,3009,3011,3035,3036,3037,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4026,4033,4035,4040,4041,4044,4045,4046,4048,4049,4050,4051,4055,4056,4057,"parse_HeadersFooters$",4058,4063,4068,4071,4078,4080,4081,4082,4083,4085,4086,4087,4088,4089,4090,4091,4100,4101,4102,4103,4109,4110,4111,4112,4113,"parse_ExternalOleObjectStg$",4114,4115,4116,4117,4120,5000,"parse_ProgTags$",5001,5002,5003,6000,6002,6010,6011,6012,6013,6014,6015,6020,6021,11003,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11021,12000,12001,12004,12005,12006,12007,12010,12011,12012,12013,12014,12015,12016,12017,12052,13000,14000,14001,14002,14003,14100,14101,26985,61733,61735,61736,61737,61738,61739,61740,61741,61742,61743,61744,61745,61746,61747,61748,61749,61750,61751,61752,61753,61754,61755,61756,61757,61758,61759,61760,61761,61762,61763,61764,61765,61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61455,61458,61460,61463,61466,61467,61468,61469,61470,61471,61481,61720,61721,61722,61725,61726,61729,61730,61453,61456,61457,64540,"process_ppt","ppt","custream","find","cublob","content","pptstream","pptblob","cu","uea","pptdoc1","ueas","persists","state","pptdoc2","log","persist","slides","docs","pptdoc3","readFile","filename","read","type","to_text_d","out","forEach","d","e","to_text_s","s","to_text","pres","parse_pptcfb","exports"],"mappings":"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"} -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ppt", 3 | "version": "0.0.2", 4 | "author": "sheetjs", 5 | "description": "Pure JS PowerPoint 97-2003 (PPT) Parser", 6 | "keywords": [ "ppt", "presentation", "powerpoint", "office" ], 7 | "bin": { 8 | "ppt": "./bin/ppt.njs" 9 | }, 10 | "main": "./ppt", 11 | "dependencies": { 12 | "codepage":"~1.3.4", 13 | "cfb":">=0.10.0", 14 | "commander":"" 15 | }, 16 | "devDependencies": { 17 | "mocha":"", 18 | "uglify-js":"" 19 | }, 20 | "repository": { "type":"git", "url":"git://github.com/SheetJS/js-ppt.git" }, 21 | "scripts": { 22 | }, 23 | "config": { 24 | "blanket": { 25 | "pattern": "ppt.js" 26 | } 27 | }, 28 | "bugs": { "url": "https://github.com/SheetJS/js-ppt/issues" }, 29 | "license": "Apache-2.0", 30 | "engines": { "node": ">=0.8" } 31 | } 32 | -------------------------------------------------------------------------------- /ppt.js: -------------------------------------------------------------------------------- 1 | /* ppt.js (C) 2014 SheetJS -- http://sheetjs.com */ 2 | /* vim: set ts=2: */ 3 | var PPT = {}; 4 | (function make_ppt(PPT) { 5 | PPT.version = '0.0.2'; 6 | if(typeof require !== 'undefined') { 7 | if(typeof CFB === 'undefined') CFB = require('cf'+'b'); 8 | if(typeof cptable === 'undefined') cptable = require('code'+'page'); 9 | } 10 | var parsenoop = function(blob, length) { throw new Error("n"); }; 11 | var parsenoop2 = function(blob, length) { blob.l += length; }; 12 | 13 | /* helper to read arrays of records */ 14 | function recordhopper(blob, cb, end, opts) { 15 | var filter = !!opts.records; 16 | while(blob.l < end) { 17 | var rh = parse_RecordHeader(blob); 18 | var R = RecordEnum[rh.Type]; 19 | if(opts.dump) console.error(rh.Type.toString(16), R, blob.l - 8, rh.Length, blob.length); 20 | if(!R) R = RecordEnum[0x6969]; 21 | if(filter && opts.records.indexOf(R.n) === -1 && opts.records.indexOf(rh.Type) === -1) { blob.l += rh.Length; continue; } 22 | var val = R.f(blob, rh.Length, opts); 23 | cb(R, val, rh.Length); 24 | } 25 | } 26 | 27 | /* [MS-ODRAW] v20140721 */ 28 | 29 | 30 | /* [MS-ODRAW] 2.2.9 OfficeArtFOPT */ 31 | function parse_OfficeArtFOPT(blob, length, opts) { blob.l += length; } 32 | 33 | /* [MS-ODRAW] 2.2.10 OfficeArtSecondaryFOPT */ 34 | function parse_OfficeArtSecondaryFOPT(blob, length, opts) { blob.l += length; } 35 | 36 | /* [MS-ODRAW] 2.2.11 OfficeArtTertiaryFOPT */ 37 | function parse_OfficeArtTertiaryFOPT(blob, length, opts) { blob.l += length; } 38 | 39 | /* [MS-ODRAW] 2.2.12 OfficeArtDggContainer */ 40 | function parse_OfficeArtDggContainer(blob, length, opts) { 41 | recordhopper(blob, function oadggc(R, val) { 42 | switch(R.n) { 43 | default: if(opts.WTF) throw R.n; break; 44 | } 45 | }, blob.l + length, opts); 46 | } 47 | 48 | /* [MS-ODRAW] 2.2.13 OfficeArtDgContainer */ 49 | function parse_OfficeArtDgContainer(blob, length, opts) { 50 | var o = {}; 51 | recordhopper(blob, function oadgc(R, val) { 52 | switch(R.n) { 53 | case 'OfficeArtFDG': break; 54 | case 'OfficeArtSpgrContainer': o.groupShape = val; break; 55 | case 'OfficeArtSpContainer': o.shape = val; break; 56 | default: if(opts.WTF) throw R.n; break; 57 | } 58 | }, blob.l + length, opts); 59 | return o; 60 | } 61 | 62 | /* [MS-ODRAW] 2.2.14 OfficeArtSpContainer */ 63 | function parse_OfficeArtSpContainer(blob, length, opts) { 64 | var o = {}; 65 | recordhopper(blob, function oasc(R, val) { 66 | switch(R.n) { 67 | case 'OfficeArtChildAnchor': break; 68 | case 'OfficeArtClientAnchor': break; 69 | case 'OfficeArtClientData': break; 70 | case 'OfficeArtClientTextbox': o.clientTextbox = val; break; 71 | 72 | case 'OfficeArtFSPGR': break; 73 | case 'OfficeArtFSP': break; 74 | case 'OfficeArtFOPT': break; 75 | case 'OfficeArtTertiaryFOPT': break; 76 | default: if(opts.WTF) throw R.n; break; 77 | } 78 | }, blob.l + length, opts); 79 | return o; 80 | } 81 | 82 | /* [MS-ODRAW] 2.2.16 OfficeArtSpgrContainer */ 83 | function parse_OfficeArtSpgrContainer(blob, length, opts) { 84 | var o = []; 85 | recordhopper(blob, function oasgc(R, val) { 86 | switch(R.n) { 87 | case 'OfficeArtSpContainer': 88 | case 'OfficeArtSpgrContainer': 89 | o.push(val); break; 90 | default: if(opts.WTF) throw R.n; break; 91 | } 92 | }, blob.l + length, opts); 93 | return o; 94 | } 95 | 96 | /* [MS-ODRAW] 2.2.18 OfficeArtSolverContainer */ 97 | function parse_OfficeArtSolverContainer(blob, length, opts) { blob.l += length; } 98 | 99 | /* [MS-ODRAW] 2.2.20 OfficeArtBStoreContainer */ 100 | function parse_OfficeArtBStoreContainer(blob, length, opts) { blob.l += length; } 101 | 102 | /* [MS-ODRAW] 2.2.24 OfficeArtBlipEMF */ 103 | function parse_OfficeArtBlipEMF(blob, length, opts) { blob.l += length; } 104 | 105 | /* [MS-ODRAW] 2.2.25 OfficeArtBlipWMF */ 106 | function parse_OfficeArtBlipWMF(blob, length, opts) { blob.l += length; } 107 | 108 | /* [MS-ODRAW] 2.2.26 OfficeArtBlipPICT */ 109 | function parse_OfficeArtBlipPICT(blob, length, opts) { blob.l += length; } 110 | 111 | /* [MS-ODRAW] 2.2.27 OfficeArtBlipJPEG */ 112 | function parse_OfficeArtBlipJPEG(blob, length, opts) { blob.l += length; } 113 | 114 | /* [MS-ODRAW] 2.2.28 OfficeArtBlipPNG */ 115 | function parse_OfficeArtBlipPNG(blob, length, opts) { blob.l += length; } 116 | 117 | /* [MS-ODRAW] 2.2.29 OfficeArtBlipDIB */ 118 | function parse_OfficeArtBlipDIB(blob, length, opts) { blob.l += length; } 119 | 120 | /* [MS-ODRAW] 2.2.30 OfficeArtBlipTIFF */ 121 | function parse_OfficeArtBlipTIFF(blob, length, opts) { blob.l += length; } 122 | 123 | /* [MS-ODRAW] 2.2.32 OfficeArtFBSE */ 124 | function parse_OfficeArtFBSE(blob, length, opts) { blob.l += length; } 125 | 126 | /* [MS-ODRAW] 2.2.33 OfficeArtFDGSL */ 127 | function parse_OfficeArtFDGSL(blob, length, opts) { blob.l += length; } 128 | 129 | /* [MS-ODRAW] 2.2.34 OfficeArtFCalloutRule */ 130 | function parse_OfficeArtFCalloutRule(blob, length, opts) { blob.l += length; } 131 | 132 | /* [MS-ODRAW] 2.2.35 OfficeArtFArcRule */ 133 | function parse_OfficeArtFArcRule(blob, length, opts) { blob.l += length; } 134 | 135 | /* [MS-ODRAW] 2.2.36 OfficeArtFConnectorRule */ 136 | function parse_OfficeArtFConnectorRule(blob, length, opts) { blob.l += length; } 137 | 138 | /* [MS-ODRAW] 2.2.37 OfficeArtFPSPL */ 139 | function parse_OfficeArtFPSPL(blob, length, opts) { blob.l += length; } 140 | 141 | /* [MS-ODRAW] 2.2.38 OfficeArtFSPGR */ 142 | function parse_OfficeArtFSPGR(blob, length, opts) { blob.l += length; } 143 | 144 | /* [MS-ODRAW] 2.2.39 OfficeArtChildAnchor */ 145 | function parse_OfficeArtChildAnchor(blob, length, opts) { blob.l += length; } 146 | 147 | /* [MS-ODRAW] 2.2.40 OfficeArtFSP */ 148 | function parse_OfficeArtFSP(blob, length, opts) { blob.l += length; } 149 | 150 | /* [MS-ODRAW] 2.2.41 OfficeArtFRITContainer */ 151 | function parse_OfficeArtFRITContainer(blob, length, opts) { blob.l += length; } 152 | 153 | /* [MS-ODRAW] 2.2.42 OfficeArtFRIT */ 154 | function parse_OfficeArtFRIT(blob, length, opts) { blob.l += length; } 155 | 156 | /* [MS-ODRAW] 2.2.43 OfficeArtMRUContainer */ 157 | function parse_OfficeArtMRUContainer(blob, length, opts) { blob.l += length; } 158 | 159 | /* [MS-ODRAW] 2.2.45 OfficeArtSplitMenuColorContainer */ 160 | function parse_OfficeArtSplitMenuColorContainer(blob, length, opts) { blob.l += length; } 161 | 162 | /* [MS-ODRAW] 2.2.48 OfficeArtFDGGBlock */ 163 | function parse_OfficeArtFDGGBlock(blob, length, opts) { blob.l += length; } 164 | 165 | /* [MS-ODRAW] 2.2.49 OfficeArtFDG */ 166 | function parse_OfficeArtFDG(blob, length, opts) { 167 | return { csp: blob.read_shift(4), spidCur: blob.read_shift(4) }; 168 | } 169 | 170 | /* all references based on [MS-PPT] v20140721 */ 171 | /* [MS-PPT] 2.2 Basic Types */ 172 | 173 | /* CString (UTF-16LE unicode string) */ 174 | function parse_CString(blob, length, opts) { 175 | var o = cptable.utils.decode(1200, blob.slice(blob.l, blob.l+length)); 176 | blob.l += length; 177 | return o; 178 | } 179 | /* [MS-PPT] 2.3 File Structure Types */ 180 | 181 | /* [MS-PPT] 2.3.1 RecordHeader */ 182 | function parse_RecordHeader(blob) { 183 | var recverinst = blob.read_shift(2); 184 | var RecordType = blob.read_shift(2); 185 | var length = blob.read_shift(4); 186 | return { Type: RecordType, Length: length, Metadata: recverinst }; 187 | } 188 | 189 | /* [MS-PPT] 2.3.2 CurrentUserAtom */ 190 | function parse_CurrentUserAtom(blob, length, opts) { 191 | blob.l += 8; 192 | var offset = blob.read_shift(4); 193 | blob.l += length - 12; 194 | return { offset: offset }; 195 | } 196 | 197 | /* [MS-PPT] 2.3.3 UserEditAtom */ 198 | function parse_UserEditAtom(blob, length, opts) { 199 | var o = {}; 200 | blob.l += 8; 201 | o.offsetLastEdit = blob.read_shift(4); 202 | o.offsetPersistDirectory = blob.read_shift(4); 203 | blob.l += length - 16; 204 | return o; 205 | } 206 | 207 | /* [MS-PPT] 2.3.4 PersistDirectoryAtom */ 208 | function parse_PersistDirectoryAtom(blob, length, opts) { 209 | var end = blob.l + length; 210 | var idcnt, pId, cPersist, cnt, i; 211 | var dir = [], dirobj, offsets; 212 | 213 | /* 2.3.5 PersistDirectoryEntry[] */ 214 | while(blob.l < end) { 215 | idcnt = blob.read_shift(4); 216 | pId = idcnt & 0xFFFFF; 217 | cPersist = idcnt >>> 20; 218 | offsets = []; 219 | 220 | /* 2.3.6 PersistOffsetEntry[] */ 221 | cnt = pId; 222 | for(i = 0; i < cPersist; ++i) dir[pId + i] = blob.read_shift(4); 223 | } 224 | return dir; 225 | } 226 | 227 | /* [MS-PPT] 2.4 Document Types */ 228 | 229 | /* [MS-PPT] 2.4.1 DocumentContainer */ 230 | function parse_DocumentContainer(blob, length, opts) { 231 | var o = { l: blob.l - 8 }; 232 | recordhopper(blob, function doc(R, val, len) { 233 | switch(R.n) { 234 | case 'RT_DocumentAtom': break; 235 | case 'RT_Environment': break; 236 | case 'RT_DrawingGroup': break; 237 | case 'RT_SlideListWithText': o.slideList = val; break; 238 | case 'RT_List': break; 239 | case 'RT_HeadersFooters': blob.l -= len; break; 240 | case 'RT_HeadersFootersAtom': break; 241 | case 'RT_RoundTripCustomTableStyles12Atom': break; 242 | case 'RT_EndDocumentAtom': break; 243 | case 'RT_SlideShowDocInfoAtom': break; 244 | case 'RT_ExternalObjectList': break; 245 | default: if(opts.WTF) throw R.n; break; 246 | } 247 | }, blob.l + length, opts); 248 | return o; 249 | } 250 | 251 | /* [MS-PPT] 2.4.2 DocumentAtom */ 252 | function parse_DocumentAtom(blob, length, opts) { blob.l += length; } 253 | 254 | /* [MS-PPT] 2.4.3 DrawingGroupContainer */ 255 | function parse_DrawingGroupContainer(blob, length, opts) { blob.l += length; } 256 | 257 | /* [MS-PPT] 2.4.4 DocInfoListContainer */ 258 | function parse_DocInfoListContainer(blob, length, opts) { 259 | recordhopper(blob, function dilist(R, val) { 260 | switch(R.n) { 261 | case 'RT_NotesTextViewInfo9': break; 262 | case 'RT_SlideViewInfo': break; 263 | case 'RT_ProgTags': break; 264 | case 'RT_NormalViewSetInfo9': break; 265 | case 'RT_OutlineViewInfo': break; 266 | case 'RT_SorterViewInfo': break; 267 | case 'RT_VbaInfo': break; 268 | default: if(opts.WTF) throw R.n; break; 269 | } 270 | }, blob.l + length, opts); 271 | } 272 | 273 | /* [MS-PPT] 2.4.10 VBAInfoContainer */ 274 | function parse_VBAInfoContainer(blob, length, opts) { blob.l += length; } 275 | 276 | /* [MS-PPT] 2.4.13 EndDocumentAtom */ 277 | function parse_EndDocumentAtom(blob, length) { if(length !== 0) throw "EndDocumentAtom length != 0"; } 278 | 279 | /* [MS-PPT] 2.4.14.3 SlideListWithTextContainer */ 280 | function parse_SlideListWithTextContainer(blob, length, opts) { 281 | var o = []; 282 | recordhopper(blob, function slwt(R, val) { 283 | switch(R.n) { 284 | case 'RT_SlidePersistAtom': break; 285 | case 'RT_StyleTextPropAtom': break; 286 | case 'RT_TextHeaderAtom': break; 287 | case 'RT_TextSpecialInfoAtom': break; 288 | case 'RT_TextBytesAtom': 289 | case 'RT_TextCharsAtom': 290 | o.push(val); break; 291 | default: if(opts.WTF) throw R.n; break; 292 | } 293 | }, blob.l + length, opts); 294 | return o; 295 | } 296 | 297 | /* [MS-PPT] 2.4.14.5 SlidePersistAtom */ 298 | function parse_SlidePersistAtom(blob, length, opts) { 299 | var end = blob.l + length; 300 | var pId = blob.read_shift(4); 301 | blob.l += 4; 302 | var cTexts = blob.read_shift(4); 303 | var slideId = blob.read_shift(4); 304 | blob.l += 4; 305 | return { persistIdRef: pId, cTexts: cTexts, slideId: slideId }; 306 | } 307 | 308 | /* [MS-PPT] 2.4.15.2 HeadersFootersAtom */ 309 | function parse_HeadersFootersAtom(blob, length, opts) { blob.l += length; } 310 | 311 | /* [MS-PPT] 2.4.21.2 NormalViewSetInfoContainer */ 312 | function parse_NormalViewSetInfoContainer(blob, length, opts) { blob.l += length; } 313 | 314 | /* [MS-PPT] 2.4.21.4 NotesTextViewInfoContainer */ 315 | function parse_NotesTextViewInfoContainer(blob, length, opts) { blob.l += length; } 316 | 317 | /* [MS-PPT] 2.4.21.6 OutlineViewInfoContainer */ 318 | function parse_OutlineViewInfoContainer(blob, length, opts) { blob.l += length; } 319 | 320 | /* [MS-PPT] 2.4.21.13 SorterViewInfoContainer */ 321 | function parse_SorterViewInfoContainer(blob, length, opts) { blob.l += length; } 322 | 323 | /* [MS-PPT] 2.5 Slide Types */ 324 | 325 | /* [MS-PPT] 2.5.1 SlideContainer */ 326 | function parse_SlideContainer(blob, length, opts) { 327 | var o = {}; 328 | recordhopper(blob, function rtslide(R, val) { 329 | switch(R.n) { 330 | case 'RT_SlideAtom': break; 331 | case 'RT_Drawing': o.drawing = val; break; 332 | case 'RT_ColorSchemeAtom': break; 333 | case 'RT_ProgTags': break; 334 | case 'RT_RoundTripContentMasterId12Atom': break; 335 | case 'RT_RoundTripCompositeMasterId12Atom': break; 336 | default: if(opts.WTF) throw R.n; break; 337 | } 338 | }, blob.l + length, opts); 339 | return o; 340 | } 341 | 342 | /* [MS-PPT] 2.5.3 MainMasterContainer */ 343 | function parse_MainMasterContainer(blob, length, opts) { 344 | var o = {}; 345 | recordhopper(blob, function mmaster(R, val) { 346 | switch(R.n) { 347 | case 'RT_SlideAtom': break; 348 | case 'RT_ColorSchemeAtom': break; 349 | case 'RT_TextMasterStyleAtom': break; 350 | case 'RT_RoundTripOArtTextStyles12Atom': break; 351 | case 'RT_RoundTripTheme12Atom': break; 352 | case 'RT_RoundTripColorMapping12Atom': break; 353 | case 'RT_RoundTripContentMasterInfo12Atom': break; 354 | case 'RT_RoundTripNotesMasterTextStyles12Atom': break; 355 | case 'RT_RoundTripOriginalMainMasterId12Atom': break; 356 | case 'RT_RoundTripCompositeMasterId12Atom': break; 357 | case 'RT_Drawing': o.drawing = val; break; 358 | case 'RT_CString': break; 359 | default: if(opts.WTF) throw R.n; break; 360 | } 361 | }, blob.l + length, opts); 362 | return o; 363 | } 364 | 365 | /* [MS-PPT] 2.5.6 NotesContainer */ 366 | function parse_NotesContainer(blob, length, opts) { 367 | var o = {}; 368 | recordhopper(blob, function notes(R, val) { 369 | switch(R.n) { 370 | case 'RT_NotesAtom': break; 371 | case 'RT_Drawing': o.drawing = val; break; 372 | case 'RT_ColorSchemeAtom': break; 373 | case 'RT_ProgTags': break; 374 | case 'RT_RoundTripTheme12Atom': break; 375 | case 'RT_RoundTripColorMapping12Atom': break; 376 | case 'RT_RoundTripNotesMasterTextStyles12Atom': break; 377 | default: if(opts.WTF) throw R.n; break; 378 | } 379 | }, blob.l + length, opts); 380 | return o; 381 | } 382 | 383 | /* [MS-PPT] 2.5.8 HandoutContainer */ 384 | function parse_HandoutContainer(blob, length, opts) { blob.l += length; } 385 | 386 | /* [MS-PPT] 2.5.10 SlideAtom */ 387 | function parse_SlideAtom(blob, length, opts) { 388 | var geom = blob.read_shift(4); 389 | var pt = []; 390 | for(var i = 0; i < 8; ++i) pt[i] = blob.read_shift(1); 391 | var masterIdRef = blob.read_shift(4); 392 | var notesIdRef = blob.read_shift(4); 393 | var slideFlags = blob.read_shift(2); 394 | blob.l += 2; 395 | } 396 | 397 | /* [MS-PPT] 2.5.12 NotesAtom */ 398 | function parse_NotesAtom(blob, length, opts) { blob.l += length; } 399 | 400 | /* [MS-PPT] 2.5.13 DrawingContainer */ 401 | function parse_DrawingContainer(blob, length, opts) { 402 | var o; 403 | recordhopper(blob, function dc(R, val) { 404 | switch(R.n) { 405 | case 'OfficeArtDgContainer': 406 | o = val; break; 407 | default: if(opts.WTF) throw R.n; break; 408 | } 409 | }, blob.l + length, opts); 410 | return o; 411 | } 412 | 413 | /* [MS-PPT] 2.6 Slide Show Types */ 414 | 415 | /* [MS-PPT] 2.6.1 SlideShowDocInfoAtom */ 416 | function parse_SlideShowDocInfoAtom(blob, length, opts) { blob.l += length; } 417 | 418 | /* [MS-PPT] 2.7 Shape Types */ 419 | 420 | /* [MS-PPT] 2.7.1 OfficeArtClientAnchor */ 421 | function parse_OfficeArtClientAnchor(blob, length, opts) { blob.l += length; } 422 | 423 | /* [MS-PPT] 2.7.3 OfficeArtClientData */ 424 | function parse_OfficeArtClientData(blob, length, opts) { blob.l += length; } 425 | 426 | /* [MS-PPT] 2.9 Basic Types */ 427 | /* [MS-PPT] 2.9.1 DocumentTextInfoContainer */ 428 | function parse_DocumentTextInfoContainer(blob, length, opts) { 429 | recordhopper(blob, function env(R, val) { 430 | switch(R.n) { 431 | case 'RT_Kinsoku': break; 432 | case 'RT_FontCollection': break; 433 | case 'RT_TextCharFormatExceptionAtom': break; 434 | case 'RT_TextParagraphFormatExceptionAtom': break; 435 | case 'RT_TextSpecialInfoDefaultAtom': break; 436 | case 'RT_TextMasterStyleAtom': break; 437 | default: if(opts.WTF) throw R.n; break; 438 | } 439 | }, blob.l + length, opts); 440 | } 441 | 442 | /* [MS-PPT] 2.9.2 KinsokuContainer */ 443 | function parse_KinsokuContainer(blob, length, opts) { blob.l += length; } 444 | 445 | /* [MS-PPT] 2.9.8 FontCollectionContainer */ 446 | function parse_FontCollectionContainer(blob, length, opts) { blob.l += length; } 447 | 448 | /* [MS-PPT] 2.9.13 TextCFExceptionAtom */ 449 | function parse_TextCFExceptionAtom(blob, length, opts) { blob.l += length; } 450 | 451 | /* [MS-PPT] 2.9.19 TextPFExceptionAtom */ 452 | function parse_TextPFExceptionAtom(blob, length, opts) { blob.l += length; } 453 | 454 | /* [MS-PPT] 2.9.28 DefaultRulerAtom */ 455 | function parse_DefaultRulerAtom(blob, length, opts) { blob.l += length; } 456 | 457 | /* [MS-PPT] 2.9.29 TextRulerAtom */ 458 | function parse_TextRulerAtom(blob, length, opts) { blob.l += length; } 459 | 460 | /* [MS-PPT] 2.9.31 TextSIExceptionAtom */ 461 | function parse_TextSIExceptionAtom(blob, length, opts) { blob.l += length; } 462 | 463 | /* [MS-PPT] 2.9.35 TextMasterStyleAtom */ 464 | function parse_TextMasterStyleAtom(blob, length, opts) { blob.l += length; } 465 | 466 | /* [MS-PPT] 2.9.41 TextHeaderAtom */ 467 | function parse_TextHeaderAtom(blob, length, opts) { return blob.read_shift(4); } 468 | 469 | /* [MS-PPT] 2.9.42 TextCharsAtom */ 470 | var parse_TextCharsAtom = parse_CString; 471 | 472 | /* [MS-PPT] 2.9.43 TextBytesAtom */ 473 | function parse_TextBytesAtom(blob, length, opts) { 474 | var o = []; 475 | for(var i=0; i!=length; ++i) o.push(String.fromCharCode(blob.read_shift(1))); 476 | return o.join(""); 477 | } 478 | 479 | /* [MS-PPT] 2.9.47 SlideNumberMCAtom */ 480 | function parse_SlideNumberMCAtom(blob, length, opts) { blob.l += length; } 481 | 482 | /* [MS-PPT] 2.9.44 StyleTextPropAtom */ 483 | function parse_StyleTextPropAtom(blob, length, opts) { blob.l += length; } 484 | 485 | /* [MS-PPT] 2.9.50 DateTimeMCAtom */ 486 | function parse_DateTimeMCAtom(blob, length, opts) { blob.l += length; } 487 | 488 | /* [MS-PPT] 2.9.51 GenericDateMCAtom */ 489 | function parse_GenericDateMCAtom(blob, length, opts) { blob.l += length; } 490 | 491 | /* [MS-PPT] 2.9.54 TextSpecialInfoAtom */ 492 | function parse_TextSpecialInfoAtom(blob, length, opts) { blob.l += length; } 493 | 494 | /* [MS-PPT] 2.9.76 OfficeArtClientTextbox */ 495 | function parse_OfficeArtClientTextbox(blob, length, opts) { 496 | var o = {t:""}; 497 | recordhopper(blob, function oact(R, val) { 498 | switch(R.n) { 499 | case 'RT_TextBytesAtom': 500 | case 'RT_TextCharsAtom': 501 | o.t = val.replace(/\r/g,"\n"); 502 | break; 503 | case 'RT_TextHeaderAtom': break; 504 | case 'RT_OutlineTextRefAtom': 505 | case 'RT_TextRulerAtom': 506 | case 'RT_MasterTextPropAtom': 507 | case 'RT_StyleTextPropAtom': 508 | case 'RT_TextBookmarkAtom': 509 | case 'RT_TextSpecialInfoAtom': 510 | case 'RT_SlideNumberMetaCharAtom': 511 | case 'RT_DateTimeMetaCharAtom': 512 | case 'RT_GenericDateMetaCharAtom': 513 | case 'RT_HeaderMetaCharAtom': 514 | case 'RT_FooterMetaCharAtom': 515 | case 'RT_RtfDateTimeMetaCharAtom': 516 | case 'RT_InteractiveInfo': 517 | case 'RT_TextInteractiveInfoAtom': 518 | break; 519 | default: if(opts.WTF) throw R.n; break; 520 | } 521 | }, blob.l + length, opts); 522 | return o; 523 | } 524 | 525 | /* [MS-PPT] 2.9.79 MasterTextPropAtom */ 526 | function parse_MasterTextPropAtom(blob, length, opts) { blob.l += length; } 527 | 528 | /* [MS-PPT] 2.10 External Object Types */ 529 | 530 | /* [MS-PPT] 2.10.1 ExObjListContainer */ 531 | function parse_ExObjListContainer(blob, length, opts) { blob.l += length; } 532 | 533 | /* [MS-PPT] 2.10.3 ExObjListAtom */ 534 | function parse_ExObjListAtom(blob, length, opts) { blob.l += length; } 535 | 536 | /* [MS-PPT] 2.11 Other Types */ 537 | 538 | /* [MS-PPT] 2.11.9 RoundTripColorMappingAtom */ 539 | function parse_RoundTripColorMappingAtom(blob, length, opts) { blob.l += length; } 540 | 541 | /* [MS-PPT] 2.11.10 RoundTripCompositeMasterId12Atom */ 542 | function parse_RoundTripCompositeMasterId12Atom(blob, length, opts) { blob.l += length; } 543 | 544 | /* [MS-PPT] 2.11.11 RoundTripContentMasterId12Atom */ 545 | function parse_RoundTripContentMasterId12Atom(blob, length, opts) { blob.l += length; } 546 | 547 | /* [MS-PPT] 2.11.12 RoundTripContentMasterInfo12Atom */ 548 | function parse_RoundTripContentMasterInfo12Atom(blob, length, opts) { blob.l += length; } 549 | 550 | /* [MS-PPT] 2.11.13 RoundTripCustomTableStyles12Atom */ 551 | function parse_RoundTripCustomTableStyles12Atom(blob, length, opts) { blob.l += length; } 552 | 553 | /* [MS-PPT] 2.11.18 RoundTripNotesMasterTextStyles12Atom */ 554 | function parse_RoundTripNotesMasterTextStyles12Atom(blob, length, opts) { blob.l += length; } 555 | 556 | /* [MS-PPT] 2.11.19 RoundTripOArtTextStyles12Atom */ 557 | function parse_RoundTripOArtTextStyles12Atom(blob, length, opts) { blob.l += length; } 558 | 559 | /* [MS-PPT] 2.11.20 RoundTripOriginalMainMasterId12Atom */ 560 | function parse_RoundTripOriginalMainMasterId12Atom(blob, length, opts) { blob.l += length; } 561 | 562 | /* [MS-PPT] 2.11.27 RoundTripThemeAtom */ 563 | function parse_RoundTripThemeAtom(blob, length, opts) { blob.l += length; } 564 | 565 | /* [MS-PPT] 2.13.24 RecordType (other records are noted below) */ 566 | var RecordEnum = { 567 | 0x03E8: { n:"RT_Document", f:parse_DocumentContainer }, 568 | 0x03E9: { n:"RT_DocumentAtom", f:parse_DocumentAtom }, 569 | 0x03EA: { n:"RT_EndDocumentAtom", f:parse_EndDocumentAtom }, 570 | 0x03EE: { n:"RT_Slide", f:parse_SlideContainer }, 571 | 0x03EF: { n:"RT_SlideAtom", f:parse_SlideAtom }, 572 | 0x03F0: { n:"RT_Notes", f:parse_NotesContainer }, 573 | 0x03F1: { n:"RT_NotesAtom", f:parse_NotesAtom }, 574 | 0x03F2: { n:"RT_Environment", f:parse_DocumentTextInfoContainer }, 575 | 0x03F3: { n:"RT_SlidePersistAtom", f:parse_SlidePersistAtom }, 576 | 0x03F8: { n:"RT_MainMaster", f:parse_MainMasterContainer }, 577 | 0x03F9: { n:"RT_SlideShowSlideInfoAtom", f:parsenoop }, 578 | 0x03FA: { n:"RT_SlideViewInfo", f:parse_SlideViewInfo$ }, 579 | 0x03FB: { n:"RT_GuideAtom", f:parsenoop }, 580 | 0x03FD: { n:"RT_ViewInfoAtom", f:parsenoop }, 581 | 0x03FE: { n:"RT_SlideViewInfoAtom", f:parsenoop }, 582 | 0x03FF: { n:"RT_VbaInfo", f:parse_VBAInfoContainer }, 583 | 0x0400: { n:"RT_VbaInfoAtom", f:parsenoop }, 584 | 0x0401: { n:"RT_SlideShowDocInfoAtom", f:parse_SlideShowDocInfoAtom }, 585 | 0x0402: { n:"RT_Summary", f:parsenoop }, 586 | 0x0406: { n:"RT_DocRoutingSlipAtom", f:parsenoop }, 587 | 0x0407: { n:"RT_OutlineViewInfo", f:parse_OutlineViewInfoContainer }, 588 | 0x0408: { n:"RT_SorterViewInfo", f:parse_SorterViewInfoContainer }, 589 | 0x0409: { n:"RT_ExternalObjectList", f:parse_ExObjListContainer }, 590 | 0x040A: { n:"RT_ExternalObjectListAtom", f:parse_ExObjListAtom }, 591 | 0x040B: { n:"RT_DrawingGroup", f:parse_DrawingGroupContainer }, 592 | 0x040C: { n:"RT_Drawing", f:parse_DrawingContainer }, 593 | 0x040D: { n:"RT_GridSpacing10Atom", f:parsenoop }, 594 | 0x040E: { n:"RT_RoundTripTheme12Atom", f:parse_RoundTripThemeAtom }, 595 | 0x040F: { n:"RT_RoundTripColorMapping12Atom", f:parse_RoundTripColorMappingAtom }, 596 | 0x0410: { n:"RT_NamedShows", f:parsenoop }, 597 | 0x0411: { n:"RT_NamedShow", f:parsenoop }, 598 | 0x0412: { n:"RT_NamedShowSlidesAtom", f:parsenoop }, 599 | 0x0413: { n:"RT_NotesTextViewInfo9", f:parse_NotesTextViewInfoContainer }, 600 | 0x0414: { n:"RT_NormalViewSetInfo9", f:parse_NormalViewSetInfoContainer }, 601 | 0x0415: { n:"RT_NormalViewSetInfo9Atom", f:parsenoop }, 602 | 0x041C: { n:"RT_RoundTripOriginalMainMasterId12Atom", f:parse_RoundTripOriginalMainMasterId12Atom }, 603 | 0x041D: { n:"RT_RoundTripCompositeMasterId12Atom", f:parse_RoundTripCompositeMasterId12Atom }, 604 | 0x041E: { n:"RT_RoundTripContentMasterInfo12Atom", f:parse_RoundTripContentMasterInfo12Atom }, 605 | 0x041F: { n:"RT_RoundTripShapeId12Atom", f:parsenoop }, 606 | 0x0420: { n:"RT_RoundTripHFPlaceholder12Atom", f:parsenoop }, 607 | 0x0422: { n:"RT_RoundTripContentMasterId12Atom", f:parse_RoundTripContentMasterId12Atom}, 608 | 0x0423: { n:"RT_RoundTripOArtTextStyles12Atom", f:parse_RoundTripOArtTextStyles12Atom}, 609 | 0x0424: { n:"RT_RoundTripHeaderFooterDefaults12Atom", f:parsenoop }, 610 | 0x0425: { n:"RT_RoundTripDocFlags12Atom", f:parsenoop }, 611 | 0x0426: { n:"RT_RoundTripShapeCheckSumForCL12Atom", f:parsenoop }, 612 | 0x0427: { n:"RT_RoundTripNotesMasterTextStyles12Atom", f:parse_RoundTripNotesMasterTextStyles12Atom }, 613 | 0x0428: { n:"RT_RoundTripCustomTableStyles12Atom", f:parse_RoundTripCustomTableStyles12Atom }, 614 | 0x07D0: { n:"RT_List", f:parse_DocInfoListContainer }, 615 | 0x07D5: { n:"RT_FontCollection", f:parse_FontCollectionContainer }, 616 | 0x07D6: { n:"RT_FontCollection10", f:parsenoop }, 617 | 0x07E3: { n:"RT_BookmarkCollection", f:parsenoop }, 618 | 0x07E4: { n:"RT_SoundCollection", f:parsenoop }, 619 | 0x07E5: { n:"RT_SoundCollectionAtom", f:parsenoop }, 620 | 0x07E6: { n:"RT_Sound", f:parsenoop }, 621 | 0x07E7: { n:"RT_SoundDataBlob", f:parsenoop }, 622 | 0x07E9: { n:"RT_BookmarkSeedAtom", f:parsenoop }, 623 | 0x07F0: { n:"RT_ColorSchemeAtom", f:parse_ColorSchemeAtom$ }, 624 | 0x07F8: { n:"RT_BlipCollection9", f:parsenoop }, 625 | 0x07F9: { n:"RT_BlipEntity9Atom", f:parsenoop }, 626 | 0x0BC1: { n:"RT_ExternalObjectRefAtom", f:parsenoop }, 627 | 0x0BC3: { n:"RT_PlaceholderAtom", f:parsenoop }, 628 | 0x0BDB: { n:"RT_ShapeAtom", f:parsenoop }, 629 | 0x0BDC: { n:"RT_ShapeFlags10Atom", f:parsenoop }, 630 | 0x0BDD: { n:"RT_RoundTripNewPlaceholderId12Atom", f:parsenoop }, 631 | 0x0F9E: { n:"RT_OutlineTextRefAtom", f:parsenoop2 }, 632 | 0x0F9F: { n:"RT_TextHeaderAtom", f:parse_TextHeaderAtom }, 633 | 0x0FA0: { n:"RT_TextCharsAtom", f:parse_TextCharsAtom }, 634 | 0x0FA1: { n:"RT_StyleTextPropAtom", f:parse_StyleTextPropAtom }, 635 | 0x0FA2: { n:"RT_MasterTextPropAtom", f:parse_MasterTextPropAtom }, 636 | 0x0FA3: { n:"RT_TextMasterStyleAtom", f:parse_TextMasterStyleAtom }, 637 | 0x0FA4: { n:"RT_TextCharFormatExceptionAtom", f:parse_TextCFExceptionAtom }, 638 | 0x0FA5: { n:"RT_TextParagraphFormatExceptionAtom", f:parse_TextPFExceptionAtom }, 639 | 0x0FA6: { n:"RT_TextRulerAtom", f:parse_TextRulerAtom }, 640 | 0x0FA7: { n:"RT_TextBookmarkAtom", f:parsenoop }, 641 | 0x0FA8: { n:"RT_TextBytesAtom", f:parse_TextBytesAtom }, 642 | 0x0FA9: { n:"RT_TextSpecialInfoDefaultAtom", f:parse_TextSIExceptionAtom }, 643 | 0x0FAA: { n:"RT_TextSpecialInfoAtom", f:parse_TextSpecialInfoAtom }, 644 | 0x0FAB: { n:"RT_DefaultRulerAtom", f:parsenoop }, 645 | 0x0FAC: { n:"RT_StyleTextProp9Atom", f:parsenoop }, 646 | 0x0FAD: { n:"RT_TextMasterStyle9Atom", f:parsenoop }, 647 | 0x0FAE: { n:"RT_OutlineTextProps9", f:parsenoop }, 648 | 0x0FAF: { n:"RT_OutlineTextPropsHeader9Atom", f:parsenoop }, 649 | 0x0FB0: { n:"RT_TextDefaults9Atom", f:parsenoop }, 650 | 0x0FB1: { n:"RT_StyleTextProp10Atom", f:parsenoop }, 651 | 0x0FB2: { n:"RT_TextMasterStyle10Atom", f:parsenoop }, 652 | 0x0FB3: { n:"RT_OutlineTextProps10", f:parsenoop }, 653 | 0x0FB4: { n:"RT_TextDefaults10Atom", f:parsenoop }, 654 | 0x0FB5: { n:"RT_OutlineTextProps11", f:parsenoop }, 655 | 0x0FB6: { n:"RT_StyleTextProp11Atom", f:parsenoop }, 656 | 0x0FB7: { n:"RT_FontEntityAtom", f:parsenoop }, 657 | 0x0FB8: { n:"RT_FontEmbedDataBlob", f:parsenoop }, 658 | 0x0FBA: { n:"RT_CString", f:parse_CString }, 659 | 0x0FC1: { n:"RT_MetaFile", f:parsenoop }, 660 | 0x0FC3: { n:"RT_ExternalOleObjectAtom", f:parsenoop }, 661 | 0x0FC8: { n:"RT_Kinsoku", f:parse_KinsokuContainer }, 662 | 0x0FC9: { n:"RT_Handout", f:parse_HandoutContainer }, 663 | 0x0FCC: { n:"RT_ExternalOleEmbed", f:parsenoop }, 664 | 0x0FCD: { n:"RT_ExternalOleEmbedAtom", f:parsenoop }, 665 | 0x0FCE: { n:"RT_ExternalOleLink", f:parsenoop }, 666 | 0x0FD0: { n:"RT_BookmarkEntityAtom", f:parsenoop }, 667 | 0x0FD1: { n:"RT_ExternalOleLinkAtom", f:parsenoop }, 668 | 0x0FD2: { n:"RT_KinsokuAtom", f:parsenoop }, 669 | 0x0FD3: { n:"RT_ExternalHyperlinkAtom", f:parsenoop }, 670 | 0x0FD7: { n:"RT_ExternalHyperlink", f:parsenoop }, 671 | 0x0FD8: { n:"RT_SlideNumberMetaCharAtom", f:parse_SlideNumberMCAtom }, 672 | 0x0FD9: { n:"RT_HeadersFooters", f:parse_HeadersFooters$ }, 673 | 0x0FDA: { n:"RT_HeadersFootersAtom", f:parse_HeadersFootersAtom }, 674 | 0x0FDF: { n:"RT_TextInteractiveInfoAtom", f:parsenoop }, 675 | 0x0FE4: { n:"RT_ExternalHyperlink9", f:parsenoop }, 676 | 0x0FE7: { n:"RT_RecolorInfoAtom", f:parsenoop }, 677 | 0x0FEE: { n:"RT_ExternalOleControl", f:parsenoop }, 678 | 0x0FF0: { n:"RT_SlideListWithText", f:parse_SlideListWithTextContainer }, 679 | 0x0FF1: { n:"RT_AnimationInfoAtom", f:parsenoop }, 680 | 0x0FF2: { n:"RT_InteractiveInfo", f:parsenoop }, 681 | 0x0FF3: { n:"RT_InteractiveInfoAtom", f:parsenoop }, 682 | 0x0FF5: { n:"RT_UserEditAtom", f:parse_UserEditAtom }, 683 | 0x0FF6: { n:"RT_CurrentUserAtom", f:parse_CurrentUserAtom }, 684 | 0x0FF7: { n:"RT_DateTimeMetaCharAtom", f:parse_DateTimeMCAtom }, 685 | 0x0FF8: { n:"RT_GenericDateMetaCharAtom", f:parse_GenericDateMCAtom }, 686 | 0x0FF9: { n:"RT_HeaderMetaCharAtom", f:parsenoop }, 687 | 0x0FFA: { n:"RT_FooterMetaCharAtom", f:parsenoop2 }, 688 | 0x0FFB: { n:"RT_ExternalOleControlAtom", f:parsenoop }, 689 | 0x1004: { n:"RT_ExternalMediaAtom", f:parsenoop }, 690 | 0x1005: { n:"RT_ExternalVideo", f:parsenoop }, 691 | 0x1006: { n:"RT_ExternalAviMovie", f:parsenoop }, 692 | 0x1007: { n:"RT_ExternalMciMovie", f:parsenoop }, 693 | 0x100D: { n:"RT_ExternalMidiAudio", f:parsenoop }, 694 | 0x100E: { n:"RT_ExternalCdAudio", f:parsenoop }, 695 | 0x100F: { n:"RT_ExternalWavAudioEmbedded", f:parsenoop }, 696 | 0x1010: { n:"RT_ExternalWavAudioLink", f:parsenoop }, 697 | 0x1011: { n:"RT_ExternalOleObjectStg", f:parse_ExternalOleObjectStg$ }, 698 | 0x1012: { n:"RT_ExternalCdAudioAtom", f:parsenoop }, 699 | 0x1013: { n:"RT_ExternalWavAudioEmbeddedAtom", f:parsenoop }, 700 | 0x1014: { n:"RT_AnimationInfo", f:parsenoop }, 701 | 0x1015: { n:"RT_RtfDateTimeMetaCharAtom", f:parsenoop }, 702 | 0x1018: { n:"RT_ExternalHyperlinkFlagsAtom", f:parsenoop }, 703 | 0x1388: { n:"RT_ProgTags", f:parse_ProgTags$ }, 704 | 0x1389: { n:"RT_ProgStringTag", f:parsenoop }, 705 | 0x138A: { n:"RT_ProgBinaryTag", f:parsenoop }, 706 | 0x138B: { n:"RT_BinaryTagDataBlob", f:parsenoop }, 707 | 0x1770: { n:"RT_PrintOptionsAtom", f:parsenoop }, 708 | 0x1772: { n:"RT_PersistDirectoryAtom", f:parse_PersistDirectoryAtom }, 709 | 0x177A: { n:"RT_PresentationAdvisorFlags9Atom", f:parsenoop }, 710 | 0x177B: { n:"RT_HtmlDocInfo9Atom", f:parsenoop }, 711 | 0x177C: { n:"RT_HtmlPublishInfoAtom", f:parsenoop }, 712 | 0x177D: { n:"RT_HtmlPublishInfo9", f:parsenoop }, 713 | 0x177E: { n:"RT_BroadcastDocInfo9", f:parsenoop }, 714 | 0x177F: { n:"RT_BroadcastDocInfo9Atom", f:parsenoop }, 715 | 0x1784: { n:"RT_EnvelopeFlags9Atom", f:parsenoop }, 716 | 0x1785: { n:"RT_EnvelopeData9Atom", f:parsenoop }, 717 | 0x2AFB: { n:"RT_VisualShapeAtom", f:parsenoop }, 718 | 0x2B00: { n:"RT_HashCodeAtom", f:parsenoop }, 719 | 0x2B01: { n:"RT_VisualPageAtom", f:parsenoop }, 720 | 0x2B02: { n:"RT_BuildList", f:parsenoop }, 721 | 0x2B03: { n:"RT_BuildAtom", f:parsenoop }, 722 | 0x2B04: { n:"RT_ChartBuild", f:parsenoop }, 723 | 0x2B05: { n:"RT_ChartBuildAtom", f:parsenoop }, 724 | 0x2B06: { n:"RT_DiagramBuild", f:parsenoop }, 725 | 0x2B07: { n:"RT_DiagramBuildAtom", f:parsenoop }, 726 | 0x2B08: { n:"RT_ParaBuild", f:parsenoop }, 727 | 0x2B09: { n:"RT_ParaBuildAtom", f:parsenoop }, 728 | 0x2B0A: { n:"RT_LevelInfoAtom", f:parsenoop }, 729 | 0x2B0B: { n:"RT_RoundTripAnimationAtom12Atom", f:parsenoop }, 730 | 0x2B0D: { n:"RT_RoundTripAnimationHashAtom12Atom", f:parsenoop }, 731 | 0x2EE0: { n:"RT_Comment10", f:parsenoop }, 732 | 0x2EE1: { n:"RT_Comment10Atom", f:parsenoop }, 733 | 0x2EE4: { n:"RT_CommentIndex10", f:parsenoop }, 734 | 0x2EE5: { n:"RT_CommentIndex10Atom", f:parsenoop }, 735 | 0x2EE6: { n:"RT_LinkedShape10Atom", f:parsenoop }, 736 | 0x2EE7: { n:"RT_LinkedSlide10Atom", f:parsenoop }, 737 | 0x2EEA: { n:"RT_SlideFlags10Atom", f:parsenoop }, 738 | 0x2EEB: { n:"RT_SlideTime10Atom", f:parsenoop }, 739 | 0x2EEC: { n:"RT_DiffTree10", f:parsenoop }, 740 | 0x2EED: { n:"RT_Diff10", f:parsenoop }, 741 | 0x2EEE: { n:"RT_Diff10Atom", f:parsenoop }, 742 | 0x2EEF: { n:"RT_SlideListTableSize10Atom", f:parsenoop }, 743 | 0x2EF0: { n:"RT_SlideListEntry10Atom", f:parsenoop }, 744 | 0x2EF1: { n:"RT_SlideListTable10", f:parsenoop }, 745 | 0x2F14: { n:"RT_CryptSession10Container", f:parsenoop }, 746 | 0x32C8: { n:"RT_FontEmbedFlags10Atom", f:parsenoop }, 747 | 0x36B0: { n:"RT_FilterPrivacyFlags10Atom", f:parsenoop }, 748 | 0x36B1: { n:"RT_DocToolbarStates10Atom", f:parsenoop }, 749 | 0x36B2: { n:"RT_PhotoAlbumInfo10Atom", f:parsenoop }, 750 | 0x36B3: { n:"RT_SmartTagStore11Container", f:parsenoop }, 751 | 0x3714: { n:"RT_RoundTripSlideSyncInfo12", f:parsenoop }, 752 | 0x3715: { n:"RT_RoundTripSlideSyncInfoAtom12", f:parsenoop }, 753 | 0x6969: { n:"RT_SheetJSAtom", f:parsenoop }, 754 | 0xF125: { n:"RT_TimeConditionContainer", f:parsenoop }, 755 | 0xF127: { n:"RT_TimeNode", f:parsenoop }, 756 | 0xF128: { n:"RT_TimeCondition", f:parsenoop }, 757 | 0xF129: { n:"RT_TimeModifier", f:parsenoop }, 758 | 0xF12A: { n:"RT_TimeBehaviorContainer", f:parsenoop }, 759 | 0xF12B: { n:"RT_TimeAnimateBehaviorContainer", f:parsenoop }, 760 | 0xF12C: { n:"RT_TimeColorBehaviorContainer", f:parsenoop }, 761 | 0xF12D: { n:"RT_TimeEffectBehaviorContainer", f:parsenoop }, 762 | 0xF12E: { n:"RT_TimeMotionBehaviorContainer", f:parsenoop }, 763 | 0xF12F: { n:"RT_TimeRotationBehaviorContainer", f:parsenoop }, 764 | 0xF130: { n:"RT_TimeScaleBehaviorContainer", f:parsenoop }, 765 | 0xF131: { n:"RT_TimeSetBehaviorContainer", f:parsenoop }, 766 | 0xF132: { n:"RT_TimeCommandBehaviorContainer", f:parsenoop }, 767 | 0xF133: { n:"RT_TimeBehavior", f:parsenoop }, 768 | 0xF134: { n:"RT_TimeAnimateBehavior", f:parsenoop }, 769 | 0xF135: { n:"RT_TimeColorBehavior", f:parsenoop }, 770 | 0xF136: { n:"RT_TimeEffectBehavior", f:parsenoop }, 771 | 0xF137: { n:"RT_TimeMotionBehavior", f:parsenoop }, 772 | 0xF138: { n:"RT_TimeRotationBehavior", f:parsenoop }, 773 | 0xF139: { n:"RT_TimeScaleBehavior", f:parsenoop }, 774 | 0xF13A: { n:"RT_TimeSetBehavior", f:parsenoop }, 775 | 0xF13B: { n:"RT_TimeCommandBehavior", f:parsenoop }, 776 | 0xF13C: { n:"RT_TimeClientVisualElement", f:parsenoop }, 777 | 0xF13D: { n:"RT_TimePropertyList", f:parsenoop }, 778 | 0xF13E: { n:"RT_TimeVariantList", f:parsenoop }, 779 | 0xF13F: { n:"RT_TimeAnimationValueList", f:parsenoop }, 780 | 0xF140: { n:"RT_TimeIterateData", f:parsenoop }, 781 | 0xF141: { n:"RT_TimeSequenceData", f:parsenoop }, 782 | 0xF142: { n:"RT_TimeVariant", f:parsenoop }, 783 | 0xF143: { n:"RT_TimeAnimationValue", f:parsenoop }, 784 | 0xF144: { n:"RT_TimeExtTimeNodeContainer", f:parsenoop }, 785 | 0xF145: { n:"RT_TimeSubEffectContainer", f:parsenoop }, 786 | 787 | /* [MS-ODRAW] uses the same record format */ 788 | 0xF000: { n:"OfficeArtDggContainer", f:parse_OfficeArtDggContainer }, 789 | 0xF001: { n:"OfficeArtBStoreContainer", f:parse_OfficeArtBStoreContainer }, 790 | 0xF002: { n:"OfficeArtDgContainer", f:parse_OfficeArtDgContainer }, 791 | 0xF003: { n:"OfficeArtSpgrContainer", f:parse_OfficeArtSpgrContainer }, 792 | 0xF004: { n:"OfficeArtSpContainer", f:parse_OfficeArtSpContainer }, 793 | 0xF005: { n:"OfficeArtSolverContainer", f:parse_OfficeArtSolverContainer }, 794 | 0xF006: { n:"OfficeArtFDGGBlock", f:parse_OfficeArtFDGGBlock }, 795 | 0xF007: { n:"OfficeArtFBSE", f:parse_OfficeArtFBSE }, 796 | 0xF008: { n:"OfficeArtFDG", f:parse_OfficeArtFDG }, 797 | 0xF009: { n:"OfficeArtFSPGR", f:parse_OfficeArtFSPGR }, 798 | 0xF00A: { n:"OfficeArtFSP", f:parse_OfficeArtFSP }, 799 | 0xF00B: { n:"OfficeArtFOPT", f:parse_OfficeArtFOPT }, 800 | 0xF00F: { n:"OfficeArtChildAnchor", f:parse_OfficeArtChildAnchor }, 801 | 0xF012: { n:"OfficeArtFConnectorRule", f:parse_OfficeArtFConnectorRule }, 802 | 0xF014: { n:"OfficeArtFArcRule", f:parse_OfficeArtFArcRule }, 803 | 0xF017: { n:"OfficeArtFCalloutRule", f:parse_OfficeArtFCalloutRule }, 804 | 0xF01A: { n:"OfficeArtBlipEMF", f:parse_OfficeArtBlipEMF }, 805 | 0xF01B: { n:"OfficeArtBlipWMF", f:parse_OfficeArtBlipWMF }, 806 | 0xF01C: { n:"OfficeArtBlipPICT", f:parse_OfficeArtBlipPICT }, 807 | 0xF01D: { n:"OfficeArtBlipJPEG", f:parse_OfficeArtBlipJPEG }, 808 | 0xF01E: { n:"OfficeArtBlipPNG", f:parse_OfficeArtBlipPNG }, 809 | 0xF01F: { n:"OfficeArtBlipDIB", f:parse_OfficeArtBlipDIB }, 810 | 0xF029: { n:"OfficeArtBlipTIFF", f:parse_OfficeArtBlipTIFF }, 811 | 0xF118: { n:"OfficeArtFRITContainer", f:parse_OfficeArtFRITContainer }, 812 | 0xF119: { n:"OfficeArtFDGSL", f:parse_OfficeArtFDGSL }, 813 | 0xF11A: { n:"OfficeArtMRUContainer", f:parse_OfficeArtMRUContainer }, 814 | 0xF11D: { n:"OfficeArtFPSPL", f:parse_OfficeArtFPSPL }, 815 | 0xF11E: { n:"OfficeArtSplitMenuColorContainer", f:parse_OfficeArtSplitMenuColorContainer }, 816 | 0xF121: { n:"OfficeArtSecondaryFOPT", f:parse_OfficeArtSecondaryFOPT }, 817 | 0xF122: { n:"OfficeArtTertiaryFOPT", f:parse_OfficeArtTertiaryFOPT }, 818 | 819 | /* [MS-ODRAW] assumes the host application defines these records */ 820 | 0xF00D: { n:"OfficeArtClientTextbox", f:parse_OfficeArtClientTextbox }, 821 | 0xF010: { n:"OfficeArtClientAnchor", f:parse_OfficeArtClientAnchor }, 822 | 0xF011: { n:"OfficeArtClientData", f:parse_OfficeArtClientData }, 823 | 824 | 0xFC1C: { n:"RT_MagicAtom", f:parsenoop } 825 | }; 826 | function parse_SlideViewInfo$(blob, length, opts) { blob.l += length; } 827 | function parse_ProgTags$(blob, length, opts) { blob.l += length; } 828 | function parse_HeadersFooters$(blob, length, opts) { blob.l += length; } 829 | function parse_ColorSchemeAtom$(blob, length, opts) { blob.l += length; } 830 | function parse_ExternalOleObjectStg$(blob, length, opts) { blob.l += length; } 831 | 832 | function process_ppt(ppt, opts) { 833 | opts = opts || {}; 834 | 835 | /* 2.1.1 Current User Stream */ 836 | var custream = ppt.find('Current User'); 837 | var cublob = custream.content; 838 | 839 | /* 2.1.2 PowerPoint Document Stream */ 840 | var pptstream = ppt.find('PowerPoint Document'); 841 | var pptblob = pptstream.content; 842 | 843 | var cu, uea; 844 | 845 | /* Part 1.1 */ 846 | recordhopper(cublob, function pptdoc1(R, val, len) { 847 | if(cu) throw "unexpected second RT_CurrentUserAtom in Current User stream"; 848 | cu = val; 849 | }, cublob.length, { 850 | records: ['RT_CurrentUserAtom'] 851 | }); 852 | 853 | /* Part 1.2 */ 854 | pptblob.l = cu.offset; 855 | 856 | /* Part 1.3 - 1.7 */ 857 | var ueas = [], persists = [], state = 0; 858 | recordhopper(pptblob, function pptdoc2(R, val, len) { 859 | if(R.n === 'RT_UserEditAtom') { 860 | /* 1.3 */ 861 | ueas.push(val); 862 | state = 1; 863 | /* 1.4 */ 864 | pptblob.l = val.offsetPersistDirectory; 865 | } else { 866 | /* 1.5 */ 867 | persists.push(val); 868 | /* 1.6 */ 869 | pptblob.l = ueas[ueas.length-1].offsetLastEdit; 870 | if(pptblob.l === 0) pptblob.l = pptblob.length; 871 | } 872 | }, pptblob.length, { 873 | records: ['RT_PersistDirectoryAtom', 'RT_UserEditAtom'] 874 | }); 875 | 876 | if(opts.dump) { 877 | console.log(ueas); 878 | console.log(persists); 879 | } 880 | opts.persist = persists; 881 | 882 | var o = { 883 | slides: [], 884 | docs: [] 885 | }; 886 | 887 | /* second pass */ 888 | pptblob.l = 0; 889 | recordhopper(pptblob, function pptdoc3(R, val, len) { 890 | switch(R.n) { 891 | case 'RT_Slide': o.slides.push(val); break; 892 | case 'RT_Document': o.docs.push(val); break; 893 | case 'RT_Notes': break; 894 | case 'RT_MainMaster': break; 895 | case 'RT_Handout': break; 896 | 897 | case 'RT_PersistDirectoryAtom': break; 898 | case 'RT_UserEditAtom': break; 899 | case 'RT_ExternalOleObjectStg': break; 900 | default: if(opts.WTF) throw R.n; break; 901 | } 902 | }, pptblob.length, opts); 903 | 904 | return o; 905 | } 906 | 907 | function readFile(filename, opts) { 908 | var ppt = CFB.read(filename, {type:'file'}); 909 | return process_ppt(ppt, opts); 910 | } 911 | 912 | var to_text_d = function(docs) { 913 | var out = []; 914 | docs.forEach(function(d) { 915 | var o, i; 916 | try { o = d.slideList; } catch(e) { return; } 917 | for(i = 0; i != o.length; ++i) { out.push(o[i]); } 918 | }); 919 | return out; 920 | }; 921 | 922 | var to_text_s = function(slides) { 923 | var out = []; 924 | slides.forEach(function(s) { 925 | var o, i; 926 | try { o = s.drawing.groupShape; } catch(e) { return; } 927 | for(i = 0; i != o.length; ++i) { 928 | if(!o[i].clientTextbox) continue; 929 | out.push(o[i].clientTextbox.t); 930 | } 931 | }); 932 | return out; 933 | }; 934 | 935 | var to_text = function(pres) { 936 | if(pres.docs.length > 0 && pres.docs[0].slideList.length > 0) return to_text_d(pres.docs); 937 | else return to_text_s(pres.slides); 938 | }; 939 | 940 | var utils = { 941 | to_text: to_text 942 | }; 943 | PPT.parse_pptcfb = process_ppt; 944 | PPT.readFile = readFile; 945 | PPT.utils = utils; 946 | })(typeof exports !== 'undefined' ? exports : PPT); 947 | --------------------------------------------------------------------------------