hexo使用的是markdown渲染博客的,不过在写文章的时候,我vim并没有设置auto wrap,一般我会自己去换行。但是 markdown 语法中换行就是分段,一行多了换行后分段导致行间距增大,感觉是多了一个空格,排版就会变得很难看。如果从 hexo 的 markdown 渲染引擎入手我感觉会异常麻烦,所以,我打算写个脚本把换行去掉合并成一行,这样就简单的解决了这个问题,修复原来的文字,后续的不再手动换行了。
也可以使用hexo-renderer-markdown-it引擎解决这个问题,不过我还是建议使用标准,而不是利用引擎来解决这个问题。
花了几十分钟写完,代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
from glob import glob from typing import List
files = glob("*/**/*.md", recursive=True)
def fmt(content: List[str]) -> str: data: List[str] = [] lens = len(content) n = 0 while True: if "---" in content[n]: tmp: List[str] = [] tmp.append("---") while True: n += 1 tmp.append(content[n]) if "---" in content[n]: while True: n += 1 if content[n] == "": continue break break continue data.append("\n".join(tmp))
tmp = [] while True: if "```" in content[n]: _tmp: List[str] = [] _tmp.append(content[n]) while True: n += 1 if lens == n: n -= 1 break
_tmp.append(content[n]) if "```" in content[n]: while True: n += 1 if lens == n: n -= 1 break
if content[n] == "": continue break break continue
data.append("\n".join(_tmp))
tmp.append(content[n]) i = n + 1 n += 1 if i == lens or content[i] == "": data.append("".join(tmp)) break
if lens == n: break
return "\n\n".join(data)
for f in files: with open(f) as fp: c = fp.read()
data = fmt(c.split("\n")) with open(f, "w") as fp: fp.write(data)
|
当然代码依然有一些问题,没有覆盖到所有的 markdown 语法,所以很多问题手动修改了。不过使用 Python 编写脚本确实能提升不少的效率,所以Python 是很值得学习的一门语言。