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.53 by aloha, Fri Nov 24 13:48:18 2006 UTC revision 1.54 by aloha, Fri Nov 24 19:31:04 2006 UTC
# Line 2  Line 2 
2   *   *
3   * shiki.c   * shiki.c
4   *   *
5     * This file is main file of Shiki.
6     *
7   * Copyright(C)2006 WAKATSUKI toshihiro   * Copyright(C)2006 WAKATSUKI toshihiro
8   *   *
9   * Permission is hereby granted, free of charge, to any person obtaining a   * Permission is hereby granted, free of charge, to any person obtaining a
# Line 25  Line 27 
27   * $Id$   * $Id$
28   */   */
29    
30  #include<gauche.h>  #include"shiki.h"
 #include<gtk/gtk.h>  
 #include<gdk/gdkkeysyms.h>  
31    
32  static gint editor_indent_width = 2;  static gint editor_indent_width = 2;
33    
 /* Undo/Redo のための情報 */  
 typedef enum {SHIKI_UNDO_INSERT, SHIKI_UNDO_DELETE} ShikiAction;  
   
 typedef struct {  
   ShikiAction action;  
   gchar       *str;  
   gint        strlen;  
   gint        start;  
   gint        end;  
 } ShikiUndoInfo;  
   
 /* タブごとの情報を管理する構造体 */  
 typedef struct {  
   const gchar       *locale;           /* バッファ内容のロケール */  
   GtkScrolledWindow *tabpage;          /* タブ */  
   gchar             *tabpage_label;    /* タブのタイトル */  
   gchar             *basename;         /* ベース (ファイル名) のみ */  
   GtkTextView       *text_view;        /* タブの表示 */  
   GtkTextBuffer     *text_buffer;      /* タブのテキストバッファ */  
   gchar             *filename;         /* ファイル名のフルパス */  
   GList             *undoInfoList;     /* タブごとのバッファ変更履歴 */  
   ScmObj            env;               /* タブごとに独立した Scheme 環境 */  
   guint             delete_handler_id; /* トップレベルに登録したハンドラ ID */  
 } ShikiTabInfo;  
   
34  /* エディタ全体に関する情報と,現在表示されているタブ情報へのキャッシュを管理する構造体 */  /* エディタ全体に関する情報と,現在表示されているタブ情報へのキャッシュを管理する構造体 */
35  static struct {  ShikiEditorType Shiki_editor;
   const gchar   *default_locale;  
   GtkWidget     *editor_window;  
   GtkClipboard  *clipboard;  
   GtkNotebook   *notebook;  
   GtkWidget     *statusbar;  
   GtkWidget     *modeline_label;  
   GList         *tabInfoList;  
   gint          current_tabpage_num;  
   ShikiTabInfo  *current_tabpage_info;  
 } shiki_editor;  
   
 /* シングルトンオブジェクトの定義 */  
 #define Shiki_EDITOR_DEFAULT_LOCALE  shiki_editor.default_locale  
 #define Shiki_EDITOR_WINDOW          shiki_editor.editor_window  
 #define Shiki_EDITOR_CLIPBOARD       shiki_editor.clipboard  
 #define Shiki_EDITOR_NOTEBOOK        shiki_editor.notebook  
 #define Shiki_EDITOR_STATUSBAR       shiki_editor.statusbar  
 #define Shiki_EDITOR_MODELINE_LABEL  shiki_editor.modeline_label  
 #define Shiki_EDITOR_TAB_INFO_LIST   shiki_editor.tabInfoList  
   
 /* 現在表示されているタブに対するアクセス用各種キャッシュ情報 */  
 #define Shiki_CURRENT_TAB_NUM        shiki_editor.current_tabpage_num  
 #define Shiki_CURRENT_TAB_INFO       shiki_editor.current_tabpage_info  
 #define Shiki_CURRENT_CES         (shiki_editor.current_tabpage_info)->locale  
 #define Shiki_CURRENT_UNDO_INFO_LIST (shiki_editor.current_tabpage_info)->undoInfoList  
 #define Shiki_CURRENT_TAB            (shiki_editor.current_tabpage_info)->tabpage  
 #define Shiki_CURRENT_TAB_TITLE      (shiki_editor.current_tabpage_info)->tabpage_label  
 #define Shiki_CURRENT_TEXT_VIEW      (shiki_editor.current_tabpage_info)->text_view  
 #define Shiki_CURRENT_TEXT_BUFFER    (shiki_editor.current_tabpage_info)->text_buffer  
 #define Shiki_CURRENT_BASENAME      (shiki_editor.current_tabpage_info)->basename  
 #define Shiki_CURRENT_FILENAME       (shiki_editor.current_tabpage_info)->filename  
 #define Shiki_CURRENT_BUFFER_ENV     (shiki_editor.current_tabpage_info)->env  
