ちょっと gEdit のプラグインを弄くっていたのでありますが。
を見てカーソル位置の GtkTextIter を得て後は多分コレでイケるだろうと作っていた。
上手くいったからイイのだろう、で、面白いことを見つけた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | def on_hoge_activate( self , action): # バッファを得る view = self ._window.get_active_view() buf = view.get_buffer() try : # カーソル位置の GtkTextIter 取得 pos = buf.get_property( "cursor-position" ) it = buf.get_iter_at_offset(pos) # 一つ前の文字を得る it1 = buf.get_iter_at_offset(pos - 1 ) s = it1.get_char() if s = = "\n" : return # 必要な変数を初期化してループ count = pos itnext = None itend = buf.get_end_iter() s1 = "" while 1 : # 次の GtkTextIter を得る count + = 1 itnext = buf.get_iter_at_offset(count) # EOF if itnext.equal(itend): break # 文字を得て比較 s1 = itnext.get_char() # # 表示してみる print s1 # if s1 = = "\n" or s1 = = "。" : break elif s = = s1: # ここまでの範囲を print itnext = buf.get_iter_at_offset(count) text = it.get_text(itnext) print text break except Exception, s: self .messagebox( "%s" % s) |
とまあ説明しやすく?書き換えたけどカーソル位置から特定範囲の文字列を得る。
具体的にはカーソルの直前文字と同じ文字を見つけたら抜き出すコードです。
これでイイの?
だって Ubuntu って UTF-8 だよ、アルファベットは 1 バイト、日本語は 2?3 バイト。
というか Windows で文字列を弄くる時に絶対に問題になるんですよ文字コードは。
いやまて、get_char() で char を取り出したって結局はポインタなんだし。
でも漢字とか混ぜると破壊されるわけで、内部はどうなるんだろう?
ということで上のように途中で char を抜いた部分にて print してみることにした。
アルファベットとひらがなカタカナ漢字記号を混ぜた文を作って実験。
あれ、char 配列になっていないじゃん。
_ismbslead みたいなことをしているのか内部で UNICODE 化しているか知らないけど.。
これは楽だ、 gEdit プラグインでは UTF-8 であることを意識しないでいいようです。
どうでもいいけど char って character の略なので「キャラ」と読みますお。