毎日モザイク

White Room Layout Works

Archive for 2026/06/03

2026-06-03T01:52:46+09:00 [Wed]
--> [日常]

Notepad++ bruderstein / PythonScript用、全角→半角変換

https://github.com/bruderstein/PythonScript/releases/tag/v3.0.25

python2.7用では動きません。っていうかpython3用が出てたので作ってみた。2.xではマルチバイトに触らないっていうか触れなかったので、だいぶ嬉しい。

選択範囲あり→選択範囲のみ。

選択範囲なし→ファイル全体対象

欧文と記号類を半角にします(kaoriya版GVimのzenhan_asciiと同じ動作)

# -*- coding: utf-8 -*-

from Npp import notepad, editor


def zenhan_Ascii(text):
    table = str.maketrans({
        ' ':' ','!':'!','”':'\"','#':'#','$':'$','%':'%','&':'&','’':'\'',
        '(':'(',')':')','*':'*','+':'+',',':',','-':'-','.':'.','/':'/',
        '0':'0','1':'1','2':'2','3':'3','4':'4','5':'5','6':'6','7':'7',
        '8':'8','9':'9',':':':',';':';','<':'<','=':'=','>':'>','?':'?',
        '@':'@','A':'A','B':'B','C':'C','D':'D','E':'E','F':'F','G':'G',
        'H':'H','I':'I','J':'J','K':'K','L':'L','M':'M','N':'N','O':'O',
        'P':'P','Q':'Q','R':'R','S':'S','T':'T','U':'U','V':'V','W':'W',
        'X':'X','Y':'Y','Z':'Z','[':'[','¥':'\\',']':']','^':'^','_':'_',
        '‘':'`','a':'a','b':'b','c':'c','d':'d','e':'e','f':'f','g':'g',
        'h':'h','i':'i','j':'j','k':'k','l':'l','m':'m','n':'n','o':'o',
        'p':'p','q':'q','r':'r','s':'s','t':'t','u':'u','v':'v','w':'w',
        'x':'x','y':'y','z':'z','}':'}','{':'}','〜':'~'
        })
    return text.translate(table)

def main():
    selected_text = editor.getSelText()
    if not selected_text:
        rtxt = zenhan_Ascii(editor.getText())
        editor.setText(rtxt)
    else:
        sel_start = editor.getSelectionStart()
        sel_end = editor.getSelectionEnd()
        editor.setTargetStart(sel_start)
        editor.setTargetEnd(sel_end)
        insert_text = zenhan_Ascii(selected_text)
        editor.replaceTarget(insert_text)

if __name__ == "__main__":
    main()