scieditor2 hoge version 152
scieditor2 hoge
@[TOC](項目なり)
# 文字数カウントの実験
シンチラクラスとメインクラス両方で実装して速さを計測する
```
chars = 0
for l in range( self.PropDict[] ) :
chars += len( self.text( l ) )
print chars
```
- 本体
```
chars = 0
for l in range( self.currentSci.PropDict[] ) :
chars += len( self.currentSci.text( l ) )
print chars
```
# 検索修正
- pythonのコンパイル済み正規表現検索は検索位置指定が出来る
今はシンチラのキャレット位置以降ってコードにしてる
連続して検索するとヒットすべき文字列を逃がすことがあるんだが、この位置はバイトベースで文字よりも大きい事が原因と思われる
- シンチラのキャレット位置は[行:インデックス]でも取得できるから、前の行までの総文字数を計算してそれにキャレット位置を加算すればpythonベースの指定位置を計算出来る(と思う)
- でも検索結果をシンチラベースにする際にも各行の総和の計算はするんだよなあ・・
同じ事を何度もしたくない
文書が短ければなんてこと無いけど、長い文書になると結構負担だと思う
- キャレット位置までの総文字数を取得して検索開始
ヒットして得られた位置から文字数を計算するとき、キャレット位置までの文字数を保持しておいてそこから加算していくことにすれば無駄はない
でも複雑ですよね~
- やっぱストレートにやるか
# 正規表現検索でcase を無視する
p = re.compile(".*" + name + ".*", re.IGNORECASE )
# 改行を取る
- str.rstrip()
※行末空白があればそれも取ってしまう
- analyze でこのコードに入れ替えてみよう
# 文字数ベースの位置をシンチラの[行:インデックス]に変換する
pythonの検索で返る位置、開始位置 --> 文字ベース
scintilla の範囲指定 --> ①行+文字 or ②バイト
①と②は相互変換できるが、文字ベースとの変換はない
python側で文字ベースをバイトベースに変換できないか??
scintilla で通算の文字列を管理できないか?
- 各行の文字数を足し上げていってチェックする
```
def calcposition( self , start , end )
tolen = 0
Lines = self.getLineCount() ##### 調べてね
for l in range ( Lines ) :
if tolen + len( self.text( l ) ) > start :
startline = l
startpos = start - tolen
break
else :
tolen += len( self.text( l ) )
for l in range ( startline , Lines ) :
if tolen + len( self.text( l ) ) > endt :
endline = l
endpos = end - tolen
break
else :
tolen += len( self.text( l ) )
return startline , startpos , endline , endpos
```
# foobalt
refresh のsqlite コマンドをパイソンの f'' で書き直してみる
# VLC キャッシュ設定
あすたらびすた
http://blog.livedoor.jp/hasta_la_vista/archives/52213920.html
VLCのバッファ、キャッシュ設定
https://figfig-anime.blog.ss-blog.jp/2014-07-10
# 行頭空白削除も簡単だよな
範囲指定あるなしで分岐する仕組みは同じだな
機能をクラス化して分けた方が良いかも??
# お気に入りファイルを保存した場合は自動でビューを更新
---
---
# 新規文書をキーバインド、すぐフォーカス
# 派生クラスからのシグナルを一本化する
# BugFix
- アナライズが再構築のときはうまく作動しない
# 拡張子CSVでテーブルビュー表示
# 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
# かな漢字モードでカーソルかえる IME変換モード
ここもかな
http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/7.html
IMEのON/OFF状態を取得したい。
https://teratail.com/questions/137570
```
from ctypes import WinDLL
from threading import Thread
from time import sleep
from tkinter import Tk
def ime_check():
user32 = WinDLL("user32")
imm32 = WinDLL("imm32")
while True:
hWnd = user32.GetForegroundWindow()
hIMC = imm32.ImmGetContext(hWnd)
print("hWnd:", hWnd, "hIMC:", hIMC, "ImmGetOpenStatus:", imm32.ImmGetOpenStatus(hIMC))
imm32.ImmReleaseContext(hWnd, hIMC)
sleep(1)
Thread(target=ime_check, daemon=True).start()
root = Tk()
root.mainloop()
```
## get winhandle
- Widgetのウィンドウハンドル(HWND)を取得する
Widgetのウィンドウハンドル(WindowsのHWND)を取得するには、Wid QWidget::wndId()またはWId QWidget::effectiveWinId()を使用する。
effectiveWinId()はそのWidgetが正当なウィンドウハンドルを持っていない場合は親を辿って有効なウィンドウハンドルを探す。
返す値はWIdというQtの型なのでプラットフォームに適した型にキャストして使用する。
# 実験
- 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で書き出しできること、読みこみできること
----
---
カラーコード
http://www.netyasun.com/home/color.html
----
---> [scieditor2](https://mimemo.io/m/zeXgworpjz4K0Ek)
項目なり文字数カウントの実験検索修正正規表現検索でcase を無視する改行を取る文字数ベースの位置をシンチラの[行:インデックス]に変換するfoobaltVLC キャッシュ設定行頭空白削除も簡単だよなお気に入りファイルを保存した場合は自動でビューを更新新規文書をキーバインド、すぐフォーカス派生クラスからのシグナルを一本化するBugFix拡張子CSVでテーブルビュー表示Cython Numbaかな漢字モードでカーソルかえる IME変換モードget winhandle実験疑問タブにコンテキストつけて全て閉じるとか実装将来的にテキストのクリッカブル定型句挿入gPad の罫線機能を実装GrEPtryのexceptionを全て表示お気に入りのフォルダ sql 化
文字数カウントの実験
シンチラクラスとメインクラス両方で実装して速さを計測する
chars = 0
for l in range( self.PropDict[] ) :
chars += len( self.text( l ) )
print chars
- 本体
chars = 0
for l in range( self.currentSci.PropDict[] ) :
chars += len( self.currentSci.text( l ) )
print chars
検索修正
- pythonのコンパイル済み正規表現検索は検索位置指定が出来る
今はシンチラのキャレット位置以降ってコードにしてる
連続して検索するとヒットすべき文字列を逃がすことがあるんだが、この位置はバイトベースで文字よりも大きい事が原因と思われる - シンチラのキャレット位置は[行:インデックス]でも取得できるから、前の行までの総文字数を計算してそれにキャレット位置を加算すればpythonベースの指定位置を計算出来る(と思う)
- でも検索結果をシンチラベースにする際にも各行の総和の計算はするんだよなあ・・
同じ事を何度もしたくない
文書が短ければなんてこと無いけど、長い文書になると結構負担だと思う - キャレット位置までの総文字数を取得して検索開始
ヒットして得られた位置から文字数を計算するとき、キャレット位置までの文字数を保持しておいてそこから加算していくことにすれば無駄はない
でも複雑ですよね~ - やっぱストレートにやるか
正規表現検索でcase を無視する
p = re.compile("." + name + ".", re.IGNORECASE )
改行を取る
- str.rstrip()
※行末空白があればそれも取ってしまう - analyze でこのコードに入れ替えてみよう
文字数ベースの位置をシンチラの[行:インデックス]に変換する
pythonの検索で返る位置、開始位置 --> 文字ベース
scintilla の範囲指定 --> ①行+文字 or ②バイト
①と②は相互変換できるが、文字ベースとの変換はない
python側で文字ベースをバイトベースに変換できないか??
scintilla で通算の文字列を管理できないか?
- 各行の文字数を足し上げていってチェックする
def calcposition( self , start , end )
tolen = 0
Lines = self.getLineCount() ##### 調べてね
for l in range ( Lines ) :
if tolen + len( self.text( l ) ) > start :
startline = l
startpos = start - tolen
break
else :
tolen += len( self.text( l ) )
for l in range ( startline , Lines ) :
if tolen + len( self.text( l ) ) > endt :
endline = l
endpos = end - tolen
break
else :
tolen += len( self.text( l ) )
return startline , startpos , endline , endpos
foobalt
refresh のsqlite コマンドをパイソンの f'' で書き直してみる
VLC キャッシュ設定
あすたらびすた
http://blog.livedoor.jp/hasta_la_vista/archives/52213920.html
VLCのバッファ、キャッシュ設定
https://figfig-anime.blog.ss-blog.jp/2014-07-10
行頭空白削除も簡単だよな
範囲指定あるなしで分岐する仕組みは同じだな
機能をクラス化して分けた方が良いかも??
お気に入りファイルを保存した場合は自動でビューを更新
新規文書をキーバインド、すぐフォーカス
派生クラスからのシグナルを一本化する
BugFix
- アナライズが再構築のときはうまく作動しない
拡張子CSVでテーブルビュー表示
Cython Numba
- Numba AOT
https://qiita.com/yniji/items/5b191d4274f53c8f751a - numbaによるfor文の高速化とjitの引数
https://qiita.com/nabenabe0928/items/a02964d8b48619b1e348
かな漢字モードでカーソルかえる IME変換モード
ここもかな
http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/7.html
IMEのON/OFF状態を取得したい。
https://teratail.com/questions/137570
from ctypes import WinDLL
from threading import Thread
from time import sleep
from tkinter import Tk
def ime_check():
user32 = WinDLL("user32")
imm32 = WinDLL("imm32")
while True:
hWnd = user32.GetForegroundWindow()
hIMC = imm32.ImmGetContext(hWnd)
print("hWnd:", hWnd, "hIMC:", hIMC, "ImmGetOpenStatus:", imm32.ImmGetOpenStatus(hIMC))
imm32.ImmReleaseContext(hWnd, hIMC)
sleep(1)
Thread(target=ime_check, daemon=True).start()
root = Tk()
root.mainloop()
get winhandle
- Widgetのウィンドウハンドル(HWND)を取得する
Widgetのウィンドウハンドル(WindowsのHWND)を取得するには、Wid QWidget::wndId()またはWId QWidget::effectiveWinId()を使用する。
effectiveWinId()はそのWidgetが正当なウィンドウハンドルを持っていない場合は親を辿って有効なウィンドウハンドルを探す。
返す値はWIdというQtの型なのでプラットフォームに適した型にキャストして使用する。
実験
- 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で書き出しできること、読みこみできること
カラーコード
http://www.netyasun.com/home/color.html
---> scieditor2