Skip to content

Instantly share code, notes, and snippets.

@3110
Created March 2, 2025 14:36
Show Gist options
  • Save 3110/80c897c357ed5dc9e2ccaa35b0e99ca4 to your computer and use it in GitHub Desktop.
Save 3110/80c897c357ed5dc9e2ccaa35b0e99ca4 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# generate_skk_maru_dict.py - SKK用丸数字辞書生成スクリプト
import sys
import argparse
# 丸数字のUnicode文字コードから生成(1~50)
# ①~⑳ (U+2460~U+2473)、㉑~㉟ (U+3251~U+325F)、㊱~㊿ (U+32B1~U+32BF)
CIRCLED_NUMS = ''.join([
''.join(chr(i) for i in range(0x2460, 0x2474)), # ①~⑳
''.join(chr(i) for i in range(0x3251, 0x3260)), # ㉑~㉟
''.join(chr(i) for i in range(0x32B1, 0x32C0)) # ㊱~㊿
])
# ヘッダー部分 - 定数
HEADER = """;; -*- mode: fundamental; coding: utf-8 -*-
;;
;; 丸数字用辞書
;;
;; okuri-ari entries.
;; okuri-nasi entries."""
def generate_skk_dict(max_num=50):
"""
指定された最大値までの丸数字を含むSKK辞書を生成する
Args:
max_num: 生成する丸数字の最大値(デフォルト: 50)
Returns:
str: 生成されたSKK辞書の内容
"""
if max_num < 1 or max_num > 50:
raise ValueError("最大値は1~50の範囲で指定してください。")
# 指定された最大値までの丸数字を取得
circled_nums = CIRCLED_NUMS[:max_num]
# 辞書全体を生成して返す
return (HEADER + "\nまるすうじ /" + "/".join(circled_nums) + "/\n" +
"\n".join(f"{i} /{maru}/" for i, maru in enumerate(circled_nums, 1)))
if __name__ == "__main__":
# コマンドライン引数のパース
parser = argparse.ArgumentParser(description='SKK用丸数字辞書を生成します。')
parser.add_argument('-m', '--max', type=int, default=50,
help='生成する丸数字の最大値(1~50、デフォルト: 50)')
parser.add_argument('-o', '--output', default='SKK-JISYO.marusuuji',
help='出力ファイル名(デフォルト: SKK-JISYO.marusuuji)')
args = parser.parse_args()
# 引数の範囲チェック
if args.max < 1 or args.max > 50:
parser.error("最大値は1~50の範囲で指定してください。")
try:
# SKK辞書を生成
dict_content = generate_skk_dict(args.max)
# ファイルに書き込み
with open(args.output, 'w', encoding='utf-8') as f:
f.write(dict_content)
print(f"辞書ファイルを {args.output} に保存しました。")
except ValueError as e:
parser.error(str(e))
except IOError as e:
parser.error(f"ファイル書き込みエラー: {e}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment