You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. */
#include <config.h>
#if !NO_POSTSCRIPT
#include <ctype.h>
-#include <assert.h>
+#include "error.h"
#include <errno.h>
#include <limits.h>
#include <stdlib.h>
static void free_font_entry (void *, void *foo);
static struct font_entry *load_font (struct outp_driver *, const char *dit);
static void init_fonts (void);
+static void done_fonts (void);
static void dump_lines (struct outp_driver *this);
static int
ps_close_global (struct outp_class *this UNUSED)
{
+ groff_done ();
+ done_fonts ();
return 1;
}
{
struct ps_driver_ext *x = this->ext;
int cat, subcat;
- char *value = ds_value (val);
+ char *value = ds_c_str (val);
cat = outp_match_keyword (key, option_tab, &option_info, &subcat);
break;
default:
assert (0);
+ abort ();
}
if (setting)
x->output_options |= mask;
break;
default:
assert (0);
+ abort ();
}
if (*dest)
free (*dest);
struct string line, buf;
- ds_init (NULL, &line, 128);
- ds_init (NULL, &buf, 128);
+ ds_init (&line, 128);
+ ds_init (&buf, 128);
for (pe = hsh_first (x->encodings, &iter); pe != NULL;
pe = hsh_next (x->encodings, &iter))
{
if (buf.length == 0)
continue;
- pschar = strtok_r (ds_value (&buf), " \t\r\n", &sp);
+ pschar = strtok_r (ds_c_str (&buf), " \t\r\n", &sp);
code = strtok_r (NULL, " \t\r\n", &sp);
if (*pschar == 0 || *code == 0)
continue;
if (ds_length (&line) + strlen (temp) > 70)
{
- ds_concat (&line, x->eol);
- fputs (ds_value (&line), x->file.file);
+ ds_puts (&line, x->eol);
+ fputs (ds_c_str (&line), x->file.file);
ds_clear (&line);
}
- ds_concat (&line, temp);
+ ds_puts (&line, temp);
}
- ds_concat (&line, x->eol);
- fputs (ds_value (&line), x->file.file);
+ ds_puts (&line, x->eol);
+ fputs (ds_c_str (&line), x->file.file);
if (fclose (f) == EOF)
msg (MW, _("PostScript driver: Error closing encoding file `%s'."),
where.line_number = 0;
err_push_file_locator (&where);
- ds_init (NULL, &line, 128);
+ ds_init (&line, 128);
for (;;)
{
- char *bp;
-
if (!ds_get_config_line (f, &line, &where))
{
if (ferror (f))
break;
}
- add_encoding (this, bp);
+ add_encoding (this, line.string);
}
ds_destroy (&line);
case OUTP_T_JUST_CENTER:
ofs = width_left / 2;
break;
+ default:
+ assert (0);
+ abort ();
}
lp = line;
buf_loc = buf;
assert (!ls_null_p (&t->s));
- cp = ls_value (&t->s);
+ cp = ls_c_str (&t->s);
end = ls_end (&t->s);
if (draw)
{
x = t->x;
y = t->y;
}
+ else
+ x = y = 0;
width = width_left = (t->options & OUTP_T_HORZ) ? t->h : INT_MAX;
height_left = (t->options & OUTP_T_VERT) ? t->v : INT_MAX;
max_height = 0;
prev_char = -1;
space_char = NULL;
+ space_buf_loc = NULL;
+ space_width_left = 0;
+
if (!width || !height_left)
goto exit;
/* Set char_name to the name of the character or ligature at
*cp. */
+ local_char_name[0] = *cp;
+ char_name = local_char_name;
if (ext->current->font->ligatures && *cp == 'f')
{
int lig = 0;
+ char_name = NULL;
if (cp < end - 1)
switch (cp[1])
}
if ((lig & ext->current->font->ligatures) == 0)
{
- local_char_name[0] = *cp++; /* 'f' */
+ local_char_name[0] = *cp; /* 'f' */
char_name = local_char_name;
}
- else
- cp += strlen (char_name);
}
else if (*cp == '\n')
{
set separate to 1. */
continue;
}
- else
- {
- local_char_name[0] = *cp++;
- char_name = local_char_name;
- }
+ cp += strlen (char_name);
/* Figure out what size this character is, and what kern
adjustment we need. */
NULL, NULL);
}
+static void
+done_fonts (void)
+{
+ hsh_destroy (ps_fonts);
+}
+
/* Loads the font having Groff name DIT into THIS driver instance.
Specifically, adds it into the THIS driver's `loaded' hash
table. */
return fe;
}
+
+void ps_chart_initialise(struct outp_class *c UNUSED,
+ struct chart *ch UNUSED);
+
+void ps_chart_finalise(struct outp_class *c UNUSED,
+ struct chart *ch UNUSED);
+
+
+void
+ps_chart_initialise(struct outp_class *c UNUSED, struct chart *ch )
+{
+ msg(MW, _("Charts are currently unsupported with postscript drivers."));
+ ch->lp = 0;
+}
+
+void
+ps_chart_finalise(struct outp_class *c UNUSED, struct chart *ch UNUSED)
+{
+
+}
+
+
/* PostScript driver class. */
struct outp_class postscript_class =
{
ps_text_get_size,
ps_text_metrics,
ps_text_draw,
+
+ ps_chart_initialise,
+ ps_chart_finalise
};
/* EPSF driver class. FIXME: Probably doesn't work right. */
ps_text_get_size,
ps_text_metrics,
ps_text_draw,
+
+ ps_chart_initialise,
+ ps_chart_finalise
+
};
#endif /* NO_POSTSCRIPT */