|
> ご存じと思いますが、というかfzok4234さんのために作ったような機能ばっかりな
>のですが、カラーマーカーで
> 実際に文字列やコメントとして効果がある色付けでも何でもできるので、それで自
>由にしてもらればいいと思います。
> その重い処理を別の場所でなく「同期的」にマクロ自身でやるのは無いと思います
>が、それで強調表示しなかいという
> 結論に達したのであれば、これで我慢して使っていただくしかないです。
本来ならば、 colormarker 文を こみやんま さんの Hm.NET.dll の Hm.Macro.State
ment() で呼び出す処理を、
自作の C# の DLL から async-await 構文を使って「非同期」で行いたいところです。
しかし、マクロヘルプの
https://help.maruo.co.jp/hidemac/html/200_Dll_Api.html
には、
> 関数の呼び出しは、メインスレッドと同じスレッドから呼び出す必要があります。
> (Hidemaru_AnalyzeEncoding, Hidemaru_LoadFileUnicodeは除く)
と書かれており、 Hm.Macro.Statement() の母体である Hidemaru_EvalMacro() 関数
もマクロ本体とは別スレッドでの
「非同期」で呼び出してはいけないこととなっていてスレッドセーフではありません。
このため、対象テキストの入れ子構造の解析などの重い処理を待ってから、その結果
に基づく colormarker 文での
強調を行うようなマクロの実装にせざるを得ないような状況です。
しかし、このような実装で強調の更新の度に 10 数秒も固まるのは実用に耐えないた
め、入れ子構造の解析で精度を
上げることは断念して、同じ行内での前方 / 後方参照だけを行ってトークンの種類
を特定する形に方針転換
いたしました。
おっしゃるとおりであれば、当面は
1. 数値 / 文字列 / コメント以外は通常の「強調表示」。
2. 数値と単行の文字列 / コメントは colormarker 文。
3. 2 行以上の文字列 / コメントは「複数行コメント」。
の 3 系統に分割して対処することになりそうです。今後もし、Hidemaru_EvalMacro
() がスレッドセーフ対応されれば
その時に晴れて colormarker への全面移行の検討時期となります。
> しいて対応するとすれば、何らかの色付け結果情報を反映させるのをまとめてJSON
>とか何かで一括でできる方法が
> あったらいいと思います。
> V9.18ではJavaScript対応もあって、そのへんがやりやすくなってくるかもしれま
>せん。
> (まだ不足はあるかもしれませんが)
現時点では こみやんま さんとやり取りされながら仕様を策定されている段階のため、
最終的な仕様が固まったのち
安定した状態がしばらく続いてから改めて要望させていただくことになります。
|
|