GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ2/3)
「GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ1/3)」の続き。
言語ファイルと色スキームファイルの探索ディレクトリに関するテスト
言語ファイルと色スキームファイルの配置/探索ディレクトリについては「GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ1/3)」で扱ったが、Pythonのシェルからこの動作を確認してみる。
下は環境変数XDG_DATA_HOMEと環境変数XDG_DATA_DIRSが未定義の場合のテスト例。
>>> import gtksourceview2 >>> lm = gtksourceview2.language_manager_get_default() (言語ファイルの探索パスを表示) >>> lm.props.search_path ['/home/[ユーザ名]/.local/share/gtksourceview-2.0/language-specs', '/home/[ユーザ名]/.gnome2/gtksourceview-1.0/language-specs', '/usr/local/share/gtksourceview-2.0/language-specs', '/usr/share/gtksourceview-2.0/language-specs', '/usr/share/gdm/gtksourceview-2.0/language-specs'] (利用可能な言語名の一覧を表示) >>> lm.props.language_ids ['cpp', 'desktop', 'octave', 'java', 'yacc', 'php', 'eiffel', 'verilog', 'perl', 'def', 'gettext-translation', 'python', 'libtool', 'sql', 'chdr', 'vbnet', 'dpatch', 'dot', 'tcl', 'idl', 'ada', 'dtd', 'pkgconfig', 'latex', 'haddock', 'glsl', 'gap', 'cuda', 'haskell-literate', 'xslt', 't2t', 'pascal', 'fortran', 'ruby', 'makefile', 'awk', 'nsis', 'objective-caml', 'erlang', 'r', 'haskell', 'gtkrc', 'prolog', 'html', 'sh', 'xml', 'gtk-doc', 'msil', 'vhdl', 'nemerle', 'mallard', 'dosbatch', 'rpmspec', 'diff', 'm4', 'ocl', 'ini', 'lua', 'objc', 'changelog', 'texinfo', 'asp', 'scheme', 'vala', 'c', 'forth', 'css', 'c-sharp', 'cmake', 'js', 'd', 'boo', 'docbook'] >>> ssm = gtksourceview2.style_scheme_manager_get_default() (色スキームファイルの探索パスを表示) >>> ssm.props.search_path ['/home/[ユーザ名]/.local/share/gtksourceview-2.0/styles', '/usr/local/share/gtksourceview-2.0/styles', '/usr/share/gtksourceview-2.0/styles', '/usr/share/gdm/gtksourceview-2.0/styles'] (利用可能な色スキーム名の一覧を表示) >>> ssm.props.scheme_ids ['tango', 'cobalt', 'oblivion', 'classic', 'kate']
下は環境変数XDG_DATA_HOMEが定義されている場合のテスト例(環境変数XDG_DATA_DIRSは未定義)。以下、言語と色スキームのそれぞれの一覧の表示は省略している。
>>> import gtksourceview2 >>> lm = gtksourceview2.language_manager_get_default() (言語ファイルの探索パスを表示) >>> lm.props.search_path ['[環境変数XDG_DATA_HOMEのディレクトリ]/gtksourceview-2.0/language-specs', '/home/[ユーザ名]/.gnome2/gtksourceview-1.0/language-specs', '/usr/local/share/gtksourceview-2.0/language-specs', '/usr/share/gtksourceview-2.0/language-specs', '/usr/share/gdm/gtksourceview-2.0/language-specs'] >>> ssm = gtksourceview2.style_scheme_manager_get_default() (色スキームファイルの探索パスを表示) >>> ssm.props.search_path ['[環境変数XDG_DATA_HOMEのディレクトリ]/gtksourceview-2.0/styles', '/usr/local/share/gtksourceview-2.0/styles', '/usr/share/gtksourceview-2.0/styles', '/usr/share/gdm/gtksourceview-2.0/styles']
下は環境変数XDG_DATA_DIRSが「/path/to/dir:/foo/bar」と定義されている場合のテスト例(XDG_DATA_HOMEは未定義)。
>>> import gtksourceview2 >>> lm = gtksourceview2.language_manager_get_default() (言語ファイルの探索パスを表示) >>> lm.props.search_path ['/home/[ユーザ名]/.local/share/gtksourceview-2.0/language-specs', '/home/[ユーザ名]/.gnome2/gtksourceview-1.0/language-specs', '/path/to/dir/gtksourceview-2.0/language-specs', '/foo/bar/gtksourceview-2.0/language-specs'] >>> ssm = gtksourceview2.style_scheme_manager_get_default() (色スキームファイルの探索パスを表示) >>> ssm.props.search_path ['/home/[ユーザ名]/.local/share/gtksourceview-2.0/styles', '/path/to/dir/gtksourceview-2.0/styles', '/foo/bar/gtksourceview-2.0/styles']
なお、言語マネージャとスタイルスキームマネージャのオブジェクトのGObjectプロパティsearch-pathに新しいリストを書き込む(代入する)ことにより、探索パスをプログラム内で独自に指定することもできる。
lm.props.search_path = ['/path/to/dir1', '/path/to/dir2'] ssm.props.search_path = ['/path/to/dir3', '/path/to/dir4']
実際の処理の流れ
言語マネージャとスタイルスキームマネージャの取得
まずは言語マネージャとスタイルスキームマネージャのオブジェクトを「GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ1/3)」で扱った関数によって取得しておく。
class MainWindow(gtk.Window): def __init__(self, *args, **kwargs): gtk.Window.__init__(self, *args, **kwargs) ... self.__lm = gtksourceview2.language_manager_get_default() self.__ssm = gtksourceview2.style_scheme_manager_get_default()
言語の決定とバッファオブジェクトの作成
バッファオブジェクトに関連付ける言語の決定は
- 言語マネージャオブジェクトのguess_language()による自動判別(判別に成功すると戻り値に言語オブジェクトが得られる/失敗するとNoneが返る)
- 言語マネージャオブジェクトのget_language()による手動指定
のいずれかによって言語オブジェクト(gtksourceview2.Languageクラス)を取得する形で行う。
これをgtksourceview2.Bufferクラスのコンストラクタ引数languageに指定してバッファオブジェクトを作成する。言語の指定は後からGObjectプロパティlanguageへの代入で行うこともできる。
下は自動判別の例。
guessed_lang = self.__lm.guess_language(filename='[ファイルの場所]') if guessed_lang: self.__sourcebuf = gtksourceview2.Buffer(language=guessed_lang)
下はget_language()で言語名を指定して手動で設定する例。
self.__sourcebuf = gtksourceview2.Buffer()
lang = self.__lm.get_language('python')
self.__sourcebuf.props.language = lang
これは
self.__sourcebuf = gtksourceview2.Buffer(language=self.__lm.get_language('python'))
と等価。
処理の流れに関するメモの続きとサンプルコードの全体はページ3で扱う。
(「GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ3/3)」に続く)
関連記事:
- PyGObject/PyGTKにおけるGObjectプロパティの操作について
- GtkSourceView(バージョン2系)の概要について(概要と基本的な機能)
- GtkSourceView(バージョン2系)の概要について(テキストビューを置き換えるだけの例)
- GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ1/3)
- GtkSourceViewの色付き表示(シンタックス・ハイライティング)機能の動作について(ページ3/3)
使用したバージョン:
- Python 2.6.4
- PyGTK 2.16.0
- PyGtkSourceView 2.8.0