PHP のもう 1 つの構文ハイライターは、パフォーマンスを念頭に置いて、拡張性と使いやすさを最大限に考慮しています。
https://KeyLighter.kadet.net/ で最新バージョンをライブで試すことができます。
「 KeyLighter 」という名前は、写真や映画のキーライトのコンセプトからインスピレーションを得ています。
キー ライトは、写真家、撮影監督、照明カメラマン、またはその他のシーン構成者が照明セットアップで使用する最初の、そして通常は最も重要なライトです。キーライトの目的は、被写体の形状と次元を強調することです。
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
help 引数を使用すると詳細なヘルプが表示されます。 highlight
コマンドを明示的に指定する必要はありません。
Windows で PowerShell を使用していますか?いいね! KeyLighter CLI の使用をさらに向上させる統合 PowerShell モジュールが付属しています。モジュールを (たとえばプロファイル内で) インポートするだけで準備完了です。
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 を参照してください。
マチェジ、マチェジ、モニカのすべてのサポート、道徳的にも。