12 Commits
Author SHA1 Message Date
admin 93c18023f6 Merge pull request '釋出 wiki 目錄頁的 H2 區塊改寫與連結驗證至 master,版本 0.2.2 升到 0.2.5' (#53) from develop into master
Reviewed-on: #53
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-09-03 03:17:28 +00:00
admin 9c9d912292 Merge pull request 'release: wiki 目錄頁專用存取庫、HASH 完整 40 碼、閘門依 CLI 分流' (#48) from develop into master
Reviewed-on: #48
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-09-02 04:20:27 +00:00
admin e0038de1fc Merge pull request '釋出 jsc-assist 的 marketplace 條目' (#46) from develop into master
Reviewed-on: #46
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-09-01 04:57:28 +00:00
admin b2f13b0ce8 Merge pull request '釋出 jsc-gitea 0.2.1:wiki 頁型別新增 MONITOR' (#43) from develop into master
Reviewed-on: #43
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-09-01 04:46:22 +00:00
admin 5bb3d4a700 Merge pull request '釋出 jsc-gitea 0.2.0:修正兩支技能的 frontmatter 語法' (#39) from develop into master
Reviewed-on: #39
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-09-01 01:02:56 +00:00
admin b729aa92f3 Merge pull request '釋出 jsc-gitea 0.1.9:新增五支技能的行為清單' (#36) from develop into master
Reviewed-on: #36
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-08-31 08:18:44 +00:00
admin 678b79ca39 Merge pull request 'chore(release): 放行技能組稽核修正到預設分支' (#33) from develop into master
Reviewed-on: #33
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-08-31 03:54:34 +00:00
admin 054d56c306 Merge pull request 'develop' (#30) from develop into master
Reviewed-on: #30
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-08-28 01:58:11 +00:00
admin 980c1e98ec Merge pull request 'release: v0.1.6 develop 到 master' (#27) from develop into master
Reviewed-on: #27
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-08-27 09:01:00 +00:00
admin d239341dec Merge pull request 'release: v0.1.5 develop 到 master' (#24) from develop into master
Reviewed-on: #24
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-08-27 04:14:04 +00:00
admin 9d6f7cdd37 Merge pull request 'release: develop 併入 master(CHECK、REPORT 頁類型)' (#21) from develop into master
Reviewed-on: #21
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-08-26 02:59:31 +00:00
admin 81de5b1e1e Merge pull request 'gitea 0.1.3 發佈:wiki 轉議題、HTML 匯出與範本風格設定' (#19) from develop into master
Reviewed-on: #19
Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
2026-08-26 01:34:01 +00:00
2 changed files with 1 additions and 66 deletions
+1 -20
View File
@@ -2,36 +2,17 @@
# hash-id — 產生完整 40 碼大寫 SHA-1 hash。
# 用法:
# hash-id <text>
# hash-id key <計畫名稱> <owner/repo>
# printf '%s' <text> | hash-id
# key 子命令的參數:
# 計畫名稱: 交給 normalize-name.sh 正規化後再接字串,同名不同打法算出同一把 key。
# owner/repo: 存取庫識別,原樣接上,不經正規化。
# 規則:
# 取完整 SHA-1 四十碼,a-f 轉大寫,不截短、不加前綴。
# 輸入為空即 exit 2。空字串本身也有合法的 SHA-1,靜靜回傳它就會生出
# 一個看起來正常的頁名,把內容寫到沒有人讀的那一頁。
# key 子命令把多個欄位接成雜湊輸入的組法收在這裡當單一入口:固定用 `|`
# 分隔,避免各技能各自接字串各接各的。正規化規則本身不是雜湊職責,收在
# 獨立那支工具,這裡只管接字串。
# 結束碼: 0=成功 1=這台機器沒有 sha1sum 也沒有 shasum,算不出雜湊
# 2=用法錯誤:沒有給文字,或給的是空字串
set -eu
dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
input=''
if [ "${1:-}" = 'key' ]; then
shift
name="${1:-}"; repo="${2:-}"
if [ -z "$name" ] || [ -z "$repo" ]; then
echo 'usage: hash-id key <計畫名稱> <owner/repo>' >&2
exit 2
fi
# 正規化計畫名稱,讓「我的 計畫」與「我的 計畫」這類同名不同打法算出同一把 key。
name=$(sh "$dir/normalize-name.sh" "$name")
input="${name}|${repo}"
elif [ "$#" -gt 0 ]; then
if [ "$#" -gt 0 ]; then
input=$*
elif [ -t 0 ]; then
input=''
-46
View File
@@ -1,46 +0,0 @@
#!/usr/bin/env sh
# normalize-name — 正規化一個名稱字串,讓同一個名稱的不同打法算出同一個結果。
# 用法:
# normalize-name.sh <text>
# 規則(依序套用):
# 1. Unicode NFC 正規化
# 2. 去除頭尾空白
# 3. 內部連續空白(含全形空白)壓成一個半形空白
# 4. 英數全形字元轉半形(只轉英數,其他全形字元如標點不動)
# 大小寫不在正規化範圍內,維持原樣、視為不同名稱。
# 例子:
# normalize-name.sh "我的 計畫" -> 我的 計畫
# normalize-name.sh " Abc1 " -> Abc1
# 結束碼: 0=成功 1=這台機器沒有 python3,算不出正規化結果 2=用法錯誤:沒有給文字
set -eu
if [ "$#" -lt 1 ]; then
echo 'usage: normalize-name.sh <text>' >&2
exit 2
fi
if ! command -v python3 >/dev/null 2>&1; then
echo 'no python3 found' >&2
exit 1
fi
printf '%s' "$1" | python3 -c '
import sys, re, unicodedata
FULLWIDTH_OFFSET = 0xFEE0 # Unicode 全形英數區塊相對半形區塊的固定位移量
def to_halfwidth_alnum(ch):
if ("0" <= ch <= "9") or ("A" <= ch <= "Z") or ("a" <= ch <= "z"):
return chr(ord(ch) - FULLWIDTH_OFFSET)
return ch
name = unicodedata.normalize("NFC", sys.stdin.read())
name = name.strip()
name = re.sub(r"[ \t ]+", " ", name).strip()
# 只轉英數的全形字元,其他全形字元(例如全形標點)不動——只轉英數是規則本身
# 的範圍,不是整段跑 NFKC;NFKC 連標點都會改寫,會讓名稱的視覺呈現跟著變。
name = "".join(to_halfwidth_alnum(c) for c in name)
sys.stdout.write(name)
'