wiki 目錄頁改成大標題加條列,舊表格讀到就自動轉檔 #52

Merged
admin merged 5 commits from feat/contents-list/main into develop 2026-09-02 10:00:22 +00:00
Showing only changes of commit 9942cf2506 - Show all commits
+49 -7
View File
@@ -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)