'\" t
.\"     Title: glib-mkenums
.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
.\"      Date: 05/02/2010
.\"    Manual: [FIXME: manual]
.\"    Source: [FIXME: source]
.\"  Language: English
.\"
.TH "GLIB\-MKENUMS" "1" "05/02/2010" "[FIXME: source]" "[FIXME: manual]"
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
glib-mkenums \- C language enum description generation utility
.SH "SYNOPSIS"
.HP \w'\fBglib\-mkenums\fR\ 'u
\fBglib\-mkenums\fR [options...] [files...]
.SH "DESCRIPTION"
.PP
\fBglib\-mkenums\fR
is a small perl\-script utility that parses C code to extract enum definitions and produces enum descriptions based on text templates specified by the user\&. Most frequently this script is used to produce C code that contains enum values as strings so programs can provide value name strings for introspection\&.
.SH "INVOCATION"
.PP
\fBglib\-mkenums\fR
takes a list of valid C code files as input\&. The options specified control the text that is output, certain substitutions are performed on the text templates for keywords enclosed in @ characters\&.
.SS "Options"
.PP
\fB\-\-fhead\fR \fItext\fR
.RS 4
Put out
\fItext\fR
prior to processing input files\&.
.RE
.PP
\fB\-\-fprod\fR \fItext\fR
.RS 4
Put out
\fItext\fR
everytime a new input file is being processed\&.
.RE
.PP
\fB\-\-ftail\fR \fItext\fR
.RS 4
Put out
\fItext\fR
after all input files have been processed\&.
.RE
.PP
\fB\-\-eprod\fR \fItext\fR
.RS 4
Put out
\fItext\fR
everytime an enum is encountered in the input files\&.
.RE
.PP
\fB\-\-vhead\fR \fItext\fR
.RS 4
Put out
\fItext\fR
before iterating over the set of values of an enum\&.
.RE
.PP
\fB\-\-vprod\fR \fItext\fR
.RS 4
Put out
\fItext\fR
for every value of an enum\&.
.RE
.PP
\fB\-\-vtail\fR \fItext\fR
.RS 4
Put out
\fItext\fR
after iterating over all values of an enum\&.
.RE
.PP
\fB\-\-comments\fR \fItext\fR
.RS 4
Template for auto\-generated comments, the default (for C code generations) is
"/* @comment@ */"\&.
.RE
.PP
\fB\-\-template\fR \fIfile\fR
.RS 4
Read templates from the given file\&. The templates are enclosed in specially\-formatted C comments
.sp
.if n \{\
.RS 4
.\}
.nf
/*** BEGIN section ***/
/*** END section ***/
.fi
.if n \{\
.RE
.\}
.sp
where section may be
file\-header,
file\-production,
file\-tail,
enumeration\-production,
value\-header,
value\-production,
value\-tail
or
comment\&.
.RE
.PP
\fB\-\-help\fR
.RS 4
Print brief help and exit\&.
.RE
.PP
\fB\-\-version\fR
.RS 4
Print version and exit\&.
.RE
.SS "Production text substitutions"
.PP
Certain keywords enclosed in @ characters will be substituted in the emitted text\&. For the substitution examples of the keywords below, the following example enum definition is assumed:
.sp
.if n \{\
.RS 4
.\}
.nf
typedef enum
{
  PREFIX_THE_XVALUE    = 1 << 3,
  PREFIX_ANOTHER_VALUE = 1 << 4
} PrefixTheXEnum;
.fi
.if n \{\
.RE
.\}
.PP
@EnumName@
.RS 4
The name of the enum currently being processed, enum names are assumed to be properly namespaced and to use mixed capitalization to separate words (e\&.g\&. PrefixTheXEnum)\&.
.RE
.PP
@enum_name@
.RS 4
The enum name with words lowercase and word\-separated by underscores (e\&.g\&. prefix_the_xenum)\&.
.RE
.PP
@ENUMNAME@
.RS 4
The enum name with words uppercase and word\-separated by underscores (e\&.g\&. PREFIX_THE_XENUM)\&.
.RE
.PP
@ENUMSHORT@
.RS 4
The enum name with words uppercase and word\-separated by underscores, prefix stripped (e\&.g\&. THE_XENUM)\&.
.RE
.PP
@VALUENAME@
.RS 4
The enum value name currently being processed with words uppercase and word\-separated by underscores, this is the assumed literal notation of enum values in the C sources (e\&.g\&. PREFIX_THE_XVALUE)\&.
.RE
.PP
@valuenick@
.RS 4
A nick name for the enum value currently being processed, this is usually generated by stripping common prefix words of all the enum values of the current enum, the words are lowercase and underscores are substituted by a minus (e\&.g\&. the\-xvalue)\&.
.RE
.PP
@type@
.RS 4
This is substituted either by "enum" or "flags", depending on whether the enum value definitions contained bit\-shift operators or not (e\&.g\&. flags)\&.
.RE
.PP
@Type@
.RS 4
The same as
@type@
with the first letter capitalized (e\&.g\&. Flags)\&.
.RE
.PP
@TYPE@
.RS 4
The same as
@type@
with all letters uppercased (e\&.g\&. FLAGS)\&.
.RE
.PP
@filename@
.RS 4
The name of the input file currently being processed (e\&.g\&. foo\&.h)\&.
.RE
.PP
@basename@
.RS 4
The base name of the input file currently being processed (e\&.g\&. foo\&.h)\&. (Since: 2\&.22)
.RE
.SS "Trigraph extensions"
.PP
Some C comments are treated specially in the parsed enum definitions, such comments start out with the trigraph sequence
/*<
and end with the trigraph sequence
>*/\&. Per enum definition, the options "skip" and "flags" can be specified, to indicate this enum definition to be skipped, or for it to be treated as a flags definition, or to specify the common prefix to be stripped from all values to generate value nicknames, respectively\&. The "lowercase_name" option can be used to specify the word separation used in the *_get_type() function\&. For instance, /*< lowercase_name=gnome_vfs_uri_hide_options >*/\&.
.PP
Per value definition, the options "skip" and "nick" are supported\&. The former causes the value to be skipped, and the latter can be used to specify the otherwise auto\-generated nickname\&. Examples:
.sp
.if n \{\
.RS 4
.\}
.nf
typedef enum /*< skip >*/
{
  PREFIX_FOO
} PrefixThisEnumWillBeSkipped;
typedef enum /*< flags,prefix=PREFIX >*/
{
  PREFIX_THE_ZEROTH_VALUE,	/*< skip >*/
  PREFIX_THE_FIRST_VALUE,
  PREFIX_THE_SECOND_VALUE,
  PREFIX_THE_THIRD_VALUE,	/*< nick=the\-last\-value >*/
} PrefixTheFlagsEnum;
.fi
.if n \{\
.RE
.\}
.sp
.SH "SEE ALSO"
.PP
\fBglib\-genmarshal\fR(1)
