Autor Téma: SynEdit a upravený "SynHighlighterSQL"  (Přečteno 254 krát)

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
SynEdit a upravený "SynHighlighterSQL"
« kdy: 18-06-2019, 14:20:52 »
Edit
Upresnenie dotazu: Potreboval by som využiť "SynHighlighterSQL.pas".
V ňom však doplniť rezervované slová. Najlepšie zameniť niektorý z prítomných dialektov SQL.
Využiť tiež kód súboru. Podľa potreby si ho aj doladiť.
Je to
  • v súlade s licenciou ?
  • technicky možné ? Bez potreby vždy zmenený zvýrazňovač vždy prehnať cez SynGen ?


« Poslední změna: 18-06-2019, 14:51:01 od miroB »

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SynEdit a upravený "SynHighlighterSQL"
« Odpověď #1 kdy: 18-06-2019, 22:07:27 »
Potreboval by som sa rozhodnúť medzi troma možnosťami:
  • RichEdit a vlastný tokenizér.
    V zásade funguje, len som uvažoval ísť viac do "štandardu"
  • SynEdit a vlastný tokenizér.
    Funguje výborne, okrem prípadu, že robím PageUp a spol. Vtedy GUTTER mení šírku a tým pádom editor preblikuje. Síce kozmetické, ale neprofesionálny dojem. Už nemám čas a nervy na ďalšie potenciálne "divnosti". Jasne, všetko sa dá vyriešiť. Lenže žerie to čas.
  • SynEdit a modifikovaný highlighter.
    Nedostal som povzbudivú odpoveď. Zrejme by som to zvládol, čo sa týka programovania, ale nesmel by v tom byť pre každé nové slovo SynGen. Čas na neoverené experimentovanie už nemám.
Poznámky:
  • Neviem prečo dnes program typu SynEdit nevyužíva superrýchle Tdictionary.
    Zrejme to je dôvod, neschopnosti dynamického pridávania nových rezervovaných slov. Napríklad formou Csv textu, či databázy.
  • Všimol som si, že Highlighter pre SQL, má zabudovanú v kóde veľmi peknú funkcionalitu. Tú by som potreboval prevziať a prispôsobiť. Kombináciou z viacerých SQL dialektov. Hrozí však, že pri každom novom slove (keď dorobím napríklad novú UDF), by bolo treba použiť SynGen a celý vylepšený kód, prácne vkladať do novej verzie pas. To bola hlavná otázka. Ak je odpoveď záporná, sú to zavreté dvere.
  • Mimochodom, RichEdit a TOM, sú tak rýchle, že pri každom novo vloženom písmene v editore, je možné spustiť tokenizér + vyfarbenie. Len som chcel prestúpiť na štandard a vyhnúť sa budúcim problémom, ktoré by potenciálne prišli. (Samozrejme dlhé držanie klávesy a podobné excesy mám ošetrené. Vtedy sa tokenizér nespustí.) Dokonca ani nemám ošetrené, že by sa vyfarbila len obrazovka. Text sa zafarbí komplet celý. Skúšam na poctivom SQL súbore s 1800 riadkami.
  • Tokenizér nie je žiadne orezávatko. Akceptuje 64 rôznych kategórií a stovky rezervovaných slov. Plus iné "custom" možnosti. Potenciálne aj tie budúce.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SynEdit a upravený "SynHighlighterSQL"
« Odpověď #2 kdy: 19-06-2019, 15:02:06 »
Z troch možností, sa skúma štvrtá TMS TAdvMemo:)
Predbežné výhody :
  • Vkladanie nových kľúčových slov je do StringListu !
    Môže byť dynamické, napríklad pri CreateForm.
  • Odpadá starosť s dodržaním licenčných podmienok SynEdit, pre prípad potreby modifikácie zdrojáku (SynHighlighterSQL.pas)
  • Property TAdvMemo.MemoSource, prepína aktivitu medzi viacerými otvorenými textami. Nie je treba priamo dolaďovať všetky otvorené AdvMemo. Stačí jedno.
  • Nehrozí prípadná nekompatibilita s inými TMS prvkami:)
  • "Improved High DPI support" April 1, 2019
  • Posledná aktualizácia komponentu December 6, 2018. Komponenta žije.
  • Môžem počítať s podporou TMS
