diff options
author | Hiroki Sato <hrs@FreeBSD.org> | 2023-01-01 05:55:52 +0900 |
---|---|---|
committer | Hiroki Sato <hrs@FreeBSD.org> | 2023-01-01 05:55:52 +0900 |
commit | 05fe08364e357c018a4e6be1bf1b6ede19738d47 (patch) | |
tree | 080bb25bc552a563439c3dfd50cd64bfeafb84eb /print/tex-xdvik/files/patch-texk-xdvik-dvi-init.c | |
parent | security/py-trezor: Update to 0.13.5 (diff) |
print/tex-xdvik: re-add patches for pTeX and CJK support
Diffstat (limited to '')
-rw-r--r-- | print/tex-xdvik/files/patch-texk-xdvik-dvi-init.c | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/print/tex-xdvik/files/patch-texk-xdvik-dvi-init.c b/print/tex-xdvik/files/patch-texk-xdvik-dvi-init.c new file mode 100644 index 000000000000..8d04d5b472d2 --- /dev/null +++ b/print/tex-xdvik/files/patch-texk-xdvik-dvi-init.c @@ -0,0 +1,243 @@ +--- texk/xdvik/dvi-init.c.orig 2022-02-13 22:53:37 UTC ++++ texk/xdvik/dvi-init.c +@@ -31,6 +31,10 @@ in xdvi.c. + + #include "dvi-init.h" + #include "dvi-draw.h" ++#ifdef PTEX ++#include "ptexvf.h" ++#include "ptexmap.h" ++#endif + #include "util.h" + #include "x_util.h" + #include "exit-handlers.h" +@@ -53,6 +57,9 @@ in xdvi.c. + #include "statusline.h" + #include "events.h" + #include "font-open.h" ++#ifdef HAVE_LIBPAPER ++#include <paper.h> ++#endif + + #if FREETYPE + # include FT_SIZES_H +@@ -67,6 +74,10 @@ in xdvi.c. + #define VF_PRE 247 + #define VF_ID_BYTE 202 + #define VF_MAGIC ((VF_PRE << 8) | VF_ID_BYTE) ++#ifdef PTEX ++#define JFMS_MAGIC 11 ++#define JFMS_TATEMAGIC 9 ++#endif /* PTEX */ + + /* font stuff */ + struct font *tn_table[TNTABLELEN]; +@@ -170,8 +181,22 @@ static void + delete_glyphs(struct font *fontp) + { + struct glyph *g; ++#ifdef PTEX ++ int n, maxchar; + ++ maxchar = fontp->maxchar + 1; ++ for (n = 0; n < maxchar; ++n) { ++ g = (fontp->flags & FONT_KANJI) ? fontp->kglyph[n] : &fontp->glyph[n]; ++ if (g == NULL) continue; ++#else /* !PTEX */ + for (g = fontp->glyph; g <= fontp->glyph + fontp->maxchar; ++g) { ++#endif /* !PTEX */ ++ free_bitmap2(g); ++ } ++} ++ ++void free_bitmap2(struct glyph *g) { ++ { + if (g->bitmap2.bits) { + free(g->bitmap2.bits); + g->bitmap2.bits = NULL; +@@ -283,7 +308,23 @@ free_unused_fonts(void) + } + else { + delete_glyphs(fontp); ++#ifdef PTEX ++ if (fontp->flags & FONT_KANJI) { ++ int n; ++ for (n = 0; n < (int)fontp->maxchar + 1; ++n) { ++ if (fontp->kglyph[n] != NULL) { ++ free(fontp->kglyph[n]); ++ } ++ } ++ free(fontp->kglyph); ++ } ++ else { ++#endif /* PTEX */ + free((char *)fontp->glyph); ++ fontp->glyph = NULL; ++#ifdef PTEX ++ } ++#endif /* PTEX */ + } + free((char *)fontp); + } +@@ -324,7 +365,11 @@ reset_colors(void) + struct glyph *g; + + for (f = font_head; f != NULL; f = f->next) +- if ((f->flags & FONT_LOADED) && !(f->flags & FONT_VIRTUAL)) ++ if ((f->flags & FONT_LOADED) && !(f->flags & FONT_VIRTUAL) ++#ifdef PTEX ++ && !(f->flags & FONT_KANJI) ++#endif /* PTEX */ ++ ) + for (g = f->glyph; g <= f->glyph + f->maxchar; ++g) + g->fg = NULL; + } +@@ -447,6 +492,10 @@ load_font(struct font *fontp + * appear before the main window comes up ... + */ + ++#ifdef PTEX ++ fontp->dir = 0; ++#endif /* PTEX */ ++ + fontp->file = font_open( + #if DELAYED_MKTEXPK + load_font_now, +@@ -511,6 +560,12 @@ load_font(struct font *fontp + fontp->fsize = size_found; + fontp->timestamp = ++current_timestamp; + fontp->maxchar = maxchar = 255; ++#ifdef PTEX ++ if (iskanjifont(fontp->fontname)) { ++ fontp->flags |= FONT_KANJI; ++ fontp->set_char_p = set_char2; ++ } else ++#endif /* PTEX */ + fontp->set_char_p = set_char; + magic = get_bytes(fontp->file, 2); + +@@ -529,6 +584,13 @@ load_font(struct font *fontp + else + (void)read_VF_index(fontp, (wide_bool)hushcs); + break; ++#ifdef PTEX ++ case JFMS_MAGIC: ++ case JFMS_TATEMAGIC: ++ fontp->dir = (magic == JFMS_TATEMAGIC); ++ read_PTEXVF_index(fontp); ++ return True; ++#endif /* PTEX */ + default: + XDVI_FATAL((stderr, "Cannot recognize format for font file %s", + fontp->filename)); +@@ -783,7 +845,13 @@ process_preamble(FILE *fp, dviErrFlagT *errflag) + TRACE_FILES((stderr, "process_preamble: fp = %p, errflag = %d, returning False", (void *)fp, *errflag)); + return False; + } +- if (get_byte(fp) != 2) { ++#ifdef PTEX ++ k = get_byte(fp); ++ if (k != 2 && k != 3) ++#else /* !PTEX */ ++ if (get_byte(fp) != 2) ++#endif /* !PTEX */ ++ { + *errflag = WRONG_DVI_VERSION; + TRACE_FILES((stderr, "process_preamble: fp = %p, errflag = %d, returning False", (void *)fp, *errflag)); + return False; +@@ -845,7 +913,12 @@ find_postamble(FILE *fp, dviErrFlagT *errflag) + fseek(fp, --pos, SEEK_SET); + byte = get_byte(fp); + } +- if (byte != 2) { ++#ifdef PTEX ++ if (byte != 2 && byte != 3) ++#else /* !PTEX */ ++ if (byte != 2) ++#endif /* !PTEX */ ++ { + *errflag = WRONG_DVI_VERSION; + TRACE_FILES((stderr, "find_postamble: returning FALSE")); + return False; +@@ -865,9 +938,14 @@ set_paper_type(const char *arg) + char temp[21]; + const char **p; + char *q; ++#ifdef HAVE_LIBPAPER ++ const struct paper *pp; ++ int landscape = 0; ++#else + const char **paper_types = get_paper_types(); + size_t paper_types_size = get_paper_types_size(); +- ++#endif ++ + if (*arg == '+') { + ++arg; + ignore_papersize_specials = True; +@@ -884,6 +962,57 @@ set_paper_type(const char *arg) + break; + } + arg = temp; ++#ifdef HAVE_LIBPAPER ++ paperinit(); ++ if (strcmp(temp, "libpaper") == 0) { ++ const char *name; ++ ++ name = systempapername(); ++ if (name == NULL) ++ name = defaultpapername(); ++ if (strcmp(name, "libpaper") == 0) ++ name = "a4"; ++ ++ strncpy(temp, name, sizeof(temp)); ++ temp[sizeof(temp) - 1] = '\0'; ++ } ++ if (strcmp(temp, "letter") != 0 && ++ strcmp(temp, "ledger") != 0) { ++ if (temp[strlen(temp) - 1] == 'r') { ++ temp[strlen(temp) - 1] = '\0'; ++ landscape = 1; ++ } ++ } ++ for (pp = paperfirst(); pp; pp = papernext(pp)) { ++ if (strcmp(temp, papername(pp)) == 0) { ++ double w, h; ++ char wstr[256]; ++ char hstr[256]; ++ ++ if (landscape == 0) { ++ w = paperpswidth(pp); ++ h = paperpsheight(pp); ++ } else { ++ h = paperpswidth(pp); ++ w = paperpsheight(pp); ++ } ++ w = w / 72.0 * 10 * 2.54; ++ h = h / 72.0 * 10 * 2.54; ++ snprintf(wstr, sizeof(wstr), "%f mm", w); ++ snprintf(hstr, sizeof(hstr), "%f mm", h); ++ wstr[sizeof(wstr) - 1] = '\0'; ++ hstr[sizeof(hstr) - 1] = '\0'; ++ m_paper_unshrunk_w = atopix(wstr); ++ m_paper_unshrunk_h = atopix(hstr); ++ globals.grid_paper_unit = atopixunit("mm"); ++ ++ break; ++ } ++ } ++ paperdone(); ++ if (pp == NULL) ++ return (False); ++#else + /* perform substitutions */ + for (p = paper_types; p < paper_types + paper_types_size; p += 2) { + if (strcmp(temp, *p) == 0) { +@@ -898,6 +1027,7 @@ set_paper_type(const char *arg) + m_paper_unshrunk_h = atopix(arg1 + 1); + + globals.grid_paper_unit = atopixunit(arg); ++#endif + + return (m_paper_unshrunk_w != 0 && m_paper_unshrunk_h != 0); + } |