Cowman's Gitbook

Gitbook 超過兩層目錄結構

因為 Gitbook 作者進行設計時認為一本書的目錄結構應該不要太複雜,所以只設計了兩層目錄結構,但使用者還是希望可以有更深的目錄結構,所以也有開發者針對 Gitbook 進行目錄的功能修正,而作者也將這些程式碼合併到 Gitbook 的開源專案裡面,但是在實際使用上會發現雖然第二層以後的目錄會顯示在網頁上,但是卻沒有該檔案,因此需要一些修正來幫忙輔助 Gitbook 設計書籍。

這邊使用 Python 的小程式來幫忙輔助,透過讀取 SUMMARY.md 檔案後進行,其流程如下。

graph TD; 讀取SUMMARY.md --> 取得目錄清單; 取得目錄清單 --> 辨識目錄為幾層; 辨識目錄為幾層 --> 判斷目錄是否存在; 判斷目錄是否存在 --> 目錄不存在則創建目錄; 判斷目錄是否存在 --> 判斷檔案是否存在; 目錄不存在則創建目錄 --> 判斷檔案是否存在; 判斷檔案是否存在 --> 檔案不存在則建立檔案; 判斷檔案是否存在 --> 結束; 檔案不存在則建立檔案 --> 結束;

程式碼如下

# !/usr/bin/python
# -*- coding: utf-8 -*-

import re
import os

for line in open("SUMMARY.md"):
    try:
        src1 = re.search('\((.+?)\)', line)
        src = src1.group(1)
    except:
        print line
    else:
        cnt = src.count('/')
        if cnt == 3:
            str = re.search('(.+?)/(.+?)/(.+?)/(.*)', src)
            path = str.group(1) + "/" + str.group(2) + "/" + str.group(3)
            file = str.group(1) + "/" + str.group(2) + "/" + str.group(3) + "/" + str.group(4)
            if not os.path.isdir(path):
                print "create folder: " + path
                os.mkdir(path)
            if not os.path.isfile(file):
                print "create file: " + file
                open(file, "a").close()
            print str.group(1) + ".." + str.group(2) + ".." + str.group(3) + ".." + str.group(4)

        elif cnt == 2:
            str = re.search('(.+?)/(.+?)/(.*)', src)
            path = str.group(1) + "/" + str.group(2)
            file = str.group(1) + "/" + str.group(2) + "/" + str.group(3)
            if not os.path.isdir(path):
                print "create folder: " + path
                os.mkdir(path)
            if not os.path.isfile(file):
                print "create file: " + file
                open(file, "a").close()
            print str.group(1) + ".." + str.group(2) + ".." + str.group(3)