/** * ページのスラッグとタイトルから、X などで共有するときのキャプションを組み立てる。 * * 一般質問ページは、どの年度・月定例会のものかがキャプションだけで分かるよう、 * スラッグ(例: ippan-situmon/r8d/9gatu)から文言を自動生成する。 * それ以外のページはフロントマターの title をそのまま使う。 */ const REIWA_RE = /^r(\d+)d$/; const MONTH_RE = /^(\d+)gatu$/; function reiwaYear(n: string): string { return `令和${n === "1" ? "元" : n}年`; } export function shareCaption(slug: string, title?: string): string { const parts = slug.split("/").filter(Boolean); // トップページは「小平市議 安竹洋平」のみにする if (parts.length === 0) return ""; if (parts[0] === "ippan-situmon") { if (parts.length === 1) return "安竹洋平の一般質問一覧"; const year = parts[1]?.match(REIWA_RE); if (!year) return title ?? ""; if (parts.length === 2) return `${reiwaYear(year[1])}度の一般質問一覧`; const month = parts[2]?.match(MONTH_RE); if (!month) return title ?? ""; const session = `${reiwaYear(year[1])}${month[1]}月定例会`; if (parts.length === 3) return `${session}一般質問一覧`; return title ? `${session}一般質問${title}` : `${session}一般質問`; } return title ?? ""; }