將 Python 3.2 的 keyword 換成 中文

Posted by TJ Wei on 星期六, 6月 25, 2011 with No comments
這是一個用到 ctypes 的 hack,將 python 3.2 的一些 Keyword 換成中文,然後可以用中文寫程式。
Source

from ctypes import *
class label(Structure):
    _fields_=[("lb_type",c_int),("lb_str",POINTER(c_char))]
    @property
    def lbstr(self):
        return string_at(self.lb_str).decode("utf8") if self.lb_str else None
class labellist(Structure):
    _fields_=[("ll_nlabels", c_int),("ll_label", POINTER(label))]
class grammar(Structure):
    _fields_ = [("g_ndfas", c_int),
                ("g_dfa", POINTER(c_int)),
                ("g_ll", labellist)]

trans_tbl={"if":"若", "def": "定義", "class": "類", "for": "對所有",
           "in": "在", "from":"從", "import":"載入", "return": "傳回",
           "else": "否則", "try":"嘗試", "except":"例外"}

ll=cast(pythonapi._PyParser_Grammar,POINTER(grammar)).contents.g_ll
lb=ll.ll_label
for i in range(ll.ll_nlabels):    
    if lb[i].lbstr in trans_tbl:
        nstr=trans_tbl[lb[i].lbstr].encode("utf8")
        lb[i].lb_str=create_string_buffer(nstr,len(nstr)+1)
   
locals().update({"印出":print,
                 "範圍":range,
                 "字串":str,
                 "沒有":None,
                 "性質":property})
            
# Show time!
exec("""
從 math 載入 sin
類 花花:
    @性質
    定義 名字(我):
        嘗試:
            傳回 我._名字
        例外:
            傳回 "無名花花"
    定義 決定是否吃(我, 食物):
        傳回 "吃" 若 sin(食物)<0 否則 "不吃"
    定義 自我介紹(我, 名字):
        我._名字=名字
    定義 吃(自己, 食物):
        傳回 自己.名字+" "+自己.決定是否吃(食物)+" "+字串(食物)
某小花=花花()
#某小花.自我介紹("玫瑰")
對所有 食物 在 範圍(10):
    印出(某小花.吃(食物))
""")
Categories: