diff options
author | Ruslan Ermilov <ru@FreeBSD.org> | 2001-04-17 12:12:05 +0000 |
---|---|---|
committer | Ruslan Ermilov <ru@FreeBSD.org> | 2001-04-17 12:12:05 +0000 |
commit | 1d5f6a94a87add2c3eb035043f48bb7fe1906661 (patch) | |
tree | f3137c4283de8869ebcae1dd0fe43f590276c1dc /contrib/groff/src/include | |
parent | c8d1b47c7fde3a8a3f5530bd5e3939bba340ab4b (diff) | |
download | src-test2-1d5f6a94a87add2c3eb035043f48bb7fe1906661.tar.gz src-test2-1d5f6a94a87add2c3eb035043f48bb7fe1906661.zip |
Notes
Diffstat (limited to 'contrib/groff/src/include')
24 files changed, 1801 insertions, 0 deletions
diff --git a/contrib/groff/src/include/Makefile.sub b/contrib/groff/src/include/Makefile.sub new file mode 100644 index 000000000000..cee00d31a314 --- /dev/null +++ b/contrib/groff/src/include/Makefile.sub @@ -0,0 +1,42 @@ +HDRS=\ + assert.h \ + cmap.h \ + cset.h \ + device.h \ + driver.h \ + errarg.h \ + error.h \ + font.h \ + getopt.h \ + groff-getopt.h \ + htmlindicate.h \ + index.h \ + lib.h \ + macropath.h \ + nonposix.h \ + posix.h \ + printer.h \ + ptable.h \ + refid.h \ + search.h \ + searchpath.h \ + stringclass.h +GENHDRS=defs.h +CLEANADD=$(GENHDRS) + +all depend: $(GENHDRS) + +defs.h: FORCE + @$(SHELL) $(top_srcdir)/gendef.sh defs.h \ + "PROG_PREFIX=\"$(g)\"" \ + "DEVICE=\"$(DEVICE)\"" \ + "BINPATH=\"$(bindir)\"" \ + "FONTPATH=\"$(fontpath)\"" \ + "MACROPATH=\"$(tmacpath)\"" \ + "INDEX_SUFFIX=\"$(indexext)\"" \ + "COMMON_WORDS_FILE=\"$(common_words_file)\"" \ + "DEFAULT_INDEX_DIR=\"$(indexdir)\"" \ + "DEFAULT_INDEX_NAME=\"$(indexname)\"" \ + "DEFAULT_INDEX=\"$(indexdir)/$(indexname)\"" + +FORCE: diff --git a/contrib/groff/src/include/assert.h b/contrib/groff/src/include/assert.h new file mode 100644 index 000000000000..18d9c2623eda --- /dev/null +++ b/contrib/groff/src/include/assert.h @@ -0,0 +1,39 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef ASSERT_H +#define ASSERT_H + +void assertion_failed(int, const char *); + +inline void do_assert(int expr, int line, const char *file) +{ + if (!expr) + assertion_failed(line, file); +} +#endif /* ASSERT_H */ + +#undef assert + +#ifdef NDEBUG +#define assert(ignore) /* as nothing */ +#else +#define assert(expr) do_assert(expr, __LINE__, __FILE__) +#endif diff --git a/contrib/groff/src/include/cmap.h b/contrib/groff/src/include/cmap.h new file mode 100644 index 000000000000..1537d4627d7b --- /dev/null +++ b/contrib/groff/src/include/cmap.h @@ -0,0 +1,56 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef UCHAR_MAX +#define UCHAR_MAX 255 +#endif + +enum cmap_builtin { CMAP_BUILTIN }; + +class cmap { +public: + cmap(); + cmap(cmap_builtin); + int operator()(unsigned char) const; + unsigned char &operator[](unsigned char); + + friend class cmap_init; +private: + unsigned char v[UCHAR_MAX+1]; +}; + +inline int cmap::operator()(unsigned char c) const +{ + return v[c]; +} + +inline unsigned char &cmap::operator[](unsigned char c) +{ + return v[c]; +} + +extern cmap cmlower; +extern cmap cmupper; + +static class cmap_init { + static int initialised; +public: + cmap_init(); +} _cmap_init; diff --git a/contrib/groff/src/include/cset.h b/contrib/groff/src/include/cset.h new file mode 100644 index 000000000000..b3a1a976139e --- /dev/null +++ b/contrib/groff/src/include/cset.h @@ -0,0 +1,75 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CC_LIMITS_H +#include <limits.h> +#else /* not HAVE_CC_LIMITS_H */ +#ifndef UCHAR_MAX +#define UCHAR_MAX 255 +#endif +#endif /* not HAVE_CC_LIMITS_H */ + +enum cset_builtin { CSET_BUILTIN }; + +class cset { +public: + cset(); + cset(cset_builtin); + cset(const char *); + cset(const unsigned char *); + int operator()(unsigned char) const; + + cset &operator|=(const cset &); + cset &operator|=(unsigned char); + + friend class cset_init; +private: + char v[UCHAR_MAX+1]; + void clear(); +}; + +inline int cset::operator()(unsigned char c) const +{ + return v[c]; +} + +inline cset &cset::operator|=(unsigned char c) +{ + v[c] = 1; + return *this; +} + +extern cset csalpha; +extern cset csupper; +extern cset cslower; +extern cset csdigit; +extern cset csxdigit; +extern cset csspace; +extern cset cspunct; +extern cset csalnum; +extern cset csprint; +extern cset csgraph; +extern cset cscntrl; + +static class cset_init { + static int initialised; +public: + cset_init(); +} _cset_init; diff --git a/contrib/groff/src/include/device.h b/contrib/groff/src/include/device.h new file mode 100644 index 000000000000..341af8d2a70f --- /dev/null +++ b/contrib/groff/src/include/device.h @@ -0,0 +1,21 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +extern const char *device; diff --git a/contrib/groff/src/include/driver.h b/contrib/groff/src/include/driver.h new file mode 100644 index 000000000000..97eb89125d02 --- /dev/null +++ b/contrib/groff/src/include/driver.h @@ -0,0 +1,35 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include <stdio.h> +#include <ctype.h> +#include <stdlib.h> +#include <stddef.h> +#include <errno.h> +#include <assert.h> +#include <math.h> +#include "errarg.h" +#include "error.h" +#include "font.h" +#include "printer.h" +#include "lib.h" + +void do_file(const char *); +extern printer *pr; diff --git a/contrib/groff/src/include/errarg.h b/contrib/groff/src/include/errarg.h new file mode 100644 index 000000000000..0c7957c85ce0 --- /dev/null +++ b/contrib/groff/src/include/errarg.h @@ -0,0 +1,46 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +class errarg { + enum { EMPTY, STRING, CHAR, INTEGER, DOUBLE } type; + union { + const char *s; + int n; + char c; + double d; + }; + public: + errarg(); + errarg(const char *); + errarg(char); + errarg(unsigned char); + errarg(int); + errarg(double); + int empty() const; + void print() const; +}; + +extern errarg empty_errarg; + +extern void errprint(const char *, + const errarg &arg1 = empty_errarg, + const errarg &arg2 = empty_errarg, + const errarg &arg3 = empty_errarg); + diff --git a/contrib/groff/src/include/error.h b/contrib/groff/src/include/error.h new file mode 100644 index 000000000000..d26e2c70facd --- /dev/null +++ b/contrib/groff/src/include/error.h @@ -0,0 +1,58 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +extern void fatal_with_file_and_line(const char *filename, int lineno, + const char *format, + const errarg &arg1 = empty_errarg, + const errarg &arg2 = empty_errarg, + const errarg &arg3 = empty_errarg); + +extern void error_with_file_and_line(const char *filename, int lineno, + const char *format, + const errarg &arg1 = empty_errarg, + const errarg &arg2 = empty_errarg, + const errarg &arg3 = empty_errarg); + +extern void warning_with_file_and_line(const char *filename, int lineno, + const char *format, + const errarg &arg1 = empty_errarg, + const errarg &arg2 = empty_errarg, + const errarg &arg3 = empty_errarg); + +extern void fatal(const char *, + const errarg &arg1 = empty_errarg, + const errarg &arg2 = empty_errarg, + const errarg &arg3 = empty_errarg); + +extern void error(const char *, + const errarg &arg1 = empty_errarg, + const errarg &arg2 = empty_errarg, + const errarg &arg3 = empty_errarg); + +extern void warning(const char *, + const errarg &arg1 = empty_errarg, + const errarg &arg2 = empty_errarg, + const errarg &arg3 = empty_errarg); + + +extern const char *program_name; +extern int current_lineno; +extern const char *current_filename; + diff --git a/contrib/groff/src/include/font.h b/contrib/groff/src/include/font.h new file mode 100644 index 000000000000..099f97bea180 --- /dev/null +++ b/contrib/groff/src/include/font.h @@ -0,0 +1,116 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +typedef void (*FONT_COMMAND_HANDLER)(const char *, const char *, + const char *, int); + +struct font_kern_list; +struct font_char_metric; +struct font_widths_cache; + +class font { +public: + enum { + LIG_ff = 1, + LIG_fi = 2, + LIG_fl = 4, + LIG_ffi = 8, + LIG_ffl = 16 + }; + + virtual ~font(); + int contains(int index); + int is_special(); + int get_width(int index, int point_size); + int get_height(int index, int point_size); + int get_depth(int index, int point_size); + int get_space_width(int point_size); + int get_character_type(int index); + int get_kern(int index1, int index2, int point_size); + int get_skew(int index, int point_size, int slant); + int has_ligature(int); + int get_italic_correction(int index, int point_size); + int get_left_italic_correction(int index, int point_size); + int get_subscript_correction(int index, int point_size); + int get_code(int i); + const char *get_special_device_encoding(int index); + const char *get_name(); + const char *get_internal_name(); + + static font *load_font(const char *, int *not_found = 0); + static void command_line_font_dir(const char *path); + static FILE *open_file(const char *name, char **pathp); + static int load_desc(); + static int name_to_index(const char *); + static int number_to_index(int); + static FONT_COMMAND_HANDLER + set_unknown_desc_command_handler(FONT_COMMAND_HANDLER); + + static int res; + static int hor; + static int vert; + static int unitwidth; + static int paperwidth; + static int paperlength; + static int biggestfont; + static int spare2; + static int sizescale; + static int tcommand; + static int pass_filenames; + static int use_charnames_in_special; + + static const char **font_name_table; + static const char **style_table; + static const char *family; + static int *sizes; +private: + unsigned ligatures; + font_kern_list **kern_hash_table; + int space_width; + short *ch_index; + int nindices; + font_char_metric *ch; + int ch_used; + int ch_size; + int special; + char *name; + char *internalname; + double slant; + font_widths_cache *widths_cache; + static FONT_COMMAND_HANDLER unknown_desc_command_handler; + + enum { KERN_HASH_TABLE_SIZE = 503 }; + + void add_entry(int index, const font_char_metric &); + void copy_entry(int new_index, int old_index); + void add_kern(int index1, int index2, int amount); + static int hash_kern(int i1, int i2); + void alloc_ch_index(int); + void extend_ch(); + void compact(); + + static int scale(int w, int pointsize); + virtual void handle_unknown_font_command(const char *command, + const char *arg, + const char *file, int lineno); +protected: + font(const char *); + int load(int *not_found = 0); +}; diff --git a/contrib/groff/src/include/getopt.h b/contrib/groff/src/include/getopt.h new file mode 100644 index 000000000000..b0147e9d2ac3 --- /dev/null +++ b/contrib/groff/src/include/getopt.h @@ -0,0 +1,169 @@ +/* Declarations for getopt. + Copyright (C) 1989,90,91,92,93,94,96,97,98 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _GETOPT_H + +#ifndef __need_getopt +# define _GETOPT_H 1 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +#ifndef __need_getopt +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ +# if defined __STDC__ && __STDC__ + const char *name; +# else + char *name; +# endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +# define no_argument 0 +# define required_argument 1 +# define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, `optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in `optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU `getopt'. + + The argument `--' causes premature termination of argument + scanning, explicitly telling `getopt' that there are no more + options. + + If OPTS begins with `--', then non-option arguments are treated as + arguments to the option '\0'. This behavior is specific to the GNU + `getopt'. */ + +#if defined __STDC__ && __STDC__ +# ifdef __GNU_LIBRARY__ +/* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ +extern int getopt (int __argc, char *const *__argv, const char *__shortopts); +# else /* not __GNU_LIBRARY__ */ +extern int getopt (); +# endif /* __GNU_LIBRARY__ */ + +# ifndef __need_getopt +extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts, + const struct option *__longopts, int *__longind); +extern int getopt_long_only (int __argc, char *const *__argv, + const char *__shortopts, + const struct option *__longopts, int *__longind); + +/* Internal only. Users should not call this directly. */ +extern int _getopt_internal (int __argc, char *const *__argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only); +# endif +#else /* not __STDC__ */ +extern int getopt (); +# ifndef __need_getopt +extern int getopt_long (); +extern int getopt_long_only (); + +extern int _getopt_internal (); +# endif +#endif /* __STDC__ */ + +#ifdef __cplusplus +} +#endif + +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* getopt.h */ diff --git a/contrib/groff/src/include/groff-getopt.h b/contrib/groff/src/include/groff-getopt.h new file mode 100644 index 000000000000..1807fc7ccfb9 --- /dev/null +++ b/contrib/groff/src/include/groff-getopt.h @@ -0,0 +1,68 @@ +// -*- C++ -*- +/* Copyright (C) 2000 Free Software Foundation, Inc. + Written by Werner Lemberg (wl@gnu.org) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* + This file has to be included from within lib.h instead of getopt.h + to avoid problems with picky C++ compilers. +*/ + +#ifndef _GROFF_GETOPT_H +#define _GROFF_GETOPT_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern char *optarg; +extern int optind; +extern int opterr; +extern int optopt; + +struct option +{ + const char *name; + int has_arg; + int *flag; + int val; +}; + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +extern int getopt(int __argc, + char *const *__argv, + const char *__shortopts); +extern int getopt_long(int __argc, + char *const *__argv, + const char *__shortopts, + const struct option *__longopts, + int *__longind); +extern int getopt_long_only(int __argc, + char *const *__argv, + const char *__shortopts, + const struct option *__longopts, + int *__longind); + +#ifdef __cplusplus +} +#endif + +#endif /* _GROFF_GETOPT_H */ diff --git a/contrib/groff/src/include/html-strings.h b/contrib/groff/src/include/html-strings.h new file mode 100644 index 000000000000..710e8d7e816c --- /dev/null +++ b/contrib/groff/src/include/html-strings.h @@ -0,0 +1,31 @@ +// -*- C++ -*- +/* Copyright (C) 2001 Free Software Foundation, Inc. + Written by Gaius Mulley (gaius@glam.ac.uk). + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* + * defines the image tags issued by the pre-processors (tbl, pic, eqn) + * and later detected by pre-html.cc + */ + +#define HTML_IMAGE_INLINE_BEGIN "\\O[HTML-IMAGE-INLINE-BEGIN]" +#define HTML_IMAGE_INLINE_END "\\O[HTML-IMAGE-INLINE-END]" +#define HTML_IMAGE_CENTERED ".HTML-IMAGE" +#define HTML_IMAGE_RIGHT ".HTML-IMAGE-RIGHT" +#define HTML_IMAGE_LEFT ".HTML-IMAGE-LEFT" +#define HTML_IMAGE_END ".HTML-IMAGE-END" diff --git a/contrib/groff/src/include/htmlindicate.h b/contrib/groff/src/include/htmlindicate.h new file mode 100644 index 000000000000..4915ba8a2b15 --- /dev/null +++ b/contrib/groff/src/include/htmlindicate.h @@ -0,0 +1,59 @@ +// -*- C++ -*- +/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Written by Gaius Mulley <gaius@glam.ac.uk> + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef HTMLINDICATE_H +#define HTMLINDICATE_H + +/* + * graphic_start - emit a html graphic start indicator, but only + * if one has not already been issued. + * + * The boolean, is_inline, should be: + * + * FALSE if this is called via EQ, TS, PS, and + * TRUE if issued via delim $$ $ x over y $ etc. + */ +extern void graphic_start(int is_inline); + +/* + * graphic_end - emit a html graphic end indicator, but only + * if a corresponding matching graphic-start has + * been issued. + * + */ +extern void graphic_end(); + +/* + * html_begin_suppress - suppresses output for the html device + * and resets the min/max registers for -Tps + * + * The boolean, is_inline, should be: + * + * FALSE if this is called via EQ, TS, PS, and + * TRUE if issued via delim $$ $ x over y $ etc. + */ +extern void html_begin_suppress(int is_inline); + +/* + * html_end_suppress - end the suppression of output. + */ +extern void html_end_suppress(int is_inline); + +#endif diff --git a/contrib/groff/src/include/index.h b/contrib/groff/src/include/index.h new file mode 100644 index 000000000000..7e6081381c2e --- /dev/null +++ b/contrib/groff/src/include/index.h @@ -0,0 +1,42 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#define INDEX_MAGIC 0x23021964 +#define INDEX_VERSION 1 + +struct index_header { + int magic; + int version; + int tags_size; + int table_size; + int lists_size; + int strings_size; + int truncate; + int shortest; + int common; +}; + +struct tag { + int filename_index; + int start; + int length; +}; + +unsigned hash(const char *s, int len); diff --git a/contrib/groff/src/include/lib.h b/contrib/groff/src/include/lib.h new file mode 100644 index 000000000000..ad416e0a9883 --- /dev/null +++ b/contrib/groff/src/include/lib.h @@ -0,0 +1,133 @@ +// -*- C++ -*- +/* Copyright (C) 1989-2000 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +extern "C" { +#ifndef strerror + char *strerror(int); +#endif + const char *i_to_a(int); + const char *if_to_a(int, int); +} + +/* stdio.h on IRIX and OSF/1 include getopt.h */ + +#if !(defined(__sgi) || (defined(__osf__) && defined(__alpha))) +#include <groff-getopt.h> +#endif + +char *strsave(const char *s); +int is_prime(unsigned); + +#include <stdio.h> +#include <string.h> +#ifdef HAVE_STRINGS_H +#include <strings.h> +#endif + +FILE *xtmpfile(char **namep=0, char *postfix=0, int do_unlink=1); +char *xtmptemplate(char *extension=0); + +#ifdef NEED_DECLARATION_POPEN + +extern "C" { FILE *popen(const char *, const char *); } + +#endif /* NEED_DECLARATION_POPEN */ + +#ifdef NEED_DECLARATION_PCLOSE + +extern "C" { int pclose (FILE *); } + +#endif /* NEED_DECLARATION_PCLOSE */ + +int interpret_lf_args(const char *p); + +extern char illegal_char_table[]; + +inline int illegal_input_char(int c) +{ + return c >= 0 && illegal_char_table[c]; +} + +#if !defined(_AIX) && !defined(sinix) && !defined(__sinix__) +#ifdef HAVE_STRNCASECMP +#ifdef NEED_DECLARATION_STRNCASECMP +extern "C" { + // SunOS's string.h fails to declare this. + int strncasecmp(const char *, const char *, int); +} +#endif /* NEED_DECLARATION_STRNCASECMP */ +#endif /* HAVE_STRNCASECMP */ +#endif /* !_AIX && !sinix && !__sinix__ */ + +#ifndef HAVE_STRCASECMP +#define strcasecmp(a,b) strcmp((a),(b)) +#endif + +#ifndef HAVE_STRNCASECMP +#define strncasecmp(a,b,c) strncmp((a),(b),(c)) +#endif + +#ifdef HAVE_CC_LIMITS_H +#include <limits.h> +#else /* not HAVE_CC_LIMITS_H */ +#define INT_MAX 2147483647 +#endif /* not HAVE_CC_LIMITS_H */ + +/* It's not safe to rely on people getting INT_MIN right (ie signed). */ + +#ifdef INT_MIN +#undef INT_MIN +#endif + +#ifdef CFRONT_ANSI_BUG + +/* This works around a bug in cfront 2.0 used with ANSI C compilers. */ + +#define INT_MIN ((long)(-INT_MAX-1)) + +#else /* not CFRONT_ANSI_BUG */ + +#define INT_MIN (-INT_MAX-1) + +#endif /* not CFRONT_ANSI_BUG */ + +/* Maximum number of digits in the decimal representation of an int +(not including the -). */ + +#define INT_DIGITS 10 + +#ifdef PI +#undef PI +#endif + +const double PI = 3.14159265358979323846; + +/* ad_delete deletes an array of objects with destructors; +a_delete deletes an array of objects without destructors */ + +#ifdef ARRAY_DELETE_NEEDS_SIZE +/* for 2.0 systems */ +#define ad_delete(size) delete [size] +#define a_delete delete +#else /* not ARRAY_DELETE_NEEDS_SIZE */ +/* for ARM systems */ +#define ad_delete(size) delete [] +#define a_delete delete [] +#endif /* not ARRAY_DELETE_NEEDS_SIZE */ diff --git a/contrib/groff/src/include/macropath.h b/contrib/groff/src/include/macropath.h new file mode 100644 index 000000000000..b4a2bd0cadaa --- /dev/null +++ b/contrib/groff/src/include/macropath.h @@ -0,0 +1,23 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +extern search_path macro_path; +extern search_path safer_macro_path; +extern search_path config_macro_path; diff --git a/contrib/groff/src/include/nonposix.h b/contrib/groff/src/include/nonposix.h new file mode 100644 index 000000000000..51449832ae35 --- /dev/null +++ b/contrib/groff/src/include/nonposix.h @@ -0,0 +1,136 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + Written by Eli Zaretskii (eliz@is.elta.co.il) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* This header file compartmentalize all idiosyncrasies of non-Posix + systems, such as MS-DOS, MS-Windows, etc. */ + +#if defined _MSC_VER +# ifndef _WIN32 +# define _WIN32 +# endif +# define setmode(f,m) _setmode(f,m) +#endif + +#if defined(__MSDOS__) || (defined(_WIN32) && !defined(__CYGWIN32__)) + +/* Binary I/O nuisances. Note: "setmode" is right for DJGPP and + Borland; Windows compilers might need _setmode or some such. */ +# include <fcntl.h> +# include <io.h> +# ifdef HAVE_UNISTD_H +# include <unistd.h> +# endif +# define SET_BINARY(f) do {if (!isatty(f)) setmode(f,O_BINARY);} while(0) +# define FOPEN_RB "rb" +# define FOPEN_WB "wb" +# define FOPEN_RWB "wb+" +# ifdef _MSC_VER +# define POPEN_RT "rt" +# define POPEN_WT "wt" +# define popen(c,m) _popen(c,m) +# define pclose(p) _pclose(p) +# define getpid() (1) +# endif +# ifndef O_BINARY +# ifdef _O_BINARY +# define O_BINARY (_O_BINARY) +# endif +# endif + +/* The system shell. Groff assumes a Unixy shell, but non-Posix + systems don't have standard places where it lives, and might not + have it installed to begin with. We want to give them some leeway. */ +# define BSHELL (system_shell_name()) +# define BSHELL_DASH_C (system_shell_dash_c()) +# define IS_BSHELL(s) (is_system_shell(s)) + +/* The separator for directories in PATH and other environment + variables. */ +# define PATH_SEP ";" + +/* Characters that separate directories in a path name. */ +# define DIR_SEPS "/\\:" + +/* How to tell if the argument is an absolute file name. */ +# define IS_ABSOLUTE(f) \ + ((f)[0] == '/' || (f)[0] == '\\' || (f)[0] && (f)[1] == ':') + +/* The executable extension. */ +# define EXE_EXT ".exe" + +/* The system null device. */ +# define NULL_DEV "NUL" + +/* Prototypes. */ +# ifdef __cplusplus + extern "C" { +# endif + const char * system_shell_name(void); + const char * system_shell_dash_c(void); + int is_system_shell(const char *); +# ifdef __cplusplus + } +# endif + +#endif + +/* Defaults, for Posix systems. */ + +#ifndef FOPEN_RB +# define FOPEN_RB "r" +#endif +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef FOPEN_RWB +# define FOPEN_RWB "w+" +#endif +#ifndef POPEN_RT +# define POPEN_RT "r" +#endif +#ifndef POPEN_WT +# define POPEN_WT "w" +#endif +#ifndef O_BINARY +# define O_BINARY 0 +#endif +#ifndef BSHELL +# define BSHELL "/bin/sh" +#endif +#ifndef BSHELL_DASH_C +# define BSHELL_DASH_C "-c" +#endif +#ifndef IS_BSHELL +# define IS_BSHELL(s) ((s) && strcmp(s,BSHELL) == 0) +#endif +#ifndef PATH_SEP +# define PATH_SEP ":" +#endif +#ifndef DIR_SEPS +# define DIR_SEPS "/" +#endif +#ifndef IS_ABSOLUTE +# define IS_ABSOLUTE(f) ((f)[0] == '/') +#endif +#ifndef EXE_EXT +# define EXE_EXT "" +#endif +#ifndef NULL_DEV +# define NULL_DEV "/dev/null" +#endif diff --git a/contrib/groff/src/include/posix.h b/contrib/groff/src/include/posix.h new file mode 100644 index 000000000000..1b7d5cdc3424 --- /dev/null +++ b/contrib/groff/src/include/posix.h @@ -0,0 +1,51 @@ +// -*- C++ -*- +/* Copyright (C) 1992, 2000 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include <sys/types.h> +#include <sys/stat.h> + +#ifdef HAVE_CC_OSFCN_H +#include <osfcn.h> +#else +#include <fcntl.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#endif + +#ifndef S_IRUSR +#define S_IRUSR 0400 +#endif + +#ifndef S_IRGRP +#define S_IRGRP 0040 +#endif + +#ifndef S_IROTH +#define S_IROTH 0004 +#endif + +#ifndef S_ISREG +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#endif + +#ifndef O_RDONLY +#define O_RDONLY 0 +#endif diff --git a/contrib/groff/src/include/printer.h b/contrib/groff/src/include/printer.h new file mode 100644 index 000000000000..beae4d9ab915 --- /dev/null +++ b/contrib/groff/src/include/printer.h @@ -0,0 +1,77 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +struct environment { + int fontno; + int size; + int hpos; + int vpos; + int height; + int slant; +}; + +struct font; + +struct font_pointer_list { + font *p; + font_pointer_list *next; + + font_pointer_list(font *, font_pointer_list *); +}; + +class printer { +public: + printer(); + virtual ~printer(); + void load_font(int i, const char *name); + void set_ascii_char(unsigned char c, const environment *env, + int *widthp = 0); + void set_special_char(const char *nm, const environment *env, + int *widthp = 0); + void set_numbered_char(int n, const environment *env, int *widthp = 0); + int set_char_and_width(const char *nm, const environment *env, + int *widthp, font **f); + font *get_font_from_index(int fontno); + virtual void draw(int code, int *p, int np, const environment *env); + virtual void begin_page(int) = 0; + virtual void end_page(int page_length) = 0; + virtual font *make_font(const char *nm); + virtual void end_of_line(); + virtual void special(char *arg, const environment *env, char type = 'p'); + static int adjust_arc_center(const int *, double *); +protected: + font_pointer_list *font_list; + + // information about named characters + int is_char_named; + int is_named_set; + char named_command; + const char *named_char_s; + int named_char_n; + +private: + font **font_table; + int nfonts; + font *find_font(const char *); + virtual void set_char(int index, font *f, const environment *env, + int w, const char *name) = 0; +}; + +printer *make_printer(); diff --git a/contrib/groff/src/include/ptable.h b/contrib/groff/src/include/ptable.h new file mode 100644 index 000000000000..dc56add0f6c7 --- /dev/null +++ b/contrib/groff/src/include/ptable.h @@ -0,0 +1,168 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include <assert.h> +#include <string.h> + +#ifdef TRADITIONAL_CPP +#define name2(a,b) a/**/b +#else /* not TRADITIONAL_CPP */ +#define name2(a,b) name2x(a,b) +#define name2x(a,b) a ## b +#endif /* not TRADITIONAL_CPP */ + +#define PTABLE(T) name2(T,_ptable) +#define PASSOC(T) name2(T,_passoc) +#define PTABLE_ITERATOR(T) name2(T,_ptable_iterator) + +extern unsigned next_ptable_size(unsigned); +extern unsigned long hash_string(const char *); + +#define declare_ptable(T) \ + \ +struct PASSOC(T) { \ + char *key; \ + T *val; \ + PASSOC(T)(); \ +}; \ + \ +struct PTABLE(T); \ + \ +class PTABLE_ITERATOR(T) { \ + PTABLE(T) *p; \ + unsigned i; \ +public: \ + PTABLE_ITERATOR(T)(PTABLE(T) *); \ + int next(const char **, T **); \ +}; \ + \ +class PTABLE(T) { \ + PASSOC(T) *v; \ + unsigned size; \ + unsigned used; \ + enum { FULL_NUM = 2, FULL_DEN = 3, INITIAL_SIZE = 17 }; \ +public: \ + PTABLE(T)(); \ + ~PTABLE(T)(); \ + void define(const char *, T *); \ + T *lookup(const char *); \ + friend class PTABLE_ITERATOR(T); \ +}; + + +#define implement_ptable(T) \ + \ +PASSOC(T)::PASSOC(T)() \ +: key(0), val(0) \ +{ \ +} \ + \ +PTABLE(T)::PTABLE(T)() \ +{ \ + v = new PASSOC(T)[size = INITIAL_SIZE]; \ + used = 0; \ +} \ + \ +PTABLE(T)::~PTABLE(T)() \ +{ \ + for (unsigned i = 0; i < size; i++) { \ + a_delete v[i].key; \ + delete v[i].val; \ + } \ + a_delete v; \ +} \ + \ +void PTABLE(T)::define(const char *key, T *val) \ +{ \ + assert(key != 0); \ + unsigned long h = hash_string(key); \ + unsigned n; \ + for (n = unsigned(h % size); \ + v[n].key != 0; \ + n = (n == 0 ? size - 1 : n - 1)) \ + if (strcmp(v[n].key, key) == 0) { \ + delete v[n].val; \ + v[n].val = val; \ + return; \ + } \ + if (val == 0) \ + return; \ + if (used*FULL_DEN >= size*FULL_NUM) { \ + PASSOC(T) *oldv = v; \ + unsigned old_size = size; \ + size = next_ptable_size(size); \ + v = new PASSOC(T)[size]; \ + for (unsigned i = 0; i < old_size; i++) \ + if (oldv[i].key != 0) { \ + if (oldv[i].val == 0) \ + a_delete oldv[i].key; \ + else { \ + unsigned j; \ + for (j = unsigned(hash_string(oldv[i].key) % size); \ + v[j].key != 0; \ + j = (j == 0 ? size - 1 : j - 1)) \ + ; \ + v[j].key = oldv[i].key; \ + v[j].val = oldv[i].val; \ + } \ + } \ + for (n = unsigned(h % size); \ + v[n].key != 0; \ + n = (n == 0 ? size - 1 : n - 1)) \ + ; \ + a_delete oldv; \ + } \ + char *temp = new char[strlen(key)+1]; \ + strcpy(temp, key); \ + v[n].key = temp; \ + v[n].val = val; \ + used++; \ +} \ + \ +T *PTABLE(T)::lookup(const char *key) \ +{ \ + assert(key != 0); \ + for (unsigned n = unsigned(hash_string(key) % size); \ + v[n].key != 0; \ + n = (n == 0 ? size - 1 : n - 1)) \ + if (strcmp(v[n].key, key) == 0) \ + return v[n].val; \ + return 0; \ +} \ + \ +PTABLE_ITERATOR(T)::PTABLE_ITERATOR(T)(PTABLE(T) *t) \ +: p(t), i(0) \ +{ \ +} \ + \ +int PTABLE_ITERATOR(T)::next(const char **keyp, T **valp) \ +{ \ + unsigned size = p->size; \ + PASSOC(T) *v = p->v; \ + for (; i < size; i++) \ + if (v[i].key != 0) { \ + *keyp = v[i].key; \ + *valp = v[i].val; \ + i++; \ + return 1; \ + } \ + return 0; \ +} + diff --git a/contrib/groff/src/include/refid.h b/contrib/groff/src/include/refid.h new file mode 100644 index 000000000000..605427e9af9b --- /dev/null +++ b/contrib/groff/src/include/refid.h @@ -0,0 +1,35 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +class reference_id { + int filename_id; + int pos; +public: + reference_id() : filename_id(-1) { } + reference_id(int fid, int off) : filename_id(fid), pos(off) { } + unsigned hash() const { return (filename_id << 4) + pos; } + int is_null() const { return filename_id < 0; } + friend inline int operator==(const reference_id &, const reference_id &); +}; + +inline int operator==(const reference_id &r1, const reference_id &r2) +{ + return r1.filename_id == r2.filename_id && r1.pos == r2.pos; +} diff --git a/contrib/groff/src/include/search.h b/contrib/groff/src/include/search.h new file mode 100644 index 000000000000..260410e2372b --- /dev/null +++ b/contrib/groff/src/include/search.h @@ -0,0 +1,96 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +struct search_item; +struct search_item_iterator; + +class search_list { +public: + search_list(); + ~search_list(); + void add_file(const char *fn, int silent = 0); + int nfiles() const; +private: + search_item *list; + int niterators; + int next_fid; + friend class search_list_iterator; +}; + +struct bmpattern; + +class linear_searcher { + const char *ignore_fields; + int truncate_len; + bmpattern **keys; + int nkeys; + const char *search_and_check(const bmpattern *key, const char *buf, + const char *bufend, const char **start = 0) + const; + int check_match(const char *buf, const char *bufend, const char *match, + int matchlen, const char **cont, const char **start) + const; +public: + linear_searcher(const char *query, int query_len, + const char *ign, int trunc); + ~linear_searcher(); + int search(const char *buf, const char *bufend, + const char **startp, int *lengthp) const; +}; + +class search_list_iterator { + search_list *list; + search_item *ptr; + search_item_iterator *iter; + char *query; + linear_searcher searcher; +public: + search_list_iterator(search_list *, const char *query); + ~search_list_iterator(); + int next(const char **, int *, reference_id * = 0); +}; + +class search_item { +protected: + char *name; + int filename_id; +public: + search_item *next; + search_item(const char *nm, int fid); + virtual search_item_iterator *make_search_item_iterator(const char *) = 0; + virtual ~search_item(); + int is_named(const char *) const; + virtual int next_filename_id() const; +}; + +class search_item_iterator { + char shut_g_plus_plus_up; +public: + virtual ~search_item_iterator(); + virtual int next(const linear_searcher &, const char **ptr, int *lenp, + reference_id *) = 0; +}; + +search_item *make_index_search_item(const char *filename, int fid); +search_item *make_linear_search_item(int fd, const char *filename, int fid); + +extern int linear_truncate_len; +extern const char *linear_ignore_fields; +extern int verify_flag; diff --git a/contrib/groff/src/include/searchpath.h b/contrib/groff/src/include/searchpath.h new file mode 100644 index 000000000000..4d89a8d04f1d --- /dev/null +++ b/contrib/groff/src/include/searchpath.h @@ -0,0 +1,30 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +class search_path { + char *dirs; + unsigned init_len; +public: + search_path(const char *envvar, const char *standard, + int add_home, int add_current); + ~search_path(); + void command_line_dir(const char *); + FILE *open_file(const char *, char **); +}; diff --git a/contrib/groff/src/include/stringclass.h b/contrib/groff/src/include/stringclass.h new file mode 100644 index 000000000000..be3a044fb0b0 --- /dev/null +++ b/contrib/groff/src/include/stringclass.h @@ -0,0 +1,195 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with groff; see the file COPYING. If not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include <string.h> +#include <stdio.h> +#include <assert.h> + +// Ensure that the first declaration of functions that are later +// declared as inline declares them as inline. + +class string; + +inline string operator+(const string &, const string &); +inline string operator+(const string &, const char *); +inline string operator+(const char *, const string &); +inline string operator+(const string &, char); +inline string operator+(char, const string &); +inline int operator==(const string &, const string &); +inline int operator!=(const string &, const string &); + +class string { +public: + string(); + string(const string &); + string(const char *); + string(const char *, int); + string(char); + + ~string(); + + string &operator=(const string &); + string &operator=(const char *); + string &operator=(char); + + string &operator+=(const string &); + string &operator+=(const char *); + string &operator+=(char); + void append(const char *, int); + + int length() const; + int empty() const; + int operator*() const; + + string substring(int i, int n) const; + + char &operator[](int); + char operator[](int) const; + + void set_length(int i); + const char *contents() const; + int search(char) const; + char *extract() const; + void clear(); + void move(string &); + + friend string operator+(const string &, const string &); + friend string operator+(const string &, const char *); + friend string operator+(const char *, const string &); + friend string operator+(const string &, char); + friend string operator+(char, const string &); + + friend int operator==(const string &, const string &); + friend int operator!=(const string &, const string &); + friend int operator<=(const string &, const string &); + friend int operator<(const string &, const string &); + friend int operator>=(const string &, const string &); + friend int operator>(const string &, const string &); + +private: + char *ptr; + int len; + int sz; + + string(const char *, int, const char *, int); // for use by operator+ + void grow1(); +}; + + +inline char &string::operator[](int i) +{ + assert(i >= 0 && i < len); + return ptr[i]; +} + +inline char string::operator[](int i) const +{ + assert(i >= 0 && i < len); + return ptr[i]; +} + +inline int string::length() const +{ + return len; +} + +inline int string::empty() const +{ + return len == 0; +} + +inline int string::operator*() const +{ + return len; +} + +inline const char *string::contents() const +{ + return ptr; +} + +inline string operator+(const string &s1, const string &s2) +{ + return string(s1.ptr, s1.len, s2.ptr, s2.len); +} + +inline string operator+(const string &s1, const char *s2) +{ +#ifdef __GNUG__ + if (s2 == 0) + return s1; + else + return string(s1.ptr, s1.len, s2, strlen(s2)); +#else + return s2 == 0 ? s1 : string(s1.ptr, s1.len, s2, strlen(s2)); +#endif +} + +inline string operator+(const char *s1, const string &s2) +{ +#ifdef __GNUG__ + if (s1 == 0) + return s2; + else + return string(s1, strlen(s1), s2.ptr, s2.len); +#else + return s1 == 0 ? s2 : string(s1, strlen(s1), s2.ptr, s2.len); +#endif +} + +inline string operator+(const string &s, char c) +{ + return string(s.ptr, s.len, &c, 1); +} + +inline string operator+(char c, const string &s) +{ + return string(&c, 1, s.ptr, s.len); +} + +inline int operator==(const string &s1, const string &s2) +{ + return (s1.len == s2.len + && (s1.len == 0 || memcmp(s1.ptr, s2.ptr, s1.len) == 0)); +} + +inline int operator!=(const string &s1, const string &s2) +{ + return (s1.len != s2.len + || (s1.len != 0 && memcmp(s1.ptr, s2.ptr, s1.len) != 0)); +} + +inline string string::substring(int i, int n) const +{ + assert(i >= 0 && i + n <= len); + return string(ptr + i, n); +} + +inline string &string::operator+=(char c) +{ + if (len >= sz) + grow1(); + ptr[len++] = c; + return *this; +} + +void put_string(const string &, FILE *); + +string as_string(int); |