GLib
  • Initial page
  • I. Концепция
    • Background
    • Типы данных и программирование
  • Динамическая система типов Glib
    • Введение
    • Функции копирования
    • Соглашения
    • Неинстанциируемые не классифицированные базовые типы
    • Инстанциируемые классифицируемые типы: объекты
    • Неинстанциированные классифицированные типы: Интерфейсы.
  • Основной класс GObject
    • Введение
    • Инстанциация объекта
    • Объектное управление памятью
    • Свойства объекта
  • Система сообщений GObject
    • Замыкания
    • Сигналы
  • II. Описание API
    • GType
    • GTypePlugin
    • GTypeModule
    • GObject часть 1
    • GObject часть 2
    • Enums and Flags
    • GBoxed
    • Generic Values
    • Parameters and Values часть 1
    • Parameters and Values часть 2
    • Parameters and Values часть 3, ага
    • Value arrays
  • III. Описание инструментов
    • glib-mkenums
    • glib-genmarshal
    • gobject-query
  • IV. Руководство
    • Как определить и реализовать новый GObject?
    • Объектные методы
    • Как определять и реализовывать Интерфейсы?
    • Как создавать и использовать сигналы
    • Как пользователи могут злоупотреблять сигналами (и почему некоторые думают что это хорошо)
  • V. Об инструментах
    • Об инструментах
  • GTK 4
    • GtkApplication и GtkApplicationWindow
    • Widgets
Powered by GitBook
On this page
  • Краткое описание
  • Описание
  • Invocation
  • Смотрите также

Was this helpful?

  1. III. Описание инструментов

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

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

--commentstext

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

--templatefile

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

где раздел (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)

PreviousValue arraysNextglib-genmarshal

Last updated 6 years ago

Was this helpful?