встроенная функция PHP для выделения JavaScript? - PullRequest
2 голосов
/ 14 июля 2011

Есть ли какая-нибудь встроенная функция PHP как highlight_string (); , но для javascript?

Или, если нет, есть ли какая-либо функция PHP (самодельная) для этого?

РЕДАКТИРОВАТЬ: я хочу использовать функцию PHP, чтобы окрасить JavaScript

Ответы [ 8 ]

2 голосов
/ 28 июня 2014

Нет встроенной функции, но вместо использования библиотеки полного стека, просто чтобы выделить некоторый JavaScript, вы можете использовать эту единственную функцию:

<code>function format_javascript($data, $options = false, $c_string = "#DD0000", $c_comment = "#FF8000", $c_keyword = "#007700", $c_default = "#0000BB", $c_html = "#0000BB", $flush_on_closing_brace = false)
{

    if (is_array($options)) { // check for alternative usage
        extract($options, EXTR_OVERWRITE); // extract the variables from the array if so
    } else {
        $advanced_optimizations = $options; // otherwise carry on as normal
    }
    @ini_set('highlight.string', $c_string); // Set each colour for each part of the syntax
    @ini_set('highlight.comment', $c_comment); // Suppression has to happen as some hosts deny access to ini_set and there is no way of detecting this
    @ini_set('highlight.keyword', $c_keyword);
    @ini_set('highlight.default', $c_default);
    @ini_set('highlight.html', $c_html);

    if ($advanced_optimizations) { // if the function has been allowed to perform potential (although unlikely) code-destroying or erroneous edits
        $data = preg_replace('/([$a-zA-z09]+) = \((.+)\) \? ([^]*)([ ]+)?\:([ ]+)?([^=\;]*)/', 'if ($2) {' . "\n" . ' $1 = $3; }' . "\n" . 'else {' . "\n" . ' $1 = $5; ' . "\n" . '}', $data); // expand all BASIC ternary statements into full if/elses
    }

    $data = str_replace(array(') { ', ' }', ";", "\r\n"), array(") {\n", "\n}", ";\n", "\n"), $data); // Newlinefy all braces and change Windows linebreaks to Linux (much nicer!)
    $data = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $data); // Regex identifies all extra empty lines produced by the str_replace above. It is quicker to do it like this than deal with a more complicated regular expression above.
    $data = str_replace("<?php", "<script>", highlight_string("<?php \n" . $data . "\n?>", true));

    $data = explode("\n", str_replace(array("<br />"), array("\n"), $data));

# experimental tab level highlighting
    $tab = 0;
    $output = '';

    foreach ($data as $line) {
        $lineecho = $line;
        if (substr_count($line, "\t") != $tab) {
            $lineecho = str_replace("\t", "", trim($lineecho));
            $lineecho = str_repeat("\t", $tab) . $lineecho;
        }
        $tab = $tab + substr_count($line, "{") - substr_count($line, "}");
        if ($flush_on_closing_brace && trim($line) == "}") {
            $output .= '}';
        } else {
            $output .= str_replace(array("{}", "[]"), array("<span style='color:" . $c_string . "!important;'>{}</span>", "<span style='color:" . $c_string . " !important;'>[]</span>"), $lineecho . "\n"); // Main JS specific thing that is not matched in the PHP parser
        }

    }

    $output = str_replace(array('?php', '?&gt;'), array('script type="text/javascript">', '&lt;/script&gt;'), $output); // Add nice and friendly <script> tags around highlighted text

    return '<pre id="code_highlighted">' . $output . "
"; }

Использование:

echo format_javascript('console.log("Here is some highlighted JS code using a single function !");') ;

Кредит: http://css -tricks.com / highlight-code-with-php /
Демо: http://css -tricks.com / примеры / HighlightJavaScript /

2 голосов
/ 14 июля 2011

Я так понимаю, вы хотите использовать синтаксис Highligher, написанный на PHP.Этот (Геши) работал для меня в прошлом:

http://qbnz.com/highlighter/

2 голосов
/ 14 июля 2011

Я имел большой успех с GeSHi . Простой в использовании и интеграции в ваше приложение, он поддерживает много языков.

1 голос
/ 13 сентября 2013

Самый быстрый способ - вы можете использовать PHP-функцию "highlight_string" с небольшим фокусом (захватить вывод функции и удалить ведущие / конечные теги PHP):

$source = '... some javascript ...';

// option 1 - pure JS code
$htmlJs = highlight_string('<?php '.$source.' ?>', true);
$htmlJs = str_replace(array('&lt;?php&nbsp;', '&nbsp;?&gt;'), array('', ''), $htmlJs);

// option 2 - when mixing up with PHP code inside of JS script
$htmlJs = highlight_string('START<?php '.$source.' ?>END', true);
$htmlJs = str_replace(array('START<span style="color: #0000BB">&lt;?php&nbsp;</span>', '&nbsp;?&gt;END'), array('', ''), $htmlJs);
// check PHP INI setting for "highlight.keyword" (#0000BB) - http://www.php.net/manual/en/misc.configuration.php#ini.syntax-highlighting
1 голос
/ 14 июля 2011

Более здесь вы можете найти отличную библиотеку, которая позволяет выделять синтаксис на большом количестве языков, используя javascripts и класс css.

Для этого нет встроенной функции php, поэтому либо вы должны использовать существующие библиотеки, либо вам нужно что-то написать самостоятельно.

1 голос
/ 14 июля 2011

Нет.

Но есть много библиотек javascript, которые выделяют синтаксис на нескольких языках, от сценариев bash до php и javascript.

например, например, snippet (JQuery) или jQuery.Syntax (мой любимый)

1 голос
/ 14 июля 2011

Да, функция PHP highlight_string () является встроенной функцией PHP для PHP.

0 голосов
/ 14 июля 2011

Ну, хорошая информация здесь. Вот еще один приятный: http://code.google.com/p/google-code-prettify/

...