scieditor2 07 version 6

2019/09/11 11:45 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
scieditor2 07
---
190908
# 実用化に伴いいろいろ改善
使いながら気になるところから改善
アウトラインを書き直したいけど面倒でのびのびになってる
実用し出すととりあえず今でも動いてる部分は直すのが億劫になるものだなあ・・・
- アウトラインの更新~保存時とメニューにも加えた
- アウトラインクリックの動作を修正
上の行をクリックすると落ちるバグ
そこら辺は考えて実装したつもりだったんだが??
firstvisible って機能を知ったのでこれで再実装
常に10行目にターゲット行が表示されるようにした
- ファイルブラウザからフォルダを開くを実装
- 新規保存時にタブ名と、winタイトルを変更するようにした
- お気に入りタブにコンテキストメニューをつけて、リロードとopenfolderを実装

---
190909
- mainwindow でドラッグ受け付けるようにした

---
190910
# 行内の数字加算機能
gPadでマクロを書いていた機能
シンチラなので普通に実装出来る
```
import re
    def calcline(self):
        self.SendScintilla(2314) # SCI_LINEEND = 2314
        line , index = self.getCursorPosition()
        result = re.findall(r'\d{1,}',  self.text( line) )
        p= sum( [ int(l) for l in result ] )
        p='| ' + str( p )     # 挿入文字列
        self.insertAt ( p , line ,  index )
```
- 最近このサイトを知って眺めてるといろいろな発見がある
https://www.riverbankcomputing.com/static/Docs/QScintilla/annotated.html
- シンチラの公式ドキュメントに近いのは①QScintillaBaseクラスなのでほぼこれを使ってきたが、その上位の②QScintillaクラスの方が使いやすい、当然だが
1行の文字列を取得するのも、1行の文字列長を取得してバッファを確保してからもらいに行くのが①、でも②だと .text(line)で簡単に取得できることがわかった
- でも②も内部では同じ事をやってると思うので、時間は同じか遅いかもしれない
時間的なモノも含めてどっちが良いのか少しづつ調べていくのも良いかなと思った

# setutf8
今注釈行にしてるのを解除してみた
変わりなさそう
ここらへんはまだ理解が不十分だな
# ヘルプ
sciのキーバインドを忘れてるのでヘルプを作って既定フォルダに置いた、これでいいな
VScodeで便利だった機能を追加したほかsci独自のモノもある
昔調べたのを思いだした、自作ものはこういう部分が自由で良いな

# カスタムレクサー
- https://qscintilla.com/
ここを参考にそろそろ初めてみた
テキスト用、カッコとか罫線に着色する程度で十分なんだけど
- ほぼサイトのコピペで実装はできたが、**遅い!!**
今までは組み込みのpythonレクサだったんだけど、それより遅いと思う
組み込みはコンパイル済みで早いのかな?
短い文書なら気にならないけど、長い文書だとストレス感じるレベル
- 色分けの仕組み自体はわかったがかなり地道な作業というか、力業だ
時間がかかるのも当然だな・・・
- 特に言葉に区切りが無い日本語は色分けに向いてないのかもしれない
秀丸とか、日本語のエディタはどういう仕組みで実装してるんだろう?
もう少し勉強してみるけど、すこし消極になってきた┐('д')┌
- 考えたら**アウトラインの解析がレクサに似ている。**これを同じルーチンでできたら早いかもしれない。カスタムレクサは派生クラスで自作だからここに解析を実装することは可能だ。レクサで行のチェックをするところで解析もすれば良いのか??

## レクサの判別方法
① if token[0] in list[ , , ] :
これの意味が何となくだけどわかるようでわからなかった
② if hoge in hogetta :
これは真だが、前の文字列が後ろの中に含まれているか
①も理屈は同じか??
文字列じゃ無くてリストベースなんだな
まあ文字列もリストだし、結局同じって事か??

## レクサのトークナイザ
- p = re.compile( r"[*]\/ | \/[*] | \s+ | \w+ | \W" )
これで全文を findAll して単語単位に区切ってから色分けする仕組みだ
しかし英数文字しか単語にはならないから日本語や記号は一文字づつになる
これが時間がかかる理由なのじゃろうか??
- 自分で書き換えれないかな
文書内の全ての文字に対してstyleを設定する仕組みなのが面倒だな
**考えよう**


