Dobrý den. Nabízím možnost nebo námět na skriptování pro PSPad...
Jedna možnost je jednodušší: - Plovoucí okno s editací scriptu a volbou interpretu - Možnosti Input: Celý text, Selection, None - Možnosti Output: Náhrada celého textu, Náhrada selection [color=#808080](tedy vložit na pozici kurzoru)[/color], Externí viewer, Uložit do souboru (viz http://semi.gurroa.cz/Clpx640448_Script.png ) Používal jsem na to kdysi gawk.exe, nyní mám vlastní Eval.exe ... Leckdo může mít další command-line text-processor... Možností využití je nepřeberně... (Zde v příloze jednoduchá ukázka, kde ze schránky nabere HTML fragment a vloží z něj seznam všech adres iframe...) Script se uloží do temp-souboru, spustí se externí program s parametrem toho scriptu, jako "pipe" na vstupu má dle výběru, a do "pipe" stdout na výstup to něco vypíše a to se použije... Když vrátí chybový kód a žádný výstup, zobrazí se v dialogu výstup z druhé "pipe" stderr... [color=#808080](tedy jen prvních X=500? byte...)[/color] [color=#808080](Nemělo by to být složité, ale v případě potřeby to mohu dodat i jako unitu v pascalu...)[/color] Editor [color=#808080](zde PSPad)[/color] někde v registry nebo jinde uchovává seznam scriptů, je tam možnost zadat název a uložit a později vybírat z combo-boxu... [color=#808080](Pokud script změním, neukládá se automaticky, ale na vyžádání tlačítkem... Někdy ten script podle potřeby upravím, ale uložený je základní template...)[/color] Můj Eval.exe včetně zdrojáků v Delphi [color=#808080](ale nepůjdou vám asi zkompilovat, ale jsou třeba jako reference možných funkcí a objektů)[/color] je [url=http://semi.gurroa.cz/AltUtil/Eval.zip]http://semi.gurroa.cz/AltUtil/Eval.z ip[/url] Můžu z toho vybrat nějakou menší package pro redistribuci... Můžete to šířit také, dle libosti... [color=#808080](Jako základ stačí samotné Eval.exe, má to 1.4Mb a šlo by to UPX kompresovat... Jsou k tomu další možné moduly na leccos, od grafiky, vědeckých výpočtů a databází až po network a procesy...)[/color] Externí proces má výhodu, že když zkolabuje, tak to neshodí ten editor, který to spouští... [color=#808080](A je tam vestavěné, že když to do 60s není hotové, tak se to zeptá, jestli se to má přerušit, nebo jestli chci dál čekat...)[/color] ----- Druhá možnost by byla fajnovější, ale je to pak specifické na jeden typ scriptu: Nabízím to jako DLL modul EvalScript.dll, má to relativně jednoduchý interface na kompilování scriptu a na jeho spouštění, ale musel byste k tomu zřejmě udělat nějaké také asi jednoduché interface na objekt toho Editoru, funkce a property SelStart, SelLength, LineCount, Lines[i], Text, SelText, atd... type IEvalObj=interface(IUnknown) function CallFunc(const FuncName: String8; var ResVar: Variant; Args: PEvalNode): Boolean; function GetProp(const PropName: String8; var ResVar: Variant; IndexArg: PEvalNode): Boolean; function SetProp(const PropName: String8; const Value: Variant; IndexArg: PEvalNode): Boolean; function Control(Code: Longint; Param: Pointer): HResult; end; Můj EvalScript je dost kompatibilní s javascriptem, akorát je case-insensitive a musí se většinou psát := pro přiřazení... Zároveň to umí i pascal syntaxi, je tam auto-detekce... K ukázce na obrázku, #f je zkratka function, #r je zkratka return, L(...) je jako StdOut.WriteLineFmt(...) Další případ scriptu... Máte tam User convertors/Unicode entity... Ale řečtinu a hebrejštinu a azbuku to asi neumí... //var S:=StdIn.toString(); var S:=Trim(ClipBoard.WText), S2:=''; for(p=1;p<=length(S);p++){ var C:=S[p], N:=ord(C); S2 += (N>127) ? Fmt('&#x%x;',N) : C; } L(S2); Ze streamu StdIn by ten script zpracovával "selection" z Editoru, ale tenhle případ mám třeba na vkládání slov do html z Firefoxu z online slovníku přes schránku... Tohle by bylo efektivnější pro více řádek na vstupu: StdIn.CodePage:=utf8; StdIn.EnumLines(#f(S){var S2:='',p,C,N; UpFor(p,1,length(S),{S2+=((N:=ord(C:=S[p]))>127)?Fmt('&#x%x;',N):C}); L(S2)}); atd... -- <https://forum.pspad.com/read.php?1,73966,73966> PSPad freeware editor https://www.pspad.com
