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