Otro resaltador de sintaxis más en PHP destinado a ser tan extensible y fácil de usar como es posible, pero teniendo en cuenta el rendimiento.
Puedes probarlo en vivo con la versión más reciente en https://KeyLighter.kadet.net/.
El nombre " KeyLighter " está inspirado en el concepto Key Light en fotografía y cinematografía.
La luz clave es la primera y generalmente más importante luz que un fotógrafo, director de fotografía, camarógrafo de iluminación u otro compositor de escenas utilizará en una configuración de iluminación. El propósito de la luz clave es resaltar la forma y dimensión del sujeto.
Se supone que KeyLighter hace lo mismo: con el código.
$ composer require kadet/ KeyLighter
Para usar KeyLighter sólo necesitas PHP 7.3 o posterior, no se requieren extensiones especiales.
Es posible instalar KeyLighter como una biblioteca de compositores global
$ composer global require kadet/ KeyLighter
Luego puedes usar la aplicación incorporada de resaltado cli simple:
$ KeyLighter [command = highlight] [-l | --language [LANGUAGE]] [-f | --format [FORMAT]] [-d | --debug [DEBUG]] [--] < path > ...
Si desea conectarse a KeyLighter simplemente especifique php://stdin
como ruta. Puede utilizar el comando list
para ver todos los comandos disponibles y el argumento --help
para obtener ayuda detallada. No es necesario especificar explícitamente el comando highlight
.
¿Estás usando PowerShell en Windows? ¡Fresco! KeyLighter viene con un módulo PowerShell integrado que mejora aún más el uso de CLI. Simplemente importe el módulo (por ejemplo, en el perfil) y estará listo para comenzar.
PS > Import-Module " ${ env: APPDATA} Composervendorkadet KeyLighter bin KeyLighter .psd1 "
Para utilizar las funciones de autocompletar, necesitará PowerShell v5 (viene con Windows 10) o instalar el módulo 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 );
Puede encontrar todos los idiomas disponibles aquí y los formateadores aquí.
KeyLighter se diseñó originalmente como resaltador CLI para mi propio uso, pero luego decidí que debería poder generar cualquier salida posible, actualmente compatible:
KadetHighlighterFormatterCliFormatter
Incluso se le puede aplicar estilo, los estilos predeterminados se almacenan en StylesCliDefault.php
, pero puedes simplemente pasar un argumento adicional a un constructor:
new Kadet Highlighter Formatter CliFormatter ([
' string ' => [ ' color ' => ' green ' ],
' keyword ' => [ ' color ' => ' yellow ' ],
...
])
KadetHighlighterFormatterHtmlFormatter
Cada token se coloca dentro de su propio span
y las clases tienen un prefijo para que pueda diseñarse fácilmente con CSS y no debería interferir con ninguna de sus clases existentes.
< span class =" kl-variable " > $maxOption </ span >
pre > span . kl-variable { color : # F7750D ; }
Es fácil escribir sus propios formateadores. La documentación estará disponible próximamente.
Algunas fichas son válidas en algunos contextos, otras no. Esta biblioteca es sensible al contexto y puede definir cuándo son válidas.
En este caso, contexto significa simplemente "dentro de otro token", por ejemplo, supongamos que el token string
se define como todo desde "hasta el siguiente" y keyword
se define como la subcadena '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
Como puede ver, keyword
está dentro de string
y, por lo tanto, no es válida y debe eliminarse. Puede definir tokens válidos sólo en algún contexto o no válidos en otro.
Ah, y los nombres de los tokens caen en cascada, significa que string.single
es string
, pero string
no necesariamente es string.single
.
Es posible ampliar fácilmente KeyLighter
con nuevos idiomas; próximamente habrá documentación más detallada.
Por ejemplo, la definición XML tiene este aspecto:
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 ' ]
];
}
}
Intentaré escribir tantas definiciones como pueda, pero cualquier RP es bienvenido.
Se pueden usar muchos lenguajes simultáneamente, css o js dentro de html , sql en
php y así sucesivamente. KeyLighter puede manejar y resaltar idiomas integrados sin ningún problema.
Aunque no se suponía que fuera el resaltador de código más rápido en PHP, sigue siendo bastante rápido, más de 2 veces más rápido que GeSHi.
KeyLighter usa phpunit
para realizar pruebas:
$ ./vendor/bin/phpunit
Todavía quedan algunas cosas por hacer, puedes encontrarlas todas en Trello.
Consulte CONTRIBUTING.md para obtener más detalles.
Para Maciej, Maciej y Monika por todo el apoyo, moral también.