diff options
author | luke@maurits.id.au <luke@maurits.id.au@0f58610c-415a-11de-9c03-5d6cfad8e937> | 2012-07-26 07:59:10 +0000 |
---|---|---|
committer | luke@maurits.id.au <luke@maurits.id.au@0f58610c-415a-11de-9c03-5d6cfad8e937> | 2012-07-26 07:59:10 +0000 |
commit | dfeb0c6957b58ce3834e319701c70a8e4e14d8ab (patch) | |
tree | 0e2a9a99f5a3e8ca3e2679e276a926fdfbbc1d73 /prettytable.py | |
parent | e539f3a64cfa8b8906f664933508467556a27fb8 (diff) | |
download | python-prettytable-dfeb0c6957b58ce3834e319701c70a8e4e14d8ab.tar.gz |
Made sure field name widths are calculated using the new Unicode-aware code so that e.g. Japanese field names are rendered correctly.
Added a table of Japanese text to the unit tests to help make sure alignment of CJK characters is handled appropriately.
git-svn-id: http://prettytable.googlecode.com/svn/trunk@84 0f58610c-415a-11de-9c03-5d6cfad8e937
Diffstat (limited to 'prettytable.py')
-rw-r--r-- | prettytable.py | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/prettytable.py b/prettytable.py index 1fbd42d..59d51a2 100644 --- a/prettytable.py +++ b/prettytable.py @@ -943,12 +943,7 @@ class PrettyTable(object): fieldname = field.lower() else: fieldname = field - if self._align[field] == "l": - bits.append(" " * lpad + fieldname.ljust(width) + " " * rpad) - elif self._align[field] == "r": - bits.append(" " * lpad + fieldname.rjust(width) + " " * rpad) - else: - bits.append(" " * lpad + fieldname.center(width) + " " * rpad) + bits.append(" " * lpad + self._justify(fieldname, width, self._align[field]) + " " * rpad) if options["border"]: bits.append(options["vertical_char"]) if options["border"] and options["hrules"] != NONE: @@ -1138,12 +1133,27 @@ def _char_block_width(char): # Chinese, Japanese, Korean (common) if 0x4e00 <= char <= 0x9fff: return 2 + # Hangul + if 0xac00 <= char <= 0xd7af: + return 2 # Combining? if unicodedata.combining(uni_chr(char)): return 0 # Hiragana and Katakana if 0x3040 <= char <= 0x309f or 0x30a0 <= char <= 0x30ff: return 2 + # Full-width Latin characters + if 0xff01 <= char <= 0xff60: + return 2 + # CJK punctuation + if 0x3000 <= char <= 0x303e: + return 2 + # Backspace and delete + if char in (0x0008, 0x007f): + return -1 + # Other control characters + elif char in (0x0000, 0x001f): + return 0 # Take a guess return 1 |