⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 node.h

📁 早期freebsd实现
💻 H
字号:
// -*- 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 underthe terms of the GNU General Public License as published by the FreeSoftware Foundation; either version 2, or (at your option) any laterversion.groff is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public Licensefor more details.You should have received a copy of the GNU General Public License alongwith groff; see the file COPYING.  If not, write to the Free SoftwareFoundation, 675 Mass Ave, Cambridge, MA 02139, USA. */struct hyphen_list {  unsigned char hyphen;  unsigned char breakable;  unsigned char hyphenation_code;  hyphen_list *next;  hyphen_list(unsigned char code, hyphen_list *p = 0);};void hyphenate(hyphen_list *, unsigned);enum hyphenation_type { HYPHEN_MIDDLE, HYPHEN_BOUNDARY, HYPHEN_INHIBIT };class ascii_output_file;struct breakpoint;struct vertical_size;struct charinfo;class macro;class troff_output_file;class tfont;class environment;class glyph_node;class diverted_space_node;class token_node;struct node {  node *next;  node();  node(node *n);  node *add_char(charinfo *c, environment *, hunits *widthp);  virtual ~node();  virtual node *copy() = 0;  virtual hunits width();  virtual hunits subscript_correction();  virtual hunits italic_correction();  virtual hunits left_italic_correction();  virtual hunits skew();  virtual int nspaces();  virtual int merge_space(hunits);  virtual vunits vertical_width();  virtual node *last_char_node();  virtual void vertical_extent(vunits *min, vunits *max);  virtual int character_type();  virtual void set_vertical_size(vertical_size *);  virtual int ends_sentence();  virtual node *merge_self(node *);  virtual node *add_discretionary_hyphen();  virtual node *add_self(node *, hyphen_list **);  virtual hyphen_list *get_hyphen_list(hyphen_list *s = 0);  virtual void ascii_print(ascii_output_file *);  virtual void asciify(macro *);  virtual int discardable();  virtual void spread_space(int *, hunits *);  virtual void freeze_space();  virtual breakpoint *get_breakpoints(hunits width, int nspaces,				      breakpoint *rest = 0,				      int is_inner = 0);  virtual int nbreaks();  virtual void split(int, node **, node **);  virtual hyphenation_type get_hyphenation_type();  virtual int reread(int *);  virtual token_node *get_token_node();  virtual int overlaps_vertically();  virtual int overlaps_horizontally();  virtual units size();  virtual int interpret(macro *);  virtual node *merge_glyph_node(glyph_node *);  virtual tfont *get_tfont();  virtual void tprint(troff_output_file *);  virtual void zero_width_tprint(troff_output_file *);  node *add_italic_correction(hunits *);  virtual int same(node *) = 0;  virtual const char *type() = 0;};inline node::node() : next(0){}inline node::node(node *n) : next(n){}inline node::~node(){}// 0 means it doesn't, 1 means it does, 2 means it's transparentint node_list_ends_sentence(node *);struct breakpoint {  breakpoint *next;  hunits width;  int nspaces;  node *nd;  int index;  char hyphenated;};class line_start_node : public node {public:  line_start_node() {}  node *copy() { return new line_start_node; }  int same(node *);  const char *type();  void asciify(macro *);};class space_node : public node {private:#if 0  enum { BLOCK = 1024 };  static space_node *free_list;  void operator delete(void *);#endifprotected:  hunits n;  char set;  space_node(hunits, int, node * = 0);public:  space_node(hunits d, node *p = 0);#if 0  ~space_node();  void *operator new(size_t);#endif  node *copy();  int nspaces();  hunits width();  int discardable();  int merge_space(hunits);  void freeze_space();  void spread_space(int*, hunits*);  void tprint(troff_output_file *);  breakpoint *get_breakpoints(hunits width, int nspaces, breakpoint *rest = 0,			      int is_inner = 0);  int nbreaks();  void split(int, node **, node **);  void ascii_print(ascii_output_file *);  int same(node *);  const char *type();};class word_space_node : public space_node {protected:  word_space_node(hunits, int, node * = 0);public:  word_space_node(hunits, node * = 0);  node *copy();  void tprint(troff_output_file *);  int same(node *);  const char *type();};class unbreakable_space_node : public word_space_node {  unbreakable_space_node(hunits, int, node * = 0);public:  unbreakable_space_node(hunits, node * = 0);  node *copy();  int same(node *);  const char *type();  breakpoint *get_breakpoints(hunits width, int nspaces, breakpoint *rest = 0,			      int is_inner = 0);  int nbreaks();  void split(int, node **, node **);  int merge_space(hunits);};class diverted_space_node : public node {public:  vunits n;  diverted_space_node(vunits d, node *p = 0);  node *copy();  int reread(int *);  int same(node *);  const char *type();};class diverted_copy_file_node : public node {  symbol filename;public:  vunits n;  diverted_copy_file_node(symbol s, node *p = 0);  node *copy();  int reread(int *);  int same(node *);  const char *type();};class extra_size_node : public node {  vunits n; public:  extra_size_node(vunits i) : n(i) {}  void set_vertical_size(vertical_size *);  node *copy();  int same(node *);  const char *type();};class vertical_size_node : public node {  vunits n; public:  vertical_size_node(vunits i) : n(i) {}  void set_vertical_size(vertical_size *);  void asciify(macro *);  node *copy();  int same(node *);  const char *type();};class hmotion_node : public node {protected:  hunits n;public:  hmotion_node(hunits i, node *next = 0) : node(next), n(i) {}  node *copy();  void tprint(troff_output_file *);  hunits width();  void ascii_print(ascii_output_file *);  int same(node *);  const char *type();};class space_char_hmotion_node : public hmotion_node {public:  space_char_hmotion_node(hunits i, node *next = 0);  node *copy();  void ascii_print(ascii_output_file *);  void asciify(macro *);  int same(node *);  const char *type();};class vmotion_node : public node {  vunits n; public:  vmotion_node(vunits i) : n(i) {}  void tprint(troff_output_file *);  node *copy();  vunits vertical_width();  int same(node *);  const char *type();};class hline_node : public node {  hunits x;  node *n; public:  hline_node(hunits i, node *c, node *next = 0) : node(next), x(i), n(c) {}  ~hline_node();  node *copy();  hunits width();  void tprint(troff_output_file *);  int same(node *);  const char *type();};class vline_node : public node {  vunits x;  node *n; public:  vline_node(vunits  i, node *c, node *next= 0) : node(next), x(i), n(c) {}  ~vline_node();  node *copy();  void tprint(troff_output_file *);  hunits width();  vunits vertical_width();  void vertical_extent(vunits *, vunits *);  int same(node *);  const char *type();};class dummy_node : public node { public:  dummy_node(node *nd = 0) : node(nd) {}  node *copy();  int same(node *);  const char *type();  hyphenation_type get_hyphenation_type();};class transparent_dummy_node : public node {public:  transparent_dummy_node() {}  node *copy();  int same(node *);  const char *type();  int ends_sentence();  hyphenation_type get_hyphenation_type();};class zero_width_node : public node {  node *n; public:  zero_width_node(node *gn);  ~zero_width_node();  node *copy();  void tprint(troff_output_file *);  int same(node *);  const char *type();  void append(node *);  int character_type();  void vertical_extent(vunits *min, vunits *max);};class left_italic_corrected_node : public node {  node *n;  hunits x;public:  left_italic_corrected_node(node * = 0);  ~left_italic_corrected_node();  void tprint(troff_output_file *);  void ascii_print(ascii_output_file *);  void asciify(macro *);  node *copy();  int same(node *);  const char *type();  hunits width();  node *last_char_node();  void vertical_extent(vunits *, vunits *);  int ends_sentence();  int overlaps_horizontally();  int overlaps_vertically();  hyphenation_type get_hyphenation_type();  tfont *get_tfont();  int character_type();  hunits skew();  hunits italic_correction();  hunits subscript_correction();  hyphen_list *get_hyphen_list(hyphen_list *ss = 0);  node *add_self(node *, hyphen_list **);  node *merge_glyph_node(glyph_node *);};class overstrike_node : public node {  node *list;  hunits max_width;public:  overstrike_node();  ~overstrike_node();  node *copy();  void tprint(troff_output_file *);  void overstrike(node *);	// add another node to be overstruck  hunits width();  int same(node *);  const char *type();};class bracket_node : public node {  node *list;  hunits max_width;public:  bracket_node();  ~bracket_node();  node *copy();  void tprint(troff_output_file *);  void bracket(node *);	// add another node to be overstruck  hunits width();  int same(node *);  const char *type();};class special_node : public node {  macro mac;  void tprint_start(troff_output_file *);  void tprint_char(troff_output_file *, unsigned char);  void tprint_end(troff_output_file *);public:  special_node(const macro &);  node *copy();  void tprint(troff_output_file *);  int same(node *);  const char *type();};struct hvpair {  hunits h;  vunits v;  hvpair();};class draw_node : public node {  int npoints;  font_size sz;  char code;  hvpair *point;public:  draw_node(char, hvpair *, int, font_size);  ~draw_node();  hunits width();  vunits vertical_width();  node *copy();  void tprint(troff_output_file *);  int same(node *);  const char *type();};class charinfo;node *make_node(charinfo *ci, environment *);int character_exists(charinfo *, environment *);int same_node_list(node *n1, node *n2);node *reverse_node_list(node *n);void delete_node_list(node *);node *copy_node_list(node *);int get_bold_fontno(int f);inline hyphen_list::hyphen_list(unsigned char code, hyphen_list *p): hyphenation_code(code), next(p), hyphen(0), breakable(0){}extern void read_desc();extern int mount_font(int n, symbol, symbol = NULL_SYMBOL);extern void mount_style(int n, symbol);extern int is_good_fontno(int n);extern int symbol_fontno(symbol);extern int next_available_font_position();extern void init_size_table(int *);extern int get_underline_fontno();class output_file {  char make_g_plus_plus_shut_up;public:  output_file();  virtual ~output_file();  virtual void trailer(vunits page_length);  virtual void flush() = 0;  virtual void transparent_char(unsigned char) = 0;  virtual void print_line(hunits x, vunits y, node *n,			  vunits before, vunits after) = 0;  virtual void begin_page(int pageno, vunits page_length) = 0;  virtual void copy_file(hunits x, vunits y, const char *filename) = 0;  virtual int is_printing() = 0;#ifdef COLUMN  virtual void vjustify(vunits, symbol);#endif /* COLUMN */};extern char *pipe_command;extern output_file *the_output;extern void init_output();int in_output_page_list(int n);static void invalidate_fontno(int);class font_family {  int *map;  int map_size;public:  const symbol nm;  font_family(symbol);  ~font_family();  make_definite(int);  friend void invalidate_fontno(int);};font_family *lookup_family(symbol);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -