scieditor2 hoge version 108
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
scieditor2 hoge
@[TOC](項目なり)
# 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
# lexer
- pyの時はpyにする、派生クラスのファイルロードでチェックしよう
```
if fname[:-2]=='py' :
setlexer /////////////////
```
# かな漢字モードでカーソルかえる
# 実験
- 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で書き出しできること、読みこみできること
----
# アウトライン
- **listWidgetの動作を確認**
データモデル作成は良いけど、クリック時の飛び方
- 行データの与え方
非表示で二列目も作る、二列目に行番号を入れる
foobar を参考に
- 解析ルーチンを派生クラスのメソッドにして親から呼ぶ、データモデルをselfで保持する(これは再解析を含む)、データモデルが戻り値
- 親に対してモデルを帰すメソッド実装、タブ切替時に呼ぶ
- かならずモデルを作る、解析すべきモノが無ければ「┐('д')┌」
-
## リロード時に状態を復元する
## 現在行項目を選択する
現在文書の行を取得して、アウトラインの該当行を選択する
第二カラムのデータをスキャンして該当アイテムを見つける
```
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)
## コンテキストつける
①アウトライン更新
②関数解析
③現在位置をアウトライン表示
④内容を新規文書に書き出し
- **リストビューに切り替えてからの方がよさそう**
## 解析ルーチンの移動
1. designer で widget --> view
クリックのスロット再設定
メニューから解析を削除
2. coding
- 派生
```
def init
self.PropDict={'fname':'','enc':'','EOL':0,'Lines':0 , 'Length':0 , 'model':QModel , 'analyzetype':0 }
def load( string )
if string[:-2]== 'py' :
self.PropDict['analyzetype'] = 1
return self.analyze()
def analyze(self) :
if not self.PropDict['analyzetype'] :
////
else:
pass # python code
return self.propdict['model']
```
- 本体
```
def treeClicked(self,item): # tree outline
# view に書き換え→foobalt 参考
def fileload()
# self.currentSci.load(string)
self.ui.treeview.setModel( self.currentSci.load(string) )
def tabchanged
self.ui.treeview.setModel( self.currentSci.PropDict['model'] )
def mesfronsci
self.ui.treeview.setModel( self.currentSci.analyze( ) )
**analyzetree は削除
```
## 分析ルーチン例
```
tree=[ None , None , None ]
for i in range(0 , self.PropDict['Lines']):
linet = self.text( i )
linet = linet.replace('\n','') # これで改行取れるかな??
linet = linet.replace('\r','')
try :
if not linet.startswith('.') :
continue
elif linet.startswith('...') : # child 2
tree[2] = QStandardItem( linet )
tree[1].appendRow( [ tree[2] , QStandardItem( str(i) ) ] )
elif linet.startswith('..') : # child 1
tree[1] = QStandardItem( linet )
tree[0].appendRow( [ tree[1] , QStandardItem( str(i) ) ] )
else: # root
tree[0] = QStandardItem( linet )
self.PropDict['model'].appendRow( [ tree[0] , QStandardItem( str(i) ) ] )
tree[1],tree[2] = None , None
except :
except : # アウトライン記述がおかしい場合ルートに挿入
self.PropDict['model'].appendRow( [ QStandardItem( linet ) , QStandardItem( str(i) ) ] )
self.message.emit( 1 , 'ERROR analyze line : {}'.format(i) )
```
---
カラーコード
http://www.netyasun.com/home/color.html
----
---> [scieditor2](https://mimemo.io/m/zeXgworpjz4K0Ek)
項目なりfoobalt 設定保存py の解析とレクサ設定新規文書をキーバインド、すぐフォーカスBugFixCython Numbalexerかな漢字モードでカーソルかえる実験疑問gPad の罫線機能を実装タブにコンテキストつけて全て閉じるとか実装GrEPtryのexceptionを全て表示お気に入りのフォルダ sql 化アウトラインリロード時に状態を復元する現在行項目を選択するコンテキストつける解析ルーチンの移動分析ルーチン例
foobalt 設定保存
py の解析とレクサ設定
新規文書をキーバインド、すぐフォーカス
BugFix
- アナライズが再構築のときはうまく作動しない
Cython Numba
- Numba AOT
https://qiita.com/yniji/items/5b191d4274f53c8f751a - numbaによるfor文の高速化とjitの引数
https://qiita.com/nabenabe0928/items/a02964d8b48619b1e348
lexer
- pyの時はpyにする、派生クラスのファイルロードでチェックしよう
if fname[:-2]=='py' :
setlexer /////////////////
かな漢字モードでカーソルかえる
実験
- 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で書き出しできること、読みこみできること
アウトライン
-
listWidgetの動作を確認
データモデル作成は良いけど、クリック時の飛び方 -
行データの与え方
非表示で二列目も作る、二列目に行番号を入れる
foobar を参考に -
解析ルーチンを派生クラスのメソッドにして親から呼ぶ、データモデルをselfで保持する(これは再解析を含む)、データモデルが戻り値
-
親に対してモデルを帰すメソッド実装、タブ切替時に呼ぶ
-
かならずモデルを作る、解析すべきモノが無ければ「┐('д')┌」
リロード時に状態を復元する
現在行項目を選択する
現在文書の行を取得して、アウトラインの該当行を選択する
第二カラムのデータをスキャンして該当アイテムを見つける
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)
コンテキストつける
①アウトライン更新
②関数解析
③現在位置をアウトライン表示
④内容を新規文書に書き出し
- リストビューに切り替えてからの方がよさそう
解析ルーチンの移動
- designer で widget --> view
クリックのスロット再設定
メニューから解析を削除 - coding
- 派生
def init
self.PropDict={'fname':'','enc':'','EOL':0,'Lines':0 , 'Length':0 , 'model':QModel , 'analyzetype':0 }
def load( string )
if string[:-2]== 'py' :
self.PropDict['analyzetype'] = 1
return self.analyze()
def analyze(self) :
if not self.PropDict['analyzetype'] :
////
else:
pass # python code
return self.propdict['model']
- 本体
def treeClicked(self,item): # tree outline
# view に書き換え→foobalt 参考
def fileload()
# self.currentSci.load(string)
self.ui.treeview.setModel( self.currentSci.load(string) )
def tabchanged
self.ui.treeview.setModel( self.currentSci.PropDict['model'] )
def mesfronsci
self.ui.treeview.setModel( self.currentSci.analyze( ) )
**analyzetree は削除
分析ルーチン例
tree=[ None , None , None ]
for i in range(0 , self.PropDict['Lines']):
linet = self.text( i )
linet = linet.replace('\n','') # これで改行取れるかな??
linet = linet.replace('\r','')
try :
if not linet.startswith('.') :
continue
elif linet.startswith('...') : # child 2
tree[2] = QStandardItem( linet )
tree[1].appendRow( [ tree[2] , QStandardItem( str(i) ) ] )
elif linet.startswith('..') : # child 1
tree[1] = QStandardItem( linet )
tree[0].appendRow( [ tree[1] , QStandardItem( str(i) ) ] )
else: # root
tree[0] = QStandardItem( linet )
self.PropDict['model'].appendRow( [ tree[0] , QStandardItem( str(i) ) ] )
tree[1],tree[2] = None , None
except : # アウトライン記述がおかしい場合ルートに挿入
self.PropDict['model'].appendRow( [ QStandardItem( linet ) , QStandardItem( str(i) ) ] )
self.message.emit( 1 , 'ERROR analyze line : {}'.format(i) )
カラーコード
http://www.netyasun.com/home/color.html
---> scieditor2