scieditor2 hoge version 115

2019/09/20 16:00 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
scieditor2   hoge
@[TOC](項目なり)

# 解析ルーチン手直し

```
tree=[ ]
current=0 ; 階層

linet = '..hogettaやんぬるかな'
for i2 , l in enumerate( linet ) :
    if l == '.'
    if l == '.' :
        continue
    else :
        break
if not i2 :  # i2 : 階層
    continue

if i2 == 1 : # root
    tree.clear()
    tree.append( QStandardItem( linet[ 1:] ) )
    root.append( [ tree[0] ,  QStandardItem( str( i ) ) ] )
    current = 1
else :      # child
    if i2 <= current + 1 : # normal
        if len( tree )  ==  i2 -1 :
            tree.append( None ) 
        tree[ i2-1 ] =  QStandardItem( linet[ i2 : ] ) 
        tree[ i2 - 2 ].append( [ tree[ i2 - 1] ,  QStandardItem( str( i ) ) ] )
        current = i2
    else :  # error
        root.append( QStandardItem( ' -- error --' ) ,  QStandardItem( str( i ) ) ] )
```
- 階層は無限にいける
- 階層で飛んだ場合はその行だけエラーではじく
このロジックだと飛んだら直ぐ下に配置する方法もありだな
(3の次が5だったら強制的に4にするってことね)
- Widget よりも View の方が使いやすいような??

**例**
.1
..2
...3
....4
..2
...3
..2
....4
...3





# esc でヘルプをwintitleに表示
- 本体のメッセージ表示クラスで -3 をwinタイトル表示にする

```
init
    self.helpflag = 0
def showhelp( self ) :

    help=[]
    help.append('F1 : 改行コード  F2 : 文字数   F3 : ')
    help.append('c-s : 保存 c-d : 単語選択 c-k : 行削除  c-1 : 横加算  c-2 : 縦加算 c-3 : ')
    <emit>  ( -3 , help[ self.helpflag ] )
    self.helpflag += 1
    self.helpflag = self.helpflag mod 2   # esc の連打で表示を更新する
```
# foobalt 設定保存
# py のレクサ設定
# 新規文書をキーバインド、すぐフォーカス
# アウトラインをテキストで書き出す

# BugFix
- アナライズが再構築のときはうまく作動しない

