]> git.draconx.ca Git - gob-dx.git/blob - doc/gob2.1.in
Release 2.0.18
[gob-dx.git] / doc / gob2.1.in
1 .\"
2 .\" gob manual page
3 .\" (C) 1999-2011 Jiri (George) Lebl <jirka@5z.com>
4 .\" 
5 .\" This manual page is covered by the terms of the GNU General
6 .\" Public License.  
7 .\"
8 .TH GOB2 1 "GOB2 @VERSION@" 
9 .SH NAME
10 GOB2 \- The GObject Builder
11 .SH SYNOPSIS
12 .PP
13 .B gob2
14 [ option ] ...
15 file
16
17 .SH DESCRIPTION
18 .PP
19 GObject Builder is a simple preprocessor for easily creating
20 GObject objects.  It does not parse any C code and ignores any C errors.  It
21 is in spirit similar to things like lex or yacc.  In some ways it
22 also resembles java.  But it is really just a simple preprocessor
23 for creating GObjects for use in C or C++ and it is not a programming
24 language.
25
26 .SH OPTIONS
27 .PP
28 .TP
29 .B \-? \-h \-\-help
30 Display a simple help screen.
31 .TP
32 .B \-\-version
33 Display version information
34 .TP
35 .B \-w \-\-exit\-on\-warn
36 Exit with an error code even when you encounter a warning.
37 .TP
38 .B \-\-no\-exit\-on\-warn
39 Exit with an error only on errors, not on warnings, this is the default.
40 .TP
41 .B \-\-for\-cpp
42 Generate C++ code.
43 .TP
44 .B \-\-no\-extern\-c
45 Never add the extern "C" to the header.
46 .TP
47 .B \-\-no\-gnu
48 Never generate any code with GNU C extensions.  However all the GNU C
49 extensions are always wrapped in #ifdef __GNUC__, so code using them compiles
50 correctly even on non-GNU compilers.  This option is for purists only.
51 (using GNU extensions some warnings are eliminated, some ugly hacks and there
52 is better argument type safety, so it\'s good to use them)
53 .TP
54 .B \-\-no\-touch
55 Don\'t touch output files unless they really
56 changed (implies \-\-no\-touch\-headers).  Be careful with automake, see section
57 PREVENTING SPURIOUS BUILDS.
58 .TP
59 .B \-\-no\-touch\-headers
60 Don\'t touch the generated header file unless it really changed, this avoids
61 spurious rebuilds, but can confuse some make systems (automake in particular),
62 so it is not enabled by default.  Private header is still touched even if
63 unchanged however.
64 .TP
65 .B \-\-always\-private\-header
66 Always create a \fB<basename>-private.h\fR file, even if it would be empty.
67 .TP
68 .B \-\-ondemand\-private\-header
69 Create the private header only if it would have something in it, that is,
70 if there are some private data members or protected methods.
71 This is the default.
72 .TP
73 .B \-\-no\-private\-header
74 Never create a private header file.  If we use any private data members,
75 define the private data structure at the point in the .c source where
76 the class definition begins.
77 .TP
78 .B \-\-m4
79 Preprocess source with m4. Following args will be passed to m4.
80 .TP
81 .B \-\-m4\-dir
82 Print directory that will be searched for m4 files.
83 .TP
84 .B \-n \-\-no\-write
85 Do not write any output files, just check syntax of the input file.
86 .TP
87 .B \-\-no\-lines
88 Do not print out the \'#line\' statements into the output.  Useful for debugging
89 the auto-generated generated code.
90 .TP
91 .B \-\-no\-self\-alias
92 Do not create the Self and SelfClass type aliases and the SELF, IS_SELF
93 and SELF_CLASS macros.
94 .TP
95 .B \-\-no\-kill\-underscores
96 Do not remove the initial underscore from method names.
97 .TP
98 .B \-\-always\-private\-struct
99 Always include the private pointer in the public header file.  This is useful
100 for files which are part of a library and you want to reserve the right to add
101 some private data members without breaking binary compatibility.
102 .TP
103 .B \-o \-\-output\-dir
104 The directory into which output should be placed.
105 .TP
106 .B \-\-file\-sep[=c]
107 Replace default \'\-\' file name separator.  If no separator character
108 is given then none is used.  Only one character can be used.
109
110 .SH TYPENAMES
111 .PP
112 Because we need to parse out different parts of the typename, sometimes you
113 need to specify the typename with some special syntax.  Types are specified in
114 capitalized form and words are separated by \':\'.  The first word of the type
115 (which can be empty) is the "namespace".  This fact is for example used for the
116 type checking macro and the type macro.  For "Gtk:New:Button", the macros will
117 be GTK_IS_NEW_BUTTON and GTK_TYPE_NEW_BUTTON.  This colon separated format of
118 typenames is used in the class declaration header and for method argument
119 types.
120
121 .SH OUTPUT FILES
122 .PP
123 The filenames are created from the typename.  The words are
124 separated by \'\-\' (this can be changed with
125 \fB\-\-file\-sep\fR option) and all in lower case.  For example for an object named
126 "Gtk:New:Button", the files are \fBgtk\-new\-button.c\fR and
127 \fBgtk\-new\-button.h\fR.
128 If you are using C++ mode, the output .c file will in fact be a .cc file.
129 If you have any private data members, a private header file will also
130 be created, called \fB<basename>\-private.h\fR (for the example above it
131 would be gtk\-new\-button\-private.h).
132 The public header file is created to be human readable and to be used as a
133 reference to the object.  The .c source file is not created as a human
134 readable source and is littered with #line statements, which make the
135 compiler attempt to point you to the right line in your .gob file in
136 case of parsing errors.  The output should not be edited by hand, and
137 you should only edit the .gob file.
138
139 .SH INCLUDING NORMAL C CODE IN THE OUTPUT FILES
140 .PP
141 To include some code directly in the output C file begin with \'%{\'
142 on an empty line and end the code with a \'%}\' on an empty line.  These
143 sections will appear in the output files in the order they are given.
144 There are several other \fIsections\fR to which you can put code.  You can
145 put it in the \'header\' section (which can be abbreviated \'h\') and it will
146 go into the public header file.  You can also put it in the \'privateheader\'
147 section (abbreviated \'ph\') which will make the code go into the private
148 header file.  Sometimes you want some code (other includes) to appear before
149 the extern "C" and the protecting define.  To do this you can put them
150 into the \'headertop\' (or \'ht\') section.  You may wish to include code or
151 comments in all the files, which you can do by putting them into the \'all\'
152 (or \'a\') section.  Similarly, code you wish to appear at the top of all
153 files go in the \'alltop\' (or \'at\') section.  When you want code
154 to appear as in alltop but only in the cfile you use the \'ctop\' (or \'ct\')
155 section.  Note that ctop requires 2.0.18.   Finally,
156 \'afterdecls\' includes code between the declarations and the method
157 implementations, but note that \'afterdecls\' requires version 2.0.16.
158 For example:
159 .nf
160
161   %alltop{
162         /* this will be at the very top of all output files */
163   %}
164
165   %ctop{
166         /* this will be at the very top of the C file */
167         /* Requires 2.0.18 */
168   %}
169
170   %headertop{
171         /* this will be on top of the public header */
172   %}
173
174   %privateheader{
175         /* this will go into the private header file */
176   %}
177
178   %h{
179         /* will be included in the header */
180         void somefunc(int i);
181   %}
182
183   %a{
184         /* will be included in all files */
185   %}
186
187   %afterdecls{
188         /* between the declarations and the method implementations */
189         /* Requires gob version 2.0.16 */
190   %}
191
192   %{
193         /* will be included in the C file */
194         void somefunc(int i)
195         {
196               /* some code */
197         }
198   %}
199
200 .fi
201
202 .SH INCLUDE FILES
203 .PP
204 Gob will automatically include the class header file at the top of the .c 
205 source file.  If you wish to include it somewhere else, put the include
206 into some %{ %} section above the class definition, and gob will not include
207 it automatically.  This way you can avoid circular includes and control
208 where in the file do you want to include the header.
209 .PP
210 If you made any data members private, gob will also create a source file
211 that will be called \fB<basename>\-private.h\fR.  Same rule as above applies
212 for this just as it does for the regular header file.  If you do explicitly
213 include the regular header file, you should always include this private
214 header file below it.  That is, if you use any private data members.  If you
215 don\'t, the private header file automatically includes the public header file,
216 and thus the public header file will be indirectly included at the very top
217 of the file.
218
219 .SH THE CLASS HEADER
220 .PP
221 There can be only one class per input file.  Defining a class
222 is sort of like in Java, you define the class and write inline code
223 directly into the class definition.  To define a class you need to specify
224 the new object name and the name of the object from which it is derived
225 from, such as this "class <new type> from <parent type> { <class code> }".
226 For example:
227 .nf
228
229   class Gtk:New:Button from Gtk:Button {
230           <class code>
231   }
232
233 .fi
234 .PP
235 To make an abstract class (to pass G_TYPE_FLAG_ABSTRACT) add \'(abstract)\'
236 before the curly braces above.  This works since version 2.0.13.
237
238 .SH DATA MEMBERS
239 .PP
240 There are five types of data members.  Three of them are normal data members,
241 one is class wide (global) in scope and one is a virtual one, usually linked to
242 a normal data member or a class wide data member.  The three normal data
243 members are public, protected and private.  Public and protected are basically
244 just entries in the object structure, while private has it\'s own dynamically
245 allocated private structure.  Protected members are always put after the public
246 one in the structure and are marked protected in the header file.  There is
247 only one identifier allowed per typename unlike in normal C.  Example:
248 .nf
249
250   public int i;
251   private GtkWidget *h;
252   protected long k;
253
254 .fi
255 .PP
256 Public and protected data members are accessed normally as members of
257 the object struct.  Example where \'i\' is as above a public data member:
258 .nf
259
260   object\->i = 1;
261
262 .fi
263 .PP
264 The private data members are defined in a structure which is only available
265 inside the .c file, or by including a private header file.  You must access
266 them using the structure _priv.  Example
267 where \'h\' is the private data member (as in the above example):
268 .nf
269
270   object\->_priv\->h = NULL;
271
272 .fi
273 The _priv structure is defined in the \fB<basename>\-private.h\fR.
274 This file is automatically included if you don\'t include it yourself.  You
275 should always explicitly include it in your .gob file if you explicitly also
276 include the main header file.  The reason it is a separate header file is
277 that you can also include it in other places that need to access this objects
278 private data, such as if you have the majority of functionality of an object
279 in a separate .c file.  Or if a derived object needs to access the protected
280 methods.
281 .PP
282 In case you use the \fB\-\-no\-private\-header\fR option, no
283 private header file is created and you can only access the _priv pointer
284 below the class definition in the .gob file.
285 .PP
286 Also note that this structure is dynamically allocated, and is freed in the
287 finalize handler.  If you override the finalized handler, your code will be
288 run first and only then will the _priv structure be freed.
289 .PP
290 .B "Classwide data members:"
291 .PP
292 Sometimes you want a datamember to be shared by all objects.  You then need
293 the "classwide" scope keyword.  So for example the following adds a global
294 member foo:
295 .nf
296
297   classwide int foo;
298
299 .fi
300 To access the member you can use the SELF_GET_CLASS macro (or
301 YOUR_OBJECT_NAME_GET_CLASS) to get at the class.
302 Thus the following would work:
303 .nf
304
305   SELF_GET_CLASS(object)\->foo = 20;
306
307 .fi
308 .PP
309 .B "Automatic Initialization:"
310 .PP
311 You can automatically initialize the public private and protected data members
312 without having to add an init method.  The advantage here is that
313 initialization is kept close to the definition of the data member and thus
314 it\'s easier to check.  To do this, just add a \'=\' followed by a number or
315 a token.  It is also possible to include arbitrary C code for more elaborate
316 initializations by putting it all in curly braces.  Note that the curly braces
317 will not be printed into the output, but since gob does not C parsing it needs
318 them to figure out where the C code ends.  The code will be inserted into the
319 init method, above the user defined body.  So for example the following
320 will initialize an integer to \-1 and a string with a newly allocated string
321 of "hello".
322 .nf
323
324   public int foo = \-1;
325   private char *bar = {g_strdup("hello")};
326
327 .fi
328 .PP
329 .B "Automatic Destruction:"
330 .PP
331 Most data stored as pointers needs to have a function called when the object
332 is finalized to either free the data.  Gob will let you
333 define a function to be called on the data the object is finalized.  This is
334 achieved by putting \'destroywith\' followed by a function name after the
335 variable definition.  It is only called if the data you defined this on
336 is not NULL, so you cans specify functions which do not handle NULL.  It
337 is very much like the GDestroyNotify function used in GTK+ and glib in many
338 places.  Unlike many other places, gob will not enforce any kind of type
339 safety here so be a little bit more careful.  Any function you give it will
340 be called as a "void function(void *)".  It will in fact be cast into such
341 a form before called.  This is to avoid spurious warnings for gtk calls to
342 subclass methods.  The function needs not be of that form exactly, it just has
343 to take one argument which is the pointer to the data.  You should also not
344 define this on any non-pointer data as the results may be undefined.
345 Example:
346 .nf
347
348   public char *foo = {g_strdup("bar")}
349           destroywith g_free;
350
351 .fi
352 Note that the function name you give must be a real function and not macro.
353 Also note that this is always called in the "finalize" method of GObject.
354 It is always called after any user defined body of the finalize handler.
355 .PP
356 Sometimes you may want to run arbitrary code on destruction.  While this can
357 be perfectly well done in the finalize handler.  Depending on the style you
358 may want to include all destruction/initialization code together with the
359 definition of the data member.  Thus you may want to put arbitrary code which
360 will then be inserted into the "finalize" method of GObject.  This can be
361 done with the "destroy" keyword followed by arbitrary code in curly braces.  
362 Inside this code a macro called VAR will be define which refers to your
363 variable.  So for example destroying a GString can be either done with
364 a helper routine or the following code:
365 .nf
366
367   public GString *string = {g_string_new(NULL)}
368           destroy {
369                   if(VAR) g_string_free(VAR, TRUE);
370           };
371
372 .fi
373 The thing to remember with these is that there are many ways to do this
374 and you\'d better be consistent in your code in how you use the above things.
375 Also defining a helper routine that will do the destruction will be a nicer
376 thing to do if that\'s a possibility.  The "destroy" keyword with code does
377 take up more space in the file and it may become more cluttered.
378 .PP
379 The data is zeroed out after being destroyed.  This is to make debugging easier
380 in case your code might try to access an already finalized object.  In case
381 you have overridden the finalize method, your code will be run first and
382 only then will the destructors be called.  You should not however make any
383 assumptions about the order at which the destructors are called.  If you have
384 interdependencies between destructors for different data members, you will
385 have to do this in your own finalize override function.
386 .PP
387 .B "Automatic Unreffing:"
388 .PP
389 This is very much like the automatic destruction, but is instead run in the
390 dispose method (it is among other places called from the "destroy" method of
391 GtkObject).  All data and other objects that you need to unref should be
392 done here, and not at finalize time.  The semantics are otherwise the same
393 as for the "destroywith" and "destroy" keywords, except that you use
394 "unrefwith" and "unref".
395 .nf
396
397   public G:Object *foo = NULL
398           unrefwith g_object_unref;
399   public G:Object *bar = NULL
400           unref {
401                 g_object_unref (VAR);
402           };
403
404 .fi
405
406 .SH GOBJECT PROPERTIES
407 .PP
408 The fourth type of a data member a property type.  It is a named data member
409 which is one of the features of the GObject system.  It just defines a way to
410 get and set some data, but you have to take care of storing that data
411 somewhere.  So it is normal to also have a normal private (or public)
412 data member where you store the real data.
413 You normally need to define a
414 get and a set handler.  They are fragments of C code that will be used to get
415 the value or set the value of the argument.  Inside them you can use the define
416 VAL to which you assign the data or get the data.  You should treat this VAL
417 as a GValue which stores the data of the correct type.
418 You can also use the
419 identifier "self" as pointer to the object instance.  The type is defined as
420 one of the GObject type enums, but without the G_TYPE_ prefix.  There are
421 also some attributes of a property which you can set.  For example the
422 following is a definition of an integer property \'height\' which will
423 be synchronized with a private integer data member also of the name \'height\'.
424 .nf
425
426   private int height;
427   property INT height
428          (nick = _("Short nickname"),
429           blurb = _("Long description"),
430           minimum = 10,
431           maximum = 200,
432           default_value = 100)
433         set { self\->_priv\->height = g_value_get_int (VAL); }
434         get { g_value_set_int (VAL, self\->_priv\->height); };
435
436 .fi
437 .PP
438 The attributes are really optional though you should at least set some
439 of them.
440 All property types have a \'nick\' and a \'blurb\' attribute and you should
441 set those accordingly.  This will make runtime querying the object
442 nicer as things such as gui editors and class browsers can be more
443 verbose about the class itself.  You can use the \'_("string")\' notation
444 instead of just "string", and that will mark the string for translation.
445 .PP
446 Almost all types also have a \'default_value\' attribute which sets the initial
447 value of this property (on object initialization, the set handler will be run
448 automatically with this value).  This value will be overridden if the user 
449 sets a value of this property on the call to g_object_new.
450 .PP
451 All the numeric types (including CHAR) have \'minimum\' and \'maximum\'
452 attributes which can restrict the range.  If you do not specify these
453 the range will be the full range that the data type can handle.
454 .PP
455 Types such as UNICHAR and BOOLEAN only have the \'nick\', \'blurb\' and
456 \'default_value\' attributes.
457 .PP
458 The ENUM type has an \'enum_type\' attribute which is the exact
459 type of the enum.  This is so that the property knows which exact
460 type you can set, rather then just knowing it is an enum.  You should
461 always create an enum type specific for the enum itself (see section
462 on the enum types)
463 .PP
464 Similarly FLAGS type has a \'flags_type\' which again you should set to
465 the specific type of this flags data member.
466 .PP
467 There is a STRING type which has only the extra \'default_value\' attribute.
468 .PP
469 The OBJECT type is one of the types that doesn\'t have a \'default_value\' and it
470 only has an \'object_type\' attribute (in addition to nick and blurb of course)
471 that is the exact object type that this property accepts.  The object_type
472 should be as a type, that is for example \'Gtk:Button\'.
473 .PP
474 There is a BOXED type which is a pointer which has a boxed type defined
475 (such that GObject knows how to copy and destroy this pointer).  Here
476 you will need to specify the \'boxed_type\' attribute with the specific
477 type of the boxed pointer.
478 .PP
479 There is also a POINTER type, which has only the \'nick\' and \'blurb\'
480 attributes.  This is for storing arbitrary pointers.  You should be
481 careful with this one, as GObject knows nothing about the data
482 stored at this pointer.  It is somewhat like a \'void *\' type.
483 .PP
484 There is also the PARAM type for storing parameters with a \'param_type\'
485 attribute.
486 .PP
487 You should notice that this list is pretty much like the list of g_param_spec_*
488 functions from gobject/gparamspecs.h, and the attributes are like the
489 arguments of those functions.  Note however that value array is NOT supported
490 yet.
491 .PP
492 You can also specify extra flags, such as CONSTRUCT or CONSTRUCT_ONLY using the
493 \'flags\' attribute.  You can specify multiple flags by oring them together with
494 \'|\'.  These flags correspond to the GParamFlags enumeration except do not
495 include the G_PARAM_ prefix.  So for example to define an enumeration property,
496 which is a CONSTRUCT_ONLY property, we could do the following:
497 .nf
498
499   private SomeEnumerationType foo;
500   property ENUM foo
501          (nick = _("Short nickname"),
502           blurb = _("Long description"),
503           enum_type = Some:Enumeration:Type
504           default_value = SOME_ENUMERATION_VALUE,
505           flags = CONSTRUCT_ONLY,
506           link);
507
508 .fi
509 .PP
510 The above example also gives an example of automatic linking to a standard data
511 memember.  By including the attribute \'link\' a get and set handlers will be
512 automatically added without having to type them by hand.  This is useful for a
513 vast majority data types that are just linked to some standard data member and
514 do not need to do anything extra on get or set.
515 .PP
516 Another extra feature of properties is the possibility of automatically
517 exporing methods to get and set the property.  That is without having to
518 use g_object_set and g_object_get.  This is achieved by adding an
519 \'export\' attribute to the list of property attributes.
520 .PP
521 If you do not define a set or get handler, the property will automatically
522 be only readable or writable as appropriate.
523 .PP
524 Gob2 also creates macros which can be used for type safe access to
525 properties through g_object_set and g_object_get.
526 The macros are called <type>_PROP_<argument name>(x) and
527 <type>_GET_PROP_<argument name>(x).  They define both the string and the
528 value part of the argument.  So for setting an argument of height, one would
529 use (for object type My:Object):
530 .nf
531
532   g_object_set (G_OBJECT (object),
533                 MY_OBJECT_PROP_HEIGHT (7),
534                 NULL);
535
536 .fi
537 And for getting, you would use:
538 .nf
539
540   int height;
541   g_object_get (G_OBJECT (object),
542                 MY_OBJECT_GET_PROP_HEIGHT (&height),
543                 NULL);
544
545 .fi
546 Note however that the type safety only works completely on GNU C compilers.
547 The code will compile on other compilers but with minimal type safety.
548 For complete type safety it is useful to use the get/set methods that
549 are defined by using the \'export\' attribute.
550 .PP
551 To get bettery type safety on some of the property types, you can specify
552 the \'type\' attribute which will add casts where appropriate in code dealing
553 with this property.  This is especially useful for POINTER and OBJECT types.
554 But even for others.
555 .PP
556 You can also override properties from parent objects (that is override their
557 implementation, not their attributes).  Do this by adding the
558 special \'override\' attribute.  For example if the parent object
559 had a \'height\' property then you could override it by
560 .nf
561
562   private int height;
563   property INT height
564          (override)
565         set { self\->_priv\->height = g_value_get_int (VAL); }
566         get { g_value_set_int (VAL, self\->_priv\->height); };
567
568 .fi
569 Overriding is supported since gob 2.0.10.
570
571 .SH METHODS
572 .PP
573 There is a whole array of possible methods.  The three normal,
574 "familiar" method types are private, protected and public.  Public are
575 defined as normal functions with a prototype in the header file.  
576 Protected methods are defined as normal methods (which you can call from other
577 files), but their prototype is placed in the private header file.  Private
578 methods
579 are defined as static functions with prototypes at the top of the .c
580 file.  Then there are signal, virtual and override methods.  More on those
581 later.  You can also
582 define init and class_init methods with a special definition if you want
583 to add code to the constructors or you can just leave them out.
584 You can also not define a body for a method, by just using \';\' instead of a
585 body.  This will define an empty function.  You can\'t do this for non-void
586 regular public, private or protected methods, however it is acceptable for
587 non-void virtual, signal and override methods.
588 .PP
589 .B "Function argument lists:"
590 .PP
591 For all but the init and class_init methods, you use the
592 following syntax for arguments.  The first argument can be just "self",
593 which gob will translate into a pointer to the object instance.  The rest
594 of the arguments are very similar to normal C arguments.  If the
595 typename is an object pointer you should use the syntax defined above
596 with the words separated by \':\'
597 .nf
598 <type> <argument id>
599 or
600 <type> <argument id> (check <list of checks>)
601 .fi
602 .PP
603 The checks are glib type preconditions, and can be the following:
604 "null", which tests pointers for being NULL, "type" which checks GTK+
605 object pointers for being the right type, "<test> <number>" which tests
606 numeric arguments for being a certain value.  The test can be a <,>,<=,>=
607 != or ==.  Example:
608 .nf
609   
610   public int
611   foo (self,
612        int h (check > 0 < 11),
613        Gtk:Widget *w (check null type))
614
615 .fi
616 .PP
617 This will be the prototype of a function which has a self pointer
618 as the first argument, an integer argument which will be checked and has
619 to be more then 0 and less then 11, and a pointer to a GtkWidget object
620 instance and it is checked for being null and the type will also be
621 checked.
622 .PP
623 .B "Function attributes:"
624 .PP
625 For method that aren't virtual, signal or override methods, and aren't
626 init or class_init, GLib function attribute macros G_GNUC_PRINTF,
627 G_GNUC_SCANF, and G_GNUC_FORMAT can optionally be included after the
628 argument list.  Simply include an \'attr\' keyword and the C code to include
629 in the file.  You have to include braces and anything inside the braces
630 will be printed into the header file after the function declaration and
631 before the trailing semicolon.  The braces themselves are not printed.
632 For example:
633 .nf
634
635   public void
636   print (self, const char *format (check null), ...)
637     attr {G_GNUC_PRINTF(2, 3)}
638
639 .fi
640 .PP
641 This will produce a prototype which will generate a warning at compile
642 time if the contents of the format argument (argument number 2) aren't
643 consistent with the types and number of the subsequent variadic
644 arguments (the first of which is argument number 3).  Only one \'attr\'
645 keyword per method is allowed.
646 If you have more than one attribute to include, you should
647 put them all within the braces.
648 Note that function attributes were aded in version 2.0.16.
649 .PP
650 .B "Error return:"
651 .PP
652 Methods which have a return value, there also has to be something
653 returned if there is an error, such as if a precondition is not met.
654 The default is 0, casted to the type of the method.  If you need to
655 return something else then you can specify an \'onerror\' keyword after
656 the prototype and any optional function attribute macros, and after
657 that a number, a token (an identifier) or a bit of C code enclosed in
658 braces {}.  The braces will not be printed into the output, they just
659 delimit the string.  For example:
660 .nf
661
662   public void * get_something (self, int i (check >= 0)) onerror NULL {
663           ...
664   }
665
666 .fi
667 The onerror value is also used in overrides that have a return value, in
668 case there isn\'t a parent method, PARENT_HANDLER will return it.  More about
669 this later.
670 .PP
671 .B "Default return:"
672 .PP
673 Some signal and virtual methods have a return type.  But what happens if
674 there is no default handler and no one connects to a signal.  GOB2 will
675 normally have the wrappers return whatever you specify with onerror or \'0\'
676 if you haven\'t specified anything.  You can also specify a default
677 return value with the keyword \'defreturn\'.  It\'s use is identical to the
678 use of onerror, and you can in fact use both at the same time.  Example
679 .nf
680
681   virtual int get_some_int (self) onerror \-1 defreturn 10 ;
682
683 .fi
684 That is an empty virtual method (in C++ terms a pure virtual).  If you never
685 specify any handler for it in the derived children it will just return 10.
686 .PP
687 .B "Constructor methods:"
688 .PP
689 There are two methods that handle the construction of an object, init and
690 class_init.  You define them by just using the init or class_init keyword 
691 with an untyped argument in the argument list.  The argument will be
692 usable in your function as a pointer to your object or class depending if
693 it\'s init or class_init.
694 For example:
695 .nf
696
697   init (self) {
698           /* initialize the object here */
699           self\->a = 9;
700           self\->b = 9;
701   }
702
703   class_init (class) {
704           /* initialize the class, this is rarely needed */
705           class\->blah = NULL;
706   }
707
708 .fi
709 The class_init function is very rarely needed as all standard class
710 initialization is taken care of for you by gob itself.  The init function
711 should on the other hand be used whenever you need to construct or initialize
712 anything in the object to put it into a sane state.
713 .PP
714 .B "Constructor, dispose, finalize methods:"
715 .PP
716 Since 2.0.16, you can also easily add code to the object's constructor,
717 dispose, and finalize methods.  See GObject documentation on how these are
718 run.  The code you add will be run before calling the parents function
719 for dispose and finalize, and after the parent function for constructor.
720 The syntax is just like init and class_init.
721 For example:
722 .nf
723
724   constructor (self) {
725         /* constructor method */
726   }
727
728   dispose (self) {
729         /* dispose method */
730   }
731
732   finalize (self) {
733         /* finalize method */
734   }
735
736 .fi
737 You can also just override those methods as usual, but the above is much easier and nearly as flexible.
738 .PP
739 .B "Virtual methods:"
740 .PP
741 Virtual methods are basically pointers in the class structure,
742 so that one can override the method in derived methods.  That is to implement
743 the method in a derived class, you must then use an override method (more
744 on those later).
745 They can be empty
746 (if you put \';\' instead of the C code).  A wrapper will also be defined
747 which makes calling the methods he same as public methods.  This type of
748 method is just a little bit "slower" then normal functions, but not as
749 slow as signals.  You define them by using "virtual" keyword before the
750 prototype.  If you put the keyword "private" right after the "virtual"
751 keyword, the wrapper will not be a public method, but a private one.
752 You can do the same with "protected" to make a protected wrapper.
753 .PP
754 .B "Signals:"
755 .PP
756 Signals are methods to which the user can bind other handlers
757 and override the default handler.  The default handler is basically the
758 method body.  This is the most versatile and flexible type of a method
759 and also the slowest.  You need to specify a whole bunch of things when
760 you define a signal.  One thing is when the default handler will be run,
761 first or last.  You specify that by "first" or "last" right after the
762 "signal" keyword.  Then you need to define the GObject enum types (again
763 without the G_TYPE_ prefix).  For that you define the return types
764 and the types of arguments after the "self" pointer (not including the
765 "self" pointer).  You put it in the following syntax "<return type> (<list
766 of arguments>)".  If the return type is void, the type should be "NONE",
767 the same should be for the argument list.  The rest of the prototype is
768 the same as for other method types.  The body can also be empty, and
769 also there is a public method wrapper which you can use for calling the
770 signal just like a public method.  Example:
771 .nf
772
773   signal first INT (POINTER, INT)
774   int do_something (self, Gtk:Widget *w (check null type), int length)
775   {
776           ...
777   }
778   
779 .fi
780 or
781 .nf
782
783   signal last NONE (NONE) void foo (self);
784
785 .fi
786 .PP
787 If you don\'t want the wrapper that emits the signal to be public, you can
788 include the keyword "private" after the "signal" keyword.  This will make
789 the wrapper a normal private method.  You can also make a protected wrapper
790 by using "protected" instead of "private".
791 .PP
792 If you don\'t define a "first" or a "last", the default will be taken as
793 "last".
794 .PP
795 You can also add additional flags.  You do this just like with the argument
796 flags, although this is probably very rare.  These are the G_SIGNAL_* flags,
797 and you can add them without the G_SIGNAL_ prefix into a parenthesis, just
798 after the "signal" keyword.  By default all public signals are G_SIGNAL_ACTION.
799 .PP
800 Also gob2 creates a wrapper macros for typesafe signal connection.  That is
801 you will be warned by the compiler if you pass a callback that is not the
802 correct prototype.  This will again only warn you on gcc, but it will
803 compile without warning on another compiler.  So as with all the typesafety
804 hacks in gob, it is better to test your objects under gcc to get any warnings
805 even if you are using a different compiler in the end.
806 .PP
807 The methods that are created for you are:
808 .nf
809
810   <class_name>_connect__<signal_name> (<object>, <callback>, <data>)
811   <class_name>_connect_after__<signal_name> (<object>, <callback>, <data>)
812   <class_name>_connect_data__<signal_name> (<object>, <callback>, <data>,
813                                             <destroy_notify>, <flags>)
814
815 .fi
816 .PP
817 These three functions correspond to the g_signal_connect,
818 g_signal_connect_after and g_signal_connect_data functions that you would
819 normally use, except they are for a specific signal.  Also do note
820 the two underscores between the method name and the signal name.  For
821 example to connect the signal "foo" on the object "Test:Object" you
822 would do:
823 .nf
824
825   test_object_connect__foo (object, callback, data);
826
827 .fi
828 .PP
829 To use BOXED in the signal arguments you need to tell gob which type of boxed
830 argument you want to use.  For this you can just add BOXED_GTK_TYPE_STRING
831 instead of BOXED.  For example BOXED_GTK_TYPE_TREE_ITER for GtkTreeIter.
832 This works since version 2.0.13.
833 .PP
834 .B "Override methods:"
835 .PP
836 If you need to override some method (a signal or a virtual method
837 of some class in the parent tree of the new object), you can define and
838 override method.  After the "override" keyword, you should put the
839 typename of the class you are overriding a method from.  Other then that
840 it is the same as for other methods.  The "self" pointer in this case
841 should be the type of the method you are overriding so that you don\'t
842 get warnings during compilation.  Also to call the method of the parent
843 class, you can use the PARENT_HANDLER macro with your arguments.  Example:
844 .nf
845
846   override (Gtk:Container) void
847   add (Gtk:Container *self (check null type), Gtk:Widget *wid (check null type))
848   {
849           /* some code here */
850           PARENT_HANDLER(self, wid);
851   }
852
853 .fi
854 If the function has a return value, then PARENT_HANDLER is an expression that
855 you can use.  It will return whatever the parent handler returned, or the
856 "onerror" expression if there was no parent handler.
857 .PP
858 .B "Method names:"
859 .PP
860 Inside the code, aliases are set for the methods, so that you don\'t
861 have to type the class name before each call, just type \fBself_\fR instead
862 of the name of the class.  So to call a method called \fBblah\fR, you
863 would use the name \fBself_blah\fR.
864 Example:
865 .nf
866
867   private int
868   foo (self)
869   {
870           return self\->len;
871   }
872   
873   private int
874   bar (self, int i)
875   {
876           return self_foo (self) + i;
877   }
878
879 .fi
880
881 .SH MAKING NEW OBJECTS
882 .PP
883 You should define a new method which should be a normal public method.  Inside
884 this method, you can use the GET_NEW macro that is defined for you and that
885 will fetch a new object, so a fairly standard new method would look like:
886 .nf
887
888   public GObject *
889   new (void) {
890           GObject *ret = GET_NEW;
891           return G_OBJECT (ret);
892   }
893
894 .fi
895 .PP
896 You should not a subtle peculiarity of the GObject system here.  If there is
897 any code inside the G_OBJECT macro argument, it will get executed multiple
898 times.  This means that things such as G_OBJECT(GET_NEW) would actually create
899 4 objects, leaking 3 of them.  A good rule (as with anywhere in C) is to be
900 careful with all macros.
901
902 .SH SELF REFERENCES
903 .PP
904 .B "Self alias casts:"
905 .PP
906 There are some standard casts defined for you.  Instead of using the full
907 macros inside the .c file, you can use SELF, IS_SELF and SELF_CLASS.  Using
908 these makes it easier to for example change class names around.
909 .PP
910 .B "Self alias types:"
911 .PP
912 There are also the Self and SelfClass types inside
913 your .c file.  These serve the same function as the above, they make it easier
914 to type and easier to change typenames around which can help a lot during
915 prototyping stage.  However you should note that the Self type should not be
916 used in function prototypes as one of the arguments or as a return value type.
917 This is because this is a simple C typedef which is only available inside your
918 \&.c file and not in the header files.  You can disable both the self casting
919 macros and the self type aliases by passing \-\-no\-self\-alias to gob.
920
921 .SH DEALING WITH DIFFERENT GOB VERSIONS
922 .PP
923 .B "Defines:"
924 .PP
925 In your generated C file, you can use the defines GOB_VERSION_MAJOR
926 GOB_VERSION_MINOR and GOB_VERSION_PATCHLEVEL if you wish to for example
927 use a feature that is only available in some newer gob version.  Note however
928 that you can only use these defines in the C code portions of your .gob file,
929 and #ifdef\'s cannot span multiple functions.  Check the BUGS section
930 for more on using the C preprocessor and gob.
931 .PP
932 .B "Minimum version requires:"
933 .PP
934 You can also make your .gob file require at least certain version of gob.  You
935 do this by putting \'requires x.y.z\' (where x.y.z is the version number)
936 outside of any C block, comment or class, usually you should make this the
937 first line in the file or close to the top.  If gob finds this and the version
938 of gob used to compile the code is lower then that listed in the require, gob
939 will generate an error and exit.  For example to require that gob2 version
940 2.0.0 or higher be used to compile a file, put this at the top of that file:
941 .nf
942
943   requires 2.0.0
944
945 .fi
946
947 .SH CREATING NEW ENUM, FLAGS and ERROR TYPES
948 .PP
949 You can create new GObject ENUM, FLAGS and GError types for use in your
950 classes easily.  Glib includes some utilities for handling these, however
951 it may be cleaner to use the below specified way in your classes.  It also
952 then doesn\'t require any Makefile setup.  Make sure this is defined in the
953 same section as the class, that is not in any of the \'%?{\' \'%}\' sections.
954 .PP
955 You use the keywords \'enum\' \'flags\' and \'error\' as you would use the
956 \'class\' keyword.  Then you give a prefix for the values in the enumeration.
957 Then you define a list of values just like in C.  For \'enum\' types you can
958 also specify the values assigned to each string.  Then you specify the type in
959 the standard gob style of specifying types.  Here are a few examples
960 of all of these:
961 .nf
962
963   enum LAME_CLIENT {
964         IS_CONNECTED,
965         NONE = 9,
966         LAST
967   } Test:Enum;
968
969   flags BUGA_BUGA {
970         ONE,
971         TWO,
972         MANY,
973   } Some:Flags;
974
975   error TEST_OBJECT_ERROR {
976         BAD_THIS,
977         BAD_THAT
978   } Test:Object:Error;
979
980 .fi
981 .PP
982 This will for example define an enum that is equivalent to the following
983 C code:
984 .nf
985
986   typedef enum {
987         LAME_CLIENT_IS_CONNECTED,
988         LAME_CLIENT_NONE = 9,
989         LAME_CLIENT_LAST
990   } TestEnum;
991
992 .fi
993
994 .SH C++ MODE
995 .PP
996 There is a C++ mode so that gob creates C++ compiler friendly files.  You need
997 to use the \-\-for\-cpp argument to gob.  This will make the generated file have
998 a .cc instead of a .c extension, and several things will be adjusted to
999 make it all work for a C++ compiler.  One thing that will be missing is an
1000 alias to the new method, as that clashes with C++, so instead you\'ll have to
1001 use the full name of the method inside your code.  Also note that gob does
1002 not use any C++ features, this option will just make the generated code
1003 compile with a C++ compiler.
1004
1005 .SH OVERRIDING THE GET_TYPE METHOD
1006 .PP
1007 The get_type is not really a method, but a function which initializes your
1008 object.  Recently objects appeared which require you to make a custom
1009 get_type function.  So it is possible
1010 to override this function.  To do so, just define a new public method called
1011 get_type, with no arguments.  Example:
1012 .nf
1013
1014   public GType
1015   get_type (void)
1016   {
1017         /* code goes here */
1018         return some_type;
1019   }
1020
1021 .fi
1022
1023 .SH INTERFACES
1024 .PP
1025 Currently gob will only allow you to implement interfaces (that is, define new
1026 classes which implement an interface) and doesn\'t yet have support for making
1027 new interfaces, but this will be coming at some point in the future.
1028 .PP
1029 To define a class that implements an interface add a class flag \'interface\'
1030 with the type name of the interface as an argument.  Then to implement
1031 a specific method of the interface, just add \'interface <typename>\'
1032 before the method definition.  The method can, and probably should be,
1033 private.
1034 .PP
1035 The following example implements a new object, that implements the
1036 Gtk:Tree:Model interface and implements the get_flags method of that
1037 interface.  Do note that except for standard (GTK+ and glib) specific
1038 interfaces which seem
1039 to have a non-standard name for the interface structure, the structure
1040 should end with and Iface, if you are implementing an interface.  That
1041 is for example for the Gtk:Tree:Model, the structure containing the
1042 table of methods should be named GtkTreeModelIface.
1043 .nf
1044   class Some:Object from G:Object
1045           (interface Gtk:Tree:Model)
1046   {
1047           /* function implemented for the Gtk:Tree:Model interface */
1048           interface Gtk:Tree:Model
1049           private GtkTreeModelFlags
1050           get_flags (Gtk:Tree:Model *self (check null type))
1051           {
1052                 /* Here would be the implementation */
1053                 return (GtkTreeModelFlags)0;
1054           }
1055   }
1056
1057 .fi
1058 .PP
1059 If you want to implement multiple interfaces just list more class flag lines
1060 as follows:
1061 .nf
1062
1063   class Some:Object from G:Object
1064           (interface Gtk:Tree:Model)
1065           (interface Gtk:Editable)
1066   {
1067           /* ... */
1068   }
1069
1070 .fi
1071
1072 .SH DIRECT BonoboObject SUPPORT
1073 .PP
1074 If you want to build a BonoboObject class gob2 has direct support for these.
1075 Just create a new object that derives from
1076 Bonobo:Object.
1077 Then use a "BonoboObject" class flag with the interface name as an
1078 argument.  The interface name should be as you would type it in C, that is with
1079 underscores as namespace separators.  Then you add the methods (using exact
1080 same names as in the idl file) and prepend those methods with a BonoboObject
1081 keyword.  For example imagine you have an interface GNOME/Foo/SomeInterface,
1082 with a method fooBar that takes a single string:
1083 .nf
1084
1085   class Foo:Some:Interface from Bonobo:Object
1086     (BonoboObject GNOME_Foo_SomeInterface) {
1087
1088           BonoboObject
1089           private void
1090           fooBar (PortableServer_Servant servant,
1091                   const CORBA_char *string,
1092                   CORBA_Environment *ev)
1093           {
1094                   Self *self = SELF (bonobo_object_from_servant (servant));
1095
1096                   /* your code here */
1097           }
1098
1099           /* rest of class */
1100   }
1101
1102 .fi
1103 Note that the implementation method can be private, in fact that\'s probably
1104 a good idea to do.  It won\'t work to make this a signal, it can however
1105 be a virtual.  Note that the method prototype must match the one from the
1106 interface header file, or you will get a bad assignment warning.  You should
1107 check the header file generated by orbit\-idl and see the epv structure
1108 for the correct prototypes if you can\'t figure them out from the idl itself.
1109 Also note that the first argument is not "self", but the servant and you must
1110 use bonobo_object_from_servant function to get the actual object pointer.
1111
1112 .SH DIRECT LIBGLADE SUPPORT
1113 .PP
1114 Gob can simplify writing a libglade class.  Just create a new object that
1115 derives from a GtkContainer widget.  Then use a "GladeXML" class flag
1116 with the glade file name, root widget and optional domain  as arguments
1117 between double quotes.  For example:
1118 .nf
1119
1120 class My:Glade from Gtk:Window (GladeXML "gob\-libglade.glade" "root")
1121 {
1122   ....
1123 }
1124
1125 .fi
1126 Note however that then "gob\-libglade.glade" would have to be in the current
1127 directory.  You could specify a path, but that may not work for all
1128 installations.  You can replace the glade filename with a token to be used
1129 in the generated .c file and you can then have a macro with the filename,
1130 as follows:
1131 .nf
1132
1133 class My:Glade from Gtk:Window (GladeXML GLADE_FILE "root")
1134 {
1135   ....
1136 }
1137
1138 .fi
1139 And somewhere in your header files you would have
1140 .nf
1141
1142 #define GLADE_FILE "/path/to/file.glade"
1143
1144 .fi
1145
1146 You can declare widgets as data members by adding a 'GladeXML' to
1147 the definition.
1148 .nf
1149
1150 private Gtk:Button * button1 GladeXML;
1151
1152 .fi
1153 This will automatically set the "button1" from the GladeXML file.
1154
1155 All signals created with glade are automatically connected if you defined
1156 those class methods in your class.  For example suppose in glade that
1157 we set the "connect" signal on button1 to go to on_button1_clicked, then
1158 in our gob file we can just write:
1159 .nf
1160
1161 public void
1162 on_button1_clicked(self, GtkButton * button)
1163 {
1164 }
1165
1166 .fi
1167
1168 See the examples directory for a full example.  Note that this feature
1169 requires version at least 2.0.12.
1170
1171
1172 .SH IDENTIFIER CONFLICTS
1173 .PP
1174 Gob will need to define some local variables and functions in the generated
1175 files, so you need to take some precaution not to conflict with these.  The
1176 general rule of thumb is that all of these start with three underscores.  There
1177 is one, "parent_class" which doesn\'t because it\'s intended for use in your
1178 code.  For virtuals or signals, you cannot use the identifier __parent__
1179 which is used for the parent of the object.  You should actually never access
1180 __parent__ either as it not guaranteed that it will stay named this way.
1181 Data members cannot be named __parent__ nor _priv.  For methods, you cannot
1182 use the identifiers "init" or "class_init" unless you mean the constructor
1183 methods.  You shouldn\'t generally use 3 underscores even in override method
1184 argument lists and virtual and signal method names as it might confuse the
1185 PARENT_HANDLER macro.  In fact avoiding all names with three underscores is
1186 the best policy when working with gob.
1187 .PP
1188 There are a couple of defines which you shouldn\'t be redefining in the code
1189 or other headers.  These are SELF, IS_SELF, SELF_CLASS, SELF_TYPE, ARG, VAR,
1190 PARENT_HANDLER, GET_NEW, GOB_VERSION_MAJOR, GOB_VERSION_MINOR and
1191 GOB_VERSION_PATCHLEVEL.
1192 .PP
1193 As for types, there are Self and SelfClass types which are only defined in your
1194 source files.  Their generation (just like the generation of the SELF macros)
1195 can be turned off, see command line options.
1196
1197 .SH USING GTK\-DOC STYLE INLINE DOCUMENTATION
1198 .PP
1199 If you want to use gtk\-doc style inline documentation for your objects, you
1200 can do one of two things.  First, you could include the inline documentation
1201 comments in your %{ %} section which will then be put verbatim into the
1202 output source file.  This is the way you should use for functions you define
1203 outside of the class.
1204 .PP
1205 For class methods, you should use a gtk+ style comment, however it can be
1206 indented any number of tabs or spaces and you can use the short method name
1207 without the type prefix.  Gob will automatically try to extract these and
1208 translate to full names and put them in the output source file.  An example
1209 would be:
1210 .nf
1211
1212   class Gtk:Button:Example from Gtk:Button {
1213           /**
1214            * new:
1215            *
1216            * Makes a new #GtkButtonExample widget
1217            *
1218            * Returns: a new widget
1219            **/
1220           public
1221           GtkWidget *
1222           new(void)
1223           {
1224                   return (GtkWidget *)GET_NEW;
1225           }
1226   } 
1227
1228 .fi
1229 If the function you are documenting is a signal or a virtual then it will
1230 be documenting the wrapper that starts that virtual function or emits
1231 that signal.
1232
1233 .SH DEALING WITH CIRCULAR HEADERS
1234 .PP
1235 Sometimes you may need to use an object of type MyObjectA in the MyObjectB
1236 class and vice versa.  Obviously you can\'t include headers for both.  So you
1237 need to just declare the typedef in the header of A for B, and the other way
1238 around as well.  The headers generated include a protecting
1239 define before it declares the typedef.  This define is the
1240 __TYPEDEF_<upper case object name>__.  So inside my\-object\-a.h there will be
1241 this:
1242 .nf
1243
1244   #ifndef __TYPEDEF_MY_OBJECT_A__
1245   #define __TYPEDEF_MY_OBJECT_A__
1246   typedef struct _MyObjectA MyObjectA;
1247   #endif
1248
1249 .fi
1250 Now instead of including my\-object\-a.h in the header section of
1251 my\-object\-b.gob, just copy the above code there and you\'re set for using
1252 MyObjectA as a type in the method parameters and public types.
1253 .PP
1254 Another way to get out of this problem is if you can use those types only
1255 in the private members, in which case they won\'t be in the generated public
1256 header.
1257
1258 .SH BUILDING WITH MAKE
1259 .PP
1260 If you are using normal makefiles, what you need to do is to add a generic
1261 rule for .gob files.  So you would include the following in the Makefile
1262 and then just use the .c and .h files as usual (make sure the space
1263 before the \'gob2\' is a tab, not spaces):
1264 .nf
1265
1266   %.c %.h %\-private.h: %.gob
1267           gob2 $<
1268
1269 .fi
1270
1271 .SH BUILDING WITH AUTOCONF and AUTOMAKE
1272 .PP
1273 This is a little bit more involved.  Basically the first thing to do is to
1274 check for GOB2 in your configure.in file.  You can use the supplied m4 macro
1275 which will also check the version of gob.  Basically you include this:
1276 .nf
1277
1278   GOB2_CHECK([2.0.0])
1279
1280 .fi
1281 This will replace @GOB2@ in your makefiles with the full path of gob2.  Thus
1282 when adding the generic rule to your Makefile.am file, it should look like:
1283 .nf
1284
1285   %.c %.h %\-private.h: %.gob
1286           @GOB2@ $<
1287
1288 .fi
1289 .PP
1290 For Makefile.am you have to set up a couple more things.  First you have to
1291 include the generated .c and .h files into BUILT_SOURCES variable.  You
1292 have to include both the .gob and the .c and .h files in the SOURCES for your
1293 program.
1294
1295 .SH PREVENTING SPURIOUS BUILDS
1296 .PP
1297 When nothing has changed you might not really want to rebuild everything and
1298 gob provides options \-\-no\-touch (since 2.0.13) and \-\-no\-touch\-headers to avoid
1299 this.  When working with build systems such as automake you have to be more
1300 careful as just using those options can cause automake to get confused and you
1301 will need to use something like the following:
1302 .nf
1303
1304   foo_SOURCES = foo.gob foo.gob.stamp foo.c foo.h foo\-private.h
1305   BUILT_SOURCES = foo.gob.stamp
1306   MAINTAINERCLEANFILES = foo.gob.stamp
1307
1308   %.gob.stamp: %.gob
1309           @GOB2@ \-\-no\-touch $<
1310           @touch $@
1311
1312 .fi 
1313
1314 .SH DEBUGGING
1315 .PP
1316 GOB does several things to make debugging the code easier.  First it adds
1317 preprocessor commands into the output c file that point to the correct places
1318 in your .gob input file.  However sometimes there might be some bigger
1319 confusion and this is just not helpful.  In this case you will probably want
1320 to have gcc point you directly at the generated files.  For this use
1321 the \-\-no\-lines command line option.  You should also note that these commands
1322 are not generated for the public header file at all.  If there is an error which
1323 points you to the public header file, make sure you fix this error in the .gob
1324 file, otherwise your changes will not have any effect after gob recompiles the
1325 sources again.
1326 .PP
1327 Sometimes you might want to know which method you are in for some debugging
1328 output.  GOB will define __GOB_FUNCTION__ macro, which is just a string constant
1329 with a pretty name of the method.
1330
1331 .SH M4 SUPPORT
1332 .PP
1333 It is possible to have your .gob file also preprocessed by m4.  This is useful
1334 if you have a lot of files and you\'d like to have some preprocessor put in
1335 some common features.  All you have to do is add \-\-m4 to the command line
1336 of gob2 and gob2 will first run your file through m4.  You can print the
1337 directory that is searched for m4 files by running "gob2 \-\-m4\-dir"
1338 .PP
1339 All the arguments after \-\-m4 will be passed to m4 itself, so it has to be the
1340 last gob2 argument on the command line.  This way you can specify arbitrary
1341 options to pass to m4.
1342
1343 .SH BUGS
1344 .PP
1345 The lexer does not actually parse the C code, so I\'m sure that some corner
1346 cases or maybe even some not so corner cases of C syntax might confuse gob
1347 completely.  If you find any, send me the source that makes it go gaga and
1348 I\'ll try to make the lexer try to handle it properly, but no promises.
1349 .PP
1350 Another thing is that gob ignores preprocessor macros.  Since gob counts
1351 braces, the following code won\'t work:
1352 .nf
1353
1354   #ifdef SOME_DEFINE
1355   if(foo) {
1356   #else
1357   if(bar) {
1358   #endif
1359           blah();
1360   }
1361
1362 .fi
1363 To make this work, you\'d have to do this:
1364 .nf
1365
1366   #ifdef SOME_DEFINE
1367   if(foo)
1368   #else
1369   if(bar)
1370   #endif
1371   {
1372           blah();
1373   }
1374
1375 .fi
1376 There is no real good way we can handle this without parsing C code, so we
1377 probably never will.  In the future, I might add #if 0 as a comment but
1378 that\'s about as far as I can really take it and even that is problematic.
1379 Basically, if you use gob, just don\'t use the C preprocessor too extensively.
1380 And if you use it make sure that you do not cross the boundaries of the C
1381 code segments.
1382 .PP
1383 Comments will not get through to the generated files unless inside C code.
1384 This is not the case for gtk\-doc style comments which are supported.
1385 .PP
1386 The short name aliases are actually implemented as pointers to functions.  Thus
1387 if you want to get the pointer of a function using the short name alias you
1388 can\'t use the \'&\'.  Thus:
1389 .nf
1390
1391   void (*foo)(Self *);
1392
1393   /* this will NOT work */
1394   foo = &self_short_name;
1395
1396   /* this will work */
1397   foo = self_short_name;
1398
1399   /* Both of these will work */
1400   foo = &my_class_long_name;
1401   foo = my_class_long_name;
1402
1403 .fi
1404
1405 .SH AUTHOR
1406 .PP
1407 George Lebl <jirka@5z.com>
1408 .PP
1409 GOB2 Homepage: http://www.jirka.org/gob.html