diff options
author | wl <wl> | 2013-02-10 08:23:50 +0000 |
---|---|---|
committer | wl <wl> | 2013-02-10 08:23:50 +0000 |
commit | 5c36fcafe5d2e65f0cc16b60d03b56925af9c4b7 (patch) | |
tree | 0ab6253121496ce7ce0302a4e26586670fab7f49 | |
parent | 38979e822bb14dd9e5d1bd339664af0c83d9966f (diff) | |
download | groff-5c36fcafe5d2e65f0cc16b60d03b56925af9c4b7.tar.gz |
[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.
-rw-r--r-- | ChangeLog | 38 | ||||
-rw-r--r-- | src/devices/grops/psrm.cpp | 8 |
2 files changed, 42 insertions, 4 deletions
@@ -1,3 +1,41 @@ +2013-02-10 Werner LEMBERG <wl@gnu.org> + + [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. + 2013-02-10 Bernd Warken <groff-bernd.warken-72@web.de> * contrib/lilypond: New files for adding lilypond parts into groff 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++; |