Hi, all,

I am pleased to announce the availability of Remind 06.01.01 at
https://dianne.skoll.ca/projects/remind/

This release fixes long-standing problems with UTF-8 / Unicode string
handling in Remind.

The built-in string functions were not Unicode-aware: They operated on
bytes, not characters.  So something like:

    SET b "🙂🙂🙂🙂🙂"
    SET a substr(b, 1, 2)

sets a to an invalid UTF-8 sequece 0xF0, 0x9F

The new function mbsubstr works correctly:

    SET b "🙂🙂🙂🙂🙂"
    SET a mbsubstr(b, 1, 2)

sets a to "🙂🙂"

Direct download links:
Tar: https://dianne.skoll.ca/projects/remind/download/remind-06.01.01.tar.gz
GPG: https://dianne.skoll.ca/projects/remind/download/remind-06.01.01.tar.gz.sig
Git: https://git.skoll.ca/Skollsoft-Public/Remind

The git repo is password-protected to avoid AI scrapers; log in as
user "notabot" with password "notabot".  Alternatively, the mirror
https://salsa.debian.org/dskoll/remind does not require a login.

Complete release notes since the last release are below.

Regards,

Dianne.

* VERSION 6.1 Patch 1 - 2025-09-12

- NEW FEATURE: remind: Add the new --max-expr-complexity=n
  command-line argument.  It is possible to write expressions that use
  enormous amounts of CPU time, such as the following:

          FSET fib(n) iif(n <= 2, 1, fib(n-1)+fib(n-2))
          SET a fib(100)

  That will take essentially forever to execute, but will not hit the
  built-in recursion limit.  Using a command-line argument of
  --max-expr-complexity=1000000 will terminate evaluation in a few
  dozen milliseconds on modern hardware, and should not affect
  realistic reminder scripts.  See the man page for details.

- IMPROVEMENT: remind: Add UTF-8-aware functions to complement the
  byte-aware functions that could give incorrect results by splitting
  a UTF-8 character sequence.  The correspondence between old and new
  functions is:

     NON-UTF-8-AWARE   UTF-8-AWARE
     ===============   ===========
     strlen            mbstrlen
     substr            mbsubstr
     index             mbindex
     char              mbchar
     asc               codepoint

  See the remind(1) man page for details.

- MINOR NEW FEATURE: remind: You can use hexadecimal integer constants
  like 0xFE12 in expressions.  This is mostly useful for using
  codepoint() since Unicode code points are often expressed in
  hexadecimal.

- BUG FIX: remind: When truncating a string when executing DUMPVARS or
  during debugging of expression evaluation, Remind could sometimes
  cut the string in the middle of a UTF-8 sequence.  This has been
  fixed.

* VERSION 6.1 Patch 0 - 2025-09-08

Attachment: pgpCkE3vIc0rt.pgp
Description: OpenPGP digital signature

_______________________________________________
Remind-fans mailing list
[email protected]
https://dianne.skoll.ca/mailman/listinfo/remind-fans
Remind is at https://dianne.skoll.ca/projects/remind/

Reply via email to