/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */ import { WorkBook, ParsingOptions } from '../'; import * as _XLSX from '../'; declare var XLSX: typeof _XLSX; type RawData = any; declare var XML_HEADER: string; declare var xlmlregex: RegExp; declare function parsexmltag(tag: string, skip_root?: boolean, skip_LC?: boolean): any; declare function xlml_normalize(d: RawData): string; type RDF = [string, string][]; /* Part 3 Section 4 Manifest File */ var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet"; function parse_manifest(d: RawData, opts?: ParsingOptions) { var str = xlml_normalize(d); var Rn: RegExpExecArray | null; var FEtag; while((Rn = xlmlregex.exec(str))) switch(Rn[3]) { case 'manifest': break; // 4.2 case 'file-entry': // 4.3 FEtag = parsexmltag(Rn[0], false); if(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet"); break; case 'encryption-data': // 4.4 case 'algorithm': // 4.5 case 'start-key-generation': // 4.6 case 'key-derivation': // 4.7 throw new Error("Unsupported ODS Encryption"); default: if(opts && opts.WTF) throw Rn; } } function write_manifest(manifest: RDF): string { var o = [XML_HEADER]; o.push('\n'); o.push(' \n'); for(var i = 0; i < manifest.length; ++i) o.push(' \n'); o.push(''); return o.join(""); } /* Part 3 Section 6 Metadata Manifest File */ function write_rdf_type(file: string, res: string, tag?: string): string { return [ ' \n', ' \n', ' \n' ].join(""); } function write_rdf_has(base: string, file: string): string { return [ ' \n', ' \n', ' \n' ].join(""); } function write_rdf(rdf: RDF): string { var o: string[] = [XML_HEADER]; o.push('\n'); for(var i = 0; i != rdf.length; ++i) { o.push(write_rdf_type(rdf[i][0], rdf[i][1])); o.push(write_rdf_has("",rdf[i][0])); } o.push(write_rdf_type("","Document", "pkg")); o.push(''); return o.join(""); } /* TODO: pull properties */ function write_meta_ods(wb?: WorkBook, opts?: any): string { return 'Sheet' + 'JS ' + XLSX.version + ''; }