static void compute_spadsrc_extent(TextNode *node) { /* * From now on if there is an example which will take over a line, then * it will start and end with a newline */ /*int store_x = text_x;*/ /*int store_y = text_y;*/ /*int lh = present_line_height;*/ in_fricas_command = 1; push_spad_group(); if (gInLine) { start_newline(present_line_height, node); text_x = indent; } node->x = text_x; node->y = text_y; spad_node = node; }
static void compute_spadcommand_extent(TextNode *node) { /* * From now on if there is an example which will take over a line, then * it will start and end with a newline */ /*int height;*/ int t_width; /*int store_x = text_x;*/ /*int store_y = text_y;*/ /*int lh = present_line_height;*/ in_fricas_command = 1; push_spad_group(); /* Check to see if we should space in front of myself */ if (gInLine && node->space) text_x += inter_word_space; t_width = text_width(node->next, Endspadcommand); if (gInLine && ((text_x + t_width) > right_margin)) { start_newline(present_line_height, node); text_x = indent; } node->x = text_x; node->y = text_y; spad_node = node; }
static void show_spadcommand(TextNode *node) { XWindowChanges wc; gInAxiomCommand = 1; push_spad_group(); wc.x = node->x; if (node->type == Spadsrc) wc.y = node->y + gRegionOffset + y_off - 2 * node->height; else wc.y = node->y + gRegionOffset + y_off - node->height; wc.height = node->height; wc.width = node->width; #ifdef DEBUG fprintf(stderr, "Spadcommand configured %d x %d -- (%d, %d)\n", wc.width, wc.height, wc.x, wc.y); #endif XConfigureWindow(gXDisplay, node->link->win, CWX | CWY | CWHeight | CWWidth, &wc); XMapWindow(gXDisplay, node->link->win); }
int text_width(TextNode * node, int Ender) { int twidth = 0, num_words; for (num_words = 0; node != NULL; num_words++, node = node->next) { if (Ender == Endtokens) { if (node->type == Endtokens) return twidth; } else if (node->type == Ender) return twidth; switch (node->type) { case Macro: case Pound: if (node->space && gInLine) twidth += inter_word_space; break; case Punctuation: twidth += punctuation_width(node); break; case Dash: if (gInLine && node->space) twidth += inter_word_space; twidth += width_of_dash(node); break; case Verbatim: case Spadsrctxt: twidth += verbatim_width(node); break; case Lsquarebrace: case Rsquarebrace: case Word: twidth += word_width(node); break; case Box: twidth += 2 * box_space; break; case Link: case Downlink: case Memolink: case Windowlink: case LispMemoLink: case Lispwindowlink: case Lisplink: case Unixlink: case Spadcall: case Spadcallquit: case Qspadcall: case Qspadcallquit: case LispDownLink: case Lispcommand: case Lispcommandquit: case Spadlink: case Spaddownlink: case Spadmemolink: case Unixcommand: case Upbutton: case Returnbutton: case Description: push_active_group(); break; case Endbutton: case Endspadcommand: case Enddescription: pop_group_stack(); break; case Endlink: pop_group_stack(); break; case Inputstring: twidth += input_string_width(node); break; case SimpleBox: case Radiobox: twidth += node->width + ((node->space) ? inter_word_space : 0); break; case Spadcommand: case Spadgraph: push_spad_group(); break; case VSpace: break; case HSpace: twidth += (node->data.node != NULL ? atoi(node->data.node->data.text) : 1); break; case Space: twidth += (gTopOfGroupStack->cur_font->max_bounds.width) * (node->data.node != NULL ? atoi(node->data.node->data.text) : 1); break; case Tab: twidth = (gTopOfGroupStack->cur_font->max_bounds.width) * (node->data.node != NULL ? atoi(node->data.node->data.text) : 1); break; case Table: twidth = gWindow->width - left_margin - right_margin_space; break; case Tableitem: case Group: twidth += (node->space) ? inter_word_space : 0; push_group_stack(); break; case BoldFace: if (node->space) twidth += inter_word_space; bf_top_group(); break; case Emphasize: if (node->space) twidth += inter_word_space; if (gTopOfGroupStack->cur_font == gRmFont) em_top_group(); else rm_top_group(); break; case It: if (node->space) twidth += inter_word_space; em_top_group(); break; case Rm: case Sl: case Tt: if (node->space) twidth += inter_word_space; rm_top_group(); break; case Endgroup: pop_group_stack(); break; case Controlbitmap: case Inputbitmap: if (node->width == -1) insert_bitmap_file(node); twidth += node->width; break; case Inputpixmap: if (node->width == -1) insert_pixmap_file(node); twidth += node->width; break; case Mbox: case Indent: case Endmacro: case Free: case Bound: case Beep: case Item: case Titem: case Beginitems: case Noop: case Endinputbox: case Fi: case Ifcond: case Endif: case Begintitems: case Enditems: case Endtitems: case Endtableitem: case Endtable: case Endparameter: case Endbox: case Endheader: case Endfooter: case Endscrolling: case Endverbatim: case Endspadsrc: break; case Newline: /* WOw, I guess I should ertunr a really big number */ twidth += gWindow->width; break; default: /* * fprintf(stderr, "Unknown nodetype %d in text_width\n", * node->type); */ break; } } return twidth; }