PHP 中的另一個語法螢光筆旨在盡可能地擴展和易於使用,但同時也要考慮到效能。
您可以在 https://KeyLighter.kadet.net/ 上使用最新版本進行現場試用。
「 KeyLighter 」這個名字的靈感來自於攝影和電影攝影中的Key Light概念。
主光是攝影師、攝影師、燈光攝影師或其他場景作曲家在照明設置中使用的第一個、通常也是最重要的光。主光的目的是要突顯主體的形狀和尺寸。
KeyLighter應該為程式碼做同樣的事情。
$ composer require kadet/ KeyLighter
要使用KeyLighter您只需要 PHP 7.3 或更高版本,無需特殊擴充。
可以將KeyLighter安裝為全域作曲家庫
$ composer global require kadet/ KeyLighter
然後你可以使用內建的簡單 cli 來突出顯示應用程式:
$ KeyLighter [command = highlight] [-l | --language [LANGUAGE]] [-f | --format [FORMAT]] [-d | --debug [DEBUG]] [--] < path > ...
如果您想通過管道進入KeyLighter只需指定php://stdin
作為路徑。您可以使用list
指令查看所有可用指令,並使用--help
參數取得詳細協助。您不必明確指定highlight
命令。
您在 Windows 上使用 PowerShell 嗎?涼爽的! KeyLighter附帶整合的 PowerShell 模組,讓 CLI 的使用更加方便。只需導入模組(例如在設定檔中),您就可以開始了。
PS > Import-Module " ${ env: APPDATA} Composervendorkadet KeyLighter bin KeyLighter .psd1 "
若要使用自動完成功能,您需要 PowerShell v5(隨 Windows 10 一起提供)或安裝 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 );
您可以在此處找到所有可用的語言和格式化程式。
KeyLighter最初被設計為我自己使用的 CLI 螢光筆,但後來我決定它應該能夠產生當前支援的任何可能的輸出:
KadetHighlighterFormatterCliFormatter
它甚至可以設定樣式,預設樣式儲存在StylesCliDefault.php
中,但您可以將附加參數傳遞到建構函數中:
new Kadet Highlighter Formatter CliFormatter ([
' string ' => [ ' color ' => ' green ' ],
' keyword ' => [ ' color ' => ' yellow ' ],
...
])
KadetHighlighterFormatterHtmlFormatter
每個標記都放置在它自己的span
內,並且類別都有前綴,因此可以輕鬆地使用 css 對其進行樣式設置,並且不應幹擾任何現有的類
< span class =" kl-variable " > $maxOption </ span >
pre > span . kl-variable { color : # F7750D ; }
編寫自己的格式化程式很容易。文檔即將推出。
有些標記在某些上下文中有效,有些則無效。該庫是上下文相關的,您可以定義它們何時有效。
在這種情況下,上下文僅意味著“其他令牌內部”,例如,假設string
令牌定義為從“到下一個”的所有內容,並且keyword
定義為“sit”子字串。
↓ 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
正如您所看到的, keyword
位於string
內部,因此無效,應將其刪除。您可以定義僅在某些上下文中有效的令牌,或在其他上下文中無效的令牌。
哦,令牌名稱級聯,這意味著string.single
是string
,但string
不一定是string.single
。
可以使用新語言輕鬆擴充KeyLighter
,更詳細的文件即將推出。
例如 XML 定義如下圖所示:
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 ' ]
];
}
}
我會盡力寫出盡可能多的定義,但歡迎任何 PR。
多種語言可以同時使用, html裡面的css或js , sql裡面
php等。 KeyLighter可以毫無問題地處理並突出顯示嵌入式語言。
儘管它不應該是 PHP 中最快的程式碼螢光筆,但它仍然相當快,比 GeSHi 快 2 倍以上。
KeyLighter使用phpunit
進行測試:
$ ./vendor/bin/phpunit
還有一些事情要做,你可以在 trello 上找到所有內容。
有關詳細信息,請參閱 CONTRIBUTING.md。
對於 Maciej、Maciej 和 Monika 的所有支持,也是道義上的。