Discuz7使用syntaxhighlighter_2.0.320实现代码高亮
一、修改./templates/default/discuzcode.htm文件
在function tpl_codedisp($discuzcodes, $code) 函数前增加如下函数
function tpl_codecsh($discuzcodes, $code, $lang) {
}–>
<!–{block return}–><code id="code$discuzcodes[codecount]"><pre class="brush: $lang">$code</pre></code><!–{/block}–>
<!–{eval return $return;}–>
<!–{eval
}
二、修改./templates/你的风格/header.htm
在</head>前添加:
<link href="plugins/syntaxhighlighter/styles/shCore.css" type="text/css" rel="stylesheet" />
<link href="plugins/syntaxhighlighter/styles/shThemeDefault.css" type="text/css" rel="stylesheet" />
<script src="plugins/syntaxhighlighter/src/shCore.js" type="text/javascript"></script>
<script class="javascript">
SyntaxHighlighter.config.clipboardSwf = 'plugins/syntaxhighlighter/scripts/clipboard.swf';
</script>
三、修改./templates/你的风格/footer.htm
在</body>前添加:
<script class="javascript" src="plugins/syntaxhighlighter/src/shCore.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushAS3.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushBash.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushCpp.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushCSharp.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushCss.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushDelphi.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushDiff.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushGroovy.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushJava.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushJavaFX.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushJScript.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushPerl.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushPhp.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushPlain.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushPowerShell.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushPython.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushRuby.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushScala.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushSql.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushVb.js"></script>
<script class="javascript" src="plugins/syntaxhighlighter/scripts/shBrushXml.js"></script>
<script class="javascript">
SyntaxHighlighter.config.clipboardSwf = 'plugins/syntaxhighlighter/scripts/clipboard.swf';
SyntaxHighlighter.config.stripBrs=true;
SyntaxHighlighter.all();
</script>
四、修改./include/discuzcode.func.php
在function codedisp($code)函数下面添加如下函数
function codedpdisp($code, $lang) {
global $discuzcodes;
$discuzcodes['pcodecount']++;
$code = htmlspecialchars(str_replace('//"', '"', preg_replace("/^[/n/r]*(.+?)[/n/r]*$/is", "//1", $code)));
$discuzcodes['codehtml'][$discuzcodes['pcodecount']] = tpl_codecsh($discuzcodes, $code, $lang);
$discuzcodes['codecount']++;
return "[/tDISCUZ_CODE_$discuzcodes[pcodecount]/t]";
}
在$message = preg_replace("//s*/[code/](.+?)/[//code/]/s*/ies", "codedisp('//1')", $message);上面增加如下代码
$message = preg_replace("//s*/[code=/"(xml|xhtml|xslt|html|vb|vbnet|sql|scala|ruby|rails|ror|powershell|ps|text|plain|php|py|python|perl|Perl|pl|js|jscript|javascript|jfx|javafx|groovy|java|diff|patch|delphi|pascal|css|c#|c-sharp|csharp|cpp|c|bash|shell|actionscript3|as3){1}/"/](.+?)/[//code/]/s*/ies", "codedpdisp('//2', '//1')", $message);
把return $htmlon ? $message : nl2br(str_replace(array("/t", ' ', ' '), array(' ', ' ', ' '), $message));替换为
$message = $htmlon ? $message : nl2br(str_replace(array("/t", ' ', ' '), array(' ', ' ', ' '), $message));
for($i = 0; $i <= $discuzcodes['pcodecount']; $i++) {
$message = str_replace("[/tDISCUZ_CODE_$i/t]", $discuzcodes['codehtml'][$i], $message);
}
return $message;
五、修改./include/js/post.js
在</textarea>';下面增加如下代码
if (cmd == 'code') {
str += '<br />请选择语言: <select id="' + ctrlid + '_param_2">'
+ '<option value="">-=程序语言=-</option>'
+ '<option value="php">PHP</option>'
+ '<option value="css">CSS</option>'
+ '<option value="xhtml">XML/XHTML</option>'
+ '<option value="javascript">Javascript</option>'
+ '<option value="sql">SQL</option>'
+ '<option value="csharp">C#</option>'
+ '<option value="java">Java</option>'
+ '<option value="cpp">C/C++</option>'
+ '</select>';
}
别的语言根据需要和上面的列表进行添加
在
if(wysiwyg) {
if(cmd == 'code') {
text = preg_replace(['<', '>'], ['<', '>'], text);
}
text = text.replace(//r?/n/g, '<br />');
}下面增加如下代码
if (cmd == 'code' && $(ctrlid + '_param_2').value != '') {
opentag = '[code="' + $(ctrlid + '_param_2').value + '"]';
text = "/n" + text + "/n";
}
六、如果需要汉化修改./plugins/syntaxhighlighter/src/shCore.js相关数据并根据论坛的编码修改成相对应的编码。
七、效果图(下载地址http://download.youkuaiyun.com/source/1547749)