version bump 0.3.2: cleanup

- updated jszip to version 2 (20121106)
- added some .match guards (2)
- updated package.json
This commit is contained in:
SheetJS 2013-11-05 22:05:32 -08:00
parent 9e41edcbd2
commit 0b642080bf
6 changed files with 2328 additions and 2127 deletions

View File

@ -2,7 +2,7 @@ function parsexmltag(tag) {
var words = tag.split(/\s+/);
var z = {'0': words[0]};
if(words.length === 1) return z;
tag.match(/(\w+)="([^"]*)"/g).map(
(tag.match(/(\w+)="([^"]*)"/g) || []).map(
function(x){var y=x.match(/(\w+)="([^"]*)"/); z[y[1]] = y[2]; });
return z;
}
@ -53,7 +53,7 @@ function matchtag(f,g) {return new RegExp('<'+f+'(?: xml:space="preserve")?>([^\
function parseVector(data) {
var h = parsexmltag(data);
var matches = data.match(new RegExp("<vt:" + h.baseType + ">(.*?)</vt:" + h.baseType + ">", 'g'));
var matches = data.match(new RegExp("<vt:" + h.baseType + ">(.*?)</vt:" + h.baseType + ">", 'g'))||[];
if(matches.length != h.size) throw "unexpected vector length " + matches.length + " != " + h.size;
var res = [];
matches.forEach(function(x) {

View File

@ -6,7 +6,7 @@ var parse_sst = (function(){
/* 18.4.7 rPr CT_RPrElt */
var parse_rpr = function(rpr, intro, outro) {
var font = {};
rpr.match(/<[^>]*>/g).forEach(function(x) {
(rpr.match(/<[^>]*>/g)||[]).forEach(function(x) {
var y = parsexmltag(x);
switch(y[0]) {
/* 18.8.12 condense CT_BooleanProperty */
@ -130,7 +130,7 @@ var parse_sst = (function(){
var s = [];
/* 18.4.9 sst CT_Sst */
var sst = data.match(new RegExp("<sst([^>]*)>([\\s\\S]*)<\/sst>","m"));
if(sst) {
if(isval(sst)) {
s = sst[2].replace(/<si>/g,"").split(/<\/si>/).map(parse_si);
sst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;
}

View File

@ -222,7 +222,7 @@ function parseProps(data) {
function parseDeps(data) {
var d = [];
var l = 0, i = 1;
data.match(/<[^>]*>/g).forEach(function(x) {
(data.match(/<[^>]*>/g)||[]).forEach(function(x) {
var y = parsexmltag(x);
switch(y[0]) {
case '<?xml': break;
@ -445,23 +445,30 @@ function parseStyles(data) {
return styles;
}
function getdata(data) {
if(!data) return {};
if(data.data) return data.data;
if(data._data && data._data.getContent) return Array.prototype.slice.call(data._data.getContent(),0).map(function(x) { return String.fromCharCode(x); }).join("");
return {};
}
function parseZip(zip) {
var entries = Object.keys(zip.files);
var keys = entries.filter(function(x){return x.substr(-1) != '/';}).sort();
var dir = parseCT((zip.files['[Content_Types].xml']||{}).data);
var dir = parseCT(getdata(zip.files['[Content_Types].xml']));
strs = {};
if(dir.sst) strs=parse_sst(zip.files[dir.sst.replace(/^\//,'')].data);
if(dir.sst) strs=parse_sst(getdata(zip.files[dir.sst.replace(/^\//,'')]));
styles = {};
if(dir.style) styles = parseStyles(zip.files[dir.style.replace(/^\//,'')].data);
if(dir.style) styles = parseStyles(getdata(zip.files[dir.style.replace(/^\//,'')]));
var wb = parseWB(zip.files[dir.workbooks[0].replace(/^\//,'')].data);
var propdata = dir.coreprops.length !== 0 ? zip.files[dir.coreprops[0].replace(/^\//,'')].data : "";
propdata += dir.extprops.length !== 0 ? zip.files[dir.extprops[0].replace(/^\//,'')].data : "";
var wb = parseWB(getdata(zip.files[dir.workbooks[0].replace(/^\//,'')]));
var propdata = dir.coreprops.length !== 0 ? getdata(zip.files[dir.coreprops[0].replace(/^\//,'')]) : "";
propdata += dir.extprops.length !== 0 ? getdata(zip.files[dir.extprops[0].replace(/^\//,'')]) : "";
var props = propdata !== "" ? parseProps(propdata) : {};
var deps = {};
if(dir.calcchain) deps=parseDeps(zip.files[dir.calcchain.replace(/^\//,'')].data);
if(dir.calcchain) deps=parseDeps(getdata(zip.files[dir.calcchain.replace(/^\//,'')]));
var sheets = {}, i=0;
if(!props.Worksheets) {
/* Google Docs doesn't generate the appropriate metadata, so we impute: */
@ -472,12 +479,12 @@ function parseZip(zip) {
props.SheetNames[j] = wbsheets[j].name;
}
for(i = 0; i != props.Worksheets; ++i) {
sheets[props.SheetNames[i]]=parseSheet(zip.files['xl/worksheets/sheet' + (i+1) + '.xml'].data);
sheets[props.SheetNames[i]]=parseSheet(getdata(zip.files['xl/worksheets/sheet' + (i+1) + '.xml']));
}
}
else {
for(i = 0; i != props.Worksheets; ++i) {
sheets[props.SheetNames[i]]=parseSheet(zip.files[dir.sheets[i].replace(/^\//,'')].data);
sheets[props.SheetNames[i]]=parseSheet(getdata(zip.files[dir.sheets[i].replace(/^\//,'')]));
}
}
return {

4377
jszip.js

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{
"name": "xlsx",
"version": "0.3.1",
"author": "Niggler",
"version": "0.3.2",
"author": "sheetjs",
"description": "(one day) a full-featured XLSX parser and writer. For now, primitive parser",
"keywords": [
"xlsx", "office", "excel", "spreadsheet"
@ -20,14 +20,14 @@
},
"repository": {
"type":"git",
"url": "git://github.com/Niggler/js-xlsx.git"
"url": "git://github.com/SheetJS/js-xlsx.git"
},
"scripts": {
"pretest": "git submodule init && git submodule update",
"test": "make mocha",
"test-jasmine": "jasmine-node --verbose tests/"
},
"bugs": { "url": "https://github.com/Niggler/js-xlsx/issues" },
"bugs": { "url": "https://github.com/SheetJS/js-xlsx/issues" },
"license": "Apache-2.0",
"engines": { "node": ">=0.6" }
}

35
xlsx.js
View File

@ -228,7 +228,7 @@ function parsexmltag(tag) {
var words = tag.split(/\s+/);
var z = {'0': words[0]};
if(words.length === 1) return z;
tag.match(/(\w+)="([^"]*)"/g).map(
(tag.match(/(\w+)="([^"]*)"/g) || []).map(
function(x){var y=x.match(/(\w+)="([^"]*)"/); z[y[1]] = y[2]; });
return z;
}
@ -279,7 +279,7 @@ function matchtag(f,g) {return new RegExp('<'+f+'(?: xml:space="preserve")?>([^\
function parseVector(data) {
var h = parsexmltag(data);
var matches = data.match(new RegExp("<vt:" + h.baseType + ">(.*?)</vt:" + h.baseType + ">", 'g'));
var matches = data.match(new RegExp("<vt:" + h.baseType + ">(.*?)</vt:" + h.baseType + ">", 'g'))||[];
if(matches.length != h.size) throw "unexpected vector length " + matches.length + " != " + h.size;
var res = [];
matches.forEach(function(x) {
@ -298,7 +298,7 @@ var parse_sst = (function(){
/* 18.4.7 rPr CT_RPrElt */
var parse_rpr = function(rpr, intro, outro) {
var font = {};
rpr.match(/<[^>]*>/g).forEach(function(x) {
(rpr.match(/<[^>]*>/g)||[]).forEach(function(x) {
var y = parsexmltag(x);
switch(y[0]) {
/* 18.8.12 condense CT_BooleanProperty */
@ -422,7 +422,7 @@ var parse_sst = (function(){
var s = [];
/* 18.4.9 sst CT_Sst */
var sst = data.match(new RegExp("<sst([^>]*)>([\\s\\S]*)<\/sst>","m"));
if(sst) {
if(isval(sst)) {
s = sst[2].replace(/<si>/g,"").split(/<\/si>/).map(parse_si);
sst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;
}
@ -653,7 +653,7 @@ function parseProps(data) {
function parseDeps(data) {
var d = [];
var l = 0, i = 1;
data.match(/<[^>]*>/g).forEach(function(x) {
(data.match(/<[^>]*>/g)||[]).forEach(function(x) {
var y = parsexmltag(x);
switch(y[0]) {
case '<?xml': break;
@ -876,23 +876,30 @@ function parseStyles(data) {
return styles;
}
function getdata(data) {
if(!data) return {};
if(data.data) return data.data;
if(data._data && data._data.getContent) return Array.prototype.slice.call(data._data.getContent(),0).map(function(x) { return String.fromCharCode(x); }).join("");
return {};
}
function parseZip(zip) {
var entries = Object.keys(zip.files);
var keys = entries.filter(function(x){return x.substr(-1) != '/';}).sort();
var dir = parseCT((zip.files['[Content_Types].xml']||{}).data);
var dir = parseCT(getdata(zip.files['[Content_Types].xml']));
strs = {};
if(dir.sst) strs=parse_sst(zip.files[dir.sst.replace(/^\//,'')].data);
if(dir.sst) strs=parse_sst(getdata(zip.files[dir.sst.replace(/^\//,'')]));
styles = {};
if(dir.style) styles = parseStyles(zip.files[dir.style.replace(/^\//,'')].data);
if(dir.style) styles = parseStyles(getdata(zip.files[dir.style.replace(/^\//,'')]));
var wb = parseWB(zip.files[dir.workbooks[0].replace(/^\//,'')].data);
var propdata = dir.coreprops.length !== 0 ? zip.files[dir.coreprops[0].replace(/^\//,'')].data : "";
propdata += dir.extprops.length !== 0 ? zip.files[dir.extprops[0].replace(/^\//,'')].data : "";
var wb = parseWB(getdata(zip.files[dir.workbooks[0].replace(/^\//,'')]));
var propdata = dir.coreprops.length !== 0 ? getdata(zip.files[dir.coreprops[0].replace(/^\//,'')]) : "";
propdata += dir.extprops.length !== 0 ? getdata(zip.files[dir.extprops[0].replace(/^\//,'')]) : "";
var props = propdata !== "" ? parseProps(propdata) : {};
var deps = {};
if(dir.calcchain) deps=parseDeps(zip.files[dir.calcchain.replace(/^\//,'')].data);
if(dir.calcchain) deps=parseDeps(getdata(zip.files[dir.calcchain.replace(/^\//,'')]));
var sheets = {}, i=0;
if(!props.Worksheets) {
/* Google Docs doesn't generate the appropriate metadata, so we impute: */
@ -903,12 +910,12 @@ function parseZip(zip) {
props.SheetNames[j] = wbsheets[j].name;
}
for(i = 0; i != props.Worksheets; ++i) {
sheets[props.SheetNames[i]]=parseSheet(zip.files['xl/worksheets/sheet' + (i+1) + '.xml'].data);
sheets[props.SheetNames[i]]=parseSheet(getdata(zip.files['xl/worksheets/sheet' + (i+1) + '.xml']));
}
}
else {
for(i = 0; i != props.Worksheets; ++i) {
sheets[props.SheetNames[i]]=parseSheet(zip.files[dir.sheets[i].replace(/^\//,'')].data);
sheets[props.SheetNames[i]]=parseSheet(getdata(zip.files[dir.sheets[i].replace(/^\//,'')]));
}
}
return {