---
---> [scieditor2](https://mimemo.io/m/zeXgworpjz4K0Ek)
      

190908

実用化に伴いいろいろ改善

使いながら気になるところから改善
アウトラインを書き直したいけど面倒でのびのびになってる
実用し出すととりあえず今でも動いてる部分は直すのが億劫になるものだなあ・・・

  • アウトラインの更新~保存時とメニューにも加えた
  • アウトラインクリックの動作を修正
    上の行をクリックすると落ちるバグ
    そこら辺は考えて実装したつもりだったんだが??
    firstvisible って機能を知ったのでこれで再実装
    常に10行目にターゲット行が表示されるようにした
  • ファイルブラウザからフォルダを開くを実装
  • 新規保存時にタブ名と、winタイトルを変更するようにした
  • お気に入りタブにコンテキストメニューをつけて、リロードとopenfolderを実装

190909

  • mainwindow でドラッグ受け付けるようにした

190910

行内の数字加算機能

gPadでマクロを書いていた機能
シンチラなので普通に実装出来る

import re
    def calcline(self):
        self.SendScintilla(2314) # SCI_LINEEND = 2314
        line , index = self.getCursorPosition()
        result = re.findall(r'\d{1,}',  self.text( line) )
        p= sum( [ int(l) for l in result ] )
        p='| ' + str( p )     # 挿入文字列
        self.insertAt ( p , line ,  index )
  • 最近このサイトを知って眺めてるといろいろな発見がある
    https://www.riverbankcomputing.com/static/Docs/QScintilla/annotated.html
  • シンチラの公式ドキュメントに近いのは①QScintillaBaseクラスなのでほぼこれを使ってきたが、その上位の②QScintillaクラスの方が使いやすい、当然だが
    1行の文字列を取得するのも、1行の文字列長を取得してバッファを確保してからもらいに行くのが①、でも②だと .text(line)で簡単に取得できることがわかった
  • でも②も内部では同じ事をやってると思うので、時間は同じか遅いかもしれない
    時間的なモノも含めてどっちが良いのか少しづつ調べていくのも良いかなと思った

setutf8

今注釈行にしてるのを解除してみた
変わりなさそう
ここらへんはまだ理解が不十分だな

ヘルプ

sciのキーバインドを忘れてるのでヘルプを作って既定フォルダに置いた、これでいいな
VScodeで便利だった機能を追加したほかsci独自のモノもある
昔調べたのを思いだした、自作ものはこういう部分が自由で良いな

カスタムレクサー

  • https://qscintilla.com/
    ここを参考にそろそろ初めてみた
    テキスト用、カッコとか罫線に着色する程度で十分なんだけど
  • ほぼサイトのコピペで実装はできたが、遅い!!
    今までは組み込みのpythonレクサだったんだけど、それより遅いと思う
    組み込みはコンパイル済みで早いのかな?
    短い文書なら気にならないけど、長い文書だとストレス感じるレベル
  • 色分けの仕組み自体はわかったがかなり地道な作業というか、力業だ
    時間がかかるのも当然だな・・・
  • 特に言葉に区切りが無い日本語は色分けに向いてないのかもしれない
    秀丸とか、日本語のエディタはどういう仕組みで実装してるんだろう?
    もう少し勉強してみるけど、すこし消極になってきた┐('д')┌
  • 考えたら**アウトラインの解析がレクサに似ている。**これを同じルーチンでできたら早いかもしれない。カスタムレクサは派生クラスで自作だからここに解析を実装することは可能だ。レクサで行のチェックをするところで解析もすれば良いのか??

レクサの判別方法

① if token[0] in list[ , , ] :
これの意味が何となくだけどわかるようでわからなかった
② if hoge in hogetta :
これは真だが、前の文字列が後ろの中に含まれているか
①も理屈は同じか??
文字列じゃ無くてリストベースなんだな
まあ文字列もリストだし、結局同じって事か??

レクサのトークナイザ

  • p = re.compile( r"[]/ | /[] | \s+ | \w+ | \W" )
    これで全文を findAll して単語単位に区切ってから色分けする仕組みだ
    しかし英数文字しか単語にはならないから日本語や記号は一文字づつになる
    これが時間がかかる理由なのじゃろうか??
  • 自分で書き換えれないかな
    文書内の全ての文字に対してstyleを設定する仕組みなのが面倒だな
    考えよう

---> scieditor2