From 5c36fcafe5d2e65f0cc16b60d03b56925af9c4b7 Mon Sep 17 00:00:00 2001 From: wl Date: Sun, 10 Feb 2013 08:23:50 +0000 Subject: [grops] Make binary `%%BeginData' work; support `fontset' resource. *src/devices/grops/psrm.cpp (resource_table): Add `fontset'. (resource_manager::read_resource_arg): Do a case insensitive comparison. The PostScript Reference Manual gives the following example for a CFF resource (example 5.7): %!PS-Adobe-3.0 Resource-FontSet %%DocumentNeedResources: ProcSet (FontSetInit) %%Title: (FontSet/CFFRoman27) %%Version: 1.000 %%EndComments %%IncludeResource: ProcSet (FontSetInit) %%BeginResource: FontSet (CFFRoman27) /FontSetInit /ProcSet findresource begin %%BeginData: 622532 Binary Bytes /CFFRoman27 622503 StartData ... 622,503 bytes of binary data ... %%EndData %%EndResource %%EOF Note the `ProcSet' and `FontSet' keywords. While the old DSC (Document Structure Convention) documentation doesn't cover `FontSet' at all (the DSC documentation predates the invention of CFF), it describes only `procset' (all letters downcase), and it also says that the DSC parser works in a case sensitive manner. In other words, `ProcSet' is not valid according to the DSC documentation, only `procset' is. So much about today's validity of DSC... This patch adapts grops's code to the PostScript reality. (resource_manager::do_begin_data): Fix typo (present since the beginning) which prevented correct handling of binary data. --- src/devices/grops/psrm.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/devices/grops/psrm.cpp b/src/devices/grops/psrm.cpp index b5c7e3b2..52c62422 100644 --- a/src/devices/grops/psrm.cpp +++ b/src/devices/grops/psrm.cpp @@ -1,6 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, - 2009 +/* Copyright (C) 1989-1992, 2000-2004, 2009, 2013 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -89,6 +88,7 @@ const int NEXTENSIONS = sizeof(extension_table)/sizeof(extension_table[0]); const char *resource_table[] = { "font", + "fontset", "procset", "file", "encoding", @@ -566,7 +566,7 @@ resource *resource_manager::read_resource_arg(const char **ptr) int ri; for (ri = 0; ri < NRESOURCES; ri++) if (strlen(resource_table[ri]) == size_t(*ptr - name) - && memcmp(resource_table[ri], name, *ptr - name) == 0) + && strncasecmp(resource_table[ri], name, *ptr - name) == 0) break; if (ri >= NRESOURCES) { error("unknown resource type"); @@ -840,7 +840,7 @@ int resource_manager::do_begin_data(const char *ptr, int, FILE *fp, current_lineno++; } if (cc != EOF) - ungetc(c, fp); + ungetc(cc, fp); } else if (c == '\n') { linecount++; -- cgit v1.2.1