Skip to content

Commit da1a1e8

Browse files
author
luke@maurits.id.au
committed
1) Fixed width calculation for katakana
2) Strip data read from .csv files git-svn-id: http://prettytable.googlecode.com/svn/trunk@80 0f58610c-415a-11de-9c03-5d6cfad8e937
1 parent 25c95c8 commit da1a1e8

File tree

1 file changed

+27
-22
lines changed

1 file changed

+27
-22
lines changed

prettytable.py

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,6 +1121,31 @@ def _get_formatted_html_string(self, options):
11211121

11221122
return self._unicode("\n").join(lines)
11231123

1124+
##############################
1125+
# UNICODE WIDTH FUNCTIONS #
1126+
##############################
1127+
1128+
def _char_block_width(char):
1129+
char = ord(char)
1130+
# Basic Latin, which is probably the most common case
1131+
if char in range(0x0021, 0x007e):
1132+
return 1
1133+
# Chinese, Japanese, Korean (common)
1134+
if char in range(0x4e00, 0x9fff):
1135+
return 2
1136+
# Combining?
1137+
if unicodedata.combining(uni_chr(char)):
1138+
return 0
1139+
# Hiragana and Katakana
1140+
if char in range(0x3040, 0x309f) or char in range(0x30a0, 0x30ff):
1141+
return 2
1142+
# Take a guess
1143+
return 1
1144+
1145+
def _str_block_width(val):
1146+
1147+
return sum(itermap(_char_block_width, val))
1148+
11241149
##############################
11251150
# TABLE FACTORIES #
11261151
##############################
@@ -1135,10 +1160,10 @@ def from_csv(fp, field_names = None):
11351160
if field_names:
11361161
table.field_names = field_names
11371162
else:
1138-
table.field_names = reader.next()
1163+
table.field_names = [x.strip() for x in reader.next()]
11391164

11401165
for row in reader:
1141-
table.add_row(row)
1166+
table.add_row([x.strip() for x in row])
11421167

11431168
return table
11441169

@@ -1173,23 +1198,3 @@ def main():
11731198

11741199
if __name__ == "__main__":
11751200
main()
1176-
1177-
def _char_block_width(char):
1178-
# Basic Latin, which is probably the most common case
1179-
if char in range(0x0021, 0x007e):
1180-
return 1
1181-
# Chinese, Japanese, Korean (common)
1182-
if char in range(0x4e00, 0x9fff):
1183-
return 2
1184-
# Combining?
1185-
if unicodedata.combining(uni_chr(char)):
1186-
return 0
1187-
# Hiragana and Katakana
1188-
if char in range(0x3040, 0x309f):
1189-
return 2
1190-
# Take a guess
1191-
return 1
1192-
1193-
def _str_block_width(val):
1194-
1195-
return sum(map(_char_block_width, map(ord, val)))

0 commit comments

Comments
 (0)