paul j3 added the comment:
One way of marking a string for special wrap handing is to make it an instance
of a subclass of 'str'.
This patch adds class _WhitespaceStyle(str), and 5 subclasses corresponding to
the possible values of the CSS whitespace:.
Normal
Pre
NoWrap
PreLine
PreWrap
Together they define methods:
_str_format() - apply % style formatting
format() - apply the py3 {} style formatting
_split_lines() - style specific split_lines (may or may not pass through
text_wrap)
_fill_text() - style specific fill_text (again without without test_wrap)
All return a text object of the same class (as self). This make it possible to
apply the % formatting to a string, and then apply the wrapping, without
loosing class information:
Pre('sample text
%(default)s')._str_format(dict(default='Boo'))._fill_text(30, ' ')
This subclass information is lost when the string pass through other 'str'
operations, for example '\n'.join(). I needed to add _str_format because %
formatting is applied to them before text_wrap.
The HelpFormatter has:
_str_format() - all the previous % formatting instances
_split_lines()
_fill_text()
These delegate the action to the respective white_space classes, or use the
(default) Normal subclass if the text is a plain 'str'.
test_argparse.py has 2 test cases that use the 'Pre' class to replicate the
behaviour of the Raw...HelpFormatter class tests. Undoubtedly it needs further
tests to handle all of these new classes.
I haven't made any doc changes yet.
I wrote these classes based on the descriptions of what the CSS options do, but
I have not tried to compare the handling of sample text. I can also imagine
users wanting to refine the wrap handling further (e.g.
http://bugs.python.org/issue12806).
I intend to write test files to show how these new classes could be used in the
various issues that I listed in the previous post.
------------
Since I had to collect the % formatting cases into one _str_format() method (to
preserve class information), I am also exploring the use of Py3 {} formatting.
Py3FormatHelpFormatter - a new Formatter class that redefines _str_format() to
handle {} style formatting (if present). I put this in a separate class
because there is a slight possibility that existing code has text that might be
confused for Py3 style formatting, e.g.
help='help text {default: %(default)s}'
I think the issue of using Py3 formatting was raised and rejected. So I'm not
committed to including this feature.
----------
keywords: +patch
Added file: http://bugs.python.org/file36023/issue22029_1.patch
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue22029>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com