| 83 |
#define Shiki_CURRENT_TEXT_VIEW (shiki_editor.current_tabpage_info)->text_view |
#define Shiki_CURRENT_TEXT_VIEW (shiki_editor.current_tabpage_info)->text_view |
| 84 |
#define Shiki_CURRENT_TEXT_BUFFER (shiki_editor.current_tabpage_info)->text_buffer |
#define Shiki_CURRENT_TEXT_BUFFER (shiki_editor.current_tabpage_info)->text_buffer |
| 85 |
#define Shiki_CURRENT_FILENAME (shiki_editor.current_tabpage_info)->filename |
#define Shiki_CURRENT_FILENAME (shiki_editor.current_tabpage_info)->filename |
| 86 |
#define Shiki_CURRENT_SCHEME_ENV (shiki_editor.current_tabpage_info)->env |
#define Shiki_CURRENT_BUFFER_ENV (shiki_editor.current_tabpage_info)->env |
| 87 |
|
|
| 88 |
/* プロトタイプ */ |
/* プロトタイプ */ |
| 89 |
|
|
| 333 |
static void append_tabpage(gchar *filename) { |
static void append_tabpage(gchar *filename) { |
| 334 |
/*-------------------- 新しいタブを作る ----------------------------------*/ |
/*-------------------- 新しいタブを作る ----------------------------------*/ |
| 335 |
/* ShikiTabInfo には,タブに関連する情報が全て保持されている */ |
/* ShikiTabInfo には,タブに関連する情報が全て保持されている */ |
| 336 |
ShikiTabInfo *tabinfo = g_malloc(sizeof(ShikiTabInfo)); |
ShikiTabInfo *tabinfo = g_malloc(sizeof(ShikiTabInfo)); |
| 337 |
tabinfo->undoInfoList = NULL; |
tabinfo->undoInfoList = NULL; |
| 338 |
tabinfo->filename = filename; |
tabinfo->filename = filename; |
| 339 |
tabinfo->tabpage_label = g_path_get_basename(filename); |
tabinfo->tabpage_label = g_path_get_basename(filename); |
| 340 |
|
tabinfo->env = Scm_MakeModule(NULL, FALSE); |
| 341 |
|
|
| 342 |
|
g_return_if_fail(tabinfo->env != SCM_FALSE); |
| 343 |
|
|
| 344 |
/* スクロールウィンドウ (タブの中身の大外) を作る */ |
/* スクロールウィンドウ (タブの中身の大外) を作る */ |
| 345 |
tabinfo->tabpage = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); |
tabinfo->tabpage = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); |
| 448 |
/* 出力文字列ポート開く */ |
/* 出力文字列ポート開く */ |
| 449 |
ScmObj os = Scm_MakeOutputStringPort(TRUE); |
ScmObj os = Scm_MakeOutputStringPort(TRUE); |
| 450 |
|
|
| 451 |
Scm_Define(Scm_UserModule(), SCM_SYMBOL(SCM_INTERN("*input*")), is); |
Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*input*")), is); |
| 452 |
Scm_Define(Scm_UserModule(), SCM_SYMBOL(SCM_INTERN("*error*")), SCM_FALSE); |
Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*error*")), SCM_FALSE); |
| 453 |
/* Scheme のレベルでエラーハンドリングをしつつ,ポートから順番に S 式を読み込み,評価していく.コンパイルエラーなどは *error* に捕捉される */ |
/* Scheme のレベルでエラーハンドリングをしつつ,ポートから順番に S 式を読み込み,評価していく.コンパイルエラーなどは *error* に捕捉される */ |
| 454 |
result = Scm_EvalCString("(guard (e (else (set! *error* e) #f)) (eval (load-from-port *input*) (current-module)))", SCM_OBJ(Scm_UserModule())); |
result = Scm_EvalCString("(guard (e (else (set! *error* e) #f)) (eval (load-from-port *input*) (current-module)))", SCM_OBJ(Shiki_CURRENT_BUFFER_ENV)); |
| 455 |
|
|
| 456 |
error = Scm_GlobalVariableRef(Scm_UserModule(), SCM_SYMBOL(SCM_INTERN("*error*")), 0); |
error = Scm_GlobalVariableRef(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*error*")), 0); |
| 457 |
|
|
| 458 |
/* 文字列を評価した結果をポートに書き込む */ |
/* 文字列を評価した結果をポートに書き込む */ |
| 459 |
if (!SCM_FALSEP(error)) |
if (!SCM_FALSEP(error)) |
| 702 |
|
|
| 703 |
/* Scheme レベルでエラーハンドリング */ |
/* Scheme レベルでエラーハンドリング */ |
| 704 |
/* http://alohakun.blog7.fc2.com/blog-entry-517.html */ |
/* http://alohakun.blog7.fc2.com/blog-entry-517.html */ |
| 705 |
Scm_Define(Scm_UserModule(), SCM_SYMBOL(SCM_INTERN("*input*")), SCM_MAKE_STR(s)); |
Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*input*")), SCM_MAKE_STR(s)); |
| 706 |
Scm_Define(Scm_UserModule(), SCM_SYMBOL(SCM_INTERN("*error*")), SCM_FALSE); |
Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*error*")), SCM_FALSE); |
| 707 |
|
|
| 708 |
result = Scm_EvalCString("(guard (e (else (set! *error* e) #f)) (eval (read-from-string *input*) (current-module)))", SCM_OBJ(Scm_UserModule())); |
result = Scm_EvalCString("(guard (e (else (set! *error* e) #f)) (eval (read-from-string *input*) (current-module)))", SCM_OBJ(Shiki_CURRENT_BUFFER_ENV)); |
| 709 |
|
|
| 710 |
error = Scm_GlobalVariableRef(Scm_UserModule(), SCM_SYMBOL(SCM_INTERN("*error*")), 0); |
error = Scm_GlobalVariableRef(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*error*")), 0); |
| 711 |
|
|
| 712 |
/* 文字列を評価した結果をポートに書き込む */ |
/* 文字列を評価した結果をポートに書き込む */ |
| 713 |
if (!SCM_FALSEP(error)) |
if (!SCM_FALSEP(error)) |