Dan Kogai <[EMAIL PROTECTED]> writes: >Folks, > > I have released Encode ver.1.41 as follows. > >Whole: > http://www.dan.co.jp/~dankogai/Encode-1.41.tar.gz > CPAN >Diff: > http://www.dan.co.jp/~dankogai/current-1.41.diff.gz > >=head1 CAUTION
I am not sure when the change went in, but current Encode.xs has broken Tk804. With $encoding->decode($string,1) now croaks if character does not map. Croaking is fine as a default for checking but Tk would like a value of check which does not croak, but just returns leaving $string starting with the failing character. I could do a G_EVAL but that is a lot of overhead, and does not tell me which character position failed (unless $string is updated before the croak.) (Tk does 10,000s of probes - found a character XXXX, have font with encoding YYYY, can YYYY encode XXXX ? I hope to reduce that number by refining the code but it will still do a lot) With current Encode I don't get to try any interesting fonts because it croaks when Tk asks iso-8859-1 if it can do the interesting character :-( Right now we have: check == 0, fallback char (New and overdue - thanks!) check == -1, perlqq \X{xxxx} style croak otherwise \N{U+XXXX} style croak (Did \N{U+XXXX} get (back) in ? - I seem to recall it got removed once.) You have established the principle of check values meaning something (which was always the plan). Can I suggest though that we make it a bit mask - a stab at an initial set of bits : check == 0 - fallback (check & 3) == 1 - croak (check & 3) == 2 - warn (check & 3) == 3 - silent return (check & 4) - \x{xxxx} vs \N{U+XXXX} If you like make $string adjustment optional check & 8 - Update Don't bother to update $string. Thus check == 0 - fallbacks check == 1 - \N{U+XXXX} croak check == 2 - \x{XXXX} croak check == 3 - silent fail chack == 4 - Uninteresting check == 5 - \N{U+XXXX} warn check == 6 - \x{XXXX} warn check == 11 - silent fail with $string updated (What Tk wants) Better schemes welcome. Another alternative hinted at in old pods was passing check as an SV. Then if SV was a scalar ref, then set $str to point at fail and return reason code in the scalar. PS: To pick nits - Encode.xs's "layout" looks rather peculiar with perl source's default tab setting of 8 and expected indent of 4, and many of files you have touched now have trailing whitespace on ends of lines. -- Nick Ing-Simmons http://www.ni-s.u-net.com/