Подсветка синтаксиса в консоли на PHP
Создание PHP скрипта, который форматирует код для вывода в консоль, может быть полезным для целей отладки и логирования. Ниже приведен простой PHP скрипт, который форматирует код с подсветкой синтаксиса для вывода в консоль. Этот скрипт использует ANSI-коды для добавления цветов к различным частям кода.
CodeFormatter.php
<?php
class CodeFormatter
{
// ANSI-коды для цветов
private const RESET = "\033[0m";
private const RED = "\033[31m";
private const GREEN = "\033[32m";
private const YELLOW = "\033[33m";
private const BLUE = "\033[34m";
private const MAGENTA = "\033[35m";
private const CYAN = "\033[36m";
private const WHITE = "\033[37m";
// Ключевые слова для подсветки
private const KEYWORDS = [
'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue',
'declare', 'default', 'do', 'else', 'elseif', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch',
'endwhile', 'extends', 'final', 'finally', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements',
'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'namespace', 'new', 'or', 'private',
'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try',
'use', 'var', 'while', 'xor', 'yield'
];
/**
* Форматирование и вывод кода с подсветкой синтаксиса
*
* @param string $code
*/
public static function formatCode(string $code): void
{
$lines = explode(PHP_EOL, $code);
foreach ($lines as $line) {
self::printFormattedLine($line);
}
}
/**
* Вывод одной строки с подсветкой синтаксиса
*
* @param string $line
*/
private static function printFormattedLine(string $line): void
{
$tokens = token_get_all('<?php ' . $line);
array_shift($tokens); // Удаление токена открывающего тега PHP
foreach ($tokens as $token) {
if (is_array($token)) {
[$id, $text] = $token;
switch ($id) {
case T_COMMENT:
case T_DOC_COMMENT:
echo self::GREEN . $text . self::RESET;
break;
case T_STRING:
if (in_array(strtolower($text), self::KEYWORDS, true)) {
echo self::BLUE . $text . self::RESET;
} else {
echo self::YELLOW . $text . self::RESET;
}
break;
case T_VARIABLE:
echo self::CYAN . $text . self::RESET;
break;
default:
echo $text;
}
} else {
echo $token;
}
}
echo PHP_EOL;
}
}
Пример использования
Вы можете использовать класс CodeFormatter для форматирования и вывода PHP кода с подсветкой синтаксиса. Вот пример:
<?php
require 'CodeFormatter.php';
$code = <<<'PHP'
<?php
function greet($name) {
echo "Hello, $name!";
}
// Вызов функции
greet("World");
PHP;
CodeFormatter::formatCode($code);
Объяснение
- Класс CodeFormatter определяет константы для ANSI-кодов различных цветов.
- Он определяет список ключевых слов PHP для подсветки.
- Метод formatCode принимает строку PHP кода, разбивает её на строки и выводит каждую строку с подсветкой синтаксиса.
- Метод printFormattedLine использует функцию token_get_all для токенизации кода и применения цветов на основе типа токена.
Этот скрипт предоставляет базовую подсветку синтаксиса для PHP кода в консоли. Вы можете расширить его для поддержки большего количества типов токенов и языков по мере необходимости.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.