Справочное описание GObject |
---|
glib-mkenumsglib-mkenums — Утилита генерирующая описание перечислимых типов языка C |
glib-mkenums
[options...] [files...]
glib-mkenums это небольшой perl-скрипт анализирующий C код извлекая определения перечислений и создавая описания перечислений основываясь на текстовых шаблонах определённых пользователем. Чаще всего этот скрипт используется для производства C кода содержащего значения перечислений как строки, таким образом программы могут обеспечить строковые названия значений для самоанализа.
glib-mkenums принимает в качестве ввода список допустимых файлов с кодом на C. Опции определяют управление текстом вывода, определённые замены выполненные в текстовых шаблонах для ключевых слов окантовываются символами @.
--fhead text |
Выводить |
--fprod text |
Выводить |
--ftail text |
Выводить |
--eprod text |
Выводить |
--vhead text |
Выводить |
--vprod text |
Выводить |
--vtail text |
Выводить |
--comments text |
Шаблон для автоматической генерации комментариев, по умолчанию (для генерации C кода) это
|
--template file |
Читать шаблон из полученного файла. Шаблоны окантовываются в спецформат С комментариев
/*** BEGIN section ***/
/*** END section ***/
где раздел (section) может быть |
--help |
Напечатать короткое описание и выйти. |
--version |
Напечатать версию и выйти. |
Определённые ключевые слова окантованные в символы @ будут заменены в итоговом тексте. Для демонстрации подстановки ключевых слов ниже, принят следующий пример перечисления:
typedef enum
{
PREFIX_THE_XVALUE = 1 << 3,
PREFIX_ANOTHER_VALUE = 1 << 4
} PrefixTheXEnum;
@EnumName@ | Имя перечисления обрабатываемого в текущий момент, имена перечислений подразумевают правильное пространство имён и используют смешанный регистр для разделения слов в имени (например PrefixTheXEnum). |
@enum_name@ | Имя перечисления состоящее из слов в нижнем регистре разделённых символом подчеркивания (например prefix_the_xenum). |
@ENUMNAME@ | Имя перечисления состоящее из слов в верхнем регистре и разделённых символом подчеркивания (например PREFIX_THE_XENUM). |
@ENUMSHORT@ | Имя перечисления состоящее из слов в верхнем регистре и разделённых символом подчёркивания, с удалением префикса (например THE_XENUM). |
@VALUENAME@ | Названия значений перечислений обрабатываемых в текущий момент со словами в верхнем регистре разделёнными символом подчёркивания, это принятое буквальное обозначение значений перечисления в исходниках C (например PREFIX_THE_XVALUE). |
@valuenick@ | Псевдоним для значения перечисления обрабатываемого в данный момент, обычно генерируется пропуском основных префиксных слов всех значений текущего перечисления, слова в нижнем регистре и разделены знаком минус (например the-xvalue). |
@type@ | Заменяется либо "enum" либо "flags", в зависимости от того имеет ли значение перечисления определённые операторы побитного смещения или нет (например flags). |
@Type@ |
Тоже самое как |
@TYPE@ |
Тоже самое как |
@filename@ | Имя текущего обрабатываемого файла (например foo.h). |
Некоторые C комментарии обрабатываются по особенному в анализируемом определении перечисления,
Каждый комментарий начинается последовательностью трёх символов /*<
и заканчивается последовательностью трёх символов >*/
.
В определении перечисления, могут быть определены опции "skip" и "flags", указывающие что это
определение перечисления будет пропущено, или будет обработано как флаговое определение,
либо для определения основных префиксов пропускаемых во всех значениях для генерации псевдонимов значений,
соответственно. Опция "lowercase_name" может быть использована для определения разделителя слов используемого в
функциях *_get_type(). Например, /*< lowercase_name=gnome_vfs_uri_hide_options >*/.
В определении значения, могут поддерживаться опции "skip" и "nick". Первая послужит причиной для пропуска значения, а вторая может использоваться для автоматической генерации псевдонима. Например:
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;