色の名前で検索してプレビューしつつカラーコードに変換する


自分が使いそうな機能をあれこれプラグインにしてるが、あんまりニーズはなさそうだ。
これは色の名前で辞書を引き、

  • その色をプレビュー
  • 〜色などで末尾の不足があるとそれを補える
  • カラーコードに変換

みたいな機能を提供する。


#ここから上はcolors.pyの内容(大量なので省略)
def getColorCode(name):
    #colors.pyの関数を上書き
    if not name:
        return ""

    for i in dics:
        dic = dics[i]
        cats = dic[1]
        for j in cats: #category
            cat = cats[j]
            for k in cat: #array each
                if k.has_key(name):
                    n = k[name]
                    return "#" + dic[0][n]
    return ""

def atok_plugin_run_process( a_request_data ):
    result_data = {}
    candidate_array = []
    str = a_request_data[ 'composition_string' ]
    if str:
    	ret = getColor(str)
        if ret:
            name = ret['name']
            cc   = unicode(ret['cc'])
            candidate_array.append( { 'hyoki' : str,
                                      'comment_xhtml': (
                                          u"""<?xml version="1.0" encoding="UTF-8" ?>"""
                                          """<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">"""
                                          """<head><title>preview: %s</title></head>"""
                                          """<br />"""
                                          """<center>"""
                                          """<small>preview</small><br />"""
                                          """<div style="width:100px;height:33px;background-color:%s;" />"""
                                          """</center>"""
                                          """<br />"""
                                          """</html>""" % (cc, cc)
                                          ) })
            if str != name:
                candidate_array.append( { 'hyoki' : name,
                                          'comment': u'末尾の不足を修正します'  } )
            candidate_array.append( { 'hyoki' : cc,
                                      'comment': u'カラーコードに変換します'  } )

    result_data[ 'candidate' ] = candidate_array
    return result_data

def getColor(name):
    
    ret = getColorCode(name)
    if ret:
        return {'name':name,
                'cc': ret}
    
    #looseな対処
    if re.search(r'\w' ,name):
        return None
    
    ret = getColorCode(name + u"色")
    if ret:
        return {'name':name + u"色",     'cc': ret}
    ret = getColorCode(name + u"茶")
    if ret:
        return {'name':name + u"茶",     'cc': ret}
    ret = getColorCode(name + u"ちゃ")
    if ret:
        return {'name':name + u"ちゃ",   'cc': ret}
    ret = getColorCode(name + u"しょく")
    if ret:
        return {'name':name + u"しょく", 'cc': ret}
    ret = getColorCode(name + u"いろ")
    if ret:
        return {'name':name + u"いろ",   'cc': ret}

def test():
    print atok_plugin_run_process({'composition_string': u'茜'})
    
if __name__ == '__main__':
    test()