1 #ifndef EL__DOCUMENT_OPTIONS_H 2 #define EL__DOCUMENT_OPTIONS_H 3 4 #include "terminal/color.h" 5 #include "util/color.h" 6 #include "util/box.h" 7 8 struct session; 9 10 /* Active link coloring options */ 11 struct active_link_options { 12 unsigned int color:1; 13 unsigned int underline:1; 14 unsigned int bold:1; 15 unsigned int invert:1; 16 color_T fg; 17 color_T bg; 18 }; 19 20 /* This mostly acts as a option cache so rendering will be faster. However it 21 * is also used to validate and invalidate documents in the format cache as to 22 * whether they satisfy the current state of the document options. */ 23 struct document_options { 24 enum color_mode color_mode; 25 /* cp is the codepage for which the document is being formatted; 26 * typically it is the codepage of a terminal. It is set in 27 * render_document_frames. */ 28 int cp, assume_cp, hard_assume; 29 int margin; 30 int num_links_key; 31 int use_document_colors; 32 int meta_link_display; 33 int default_form_input_size; 34 35 /* The default (fallback) colors. */ 36 color_T default_fg; 37 color_T default_bg; 38 color_T default_link; 39 color_T default_vlink; 40 #ifdef CONFIG_BOOKMARKS 41 color_T default_bookmark_link; 42 #endif 43 color_T default_image_link; 44 45 /* Color model/optimizations */ 46 enum color_flags color_flags; 47 48 /* XXX: Keep boolean options grouped to save padding */ 49 #ifdef CONFIG_CSS 50 /* CSS stuff */ 51 unsigned int css_enable:1; 52 unsigned int css_import:1; 53 #endif 54 55 /* HTML stuff */ 56 unsigned int tables:1; 57 unsigned int table_order:1; 58 unsigned int frames:1; 59 unsigned int images:1; 60 61 unsigned int display_subs:1; 62 unsigned int display_sups:1; 63 unsigned int underline_links:1; 64 65 unsigned int wrap_nbsp:1; 66 67 /* Plain rendering stuff */ 68 unsigned int plain_display_links:1; 69 unsigned int plain_compress_empty_lines:1; 70 71 /* Link navigation */ 72 unsigned int links_numbering:1; 73 unsigned int use_tabindex:1; 74 75 unsigned int plain:1; 76 unsigned int wrap:1; 77 78 /* XXX: Everything past this comment is specialy handled by compare_opt() */ 79 unsigned char *framename; 80 81 /* The position of the window (box.x and box.y) 82 * 83 * This is not compared at all since it doesn't make any 84 * difference what position the document will fit into a frameset 85 * or so. 86 * 87 * The width of the window (box.width) 88 * 89 * This controls how wide tables can be rendered and so on. It is 90 * thus also to blame for the extra memory consumption when 91 * resizing because all documents has to be rerendered. We only 92 * need to compare it if not @plain. 93 * 94 * The height of the window (box.height) 95 * 96 * Only documents containing textarea or frames uses it and we 97 * only compare it if @needs_height is set. 98 */ 99 struct box box; 100 unsigned int needs_height:1; 101 unsigned int needs_width:1; 102 103 /* Internal flag for rerendering */ 104 unsigned int no_cache:1; 105 unsigned int gradual_rerendering:1; 106 107 /* Active link coloring */ 108 /* This is mostly here to make use of this option cache so link 109 * drawing is faster. --jonas */ 110 struct active_link_options active_link; 111 112 /* Options related with IMG tag */ 113 struct { 114 unsigned char *prefix; 115 unsigned char *suffix; 116 int filename_maxlen; 117 int label_maxlen; 118 int display_style; 119 int tagging; 120 unsigned int show_any_as_links:1; 121 } image_link; 122 }; 123 124 /* Fills the structure with values from the option system. */ 125 void init_document_options(struct document_options *doo); 126 127 /* Free allocated document options. */ 128 void done_document_options(struct document_options *options); 129 130 /* Copies the values of one struct @from to the other @to. 131 * Note that the framename is dynamically allocated. */ 132 void copy_opt(struct document_options *to, struct document_options *from); 133 134 /* Compares comparable values from the two structures according to 135 * the comparable members described in the struct definition. */ 136 int compare_opt(struct document_options *o1, struct document_options *o2); 137 138 #define use_document_fg_colors(o) \ 139 ((o)->color_mode != COLOR_MODE_MONO && (o)->use_document_colors >= 1) 140 141 #define use_document_bg_colors(o) \ 142 ((o)->color_mode != COLOR_MODE_MONO && (o)->use_document_colors == 2) 143 144 /* Increments the numeric value of the option identified by option_name, 145 * resetting it to the minimum value when it is already at the maximum value, 146 * and redraws the document. */ 147 void toggle_document_option(struct session *ses, unsigned char *option_name); 148 149 #endif 150