summaryrefslogtreecommitdiff
path: root/prettytable.py
diff options
context:
space:
mode:
authorluke@maurits.id.au <luke@maurits.id.au@0f58610c-415a-11de-9c03-5d6cfad8e937>2012-07-26 07:59:10 +0000
committerluke@maurits.id.au <luke@maurits.id.au@0f58610c-415a-11de-9c03-5d6cfad8e937>2012-07-26 07:59:10 +0000
commitdfeb0c6957b58ce3834e319701c70a8e4e14d8ab (patch)
tree0e2a9a99f5a3e8ca3e2679e276a926fdfbbc1d73 /prettytable.py
parente539f3a64cfa8b8906f664933508467556a27fb8 (diff)
downloadpython-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.py22
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