diff options
Diffstat (limited to 'Build')
-rw-r--r-- | Build/source/texk/dvipsk/ChangeLog | 8 | ||||
-rw-r--r-- | Build/source/texk/dvipsk/download.c | 7 | ||||
-rw-r--r-- | Build/source/texk/dvipsk/dvips.c | 3 | ||||
-rw-r--r-- | Build/source/texk/dvipsk/dvips.h | 3 | ||||
-rw-r--r-- | Build/source/texk/dvipsk/finclude.c | 11 |
5 files changed, 31 insertions, 1 deletions
diff --git a/Build/source/texk/dvipsk/ChangeLog b/Build/source/texk/dvipsk/ChangeLog index 3328ed8d702..773a00a6e7b 100644 --- a/Build/source/texk/dvipsk/ChangeLog +++ b/Build/source/texk/dvipsk/ChangeLog @@ -1,3 +1,11 @@ +2007-05-05 Karl Berry <karl@tug.org> + + * dvips.h (DOWNLOADEDPSSIZE): new constant. + * dvips.c (downloadedpsname): new global array. + * finclude.c: set it up as we download. + * download.c: use it to avoid downloading fonts as both header + and font. (From Akira.) + 2007-05-04 Karl Berry <karl@tug.org> * dvips.h (BANNER): change to 5.96dev to distinguish from the release. diff --git a/Build/source/texk/dvipsk/download.c b/Build/source/texk/dvipsk/download.c index ae8b3aece8e..02e01f1bf54 100644 --- a/Build/source/texk/dvipsk/download.c +++ b/Build/source/texk/dvipsk/download.c @@ -433,6 +433,8 @@ static void addGlyph(char *glyphName) { * Download a PostScript font, using partial font downloading if * necessary. */ +extern char *downloadedpsname[]; + void downpsfont P2C(charusetype *, p, charusetype *, all) { #ifdef DOWNLOAD_USING_PDFTEX @@ -445,6 +447,7 @@ void downpsfont P2C(charusetype *, p, charusetype *, all) struct resfont *rf ; int cc; extern char *realnameoffile ; + int j; curfnt = p->fd ; rf = curfnt->resfont ; @@ -458,6 +461,10 @@ void downpsfont P2C(charusetype *, p, charusetype *, all) return ; if (rf->sent == 2) /* sent as header, from a PS file */ return ; + for (j=0; downloadedpsname[j] && j < DOWNLOADEDPSSIZE; j++) { + if (strcmp (downloadedpsname[j], rf->PSname) == 0) + return; + } if (all->fd == 0) error("! internal error in downpsfont") ; if (!partialdownload) { diff --git a/Build/source/texk/dvipsk/dvips.c b/Build/source/texk/dvipsk/dvips.c index 11d5a844a9d..9f78ccbced7 100644 --- a/Build/source/texk/dvipsk/dvips.c +++ b/Build/source/texk/dvipsk/dvips.c @@ -50,6 +50,7 @@ extern char *strtok() ; /* some systems don't have this in strings.h */ #ifdef VMS static char ofnme[252],infnme[252],pap[40],thh[20]; #endif +char *downloadedpsname[DOWNLOADEDPSSIZE]; /* PS names fully downloaded as headers */ fontdesctype *fonthead ; /* list of all fonts mentioned so far */ fontdesctype *curfnt ; /* the currently selected font */ sectiontype *sections ; /* sections to process document in */ @@ -555,6 +556,8 @@ main P2C(int, argc, char **, argv) #endif register sectiontype *sects ; + for(i=0 ; i < DOWNLOADEDPSSIZE; i++) + downloadedpsname[i] = NULL; #ifdef KPATHSEA kpse_set_program_name (argv[0], "dvips"); kpse_set_program_enabled (kpse_pk_format, MAKE_TEX_PK_BY_DEFAULT, kpse_src_compile); diff --git a/Build/source/texk/dvipsk/dvips.h b/Build/source/texk/dvipsk/dvips.h index 246d655cad1..c58eb794040 100644 --- a/Build/source/texk/dvipsk/dvips.h +++ b/Build/source/texk/dvipsk/dvips.h @@ -53,13 +53,14 @@ extern char *sprintf() ; * of a string that can be handled in specials, so it should not be * set too small. */ -#define STRINGSIZE (200000) /* maximum total chars in strings in program */ +#define STRINGSIZE (200000) /* maximum total chars in strings in program */ #define RASTERCHUNK (8192) /* size of chunk of raster */ #define MINCHUNK (240) /* minimum size char to get own raster */ #define STACKSIZE (350) /* maximum stack size for dvi files */ #define MAXFRAME (10) /* maximum depth of virtual font recursion */ #define MAXFONTHD (100) /* number of unique names of included fonts */ #define STDOUTSIZE (75) /* width of a standard output line */ +#define DOWNLOADEDPSSIZE (1000) /* max number of downloaded fonts to check */ /* * Other constants, which define printer-dependent stuff. */ diff --git a/Build/source/texk/dvipsk/finclude.c b/Build/source/texk/dvipsk/finclude.c index 4cd5d09f3ef..8e902f0c265 100644 --- a/Build/source/texk/dvipsk/finclude.c +++ b/Build/source/texk/dvipsk/finclude.c @@ -57,6 +57,8 @@ extern int to_close ; extern integer debug_flag; #endif /* DEBUG */ +extern char *downloadedpsname[]; + /* * Create a font descriptor for a font included in a psfile. There will be * no fontmaptype node for the resulting font descriptor until this font is @@ -252,6 +254,10 @@ scan_fontnames P2C(char *, str, char *, psfile) char *p,*pe; struct resfont *re; int i; + int j = 0; + + while (downloadedpsname[j] != NULL && j < DOWNLOADEDPSSIZE) + j++; /* Turn all newlines, CRs, and tabs into spaces. */ p = str; @@ -312,6 +318,11 @@ scan_fontnames P2C(char *, str, char *, psfile) infont = 0 ; } re->sent = 2 ; + if (j < DOWNLOADEDPSSIZE) { + downloadedpsname[j] = (char *)xmalloc(strlen(re->PSname) + 1); + strcpy (downloadedpsname[j], re->PSname); + j++; + } } else { char eb[1000]; sprintf(eb,"Font %s used in file %s is not in the mapping file.", |