用途:
將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