解析C头文件以生成文件

时间:2011-10-13 07:16:49

标签: c++ c gtk

我正在努力将GTK +移植到node.js,一个难点是将GTK +函数转换为相应的C ++调用。例如,

void       gtk_window_set_title                (GtkWindow           *window,
                        const gchar         *title);
G_CONST_RETURN gchar *gtk_window_get_title     (GtkWindow           *window);
void       gtk_window_set_role                 (GtkWindow           *window,
                                                const gchar         *role);
void       gtk_window_set_startup_id           (GtkWindow           *window,
                                                const gchar         *startup_id);
G_CONST_RETURN gchar *gtk_window_get_role      (GtkWindow           *window);

将转换为:

SETTER_METHOD (Window , "setTitle"      , gtk_window_set_title      , const gchar*) ;
GETTER_METHOD (Window , "getTitle"      , gtk_window_get_title      , const gchar*) ;
SETTER_METHOD (Window , "setRole"       , gtk_window_set_role       , const gchar*) ;
SETTER_METHOD (Window , "setStartupId"  , gtk_window_set_startup_id , const gchar*) ;
GETTER_METHOD (Window , "getRole"       , gtk_window_get_role       , const gchar*) ;

所以1)我必须在新的宏调用中保留C声明的参数(实际上,它们将扩展为模板参数)。并且2)函数返回一些东西并且那些返回什么都必须被区分,它们将被称为SETTER_METHODGETTER_METHOD,这是因为我不能在一个需要部分函数模板特化的调用中合并它们。

有没有工具来实现这一目标?

2 个答案:

答案 0 :(得分:3)

node.js似乎是Google Chrome使用的V8 Javascript引擎的Javascript实现。您想要创建的是GTK的新javascript绑定,这应该使用GObject-introspection工作完成,而不是手动绑定每个函数。

了解GjsSeed官方Javascript bindings for GTK所做的工作。

答案 1 :(得分:0)

不确定是否有特定工具,但您应该能够使用REGEX启动快速解析器。 BOOST正则表达式很容易理解,应该很快就能帮助你。