更新:由于jekyll的更新,post_filter已经被移除,因此修改方式已经无效。
之前,RandomK说我的blog有bug,其实在他说之前我就已经知道了,只是当时比较晚,所以没有修,今天周末将其解决之。
原因
我使用的是redcarpet作为markdown的转换器,jekyll将多行的段落转换成html之后在浏览
器中显示会很奇怪,在原始的markdown中的某一行最后一个字与下一行的第一个字之间存
在一个空格,作为使用单词的外国淫来说没什么问题,可是作为大天朝子民是无法忍受的。
解决方案一 段落写为一行
我只能说这种行为好痛苦。
解决方案二 在markdown转换为html前处理一下
由于无法忍受第一种解决方案,只能在markdown转换为html之前进行一些预处理了。在网 上搜索一番后发现果然不止我一人遇到此问题,并且找到了一个解决方案。 不过该解决方案有一定的局限性,第一,没有处理汉英和英汉这两种情况,第二,没有处 理摘要。
为了解决以上两个问题,必须做出一些更改。
首先,作为一个非octopress用户,果断得去github上将octopress的post_filters plugins得到, 然后,从解决 Markdown 转 HTML 中文换行变空格的问题将代码拷贝并保存 到存放plugins的目录。然后就可以开始修改了。
修改1:
class String
han = '\p{Han}|[,。?;:‘’“”、!……()]'
@@hh = /(#{han}) *\n *(#{han})/m
@@he = /(#{han}) *\n *(\p{Alpha})/m
@@eh = /(\p{Alpha}) *\n *(#{han})/m
def join_chinese!
gsub!(@@hh, '\1\2')
gsub!(@@he, '\1\2')
gsub!(@@eh, '\1\2')
self
end
end
修改2:
虽然blog中的问题解决了,但是摘要部分并没有的到解决。
post.excerpt.join_chinese!
会导致jekyll创建html时失败,
因此采用添加一个filter供Liquid使用,从而解决解决此问题。
将一下代码加入Jekyll模块中
module TemplateJoinChineseFilter
def join_chinese(input)
input.join_chinese!
end
end
然后将Liquid::Template.register_filter(Jekyll::TemplateJoinChineseFilter)
添加到最后一行。
最后,只需要在使用摘要的时候使用{{ page.excerpt | join_chinese }}
替代{{ page.excerpt }}
即可。
The End
问题基本得到了解决,不过还有几点需要注意:
- markdown中标题与正文之间需要一行空白行(我不习惯)。
- 标点符号和数字没有处理,因此有些地方是不适合换行然后通过插件解决的。
- 应该还存在这一些bug。