标签存档: wordpress

SyntaxHighlighter的一点小问题

最近发现代码都不能高亮了,开始以为是在header footer里被改了或者wp升级的时候以前添加的东西不见了,去网上找了找SyntaxHighlighter在wp下的安装方法,发现就不用改主题文件,于是就奇怪了,换回ff看了下居然是好的,看来是chrome的问题了。其实早该想到的,只是觉得这种bug不太应该出现在一个成熟的插件的某个版本内吧。看下console,说是shCore.js中某一个正则不对。试了半天发现问题在[\w-.(省略一串)]内,估计是那个-的问题。我记忆中-是不用加转义符的啊,除了在[a-z]这种里面没有特别的意义了。这里前面一个\w,后面一串莫名其妙的表达式,怎么也不像是表示范围吧,如果是表示正常的-号的话就是要加转义的了,于是去修改源文件。这里要注意下,我是用vim的查找,特殊字符要转义,比如本来是\w就变成了\\w。找了下还是没找到,仔细观察一下发现console里显示的表达式是一个正则最终的版本,而从源码到那个表达式中间可能还经过了一些处理过程,对这个来说的话是源码执行一次变成最后的表达式,因而源码中就是表达式一次转义前的版本,而搜索的时候就变成了两次之前的了,于是\w就变成\\\\w,搜到后源码中是这样的\\w-,在-前面加\\搞定。试了试ff还是可以的,看来就是这个问题了。chrome下刷新,又不对,出了另一个同样类型的错误这次更长了,这次找来找去都没找到,想到可能其实在源码中这串正则可能是分散在各个地方的,也不一定只被转义了一次,试了各种可能情况发现的确是被分开的,然后被转义了两次,同样修改-为\\\\-,搞定。

由于代码只有一行,patch没用,又懒得去给作者提交bug。看来以后就别升级这个插件好了。下面是修改后的文件shCore.js.tar

—————————————————–

update : 又在网上找了找发现这个可能是chrome的bug,据说10.0.612.3 fix 了,我现在用的是10.0.612.1。升级试试。