36    
37  static gchar *R5RS_keywords[]  = {"and", "begin", "case", "cond-expand", "cond", "define-accessor", "define-class", "defined?", "define-generic", "define", "define-macro", "define-method", "define-module", "define-private", "define-public", "define-reader-ctor", "define-syntax", "define-syntax-macro", "defmacro", "defmacro*-public", "delay", "do", "else", "fluid-let", "if", "lambda", "let", "let*", "letrec", "letrec-syntax", "let-syntax", "or", "quasiquote", "quote", "set!", "syntax-rules", "unquote", NULL};  static gchar *R5RS_keywords[]  = {"and", "begin", "case", "cond-expand", "cond", "define-accessor", "define-class", "defined?", "define-generic", "define", "define-macro", "define-method", "define-module", "define-private", "define-public", "define-reader-ctor", "define-syntax", "define-syntax-macro", "defmacro", "defmacro*-public", "delay", "do", "else", "fluid-let", "if", "lambda", "let", "let*", "letrec", "letrec-syntax", "let-syntax", "or", "quasiquote", "quote", "set!", "syntax-rules", "unquote", NULL};
38    
# Line 109  GdkColor COLOR_GREEN; Line 52  GdkColor COLOR_GREEN;
52    
53  /* プロトタイプ */  /* プロトタイプ */
54    
55  /* タブの生成と削除 : 基本的に,ShikiTabInfo の中身に格納する情報を増やしたかったら,この 2 つの関数だけを変更すれば良い (ようにする…) */  /* タブの生成と削除 : 基本的に,ShikiBuffer の中身に格納する情報を増やしたかったら,この 2 つの関数だけを変更すれば良い (ようにする…) */
56    extern void Scm_Init_xyzzylisp(ScmModule *module);
57  static void get_buffer_create(gchar *filename);  static void get_buffer_create(gchar *filename);
58  static void remove_tabpage();  static void remove_tabpage();
59    
# Line 181  static void open_online_help(); Line 125  static void open_online_help();
125  static void about_this_application();  static void about_this_application();
126    
127  /* エディタの初期化 */  /* エディタの初期化 */
128  static void shiki_editor_window_init(int argc, char **argv);  static void Shiki_editor_window_init(int argc, char **argv);
   
 /* xyzzy lisp buffer/builtin 互換関数 */  
 #include "xyzzylisp.c"  
129    
130  /* バッファの内容を消去 */  /* バッファの内容を消去 */
131  static void clear_current_buffer() {  static void clear_current_buffer() {
# Line 394  static void delete_range_handler(GtkText Line 335  static void delete_range_handler(GtkText
335  /* タブが切り替わる時のイベントハンドリング */  /* タブが切り替わる時のイベントハンドリング */
336  static void switch_tabpage_handler(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) {  static void switch_tabpage_handler(GtkNotebook *notebook, GtkNotebookPage *page, guint pagenum) {
337    /* タブに対応する情報が格納された構造体を切替える */    /* タブに対応する情報が格納された構造体を切替える */
338    Shiki_CURRENT_TAB_INFO = (ShikiTabInfo *)g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, pagenum);    Shiki_CURRENT_TAB_INFO = (ShikiBuffer *)g_list_nth_data(Shiki_EDITOR_TAB_INFO_LIST, pagenum);
339    
340    /* 現在のタブ番号を切替える */    /* 現在のタブ番号を切替える */
341    Shiki_CURRENT_TAB_NUM = pagenum;    Shiki_CURRENT_TAB_NUM = pagenum;
# Line 541  static gboolean signal_key_press_handler Line 482  static gboolean signal_key_press_handler
482    return FALSE;    return FALSE;
483  }  }
484    
   
485  /* ノートブックにタブとページ (バッファ) を追加 */  /* ノートブックにタブとページ (バッファ) を追加 */
486  static void get_buffer_create(gchar *filename) {  static void get_buffer_create(gchar *filename) {
487    /*-------------------- 新しいタブを作る ----------------------------------*/    /*-------------------- 新しいタブを作る ----------------------------------*/
488    /* ShikiTabInfo には,タブに関連する情報が全て保持されている */    /* ShikiBuffer には,タブに関連する情報が全て保持されている */
489    ShikiTabInfo *tabinfo  = g_malloc(sizeof(ShikiTabInfo));    ShikiBuffer *tabinfo  = g_malloc(sizeof(ShikiBuffer));
490    tabinfo->locale        = "Gtk Default (utf8)";    tabinfo->locale        = "Gtk Default (utf8)";
491    tabinfo->undoInfoList  = NULL;    tabinfo->undoInfoList  = NULL;
492    tabinfo->filename      = filename;    tabinfo->filename      = filename;
493    tabinfo->basename      = g_path_get_basename(filename);    tabinfo->name      = g_path_get_basename(filename);
494    tabinfo->tabpage_label = g_strndup(tabinfo->basename, 7);    tabinfo->tabpage_label = g_strndup(tabinfo->name, 7);
495    tabinfo->env           = Scm_MakeModule(NULL, FALSE);    tabinfo->env           = Scm_MakeModule(NULL, FALSE);
496    
497    /* xyzzy lisp 関数を登録 */    /* xyzzy lisp 関数を登録 */
# Line 1232  static void open_online_help() { Line 1172  static void open_online_help() {
1172  }  }
1173    
1174  /* エディタの編集画面の初期化 */  /* エディタの編集画面の初期化 */
1175  static void shiki_editor_window_init(int argc, char **argv) {  static void Shiki_editor_window_init(int argc, char **argv) {
1176    GtkWidget *vbox, *toolbar, *modeline_bg = gtk_event_box_new();    GtkWidget *vbox, *toolbar, *modeline_bg = gtk_event_box_new();
1177    GtkToolItem *icon;    GtkToolItem *icon;
1178    GtkIconSize iconsize;    GtkIconSize iconsize;
# Line 1434  int main(int argc, char *argv[]) { Line 1374  int main(int argc, char *argv[]) {
1374    gtk_init(&argc, &argv);    gtk_init(&argc, &argv);
1375    GC_INIT(); Scm_Init(GAUCHE_SIGNATURE);    GC_INIT(); Scm_Init(GAUCHE_SIGNATURE);
1376    Scm_Load("gauche-init.scm", 0);    Scm_Load("gauche-init.scm", 0);
1377    shiki_editor_window_init(argc, argv);    Shiki_editor_window_init(argc, argv);
1378    gtk_main();    gtk_main();
1379    Scm_Exit(0);    Scm_Exit(0);
1380    return 0;    return 0;

Legend:
Removed from v.1.53  
changed lines
  Added in v.1.54

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