1251538Srpaulo/*	$NetBSD: output.h,v 1.1.1.1 2016/01/13 18:41:48 christos Exp $	*/
2251538Srpaulo
3251538Srpaulo// -*- C++ -*-
4251538Srpaulo/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
5251538Srpaulo     Written by James Clark (jjc@jclark.com)
6251538Srpaulo
7251538SrpauloThis file is part of groff.
8251538Srpaulo
9251538Srpaulogroff is free software; you can redistribute it and/or modify it under
10251538Srpaulothe terms of the GNU General Public License as published by the Free
11251538SrpauloSoftware Foundation; either version 2, or (at your option) any later
12251538Srpauloversion.
13251538Srpaulo
14251538Srpaulogroff is distributed in the hope that it will be useful, but WITHOUT ANY
15251538SrpauloWARRANTY; without even the implied warranty of MERCHANTABILITY or
16251538SrpauloFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17251538Srpaulofor more details.
18251538Srpaulo
19251538SrpauloYou should have received a copy of the GNU General Public License along
20251538Srpaulowith groff; see the file COPYING.  If not, write to the Free Software
21251538SrpauloFoundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
22251538Srpaulo
23251538Srpaulostruct line_type {
24251538Srpaulo  enum { invisible, solid, dotted, dashed } type;
25251538Srpaulo  double dash_width;
26251538Srpaulo  double thickness;		// the thickness is in points
27251538Srpaulo
28251538Srpaulo  line_type();
29251538Srpaulo};
30251538Srpaulo
31251538Srpaulo
32251538Srpauloclass output {
33251538Srpauloprotected:
34251538Srpaulo  char *args;
35251538Srpaulo  double desired_height;	// zero if no height specified
36251538Srpaulo  double desired_width;		// zero if no depth specified
37251538Srpaulo  double compute_scale(double, const position &, const position &);
38251538Srpaulopublic:
39251538Srpaulo  output();
40251538Srpaulo  virtual ~output();
41251538Srpaulo  void set_desired_width_height(double wid, double ht);
42251538Srpaulo  void set_args(const char *);
43251538Srpaulo  virtual void start_picture(double sc, const position &ll, const position &ur) = 0;
44251538Srpaulo  virtual void finish_picture() = 0;
45251538Srpaulo  virtual void circle(const position &, double rad,
46251538Srpaulo		      const line_type &, double) = 0;
47251538Srpaulo  virtual void text(const position &, text_piece *, int, double) = 0;
48251538Srpaulo  virtual void line(const position &, const position *, int n,
49251538Srpaulo		    const line_type &) = 0;
50251538Srpaulo  virtual void polygon(const position *, int n,
51251538Srpaulo		       const line_type &, double) = 0;
52251538Srpaulo  virtual void spline(const position &, const position *, int n,
53251538Srpaulo		      const line_type &) = 0;
54251538Srpaulo  virtual void arc(const position &, const position &, const position &,
55251538Srpaulo		   const line_type &) = 0;
56251538Srpaulo  virtual void ellipse(const position &, const distance &,
57251538Srpaulo		       const line_type &, double) = 0;
58251538Srpaulo  virtual void rounded_box(const position &, const distance &, double,
59251538Srpaulo			   const line_type &, double) = 0;
60251538Srpaulo  virtual void command(const char *, const char *, int) = 0;
61251538Srpaulo  virtual void set_location(const char *, int) {}
62251538Srpaulo  virtual void set_color(char *, char *) = 0;
63251538Srpaulo  virtual void reset_color() = 0;
64251538Srpaulo  virtual char *get_last_filled() = 0;
65251538Srpaulo  virtual char *get_outline_color() = 0;
66251538Srpaulo  virtual int supports_filled_polygons();
67251538Srpaulo  virtual void begin_block(const position &ll, const position &ur);
68251538Srpaulo  virtual void end_block();
69251538Srpaulo};
70251538Srpaulo
71251538Srpauloextern output *out;
72251538Srpaulo
73251538Srpaulo/* #define FIG_SUPPORT 1 */
74251538Srpaulo#define TEX_SUPPORT 1
75251538Srpaulo
76251538Srpaulooutput *make_troff_output();
77251538Srpaulo
78251538Srpaulo#ifdef TEX_SUPPORT
79251538Srpaulooutput *make_tex_output();
80251538Srpaulooutput *make_tpic_output();
81251538Srpaulo#endif /* TEX_SUPPORT */
82251538Srpaulo
83252406Srpaulo#ifdef FIG_SUPPORT
84251538Srpaulooutput *make_fig_output();
85251538Srpaulo#endif /* FIG_SUPPORT */
86251538Srpaulo