クリップボード内の文字列を縦書きに変換（括弧の縦書き化、改行文字数指定対応）

# 概要
動作確認：Python3.11
Python3を使用して、

* クリップボード内の文字列を検知
* 縦書きに変換
* コード内の変数 x に指定された文字数で折り返し
* 各種、カッコなどに対応

したものを再度クリップボードを出力します。

# 前準備
必要なライブラリは以下のとおりです。インストール済みの方はそのままで結構です。

Python 3
```zsh
pip install pyperclip
```
Pythonista 3
clipboardモジュールを使用

# ソースコード
### Python 3
```python:VerticalTextFormatter.py
import pyperclip

#折り返し文字数
x = 8

# クリップボードからテキストを取得
original_text = pyperclip.paste()

def vertical_text(text, chars_per_line=x):
    # 半角の空白と英数字を全角の空白と英数字に変換
    text = text.replace(' ', '　')
    text = text.translate(str.maketrans(
        '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
        '０１２３４５６７８９ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ'
    ))
    # 括弧、句読点、ダッシュ、三点リーダ、二点リーダ、長音記号を縦書き用に変換
    conversion_dict = {
        '，': '\uFE10', '．': '\uFE12',
        '(': '\uFE35', ')': '\uFE36',
        '（': '\uFE35', '）': '\uFE36',
        '[': '\uFE37', ']': '\uFE38',
        '［': '\uFE37', '］': '\uFE38',
        '{': '\uFE39', '}': '\uFE3A',
        '｛': '\uFE39', '｝': '\uFE3A',
        '<': '\uFE3B', '>': '\uFE3C',
        '＜': '\uFE3B', '＞': '\uFE3C',
        '【': '\uFE3B', '】': '\uFE3C',
        '《': '\uFE3F', '》': '\uFE40',
        '「': '\uFE41', '」': '\uFE42',
        '『': '\uFE43', '』': '\uFE44',
        '〈': '\uFE47', '〉': '\uFE48',
        '、': '\uFE11', '。': '\uFE12',
        '-': '\uFE31', '—': '\uFE32',
        '...': '\uFE19', '..': '\uFE30',
        'ー': '\u4E28'
    }
    for original, converted in conversion_dict.items():
            text = text.replace(original, converted)
        
    lines = [text[i:i+chars_per_line] for i in range(0, len(text), chars_per_line)]
    max_line_length = max(len(line) for line in lines)
    vertical_lines = [' '.join(line[j] if j < len(line) else '　' for line in reversed(lines))
                                        for j in range(max_line_length)]
    vertical_text = '\n'.join(vertical_lines)
    return vertical_text

# テキストを縦書きに変換
verticalized_text = vertical_text(original_text)

# 結果をクリップボードに再挿入
pyperclip.copy(verticalized_text)
print(original_text)
print("\n- - 変換後 - -\n")
print(verticalized_text)
```

### Pythonista 3
```python:VerticalTextFormatter.py
import clipboard

#折り返し文字数
x = 6

# クリップボードからテキストを取得
original_text = clipboard.get()

def vertical_text(text, chars_per_line=x):
    # 半角の空白と英数字を全角の空白と英数字に変換
    text = text.replace(' ', '　')
    text = text.translate(str.maketrans(
        '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
        '０１２３４５６７８９ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ'
    ))
    # 括弧、句読点、ダッシュ、三点リーダ、二点リーダ、長音記号を縦書き用に変換
    conversion_dict = {
        '，': '\uFE10', '．': ' \uFE52',
        '(': '\uFE35', ')': '\uFE36',
        '（': '\uFE35', '）': '\uFE36',
        '[': '\uFE37', ']': '\uFE38',
        '［': '\uFE37', '］': '\uFE38',
        '{': '\uFE39', '}': '\uFE3A',
        '｛': '\uFE39', '｝': '\uFE3A',
        '<': '\uFE3B', '>': '\uFE3C',
        '＜': '\uFE3B', '＞': '\uFE3C',
        '【': '\uFE3B', '】': '\uFE3C',
        '《': '\uFE3F', '》': '\uFE40',
        '「': '\uFE41', '」': '\uFE42',
        '『': '\uFE43', '』': '\uFE44',
        '〈': '\uFE47', '〉': '\uFE48',
        '、': '\uFE11', '。': '\uFE12',
        '-': '\uFE31', '—': '\uFE32',
        '...': '\uFE19', '..': '\uFE30',
        'ー': '\u4E28'
    }
    for original, converted in conversion_dict.items():
            text = text.replace(original, converted)
        
    lines = [text[i:i+chars_per_line] for i in range(0, len(text), chars_per_line)]
    max_line_length = max(len(line) for line in lines)
    vertical_lines = [' '.join(line[j] if j < len(line) else '　' for line in reversed(lines))
                                        for j in range(max_line_length)]
    vertical_text = '\n'.join(vertical_lines)
    return vertical_text

# テキストを縦書きに変換
verticalized_text = vertical_text(original_text)

# 結果をクリップボードに再挿入
clipboard.set(verticalized_text)
print(original_text)
print("\n- - 変換後 - -\n")
print(verticalized_text)
```
以上です。