2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
26 * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc.
27 * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for
28 * the full copyright text.
33 /* $XConsortium: wml.h /main/9 1995/08/29 11:10:33 drk $ */
35 * (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
38 * This file contains the structure and literal definitions required
39 * by the WML processor
54 * Generic object pointer
56 typedef char *ObjectPtr;
60 * True and False for attributes, so setting is explicit
62 #define WmlAttributeUnspecified 0
63 #define WmlAttributeTrue 1
64 #define WmlAttributeFalse 2
67 * Values of character set direction
69 #define WmlCharSetDirectionLtoR 1
70 #define WmlCharSetDirectionRtoL 2
73 * Values of character set character size
75 #define WmlCharSizeOneByte 1
76 #define WmlCharSizeTwoByte 2
77 #define WmlCharSizeMixed1_2Byte 3
81 * Upper case and lower case converters
83 #define _upper(c) ((c) >= 'a' && (c) <= 'z' ? (c) & 0x5F:(c))
84 #define _lower(c) ((c) >= 'A' && (c) <= 'Z' ? (c) | 0x20:(c))
88 * The Uil token classes which are dealt with WML. Matched to definitions
89 * in UilKeyDef.h, although this isn't required.
91 #define WmlTokenClassArgument 1
92 #define WmlTokenClassCharset 2
93 #define WmlTokenClassColor 3
94 #define WmlTokenClassEnumval 4
95 #define WmlTokenClassFont 5
96 #define WmlTokenClassIdentifier 6
97 #define WmlTokenClassKeyword 7
98 #define WmlTokenClassLiteral 8
99 #define WmlTokenClassReason 9
100 #define WmlTokenClassReserved 10
101 #define WmlTokenClassSpecial 11
102 #define WmlTokenClassUnused 12
103 #define WmlTokenClassClass 13
104 #define WmlTokenClassChild 14
109 * Structures for WML objects. Two kinds are created for each object
110 * recognized and built as a WML description is read:
111 * - A syntactic descriptor, which captures the information parse
112 * from the input in pretty much its raw form
113 * - A semantically resolved descriptor, in which pointers to
114 * other descriptors have been resolved, ordering is done,
115 * superclass inheritance is complete, etc.
119 * Syntactic structures. These are constructred during input parse.
124 * A dummy holding only a header. Allows access to the validation field.
128 int validation; /* a unique validation code */
129 ObjectPtr rslvdef; /* the resolved object pointer */
130 } WmlSynDef, *WmlSynDefPtr;
135 * A class resource descriptor. This a subset of a full resource descriptor,
136 * which captures those elements which can be overridden in a class declaration
138 #define WmlClassResDefValid 871253
140 typedef struct WmlSynClassResDefStruct
142 int validation; /* WmlClassResDefValid */
143 struct WmlSynClassResDefStruct
144 *next; /* next descriptor in chain */
145 char *name; /* resource name */
146 char *type; /* override type name */
147 char *dflt; /* override default value */
148 short int exclude; /* WmlAttributeTrue if to be excluded */
149 } WmlSynClassResDef, *WmlSynClassResDefPtr;
152 * A class child descriptor.
154 #define WmlClassChildDefValid 780344
156 typedef struct WmlSynClassChildDefStruct
158 int validation; /* WmlClassChildDefValid */
159 struct WmlSynClassChildDefStruct
160 *next; /* next descriptor in chain */
161 char *name; /* child name */
162 } WmlSynClassChildDef, *WmlSynClassChildDefPtr;
166 * A class controls descriptor. It contains elements which can be added
167 * to a controls reference.
170 #define WmlClassCtrlDefValid 7132320
172 typedef struct WmlSynClassCtrlDefStruct
174 int validation; /* WmlClassCtrlDefValid */
175 struct WmlSynClassCtrlDefStruct
176 *next; /* next descriptor in chain */
177 char *name; /* controlled class name */
178 } WmlSynClassCtrlDef, *WmlSynClassCtrlDefPtr;
182 * A class structure. One exists for each Class statement in a WML
185 #define WmlClassDefValid 93741
187 #define WmlClassTypeMetaclass 1
188 #define WmlClassTypeWidget 2
189 #define WmlClassTypeGadget 3
191 typedef struct WmlSynClassDefStruct
193 int validation; /* WmlClassDefValid */
194 struct WmlClassDefStruct
195 *rslvdef; /* resolved definition */
196 short int type; /* from WmlClassType... */
197 short int dialog; /* TRUE if a dialog class (has
198 window manager decoration, etc) */
199 char *name; /* class name */
200 char *superclass; /* superclass name */
201 char *parentclass; /* parentclass name */
202 char *widgetclass; /* widget class name */
203 char *int_lit; /* internal literal name */
204 char *convfunc; /* convenience function name */
205 char *docname; /* name for docs */
206 char *ctrlmapto; /* resource controls map to */
207 WmlSynClassCtrlDefPtr
208 controls; /* list of controlled classes */
210 resources; /* list of resources from input */
211 WmlSynClassChildDefPtr
212 children; /* list of automatic children */
213 } WmlSynClassDef, *WmlSynClassDefPtr;
217 * A controls list structure. One is created for each ControlsList statement
218 * in a WML description.
220 #define WmlCtrlListDefValid 621298
222 typedef struct WmlSynCtrlListDefStruct
224 int validation; /* WmlCtrlListDefValid */
225 struct WmlCtrlListDefStruct
226 *rslvdef; /* resolved definition */
227 char *name; /* controls list name */
228 WmlSynClassCtrlDefPtr
229 controls; /* list of controlled classes */
230 } WmlSynCtrlListDef, *WmlSynCtrlListDefPtr;
234 * A resource descriptor. One is created for each Resource statement
235 * in a WML description
237 #define WmlResourceDefValid 310538
239 #define WmlResourceTypeArgument 1
240 #define WmlResourceTypeReason 2
241 #define WmlResourceTypeConstraint 3
242 #define WmlResourceTypeSubResource 4
244 typedef struct WmlSynResourceDefStruct
246 int validation; /* WmlResourceDefValid */
247 struct WmlResourceDefStruct
248 *rslvdef; /* resolved definition */
249 short int type; /* from WmlResourceType... */
250 char *name; /* resource name */
251 char *datatype; /* resource data type */
252 char *int_lit; /* internal literal name */
253 char *resliteral; /* resource name literal */
254 char *enumset; /* enumeration set name */
255 char *docname; /* name for docs */
256 char *related; /* names related resource */
257 char *dflt; /* default value */
258 short int xrm_support; /* WmlAttributeTrue if can be
260 short int alias_cnt; /* alias count */
261 char **alias_list; /* vector of aliass */
262 } WmlSynResourceDef, *WmlSynResourceDefPtr;
265 * A child descriptor. One is created for each Child statement
266 * in a WML description
268 #define WmlChildDefValid 229629
270 typedef struct WmlSynChildDefStruct
272 int validation; /* WmlResourceDefValid */
273 struct WmlChildDefStruct
274 *rslvdef; /* resolved definition */
275 char *name; /* child name */
276 char *class; /* child class */
277 } WmlSynChildDef, *WmlSynChildDefPtr;
281 * A datatype descriptor
283 #define WmlDataTypeDefValid 714210
285 typedef struct WmlSynDataTypeDefStruct
287 int validation; /* WmlDataTypeDefValid */
288 struct WmlDataTypeDefStruct
289 *rslvdef; /* resolved definition */
290 char *name; /* data type name */
291 char *int_lit; /* internal literal name */
292 char *docname; /* name for docs */
293 short int xrm_support; /* WmlAttributeTrue if can be
295 } WmlSynDataTypeDef, *WmlSynDataTypeDefPtr;
299 * An enumeration set values descriptor, as it occurs in the list for
300 * an enumeration set descriptor.
302 typedef struct WmlSynEnumSetValDefStruct
304 int validation; /* WmlEnumValueDefValid */
305 struct WmlSynEnumSetValDefStruct
306 *next; /* next descriptor in chain */
307 char *name; /* enumeration value name */
308 } WmlSynEnumSetValDef, *WmlSynEnumSetValDefPtr;
312 * An enumeration set descriptor
314 #define WmlEnumSetDefValid 931184
316 typedef struct WmlSynEnumSetDefStruct
318 int validation; /* WmlEnumSetDefValid */
319 struct WmlEnumSetDefStruct
320 *rslvdef; /* resolved definition */
321 char *name; /* enumeration set name */
322 char *datatype; /* enumeration set data type */
323 WmlSynEnumSetValDefPtr
324 values; /* list of values in set */
325 } WmlSynEnumSetDef, *WmlSynEnumSetDefPtr;
330 * An enumeration value descriptor
332 #define WmlEnumValueDefValid 172938
334 typedef struct WmlSynEnumValueDefStruct
336 int validation; /* WmlEnumValueDefValid */
337 struct WmlEnumValueDefStruct
338 *rslvdef; /* resolved definition */
339 char *name; /* enumeration value name */
340 char *enumlit; /* name of defining literal */
341 } WmlSynEnumValueDef, *WmlSynEnumValueDefPtr;
345 * A charset descriptor
347 #define WmlCharSetDefValid 110983
349 typedef struct WmlSynCharSetDefStruct
351 int validation; /* WmlCharSetDefValid */
352 struct WmlCharSetDefStruct
353 *rslvdef; /* resolved definition */
354 char *name; /* data type name */
355 char *int_lit; /* internal literal name */
356 char *xms_name; /* identifying XmString name */
357 short int direction; /* WmlCharSetDirection... */
358 short int parsedirection; /* WmlCharSetDirection... */
359 short int charsize; /* WmlCharSize... */
360 short int alias_cnt; /* alias count */
361 char **alias_list; /* vector of aliases */
362 } WmlSynCharSetDef, *WmlSynCharSetDefPtr;
367 * Data structures constructed during semantic validation. Each points
368 * as required to syntactic data structures. These are typically accessed
369 * from ordered pointer vectors.
374 * A datatype descriptor. It extends the syntactic element by assigning
375 * a code to the descriptor.
377 typedef struct WmlDataTypeDefStruct
379 struct WmlSynDataTypeDefStruct
380 *syndef; /* syntactic definition */
381 char *tkname; /* name for generating literals */
382 } WmlDataTypeDef, *WmlDataTypeDefPtr;
386 * A charset descriptor. It extends the syntactic element by assigning
387 * a code to the descriptor.
389 typedef struct WmlCharSetDefStruct
391 struct WmlSynCharSetDefStruct
392 *syndef; /* syntactic definition */
393 char *tkname; /* name for generating literals */
394 short int sym_code; /* code value for literals */
395 } WmlCharSetDef, *WmlCharSetDefPtr;
398 * A child descriptor. It extends the syntactic element by assigning
399 * a code and a pointer to the class to the descriptor.
401 typedef struct WmlChildDefStruct
403 struct WmlSynChildDefStruct
404 *syndef; /* syntactic definition */
405 char *tkname; /* name for generating literals */
406 short int sym_code; /* code value for literals */
407 struct WmlClassDefStruct
408 *class; /* class structure */
409 struct WmlClassChildDefStruct
410 *ref_ptr; /* used dynamically for search */
411 } WmlChildDef, *WmlChildDefPtr;
414 * An element in the values list of an enumeration set. These elements have
415 * separate lists in order to deal with the possibility of an enumeration
416 * value which is a member of more than one list.
418 typedef struct WmlEnumSetValDefStruct
420 struct WmlEnumSetValDefStruct
421 *next; /* next value in list */
422 struct WmlEnumValueDefStruct
423 *value; /* value descriptor for element */
424 } WmlEnumSetValDef, *WmlEnumSetValDefPtr;
428 * A resolved enumeration set descriptor
430 typedef struct WmlEnumSetDefStruct
432 struct WmlSynEnumSetDefStruct
433 *syndef; /* syntactic definition */
434 char *tkname; /* name for generating literals */
435 short int sym_code; /* code value for literals */
436 WmlDataTypeDefPtr dtype_def; /* data type */
437 short int values_cnt; /* count of # of values in set */
439 values; /* list of values in set */
440 } WmlEnumSetDef, *WmlEnumSetDefPtr;
444 * A resolved enumeration value descriptor
446 typedef struct WmlEnumValueDefStruct
448 struct WmlSynEnumValueDefStruct
449 *syndef; /* syntactic definition */
450 short int sym_code; /* code value for literals */
451 } WmlEnumValueDef, *WmlEnumValueDefPtr;
455 * A resource descriptor
457 typedef struct WmlResourceDefStruct
459 struct WmlSynResourceDefStruct
460 *syndef; /* syntactic definition */
461 char *tkname; /* name for generating literals */
462 short int sym_code; /* code value for literals */
463 WmlDataTypeDefPtr dtype_def; /* data type for base definition */
464 WmlEnumSetDefPtr enumset_def; /* enumeration set if specified */
465 short int related_code; /* if non-0, the sym_code for the
466 related (count) argument */
467 short int xrm_support; /* if AttributeTrue, then the resource
468 can be set in Xrm. Resolved
469 from either explicit setting or
471 struct WmlClassDefStruct
472 *ref_class; /* used for membership sort */
473 struct WmlClassResDefStruct
474 *ref_ptr; /* used dynamically for search */
475 } WmlResourceDef, *WmlResourceDefPtr;
479 * A resource descriptor with overrides which is a member of the resource
480 * list of a class descriptor.
482 typedef struct WmlClassResDefStruct
484 struct WmlClassResDefStruct
485 *next; /* next resource in list */
486 WmlResourceDefPtr act_resource; /* actual resource descriptor */
487 WmlDataTypeDefPtr over_dtype; /* overriding data type */
488 char *dflt; /* overriding default */
489 int exclude; /* WmlAttributeTrue if to be excluded */
490 } WmlClassResDef, *WmlClassResDefPtr;
493 * A child descriptor which is a member of the children
494 * list of a class descriptor.
496 typedef struct WmlClassChildDefStruct
498 struct WmlClassChildDefStruct
499 *next; /* next child in list */
500 WmlChildDefPtr act_child; /* actual child descriptor */
501 } WmlClassChildDef, *WmlClassChildDefPtr;
505 * An element for the controls list of a resolved class descriptor
507 typedef struct WmlClassCtrlDefStruct
509 struct WmlClassCtrlDefStruct
510 *next; /* next control in list */
511 struct WmlClassDefStruct
512 *ctrl; /* class being controlled */
513 } WmlClassCtrlDef, *WmlClassCtrlDefPtr;
518 * A resolved class descriptor. It has a pointer to its superclass, and
519 * a resource list consisting of its inherited resources followed by
522 typedef struct WmlClassDefStruct
524 struct WmlSynClassDefStruct
525 *syndef; /* syntactic definition */
526 struct WmlClassDefStruct
527 *superclass; /* superclass structure */
528 struct WmlClassDefStruct
529 *parentclass; /* parentclass structure */
530 char *tkname; /* name to be used in literals.
531 int_lit or name if no int_lit */
532 short int sym_code; /* code value for literals */
533 short int inherit_done; /* TRUE when inheritance complete */
534 WmlClassResDefPtr arguments; /* linked argument list */
535 WmlClassResDefPtr reasons; /* lined reason list */
536 WmlClassCtrlDefPtr controls; /* list of controlled classes.
537 Controls list references will
538 be expanded into this list. */
539 WmlClassChildDefPtr children; /* list of automatic children */
540 struct WmlClassDefStruct
541 *variant; /* the gadget class for a widget */
542 struct WmlClassDefStruct
543 *nondialog; /* the non-dialog ancestor of a
545 WmlResourceDefPtr ctrlmapto; /* the resource controls map to */
546 struct WmlClassCtrlDefStruct
547 *ref_ptr; /* used dynamically for search */
548 } WmlClassDef, *WmlClassDefPtr;
552 * A resolved controls list descriptor.
554 typedef struct WmlCtrlListDefStruct
556 struct WmlSynCtrlListDefStruct
557 *syndef; /* syntactic definition */
558 WmlClassCtrlDefPtr controls; /* list of controlled classes */
559 } WmlCtrlListDef, *WmlCtrlListDefPtr;
564 * Data structures used to locate and order objects in various ways.
568 * Token structure used to create ordered token lists for generation of
569 * UilKeyTab.h. The token string is in the order vector.
571 typedef struct WmlKeyWTokenStruct
573 int class; /* token class, WmlTokenClass... */
574 ObjectPtr objdef; /* object definition (resolved) */
575 } WmlKeyWToken, *WmlKeyWTokenPtr;
579 * A grammar token as obtained from the UIL grammar file (Uil.y)
581 typedef struct WmlGrammarTokenStruct
583 int class; /* token class, WmlTokenClass... */
584 char *token; /* token name (literal) */
585 int val; /* token id as value */
586 } WmlGrammarToken, *WmlGrammarTokenPtr;
590 * A list element which allows association of a name with an object.
591 * Typically used to construct ordered lists.
595 char *objname; /* object name */
596 ObjectPtr objptr; /* the object */
597 } ObjectHandleDef, *ObjectHandleDefPtr;
600 * A dynamic handle element list, extensible by malloc'ing more space.
604 int cnt; /* # entries in use */
605 int max; /* max # entries available */
606 int ordered; /* TRUE if list is lexicographically
607 ordered by object name */
608 ObjectHandleDefPtr hvec; /* vector of handle entries */
609 } DynamicHandleListDef, *DynamicHandleListDefPtr;
614 * Global declarations
620 extern int wml_err_count; /* total errors */
621 extern int wml_line_count; /* lines read from input */
622 extern DynamicHandleListDefPtr
623 wml_synobj_ptr; /* syntactic object list */
625 extern DynamicHandleListDefPtr wml_obj_datatype_ptr;
626 extern DynamicHandleListDefPtr wml_obj_enumval_ptr;
627 extern DynamicHandleListDefPtr wml_obj_enumset_ptr;
628 extern DynamicHandleListDefPtr wml_obj_reason_ptr;
629 extern DynamicHandleListDefPtr wml_obj_arg_ptr;
630 extern DynamicHandleListDefPtr wml_obj_child_ptr;
631 extern DynamicHandleListDefPtr wml_obj_allclass_ptr;
632 extern DynamicHandleListDefPtr wml_obj_class_ptr;
633 extern DynamicHandleListDefPtr wml_obj_ctrlist_ptr;
634 extern DynamicHandleListDefPtr wml_obj_charset_ptr;
636 extern DynamicHandleListDefPtr wml_tok_sens_ptr;
637 extern DynamicHandleListDefPtr wml_tok_insens_ptr;
643 * Defined in wmlutils.c
645 extern char *wmlAllocateString (); /* dynamic string copy */
646 extern void wmlUpperCaseString (); /* convert to upper case */
647 extern void wmlInitHList (); /* init dynamic list */
648 extern void wmlResizeHList (); /* resize a list */
649 extern void wmlClearHList (); /* clear a list for reuse */
650 extern int wmlFindInHList (); /* find name in list */
651 extern void wmlInsertInHList (); /* generic list insert */
652 extern void wmlInsertInKeyList (); /* specialized list insert */
653 extern WmlClassResDefPtr wmlResolveResIsMember ();
654 /* is resource in class? */
655 extern WmlClassChildDefPtr wmlResolveChildIsMember ();
656 /* is child in class? */
659 * Defined in wmlsynbld.c
661 extern char yystringval[]; /* any string value */
662 extern char yynameval[]; /* any name (identifier) */
663 extern int yytknval1; /* terminal token value 1 */
664 extern int yytknval2; /* terminal token value 2 */
665 extern ObjectPtr wml_cur_obj; /* object being constructed */
666 extern ObjectPtr wml_cur_subobj; /* current subobject */
667 extern void wmlCreateClass ();
668 extern void wmlAddClassAttribute ();
669 extern void wmlAddClassResource ();
670 extern void wmlAddClassResourceAttribute ();
671 extern void wmlAddClassControl ();
672 extern void wmlAddCtrList ();
673 extern void wmlCreateResource ();
674 extern void wmlCreateDatatype ();
675 extern void wmlAddResourceAttribute ();
676 extern void wmlAddDatatypeAttribute ();
677 extern void wmlAddCtrListControl ();
678 extern void wmlCreateEnumSet ();
679 extern void wmlAddEnumSetValue ();
680 extern void wmlCreateEnumValue ();
681 extern void wmlAddEnumValueAttribute ();
682 extern void wmlCreateCharset ();
683 extern void wmlAddCharsetAttribute ();
684 extern void LexIssueError ();
688 * Defined in wmlresolve.c
690 extern void wmlResolveDescriptors ();
691 extern void wmlMarkReferencePointers ();
695 * Defined in wmlouth.c
697 extern void wmlOutputHFiles ();
701 * Defined in wmloutdat.c
703 extern void wmlOutputDatFiles ();
706 * Define in wmloutp1 or wmloutp2
708 extern void wmlOutput ();