From da35e9bc326c3a46c7fb869a8f92adade7f21fb5 Mon Sep 17 00:00:00 2001 From: Rolux Date: Sat, 5 Jul 2008 19:03:23 +0200 Subject: [PATCH] adding wrap function --- oxlib/__init__.py | 1 + oxlib/str.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 oxlib/str.py diff --git a/oxlib/__init__.py b/oxlib/__init__.py index 240a5c1..91dc59b 100644 --- a/oxlib/__init__.py +++ b/oxlib/__init__.py @@ -4,6 +4,7 @@ from hashes import * from html import * +from str import * from text import * from format import * import net diff --git a/oxlib/str.py b/oxlib/str.py new file mode 100644 index 0000000..d5e7575 --- /dev/null +++ b/oxlib/str.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# vi:si:et:sw=4:sts=4:ts=4 + +def wrap(string, length, separator, balance): + if balance: + # balance lines: test if same number of lines + # can be achieved with a shorter line length + lines = wrap(string, length, separator, False).split(separator) + if len(lines) > 1: + while length > max(map(lambda x : len(x), string.split(' '))): + length -= 1 + if len(wrap(string, length, separator, False).split(separator)) > len(lines): + length += 1 + break + words = string.split(' ') + lines = [''] + for word in words: + if len(lines[len(lines) - 1] + word + ' ') <= length + 1: + # word fits in current line + lines[len(lines) - 1] += word + ' '; + else: + if len(word) <= length: + # word fits in next line + lines.append(word + ' ') + else: + # word is longer than line + position = length - len(lines[len(lines) - 1]) + 1 + lines[len(lines) - 1] += word[0:position] + for i in range(position, len(word), length): + lines.append(word[i:i+length]); + lines[len(lines) - 1] += ' ' + return separator.join(lines).strip()