function h2cRenderContext(width, height) { var storage = []; return { storage: storage, width: width, height: height, clip: function() { storage.push({ type: "function", name: "clip", 'arguments': arguments }); }, translate: function() { storage.push({ type: "function", name: "translate", 'arguments': arguments }); }, fill: function() { storage.push({ type: "function", name: "fill", 'arguments': arguments }); }, save: function() { storage.push({ type: "function", name: "save", 'arguments': arguments }); }, restore: function() { storage.push({ type: "function", name: "restore", 'arguments': arguments }); }, fillRect: function () { storage.push({ type: "function", name: "fillRect", 'arguments': arguments }); }, createPattern: function() { storage.push({ type: "function", name: "createPattern", 'arguments': arguments }); }, drawShape: function() { var shape = []; storage.push({ type: "function", name: "drawShape", 'arguments': shape }); return { moveTo: function() { shape.push({ name: "moveTo", 'arguments': arguments }); }, lineTo: function() { shape.push({ name: "lineTo", 'arguments': arguments }); }, arcTo: function() { shape.push({ name: "arcTo", 'arguments': arguments }); }, bezierCurveTo: function() { shape.push({ name: "bezierCurveTo", 'arguments': arguments }); }, quadraticCurveTo: function() { shape.push({ name: "quadraticCurveTo", 'arguments': arguments }); } }; }, drawImage: function () { storage.push({ type: "function", name: "drawImage", 'arguments': arguments }); }, fillText: function () { storage.push({ type: "function", name: "fillText", 'arguments': arguments }); }, setVariable: function (variable, value) { storage.push({ type: "variable", name: variable, 'arguments': value }); } }; }