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 的所有支持,也是道义上的。