html-table.h revision 104862
1// -*- C++ -*-
2/* Copyright (C) 2002 Free Software Foundation, Inc.
3 *
4 *  Gaius Mulley (gaius@glam.ac.uk) wrote html-table.cc
5 *
6 *  html-table.h
7 *
8 *  provides the methods necessary to handle indentation and tab
9 *  positions using html tables.
10 */
11
12/*
13This file is part of groff.
14
15groff is free software; you can redistribute it and/or modify it under
16the terms of the GNU General Public License as published by the Free
17Software Foundation; either version 2, or (at your option) any later
18version.
19
20groff is distributed in the hope that it will be useful, but WITHOUT ANY
21WARRANTY; without even the implied warranty of MERCHANTABILITY or
22FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
23for more details.
24
25You should have received a copy of the GNU General Public License along
26with groff; see the file COPYING.  If not, write to the Free Software
27Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
28
29#include "html.h"
30
31#if !defined(HTML_TABLE_H)
32#define HTML_TABLE_H
33
34typedef struct tab_position {
35  char alignment;
36  int  position;
37  struct tab_position *next;
38} tab_position;
39
40
41class tabs {
42public:
43         tabs         ();
44        ~tabs         ();
45  void  clear         (void);
46  int   compatible    (const char *s);
47  void  init          (const char *s);
48  int   find_tab      (int pos);
49  int   get_tab_pos   (int n);
50  char  get_tab_align (int n);
51  void  dump_tabs     (void);
52
53private:
54  void  delete_list (void);
55  tab_position *tab;
56};
57
58/*
59 *  define a column
60 */
61
62typedef struct cols {
63  int          left, right;
64  int          no;
65  char         alignment;
66  struct cols *next;
67} cols;
68
69class html_table {
70public:
71      html_table          (simple_output *op, int linelen);
72     ~html_table          (void);
73  int   add_column        (int coln, int hstart, int hend, char align);
74  cols *get_column        (int coln);
75  int   insert_column     (int coln, int hstart, int hend, char align);
76  int   modify_column     (cols *c, int hstart, int hend, char align);
77  int   find_tab_column   (int pos);
78  int   find_column       (int pos);
79  int   get_tab_pos       (int n);
80  char  get_tab_align     (int n);
81  void  set_linelength    (int linelen);
82  int   no_columns        (void);
83  int   no_gaps           (void);
84  int   is_gap            (cols *c);
85  void  dump_table        (void);
86  void  emit_table_header (int space);
87  void  emit_col          (int n);
88  void  emit_new_row      (void);
89  void  emit_finish_table (void);
90  int   get_right         (cols *c);
91  void  add_indent        (int indent);
92  void  finish_row        (void);
93  int   get_effective_linelength (void);
94
95  tabs          *tab_stops;    /* tab stop positions */
96private:
97  cols          *columns;      /* column entries */
98  simple_output *out;
99  int            linelength;
100  cols          *last_col;     /* last column started */
101  int            start_space;  /* encapsulate with <p> </p> */
102
103  void  remove_cols (cols *c);
104};
105
106/*
107 *  the indentation wrapper.
108 *  Builds an indentation from a html-table.
109 *  This table is only emitted if the paragraph is emitted.
110 */
111
112class html_indent {
113public:
114  html_indent  (simple_output *op, int ind, int pageoffset, int linelength);
115  ~html_indent (void);
116  void begin   (int space);   // called if we need to use the indent
117  void get_reg (int *ind, int *pageoffset, int *linelength);
118
119  // the indent is shutdown when it is deleted
120
121private:
122  void end     (void);
123  int         is_used;
124  int         pg;        // values of the registers as passed via initialization
125  int         ll;
126  int         in;
127  html_table *table;
128};
129
130#endif
131