# Cython Numba
[公式チュート](http://omake.accense.com/static/doc-ja/cython/src/userguide/tutorial.html)
- Numba  AOT
https://qiita.com/yniji/items/5b191d4274f53c8f751a
- numbaによるfor文の高速化とjitの引数
https://qiita.com/nabenabe0928/items/a02964d8b48619b1e348


# かな漢字モードでカーソルかえる

# 実験
- analyze 計測したい、シンチラの関数→シンチラの方が速い(゚Д゚)
- 検索
置換文字列に \r\n を入れたら改行する
検索文字列では無視された
**複数行検索は独自実装だな**
- 文書取得の実験
print( 'byte' , self.bytes( 0 , self.length() ) )  #  ---> bytearray
print( 'text' , self.text() ) #  ---> str
- 保存時u8ならself.bytesでいけるのか??
- 高速化 numba 逆に遅くなった
- treeWidget に setModel() する --> できません ┐('д')┌

# 疑問
- 同じuiファイルに複数のダイアログを作れるか
- ダイレクトコール
できません┐('д')┌
本家サイトで推奨してるので何とか導入したいんだけど
pythonは基本的にはポインタを意識しなくて良い言語だけど、知識がないと対応できない
むしろ型宣言がしっかりした言語の方が使いやすいのかもしれないと思ったりします
cのように、型が厳格なくせにキャストはやりたい放題とか( ´∀`)
出来た方がいらしたら是非教えていただきたいです



# gPad の罫線機能を実装

# タブにコンテキストつけて全て閉じるとか実装
- しかしこれなくても良い、簡単だけど
何となく次々と機能増やしたらいつかすごく遅くなってたりするんじゃないのかなって思ったりした
# GrEP
- 前に作ったルーチンを使う
ヒットしたファイルは新規タブを作って表示していく
ダブルクリックで飛びたい
- ディレクトリ選択型ダイアログ
http://qt-log.open-memo.net/sub/dialog__directory_dialog.html


# tryのexceptionを全て表示

# お気に入りのフォルダ sql 化
- **テキストの方が簡単に直せて良いかもだなあ**
- sql 化する前に実験する
①treeview とボタンだけのダイアログをdesignerで作って実験する
ボタン:ok : cancel : insFolda
②ドラッグでファイルを追加できること、DDで順番を変更できること
③その順番でsqlで書き出しできること、読みこみできること


----

# アウトライン

## リロード時に状態を復元する

## 現在行項目を選択する
現在文書の行を取得して、アウトラインの該当行を選択する
第二カラムのデータをスキャンして該当アイテムを見つける
```
def setOutlineFromLine(self ):
    if not self..currentSci.PropDict['model'] :
        return
    line ,indx = self.currentSci.getCursorPosition()
    < モデルデータ検索、上からlineより小さければネクスト、超えた時点で直前の行を開く >
```
QTreeWidget.setItemSelected (self, QTreeWidgetItem item, bool select)
QTreeWidgetItem QTreeWidget.itemFromIndex (self, QModelIndex index)


## コンテキストつける
①アウトライン更新
②関数解析
③現在位置をアウトライン表示
④内容を新規文書に書き出し
- **リストビューに切り替えてからの方がよさそう**



---
カラーコード
http://www.netyasun.com/home/color.html

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

      

項目なり解析ルーチン手直しesc でヘルプをwintitleに表示foobalt 設定保存py のレクサ設定新規文書をキーバインド、すぐフォーカスアウトラインをテキストで書き出すBugFixCython Numbaかな漢字モードでカーソルかえる実験疑問gPad の罫線機能を実装タブにコンテキストつけて全て閉じるとか実装GrEPtryのexceptionを全て表示お気に入りのフォルダ sql 化アウトラインリロード時に状態を復元する現在行項目を選択するコンテキストつける

解析ルーチン手直し

tree=[ ]
current=0 ; 階層

linet = '..hogettaやんぬるかな'
for i2 , l in enumerate( linet ) :
    if l == '.' :
        continue
    else :
        break
if not i2 :  # i2 : 階層
    continue

if i2 == 1 : # root
    tree.clear()
    tree.append( QStandardItem( linet[ 1:] ) )
    root.append( [ tree[0] ,  QStandardItem( str( i ) ) ] )
    current = 1
else :      # child
    if i2 <= current + 1 : # normal
        if len( tree )  ==  i2 -1 :
            tree.append( None ) 
        tree[ i2-1 ] =  QStandardItem( linet[ i2 : ] ) 
        tree[ i2 - 2 ].append( [ tree[ i2 - 1] ,  QStandardItem( str( i ) ) ] )
        current = i2
    else :  # error
        root.append( QStandardItem( ' -- error --' ) ,  QStandardItem( str( i ) ) ] )
  • 階層は無限にいける
  • 階層で飛んだ場合はその行だけエラーではじく
    このロジックだと飛んだら直ぐ下に配置する方法もありだな
    (3の次が5だったら強制的に4にするってことね)
  • Widget よりも View の方が使いやすいような??


.1
..2
...3
....4
..2
...3
..2
....4
...3

esc でヘルプをwintitleに表示

  • 本体のメッセージ表示クラスで -3 をwinタイトル表示にする
init
    self.helpflag = 0
def showhelp( self ) :

    help=[]
    help.append('F1 : 改行コード  F2 : 文字数   F3 : ')
    help.append('c-s : 保存 c-d : 単語選択 c-k : 行削除  c-1 : 横加算  c-2 : 縦加算 c-3 : ')
    <emit>  ( -3 , help[ self.helpflag ] )
    self.helpflag += 1
    self.helpflag = self.helpflag mod 2   # esc の連打で表示を更新する

foobalt 設定保存

py のレクサ設定

新規文書をキーバインド、すぐフォーカス

アウトラインをテキストで書き出す

BugFix

  • アナライズが再構築のときはうまく作動しない

Cython Numba

公式チュート

かな漢字モードでカーソルかえる

実験

  • analyze 計測したい、シンチラの関数→シンチラの方が速い(゚Д゚)
  • 検索
    置換文字列に \r\n を入れたら改行する
    検索文字列では無視された
    複数行検索は独自実装だな
  • 文書取得の実験
    print( 'byte' , self.bytes( 0 , self.length() ) ) # ---> bytearray
    print( 'text' , self.text() ) # ---> str
  • 保存時u8ならself.bytesでいけるのか??
  • 高速化 numba 逆に遅くなった
  • treeWidget に setModel() する --> できません ┐('д')┌

疑問

  • 同じuiファイルに複数のダイアログを作れるか
  • ダイレクトコール
    できません┐('д')┌
    本家サイトで推奨してるので何とか導入したいんだけど
    pythonは基本的にはポインタを意識しなくて良い言語だけど、知識がないと対応できない
    むしろ型宣言がしっかりした言語の方が使いやすいのかもしれないと思ったりします
    cのように、型が厳格なくせにキャストはやりたい放題とか( ´∀`)
    出来た方がいらしたら是非教えていただきたいです

gPad の罫線機能を実装

タブにコンテキストつけて全て閉じるとか実装

  • しかしこれなくても良い、簡単だけど
    何となく次々と機能増やしたらいつかすごく遅くなってたりするんじゃないのかなって思ったりした

GrEP

tryのexceptionを全て表示

お気に入りのフォルダ sql 化

  • テキストの方が簡単に直せて良いかもだなあ
  • sql 化する前に実験する
    ①treeview とボタンだけのダイアログをdesignerで作って実験する
    ボタン:ok : cancel : insFolda
    ②ドラッグでファイルを追加できること、DDで順番を変更できること
    ③その順番でsqlで書き出しできること、読みこみできること

アウトライン

リロード時に状態を復元する

現在行項目を選択する

現在文書の行を取得して、アウトラインの該当行を選択する
第二カラムのデータをスキャンして該当アイテムを見つける

def setOutlineFromLine(self ):
    if not self..currentSci.PropDict['model'] :
        return
    line ,indx = self.currentSci.getCursorPosition()
    < モデルデータ検索、上からlineより小さければネクスト、超えた時点で直前の行を開く >

QTreeWidget.setItemSelected (self, QTreeWidgetItem item, bool select)
QTreeWidgetItem QTreeWidget.itemFromIndex (self, QModelIndex index)

コンテキストつける

①アウトライン更新
②関数解析
③現在位置をアウトライン表示
④内容を新規文書に書き出し

  • リストビューに切り替えてからの方がよさそう

カラーコード
http://www.netyasun.com/home/color.html


---> scieditor2