From 2a7d73a8c480bceafb04f6b0df533b8176e6be7e Mon Sep 17 00:00:00 2001 From: dodo Date: Thu, 2 Dec 2010 01:32:49 +0100 Subject: [PATCH] rewrite render function --- lib/node-canvas-svg.js | 83 ++++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/lib/node-canvas-svg.js b/lib/node-canvas-svg.js index d33728e..bd09571 100644 --- a/lib/node-canvas-svg.js +++ b/lib/node-canvas-svg.js @@ -40,49 +40,57 @@ var parse_data = function (data, type) { }; -exports.svg.render = function (svgdata/*, width, height, options, callback*/) { +exports.svg.render = function (/*canvas, svgdata, width, height, options, callback*/) { check_canvg(); - var args = new Vargs(arguments); - if (!svgdata) - return args.callback(new Error("no svg given"), new Canvas(42, 42)); - - var doc = jsdom.jsdom(), - win = doc.createWindow(), - DOMParser = function () { - 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 width, height; - if (args.length > 2) { - width = args.all[1]; - height = args.all[2]; + var args = new Vargs(arguments), + arglist = args.all.slice(0); + var svgdata = "", canvas = null; + if (typeof args.first === 'string') { + svgdata = args.shift(); } 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; + canvas = args.shift(); + svgdata = args.shift(); } - var canvas = new Canvas(width, height); + if (!svgdata) + return args.callback(new Error("no svg given"), new Canvas(42, 42)); - var options = {}; - if (args.length == 2 || args.length > 3) - options = args.last; + if (!canvas) { + var doc = jsdom.jsdom(), + win = doc.createWindow(), + DOMParser = function () { + 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 width, height; + if (arglist.length > 1) { + width = arglist.shift(); + height = arglist.shift(); + + } 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; + } + canvas = new Canvas(width, height); + } - var defaults = { + var options = arglist ? args.last : {}, + defaults = { renderCallback : function () { args.callback(null, canvas) }, ignoreMouse: true, ignoreAnimation: true, @@ -105,5 +113,8 @@ exports.svg.render = function (svgdata/*, width, height, options, callback*/) { } }; + +exports.Canvas = Canvas; + exports.load = require('./canvas-svg/loader')(depdir, vargs, svg);