wiki 目錄頁改成大標題加條列,舊表格讀到就自動轉檔 #52
+49
-7
@@ -14,7 +14,9 @@
|
||||
# --key 可重複,補充自動蒐集不到的候選鍵。
|
||||
#
|
||||
# 候選鍵來源:
|
||||
# 目錄頁表格的存取庫、主機、帳號、工具、期間欄,以及這幾欄依序串成的組合鍵。
|
||||
# 目錄頁每一筆的存取庫、主機、帳號、工具、期間,以及這幾項依序串成的組合鍵。
|
||||
# 目錄頁是 H2 區塊加條列的形狀,所以讀「- {欄位名}:{值}」那幾條;還沒轉檔的舊頁
|
||||
# 仍是 markdown 表格,所以表格的欄位也照樣讀,兩種形狀都收。
|
||||
# 內容頁的 H1 標題(CHECK 頁的 H1 直接就是 {主機}/{帳號})。
|
||||
# --key 補充的候選。
|
||||
#
|
||||
@@ -136,7 +138,7 @@ for ty in $TYPES; do
|
||||
done
|
||||
|
||||
# ---- 第二輪:蒐集候選鍵 ----
|
||||
# 目錄頁表格的欄位值,以及依序串成的組合鍵
|
||||
# 目錄頁每一筆的欄位值,以及依序串成的組合鍵
|
||||
while IFS="$TAB" read -r orepo opage nrepo npage <&3; do
|
||||
[ -n "$opage" ] || continue
|
||||
case "$opage" in *_CONTENTS) ;; *) continue ;; esac
|
||||
@@ -174,9 +176,49 @@ def plain(v):
|
||||
idx = {}
|
||||
seen_sep = False
|
||||
out = []
|
||||
block = None
|
||||
|
||||
|
||||
def take(found):
|
||||
"""一筆紀錄收到的欄位值,各自算一個候選鍵,依 WANT 順序再串一個組合鍵。"""
|
||||
if not found:
|
||||
return
|
||||
parts = []
|
||||
for w in WANT:
|
||||
v = found.get(w)
|
||||
if not v:
|
||||
continue
|
||||
out.append(v)
|
||||
parts.append(v)
|
||||
if len(parts) > 1:
|
||||
out.append('/'.join(parts))
|
||||
|
||||
|
||||
for line in lines:
|
||||
# 目錄頁一筆一個 H2 區塊,欄位在標題底下一條一條列。
|
||||
if line.startswith('## '):
|
||||
take(block)
|
||||
block = {}
|
||||
idx, seen_sep = {}, False
|
||||
continue
|
||||
cs = cells(line)
|
||||
if cs is None:
|
||||
if block is not None:
|
||||
s = line.strip()
|
||||
if s.startswith('- '):
|
||||
body = s[2:]
|
||||
# 正本寫全形冒號;半形也收,舊頁手寫的那幾條才不會整條漏掉。
|
||||
for mark in (':', ':'):
|
||||
if mark in body:
|
||||
label, value = body.split(mark, 1)
|
||||
label = plain(label)
|
||||
for w in WANT:
|
||||
if w in label:
|
||||
v = plain(value)
|
||||
if v:
|
||||
block[w] = v
|
||||
break
|
||||
break
|
||||
idx, seen_sep = {}, False
|
||||
continue
|
||||
if is_sep(cs):
|
||||
@@ -193,7 +235,7 @@ for line in lines:
|
||||
continue
|
||||
if not idx:
|
||||
continue
|
||||
parts = []
|
||||
found = {}
|
||||
for w in WANT:
|
||||
i = idx.get(w)
|
||||
if i is None or i >= len(cs):
|
||||
@@ -201,10 +243,10 @@ for line in lines:
|
||||
v = plain(cs[i])
|
||||
if not v:
|
||||
continue
|
||||
out.append(v)
|
||||
parts.append(v)
|
||||
if len(parts) > 1:
|
||||
out.append('/'.join(parts))
|
||||
found[w] = v
|
||||
take(found)
|
||||
|
||||
take(block)
|
||||
|
||||
for v in out:
|
||||
print(v)
|
||||
|
||||
Reference in New Issue
Block a user