Revision history for Perl extension Text-ANSI-Fold

2.3901 2026-11-12T10:44:04Z

    - A form feed after nothing but ANSI sequences, as in a form feed
      with a color ("\e[31m\f\e[m"), is taken as at the beginning of
      the text and is kept where it is.  It was taken as in the middle,
      and the same text was given back as the rest forever: ansifold
      died with "no progress in fold", and ansicolumn did not end

2.39 2026-11-06T10:11:59Z

    - CJK punctuation is not a word character with boundary => "word":
      \p{Hangul} took 、。「」 and others, so 」78、「extractor was taken as one word and
      the line was broken before it

2.38 2026-11-05T05:30:44Z

    - Take a colon in SGR and EL parameters: ESC[4:3m was cut in the middle when folded

2.37 2026-11-03T08:07:06Z

    - Do not die with "no progress" or hang when a line has only the prefix:
      a wide character after the prefix may make the line one column too
      long instead
    - Do not count sequences such as erase line as visible text in the
      word boundary and run-out checks, and in the width of the prefix
    - Do not run in the filler of splitwide, which made the line too wide
    - Keep a sequence with no visible text after it on a line of exactly
      the width, instead of making an extra line for it
    - Require Text::VisualWidth::PP 0.09, which gives the right width of
      new emoji on perl 5.30 or later

2.36 2026-11-03T01:17:52Z

    - Add trim option, which removes ASCII spaces at the end of folded
      lines, so that a space brought there by run-in does not make the
      line longer than the width
    - Fold long paragraphs and wide characters faster.  The time for a
      line no longer depends on the length of the paragraph
    - Keep a grapheme in one line as far as the perl in use supports it;
      before perl 5.22, one in a long paragraph may rarely be split
    - Do not make a line too wide with an emoji ZWJ sequence

2.35 2026-10-29T05:09:39Z

    - Fix the width returned by fold when margin is given
    - Add length parameter to chops to get the width of each chop

2.34 2026-10-28T10:01:35Z

    - Give no width to CSI other than SGR, such as cursor movement

2.3305 2026-02-07T09:03:57Z

    - Fix boundary=word regex to exclude C1 control characters
      (\x9b for CSI, \x9d for OSC) from plain text consumption

2.3304 2026-02-03T12:05:24Z

    - Accept non-ASCII characters in OSC command string
      (extends ECMA-48 for URLs with non-ASCII; excludes C1 controls)

2.3303 2026-02-03T04:27:19Z

    - Fix panic in retrieve when splitwide replaces a wide character
      (length comparison changed to string equality for progress check)

2.3302 2026-02-01T15:52:56Z

    - Fix infinite loop when folding OSC 8 links at narrow width
      (pwidth now strips OSC sequences; word boundary and run-out
      pushback suppressed when no visible chars remain in folded text)
    - Add progress check in retrieve to panic on no-progress fold

2.3301 2026-02-01T14:44:21Z

    - Fix word boundary regex to skip OSC sequences
      (prevents splitting SGR sequences like \e[48;5;254m across fold boundaries)

2.33 2026-01-31T01:50:51Z

    - Add OSC 8 hyperlink state tracking across fold boundaries

2.32 2026-01-18T04:06:24Z

    - Fix OSC regex to conform to ECMA-48 specification
      (0x08-0x0d and 0x20-0x7e for command string)
    - Add OSC 8 hyperlink tests

2.31 2026-01-11T02:25:18Z

    - restore EL (Erase Line) sequence when folding
    - fix padding calculation for run-in (remove @bg_stack hack)
    - document margin parameter

2.30 2025-02-13T12:31:56Z

    - add Default_Ignorable_Code_Point to non-spacing character
    - CR at the end of string does not reset the position

2.29 2025-01-30T07:26:13Z

    - use Text::VisualWidth::PP@0.07
      this enables handling Emoji_Modifier and Zero_Width_Joiner

2.28 2025-01-27T13:22:37Z

    - imcomplete CSI sequence consumes zero width

2.2702 2024-12-30T23:48:13Z

    - rename "crackwide" to "splitwide"

2.2701 2024-11-20T09:41:03Z

    - improve "crackwide" behavior

2.27 2024-11-20T07:12:51Z

    - introduce "crackwide" and "lefthalf/righthalf" parameter

2.26 2024-11-17T09:01:37Z

    - treat VT as EOL as well
    - disable padding when width is negative

2.25 2024-11-15T07:43:18Z

    - treat NULL and "line/paragraph separator" as end-of-line
    - improve backspace handing
    - write CONTROL CHARACTERS section

2.24 2024-11-10T09:43:35Z

    - Improve formfeed character handling

2.23 2024-04-16T08:36:06Z

    - Rename tabstyle name 'pin' to 'needle'.

2.22 2024-03-23T09:22:27Z

    - Add new tabstyle (blank, triangle) and rename bar -> pin.

2.2104 2023-11-29T08:59:32Z

    - Localize $Text::VisualWidth::PP::EastAsian.

2.2103 2023-11-28T00:23:14Z

    - Validate given width is an integer.

2.2102 2023-02-20T09:52:02Z

    - Fix a bug of Hangul word bondary length calculation.

2.2101 2023-02-14T10:09:52Z

    - Avoid the panic caused by escape only line.

2.20 2023-02-07T14:19:18Z

    - Treat \p{Greek}, \p{Cyrillic}, \p{Hangul} as word character as well.

2.19 2023-01-06T02:30:22Z

    - Allow double-struck run-in/out characters with backspace.
    - Move git repository.

2.18 2023-01-05T06:24:41Z

    - Allow boundary word to include backspaces.

2.17 2022-12-19T10:07:17Z

    - Add middle-dot and emspace tabstyles.

2.16 2022-10-07T06:27:16Z

    - Make :regex tagged variables exportable.

2.15 2022-09-26T01:13:52Z

    - Fix bug of --boundary=word does not work with --prefix option.

2.14 2022-08-31T10:24:09Z

    - Method "text" has :lvalue attribute and is now assignable.
    - Non-number width parameter causes fatal error in fold().

2.1301 2022-08-05T08:10:23Z

    - Fix bug of losing "0" with word-boundary.

2.13 2022-03-02T05:13:45Z

    - Introduce "prefix" parameter.

2.12 2021-10-15T02:53:14Z

    - Accept 8-bit CSI and OSC sequence.
    - Avoid v5.16 error by loading 'charnames' only when < v5.16.

2.1101 2021-09-06T06:34:56Z

    - Fix bug of leaving EL after RESET when run-in.

2.11 2021-08-07T03:24:46Z

    - Make boundary parameter to take 'space' value.

2.10 2021-04-09T10:12:10Z

    - Add some new tab styles.
    - Accept multiple styles.

2.0903 2021-03-13T14:12:27Z

    - Fix option processing order bug. (sigh...)

2.0902 2021-03-13T07:11:48Z

    - Fix error message bugs.

2.0901 2021-03-13T06:52:47Z

    - Make 'tabstyle' option overridable by following options.

2.09 2021-03-13T05:44:34Z

    - Introduce 'tabstyle' option.

2.08 2020-12-16T05:03:22Z

    - Introduce 'tabhead' and 'tabspace' options.

2.07 2020-11-20T08:54:39Z

    - Add dependency for List::Util.

2.06 2020-11-12T04:18:29Z

    - More robust definition of CSI sequence.
    - Change keep_el -> discard.

2.05 2020-11-11T08:24:22Z

    - Fix word boundary handling bug introduced at 2.03.

2.04 2020-11-06T04:20:15Z

    - Add keep_el parameter to control keep Erase Line or not.

2.03 2020-11-06T03:29:06Z

    - Remember color at erase line sequence, and apply to padding string.

2.02 2020-11-04T05:31:35Z

    - Support backspaces.

2.01 2020-10-20T11:36:15Z

    - Implement tab expansion.

1.10 2020-09-19T04:56:59Z

    - Add prefix/postfix characters to prohibition rule.

1.09 2020-09-09T14:13:08Z

    - Update W3C.pm to 2020 version.

1.08 2020-07-13T00:05:27Z

    - Width parameter can take negative value and get the all rest.

1.07 2020-07-04T05:54:58Z

    - Eliminate indirect object call.

1.06 2020-06-09T06:30:59Z

    - Fix ANSI reset handling bug.

1.05 2020-04-28T08:34:30Z

    - Conform to ECMA-48 OPERATING SYSTEM COMMAND string terminator.

1.04 2020-04-03T01:26:58Z

    - Conform to ECMA-48 OPERATING SYSTEM COMMAND definition.

1.03 2020-03-30T14:10:39Z

    - Accept 0 in chops width array.

1.02 2019-11-02T01:51:42Z

    - Implement margin option and refine ANSI code handling.

1.01 2019-10-22T00:03:54Z

    - Implement line-break control (KINSOKU) for Japanese.

0.07 2019-09-19T12:11:24Z

    - configure() create private object when called by class method.
    - Make retrieve method handle padding properly.

0.06 2019-06-20T12:53:16Z

    - Ignore trailing formfeed and carriage return.

0.05 2018-12-07T00:54:35Z

    - Update "chops" funciton to accept array reference.

0.04 2018-11-19T05:10:31Z

    - Update "retrieve" function to take parameters.

0.03 2018-10-23T09:19:57Z

    - Add App::ansifold notation.

0.02 2018-07-21T14:56:01Z

    - Introduce string holding mechanism, with text() and chops() method.

0.01 2018-07-20T08:12:31Z

    - original version

