« texteditor.pyw 一応完成? | トップページ | Independence Day »

2007年7月 4日

全角半角を加味したセンタリング、左寄せ、右寄せ

Unicode の East Asian Width を考慮した center, ljust, rjust の Python スクリプト。slen で全角を2文字分と数えた文字数も取れます。

'''The East Asia character width was considered. len, ljust, rjust, center.'''

import unicodedata

def slen(s, ambiguous=True):
    '''The length of the character string by the East Asia character width'''     if ambiguous:   # 文脈依存の文字(ギリシャ文字、ロシア文字等)を全角に扱うか         w = 'W', 'F', 'A'     else:
        w = 'W', 'F'     return sum((unicodedata.east_asian_width(x) in w) + 1 for x in s)

def _s(s, width, ambiguous):
    return max(width - slen(s, ambiguous), 0)

def ljust(s, width, fillchar=' ', ambiguous=True):
    return s + fillchar * _s(s, width, ambiguous)

def rjust(s, width, fillchar=' ', ambiguous=True):
    return fillchar * _s(s, width, ambiguous) + s

def center(s, width, fillchar=' ', ambiguous=True):
    space = _s(s, width, ambiguous)
    r = space // 2
    L = space - r
    return fillchar * L + s + fillchar * r


if __name__ == "__main__":
    for i in (u'hoge,ほげ,Объект,독도,饺子,±,␣,'               u'\N{IDEOGRAPHIC SPACE},'               u'\N{ZERO WIDTH NO-BREAK SPACE}').split(','):
        for a in False, True:
            print center(i, 9, '*', ambiguous=a),
            print clen(i, ambiguous=a), i
# 好きに流用してください

« texteditor.pyw 一応完成? | トップページ | Independence Day »

Python」カテゴリの記事

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/68856/15648718

この記事へのトラックバック一覧です: 全角半角を加味したセンタリング、左寄せ、右寄せ:

« texteditor.pyw 一応完成? | トップページ | Independence Day »

ブログ妖精

  • ココロ

Affiliate

無料ブログはココログ