Code Monkey home page Code Monkey logo

capycss's Introduction

CapyCSS

CapyCSS_netproject

特徴

  • ビジュアル環境でc#なスクリプトを作成することができます。
  • dllをインポートしてメソッドをスクリプトで使うことができます(インポート後にnamespaceで取り込んで下さい)。
  • 作者の趣味でc#とwpfの勉強の為、そして気まぐれで制作されています。

ターゲット環境

  • .NET7 Desktop
  • c#

「The data version are incompatible.」と表示される場合の対処方法

Documentフォルダにある古い「CapyCSS」フォルダを削除して下さい。

実行オプション

保存したスクリプトファイルをコマンド引数で指定すると、起動時に自動的に読み込まれます。 オプションとして-asが併せて指定されている場合、「Entry」をチェックされたノードは、スクリプトのロード後に自動で実行されます。 オプションとして-aeを指定した場合、スクリプト実行後に自動的に終了します。 オプションとして-aseを指定した場合、-asと-aeを併せて実行した場合と同様になります。

CapyCSS.exe [cbsファイル]
CapyCSS.exe [プロジェクトファイル名]&[cbsファイル]
CapyCSS.exe -as [cbsファイル]
CapyCSS.exe -as -ae [cbsファイル]
CapyCSS.exe -ase [cbsファイル]
CapyCSS.exe -as [プロジェクトファイル名]&[cbsファイル]
CapyCSS.exe -ase [プロジェクトファイル名]&[cbsファイル]
※カレントディレクトリは、「CapyCSS実行ファイルのあるディレクトリ\Sample」になります。

「SetExitCode」ノードを使って終了コードをセットできます(ノードが実行された時点で強制終了します)。

コンソール出力

コンソールから起動した場合は、「Call File」や「OutConsole」系のノードからの出力は、コンソールにも出力されます。

操作方法

  • スペースキーもしくはホイールボタンの押下でコマンドウインドウを表示できます。
  • コマンドウインドウを表示し、コマンドメニューの「Program」下から項目をクリックしてノードを配置できます。
  • ノードの○を左クリックしてドラッグし、ノードの□に接続できます。
  • Ctrlキーを押しながら□を左クリックすると、接続しているノードを切断できます(ダブルクリックでも可能になりました)。
  • Shiftキーを押しながらマウスをドラッグして範囲内のノードを複数選択します。
  • Deleteキーで選択されているノードを削除できます。
  • ノード名を左クリックしてノードをドラッグ移動できます(Ctrlキーを押下した状態だと、ガイドに沿って移動します)。
  • 画面を左クリックして画面全体をドラッグ移動できます(選択されたノードがある場合、選択されているノードが移動します)。
  • ホイールボタンの回転で表示を拡大もしくは縮小できます。
  • Ctrl + Aで全選択
  • Ctrl + Spaceで選択解除
  • Ctrl + Cで選択したノードをコピーできます。
  • Ctrl + Vでコピーされているノードを貼り付けられます。
  • Ctrl + Sでスクリプトを上書き保存できます。
  • Ctrl + Oでスクリプトの読み込みができます。
  • Ctrl + Nで新規にスクリプトを作成できます。
  • Ctrl + Shift + Nでスクリプトをクリアできます。
  • jキーでスクリプトの表示を画面の**に画面に収まるように調整します。
  • Ctrl + jキーでスクリプトの表示位置を画面の左上に調整します。
  • F5でEntryをチェックされたノードをすべて実行できます。

※ノード名、引数名はダブルクリックで編集できます。ただし、変数名は画面左側の変数名一覧でのみダブルクリックで編集できます。

スクリプトの便利な機能

  • 引数の上にカーソルを置くと内容を確認できます。
  • 数字と文字をドラッグアンドドロップするだけで定数ノードを作成できます。
  • ノードの接続時に柔軟なキャスト(接続)が可能です(実行を保証するものではありません)。

ヒント表示

