LoginSignup
0
0

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

Last updated at Posted at 2023-10-06

概要

動作確認: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)

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0