Emit lots of odd characters so as to test the paper backends' ability to
[sgt/halibut] / psdata.c
index 50ec904..8c3b9cd 100644 (file)
--- a/psdata.c
+++ b/psdata.c
@@ -3,6 +3,7 @@
  * formats.
  */
 
+#include <assert.h>
 #include "halibut.h"
 #include "paper.h"
 
@@ -1791,7 +1792,7 @@ const char *const ps_std_glyphs[] = {
 /*
  * Character width information from the standard PS fonts.
  * Units are UNITS_PER_PT defined in paper.h.
- * Extracted from the (non-free) AFM files in
+ * Extracted from the AFM files in
  * <http://partners.adobe.com/public/developer/en/pdf/Core14_AFMs.tar>
  * by the following script:
 
@@ -1831,6 +1832,19 @@ while (<G>) { chomp; print "$m{$_}, " }; print "\n"' $i |\
 done
 printf '};\n'
 
+ * The AFM files have the following copyright and licence: 
+ *
+ * Copyright (c) 1985, 1987, 1989, 1990, 1991, 1992, 1993, 1997
+ * Adobe Systems Incorporated.  All Rights Reserved.
+ *
+ * This file and the 14 PostScript(R) AFM files it accompanies may be
+ * used, copied, and distributed for any purpose and without charge,
+ * with or without modification, provided that all copyright notices
+ * are retained; that the AFM files are not distributed without this
+ * file; that all modifications to this file or any of the AFM files
+ * are prominently noted in the modified file(s); and that this
+ * paragraph is not modified. Adobe Systems has no responsibility or
+ * obligation to support the use of the AFM files.
  */
 
 static const kern_pair times_roman_kerns[] = {
@@ -4073,6 +4087,36 @@ static const struct ps_std_font_data {
     }},
 };
 
+void init_std_fonts(void) {
+    int i, j;
+    kern_pair const *kern;
+    static int done = FALSE;
+
+    if (done) return;
+    for (i = 0; i < (int)lenof(ps_std_fonts); i++) {
+       font_info *fi = snew(font_info);
+       fi->fp = NULL;
+       fi->name = ps_std_fonts[i].name;
+       fi->nglyphs = lenof(ps_std_glyphs) - 1;
+       fi->glyphs = ps_std_glyphs;
+       fi->widths = ps_std_fonts[i].widths;
+       fi->kerns = newtree234(kern_cmp);
+       for (kern = ps_std_fonts[i].kerns; kern->left != 0xFFFF; kern++)
+           add234(fi->kerns, (void *)kern);
+       for (j = 0; j < (int)lenof(fi->bmp); j++)
+           fi->bmp[j] = 0xFFFF;
+       for (j = 0; j < fi->nglyphs; j++) {
+           wchar_t ucs;
+           ucs = ps_glyph_to_unicode(fi->glyphs[j]);
+           assert(ucs != 0xFFFF);
+           fi->bmp[ucs] = j;
+       }
+       fi->next = all_fonts;
+       all_fonts = fi;
+    }
+    done = TRUE;
+}
+
 const int *ps_std_font_widths(char const *fontname)
 {
     int i;