概要
動作確認:Python3.11
Python3を使用して、
- クリップボード内の文字列を検知
- 縦書きに変換
- コード内の変数 x に指定された文字数で折り返し
- 各種、カッコなどに対応
したものを再度クリップボードを出力します。
前準備
必要なライブラリは以下のとおりです。インストール済みの方はそのままで結構です。
Python 3
pip install pyperclip
Pythonista 3
clipboardモジュールを使用
ソースコード
Python 3
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',
'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
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',
'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)
以上です。