Asi aj ďalšie..
Možno prídu aj starosti. Každopádne pre ďalšie úpravy, je zdroják TAdvMemo TMS za mňa lepšie čitateľný než SynEdit.


« Poslední změna: 19-06-2019, 15:07:01 od miroB »

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SynEdit a upravený "SynHighlighterSQL"
« Odpověď #3 kdy: 20-06-2019, 20:47:12 »
Vrátil som sa k RichEdit a ITextDocument.
Môžem vyfarbiť/zvýrazniť, čo ma napadne. Dvojklik na slovo, podfarbí všetky výskyty v dokumente. Párované zátvorky, regióny. Kombinácie slovných spojení a ďalšie.
V TMS TAdvMemo som dlho márne hľadal práve hromadné podfarbenie.
Mimochodom TMS ukladá slová do obyčajného StringListu. Napriek tomu je svižný a nestráca badateľne na SynEdit
SynEdit s tou jeho správu keywords: Vytvárať kvôli jednomu novému slovu nový Pas súbor.. Nemusím.
Pri využití riešenia tretej strany, by bolo treba, obetovať vlastnú analýzu textu, ktorú už dávno mám. Preto návrat do stavu pred cca mesiacom.. Videl som v tých editoroch aj pekné vlastnosti.. Snaha bola veľká.
« Poslední změna: 20-06-2019, 20:52:19 od miroB »

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SynEdit a upravený "SynHighlighterSQL"
« Odpověď #4 kdy: 21-06-2019, 01:25:47 »
SynEdit s tou jeho správu keywords: Vytvárať kvôli jednomu novému slovu nový Pas súbor.. Nemusím.

Pravda, nemusis :) Pro klicova slova vlastniho highlighteru si muzes vyrobit hash table (tzn. ze klicova slova nemusi byt fixni pri prekladu aplikace).
Aha, po tom som pátral. Pôvodne vyzerala na ideál kombinácia SynEdit + vlastný tokenizér. Tam zjavne nebolo treba SynGen. Lenže z toho začali vyskakovať kostlivci. V podobe bliknutia a pod. To veštilo ďalšie straty času.
Potom som bol ochotný akceptovať aj pôvodný princíp SynEditu a k nemu môj rozbor mať iba ako kontrolný.
Väčšinu potrieb SynEdit spĺňal. Po úmornej práci som to znovu videl ružovo. Konečná bola práve s obsahom slov. Tie tabulky s klučovými slovami. Presne kvoli nim som pôvodne začal toto vlákno.
Vlastne už roky sa SynEditu vyhýbam, kvôli zadrôtovaném pas, cez synGen.

Ak je treba vyriešiť niečo od základu, je to ťažké a zdĺhavé. Napr. z richEditora Highlighter.
Ovšem keď začínate s obrovským polotovarom (synEdit, advMemo) a neviete, kam to dospeje, je to ešte 10krát namáhavejšie. Áno, povedzme 60% ide za 5 minút, potom ďalších 20% za dlhé hodiny. No a 10% pred 90 je už hotové peklo. Posledných 10% som už nedal. Neisté a stresujúce. Teda pokiaľ vec potrebujete využiť do krajnosti, prípadne za hranicu bežného.
Hlavne, som si už vybral. RichEdit
Pre záujemcov, praktická ukážka ako ovládať RichEdit, cez ITextDomuent, omnoho rýchlejšie, než ponúka bežné Delphi.
Zdroják programu pre bleskové vyfarbenie slov v dokumente je v tejto téme:
https://forum.delphi.cz/index.php/topic,15903.msg97647/topicseen.html#msg97647
Hneď v prvom príspevku.

« Poslední změna: 21-06-2019, 01:35:42 od miroB »