※只今、調整中です。
英語と日本語をサポートします。ただし、初期状態では英語のみの機械翻訳です。
日本語で表示するには、実行後に作成されるapp.xmlファイルの内容を変更します。
<Language>en-US</Language>
上記の内容を次のように変更します。
<Language>ja-JP</Language>
再起動すると設定が適用されます。

メソッドのインポートでサポートされる機能

  • クラスのコンストラクタ(new する機能が取り込まれます)
  • メソッド(thisを受け取る引数が追加されます)
  • 静的メソッド
  • ゲッター
  • セッター

※メソッドの所属するクラスは、パブリックである必要があります。
※抽象クラスは、対象外です。
※メソッドは、パブリックである必要があります。

スクリプトが対応するメソッドの引数の型(及び修飾子など)

  • Type: int, string, double, byte, sbyte, long, short, ushort, uint, ulong, char, float, decimal, bool, object
  • 配列(ver0.3.5.0 からスクリプト上での扱いにも対応)※ただし、一次元まで。
  • IEnumerableを持つ型(※UI上で要素を操作できます)
  • Class
  • Struct
  • Interface
  • Delegate
  • Enum
  • Generics
  • 初期化値
  • ref(リファレンス)
  • outパラメーター修飾子
  • inパラメーター修飾子
  • paramsパラメータ配列
  • null許容型(ver0.3.4.0 からスクリプト上での扱いにも対応)

スクリプトが対応するメソッドの戻り値の型

  • Type: int, string, double, byte, sbyte, long, short, ushort, uint, ulong, char, float, decimal, bool, object
  • 配列
  • Class
  • Struct
  • Interface
  • Delegate
  • Enum
  • Generics
  • void
  • null許容型

独自の型

  • text型(UI上で複数行の編集領域を持つstring型です)
  • password型(UI上で表示をマスクする為のstring型です)

メソッドからのメソッド呼び出し

delegate 型の引数は、返し値の型と一致する型のノードと接続できます。ただし、Action だと無条件に接続できます。 デリゲートの呼び出しでは、接続されたノードの結果が返されます。

スクリプトへのDLL自動取り込み機能

CbSTUtils.AutoImportDllList で Dll を指定するとプロジェクト作成時に最初に自動で取り込まれるようになります。 スクリプトに最低限入れたい機能を追加したいときに活用して下さい。

ライセンス

MITライセンス

capycss's People

Contributors

katsumiar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

capycss's Issues

c#変換機能の実装を変更

c#変換機能の実装方法を根本的に変更する。
・ノード毎にメソッドを構築しノードを手繰って引数部分に挿入するだけで構築するように修正する。
・自動で付加される「CapyCSSbase.Script.AddEntryPoint」を無くし、直接呼び出す機能を付加するようにする。

文言修正

キャッシュを仕様しないチェックのキャプションを「Not Use Cache」から「Don't Use Cache」に変更。

Import機能を根本的に見直す。

本来の想定だと思われる内容とCapyCSSでの扱いでの乖離が酷いので改善する。
併せてImport機能の速度を根本的に改善する。
※ver0.6.0.0

・Import機能は、ネームスペースの取り込みを除いてプロジェクトを作成しなければ、扱えないようにする。
 ・dllのImport機能は、プロジェクトの機能へ移動する。
・プロジェクトは、プロジェクト用ディレクトリに置いて、プロジェクトを開くとそこをカレントディレクトリにする。
・dllの取り込みは、プロジェクトのカレントディレクトリに対して行うようにする(.dllを直接置く)。
 ・取り込み時には、プロジェクトへの設定と.dllの読み込みのみ行う(この時点でスクリプトへの機能の取り込みは行わないようにする)。
 ・プロジェクトにdllリストの表示を追加する。
  ・dllリストには、プロジェクト用のカレントディレクトリにある.dllを全て表示する。
 ・プロジェクトのクリア機能を無くす。
