用途:
将md格式转化为html格式,可用于一般md文档转html,md电子书转html,快速制作电子书。
github地址:
https://github.com/yuleMeng/pyMd2Doc
1. pyMd2Doc介紹(pip版本)
利用python将markdown转换成带可收缩,可跳转到文本内容的目录文档。
2. 使用方法
该程序所需python环境为python3或以上。
2.1 准备Markdown文件
准备好需要转成文档的Markdown文件。
2.2 安装pyMd2Doc
用pip install pyMd2Doc
安装程序
2.3 开始转换
2.3.1 md文件转html
- 新建
[yourFileName]
.py文件,准备所需要转换的markdown文件,如myMarkdown.md
- 引入所需模块,调用函数并传入需要转换的markdown文件,如下示例:
#固定写法,需要引用pyMd2Doc的模块
from pymd2doc import createDoc
# 要转换的markdown文件,如myMarkdown.md
#双引号内为要转换的markdown文件名称
createDoc.create("myMarkdown")
- 执行成功后会生成myMarkdown.html和static文件夹。
2.3.2 String型的md内容转html
- 引入所需模块,调用函数并传入String型的md内容,如下示例:
from pymd2doc import createDoc
str = u'''
此处是String型的md内容
'''
# param strs 传入MD字符串
# param myMarkdown 定义将要生成html文件名称
# return myMarkdown.html
createDoc.createByString(strs, "myMarkdown")
- 执行成功后会生成myMarkdown.html和static文件夹。
2.4 查看文档
用浏览器打开刚刚生成的myMarkdown.html
文件。
点击目录可以跳转到相应文档内容。
左侧目录如果有子目录可以点击“+”或者“-”小图标进行目录的收缩和展开操作。
目前版本页面风格如下
原理解析:
markdown的文本中标题的级别用# 来区分,如下:
# 1. 一级标题
文本内容文本内容文本内容文本内容文本内容
## 1.1 二级标题
文本内容文本内容文本内容文本内容
## 1.2 二级标题
文本内容文本内容文本内容文本内容
### 1.2.1三级标题
文本内容文本内容文本内容文本内容
### 1.2.1三级标题
文本内容文本内容文本内容文本内容
## 1.3 二级标题
文本内容文本内容文本内容文本内容
# 2. 一级标题
文本内容文本内容文本内容文本内容
# 3. 一级标题
文本内容文本内容文本内容文本内容
我们需要解析它的目录关系得到父子关系的json, 解析json成可收缩的目录结构,并且给目录结构加上锚标记的超链接实现点击目录跳转到文本内容。
解析目录的方法如下:
def getMenu(filename):
titles = []
global heading
headId = 1
current = None
preCurrent = '$'
parentID = 0
with open(filename, 'r', encoding='UTF-8') as f:
for i in f.readlines():
title = {}
if not re.match(pattern, i.strip(' \t\n')):
continue
i = i.strip(' \t\n')
current = i.split(' ')[0]
# 当前标题级别比前一个小,则当前标题的父类标题是上一个的headId
# 注释:#越多级别越小
# 不论大多少个级别,只要父类级别大就是它的父类
if len(current) > len(preCurrent):
parentID = headId - 1
# 更新当前级别父类
updateHeading(current, parentID)
# 当前级别比父类级别大,则去heading中寻找记录过的父类级别
# 注释:#越少级别越大
elif len(current) < len(preCurrent):
length = len(current)
# 当在文中出现一级标题的时候还原所有父类级别到初始值
if length == 1:
formatHeading()
# 给当父类结果类赋值
parentID = 0
else:
getVal = heading['heading%r' % length]
# 如果有记录过该级别的父类项
if getVal != -1:
parentID = getVal
# 改级别项没有记录则依次向上找父类,指导找到一级标题
else:
for j in range(length, 1, -1):
tempVal = heading['heading%r' % j]
if tempVal != -1:
parentID = tempVal
break
titleName = i[len(current):].strip(' \t\n')
title['titleName'] = titleName
title['titleID'] = headId
title['parentID'] = parentID
titles.append(title)
# print(headId, current, parentID)
preCurrent = current
headId += 1
# print(titles)
return titles