1// -*- C++ -*- 2/* Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc. 3 Written by James Clark (jjc@jclark.com) 4 5This file is part of groff. 6 7groff is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 2, or (at your option) any later 10version. 11 12groff is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License along 18with groff; see the file COPYING. If not, write to the Free Software 19Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ 20 21#if !defined(HTML_H) 22# define HTML_H 23 24/* 25 * class and structure needed to buffer words 26 */ 27 28struct word { 29 char *s; 30 word *next; 31 32 word (const char *w, int n); 33 ~word (); 34}; 35 36class word_list { 37public: 38 word_list (); 39 int flush (FILE *f); 40 void add_word (const char *s, int n); 41 int get_length (void); 42 43private: 44 int length; 45 word *head; 46 word *tail; 47}; 48 49class simple_output { 50public: 51 simple_output(FILE *, int max_line_length); 52 simple_output &put_string(const char *, int); 53 simple_output &put_string(const char *s); 54 simple_output &put_string(const string &s); 55 simple_output &put_troffps_char (const char *s); 56 simple_output &put_translated_string(const char *s); 57 simple_output &put_number(int); 58 simple_output &put_float(double); 59 simple_output &put_symbol(const char *); 60 simple_output &put_literal_symbol(const char *); 61 simple_output &set_fixed_point(int); 62 simple_output &simple_comment(const char *); 63 simple_output &begin_comment(const char *); 64 simple_output &comment_arg(const char *); 65 simple_output &end_comment(); 66 simple_output &set_file(FILE *); 67 simple_output &include_file(FILE *); 68 simple_output ©_file(FILE *); 69 simple_output &end_line(); 70 simple_output &put_raw_char(char); 71 simple_output &special(const char *); 72 simple_output &enable_newlines(int); 73 simple_output &check_newline(int n); 74 simple_output &nl(void); 75 simple_output &force_nl(void); 76 simple_output &space_or_newline (void); 77 simple_output &begin_tag (void); 78 FILE *get_file(); 79private: 80 FILE *fp; 81 int max_line_length; // not including newline 82 int col; 83 int fixed_point; 84 int newlines; // can we issue newlines automatically? 85 word_list last_word; 86 87 void flush_last_word (void); 88 int check_space (const char *s, int n); 89}; 90 91inline FILE *simple_output::get_file() 92{ 93 return fp; 94} 95 96#endif 97