diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/make-flow-pdfs.py | 15 | ||||
| -rw-r--r-- | scripts/make-flow-simple.py | 80 |
2 files changed, 90 insertions, 5 deletions
diff --git a/scripts/make-flow-pdfs.py b/scripts/make-flow-pdfs.py index 5c9e840..e5ed6ae 100644 --- a/scripts/make-flow-pdfs.py +++ b/scripts/make-flow-pdfs.py @@ -46,15 +46,20 @@ FOOT_1P = TITLE + " 全体像(縮小のため文字は小さめ。読みやã # 課題欄があるのは公立学校版だけなので、その旨も公立版にだけ入れる LIC_PUBLIC = ("© 安竹洋平(小平市議会議員)/公立版・私立版とも CC BY-ND 4.0" "(課題欄の省略可・無保証)/yasutakeyohei.com/ijime-judai-jitai/flow/") -LIC_PRIVATE = ("© 安竹洋平(小平市議会議員)/公立版・私立版とも CC BY-ND 4.0" - "(無保証)/yasutakeyohei.com/ijime-judai-jitai/flow/") +# 私立版と簡易版には課題欄がないので、その但し書きは入れない +LIC_NO_KADAI = ("© 安竹洋平(小平市議会議員)/公立版・私立版とも CC BY-ND 4.0" + "(無保証)/yasutakeyohei.com/ijime-judai-jitai/flow/") +# 図に合わせた版の情報(PDFのメタデータにも入れる) +EDITION = "第1版(令和8年9月23日)" # (SVGファイル名, 出力の6ページ版, 出力の1ページ版, SVGの元の高さ, フッターのライセンス, 版の名前) JOBS = [ ("ijime-judai-flow.svg", "ijime-judai-flow-a4-6p.pdf", "ijime-judai-flow-a4-1p.pdf", 4034, LIC_PUBLIC, "公立学校版"), + ("ijime-judai-flow-simple.svg", "ijime-judai-flow-simple-a4-6p.pdf", + "ijime-judai-flow-simple-a4-1p.pdf", 3509, LIC_NO_KADAI, "公立学校版・簡易版"), ("ijime-judai-flow-private.svg", "ijime-judai-flow-private-a4-6p.pdf", - "ijime-judai-flow-private-a4-1p.pdf", 3624, LIC_PRIVATE, "私立学校版"), + "ijime-judai-flow-private-a4-1p.pdf", 3624, LIC_NO_KADAI, "私立学校版"), ] @@ -126,9 +131,9 @@ def build(svg_name, out_6p, out_1p, base_h, license_text, label): out.set_metadata({ "title": f"{TITLE}({label})", "author": "安竹洋平(小平市議会議員)", - "subject": ("CC BY-ND 4.0(表示—改変禁止)。公立学校版・私立学校版とも同じライセンス。" + "subject": (f"{EDITION}。CC BY-ND 4.0(表示—改変禁止)。公立学校版・私立学校版とも同じライセンス。" "出典 https://yasutakeyohei.com/ijime-judai-jitai/flow/"), - "keywords": f"いじめ重大事態, フロー図, {label}, CC BY-ND 4.0, 安竹洋平, 小平市", + "keywords": f"いじめ重大事態, フロー図, {label}, {EDITION}, CC BY-ND 4.0, 安竹洋平, 小平市", "creator": "https://yasutakeyohei.com/ijime-judai-jitai/flow/", }) out.subset_fonts() diff --git a/scripts/make-flow-simple.py b/scripts/make-flow-simple.py new file mode 100644 index 0000000..1e0b566 --- /dev/null +++ b/scripts/make-flow-simple.py @@ -0,0 +1,80 @@ +"""公立学校版のSVGから、下部の【課題・論点】を省いた「簡易版」を作る。 + +- 課題欄(枠・見出し・12項目)と、フロー上の赤い「課題N」バッジを削除 +- 「課題N」を説明していた ※6 の注記も削除 +- 課題欄より下の要素(参考欄・注記・下部バー)を上へ寄せ、SVGの高さを縮める +- 課題欄があった位置に、課題はこのサイトに載っている旨の注記を入れる + + +このスクリプトは make-flow-pdfs.py より先に実行すること(PDFはSVGから作るため)。 + +使い方: python scripts/make-flow-simple.py +""" +import re +import sys +from pathlib import Path + +sys.stdout.reconfigure(encoding="utf-8") + +SRC = Path("public/ijime-judai-jitai/images/ijime-judai-flow.svg") +DST = Path("public/ijime-judai-jitai/images/ijime-judai-flow-simple.svg") +FF = "'Noto Sans JP','Yu Gothic','Hiragino Kaku Gothic ProN',Meiryo,sans-serif" +SHIFT = 525 # 課題欄を外したぶん、下の要素を上へ +GAP_Y = 2941 # ここより下の y をずらす + +text = SRC.read_text(encoding="utf-8") + +# 1) 課題欄(枠・見出し・注記・12項目)を削除 +start = text.index('<rect x="164" y="2941"') +end = text.index('<rect x="8" y="336"') +text = text[:start] + text[end:] + +# 2) フロー上の赤い「課題N」バッジを削除 +text, n_badge = re.subn(r'<a href="#issue\d+" style="cursor:pointer">.*?</a>\n', "", + text, flags=re.S) + +# 3) 「課題N」の説明(※6)を削除 +text, n_note = re.subn(r'<text x="20" y="\d+"[^>]*>※6[^<]*</text>\n', "", text) + +# 4) 出典の行から「課題欄」の語を外す +# 簡易版には課題欄がないので、ライセンス行の但し書きも外す +text = text.replace("課題欄のリンク先:yasutakeyohei.com", + "各課題の詳細:yasutakeyohei.com/ijime-judai-jitai/flow/") +text = text.replace("内容を変えず(下部の【課題・論点】を省くのは可)、", "内容を変えず、") + +# 5) 課題欄より下の要素を上へ寄せる +def _shift(m): + v = float(m.group(2)) + v = v - SHIFT if v >= GAP_Y else v + return f'{m.group(1)}="{int(v) if v == int(v) else v:g}"' + + +text = re.sub(r'\b(y|y1|y2)="([0-9.]+)"', _shift, text) + +# 6) SVGの高さを縮める +text = text.replace('height="3954"', f'height="{3954 - SHIFT}"') +text = text.replace('width="1820" height="4164" viewBox="0 0 1820 4164"', + f'width="1820" height="{4164 - SHIFT}" viewBox="0 0 1820 {4164 - SHIFT}"') + +# 7) タイトルに簡易版と分かるようにする +text = text.replace(">いじめの重大事態の対応フロー(ロール別)<", + ">いじめの重大事態の対応フロー(ロール別)簡易版<") + +# 8) 課題欄があった位置に、課題はこのサイトにある旨の注記を入れる +note = ( + f'<rect x="164" y="2925" width="1640" height="36" rx="6" fill="#FFFDE7" ' + f'stroke="#F9A825" stroke-width="1.6"/>\n' + f'<text x="180" y="2949" font-family="{FF}" font-size="12.5" fill="#E65100">' + f'※この図は、下部の【課題・論点】を省いた簡易版です。各課題の内容は、' + f'この図の解説ページ(yasutakeyohei.com/ijime-judai-jitai/flow/)に掲載しています。</text>\n' +) +text = text.replace('<rect x="8" y="336"', note + '<rect x="8" y="336"', 1) + +if "課題" in text.replace("【課題・論点】", "").replace("各課題", ""): + left = [ln for ln in text.splitlines() if "課題" in ln + and "【課題・論点】" not in ln and "各課題" not in ln] + raise SystemExit("「課題」の語が残っています:\n" + "\n".join(left[:5])) + +DST.write_text(text, encoding="utf-8") +print(f"作成しました: {DST}") +print(f" バッジ {n_badge}個 / ※6 {n_note}行 を削除、下の要素を {SHIFT}px 上へ") |
