HTML用にソースコード内の特殊文字をエンティティ化するスクリプト

クリップボード(または引数のファイル)からソースコードを取得し、
置換、
そして、クリップボードに戻す。

from win32clipboard import *
import re
import sys

def get_clip_text():
    OpenClipboard()
    try:
        return GetClipboardData()
    finally:
        CloseClipboard()

def set_clip_text(text):
    OpenClipboard()
    try:
        EmptyClipboard()
        SetClipboardText(text)
    finally:
        CloseClipboard()

def replace_entities(src):
    d = {
            "<":"<",
            ">":">",
            '&':"&",
            '"':""",
        }
    def repl(m):
        return d[m.group()]
    return re.sub("|".join(map(re.escape, d)), repl, src)
    
def main():
    files = sys.argv[1:]
    if not files:
        text = get_clip_text()
    else:
        text_list = []
        for f in files:
            with open(f) as fp:
                text_list.append(fp.read())
        text = "\n".join(text_list)
    
    text = replace_entities(text)
    set_clip_text(text)

if __name__ == "__main__":
    main()