PageRenderTime 39ms CodeModel.GetById 25ms app.highlight 11ms RepoModel.GetById 2ms app.codeStats 0ms

/contrib/groff/src/roff/troff/charinfo.h

https://bitbucket.org/freebsd/freebsd-head/
C++ Header | 214 lines | 167 code | 25 blank | 22 comment | 7 complexity | f4f10be412d558c29d924787bad0994d MD5 | raw file
  1// -*- C++ -*-
  2/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
  3   Free Software Foundation, Inc.
  4     Written by James Clark (jjc@jclark.com)
  5
  6This file is part of groff.
  7
  8groff is free software; you can redistribute it and/or modify it under
  9the terms of the GNU General Public License as published by the Free
 10Software Foundation; either version 2, or (at your option) any later
 11version.
 12
 13groff is distributed in the hope that it will be useful, but WITHOUT ANY
 14WARRANTY; without even the implied warranty of MERCHANTABILITY or
 15FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 16for more details.
 17
 18You should have received a copy of the GNU General Public License along
 19with groff; see the file COPYING.  If not, write to the Free Software
 20Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
 21
 22class macro;
 23
 24class charinfo {
 25  static int next_index;
 26  charinfo *translation;
 27  int index;
 28  int number;
 29  macro *mac;
 30  unsigned char special_translation;
 31  unsigned char hyphenation_code;
 32  unsigned char flags;
 33  unsigned char ascii_code;
 34  unsigned char asciify_code;
 35  char not_found;
 36  char transparent_translate;	// non-zero means translation applies
 37				// to transparent throughput
 38  char translate_input;		// non-zero means that asciify_code is
 39				// active for .asciify (set by .trin)
 40  char_mode mode;
 41public:
 42  enum { 
 43    ENDS_SENTENCE = 1,
 44    BREAK_BEFORE = 2,
 45    BREAK_AFTER = 4,
 46    OVERLAPS_HORIZONTALLY = 8,
 47    OVERLAPS_VERTICALLY = 16,
 48    TRANSPARENT = 32,
 49    NUMBERED = 64
 50  };
 51  enum {
 52    TRANSLATE_NONE,
 53    TRANSLATE_SPACE,
 54    TRANSLATE_DUMMY,
 55    TRANSLATE_STRETCHABLE_SPACE,
 56    TRANSLATE_HYPHEN_INDICATOR
 57  };
 58  symbol nm;
 59  charinfo(symbol s);
 60  int get_index();
 61  int ends_sentence();
 62  int overlaps_vertically();
 63  int overlaps_horizontally();
 64  int can_break_before();
 65  int can_break_after();
 66  int transparent();
 67  unsigned char get_hyphenation_code();
 68  unsigned char get_ascii_code();
 69  unsigned char get_asciify_code();
 70  void set_hyphenation_code(unsigned char);
 71  void set_ascii_code(unsigned char);
 72  void set_asciify_code(unsigned char);
 73  void set_translation_input();
 74  int get_translation_input();
 75  charinfo *get_translation(int = 0);
 76  void set_translation(charinfo *, int, int);
 77  void set_flags(unsigned char);
 78  void set_special_translation(int, int);
 79  int get_special_translation(int = 0);
 80  macro *set_macro(macro *);
 81  macro *setx_macro(macro *, char_mode);
 82  macro *get_macro();
 83  int first_time_not_found();
 84  void set_number(int);
 85  int get_number();
 86  int numbered();
 87  int is_normal();
 88  int is_fallback();
 89  int is_special();
 90  symbol *get_symbol();
 91};
 92
 93charinfo *get_charinfo(symbol);
 94extern charinfo *charset_table[];
 95charinfo *get_charinfo_by_number(int);
 96
 97inline int charinfo::overlaps_horizontally()
 98{
 99  return flags & OVERLAPS_HORIZONTALLY;
100}
101
102inline int charinfo::overlaps_vertically()
103{
104  return flags & OVERLAPS_VERTICALLY;
105}
106
107inline int charinfo::can_break_before()
108{
109  return flags & BREAK_BEFORE;
110}
111
112inline int charinfo::can_break_after()
113{
114  return flags & BREAK_AFTER;
115}
116
117inline int charinfo::ends_sentence()
118{
119  return flags & ENDS_SENTENCE;
120}
121
122inline int charinfo::transparent()
123{
124  return flags & TRANSPARENT;
125}
126
127inline int charinfo::numbered()
128{
129  return flags & NUMBERED;
130}
131
132inline int charinfo::is_normal()
133{
134  return mode == CHAR_NORMAL;
135}
136
137inline int charinfo::is_fallback()
138{
139  return mode == CHAR_FALLBACK;
140}
141
142inline int charinfo::is_special()
143{
144  return mode == CHAR_SPECIAL;
145}
146
147inline charinfo *charinfo::get_translation(int transparent_throughput)
148{
149  return (transparent_throughput && !transparent_translate
150	  ? 0
151	  : translation);
152}
153
154inline unsigned char charinfo::get_hyphenation_code()
155{
156  return hyphenation_code;
157}
158
159inline unsigned char charinfo::get_ascii_code()
160{
161  return ascii_code;
162}
163
164inline unsigned char charinfo::get_asciify_code()
165{
166  return (translate_input ? asciify_code : 0);
167}
168
169inline void charinfo::set_flags(unsigned char c)
170{
171  flags = c;
172}
173
174inline int charinfo::get_index()
175{
176  return index;
177}
178
179inline void charinfo::set_translation_input()
180{
181  translate_input = 1;
182}
183
184inline int charinfo::get_translation_input()
185{
186  return translate_input;
187}
188
189inline int charinfo::get_special_translation(int transparent_throughput)
190{
191  return (transparent_throughput && !transparent_translate
192	  ? int(TRANSLATE_NONE)
193	  : special_translation);
194}
195
196inline macro *charinfo::get_macro()
197{
198  return mac;
199}
200
201inline int charinfo::first_time_not_found()
202{
203  if (not_found)
204    return 0;
205  else {
206    not_found = 1;
207    return 1;
208  }
209}
210
211inline symbol *charinfo::get_symbol()
212{
213  return( &nm );
214}