2011-10-13 64 views
1

我正在將GTK +移植到node.js,一個難點是將GTK +函數轉換爲相應的C++調用。例如,解析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,這是因爲我不能將它們合併到一個需要部分函數模板特化的調用中。

有沒有一個工具來實現這一目標?

+0

你打算如何在NodeJs中使用Gtk + – erick2red

+1

@ erick2red一個Internet桌面應用程序。 node.js在進行網絡連接時非常棒,它將使互聯網桌面應用程序變得非常容易,比任何其他腳本語言更容易開發。 – fool

回答

3

node.js似乎是Google Chrome瀏覽器使用的V8 Javascript引擎的Javascript實現。你想創建的是一個新的GTK的JavaScript綁定,這應該使用GObject-introspection工作來完成,而不是手動綁定每個函數。

看看GjsSeed官方Javascript bindings for GTK做了什麼。

0

不確定是否有一個特定的工具,但你應該能夠使用REGEX掀起一個快速解析器。 BOOST正則表達式很容易理解,並且應該儘快讓你到達那裏。