]> git.parisson.com Git - pdf.js.git/commitdiff
Implement "n" (end path), add stubs for NYI operators
authorChris Jones <jones.chris.g@gmail.com>
Tue, 10 May 2011 01:16:06 +0000 (20:16 -0500)
committerChris Jones <jones.chris.g@gmail.com>
Tue, 10 May 2011 01:16:06 +0000 (20:16 -0500)
pdf.js

diff --git a/pdf.js b/pdf.js
index 9da8848db10e78184cb43fe5c64fb9b09a9f4542..bb8ec830591f83469d5bdde0bcccf8395c76410e 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -1003,6 +1003,8 @@ var Interpreter = (function() {
             J: gfx.setLineCap,
             j: gfx.setLineJoin,
             d: gfx.setDash,
+            ri: gfx.setRenderingIntent,
+            i: gfx.setFlatness,
             q: gfx.save,
             Q: gfx.restore,
             cm: gfx.transform,
@@ -1017,6 +1019,7 @@ var Interpreter = (function() {
             f: gfx.fill,
             B: gfx.fillStroke,
             b: gfx.closeFillStroke,
+            n: gfx.endPath,
 
             // Clipping
 
@@ -1028,12 +1031,17 @@ var Interpreter = (function() {
                 gfx.setFont(font, size);
             },
             Td: gfx.moveText,
+            Tm: gfx.setTextMatrix,
             Tj: gfx.showText,
             TJ: gfx.showSpacedText,
 
             // Type3 fonts
 
             // Color
+            CS: gfx.setStrokeColorSpace,
+            cs: gfx.setFillColorSpace,
+            SC: gfx.setStrokeColor,
+            sc: gfx.setFillColor,
             g: gfx.setFillGray,
             RG: gfx.setStrokeRGBColor,
             rg: gfx.setFillRGBColor,
@@ -1041,6 +1049,8 @@ var Interpreter = (function() {
             // Shading
             // Images
             // XObjects
+            Do: gfx.paintXObject,
+
             // Marked content
             // Compatibility
         };
@@ -1064,11 +1074,10 @@ var Interpreter = (function() {
                 if (IsCmd(obj)) {
                     var cmd = obj.cmd;
                     var fn = map[cmd];
-                    if (fn) {
-                        if (fn.length != args.length)
-                            this.error("Invalid number of arguments '" + cmd + "'");
+                    if (fn)
+                        // TODO figure out how to type-check vararg functions
                         fn.apply(gfx, args);
-                    else
+                    else
                         this.error("Unknown command '" + cmd + "'");
                     args.length = 0;
                 } else {
@@ -1116,6 +1125,12 @@ var EchoGraphics = (function() {
         setDash: function(dashArray, dashPhase) {
             this.printdentln(""+ dashArray +" "+ dashPhase +" d");
         },
+        setRenderingIntent: function(intent) {
+            this.printdentln("/"+ intent.name + " ri");
+        },
+        setFlatness: function(flatness) {
+            this.printdentln(""+ flatness +" i");
+        },
         save: function() {
             this.printdentln("q");
         },
@@ -1157,6 +1172,9 @@ var EchoGraphics = (function() {
         closeFillStroke: function() {
             this.printdentln("b");
         },
+        endPath: function() {
+            this.printdentln("n");
+        },
 
         // Clipping
 
@@ -1175,6 +1193,10 @@ var EchoGraphics = (function() {
         moveText: function (x, y) {
             this.printdentln(""+ x +" "+ y +" Td");
         },
+        setTextMatrix: function(a, b, c, d, e, f) {
+            this.printdentln(""+ a +" "+ b +" "+ c +
+                             " "+d +" "+ e +" "+ f + " Tm");
+        },
         showText: function(text) {
             this.printdentln("( "+ text +" ) Tj");
         },
@@ -1185,6 +1207,24 @@ var EchoGraphics = (function() {
         // Type3 fonts
 
         // Color
+        setStrokeColorSpace: function(space) {
+            this.printdentln("/"+ space.name +" CS");
+        },
+        setFillColorSpace: function(space) {
+            this.printdentln("/"+ space.name +" cs");
+        },
+        setStrokeColor: function(/*...*/) {
+            this.printdent("");
+            for (var i = 0; i < arguments.length; ++i)
+                this.print(""+ arguments[i] +" ");
+            this.printdentln("SC");
+        },
+        setFillColor: function(/*...*/) {
+            this.printdent("");
+            for (var i = 0; i < arguments.length; ++i)
+                this.print(""+ arguments[i] +" ");
+            this.printdentln("sc");
+        },
         setFillGray: function(gray) {
             this.printdentln(""+ gray +" g");
         },
@@ -1198,6 +1238,10 @@ var EchoGraphics = (function() {
         // Shading
         // Images
         // XObjects
+        paintXObject: function(obj) {
+            this.printdentln("/"+ obj.name +" Do");
+        },
+
         // Marked content
         // Compatibility
 
@@ -1209,9 +1253,13 @@ var EchoGraphics = (function() {
             this.print(str);
             this.out += "\n";
         },
-        printdentln: function(str) {
+        printdent: function(str) {
             this.print(this.indentationStr);
-            this.println(str);
+            this.print(str);
+        },
+        printdentln: function(str) {
+            this.printdent(str);
+            this.println("");
         },
         indent: function() {
             this.indentation += 2;
@@ -1277,6 +1325,12 @@ var CanvasGraphics = (function() {
         setDash: function(dashArray, dashPhase) {
             // TODO
         },
+        setRenderingIntent: function(intent) {
+            // TODO
+        },
+        setFlatness: function(flatness) {
+            // TODO
+        },
         save: function() {
             this.ctx.save();
             this.stateStack.push(this.current);
@@ -1322,6 +1376,9 @@ var CanvasGraphics = (function() {
         closeFillStroke: function() {
             return this.fillStroke();
         },
+        endPath: function() {
+            this.consumePath();
+        },
 
         // Clipping
 
@@ -1339,10 +1396,13 @@ var CanvasGraphics = (function() {
         moveText: function (x, y) {
             this.current.lineX += x;
             this.current.lineY += y;
-            // XXX transform
+            // TODO transform
             this.current.curX = this.current.lineX;
             this.current.curY = this.current.lineY;
         },
+        setTextMatrix: function(a, b, c, d, e, f) {
+            // TODO
+        },
         showText: function(text) {
             this.ctx.save();
             this.ctx.translate(0, 2 * this.current.curY);
@@ -1369,6 +1429,18 @@ var CanvasGraphics = (function() {
         // Type3 fonts
 
         // Color
+        setStrokeColorSpace: function(space) {
+            // TODO
+        },
+        setFillColorSpace: function(space) {
+            // TODO
+        },
+        setStrokeColor: function(/*...*/) {
+            // TODO
+        },
+        setFillColor: function(/*...*/) {
+            // TODO
+        },
         setFillGray: function(gray) {
             this.setFillRGBColor(gray, gray, gray);
         },
@@ -1379,6 +1451,12 @@ var CanvasGraphics = (function() {
             this.ctx.fillStyle = this.makeCssRgb(r, g, b);
         },
 
+        // XObjects
+        paintXObject: function(obj) {
+            // TODO
+        },
+
+
         // Helper functions
 
         consumePath: function() {
@@ -1499,6 +1577,13 @@ var tests = [
           int(-72), int(0), cmd("l"),
           int(4), cmd("w"),
           cmd("h"), cmd("S"),
+          int(100), int(72), cmd("m"),
+          int(172), int(0), cmd("l"),
+          int(100), int(-72), cmd("l"),
+          int(-172), int(0), cmd("l"),
+          int(4), cmd("w"),
+          cmd("n"),
+          cmd("S"),
           eof()
       ]
     },
@@ -1579,6 +1664,21 @@ var tests = [
           eof()
       ],
     },
+    { name: "NYI",              // check that NYI commands are no-ops
+      res: { },
+      mediaBox: [ 0, 0, 612, 792 ],
+      objs: [
+          name("Perceptual"), cmd("ri"),
+          int(2), cmd("i"),
+          int(1), int(0), int(0), int(1), int(80), int(80), cmd("Tm"),
+          name("DeviceRGB"), cmd("CS"),
+          name("DeviceGray"), cmd("cs"),
+          int(1), int(0), int(0), cmd("SC"),
+          int(1), cmd("sc"),
+          name("object"), cmd("Do"),
+          eof()
+     ],
+    },
 ];