Visitar URL original
textwrap.wrap: add control for fonts with different character widths · Issue #56708 · python/cpython · GitHub
Skip to content

textwrap.wrap: add control for fonts with different character widths #56708

Description

@parent5446
mannequin
BPO 12499
Nosy @birkenfeld, @amauryfa, @merwok, @serhiy-storchaka, @xi
PRs
  • gh-56708: support custom len function in textwrap.wrap #28136
  • Files
  • textwrap.py-widthfunction-2011-07-04_22-57-49_r71219+.diff: Addition of custom width function to textwrap.py.
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2011-07-05.03:03:24.379>
    labels = ['type-feature', 'library', '3.11']
    title = 'textwrap.wrap: add control for fonts with different character widths'
    updated_at = <Date 2021-09-03.18:32:07.776>
    user = 'https://bugs.python.org/parent5446'

    bugs.python.org fields:

    activity = <Date 2021-09-03.18:32:07.776>
    actor = 'eric.araujo'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Library (Lib)']
    creation = <Date 2011-07-05.03:03:24.379>
    creator = 'parent5446'
    dependencies = []
    files = ['22574']
    hgrepos = []
    issue_num = 12499
    keywords = ['patch', 'needs review']
    message_count = 6.0
    messages = ['139828', '139829', '139881', '139894', '231092', '401011']
    nosy_count = 6.0
    nosy_names = ['georg.brandl', 'amaury.forgeotdarc', 'eric.araujo', 'parent5446', 'serhiy.storchaka', 'xi2']
    pr_nums = ['28136']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue12499'
    versions = ['Python 3.11']

    Activity

    1. parent5446 commented on Jul 5, 2011

      parent5446mannequin
      MannequinAuthor

      Originally from http://bugs.python.org/issue12485 but separated.

      The textwrap modules uses len to determine the length of text, but in many (if not most) fonts, the width of a character differs depending on the letter, so it would be useful to have an option to pass a custom function that returns the width of a given string of text.

    2. added
      stdlibStandard Library Python modules in the Lib/ directory
      type-featureA feature request or enhancement
      on Jul 5, 2011
    3. amauryfa commented on Jul 5, 2011

      @amauryfa
      Contributor

      About the patch: the function should not be passed to the constructor, it could be a regular method that can be overridden in subclasses.

    4. merwok commented on Jul 5, 2011

      @merwok
      Member

      Amaury, do you think it’s more common to subclass TextWrapper than just instantiate it? I find the proposed API (an argument to __init__) very intuitive.

    5. parent5446 commented on Jul 5, 2011

      parent5446mannequin
      MannequinAuthor

      Normally I would have just added it as a function to be overloaded, but because of the nature of the textwrap.wrap function (all kwargs are passed to the TextWrapper constructor) I thought it made a lot more sense to keep it as an argument to __init__.

    6. serhiy-storchaka commented on Nov 12, 2014

      @serhiy-storchaka
      Member

      Both approaches can be combined. It could be a regular overridable method, and it could be overridded for an instance if corresponding argument is specified. See the default method and parameter of JSON encoder.

      I slightly hesitate about the name. Is "width_func" the best of names?

    7. merwok commented on Sep 3, 2021

      @merwok
      Member

      A PR was opened for this. text_len is used as param/attribute name.

    8. transferred this issue fromon Apr 10, 2022
    9. kdeldycke commented on Jun 30, 2026

      @kdeldycke

      I just proposed a PR for this issue at: #152702

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      3.11only security fixesstdlibStandard Library Python modules in the Lib/ directorytype-featureA feature request or enhancement

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions