Develop and Download Open Source Software

Browse CVS Repository

Diff of /shiki/shiki/shiki.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.12 by aloha, Tue Nov 7 14:18:28 2006 UTC revision 1.13 by aloha, Sat Nov 11 04:05:06 2006 UTC
# Line 41  static GtkTextBuffer *current_text_buffe Line 41  static GtkTextBuffer *current_text_buffe
41  static GtkWidget *statusbar;  static GtkWidget *statusbar;
42  static GtkWidget *modeline_label;  static GtkWidget *modeline_label;
43    
44    /* gauche を起動して文字列をロード */
45    static gchar *load_cstring_by_gauche(gchar *s) {
46      gchar *msg;
47    
48      ScmObj result, error;
49      /* 入力文字列ポートを開く */
50      ScmObj is = Scm_MakeInputStringPort(SCM_STRING(SCM_MAKE_STR(s)), TRUE);
51      /* 出力文字列ポート開く */
52      ScmObj os = Scm_MakeOutputStringPort(TRUE);
53    
54      Scm_Define(Scm_UserModule(), SCM_SYMBOL(SCM_INTERN("*input*")), is);
55      Scm_Define(Scm_UserModule(), SCM_SYMBOL(SCM_INTERN("*error*")), SCM_FALSE);
56      /* Scheme のレベルでエラーハンドリングをしつつ,ポートから順番に S 式を読み込み,評価していく.コンパイルエラーなどは *error* に捕捉される */
57      result = Scm_EvalCString("(guard (e (else (set! *error* e) #f)) (eval (load-from-port *input*) (current-module)))", SCM_OBJ(Scm_UserModule()));
58    
59      error = Scm_GlobalVariableRef(Scm_UserModule(), SCM_SYMBOL(SCM_INTERN("*error*")), 0);
60    
61      /* 文字列を評価した結果をポートに書き込む */
62      if (!SCM_FALSEP(error))
63        Scm_Write(error, os, SCM_WRITE_DISPLAY);
64      else
65        Scm_Write(result, os, SCM_WRITE_DISPLAY);
66    
67      msg = Scm_GetString(SCM_STRING(Scm_GetOutputString(SCM_PORT(os))));
68      /* ポート閉じる */
69      Scm_ClosePort(SCM_PORT(is));
70      Scm_ClosePort(SCM_PORT(os));
71    
72      return msg;
73    }
74    
75  static void font_selection_ok(GtkWidget *button, GtkWidget *font_dialog) {  static void font_selection_ok(GtkWidget *button, GtkWidget *font_dialog) {
76    gchar *font_name = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG (font_dialog));    gchar *font_name = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG (font_dialog));
77    if(font_name) {    if(font_name) {
# Line 325  static gchar *eval_cstring_by_gauche(gch Line 356  static gchar *eval_cstring_by_gauche(gch
356    return msg;    return msg;
357  }  }
358    
359  /* 緑ボタンのハンドリング.バッファの選択されている S 式を評価 */  /* 緑ボタンのハンドリング.バッファの選択範囲の S 式をロード (逐次評価) */
360  static void buffer_exec_handler(GtkWidget *widget,  GtkWidget *notebook) {  static void buffer_exec_handler(GtkWidget *widget,  GtkWidget *notebook) {
361    
362    GtkTextIter start, end, p;    GtkTextIter start, end, p;
# Line 336  static void buffer_exec_handler(GtkWidge Line 367  static void buffer_exec_handler(GtkWidge
367    /* マウスで選択されている範囲の文字列を取得 */    /* マウスで選択されている範囲の文字列を取得 */
368    if(gtk_text_buffer_get_selection_bounds(current_text_buffer, &start, &end)) {    if(gtk_text_buffer_get_selection_bounds(current_text_buffer, &start, &end)) {
369      code = gtk_text_buffer_get_text(current_text_buffer, &start, &end, FALSE);      code = gtk_text_buffer_get_text(current_text_buffer, &start, &end, FALSE);
370      gtk_text_buffer_insert(current_text_buffer, &p, eval_cstring_by_gauche(code), -1);      gtk_text_buffer_insert(current_text_buffer, &p, load_cstring_by_gauche(code), -1);
371      g_free(code);      g_free(code);
372    }    }
373  }  }

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.13

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26