Penyorot Sintaks lainnya di PHP dimaksudkan agar dapat diperluas dan semudah mungkin digunakan, namun dengan mempertimbangkan kinerja.
Anda dapat mencobanya langsung dengan versi terbaru di https://KeyLighter.kadet.net/.
Nama " KeyLighter " terinspirasi dari konsep Key Light dalam fotografi dan sinematografi.
Lampu utama adalah lampu pertama dan biasanya terpenting yang akan digunakan oleh fotografer, sinematografer, juru kamera pencahayaan, atau komposer pemandangan lainnya dalam pengaturan pencahayaan. Tujuan dari key light adalah untuk menyorot bentuk dan dimensi subjek.
KeyLighter seharusnya melakukan hal yang sama - untuk kode.
$ composer require kadet/ KeyLighter
Untuk menggunakan KeyLighter Anda hanya memerlukan PHP 7.3 atau lebih baru, tidak diperlukan ekstensi khusus.
KeyLighter dapat diinstal sebagai perpustakaan komposer global
$ composer global require kadet/ KeyLighter
Kemudian Anda dapat menggunakan aplikasi penyorotan cli sederhana bawaan:
$ KeyLighter [command = highlight] [-l | --language [LANGUAGE]] [-f | --format [FORMAT]] [-d | --debug [DEBUG]] [--] < path > ...
Jika Anda ingin menyalurkan ke KeyLighter cukup tentukan php://stdin
sebagai jalur. Anda dapat menggunakan perintah list
untuk melihat semua perintah yang tersedia, dan argumen --help
untuk bantuan mendetail. Anda tidak perlu menentukan perintah highlight
secara eksplisit.
Anda menggunakan PowerShell di Windows? Dingin! KeyLighter hadir dengan modul PowerShell terintegrasi yang membuat penggunaan CLI menjadi lebih baik. Cukup impor modul (Misalnya di profil), dan Anda siap berangkat.
PS > Import-Module " ${ env: APPDATA} Composervendorkadet KeyLighter bin KeyLighter .psd1 "
Untuk menggunakan fitur pelengkapan otomatis Anda memerlukan PowerShell v5 (Dilengkapi dengan windows 10) atau menginstal Modul TabExpansion++.
use Kadet Highlighter Language ;
echo Kadet Highlighter highlight ( $ source , new Language Php (), $ formatter );
// or
echo Kadet Highlighter KeyLighter :: get ()-> highlight ( $ source , new Language Php (), $ formatter );
// or
$ KeyLighter = new Kadet Highlighter KeyLighter ([options]);
echo $ KeyLighter -> highlight ( $ source , new Language Php (), $ formatter );
Anda dapat menemukan semua bahasa yang tersedia di sini dan pemformat di sini.
KeyLighter awalnya dirancang sebagai penyorot CLI untuk penggunaan saya sendiri, tetapi kemudian saya memutuskan bahwa itu harus dapat menghasilkan keluaran apa pun yang mungkin, yang saat ini didukung:
KadetHighlighterFormatterCliFormatter
Bahkan bisa ditata, gaya default disimpan di StylesCliDefault.php
, tetapi Anda bisa meneruskan argumen tambahan ke konstruktor:
new Kadet Highlighter Formatter CliFormatter ([
' string ' => [ ' color ' => ' green ' ],
' keyword ' => [ ' color ' => ' yellow ' ],
...
])
KadetHighlighterFormatterHtmlFormatter
Setiap token ditempatkan di dalam span
sendiri dan kelas diberi awalan sehingga dapat dengan mudah ditata dengan css dan tidak mengganggu kelas mana pun yang ada
< span class =" kl-variable " > $maxOption </ span >
pre > span . kl-variable { color : # F7750D ; }
Sangat mudah untuk menulis formatter Anda sendiri. Dokumentasi segera hadir.
Beberapa token valid dalam beberapa konteks, ada pula yang tidak. Pustaka ini peka terhadap konteks, dan Anda dapat menentukan kapan pustaka tersebut valid.
Dalam hal ini, konteks berarti hanya "di dalam token lain", misalnya mari kita asumsikan bahwa token string
didefinisikan sebagai segala sesuatu dari " hingga berikutnya " dan keyword
didefinisikan sebagai substring 'duduk'.
↓ string:start ↓ keyword : start
"Lorem ipsum dolor sit amtet"
keyword: end ↑ ↑ string: end
Token tree :
Token . name Token . pos
-- -- -- -- -- -- -- -- -- -- -- -- -- -- --
string : start 0
keyword: start 21
keyword: end 23
string: end 30
Jadi seperti yang Anda lihat keyword
ada di dalam string
, dan karenanya tidak valid dan harus dihapus. Anda dapat menentukan token hanya valid dalam konteks tertentu, atau tidak valid dalam konteks lain.
Oh, dan nama token berjenjang, artinya string.single
adalah string
, tetapi string
belum tentu string.single
.
KeyLighter
dapat diperluas dengan mudah dengan bahasa baru, dokumentasi yang lebih rinci akan segera hadir.
Misalnya definisi XML terlihat seperti ini:
class Xml extends GreedyLanguage
{
private const IDENTIFIER = ' (?P<namespace>[w.-]+:)?(?P<name>[w.-]+) ' ;
/**
* Tokenization rules
*/
public function setupRules ()
{
$ this -> rules -> addMany ([
' tag.open ' => [
new OpenRule ( new RegexMatcher ( ' /(<[w.-]+)[:/>:s]/ ' )),
new CloseRule ( new SubStringMatcher ( ' > ' ), [ ' context ' => [ ' !string ' , ' !comment ' ]])
],
' tag.close ' => new Rule ( new RegexMatcher ( ' /(</ ' . self :: IDENTIFIER . ' >)/ ' )),
' symbol.tag ' => new Rule ( new RegexMatcher ( ' /< \ /? ' . self :: IDENTIFIER . ' / ' , [
' name ' => Token:: NAME ,
' namespace ' => ' $.namespace '
]), [ ' context ' => [ ' tag ' , ' !string ' ]]),
' symbol.attribute ' => new Rule ( new RegexMatcher ( ' / ' . self :: IDENTIFIER . ' =/ ' , [
' name ' => Token:: NAME ,
' namespace ' => ' $.namespace '
]), [ ' context ' => [ ' tag ' , ' !string ' ]]),
' constant.entity ' => new Rule ( new RegexMatcher ( ' /(&(?:#d+|[a-z])+;)/si ' )),
' comment ' => new Rule ( new CommentMatcher ( null , [[ ' <!-- ' , ' --> ' ]])),
' string ' => CommonFeatures:: strings ([ ' single ' => ''' , ' double ' => ' " ' ], [ ' context ' => [ ' tag ' ]]),
]);
}
/** {@inheritdoc} */
public function getIdentifier ()
{
return ' xml ' ;
}
public static function getMetadata ()
{
return [
' name ' => [ ' xml ' ],
' mime ' => [ ' application/xml ' , ' text/xml ' ],
' extension ' => [ ' *.xml ' ]
];
}
}
Saya akan mencoba menulis definisi sebanyak yang saya bisa, tetapi PR apa pun dipersilakan.
Banyak bahasa yang dapat digunakan secara bersamaan, css atau js di dalam html , sql di
php dan sebagainya. KeyLighter dapat menangani dan menyorot bahasa yang disematkan tanpa masalah apa pun.
Meskipun ini bukan penyorot kode tercepat di PHP, namun tetap cukup cepat, 2x lebih cepat dibandingkan GeSHi.
KeyLighter menggunakan phpunit
untuk pengujian:
$ ./vendor/bin/phpunit
Masih ada beberapa hal yang harus dilakukan, Anda dapat menemukan semuanya di trello.
Lihat KONTRIBUSI.md untuk detailnya.
Untuk Maciej, Maciej dan Monika atas segala dukungannya, moral juga.