Skip to content

Commit

Permalink
more failure tolerance
Browse files Browse the repository at this point in the history
  • Loading branch information
dodo committed Dec 2, 2010
1 parent a5edec0 commit c208fae
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 13 deletions.
2 changes: 1 addition & 1 deletion lib/canvas-svg/require.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ module.exports = function (dir) {
throw new Error("Cannot find module " + org.join(", ") + ".");

try {
return require(path)
return require(path);
} catch (e) {
if (e.message.slice(0,18) !== "Cannot find module")
throw e;
Expand Down
54 changes: 42 additions & 12 deletions lib/node-canvas-svg.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,21 @@ var check_canvg = function () {
};


exports.svg.render = function (svgdata/*, options, callback*/) {
var parse_data = function (data, type) {
if (type)
type = {contentType:type};

var elem = jsdom.jsdom("<html><body>"+data+"</body></html>",null,type).body;

for(var i=0,l=elem.childNodes.length;i<l;i++) {
if (elem.childNodes[i].nodeName[0] !== "#")// i hope this isn't dumb
return [null, elem.childNodes[i]];
}
return [new Error("cannot find a proper element in data"), elem];
};


exports.svg.render = function (svgdata/*, width, height, options, callback*/) {
check_canvg();
var args = new Vargs(arguments);
if (!svgdata)
Expand All @@ -35,21 +49,37 @@ exports.svg.render = function (svgdata/*, options, callback*/) {
var doc = jsdom.jsdom(),
win = doc.createWindow(),
DOMParser = function () {
this.parseFromString = function (str, type) {
var doc = jsdom.jsdom("<html><body>" + str +
"</body></html>", null, {contentType:type});
return {documentElement:patch.nodeName(doc.body.firstChild)};
};};
this.parseFromString = function (data, type) {
var res = parse_data(data, type);
//if (/*err*/res[0]) ### /*ignored*/ ###
// throw res[0];
return { documentElement : patch.nodeName(res[1]) };
};
};
win.DOMParser = true;

var obj = jsdom.jsdom("<html><body>" + svgdata + "</body></html>"); // FIXME meh :(
obj = obj.body.firstChild;
var canvas = new Canvas(
parseInt(obj.getAttribute('width')),
parseInt(obj.getAttribute('height')));
var width, height;
if (args.length > 2) {
width = args.all[1];
height = args.all[2];

} else {
var res = parse_data(svgdata);
if (/*err*/res[0])
return args.callback(res[0], new Canvas(42, 42));
var elem = res[1];
svgdata = elem.outerHTML; // maybe cleaner

width = elem.hasAttribute('width') ?
parseInt(elem.getAttribute('width')) : 42;
height = elem.hasAttribute('height') ?
parseInt(elem.getAttribute('height')) : 42;
}

var canvas = new Canvas(width, height);

var options = {};
if (args.length > 1)
if (args.length == 2 || args.length > 3)
options = args.last;

var defaults = {
Expand Down

0 comments on commit c208fae

Please sign in to comment.