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

📄 table.cc

📁 早期freebsd实现
💻 CC
📖 第 1 页 / 共 5 页
字号:
  print_contents();  prints("\002");}void right_text_entry::add_tab(){  printfs(" \\n[%1]u", column_end_reg(end_col));}center_text_entry::center_text_entry(char *s, const entry_modifier *m): simple_text_entry(s, m){}void center_text_entry::simple_print(int){  printfs("\\h'|\\n[%1]u'", column_start_reg(start_col));  prints("\002\003");  print_contents();  prints("\003\002");}void center_text_entry::add_tab(){  printfs(" \\n[%1]u", column_end_reg(end_col));}numeric_text_entry::numeric_text_entry(char *s, const entry_modifier *m, int pos): text_entry(s, m), dot_pos(pos){}void numeric_text_entry::do_width(){  if (dot_pos != 0) {    set_location();    printfs(".nr %1 0\\w" DELIMITER_CHAR,	    block_width_reg(start_row, start_col));    set_inline_modifier(mod);    for (int i = 0; i < dot_pos; i++)      prints(contents[i]);    restore_inline_modifier(mod);    prints(DELIMITER_CHAR "\n");    printfs(".nr %1 \\n[%1]>?\\n[%2]\n",	    span_left_numeric_width_reg(start_col, end_col),	    block_width_reg(start_row, start_col));  }  else    printfs(".nr %1 0\n", block_width_reg(start_row, start_col));  if (contents[dot_pos] != '\0') {    set_location();    printfs(".nr %1 \\n[%1]>?\\w" DELIMITER_CHAR,	    span_right_numeric_width_reg(start_col, end_col));    set_inline_modifier(mod);    prints(contents + dot_pos);    restore_inline_modifier(mod);    prints(DELIMITER_CHAR "\n");  }}void numeric_text_entry::simple_print(int){  printfs("\\h'|(\\n[%1]u-\\n[%2]u-\\n[%3]u/2u+\\n[%2]u+\\n[%4]u-\\n[%5]u)'",	  span_width_reg(start_col, end_col),	  span_left_numeric_width_reg(start_col, end_col),	  span_right_numeric_width_reg(start_col, end_col),	  column_start_reg(start_col),	  block_width_reg(start_row, start_col));  print_contents();}alphabetic_text_entry::alphabetic_text_entry(char *s, const entry_modifier *m): text_entry(s, m){}void alphabetic_text_entry::do_width(){  set_location();  printfs(".nr %1 \\n[%1]>?\\w" DELIMITER_CHAR,	  span_alphabetic_width_reg(start_col, end_col));  print_contents();  prints(DELIMITER_CHAR "\n");}void alphabetic_text_entry::simple_print(int){  printfs("\\h'|\\n[%1]u'", column_start_reg(start_col));  printfs("\\h'\\n[%1]u-\\n[%2]u/2u'",	  span_width_reg(start_col, end_col),	  span_alphabetic_width_reg(start_col, end_col));  print_contents();}// The only point of this is to make `\a' ``work'' as in Unix tbl.  Grrr.void alphabetic_text_entry::add_tab(){  printfs(" \\n[%1]u", column_end_reg(end_col));}block_entry::block_entry(char *s, const entry_modifier *m): table_entry(m), contents(s){}block_entry::~block_entry(){  a_delete contents;}void block_entry::position_vertically(){  if (start_row != end_row)    switch(mod->vertical_alignment) {    case entry_modifier::TOP:      printfs(".sp |\\n[%1]u\n", row_start_reg(start_row));      break;    case entry_modifier::CENTER:      // Peform the motion in two stages so that the center is rounded      // vertically upwards even if net vertical motion is upwards.      printfs(".sp |\\n[%1]u\n", row_start_reg(start_row));      printfs(".sp \\n[" BOTTOM_REG "]u-\\n[%1]u-\\n[%2]u/2u\n", 	      row_start_reg(start_row),	      block_height_reg(start_row, start_col));      break;    case entry_modifier::BOTTOM:      printfs(".sp |\\n[%1]u+\\n[" BOTTOM_REG "]u-\\n[%1]u-\\n[%2]u\n", 	      row_start_reg(start_row),	      block_height_reg(start_row, start_col));      break;    default:      assert(0);    }  if (mod->stagger)    prints(".sp -.5v\n");}int block_entry::divert(int ncols, const string *mw, int *sep){  do_divert(0, ncols, mw, sep);  return 1;}void block_entry::do_divert(int alphabetic, int ncols, const string *mw,			    int *sep){  printfs(".di %1\n", block_diversion_name(start_row, start_col));  prints(".if \\n[" SAVED_FILL_REG "] .fi\n"	 ".in 0\n");  prints(".ll ");  for (int i = start_col; i <= end_col; i++)    if (mw[i].empty())      break;  if (i > end_col) {    // Every column spanned by this entry has a minimum width.    for (int i = start_col; i <= end_col; i++) {      if (i > start_col) {	if (sep)	  printfs("+%1n", as_string(sep[i - 1]));	prints('+');      }      printfs("(n;%1)", mw[i]);    }    printfs(">?\\n[%1]u", span_width_reg(start_col, end_col));  }  else    printfs("(u;\\n[%1]>?(\\n[.l]*%2/%3))", 	    span_width_reg(start_col, end_col), 	    as_string(end_col - start_col + 1),	    as_string(ncols + 1));  if (alphabetic)    prints("-2n");  prints("\n");  set_modifier(mod);  prints(".cp \\n(" COMPATIBLE_REG "\n");  set_location();  prints(contents);  prints(".br\n.di\n.cp 0\n");  if (!mod->zero_width) {    if (alphabetic) {      printfs(".nr %1 \\n[%1]>?(\\n[dl]+2n)\n",	      span_width_reg(start_col, end_col));      printfs(".nr %1 \\n[%1]>?\\n[dl]\n",	      span_alphabetic_width_reg(start_col, end_col));    }    else      printfs(".nr %1 \\n[%1]>?\\n[dl]\n", span_width_reg(start_col, end_col));  }  printfs(".nr %1 \\n[dn]\n", block_height_reg(start_row, start_col));  printfs(".nr %1 \\n[dl]\n", block_width_reg(start_row, start_col));  prints("." RESET_MACRO_NAME "\n"	 ".in \\n[" SAVED_INDENT_REG "]u\n"	 ".nf\n");  // the block might have contained .lf commands  location_force_filename = 1;}void block_entry::do_width(){  // do nothing; the action happens in divert}void block_entry::do_depth(){  printfs(".nr " BOTTOM_REG " \\n[" BOTTOM_REG "]>?(\\n[%1]+\\n[%2])\n",	  row_start_reg(start_row),	  block_height_reg(start_row, start_col));}left_block_entry::left_block_entry(char *s, const entry_modifier *m): block_entry(s, m){}void left_block_entry::print(){  printfs(".in +\\n[%1]u\n", column_start_reg(start_col));  printfs(".%1\n", block_diversion_name(start_row, start_col));  prints(".in\n");}right_block_entry::right_block_entry(char *s, const entry_modifier *m): block_entry(s, m){}void right_block_entry::print(){  printfs(".in +\\n[%1]u+\\n[%2]u-\\n[%3]u\n",	  column_start_reg(start_col),	  span_width_reg(start_col, end_col),	  block_width_reg(start_row, start_col));  printfs(".%1\n", block_diversion_name(start_row, start_col));  prints(".in\n");}center_block_entry::center_block_entry(char *s, const entry_modifier *m): block_entry(s, m){}void center_block_entry::print(){  printfs(".in +\\n[%1]u+(\\n[%2]u-\\n[%3]u/2u)\n",	  column_start_reg(start_col),	  span_width_reg(start_col, end_col),	  block_width_reg(start_row, start_col));  printfs(".%1\n", block_diversion_name(start_row, start_col));  prints(".in\n");}alphabetic_block_entry::alphabetic_block_entry(char *s,					       const entry_modifier *m): block_entry(s, m){}int alphabetic_block_entry::divert(int ncols, const string *mw, int *sep){  do_divert(1, ncols, mw, sep);  return 1;}void alphabetic_block_entry::print(){  printfs(".in +\\n[%1]u+(\\n[%2]u-\\n[%3]u/2u)\n",	  column_start_reg(start_col),	  span_width_reg(start_col, end_col),	  span_alphabetic_width_reg(start_col, end_col));  printfs(".%1\n", block_diversion_name(start_row, start_col));  prints(".in\n");}line_entry::line_entry(const entry_modifier *m): simple_entry(m), double_vrule_on_right(0), double_vrule_on_left(0){}void line_entry::note_double_vrule_on_right(int is_corner){  double_vrule_on_right = is_corner ? 1 : 2;}void line_entry::note_double_vrule_on_left(int is_corner){  double_vrule_on_left = is_corner ? 1 : 2;}single_line_entry::single_line_entry(const entry_modifier *m): line_entry(m){}int single_line_entry::line_type(){  return 1;}void single_line_entry::simple_print(int dont_move){  printfs("\\h'|\\n[%1]u",	  column_divide_reg(start_col));  if (double_vrule_on_left) {    prints(double_vrule_on_left == 1 ? "-" : "+");    prints(HALF_DOUBLE_LINE_SEP);  }  prints("'");  if (!dont_move)    prints("\\v'-" BAR_HEIGHT "'");  printfs("\\s[\\n[" LINESIZE_REG "]]" "\\D'l |\\n[%1]u",	  column_divide_reg(end_col+1));  if (double_vrule_on_right) {    prints(double_vrule_on_left == 1 ? "+" : "-");    prints(HALF_DOUBLE_LINE_SEP);  }  prints("0'\\s0");  if (!dont_move)    prints("\\v'" BAR_HEIGHT "'");}  single_line_entry *single_line_entry::to_single_line_entry(){  return this;}double_line_entry::double_line_entry(const entry_modifier *m): line_entry(m){}int double_line_entry::line_type(){  return 2;}void double_line_entry::simple_print(int dont_move){  if (!dont_move)    prints("\\v'-" BAR_HEIGHT "'");  printfs("\\h'|\\n[%1]u",	  column_divide_reg(start_col));  if (double_vrule_on_left) {    prints(double_vrule_on_left == 1 ? "-" : "+");    prints(HALF_DOUBLE_LINE_SEP);  }  prints("'");  printfs("\\v'-" HALF_DOUBLE_LINE_SEP "'"	  "\\s[\\n[" LINESIZE_REG "]]"	  "\\D'l |\\n[%1]u",	  column_divide_reg(end_col+1));  if (double_vrule_on_right)    prints("-" HALF_DOUBLE_LINE_SEP);  prints(" 0'");  printfs("\\v'" DOUBLE_LINE_SEP "'"	  "\\D'l |\\n[%1]u",	  column_divide_reg(start_col));  if (double_vrule_on_right) {    prints(double_vrule_on_left == 1 ? "+" : "-");    prints(HALF_DOUBLE_LINE_SEP);  }  prints(" 0'");  prints("\\s0"	 "\\v'-" HALF_DOUBLE_LINE_SEP "'");  if (!dont_move)    prints("\\v'" BAR_HEIGHT "'");}double_line_entry *double_line_entry::to_double_line_entry(){  return this;}short_line_entry::short_line_entry(const entry_modifier *m): simple_entry(m){}int short_line_entry::line_type(){  return 1;}void short_line_entry::simple_print(int dont_move){  if (mod->stagger)    prints("\\v'-.5v'");  if (!dont_move)    prints("\\v'-" BAR_HEIGHT "'");  printfs("\\h'|\\n[%1]u'", column_start_reg(start_col));  printfs("\\s[\\n[" LINESIZE_REG "]]"	  "\\D'l \\n[%1]u 0'"	  "\\s0",	  span_width_reg(start_col, end_col));  if (!dont_move)    prints("\\v'" BAR_HEIGHT "'");  if (mod->stagger)    prints("\\v'.5v'");}short_double_line_entry::short_double_line_entry(const entry_modifier *m): simple_entry(m){}int short_double_line_entry::line_type(){  return 2;}void short_double_line_entry::simple_print(int dont_move){  if (mod->stagger)    prints("\\v'-.5v'");  if (!dont_move)    prints("\\v'-" BAR_HEIGHT "'");  printfs("\\h'|\\n[%2]u'"	  "\\v'-" HALF_DOUBLE_LINE_SEP "'"	  "\\s[\\n[" LINESIZE_REG "]]"	  "\\D'l \\n[%1]u 0'"	  "\\v'" DOUBLE_LINE_SEP "'"	  "\\D'l |\\n[%2]u 0'"	  "\\s0"	  "\\v'-" HALF_DOUBLE_LINE_SEP "'",	  span_width_reg(start_col, end_col),	  column_start_reg(start_col));  if (!dont_move)    prints("\\v'" BAR_HEIGHT "'");  if (mod->stagger)    prints("\\v'.5v'");}void set_modifier(const entry_modifier *m){  if (!m->font.empty())    printfs(".ft %1\n", m->font);  if (m->point_size.val != 0) {    prints(".ps ");    if (m->point_size.inc > 0)      prints('+');    else if (m->point_size.inc < 0)      prints('-');    printfs("%1\n", as_string(m->point_size.val));  }  if (m->vertical_spacing.val != 0) {    prints(".vs ");    if (m->vertical_spacing.inc > 0)      prints('+');    else if (m->vertical_spacing.inc < 0)      prints('-');    printfs("%1\n", as_string(m->vertical_spacing.val));  }}void set_inline_modifier(const entry_modifier *m){  if (!m->font.empty())    printfs("\\f[%1]", m->font);  if (m->point_size.val != 0) {    prints("\\s[");    if (m->point_size.inc > 0)      prints('+');    else if (m->point_size.inc < 0)      prints('-');    printfs("%1]", as_string(m->point_size.val));  }  if (m->stagger)    prints("\\v'-.5v'");}void restore_inline_modifier(const entry_modifier *m){  if (!m->font.empty())    prints("\\f[\\n[" SAVED_FONT_REG "]]");  if (m->point_size.val != 0)    prints("\\s[\\n[" SAVED_SIZE_REG "]]");  if (m->stagger)    prints("\\v'.5v'");}struct stuff {  stuff *next;  int row;			// occurs before row `row'  char printed;			// has it been printed?  stuff(int);  virtual void print(table *) = 0;  virtual ~stuff();  virtual int is_single_line() { return 0; };  virtual int is_double_line() { return 0; };};stuff::stuff(int r) : row(r), next(0), printed(0){}stuff::~stuff(){}struct text_stuff : stuff {  string contents;  const char *filename;  int lineno;  text_stuff(const string &, int r, const char *fn, int ln);  ~text_stuff();  void print(table *);};

⌨️ 快捷键说明

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