・プロジェクト読み込み時は、新しいCapyCSSを立ち上げてプロジェクトファイルを読み込む。
・プロジェクト読み込み時は、カレントディレクトリをプロジェクトディレクトリに変更して、dllをまとめてインポートする。
・(運用)dll取り込みの後に自分でネームスペースを取り込んでスクリプトで使えるようにする。
・個別のcbs読み込み時にネームスペースをスクリプトに取り込む。
・dll取り外し時は、再起動を促すようにする。
・アセンブリ情報の見つからないスクリプトノードをエラーノードとして表現するようにする。
 ・エラーログを残す。

※NuGet関連の分離しました。

Orノードですべてfalseを渡した時にtrueが返る

Describe the bug
Orノードですべてfalseを渡した時にtrueが返る

To Reproduce
Steps to reproduce the behavior:

  1. コマンドウインドウを開く
  2. Program→Function→Logical→Or(IEnumerable,bool) : bool を配置する
  3. Sample に false, false, false を渡す
  4. true が返る

CallFile機能を拡張

CallFile機能を拡張子に関連付けられた実行ファイルを用いて呼び出すようにする。

ネームスペースを取り込んでもスクリプトが変更状態にならない。

Describe the bug
ネームスペースを取り込んでもスクリプトが変更状態にならない。

To Reproduce
Steps to reproduce the behavior:

  1. New Script で新しいスクリプトを作成する。
  2. NameSpace に任意のネームスペースを設定する。
  3. Import をクリックする。
  4. タイトルとタブのスクリプト名に「*」が付かない。

プロジェクトファイルのDLLパスが絶対パスになっている

Describe the bug
プロジェクトファイルのDLLパスが絶対パスになっている。

To Reproduce
Steps to reproduce the behavior:

  1. 任意のDLLを取り込む。
  2. プロジェクトディレクトリを任意の場所に移動する。
  3. プロジェクトファイルを読み込む。
  4. DLLの名前がグレーアウトされている。

二次元以上の配列を取り込み参照時にアサーションが発生する

Describe the bug
二次元以上の配列を取り込み参照時にアサーションが発生する。

To Reproduce
再現方法:

  1. 2次元以上の配列を持つ返し値か引数を持つメソッドを作成して取り込む。

Expected behavior
内部でアサーションが発生し、止まらないが処理が遅くなる。

Note
現状では、二次元以上の配列には対応しない。

型選択時の型制約の判定が正しく行われない

一先ず適当に書いているがそろそろ正しい処理に置き換えたい。
けれども、正しい判定処理が分からない…。
ジェネリックなパラメータを持つジェネリック型に対する型制約判定は、当面諦める前提。

プロジェクトと絡んだ新しいスクリプト及びスクリプト読み込み仕様の変更

プロジェクトを読み込んだ際に「New Script」ボタンを消す仕様を止めて、
プロジェクトを読み込んでいないときに「New Script」ボタンを押下するとプロジェクト外で新規スクリプトを作成。
プロジェクトを読み込んでいるときに「New Script」ボタンを押下するとプロジェクトに新しいスクリプトを追加。
プロジェクトを読み込んでいないときに「Load Script」ボタンを押下するとスクリプトを読み込む。
プロジェクトを読み込んでいるときに「Load Script」ボタンを押下するとプロジェクトに既存のスクリプトを追加。
という動きに変更する。

Taskに対応する

返り値がTaskでもノード化できるようにする。
取り敢えず同期して動かす。

型パラメーターの制約をより正確にする

ScriptImplement クラス内にある、
public static bool IsConstraint(Type genericType, Type target)
を改善する。

現状で入っている制約

  • new制約
  • クラス制約
  • 構造体制約
  • インターフェイス制約
  • 継承元制約

コマンドの検索で InvalidOperationException が出る

Describe the bug
コマンドで何度か検索していると例外が出る。

Note
検索用TreeViewの裏にあるTreeViewのコマンドで CanExecute が動いてしまっている為と思われる。→×
Project側のTreeViewに割り当てたコマンドの CanExecute が動いてしまっている。

Blazor へ移行

