Zvýrazňovače syntaxe pre Javu
Zvýrazňovanie syntaxe sa zvyčajne robí na úrovni používateľského rozhrania, pretože výstup zvýrazňovača musí zodpovedať možnostiam média. Existuje však potreba univerzálnych zvýrazňovačov, ktoré nie sú viazané na žiadnu platformu užívateľského rozhrania alebo ktoré aspoň produkujú výstup, z ktorého sa dá odfiltrovať všetko platformovo špecifické. Tu hľadám takéto univerzálne zvýrazňovače, ktoré sa dajú použiť v Jave.
Je niekoľko situácií, kedy príde platformovo nezávislý zvýrazňovač vhod:
- Výstup zvýrazňovača niekedy vyžaduje dodatočné spracovanie.
- Zvýraznený kód môže byť uložený do cache na serveri, aby sa stránky načítali rýchlejšie.
- Aplikácia môže byť postavená na exotickej platforme užívateľského rozhrania.
- Zvýraznený kód v prehliadači sa môže interaktívne meniť, čo sa bije so zvýrazňovaním.
Prehľadal som veľa miest: syntax-highlighting a syntax-highlighter témy na GitHube, niekoľko dotazov na SO (1, 2, 3) a hľadal som aj na internete. Vyzerá to tak, že ľudia väčšinou používajú zvýrazňovače špecifické pre danú platformu, konkrétne Highlight.js v prehliadači, RSyntaxTextArea vo Swingu, a CodeView v Androide. Žiadny z nich sa nedá priamo adaptovať na univerzálny platformovo nezávislý zvýrazňovač.
Existuje niekoľko polomŕtvych a mŕtvych zvýrazňovačov v čistej Jave:
- Highlight.java - 2021, 25 jazykov
- Java Prettify - 2013, 28 jazykov
- JHighlight - 2022 (údržba), 2014 (podpora jazykov), 5 jazykov
- Jygments - 2016 (údržba), 2011 (podpora jazykov), 8 jazykov
Keďže zvýrazňovače v čistej Jave sú dosť chudobné, zvážme možnosti integrácie z iných jazykov:
- JavaScript/Node.js: Highlight.js (200+ jazykov)
- Python: Pygments (500+ jazykov, existuje zastaraná jython verzia)
- C++: Lexilla (100+ jazykov)
- Rust: syntect (používa Sublime definície, 160+ jazykov)
- Lua: Scintillua (120+ jazykov)
- CLI: pygmentize (súčasť Pygments, 500+ jazykov), bat (používa syntect, 160+ jazykov), clp (používa Scintillua, 120+ jazykov)
- čisté dáta: Sublime definície (formát, 160+ jazykov)
Kompromisy sú všade. Vyberte si, čo bude pre vás najmenšie utrpenie. Nie je až také ťažké napísať modernú Javy knižnicu na zvýraznenie syntaxe pomocou Scintilluy alebo Sublime definícií. Je to zaujímavý námet pre nový opensource projekt, ale ja teraz nemám čas, tak asi len narýchlo obalím pygmentize alebo niečo podobné. Dajte mi vedieť, ak napíšete riadnu Java knižnicu na zvýrazňovanie syntaxe.