Bonsoir Jean Louis,

WOW!

On 19.07.2026 13:50, Jean Louis Faucher wrote:


On 29 Jun 2026, at 19:30, Jean Louis Faucher <[email protected]> wrote:


The documentation is still in progress. I will create a second release once it 
is finalized.


The second release is now available, together with the reference documentation.
https://github.com/jlfaucher/executor5-bulk/releases

It is a toolkit for implementing buit-in functions and built-in methods that 
support UTF-8 strings.

May I just ask a few questions, as obviously the implementation stems from a top Unicode and ooRexx expert?

Using your github location I also have checked out the project such that I can update locally and look at your _diary.txt how you progress. This also allows me to get access to your scripts and testscripts


   loadPackage OK for extension/stringChunk.cls loadPackage OK for 
utilities/indentedStream.cls
   loadPackage OK for oorexxshell_clauser.cls loadPackage OK for 
extension/std/extensions-std.cls
   loadPackage OK for procedural/dispatcher.cls loadPackage OK for 
extension/callable_std.cls
   loadPackage OK for extension/extender_std.cls loadPackage OK for
   extension/stringChunkMatcher.cls loadLibrary OK for rxunixsys loadPackage OK 
for ncurses.cls
   loadPackage OK for csvStream.cls loadPackage OK for dateparser.cls 
loadLibrary OK for hostemu
   loadPackage OK for json.cls loadPackage OK for mime.cls loadPackage OK for 
rxftp.cls loadLibrary
   OK for rxmath loadPackage OK for rxregexp.cls loadPackage OK for 
regex/regex.cls loadPackage OK
   for smtp.cls loadPackage OK for socket.cls loadPackage OK for 
streamsocket.cls loadPackage OK
   for yaml.cls loadPackage OK for pipeline/pipe.cls loadPackage OK for 
rgf_util2/rgf_util2.rex
   loadPackage OK for BSF.CLS loadPackage OK for jdor.cls loadPackage OK for
   oorexxshell_queries_std.cls loadPackage OK for pipeline/pipe_std.cls 
loadPackage OK for
   Rexx.Parser.cls loadPackage OK for Unicode.cls loadPackage OK for 
rxunicode.cls
   REXX-ooRexx_5.3.0(MT)_64-bit 6.06 16 Jul 2026 Input queue name: 
S120ceQ600003a04cc0
   -- Unicode Regression Tests
   ooRexx>tutor off


   -- 
=============================================================================== 
-- 2026 July 15
   /* [Unicode] utf8proc facade: Add the wrapper function RexxInteger
   *codepointEastAsianWidthIsAmbiguous(RexxInteger *rexxCodepoint); // boolean 
Examples: */
   ooRexx>.RexxUnicodeServices~codepointEastAsianWidthIsAmbiguous(0)= -- 0
     0
   ooRexx>.RexxUnicodeServices~codepointEastAsianWidthIsAmbiguous("00A1"~x2d)= 
-- 1
     1
   ooRexx>.RexxUnicodeServices~codepointEastAsianWidthIsAmbiguous("2010"~x2d)= 
-- 1
     1


   -- 
=============================================================================== 
-- 2026 July 14
   /* [Unicode] Update stringEscape to use the shorter notation \xXX when 
applicable. Before:
   \x{80} Now: \x80 Update escapedHexdigits to use the shorter notation \xXX 
when applicable. */

   -- 
=============================================================================== 
-- 2026 July 13
   /* [Unicode] .RexxUnicodeStringIndexer: Update 
.RexxUnicodeStringIndexer~init Storage limits can
   be specified when creating the indexer; the default is no limit: - 
codepointStorageLimit -
   graphemeStorageLimit - errorStorageLimit End storage sizes can be specified 
when creating the
   indexer; the default is 0. - endCodepointStorageSize - 
endGraphemeStorageSize -
   endErrorStorageSize .RexxUnicodeStringIndexer~init( string, -- Storage limits
   codepointStorageLimit = (.RexxInfo~internalMaxNumber), graphemeStorageLimit =
   (.RexxInfo~internalMaxNumber), errorStorageLimit = 
(.RexxInfo~internalMaxNumber) -- End storage
   sizes endCodepointStorageSize = 0, endGraphemeStorageSize = 0, 
endErrorStorageSize = 0 ) Add
   ::attribute codepointStorageLimit get Add ::attribute graphemeStorageLimit 
get Add ::attribute
   errorStorageLimit get Add ::attribute codepointCount get -- count after full 
scan, not impacted
   by codepointStorageLimit Add ::attribute graphemeCount get -- count after 
full scan, not
   impacted by graphemeStorageLimit Add ::attribute errorCount get -- count 
after full scan, not
   impacted by errorStorageLimit Add ::attribute endCodepointStorageSize get 
Add ::attribute
   endGraphemeStorageSize get Add ::attribute endErrorStorageSize get Add 
::attribute
   endCodepointIndexes get Add ::attribute endGraphemeIndexes get Add 
::attribute endErrors get
   Examples */ ... cut ...

The questions:

 * So there are two indexers/iterators, one for CodePoints, one for Graphemes?
 * What is the purpose of "storage limits" when using both iterators, why do 
they exist?



Next steps (depending on my motivation):

  * Backport the RexxTextTransformer class
    
<https://github.com/jlfaucher/executor5-bulk/blob/main/main/trunk/extensions/unicode/_notes-transformer.txt>
 from
    Executor, renamed RexxUnicodeStringTransformer.
  * Implement a native version
    
<https://github.com/jlfaucher/executor/blob/master/sandbox/jlf/unicode/AI/Claude%20Pro%20grapheme-indexer-review-question2-2026.03.12.md>
 of
    RexxUnicodeStringIndexer.
  * Implement a native version
    
<https://github.com/jlfaucher/executor/blob/master/sandbox/jlf/unicode/AI/Claude%20Pro%20text-transformer-architecture-question2c-2026.03.12.md>
 of RexxUnicodeStringTransformer.
  * Backport the native RexxText class
    
<https://htmlpreview.github.io/?https://github.com/jlfaucher/executor/blob/master/sandbox/jlf/_changes.html#encoded-strings>
 from
    Executor (simplified version, without extensions, without an encoding 
object, limited to UTF-8).
  * Backport the dynamic target
    
<https://htmlpreview.github.io/?https://github.com/jlfaucher/executor/blob/master/sandbox/jlf/_changes.html#dynamic-target-when-sending-a-message>
 from
    Executor.
  * At this stage, the Unicode architecture is operational. Scripts that start with 
"encoding:
    utf-8" will automatically use RexxText instances when a string is not 
ASCII. RexxText
    instances do not yet provide the equivalent of RexxString's methods. By 
default, RexxText
    forwards messages to RexxString.

Thank you very much for the links, *very* interesting reading, but also technically overwhelming  (too much for me at the moment due to lack of time and knowhow in this domain).

However, I sincerely hope that you remain motivated, please!! :)



The final stage will be to implement the equivalent of RexxString's methods on RexxText, with full Unicode support. These methods will use grapheme indexes exclusively.

For example, the description of the ~left method in the rexxref documentation 
states:
"Returns a string of length length, containing the leftmost length characters of the receiving string."

This description applies unchanged to RexxText, with character interpreted as 
grapheme.

That would be *phantastic* !!

Please keep up your great work!!

---rony
_______________________________________________
Oorexx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to