mirror of
https://git.freebsd.org/ports.git
synced 2025-04-28 17:46:38 -04:00
243 lines
6 KiB
C
243 lines
6 KiB
C
--- 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);
|
|
}
|