Erich E. Hoover : wineps.drv: Add support for PostScript Format 2 custom glyph names.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Sep 15 09:50:50 CDT 2015


Module: wine
Branch: master
Commit: d79de513f754dd7572b6fe3f3b7bfe51dafd1dec
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d79de513f754dd7572b6fe3f3b7bfe51dafd1dec

Author: Erich E. Hoover <erich.e.hoover at wine-staging.com>
Date:   Thu Sep  3 16:24:45 2015 -0600

wineps.drv: Add support for PostScript Format 2 custom glyph names.

---

 dlls/wineps.drv/download.c | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/dlls/wineps.drv/download.c b/dlls/wineps.drv/download.c
index 7b99b33..30eb0db 100644
--- a/dlls/wineps.drv/download.c
+++ b/dlls/wineps.drv/download.c
@@ -644,6 +644,35 @@ static int get_post2_name_index(BYTE *post2header, DWORD size, WORD index)
     return GET_BE_WORD(post2header + offset);
 }
 
+static void get_post2_custom_glyph_name(BYTE *post2header, DWORD size, WORD index, char *name)
+{
+    USHORT numberOfGlyphs = GET_BE_WORD(post2header);
+    int i, name_offset = (1 + numberOfGlyphs) * sizeof(USHORT);
+    BYTE name_length = 0;
+
+    for(i = 0; i <= index; i++)
+    {
+        name_offset += name_length;
+        if(name_offset + sizeof(BYTE) > size)
+        {
+            FIXME("Pascal name offset '%d' exceeds PostScript Format 2 table size (%d)\n",
+                  name_offset + sizeof(BYTE), size);
+            return;
+        }
+        name_length = (post2header + name_offset)[0];
+        if(name_offset + name_length > size)
+        {
+            FIXME("Pascal name offset '%d' exceeds PostScript Format 2 table size (%d)\n",
+                  name_offset + name_length, size);
+            return;
+        }
+        name_offset += sizeof(BYTE);
+    }
+    name_length = min(name_length, MAX_G_NAME);
+    memcpy(name, post2header + name_offset, name_length);
+    name[name_length] = 0;
+}
+
 void get_glyph_name(HDC hdc, WORD index, char *name)
 {
     struct
@@ -703,7 +732,7 @@ void get_glyph_name(HDC hdc, WORD index, char *name)
         else if(glyphNameIndex < 258)
             get_standard_glyph_name(glyphNameIndex, name);
         else
-            FIXME("PostScript Format 2 custom glyphs are currently unsupported.\n");
+            get_post2_custom_glyph_name(post2header, size, glyphNameIndex - 258, name);
     }
     else
         FIXME("PostScript Format %d.%d glyph names are currently unsupported.\n",




More information about the wine-cvs mailing list