glib-mkenums

glib-mkenums — Утилита генерирующая описание перечислимых типов языка C

Краткое описание

glib-mkenums [options...] [files...]

Описание

glib-mkenums это небольшой perl-скрипт анализирующий C код извлекая определения перечислений и создавая описания перечислений основываясь на текстовых шаблонах определённых пользователем. Чаще всего этот скрипт используется для производства C кода содержащего значения перечислений как строки, таким образом программы могут обеспечить строковые названия значений для самоанализа.

Invocation

glib-mkenums принимает в качестве ввода список допустимых файлов с кодом на C. Опции определяют управление текстом вывода, определённые замены выполненные в текстовых шаблонах для ключевых слов окантовываются символами @.

Options

--fhead text

Выводить текст перед обработкой введённых файлов.

--fprod text

Выводить текст каждый раз когда начинается обработка нового введённого файла.

--ftail text

Выводить текст после обработки всех введённых файлов.

--eprod text

Выводить текст каждый раз когда встречается неожиданное перечисление в ведённых файлах.

--vhead text

Выводить текст перед выполнением перемещения через набор значений перечисления.

--vprod text

Выводить текст для каждого значения перечисления.

--vtail text

Выводить текст после перемещения через все значения перечисления.

--comments text

Шаблон для автоматической генерации комментариев, по умолчанию (для генерации C кода) это "/* @comment@ */".

--template file

Читать шаблон из полученного файла. Шаблоны окантовываются в спецформат С комментариев

/*** BEGIN section ***/ /*** END section ***/

где раздел (section) может быть file-header, file-production, file-tail, enumeration-production, value-header, value-production, value-tail или комментарием.

--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@ с первой заглавной буквой (например Flags).

@TYPE@

Тоже самое как @type@ только в верхнем регистре (например FLAGS).

@filename@

Имя текущего обрабатываемого файла (например foo.h).


Trigraph расширения

Некоторые 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;

Смотрите также

glib-genmarshal(1)