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

Odpovedet emailem