SyntaxHihglighter高亮插件的实现方法

从http://alexgorbatchev.com/下载SyntaxHihglighter2.0,解压后有三个文件夹,src那个不用管,把其他两个目录下的所有文件拷到新建Hlight的目录下,再把Hilght放到pjblog的Plugins目录下。
然后在header.asp文件中95行左右加入以下内容:


























(shThemeDefault.css可以替换为其他样式表,如:shThemeDjango.css)
类似于Plugins/Hilight/shBrushCpp.js的文件,根据需要添加;
如需使用静态页面,需把上面的内容加入Template/static.htm中。
再在common/ubbcode.asp文件中254行加入:

re.Pattern = "\[code=(.[a-zA-Z]*)([0-9]*)\](.*?)\[\/code\]"
Set strMatchs = re.Execute(strContent)
Dim lang,code,line
For Each strMatch in strMatchs
lang=strMatch.SubMatches(0)
line=strMatch.SubMatches(1)
code=strMatch.SubMatches(2)
strContent = Replace(strContent,strMatch.Value,"

""程序代码""/ "& lang&" 代码
"&code&"
") NEXT

最后再稍微修改下Plugins/Hilight/shCore.css文件,就可以好看点。

margin: 0 0 0 0 !important;

把外边距全改为0,可以更好的融入pjblog的代码框里面的
使用格式:
[code=code231]代码[/code]
code为代码类型:php vb css 等
231为代码起始行号,如果行号从1开始可以不写
fckeditor中直接

代码

http://defe.me/article.asp?id=118

用syntaxhighlighter重做了个代码高亮的插件

syntaxhighlighter_2.0用起来比1.0更舒服,简单改了下,暂时能够使用,效果如下:

try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('Select * from FOO') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "< br>";
die();
}

最大的好处就是纯javascript实现,不需要php ajax支持等,而且有多种样式可以选择,明天下班了在接着改!
现在最大的问题是在chrome浏览器下,直接用鼠标选择高亮的代码,会造成对应的标签页假死,只能关闭标签页,重新打开才行,这个是SyntaxHighlighter的问题,官网上也是如此

关于代码高亮插件的问题

用代码高亮插件会带来的问题就,高亮显示的时候有些代码符号会被转义或是替换,最终显示不出,或是有问题。因为要在javascript和php之间交换数据,会带来一些问题,所以还是很麻烦。
转去转来最终还是想完全用javascript实现代码的高亮,SyntaxHihglighter的集成也不复杂,而且效果也还是不错,而且没有我现在用的这个这么复杂。
所以下一步,就是马上改动加入SyntaxHihglighter。

把代码高亮插件改进了下

把原来的代码高亮插件 http://defe.me/article.asp?id=73,稍微改进了下,可以实现在网页载入的时候自动高亮显示代码,无需再手动点击“高亮”按钮。改动很小:
在HiLightCode.asp中加入

function code_hi(){
var code_hi
var ltp=document.getElementsByName('dftype')
var lcd=document.getElementsByName('dfcode')
for(i=0;i
var tp=ltp.item(i).innerText
var cd=lcd.item(i).innerText
cd=cd.replace(/\&/g,"(|D|F|)");
cd=cd.replace(/\+/g,"(|D|J|)");
cd=cd.replace(/\\/g,"(|D|G|)");
tp=tp.split(" ")[0];
var ul="lang=" + tp + "&code=" + cd;
df = getXmlHttp();
df.open("post","./common/code.php",false);
df.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
df.send(ul);
var result = df.status;
if(result==200)
{
code_hi=df.responseText;
}
df = null;
lcd.item(i).innerHTML=code_hi
}
}
code_hi();

在ubbcode.asp中254左右原来添加到内容替换为:

re.Pattern = "\[code=(.[^\]]*)\](.*?)\[\/code\]"
Set strMatchs = re.Execute(strContent)
For Each strMatch in strMatchs
Dim lang,code,rnd_ID,rndID_t,rndID_c,Code_hi,Code_nm
lang=strMatch.SubMatches(0)
code=strMatch.SubMatches(1)
Randomize
rnd_ID = Int(100000 * Rnd)
rndID_t = "Type"& rnd_ID
rndID_c	="Code"& rnd_ID
Code_hi="

显示: 高亮"
Code_nm=" | 普通
" strContent = Replace(strContent,strMatch.Value,"
"""〈&""〈&" 代码

"&Code_hi & Code_nm &"

 

"&code&"

 

")