サーバーサイドで動くようにBlazorへ移行する。

  • WPFのロジックとの分離が出来ていない部分を分離する
  • 勘違いで実装しているコードを修正する(特にスレッド周り)
  • Blazorへ移行

INumber に対応

INumber がプレビュー機能でなく正式機能になったら対応する。

if(bool,Func<T>,Func<T>) : T 等実行時にエラーになるメソッドがある

Describe the bug
IF(bool,Func,Func) : T 等実行時にエラーになるメソッドがある

To Reproduce
Steps to reproduce the behavior:

  1. コマンドウインドウを開く
  2. Program→Function→Flow→if(bool,Func,Func) : T を選ぶ
  3. 配置する
  4. 呼び出すとメソッドが見つからないというエラーが発生する

ディスプレイが2つ以上ある場合に、エラーウインドウが異なる画面に表示される

Describe the bug
ディスプレイが2つ以上ある場合に、エラーウインドウが異なる画面に表示される。

To Reproduce
再現手順:

  1. CapyCSSを起動する
  2. 起動時に表示されたディスプレイとは異なるディスプレイにウインドウを移動する
  3. プロジェクトを作成する
  4. スクリプトを追加してプロジェクトを保存する
  5. プロジェクトにDLLを追加する
  6. 追加したスクリプトに追加したDLLを参照するnamespaseを取り込む
  7. DLLから取り込んだメソッドをスクリプトとして配置する
  8. スクリプトを保存する
  9. プロジェクトを保存しないまま終了する
  10. プロジェクトを読み込む
  11. 先程追加したスクリプトを開く

Expected behavior
エラーウインドウがCapyCSSの表示されているディスプレイとは違うディスプレイに表示される

Screenshots
image
image

dotnet を用いたスクリプトのビルド機能を追加する。

「Make .NET Project」ボタンを用意し、スクリプトをビルドする為のプロジェクト環境を作成する機能を提供する。
(「dotnet build」でビルドできるようにする)
実際のビルドは、ログ画面からコマンドを打ち込んでビルドする。

改めてNuGetに対応する

・NuGetのImport機能をプロジェクトへ追加する。
 ・プロジェクトにNuGetパッケージリストの表示を追加する。
   ・アップデート機能を追加する。
・CapyCSS起動時にnuget.exeを自動でアップデートするようにする。
 ・nuget.exeは、document下のCapyCSSフォルダに置くようにする。

※NuGetには、敢えて対応しないかもしれない。

マウスの位置に出るウインドウがマルチディスプレイのときは正しくないディスプレイに表示されるときがある。

Describe the bug
三枚目のディスプレイにメインウインドウを置いて、ウインドウを最大化してからマウスカーソル位置に表示されるウインドウを表示する操作を行うと、メインウインドウのあるディスプレイとは異なるディスプレイにウインドウが表示される。

Expected behavior
ウインドウの最大化を行うとウインドウの左上の座標を取れなくなるので、ディスプレイの座標をウインドウ座標として扱うことになるが、現状の作りではセカンダリディスプレイまでしか計算できていない。
正確なディスプレイ情報を得るように修正する必要がある。

System.Windows.Forms.Screen.FromRectangle

を使用する?

IAsyncResultを受け取るメソッドを取り込んでいる

Describe the bug
現在 Task や async に未対応だが返し値しかチェックされていない(引数のチェックも必要)。

To Reproduce
再現手順:

  1. コマンドウインドウを開く
  2. 「EndInvoke」で検索する

Expected behavior
IAsyncResult を引数で受け取るメソッドを配置できる。

Screenshots
image

Note

ValueTask
ValueTask<T>
IAsyncEnumerator<T>

も判定する必要がある。

2つ以上のdllのインポートができない

Describe the bug
2つ目のdllをインポートしようとすると落ちる。

To Reproduce
Steps to reproduce the behavior:

  1. New Projectでプロジェクトを作成する
  2. Import DLLで1つ目のdllをインポートする
  3. import DLLで2つ目のdllをインポートする
  4. 落ちる

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.