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