From b17a666343a07e1ba49e8039226ccb828d7fdc11 Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Tue, 5 Jul 2011 12:47:15 +0100
Subject: [PATCH 01/10] First pass CIDFont - stop CID fonts breaking PDF
 rendering

---
 pdf.js | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/pdf.js b/pdf.js
index c450b6ddd..9dddd8210 100644
--- a/pdf.js
+++ b/pdf.js
@@ -3626,9 +3626,17 @@ var PartialEvaluator = (function() {
     translateFont: function(fontDict, xref, resources) {
       var fd = fontDict.get('FontDescriptor');
       if (!fd)
-        // XXX deprecated "special treatment" for standard
-        // fonts?  What do we need to do here?
-        return null;
+      {
+        //If font is a composite get the FontDescriptor from the descendant
+        var df = fontDict.get("DescendantFonts");
+        if (!df)
+          return null;
+        var descendant = xref.fetch(df[0]);
+        fd = descendant.get("FontDescriptor");
+        if (!fd)
+          return null;
+        fontDict.set("FontDescriptor", fd);
+      }
       var descriptor = xref.fetch(fd);
 
       var fontName = descriptor.get('FontName');
@@ -3674,6 +3682,7 @@ var PartialEvaluator = (function() {
           }
         } else if (IsName(encoding)) {
           var encoding = Encodings[encoding.name];
+          //XXX CIDFont support - get the CID Encoding especially support japan1 and identity
           if (!encoding)
             error('Unknown font encoding');
 

From ea2d651709739cc69e568982cff718ac3ea9a0be Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Fri, 1 Jul 2011 17:47:28 +0100
Subject: [PATCH 02/10] Ignore Aptana project files Ignore test file directory

---
 .gitignore | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.gitignore b/.gitignore
index 9e2d0f211..41d51f615 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,5 @@ pdf.pdf
 intelisa.pdf
 openweb_tm-PRINT.pdf
 local.mk
+.project
+PDF JS font experiments
\ No newline at end of file

From 7b8542c6a7bb1c17bcf893a9413b2f8c969492e9 Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Mon, 11 Jul 2011 17:41:47 +0100
Subject: [PATCH 03/10] Second pass CIDFont support - make Arial Unicode in
 OpenOffice PDF - supports PDF fonts with CIDtoGIDMap and no cmap

---
 fonts.js | 108 +++++++++++++++++++++++++++++++++++++++----------------
 pdf.js   |  60 ++++++++++++++++++++++++-------
 2 files changed, 125 insertions(+), 43 deletions(-)

diff --git a/fonts.js b/fonts.js
index 1f0a6a211..2728afd89 100755
--- a/fonts.js
+++ b/fonts.js
@@ -404,12 +404,21 @@ var Font = (function() {
         data = this.checkAndRepair(name, file, properties);
         break;
 
+      case 'Type0':
+        //this is a Truetype font
+        this.mimetype = 'font/opentype';
+
+        // Repair the TrueType file if it is can be damaged in the point of
+        // view of the sanitizer
+        data = this.checkAndRepair(name, file, properties);
+        break;
+
       default:
         warn('Font ' + properties.type + ' is not supported');
         break;
     }
     this.data = data;
-
+    this.type = properties.type; //use the type to test if the string is single or multi-byte
     this.id = Fonts.registerFont(name, data, properties);
     this.loadedName = 'pdfFont' + this.id;
   };
@@ -856,8 +865,26 @@ var Font = (function() {
           data: stringToArray(createOS2Table(properties))
         });
 
-        // Replace the old CMAP table with a shiny new one
-        replaceCMapTable(cmap, font, properties);
+        if (!cmap) {
+          var glyphs = [];
+          var charset = properties.charset;
+          for (var i=1; i < charset.length; i++) {
+            if (charset.indexOf(i) != -1) {
+              glyphs.push({
+                unicode: charset.indexOf(i)
+              });
+            } else {
+              break;
+            }
+          }
+          tables.push({
+            tag: 'cmap',
+            data: createCMapTable(glyphs)
+          })
+        } else {
+          // Replace the old CMAP table with a shiny new one
+          replaceCMapTable(cmap, font, properties);          
+        }
 
         // Rewrite the 'post' table if needed
         if (!post) {
@@ -1110,44 +1137,63 @@ var Font = (function() {
 
     charsToUnicode: function fonts_chars2Unicode(chars) {
       var charsCache = this.charsCache;
-
+      var str;
+      
       // if we translated this string before, just grab it from the cache
       if (charsCache) {
-        var str = charsCache[chars];
+        str = charsCache[chars];
         if (str)
           return str;
       }
-
-      // translate the string using the font's encoding
-      var encoding = this.encoding;
-      if (!encoding)
-        return chars;
-
+      
       // lazily create the translation cache
       if (!charsCache)
         charsCache = this.charsCache = Object.create(null);
-
-      str = '';
-      for (var i = 0; i < chars.length; ++i) {
-        var charcode = chars.charCodeAt(i);
-        var unicode = encoding[charcode];
-        if ('undefined' == typeof(unicode)) {
-          // FIXME/issue 233: we're hitting this in test/pdf/sizes.pdf
-          // at the moment, for unknown reasons.
-          warn('Unencoded charcode '+ charcode);
-          unicode = charcode;
+      
+      if (this.type == "Type0") {
+        //string needs to be converted from byte to multi-byte assume for now two-byte
+        str = '';
+        var multiByteStr = "";
+        var length = chars.length;
+        for (var i = 0; i < length; i++) {
+          var byte1 = chars.charCodeAt(i++) & 0xFF;
+          var byte2;
+          if (i == length)
+            byte2 = 0;
+          else
+            byte2 = chars.charCodeAt(i) & 0xFF;
+          multiByteStr += String.fromCharCode((byte1<<8) | byte2);
         }
-
-        // Check if the glyph has already been converted
-        if (!IsNum(unicode))
-          unicode = encoding[unicode] = GlyphsUnicode[unicode.name];
-
-        // Handle surrogate pairs
-        if (unicode > 0xFFFF) {
-          str += String.fromCharCode(unicode & 0xFFFF);
-          unicode >>= 16;
+        str = multiByteStr;
+      }
+      else {
+        // translate the string using the font's encoding
+        var encoding = this.encoding;
+        if (!encoding)
+          return chars;
+  
+        str = '';
+        for (var i = 0; i < chars.length; ++i) {
+          var charcode = chars.charCodeAt(i);
+          var unicode = encoding[charcode];
+          if ('undefined' == typeof(unicode)) {
+            // FIXME/issue 233: we're hitting this in test/pdf/sizes.pdf
+            // at the moment, for unknown reasons.
+            warn('Unencoded charcode '+ charcode);
+            unicode = charcode;
+          }
+  
+          // Check if the glyph has already been converted
+          if (!IsNum(unicode))
+            unicode = encoding[unicode] = GlyphsUnicode[unicode.name];
+  
+          // Handle surrogate pairs
+          if (unicode > 0xFFFF) {
+            str += String.fromCharCode(unicode & 0xFFFF);
+            unicode >>= 16;
+          }
+          str += String.fromCharCode(unicode);
         }
-        str += String.fromCharCode(unicode);
       }
 
       // Enter the translated string into the cache
diff --git a/pdf.js b/pdf.js
index 9dddd8210..888addd1b 100644
--- a/pdf.js
+++ b/pdf.js
@@ -64,6 +64,14 @@ function stringToBytes(str) {
   return bytes;
 }
 
+function singleByteToMultiByteString (str) {
+  var multiByteStr = "";
+  var bytes = stringToBytes(e);
+  for (var j = 0; j<bytes.length; j++) {
+    multiByteStr += String.fromCharCode((bytes[j++]<<16) | bytes[j]);
+  }
+  return multiByteStr;
+}
 var Stream = (function() {
   function constructor(arrayBuffer, start, length, dict) {
     this.bytes = new Uint8Array(arrayBuffer);
@@ -3624,19 +3632,26 @@ var PartialEvaluator = (function() {
     },
 
     translateFont: function(fontDict, xref, resources) {
-      var fd = fontDict.get('FontDescriptor');
-      if (!fd)
+      var fd;
+      var descendant = [];
+      var subType = fontDict.get('Subtype');
+      assertWellFormed(IsName(subType), 'invalid font Subtype');
+      
+      //If font is a composite get the FontDescriptor from the descendant font
+      if (subType.name == "Type0")
       {
-        //If font is a composite get the FontDescriptor from the descendant
         var df = fontDict.get("DescendantFonts");
         if (!df)
           return null;
-        var descendant = xref.fetch(df[0]);
+        descendant = xref.fetch(df[0]);
         fd = descendant.get("FontDescriptor");
-        if (!fd)
-          return null;
-        fontDict.set("FontDescriptor", fd);
+      } else {
+        fd = fontDict.get('FontDescriptor');
       }
+      
+      if (!fd)
+        return null;
+      
       var descriptor = xref.fetch(fd);
 
       var fontName = descriptor.get('FontName');
@@ -3650,7 +3665,32 @@ var PartialEvaluator = (function() {
 
       var encodingMap = {};
       var charset = [];
-      if (fontDict.has('Encoding')) {
+      if (subType.name == 'Type0') {
+        //XXX CIDFont support - only identity CID Encoding for now
+        var encoding = xref.fetchIfRef(fontDict.get('Encoding'));
+        if (IsName(encoding)) {
+          //Encoding is a predefined CMap
+          if (encoding.name == 'Identity-H') {
+            if (descendant.get('Subtype').name == 'CIDFontType2')
+            {
+              //Extract an encoding from the CIDToGIDMap
+              var glyphsStream = xref.fetchIfRef(descendant.get('CIDToGIDMap'));
+              var glyphsData = glyphsStream.getBytes(0);
+              var i = 0;
+              for (var j=0; j<glyphsData.length; j++) {
+                var glyphID = (glyphsData[j++]*0x100)+glyphsData[j];
+                //encodingMap[glyphID] = i++;
+                charset.push(glyphID);
+              }
+              encoding[0] = 0;
+            }
+          } else {
+            TODO ('Need to support predefined CMaps see PDF 32000-1:2008 9.7.5.2 Predefined CMaps')
+          }
+        } else {
+          TODO ('Need to support encoding streams see PDF 32000-1:2008  9.7.5.3'); 
+        }
+      } else if (fontDict.has('Encoding')) {
         var encoding = xref.fetchIfRef(fontDict.get('Encoding'));
         if (IsDict(encoding)) {
           // Build a map of between codes and glyphs
@@ -3682,7 +3722,6 @@ var PartialEvaluator = (function() {
           }
         } else if (IsName(encoding)) {
           var encoding = Encodings[encoding.name];
-          //XXX CIDFont support - get the CID Encoding especially support japan1 and identity
           if (!encoding)
             error('Unknown font encoding');
 
@@ -3767,9 +3806,6 @@ var PartialEvaluator = (function() {
         }
       }
 
-      var subType = fontDict.get('Subtype');
-      assertWellFormed(IsName(subType), 'invalid font Subtype');
-
       var properties = {
         type: subType.name,
         encoding: encodingMap,

From 9b3b49547ad1e3ca420d9191055584c9c88eed1b Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Mon, 11 Jul 2011 17:55:03 +0100
Subject: [PATCH 04/10] Add test files with CID fonts

---
 test/pdfs/arial_unicode_ab_cidfont.pdf | Bin 0 -> 13110 bytes
 test/pdfs/arial_unicode_en_cidfont.pdf | Bin 0 -> 15779 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test/pdfs/arial_unicode_ab_cidfont.pdf
 create mode 100644 test/pdfs/arial_unicode_en_cidfont.pdf

diff --git a/test/pdfs/arial_unicode_ab_cidfont.pdf b/test/pdfs/arial_unicode_ab_cidfont.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..e5c97b882ac15cd0a1b3145ad5a2f18d1836edea
GIT binary patch
literal 13110
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
W?&k5kY`_pc2tOVRi>$gF-v0ryt_6w!

literal 0
HcmV?d00001

diff --git a/test/pdfs/arial_unicode_en_cidfont.pdf b/test/pdfs/arial_unicode_en_cidfont.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..6c90e41e3355ae54669445d85ce86ddaa7b6a813
GIT binary patch
literal 15779
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
Mkg2I9lq8Y=52v89ga7~l

literal 0
HcmV?d00001


From 6b6e97dff6c6dc6f85bed0de3c3861630628e9f5 Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Tue, 12 Jul 2011 03:58:09 +0100
Subject: [PATCH 05/10] cleanup, added new flag to the font properties called
 compositeFont. If true, the encoding and ShowText strings must be multi-byte

---
 fonts.js | 21 +++++++++------------
 pdf.js   | 53 +++++++++++++++++++++++++++--------------------------
 2 files changed, 36 insertions(+), 38 deletions(-)

diff --git a/fonts.js b/fonts.js
index 2728afd89..3e6756624 100755
--- a/fonts.js
+++ b/fonts.js
@@ -389,6 +389,7 @@ var Font = (function() {
     var data;
     switch (properties.type) {
       case 'Type1':
+      case 'CIDFontType0':
         var cff = new CFF(name, file, properties);
         this.mimetype = 'font/opentype';
 
@@ -397,15 +398,7 @@ var Font = (function() {
         break;
 
       case 'TrueType':
-        this.mimetype = 'font/opentype';
-
-        // Repair the TrueType file if it is can be damaged in the point of
-        // view of the sanitizer
-        data = this.checkAndRepair(name, file, properties);
-        break;
-
-      case 'Type0':
-        //this is a Truetype font
+      case 'CIDFontType2':
         this.mimetype = 'font/opentype';
 
         // Repair the TrueType file if it is can be damaged in the point of
@@ -421,6 +414,7 @@ var Font = (function() {
     this.type = properties.type; //use the type to test if the string is single or multi-byte
     this.id = Fonts.registerFont(name, data, properties);
     this.loadedName = 'pdfFont' + this.id;
+    this.compositeFont = properties.compositeFont;
   };
 
   function stringToArray(str) {
@@ -1150,8 +1144,11 @@ var Font = (function() {
       if (!charsCache)
         charsCache = this.charsCache = Object.create(null);
       
-      if (this.type == "Type0") {
-        //string needs to be converted from byte to multi-byte assume for now two-byte
+      if (this.compositeFont) {
+        // composite fonts have multi-byte strings
+        // convert the string from single-byte to multi-byte
+        // XXX assuming CIDFonts are two-byte - later need to extract the correct byte encoding
+        //     according to the PDF spec
         str = '';
         var multiByteStr = "";
         var length = chars.length;
@@ -1162,7 +1159,7 @@ var Font = (function() {
             byte2 = 0;
           else
             byte2 = chars.charCodeAt(i) & 0xFF;
-          multiByteStr += String.fromCharCode((byte1<<8) | byte2);
+          multiByteStr += String.fromCharCode((byte1 << 8) | byte2);
         }
         str = multiByteStr;
       }
diff --git a/pdf.js b/pdf.js
index 888addd1b..2df2f3f14 100644
--- a/pdf.js
+++ b/pdf.js
@@ -64,14 +64,6 @@ function stringToBytes(str) {
   return bytes;
 }
 
-function singleByteToMultiByteString (str) {
-  var multiByteStr = "";
-  var bytes = stringToBytes(e);
-  for (var j = 0; j<bytes.length; j++) {
-    multiByteStr += String.fromCharCode((bytes[j++]<<16) | bytes[j]);
-  }
-  return multiByteStr;
-}
 var Stream = (function() {
   function constructor(arrayBuffer, start, length, dict) {
     this.bytes = new Uint8Array(arrayBuffer);
@@ -3635,16 +3627,22 @@ var PartialEvaluator = (function() {
       var fd;
       var descendant = [];
       var subType = fontDict.get('Subtype');
+      var compositeFont = false;
       assertWellFormed(IsName(subType), 'invalid font Subtype');
       
-      //If font is a composite get the FontDescriptor from the descendant font
-      if (subType.name == "Type0")
+      //If font is a composite 
+      //  - get the descendant font
+      //  - set the type according to the descendant font
+      //  - get the FontDescriptor from the descendant font
+      if (subType.name == 'Type0')
       {
-        var df = fontDict.get("DescendantFonts");
+        var df = fontDict.get('DescendantFonts');
         if (!df)
           return null;
+        compositeFont = true;
         descendant = xref.fetch(df[0]);
-        fd = descendant.get("FontDescriptor");
+        subType = descendant.get('Subtype');
+        fd = descendant.get('FontDescriptor');
       } else {
         fd = fontDict.get('FontDescriptor');
       }
@@ -3665,24 +3663,26 @@ var PartialEvaluator = (function() {
 
       var encodingMap = {};
       var charset = [];
-      if (subType.name == 'Type0') {
-        //XXX CIDFont support - only identity CID Encoding for now
+      if (compositeFont) {
+        //Special CIDFont support
+        //XXX only identity CID Encodings supported for now
         var encoding = xref.fetchIfRef(fontDict.get('Encoding'));
         if (IsName(encoding)) {
           //Encoding is a predefined CMap
           if (encoding.name == 'Identity-H') {
-            if (descendant.get('Subtype').name == 'CIDFontType2')
-            {
-              //Extract an encoding from the CIDToGIDMap
-              var glyphsStream = xref.fetchIfRef(descendant.get('CIDToGIDMap'));
-              var glyphsData = glyphsStream.getBytes(0);
-              var i = 0;
-              for (var j=0; j<glyphsData.length; j++) {
-                var glyphID = (glyphsData[j++]*0x100)+glyphsData[j];
-                //encodingMap[glyphID] = i++;
-                charset.push(glyphID);
+            if (subType.name == 'CIDFontType2') {
+              var cidToGidMap = descendant.get('CIDToGIDMap');
+              if (cidToGidMap) {
+                //Extract the charset from the CIDToGIDMap
+                var glyphsStream = xref.fetchIfRef(cidToGidMap);
+                var glyphsData = glyphsStream.getBytes(0);
+                var i = 0;
+                //glyph ids are big-endian 2-byte values
+                for (var j=0; j<glyphsData.length; j++) {
+                  var glyphID = (glyphsData[j++] << 8) | glyphsData[j];
+                  charset.push(glyphID);
+                }
               }
-              encoding[0] = 0;
             }
           } else {
             TODO ('Need to support predefined CMaps see PDF 32000-1:2008 9.7.5.2 Predefined CMaps')
@@ -3820,7 +3820,8 @@ var PartialEvaluator = (function() {
         flags: descriptor.get('Flags'),
         italicAngle: descriptor.get('ItalicAngle'),
         fixedPitch: false,
-        textMatrix: IDENTITY_MATRIX
+        textMatrix: IDENTITY_MATRIX,
+        compositeFont: compositeFont
       };
 
       return {

From 926e4f1130c363cd5dd512a59c37c75a866ce7fd Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Tue, 12 Jul 2011 04:03:12 +0100
Subject: [PATCH 06/10] Revert "Ignore Aptana project files"

This reverts commit ea2d651709739cc69e568982cff718ac3ea9a0be.
---
 .gitignore | 2 --
 1 file changed, 2 deletions(-)

diff --git a/.gitignore b/.gitignore
index 41d51f615..9e2d0f211 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,5 +3,3 @@ pdf.pdf
 intelisa.pdf
 openweb_tm-PRINT.pdf
 local.mk
-.project
-PDF JS font experiments
\ No newline at end of file

From 36763e8e82fd47cec38d38b7c413edd80f082656 Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Wed, 13 Jul 2011 09:31:34 +0100
Subject: [PATCH 07/10] Fully support truetype composite fonts, clean up

---
 fonts.js | 182 +++++++++++++++++++++++++++++++++----------------------
 pdf.js   |  50 ++++++++-------
 2 files changed, 137 insertions(+), 95 deletions(-)

diff --git a/fonts.js b/fonts.js
index 3e6756624..dfcda7af2 100755
--- a/fonts.js
+++ b/fonts.js
@@ -411,7 +411,7 @@ var Font = (function() {
         break;
     }
     this.data = data;
-    this.type = properties.type; //use the type to test if the string is single or multi-byte
+    this.type = properties.type; // Use the type to test if the string is single or multi-byte
     this.id = Fonts.registerFont(name, data, properties);
     this.loadedName = 'pdfFont' + this.id;
     this.compositeFont = properties.compositeFont;
@@ -682,6 +682,65 @@ var Font = (function() {
            '\x00\x00\x00\x00';  // maxMemType1
   };
 
+  function createNameTable(name) {
+    var strings = [
+      'Original licence',  // 0.Copyright
+      name,                // 1.Font family
+      'Unknown',           // 2.Font subfamily (font weight)
+      'uniqueID',          // 3.Unique ID
+      name,                // 4.Full font name
+      'Version 0.11',      // 5.Version
+      '',                  // 6.Postscript name
+      'Unknown',           // 7.Trademark
+      'Unknown',           // 8.Manufacturer
+      'Unknown'            // 9.Designer
+    ];
+  
+    // Mac want 1-byte per character strings while Windows want
+    // 2-bytes per character, so duplicate the names table
+    var stringsUnicode = [];
+    for (var i = 0; i < strings.length; i++) {
+      var str = strings[i];
+  
+      var strUnicode = '';
+      for (var j = 0; j < str.length; j++)
+        strUnicode += string16(str.charCodeAt(j));
+      stringsUnicode.push(strUnicode);
+    }
+  
+    var names = [strings, stringsUnicode];
+    var platforms = ['\x00\x01', '\x00\x03'];
+    var encodings = ['\x00\x00', '\x00\x01'];
+    var languages = ['\x00\x00', '\x04\x09'];
+  
+    var namesRecordCount = strings.length * platforms.length;
+    var nameTable =
+      '\x00\x00' +                           // format
+      string16(namesRecordCount) +           // Number of names Record
+      string16(namesRecordCount * 12 + 6);   // Storage
+  
+    // Build the name records field
+    var strOffset = 0;
+    for (var i = 0; i < platforms.length; i++) {
+      var strs = names[i];
+      for (var j = 0; j < strs.length; j++) {
+        var str = strs[j];
+        var nameRecord =
+          platforms[i] + // platform ID
+          encodings[i] + // encoding ID
+          languages[i] + // language ID
+          string16(j) + // name ID
+          string16(str.length) +
+          string16(strOffset);
+        nameTable += nameRecord;
+        strOffset += str.length;
+      }
+    }
+  
+    nameTable += strings.join('') + stringsUnicode.join('');
+    return nameTable;
+  }
+
   constructor.prototype = {
     name: null,
     font: null,
@@ -814,7 +873,7 @@ var Font = (function() {
 
       // This keep a reference to the CMap and the post tables since they can
       // be rewritted
-      var cmap, post;
+      var cmap, post, nameTable, maxp;
 
       var tables = [];
       for (var i = 0; i < numTables; i++) {
@@ -825,6 +884,10 @@ var Font = (function() {
             cmap = table;
           else if (table.tag == 'post')
             post = table;
+          else if (table.tag == 'name')
+            nameTable = table;
+          else if (table.tag == 'maxp')
+            maxp = table;
 
           requiredTables.splice(index, 1);
         }
@@ -859,24 +922,50 @@ var Font = (function() {
           data: stringToArray(createOS2Table(properties))
         });
 
-        if (!cmap) {
+        // Replace the old CMAP table with a shiny new one
+        if (properties.type == 'CIDFontType2') {
+          // Type2 composite fonts map charcters directly to glyphs so the cmap
+          // table must be replaced.
+          
           var glyphs = [];
           var charset = properties.charset;
-          for (var i=1; i < charset.length; i++) {
-            if (charset.indexOf(i) != -1) {
+          if (charset.length == 0)
+          {
+            // PDF did not contain a GIDMap for the font so create an identity cmap
+            
+            // First get the number of glyphs from the maxp table
+            font.pos = (font.start ? font.start : 0) + maxp.length;
+            var version = int16(font.getBytes(4));
+            var numGlyphs = int16(font.getBytes(2));
+            
+            // Now create an identity mapping
+            for (var i=1; i < numGlyphs; i++) {
               glyphs.push({
-                unicode: charset.indexOf(i)
+                unicode: i
               });
-            } else {
-              break;
+            }
+          } else {
+            for (var i=1; i < charset.length; i++) {
+              if (charset.indexOf(i) != -1) {
+                glyphs.push({
+                  unicode: charset.indexOf(i)
+                });
+              } else {
+                break;
+              }
             }
           }
-          tables.push({
-            tag: 'cmap',
-            data: createCMapTable(glyphs)
-          })
+          
+          if (!cmap) {
+            // Font did not contain a cmap
+            tables.push({
+              tag: 'cmap',
+              data: createCMapTable(glyphs)
+            })
+          } else {
+            cmap.data = createCMapTable(glyphs);
+          }
         } else {
-          // Replace the old CMAP table with a shiny new one
           replaceCMapTable(cmap, font, properties);          
         }
 
@@ -888,6 +977,14 @@ var Font = (function() {
           });
         }
 
+        // Rewrite the 'name' table if needed
+        if (!nameTable) {
+          tables.push({
+            tag: 'name',
+            data: stringToArray(createNameTable(this.name))
+          });
+        }
+
         // Tables needs to be written by ascendant alphabetic order
         tables.sort(function tables_sort(a, b) {
           return (a.tag > b.tag) - (a.tag < b.tag);
@@ -930,65 +1027,6 @@ var Font = (function() {
     },
 
     convert: function font_convert(fontName, font, properties) {
-      function createNameTable(name) {
-        var strings = [
-          'Original licence',  // 0.Copyright
-          name,                // 1.Font family
-          'Unknown',           // 2.Font subfamily (font weight)
-          'uniqueID',          // 3.Unique ID
-          name,                // 4.Full font name
-          'Version 0.11',      // 5.Version
-          '',                  // 6.Postscript name
-          'Unknown',           // 7.Trademark
-          'Unknown',           // 8.Manufacturer
-          'Unknown'            // 9.Designer
-        ];
-
-        // Mac want 1-byte per character strings while Windows want
-        // 2-bytes per character, so duplicate the names table
-        var stringsUnicode = [];
-        for (var i = 0; i < strings.length; i++) {
-          var str = strings[i];
-
-          var strUnicode = '';
-          for (var j = 0; j < str.length; j++)
-            strUnicode += string16(str.charCodeAt(j));
-          stringsUnicode.push(strUnicode);
-        }
-
-        var names = [strings, stringsUnicode];
-        var platforms = ['\x00\x01', '\x00\x03'];
-        var encodings = ['\x00\x00', '\x00\x01'];
-        var languages = ['\x00\x00', '\x04\x09'];
-
-        var namesRecordCount = strings.length * platforms.length;
-        var nameTable =
-          '\x00\x00' +                           // format
-          string16(namesRecordCount) +           // Number of names Record
-          string16(namesRecordCount * 12 + 6);   // Storage
-
-        // Build the name records field
-        var strOffset = 0;
-        for (var i = 0; i < platforms.length; i++) {
-          var strs = names[i];
-          for (var j = 0; j < strs.length; j++) {
-            var str = strs[j];
-            var nameRecord =
-              platforms[i] + // platform ID
-              encodings[i] + // encoding ID
-              languages[i] + // language ID
-              string16(j) + // name ID
-              string16(str.length) +
-              string16(strOffset);
-            nameTable += nameRecord;
-            strOffset += str.length;
-          }
-        }
-
-        nameTable += strings.join('') + stringsUnicode.join('');
-        return nameTable;
-      }
-
       function isFixedPitch(glyphs) {
         for (var i = 0; i < glyphs.length - 1; i++) {
           if (glyphs[i] != glyphs[i + 1])
diff --git a/pdf.js b/pdf.js
index c73558abb..1680c1c59 100644
--- a/pdf.js
+++ b/pdf.js
@@ -3630,7 +3630,7 @@ var PartialEvaluator = (function() {
       var compositeFont = false;
       assertWellFormed(IsName(subType), 'invalid font Subtype');
       
-      //If font is a composite 
+      // If font is a composite 
       //  - get the descendant font
       //  - set the type according to the descendant font
       //  - get the FontDescriptor from the descendant font
@@ -3664,31 +3664,35 @@ var PartialEvaluator = (function() {
       var encodingMap = {};
       var charset = [];
       if (compositeFont) {
-        //Special CIDFont support
-        //XXX only identity CID Encodings supported for now
-        var encoding = xref.fetchIfRef(fontDict.get('Encoding'));
-        if (IsName(encoding)) {
-          //Encoding is a predefined CMap
-          if (encoding.name == 'Identity-H') {
-            if (subType.name == 'CIDFontType2') {
-              var cidToGidMap = descendant.get('CIDToGIDMap');
-              if (cidToGidMap) {
-                //Extract the charset from the CIDToGIDMap
-                var glyphsStream = xref.fetchIfRef(cidToGidMap);
-                var glyphsData = glyphsStream.getBytes(0);
-                var i = 0;
-                //glyph ids are big-endian 2-byte values
-                for (var j=0; j<glyphsData.length; j++) {
-                  var glyphID = (glyphsData[j++] << 8) | glyphsData[j];
-                  charset.push(glyphID);
-                }
-              }
+        // Special CIDFont support
+        // XXX only CIDFontType2 supported for now
+        if (subType.name == 'CIDFontType2') {
+          var cidToGidMap = descendant.get('CIDToGIDMap');
+          if (cidToGidMap && IsRef(cidToGidMap)) {
+            // Extract the charset from the CIDToGIDMap
+            var glyphsStream = xref.fetchIfRef(cidToGidMap);
+            var glyphsData = glyphsStream.getBytes(0);
+            var i = 0;
+            // Glyph ids are big-endian 2-byte values
+            for (var j=0; j<glyphsData.length; j++) {
+              var glyphID = (glyphsData[j++] << 8) | glyphsData[j];
+              charset.push(glyphID);
+            }
+          }
+        }
+        else {
+          // XXX This is a placeholder for handling of the encoding of CIDFontType0 fonts
+          var encoding = xref.fetchIfRef(fontDict.get('Encoding'));
+          if (IsName(encoding)) {
+            // Encoding is a predefined CMap
+            if (encoding.name == 'Identity-H') {
+              TODO ('Need to create an identity cmap')
+            } else {
+              TODO ('Need to support predefined CMaps see PDF 32000-1:2008 9.7.5.2 Predefined CMaps')
             }
           } else {
-            TODO ('Need to support predefined CMaps see PDF 32000-1:2008 9.7.5.2 Predefined CMaps')
+            TODO ('Need to support encoding streams see PDF 32000-1:2008  9.7.5.3'); 
           }
-        } else {
-          TODO ('Need to support encoding streams see PDF 32000-1:2008  9.7.5.3'); 
         }
       } else if (fontDict.has('Encoding')) {
         var encoding = xref.fetchIfRef(fontDict.get('Encoding'));

From 0906cc8c94cd6ea9a2fce51d0d8f61110705d18d Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Wed, 13 Jul 2011 09:38:39 +0100
Subject: [PATCH 08/10] Bump up the max font file size. Composite fonts can be
 larger than simple fonts. Once we support Japanese we will need to reconsider
 how this is done as a large Japanese font may be up to 30Mb in size.

---
 fonts.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fonts.js b/fonts.js
index dfcda7af2..a048e78d8 100755
--- a/fonts.js
+++ b/fonts.js
@@ -7,7 +7,7 @@ var isWorker = (typeof window == 'undefined');
 /**
  * Maximum file size of the font.
  */
-var kMaxFontFileSize = 40000;
+var kMaxFontFileSize = 200000;
 
 /**
  * Maximum time to wait for a font to be loaded by font-face rules.

From 8dbbbbb589246e2a06ec7a474939b6f7e7c23abf Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Wed, 13 Jul 2011 09:55:13 +0100
Subject: [PATCH 09/10] Add and wire in test files

---
 test/pdfs/ArabicCIDTrueType.pdf | Bin 0 -> 39370 bytes
 test/test_manifest.json         |  15 +++++++++++++++
 2 files changed, 15 insertions(+)
 create mode 100644 test/pdfs/ArabicCIDTrueType.pdf

diff --git a/test/pdfs/ArabicCIDTrueType.pdf b/test/pdfs/ArabicCIDTrueType.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..0821ccdbd7616c4fcbcf6e476ab8a1595c2b15cb
GIT binary patch
literal 39370
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

literal 0
HcmV?d00001

diff --git a/test/test_manifest.json b/test/test_manifest.json
index d8a8e8f7d..6c1ff71cd 100644
--- a/test/test_manifest.json
+++ b/test/test_manifest.json
@@ -48,5 +48,20 @@
        "link": true,
        "rounds": 1,
        "type": "load"
+    },
+    {  "id": "openofficecidtruetype-pdf",
+       "file": "pdfs/arial_unicode_en_cidfont.pdf",
+       "rounds": 1,
+       "type": "load"
+    },
+    {  "id": "openofficearabiccidtruetype-pdf",
+       "file": "pdfs/arial_unicode_ab_cidfont.pdf",
+       "rounds": 1,
+       "type": "load"
+    },
+    {  "id": "arabiccidtruetype-pdf",
+       "file": "pdfs/ArabicCIDTrueType.pdf",
+       "rounds": 1,
+       "type": "load"
     }
 ]

From 06986bb15f9efb35ca3fdf747bbedb6fe840cb99 Mon Sep 17 00:00:00 2001
From: Adil Allawi <adil@diwan.com>
Date: Wed, 13 Jul 2011 17:46:48 +0100
Subject: [PATCH 10/10] nits, picked

---
 fonts.js | 16 ++++++++--------
 pdf.js   |  3 +--
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/fonts.js b/fonts.js
index a048e78d8..607e2aab9 100755
--- a/fonts.js
+++ b/fonts.js
@@ -411,7 +411,7 @@ var Font = (function() {
         break;
     }
     this.data = data;
-    this.type = properties.type; // Use the type to test if the string is single or multi-byte
+    this.type = properties.type;
     this.id = Fonts.registerFont(name, data, properties);
     this.loadedName = 'pdfFont' + this.id;
     this.compositeFont = properties.compositeFont;
@@ -924,13 +924,12 @@ var Font = (function() {
 
         // Replace the old CMAP table with a shiny new one
         if (properties.type == 'CIDFontType2') {
-          // Type2 composite fonts map charcters directly to glyphs so the cmap
+          // Type2 composite fonts map characters directly to glyphs so the cmap
           // table must be replaced.
           
           var glyphs = [];
           var charset = properties.charset;
-          if (charset.length == 0)
-          {
+          if (!charset.length) {
             // PDF did not contain a GIDMap for the font so create an identity cmap
             
             // First get the number of glyphs from the maxp table
@@ -939,16 +938,17 @@ var Font = (function() {
             var numGlyphs = int16(font.getBytes(2));
             
             // Now create an identity mapping
-            for (var i=1; i < numGlyphs; i++) {
+            for (var i = 1; i < numGlyphs; i++) {
               glyphs.push({
                 unicode: i
               });
             }
           } else {
-            for (var i=1; i < charset.length; i++) {
-              if (charset.indexOf(i) != -1) {
+            for (var i = 1; i < charset.length; i++) {
+              var index = charset.indexOf(i);
+              if (index != -1) {
                 glyphs.push({
-                  unicode: charset.indexOf(i)
+                  unicode: index
                 });
               } else {
                 break;
diff --git a/pdf.js b/pdf.js
index 1680c1c59..a3179406c 100644
--- a/pdf.js
+++ b/pdf.js
@@ -3634,8 +3634,7 @@ var PartialEvaluator = (function() {
       //  - get the descendant font
       //  - set the type according to the descendant font
       //  - get the FontDescriptor from the descendant font
-      if (subType.name == 'Type0')
-      {
+      if (subType.name == 'Type0') {
         var df = fontDict.get('DescendantFonts');
         if (!df)
           return null;