在Windows上,pygmps代码中的行号在xampp中突出显示

2024-04-29 14:46:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在windows上配置了xampp来使用python2.7和Pygments。我的php代码在网站上的Pygments中被正确地突出显示。代码有颜色、跨元素、类。在

这就是它的样子:

enter image description here

但我无法得到行号。在

正如我读过的教程一样,它依赖于python脚本中的linenos值。该值应为tableinline或{}或{}。在

但这对我不起作用。我还是给出了同样的最终代码

<!doctype html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="gh.css">
</head>
<body>
<div class="highlight highlight-php"><pre><code><span class="nv">$name</span> <span class="o">=</span> <span class="s2">"Jaś"</span><span class="p">;</span>
<span class="k">echo</span> <span class="s2">"Zażółć gęślą jaźń, "</span> <span class="o">.</span> <span class="nv">$name</span> <span class="o">.</span> <span class="s1">'.'</span><span class="p">;</span>
<span class="k">echo</span> <span class="s2">"hehehe@jo.io"</span><span class="p">;</span>
</code></pre></div>
</html>

如何添加行号?我把网站的两个文件放在下面:

索引.py

^{pr2}$

索引.php

<?php
define('MB_WPP_BASE', dirname(__FILE__));
function mb_pygments_convert_code($matches)
{
    $pygments_build = MB_WPP_BASE . '/index.py';
    $source_code = isset($matches[3]) ? $matches[3] : '';
    $class_name = isset($matches[2]) ? $matches[2] : '';

    // Creates a temporary filename
    $temp_file = tempnam(sys_get_temp_dir(), 'MB_Pygments_');

    // Populate temporary file
    $filehandle = fopen($temp_file, "w");
    fwrite($filehandle, html_entity_decode($source_code, ENT_COMPAT, 'UTF-8'));
    fclose($filehandle);

    // Creates pygments command
    $language = $class_name ? $class_name : 'guess';
    $command = sprintf('C:\Python27/python %s %s %s', $pygments_build, $language, $temp_file);

    // Executes the command
    $retVal = -1;
    exec($command, $output, $retVal);
    unlink($temp_file);

    // Returns Source Code
    $format = '<div class="highlight highlight-%s"><pre><code>%s</code></pre></div>';

    if ($retVal == 0)
        $source_code = implode("\n", $output);
    $highlighted_code = sprintf($format, $language, $source_code);
    return $highlighted_code;
}

// This prevent throwing error
libxml_use_internal_errors(true);

// Get all pre from post content
$dom = new DOMDocument();
$dom->loadHTML(mb_convert_encoding('
<pre class="php">
<code>
$name = "Jaś";
echo "Zażółć gęślą jaźń, " . $name . \'.\';
echo "<address>hehehe@jo.io</address>";
</code>
</pre>', 'HTML-ENTITIES', "UTF-8"), LIBXML_HTML_NODEFDTD);
$pres = $dom->getElementsByTagName('pre');

foreach ($pres as $pre) {
    $class = $pre->attributes->getNamedItem('class')->nodeValue;
    $code = $pre->nodeValue;

    $args = array(
        2 => $class, // Element at position [2] is the class
        3 => $code // And element at position [2] is the code
    );

    // convert the code
    $new_code = mb_pygments_convert_code($args);

    // Replace the actual pre with the new one.
    $new_pre = $dom->createDocumentFragment();
    $new_pre->appendXML($new_code);
    $pre->parentNode->replaceChild($new_pre, $pre);
}
// Save the HTML of the new code.
$newHtml = "";
foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $child) {
    $newHtml .= $dom->saveHTML($child);
}

?>
<!doctype html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="gh.css">
</head>
<body>
<?= $newHtml ?>
</body>
</html>

谢谢你


Tags: thenamenewpygmentshtmlcodepretemp
2条回答

解决了!在

nowrap

If set to True, don’t wrap the tokens at all, not even inside a tag. This disables most other options (default: False).

http://pygments.org/docs/formatters/#HtmlFormatter

读取文件时,请尝试readlines

f = open(filename, 'rb')
code = f.readlines()
f.close()

这样做会得到多行:

^{pr2}$

建议: 更多python打开文件的方法是:

with open(filename, 'rb') as f:
    code = f.readlines()

就这样,python上下文管理器会为您关闭这个文件。在

相关问题 更多 >