1
2 /******************************************************************************
3 * MODULE : tree_label.hpp
4 * DESCRIPTION: labels of trees
5 * COPYRIGHT : (C) 1999 Joris van der Hoeven
6 *******************************************************************************
7 * This software falls under the GNU general public license version 3 or later.
8 * It comes WITHOUT ANY WARRANTY WHATSOEVER. For details, see the file LICENSE
9 * in the root directory or <http://www.gnu.org/licenses/gpl-3.0.html>.
10 ******************************************************************************/
11
12 #ifndef TREE_LABEL_H
13 #define TREE_LABEL_H
14 #include "string.hpp"
15
16 /******************************************************************************
17 * Standard tree labels
18 ******************************************************************************/
19
20 enum tree_label {
21 STRING= 0, UNKNOWN, UNINIT, ERROR, RAW_DATA,
22
23 // basic formatting tags
24 DOCUMENT, PARA, SURROUND, CONCAT,
25 RIGID, HIDDEN, FREEZE, UNFREEZE,
26 HSPACE, VAR_VSPACE, VSPACE, SPACE, HTAB,
27 MOVE, SHIFT, RESIZE, CLIPPED,
28 REPEAT, _FLOAT, DATOMS, DLINES, DPAGES, DBOX,
29 LINE_NOTE, PAGE_NOTE,
30
31 // zero-ary formatting directives
32 // modify is_formatting predicate when inserting new tags
33 WITH_LIMITS, LINE_BREAK, NEW_LINE, NEXT_LINE,
34 NO_BREAK, YES_INDENT, NO_INDENT, VAR_YES_INDENT,
35 VAR_NO_INDENT, VAR_PAGE_BREAK, PAGE_BREAK,
36 VAR_NO_PAGE_BREAK, NO_PAGE_BREAK, VAR_NEW_PAGE,
37 NEW_PAGE, VAR_NEW_DPAGE, NEW_DPAGE,
38
39 // mathematics
40 AROUND, VAR_AROUND, BIG_AROUND,
41 LEFT, MID, RIGHT, BIG, LONG_ARROW,
42 LPRIME, RPRIME, BELOW, ABOVE,
43 LSUB, LSUP, RSUB, RSUP,
44 FRAC, SQRT, WIDE, VAR_WIDE, NEG, TREE,
45 SYNTAX,
46
47 // tabular material
48 TFORMAT, TWITH, CWITH, TMARKER,
49 TABLE, ROW, CELL, SUBTABLE,
50
51 // macro language
52 ASSIGN, WITH, PROVIDES, VALUE, QUOTE_VALUE,
53 MACRO, DRD_PROPS, ARG, QUOTE_ARG, COMPOUND,
54 XMACRO, GET_LABEL, GET_ARITY, MAP_ARGS, EVAL_ARGS,
55 MARK, EXPAND_AS,
56 EVAL, QUOTE, QUASI, QUASIQUOTE, UNQUOTE, VAR_UNQUOTE, COPY,
57 IF, VAR_IF, CASE, WHILE, FOR_EACH,
58 EXTERN, VAR_INCLUDE, INCLUDE, USE_PACKAGE, USE_MODULE,
59
60 // computational markup
61 OR, XOR, AND, NOT,
62 PLUS, MINUS, TIMES, OVER, DIV, MOD, MINIMUM, MAXIMUM,
63 MATH_SQRT, EXP, LOG, POW, COS, SIN, TAN,
64 MERGE, LENGTH, RANGE, NUMBER, _DATE, TRANSLATE, CHANGE_CASE,
65 FIND_FILE, FIND_FILE_UPWARDS,
66 IS_TUPLE, LOOK_UP,
67 EQUAL, UNEQUAL, LESS, LESSEQ, GREATER, GREATEREQ,
68 BLEND,
69
70 // built-in length units
71 CM_LENGTH, MM_LENGTH, IN_LENGTH, PT_LENGTH,
72 BP_LENGTH, DD_LENGTH, PC_LENGTH, CC_LENGTH, // standard absolute units
73 FS_LENGTH, FBS_LENGTH, EM_LENGTH,
74 LN_LENGTH, SEP_LENGTH, YFRAC_LENGTH, EX_LENGTH, // font specific
75 FN_LENGTH, FNS_LENGTH, BLS_LENGTH,
76 FNBOT_LENGTH, FNTOP_LENGTH,
77 SPC_LENGTH, XSPC_LENGTH, // font specific & stretchy
78 PAR_LENGTH, PAG_LENGTH, // other
79 GW_LENGTH, GH_LENGTH, GU_LENGTH, // extents & unit of graphics
80 TMPT_LENGTH, PX_LENGTH, // miscellaneous
81 MSEC_LENGTH, SEC_LENGTH, MIN_LENGTH, HR_LENGTH, // durations
82
83 // tags for source tree editing
84 STYLE_WITH, VAR_STYLE_WITH, STYLE_ONLY, VAR_STYLE_ONLY,
85 ACTIVE, VAR_ACTIVE, INACTIVE, VAR_INACTIVE,
86 REWRITE_INACTIVE, INLINE_TAG, OPEN_TAG, MIDDLE_TAG, CLOSE_TAG,
87 SYMBOL, LATEX, HYBRID,
88
89 // linking primitives
90 LOCUS, ID, HARD_ID,
91 LINK, URL, SCRIPT, OBSERVER,
92 FIND_ACCESSIBLE, HLINK, ACTION,
93 SET_BINDING, GET_BINDING, LABEL, REFERENCE, PAGEREF,
94 GET_ATTACHMENT, WRITE, TOC_NOTIFY,
95
96 // various other tags
97 TUPLE, ATTR, TMLEN, COLLECTION, ASSOCIATE, BACKUP, PATTERN, GRADIENT,
98 SPECIFIC, FLAG,
99
100 // animations
101 ANIM_COMPOSE, ANIM_REPEAT, ANIM_CONSTANT,
102 ANIM_TRANSLATE, ANIM_PROGRESSIVE, VIDEO, SOUND,
103
104 // graphical tags
105 GRAPHICS,
106 SUPERPOSE,
107 GR_GROUP, GR_TRANSFORM, GR_EFFECT,
108 TEXT_AT, MATH_AT, _POINT,
109 LINE, CLINE, ARC, CARC, SPLINE, VAR_SPLINE, CSPLINE,
110 FILL, IMAGE,
111 BOX_INFO, FRAME_DIRECT, FRAME_INVERSE,
112 IS_EQUAL, IS_INTERSECTION,
113 ON_CURVE, ON_TEXT_BORDER, ON_GRID,
114 TRANSFORM_3D, OBJECT_3D, TRIANGLE_3D,
115 LIGHT_3D, LIGHT_DIFFUSE, LIGHT_SPECULAR,
116
117 // graphical effects
118 EFF_MOVE, EFF_MAGNIFY, EFF_BUBBLE,
119 EFF_GAUSSIAN, EFF_OVAL, EFF_RECTANGULAR, EFF_MOTION,
120 EFF_BLUR, EFF_OUTLINE, EFF_THICKEN, EFF_ERODE,
121 EFF_SUPERPOSE, EFF_ADD, EFF_SUB, EFF_MUL, EFF_MIN, EFF_MAX, EFF_MIX,
122 EFF_NORMALIZE, EFF_MONOCHROME, EFF_COLOR_MATRIX,
123 EFF_MAKE_TRANSPARENT, EFF_MAKE_OPAQUE,
124
125 // graphical interface markup
126 CANVAS, ORNAMENT,
127
128 // obsolete tags
129 FORMAT, LINE_SEP, SPLIT, DELAY, HOLD, RELEASE,
130 OLD_MATRIX, OLD_TABLE, OLD_MOSAIC, OLD_MOSAIC_ITEM,
131 SET, RESET, EXPAND, VAR_EXPAND, HIDE_EXPAND,
132 APPLY, BEGIN, END, FUNC, ENV,
133 AUTHORIZE, POSTSCRIPT,
134
135 // user extensions
136 START_EXTENSIONS
137 };
138
SUB(bool right)139 inline tree_label SUB (bool right) { return right? RSUB: LSUB; }
SUP(bool right)140 inline tree_label SUP (bool right) { return right? RSUP: LSUP; }
141
142 /******************************************************************************
143 * Conversions from tree_labels to strings and vice versa
144 ******************************************************************************/
145
146 void make_tree_label (tree_label l, string s);
147 tree_label make_tree_label (string s); // for extensions
148 string as_string (tree_label l);
149 tree_label as_tree_label (string s);
150 bool existing_tree_label (string s);
151
152 #ifdef OS_WIN32
operator ==(tree_label first,tree_label second)153 inline bool operator == (tree_label first, tree_label second) {
154 return (int) first == (int) second; }
operator !=(tree_label first,tree_label second)155 inline bool operator != (tree_label first, tree_label second) {
156 return (int) first != (int) second; }
157 #endif
158
159 #endif // defined TREE_LABEL_H
160