Change 18872 by [EMAIL PROTECTED] on 2003/03/09 20:43:09

        Integrate (and regen_headers):
        [ 18867]
        Upgrade to Encode 1.90 (plus the one extra use lib in enc_module.t)
        
        [ 18868]
        Export the symbols from #18863; do not prototype (but export)
        Nick Clark's experimental COW functions.
        Sidenote: the embed.fnc/embed.fnc/makedef.pl thing is becoming
        a mess of Herculean proportions.  Someone should redesign and
        clean up the stables.
        
        [ 18869]
        Upgrade to Encode 1.91.
        
        [ 18870]
        I hate embed*.  Tell me what you know.
        
        [ 18871]
        Must not hide the protos, though.

Affected files ...

... //depot/maint-5.8/perl/embed.fnc#19 edit
... //depot/maint-5.8/perl/embed.h#23 edit
... //depot/maint-5.8/perl/embed.pl#9 edit
... //depot/maint-5.8/perl/ext/Encode/AUTHORS#7 integrate
... //depot/maint-5.8/perl/ext/Encode/Changes#9 integrate
... //depot/maint-5.8/perl/ext/Encode/Encode.pm#9 integrate
... //depot/maint-5.8/perl/ext/Encode/Encode.xs#8 integrate
... //depot/maint-5.8/perl/ext/Encode/MANIFEST#8 integrate
... //depot/maint-5.8/perl/ext/Encode/encoding.pm#7 integrate
... //depot/maint-5.8/perl/ext/Encode/t/Mod_EUCJP.pm#2 integrate
... //depot/maint-5.8/perl/ext/Encode/t/enc_data.t#2 integrate
... //depot/maint-5.8/perl/ext/Encode/t/enc_module.t#2 integrate
... //depot/maint-5.8/perl/global.sym#12 edit
... //depot/maint-5.8/perl/perlapi.c#6 edit
... //depot/maint-5.8/perl/pod/perlapi.pod#9 edit
... //depot/maint-5.8/perl/proto.h#15 edit

Differences ...

==== //depot/maint-5.8/perl/embed.fnc#19 (text) ====
Index: perl/embed.fnc
--- perl/embed.fnc#18~18791~    Fri Feb 28 12:05:43 2003
+++ perl/embed.fnc      Sun Mar  9 12:43:09 2003
@@ -6,18 +6,22 @@
 :
 : flags are single letters with following meanings:
 :      A               member of public API
-:      m               Implemented as a macro - no export, no proto, no #define
+:      m               Implemented as a macro - no export, no
+:                      proto, no #define
 :      d               function has documentation with its source
-:      s               static function, should have an S_ prefix in source
-:                              file
+:      s               static function, should have an S_ prefix in
+:                      source file
 :      n               has no implicit interpreter/thread context argument
 :      p               function has a Perl_ prefix
 :      f               function takes printf style format string, varargs
 :      r               function never returns
 :       o              has no compatibility macro (#define foo Perl_foo)
 :       x              not exported
+:       X              explicitly exported
 :       M              may change
 :       E              visible to Perl core extensions
+:       b              binary backward compatibility; function is a macro
+:                      but has also Perl_ implementation (which is exported)
 :
 : Individual flags may be separated by whitespace.
 :
@@ -704,7 +708,7 @@
 Apd    |IV     |sv_2iv         |SV* sv
 Apd    |SV*    |sv_2mortal     |SV* sv
 Apd    |NV     |sv_2nv         |SV* sv
-Am     |char*  |sv_2pv         |SV* sv|STRLEN* lp
+Amb    |char*  |sv_2pv         |SV* sv|STRLEN* lp
 Apd    |char*  |sv_2pvutf8     |SV* sv|STRLEN* lp
 Apd    |char*  |sv_2pvbyte     |SV* sv|STRLEN* lp
 Ap     |char*  |sv_pvn_nomg    |SV* sv|STRLEN* lp
@@ -722,8 +726,8 @@
 Afpd   |void   |sv_catpvf      |SV* sv|const char* pat|...
 Ap     |void   |sv_vcatpvf     |SV* sv|const char* pat|va_list* args
 Apd    |void   |sv_catpv       |SV* sv|const char* ptr
-Amd    |void   |sv_catpvn      |SV* sv|const char* ptr|STRLEN len
-Amd    |void   |sv_catsv       |SV* dsv|SV* ssv
+Amdb   |void   |sv_catpvn      |SV* sv|const char* ptr|STRLEN len
+Amdb   |void   |sv_catsv       |SV* dsv|SV* ssv
 Apd    |void   |sv_chop        |SV* sv|char* ptr
 pd     |I32    |sv_clean_all
 pd     |void   |sv_clean_objs
@@ -760,7 +764,7 @@
 Ap     |char*  |sv_peek        |SV* sv
 Apd    |void   |sv_pos_u2b     |SV* sv|I32* offsetp|I32* lenp
 Apd    |void   |sv_pos_b2u     |SV* sv|I32* offsetp
-Amd    |char*  |sv_pvn_force   |SV* sv|STRLEN* lp
+Amdb   |char*  |sv_pvn_force   |SV* sv|STRLEN* lp
 Apd    |char*  |sv_pvutf8n_force|SV* sv|STRLEN* lp
 Apd    |char*  |sv_pvbyten_force|SV* sv|STRLEN* lp
 Apd    |char*  |sv_recode_to_utf8      |SV* sv|SV *encoding
@@ -773,6 +777,7 @@
 Afpd   |void   |sv_setpvf      |SV* sv|const char* pat|...
 Ap     |void   |sv_vsetpvf     |SV* sv|const char* pat|va_list* args
 Apd    |void   |sv_setiv       |SV* sv|IV num
+Apdb   |void   |sv_setpviv     |SV* sv|IV num
 Apd    |void   |sv_setuv       |SV* sv|UV num
 Apd    |void   |sv_setnv       |SV* sv|NV num
 Apd    |SV*    |sv_setref_iv   |SV* rv|const char* classname|IV iv
@@ -783,7 +788,7 @@
                                |STRLEN n
 Apd    |void   |sv_setpv       |SV* sv|const char* ptr
 Apd    |void   |sv_setpvn      |SV* sv|const char* ptr|STRLEN len
-Amd    |void   |sv_setsv       |SV* dsv|SV* ssv
+Amdb   |void   |sv_setsv       |SV* dsv|SV* ssv
 Apd    |void   |sv_taint       |SV* sv
 Apd    |bool   |sv_tainted     |SV* sv
 Apd    |int    |sv_unmagic     |SV* sv|int type
@@ -882,6 +887,7 @@
 Afpd   |void   |sv_setpvf_mg   |SV *sv|const char* pat|...
 Ap     |void   |sv_vsetpvf_mg  |SV* sv|const char* pat|va_list* args
 Apd    |void   |sv_setiv_mg    |SV *sv|IV i
+Apdb   |void   |sv_setpviv_mg  |SV *sv|IV iv
 Apd    |void   |sv_setuv_mg    |SV *sv|UV u
 Apd    |void   |sv_setnv_mg    |SV *sv|NV num
 Apd    |void   |sv_setpv_mg    |SV *sv|const char *ptr
@@ -914,10 +920,10 @@
 Apd    |char*  |sv_2pv_nolen   |SV* sv
 Apd    |char*  |sv_2pvutf8_nolen|SV* sv
 Apd    |char*  |sv_2pvbyte_nolen|SV* sv
-Amd    |char*  |sv_pv          |SV *sv
-Amd    |char*  |sv_pvutf8      |SV *sv
-Amd    |char*  |sv_pvbyte      |SV *sv
-Amd    |STRLEN |sv_utf8_upgrade|SV *sv
+Amdb   |char*  |sv_pv          |SV *sv
+Amdb   |char*  |sv_pvutf8      |SV *sv
+Amdb   |char*  |sv_pvbyte      |SV *sv
+Amdb   |STRLEN |sv_utf8_upgrade|SV *sv
 ApdM   |bool   |sv_utf8_downgrade|SV *sv|bool fail_ok
 Apd    |void   |sv_utf8_encode |SV *sv
 ApdM   |bool   |sv_utf8_decode |SV *sv

==== //depot/maint-5.8/perl/embed.h#23 (text+w) ====
Index: perl/embed.h
--- perl/embed.h#22~18804~      Sun Mar  2 08:22:35 2003
+++ perl/embed.h        Sun Mar  9 12:43:09 2003
@@ -1051,6 +1051,7 @@
 #define sv_setpvf              Perl_sv_setpvf
 #define sv_vsetpvf             Perl_sv_vsetpvf
 #define sv_setiv               Perl_sv_setiv
+#define sv_setpviv             Perl_sv_setpviv
 #define sv_setuv               Perl_sv_setuv
 #define sv_setnv               Perl_sv_setnv
 #define sv_setref_iv           Perl_sv_setref_iv
@@ -1179,6 +1180,7 @@
 #define sv_setpvf_mg           Perl_sv_setpvf_mg
 #define sv_vsetpvf_mg          Perl_sv_vsetpvf_mg
 #define sv_setiv_mg            Perl_sv_setiv_mg
+#define sv_setpviv_mg          Perl_sv_setpviv_mg
 #define sv_setuv_mg            Perl_sv_setuv_mg
 #define sv_setnv_mg            Perl_sv_setnv_mg
 #define sv_setpv_mg            Perl_sv_setpv_mg
@@ -3533,6 +3535,7 @@
 #define sv_reset(a,b)          Perl_sv_reset(aTHX_ a,b)
 #define sv_vsetpvf(a,b,c)      Perl_sv_vsetpvf(aTHX_ a,b,c)
 #define sv_setiv(a,b)          Perl_sv_setiv(aTHX_ a,b)
+#define sv_setpviv(a,b)                Perl_sv_setpviv(aTHX_ a,b)
 #define sv_setuv(a,b)          Perl_sv_setuv(aTHX_ a,b)
 #define sv_setnv(a,b)          Perl_sv_setnv(aTHX_ a,b)
 #define sv_setref_iv(a,b,c)    Perl_sv_setref_iv(aTHX_ a,b,c)
@@ -3657,6 +3660,7 @@
 #define sv_catsv_mg(a,b)       Perl_sv_catsv_mg(aTHX_ a,b)
 #define sv_vsetpvf_mg(a,b,c)   Perl_sv_vsetpvf_mg(aTHX_ a,b,c)
 #define sv_setiv_mg(a,b)       Perl_sv_setiv_mg(aTHX_ a,b)
+#define sv_setpviv_mg(a,b)     Perl_sv_setpviv_mg(aTHX_ a,b)
 #define sv_setuv_mg(a,b)       Perl_sv_setuv_mg(aTHX_ a,b)
 #define sv_setnv_mg(a,b)       Perl_sv_setnv_mg(aTHX_ a,b)
 #define sv_setpv_mg(a,b)       Perl_sv_setpv_mg(aTHX_ a,b)

==== //depot/maint-5.8/perl/embed.pl#9 (xtext) ====
Index: perl/embed.pl
--- perl/embed.pl#8~18866~      Sun Mar  9 05:59:01 2003
+++ perl/embed.pl       Sun Mar  9 12:43:09 2003
@@ -200,8 +200,9 @@
     my $ret = "";
     if (@_ > 1) {
        my ($flags,$retval,$func,@args) = @_;
-       if ($flags =~ /A/ && $flags !~ /[xm]/) { # public API, so export
-           $func = "Perl_$func" if $flags =~ /p/;
+       if ($flags =~ /[AX]/ && $flags !~ /[xm]/
+           || $flags =~ /b/) { # public API, so export
+           $func = "Perl_$func" if $flags =~ /[pbX]/;
            $ret = "$func\n";
        }
     }

==== //depot/maint-5.8/perl/ext/Encode/AUTHORS#7 (text) ====
Index: perl/ext/Encode/AUTHORS
--- perl/ext/Encode/AUTHORS#6~18824~    Mon Mar  3 21:39:18 2003
+++ perl/ext/Encode/AUTHORS     Sun Mar  9 12:43:09 2003
@@ -22,7 +22,7 @@
 Gurusamy Sarathy               <[EMAIL PROTECTED]>
 H.Merijn Brand                  <[EMAIL PROTECTED]>
 Hugo van der Sanden            <[EMAIL PROTECTED]>
-Inaba HIroto                    <[EMAIL PROTECTED]>
+Inaba Hiroto                   <[EMAIL PROTECTED]>
 Jarkko Hietaniemi              <[EMAIL PROTECTED]>
 Jungshik Shin                   <[EMAIL PROTECTED]>
 Laszlo Molnar                  <[EMAIL PROTECTED]>

==== //depot/maint-5.8/perl/ext/Encode/Changes#9 (text) ====
Index: perl/ext/Encode/Changes
--- perl/ext/Encode/Changes#8~18824~    Mon Mar  3 21:39:18 2003
+++ perl/ext/Encode/Changes     Sun Mar  9 12:43:09 2003
@@ -1,8 +1,34 @@
 # Revision history for Perl extension Encode.
 #
-# $Id: Changes,v 1.89 2003/02/28 01:40:27 dankogai Exp dankogai $
+# $Id: Changes,v 1.91 2003/03/09 20:07:37 dankogai Exp dankogai $
 #
-$Revision: 1.89 $ $Date: 2003/02/28 01:40:27 $
+$Revision: 1.91 $ $Date: 2003/03/09 20:07:37 $
+! encoding.pm
+  even more proofread by jhi.
+  Message-Id: <[EMAIL PROTECTED]>
+! t/enc_module.t
+  -use lib 't';
+  +use lib qw(t ext/Encode/t ../ext/Encode/t);
+  Message-Id: <[EMAIL PROTECTED]>
+! AUTHORS
+  s/Hirohito/Hiroto/ig;  Sorry, Hiroto-san.
+  Message-Id: <[EMAIL PROTECTED]>
+! encoding.pm
+  s/logner/longer/
+  Message-Id: <[EMAIL PROTECTED]>
+
+1.90 2003/03/09 17:32:43
+! encoding.pm
++ t/enc_data.t
+  Inaba-san has added a patch for perl 5.8.1 or later that makes
+  encoding.pm work for <DATA> filehandle.  t/enc_data.t is to test
+  that.  POD is further revised.
+  Message-Id: <[EMAIL PROTECTED]>
+! encoding.pm t/enc_module.t
+  encoding vs. ${^UNICODE} resolved.  POD revised accordingly.
+  Message-Id: <[EMAIL PROTECTED]>
+
+1.89 2003/02/28
 ! Encode.xs
   signed vs. unsigned issue discovered by Craig on OpenVM
   Message-Id: <[EMAIL PROTECTED]>

==== //depot/maint-5.8/perl/ext/Encode/Encode.pm#9 (text) ====
Index: perl/ext/Encode/Encode.pm
--- perl/ext/Encode/Encode.pm#8~18824~  Mon Mar  3 21:39:18 2003
+++ perl/ext/Encode/Encode.pm   Sun Mar  9 12:43:09 2003
@@ -1,9 +1,9 @@
 #
-# $Id: Encode.pm,v 1.89 2003/02/28 01:36:02 dankogai Exp $
+# $Id: Encode.pm,v 1.91 2003/03/09 20:07:20 dankogai Exp $
 #
 package Encode;
 use strict;
-our $VERSION = do { my @r = (q$Revision: 1.89 $ =~ /\d+/g); sprintf "%d."."%02d" x 
$#r, @r };
+our $VERSION = do { my @r = (q$Revision: 1.91 $ =~ /\d+/g); sprintf "%d."."%02d" x 
$#r, @r };
 our $DEBUG = 0;
 use XSLoader ();
 XSLoader::load(__PACKAGE__, $VERSION);

==== //depot/maint-5.8/perl/ext/Encode/Encode.xs#8 (text) ====
Index: perl/ext/Encode/Encode.xs
--- perl/ext/Encode/Encode.xs#7~18824~  Mon Mar  3 21:39:18 2003
+++ perl/ext/Encode/Encode.xs   Sun Mar  9 12:43:09 2003
@@ -1,5 +1,5 @@
 /*
- $Id: Encode.xs,v 1.55 2003/02/28 01:40:27 dankogai Exp dankogai $
+ $Id: Encode.xs,v 1.55 2003/02/28 01:40:27 dankogai Exp $
  */
 
 #define PERL_NO_GET_CONTEXT

==== //depot/maint-5.8/perl/ext/Encode/MANIFEST#8 (text) ====
Index: perl/ext/Encode/MANIFEST
--- perl/ext/Encode/MANIFEST#7~18866~   Sun Mar  9 05:59:01 2003
+++ perl/ext/Encode/MANIFEST    Sun Mar  9 12:43:09 2003
@@ -62,7 +62,7 @@
 t/big5-eten.utf        test data
 t/big5-hkscs.enc       test data
 t/big5-hkscs.utf       test data
-t/enc_data.t   test script for utf8 DATA
+t/enc_data.t           test script for encoding.pm vs. DATA fh
 t/enc_eucjp.t  test script
 t/enc_module.enc test data for t/enc_module.t
 t/enc_module.t test script

==== //depot/maint-5.8/perl/ext/Encode/encoding.pm#7 (text) ====
Index: perl/ext/Encode/encoding.pm
--- perl/ext/Encode/encoding.pm#6~18824~        Mon Mar  3 21:39:18 2003
+++ perl/ext/Encode/encoding.pm Sun Mar  9 12:43:09 2003
@@ -1,5 +1,6 @@
+# $Id: encoding.pm,v 1.44 2003/03/09 20:07:37 dankogai Exp dankogai $
 package encoding;
-our $VERSION = do { my @r = (q$Revision: 1.42 $ =~ /\d+/g); sprintf "%d."."%02d" x 
$#r, @r };
+our $VERSION = do { my @r = (q$Revision: 1.44 $ =~ /\d+/g); sprintf "%d."."%02d" x 
$#r, @r };
 
 use Encode;
 use strict;
@@ -63,6 +64,7 @@
                       });
        };
     }  $DEBUG and warn "Filter installed";
+    defined ${^UNICODE} and ${^UNICODE} != 0 and return 1;
     for my $h (qw(STDIN STDOUT)){
        if ($arg{$h}){
            unless (defined find_encoding($arg{$h})) {
@@ -144,6 +146,25 @@
 Rewind to the future: starting from perl 5.8.0 with the B<encoding>
 pragma, you can write your script in any encoding you like (so long
 as the C<Encode> module supports it) and still enjoy Unicode support.
+This pragma achieves that by doing the following:
+
+=over
+
+=item *
+
+Internally converts all literals (C<q//,qq//,qr//,qw///, qx//>) from
+the encoding specified to utf8.  In Perl 5.8.1 and later, literals in
+C<tr///> and C<DATA> pseudo-filehandle are also converted.
+
+=item *
+
+Changing PerlIO layers of C<STDIN> and C<STDOUT> to the encoding
+ specified.
+
+=back
+
+=head2 Literal Conversions
+
 You can write code in EUC-JP as follows:
 
   my $Rakuda = "\xF1\xD1\xF1\xCC"; # Camel in Kanji
@@ -156,7 +177,9 @@
   my $Rakuda = "\x{99F1}\x{99DD}"; # two Unicode Characters
   s/\bCamel\b/$Rakuda/;
 
-The B<encoding> pragma also modifies the filehandle disciplines of
+=head2 PerlIO layers for C<STD(IN|OUT)>
+
+The B<encoding> pragma also modifies the filehandle layers of
 STDIN and STDOUT to the specified encoding.  Therefore,
 
   use encoding "euc-jp";
@@ -170,23 +193,52 @@
 
 You can override this by giving extra arguments; see below.
 
+=head1 FEATURES THAT REQUIRE 5.8.1
+
+Some of the features offered by this pragma requires perl 5.8.1.  Most
+of these are done by Inaba Hiroto.  Any other features and changes
+are good for 5.8.0.
+
+=over
+
+=item "NON-EUC" doublebyte encodings
+
+Because perl needs to parse script before applying this pragma, such
+encodings as Shift_JIS and Big-5 that may contain '\' (BACKSLASH;
+\x5c) in the second byte fails because the second byte may
+accidentally escape the quoting character that follows.  Perl 5.8.1
+or later fixes this problem.
+
+=item tr// 
+
+C<tr//> was overlooked by Perl 5 porters when they released perl 5.8.0
+See the section below for details.
+
+=item DATA pseudo-filehandle
+
+Another feature that was overlooked was C<DATA>. 
+
+=back
+
 =head1 USAGE
 
 =over 4
 
 =item use encoding [I<ENCNAME>] ;
 
-Sets the script encoding to I<ENCNAME>. Filehandle disciplines of
-STDIN and STDOUT are set to ":encoding(I<ENCNAME>)".  Note that STDERR
-will not be changed.
+Sets the script encoding to I<ENCNAME>.  And unless ${^UNICODE} 
+exists and non-zero, PerlIO layers of STDIN and STDOUT are set to
+":encoding(I<ENCNAME>)".
+
+Note that STDERR WILL NOT be changed.
+
+Also note that non-STD file handles remain unaffected.  Use C<use
+open> or C<binmode> to change layers of those.
 
 If no encoding is specified, the environment variable L<PERL_ENCODING>
 is consulted.  If no encoding can be found, the error C<Unknown encoding
 'I<ENCNAME>'> will be thrown.
 
-Note that non-STD file handles remain unaffected.  Use C<use open> or
-C<binmode> to change disciplines of those.
-
 =item use encoding I<ENCNAME> [ STDIN =E<gt> I<ENCNAME_IN> ...] ;
 
 You can also individually set encodings of STDIN and STDOUT via the
@@ -194,16 +246,21 @@
 first I<ENCNAME>.  C<< STDIN => undef >> turns the IO transcoding
 completely off.
 
+When ${^UNICODE} exists and non-zero, these options will completely
+ignored.  ${^UNICODE} is a variable introduced in perl 5.8.1.  See
+L<perlrun> see L<perlvar/"${^UNICODE}"> and L<perlrun/"-C"> for
+details (perl 5.8.1 and later).
+
 =item use encoding I<ENCNAME> Filter=E<gt>1;
 
 This turns the encoding pragma into a source filter.  While the
 default approach just decodes interpolated literals (in qq() and
 qr()), this will apply a source filter to the entire source code.  See
-L</"The Filter Option"> below for details
+L</"The Filter Option"> below for details.
 
 =item no encoding;
 
-Unsets the script encoding. The disciplines of STDIN, STDOUT are
+Unsets the script encoding. The layers of STDIN, STDOUT are
 reset to ":raw" (the default unprocessed raw stream of bytes).
 
 =back
@@ -215,7 +272,6 @@
 is a single Han ideograph) work, you still need to write your script
 in UTF-8 -- or use a source filter.  That's what 'Filter=>1' does.
 
-
 What does this mean?  Your source code behaves as if it is written in
 UTF-8 with 'use utf8' in effect.  So even if your editor only supports
 Shift_JIS, for example, you can still try examples in Chapter 15 of
@@ -253,11 +309,29 @@
 B<use encoding> can appear as many times as you want in a given script. 
 The multiple use of this pragma is discouraged.
 
-Because of this nature, the use of this pragma inside the module is
-strongly discouraged (because the influence of this pragma lasts not
-only for the module but the script that uses).  But if you have to,
-make sure you say C<no encoding> at the end of the module so you
-contain the influence of the pragma within the module.
+By the same reason, the use this pragma inside modules is also
+discouraged (though not as strongly discouranged as the case above.  
+See below).
+
+If you still have to write a module with this pragma, be very careful
+of the load order.  See the codes below;
+
+  # called module
+  package Module_IN_BAR;
+  use encoding "bar";
+  # stuff in "bar" encoding here
+  1;
+
+  # caller script
+  use encoding "foo"
+  use Module_IN_BAR;
+  # surprise! use encoding "bar" is in effect.
+
+The best way to avoid this oddity is to use this pragma RIGHT AFTER
+other modules are loaded.  i.e.
+
+  use Module_IN_BAR;
+  use encoding "foo";
 
 =head2 DO NOT MIX MULTIPLE ENCODINGS
 
@@ -292,33 +366,6 @@
 So feel free to put your strings in your encoding in quotes and
 regexes.
 
-=head2 format doesn't work well
-
-This pragma doesn't work well with format because PerlIO does not
-get along very well with it.  When format contains non-ascii
-characters it prints funny or gets "wide character warnings".
-To understand it, try the code below.
-
-  # Save this one in utf8
-  # replace *non-ascii* with a non-ascii string
-  my $camel;
-  format STDOUT =
-  *non-ascii*@>>>>>>>
-  $camel
-  .
-  $camel = "*non-ascii*";
-  binmode(STDOUT=>':encoding(utf8)'); # bang!
-  write;              # funny 
-  print $camel, "\n"; # fine
-
-Without binmode this happens to work but without binmode, print()
-fails instead of write().
-
-At any rate, the very use of format is questionable when it comes to
-unicode characters since you have to consider such things as character
-width (i.e. double-width for ideographs) and directions (i.e. BIDI for
-Arabic and Hebrew).
-
 =head2 tr/// with ranges
 
 The B<encoding> pragma works by decoding string literals in
@@ -347,8 +394,7 @@
 
 =back
 
-This counterintuitive behavior has been fixed in perl 5.8.1 and up
-by INABA Hirohito.
+This counterintuitive behavior has been fixed in perl 5.8.1.
 
 =head3 workaround to tr///;
 
@@ -366,7 +412,7 @@
 
 Nevertheless, in case of B<encoding> pragma even C<q//> is affected so
 C<tr///> not being decoded was obviously against the will of Perl5
-Porters so it has been fixed.
+Porters so it has been fixed in Perl 5.8.1 or later.
 
 =head1 EXAMPLE - Greekperl
 
@@ -405,19 +451,51 @@
 
 =over
 
-=item *
+=item literals in regex that are longer than 127 bytes
 
 For native multibyte encodings (either fixed or variable length),
 the current implementation of the regular expressions may introduce
 recoding errors for regular expression literals longer than 127 bytes.
 
-=item *
+=item EBCDIC
 
 The encoding pragma is not supported on EBCDIC platforms.
 (Porters who are willing and able to remove this limitation are
 welcome.)
 
+=item format
+
+This pragma doesn't work well with format because PerlIO does not
+get along very well with it.  When format contains non-ascii
+characters it prints funny or gets "wide character warnings".
+To understand it, try the code below.
+
+  # Save this one in utf8
+  # replace *non-ascii* with a non-ascii string
+  my $camel;
+  format STDOUT =
+  *non-ascii*@>>>>>>>
+  $camel
+  .
+  $camel = "*non-ascii*";
+  binmode(STDOUT=>':encoding(utf8)'); # bang!
+  write;              # funny 
+  print $camel, "\n"; # fine
+
+Without binmode this happens to work but without binmode, print()
+fails instead of write().
+
+At any rate, the very use of format is questionable when it comes to
+unicode characters since you have to consider such things as character
+width (i.e. double-width for ideographs) and directions (i.e. BIDI for
+Arabic and Hebrew).
+
 =back
+
+=head1 HISTORY
+
+This pragma first appeared in Perl 5.8.0.  For features that require 
+5.8.1 and better, see above.
 
 =head1 SEE ALSO
 

==== //depot/maint-5.8/perl/ext/Encode/t/Mod_EUCJP.pm#2 (text) ====
Index: perl/ext/Encode/t/Mod_EUCJP.pm
--- perl/ext/Encode/t/Mod_EUCJP.pm#1~18824~     Mon Mar  3 21:39:18 2003
+++ perl/ext/Encode/t/Mod_EUCJP.pm      Sun Mar  9 12:43:09 2003
@@ -1,4 +1,4 @@
-# $Id: Mod_EUCJP.pm,v 1.1 2003/02/28 01:40:27 dankogai Exp dankogai $
+# $Id: Mod_EUCJP.pm,v 1.1 2003/02/28 01:40:27 dankogai Exp $
 # This file is in euc-jp
 package Mod_EUCJP;
 use encoding "euc-jp";

==== //depot/maint-5.8/perl/ext/Encode/t/enc_data.t#2 (text) ====
Index: perl/ext/Encode/t/enc_data.t
--- perl/ext/Encode/t/enc_data.t#1~18866~       Sun Mar  9 05:59:01 2003
+++ perl/ext/Encode/t/enc_data.t        Sun Mar  9 12:43:09 2003
@@ -1,5 +1,29 @@
+# $Id: enc_data.t,v 1.1 2003/03/09 17:47:32 dankogai Exp $
+
+BEGIN {
+    require Config; import Config;
+    if ($Config{'extensions'} !~ /\bEncode\b/) {
+      print "1..0 # Skip: Encode was not built\n";
+      exit 0;
+    }
+    unless (find PerlIO::Layer 'perlio') {
+       print "1..0 # Skip: PerlIO was not built\n";
+       exit 0;
+    }
+    if (ord("A") == 193) {
+       print "1..0 # encoding pragma does not support EBCDIC platforms\n";
+       exit(0);
+    }
+    if ($] <= 5.008 and !$Config{perl_patchlevel}){
+       print "1..0 # Skip: Perl 5.8.1 or later required\n";
+       exit 0;
+    }
+}
+
+
+use strict;
 use encoding 'euc-jp';
-use Test::More tests => 1;
+use Test::More tests => 4;
 
 my @a;
 
@@ -9,14 +33,10 @@
   push @a, $_;
 }
 
-SKIP: {
-  skip("pre-5.8.1 does not do utf8 DATA", 1) if $] < 5.008001;
-  ok(@a == 3 &&
-     $a[0] eq "�����DATA�դ�����Ϥ�ɤ�ΤƤ��ȥǥ���" &&
-     $a[1] eq "���ܸ쥬�������Ѵ��ǥ��륫" &&
-     $a[2] eq "�ɥ����ΤƤ��ȥ򥷥ƥ��ޥ���",
-     "utf8 (euc-jp) DATA")
-}
+is(scalar @a, 3);
+is($a[0], "�����DATA�դ�����Ϥ�ɤ�ΤƤ��ȥǥ���");
+is($a[1], "���ܸ쥬�������Ѵ��ǥ��륫");
+is($a[2], "�ɥ����ΤƤ��ȥ򥷥ƥ��ޥ���");
 
 __DATA__
 �����DATA�ե�����ϥ�ɥ�Υƥ��ȤǤ���

==== //depot/maint-5.8/perl/ext/Encode/t/enc_module.t#2 (text) ====
Index: perl/ext/Encode/t/enc_module.t
--- perl/ext/Encode/t/enc_module.t#1~18824~     Mon Mar  3 21:39:18 2003
+++ perl/ext/Encode/t/enc_module.t      Sun Mar  9 12:43:09 2003
@@ -1,4 +1,4 @@
-# $Id: enc_module.t,v 1.1 2003/02/28 01:40:27 dankogai Exp dankogai $
+# $Id: enc_module.t,v 1.3 2003/03/09 20:07:37 dankogai Exp dankogai $
 # This file is in euc-jp
 BEGIN {
     require Config; import Config;
@@ -10,13 +10,16 @@
        print "1..0 # Skip: PerlIO was not built\n";
        exit 0;
     }
+    if (defined ${^UNICODE} and ${^UNICODE} != 0){
+       print "1..0 # Skip: \${^UNICODE} == ${^UNICODE}\n";
+       exit 0;
+    }
     if (ord("A") == 193) {
        print "1..0 # encoding pragma does not support EBCDIC platforms\n";
        exit(0);
     }
 }
-use lib 't';
-use lib qw(ext/Encode/t ../ext/Encode/t); # in case of perl core
+use lib qw(t ext/Encode/t ../ext/Encode/t); # latter 2 for perl core
 use Mod_EUCJP;
 use encoding "euc-jp";
 use Test::More tests => 3;
@@ -29,8 +32,6 @@
 my $file1 = File::Spec->catfile($dir,"$$.enc");
 
 my $obj = Mod_EUCJP->new;
-# Isn't this dangerous in that we lose all possible warnings?
-# Maybe a scoped use warnings 'something' instead? --jhi
 local $SIG{__WARN__} = sub{}; # to silence reopening STD(IN|OUT) w/o closing
 
 open STDOUT, ">", $file1 or die "$file1:$!";

==== //depot/maint-5.8/perl/global.sym#12 (text+w) ====
Index: perl/global.sym
--- perl/global.sym#11~18804~   Sun Mar  2 08:22:35 2003
+++ perl/global.sym     Sun Mar  9 12:43:09 2003
@@ -425,6 +425,7 @@
 Perl_sv_2iv
 Perl_sv_2mortal
 Perl_sv_2nv
+Perl_sv_2pv
 Perl_sv_2pvutf8
 Perl_sv_2pvbyte
 Perl_sv_pvn_nomg
@@ -441,6 +442,8 @@
 Perl_sv_catpvf
 Perl_sv_vcatpvf
 Perl_sv_catpv
+Perl_sv_catpvn
+Perl_sv_catsv
 Perl_sv_chop
 Perl_sv_clear
 Perl_sv_cmp
@@ -469,6 +472,7 @@
 Perl_sv_peek
 Perl_sv_pos_u2b
 Perl_sv_pos_b2u
+Perl_sv_pvn_force
 Perl_sv_pvutf8n_force
 Perl_sv_pvbyten_force
 Perl_sv_recode_to_utf8
@@ -480,6 +484,7 @@
 Perl_sv_setpvf
 Perl_sv_vsetpvf
 Perl_sv_setiv
+Perl_sv_setpviv
 Perl_sv_setuv
 Perl_sv_setnv
 Perl_sv_setref_iv
@@ -489,6 +494,7 @@
 Perl_sv_setref_pvn
 Perl_sv_setpv
 Perl_sv_setpvn
+Perl_sv_setsv
 Perl_sv_taint
 Perl_sv_tainted
 Perl_sv_unmagic
@@ -554,6 +560,7 @@
 Perl_sv_setpvf_mg
 Perl_sv_vsetpvf_mg
 Perl_sv_setiv_mg
+Perl_sv_setpviv_mg
 Perl_sv_setuv_mg
 Perl_sv_setnv_mg
 Perl_sv_setpv_mg
@@ -578,6 +585,10 @@
 Perl_sv_2pv_nolen
 Perl_sv_2pvutf8_nolen
 Perl_sv_2pvbyte_nolen
+Perl_sv_pv
+Perl_sv_pvutf8
+Perl_sv_pvbyte
+Perl_sv_utf8_upgrade
 Perl_sv_utf8_downgrade
 Perl_sv_utf8_encode
 Perl_sv_utf8_decode

==== //depot/maint-5.8/perl/perlapi.c#6 (text+w) ====
Index: perl/perlapi.c
--- perl/perlapi.c#5~18808~     Sun Mar  2 13:29:38 2003
+++ perl/perlapi.c      Sun Mar  9 12:43:09 2003
@@ -1,7 +1,7 @@
 /*
  *    perlapi.c
  *
- *    Copyright (c) 1997-2002, Larry Wall
+ *    Copyright (c) 1997-2003, Larry Wall
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.

==== //depot/maint-5.8/perl/pod/perlapi.pod#9 (text+w) ====
Index: perl/pod/perlapi.pod
--- perl/pod/perlapi.pod#8~18791~       Fri Feb 28 12:05:43 2003
+++ perl/pod/perlapi.pod        Sun Mar  9 12:43:09 2003
@@ -4188,6 +4188,25 @@
 =for hackers
 Found in file sv.c
 
+=item sv_setpviv
+
+Copies an integer into the given SV, also updating its string value.
+Does not handle 'set' magic.  See C<sv_setpviv_mg>.
+
+       void    sv_setpviv(SV* sv, IV num)
+
+=for hackers
+Found in file sv.c
+
+=item sv_setpviv_mg
+
+Like C<sv_setpviv>, but also handles 'set' magic.
+
+       void    sv_setpviv_mg(SV *sv, IV iv)
+
+=for hackers
+Found in file sv.c
+
 =item sv_setpvn
 
 Copies a string into an SV.  The C<len> parameter indicates the number of

==== //depot/maint-5.8/perl/proto.h#15 (text+w) ====
Index: perl/proto.h
--- perl/proto.h#14~18804~      Sun Mar  2 08:22:35 2003
+++ perl/proto.h        Sun Mar  9 12:43:09 2003
@@ -810,6 +810,7 @@
 ;
 PERL_CALLCONV void     Perl_sv_vsetpvf(pTHX_ SV* sv, const char* pat, va_list* args);
 PERL_CALLCONV void     Perl_sv_setiv(pTHX_ SV* sv, IV num);
+PERL_CALLCONV void     Perl_sv_setpviv(pTHX_ SV* sv, IV num);
 PERL_CALLCONV void     Perl_sv_setuv(pTHX_ SV* sv, UV num);
 PERL_CALLCONV void     Perl_sv_setnv(pTHX_ SV* sv, NV num);
 PERL_CALLCONV SV*      Perl_sv_setref_iv(pTHX_ SV* rv, const char* classname, IV iv);
@@ -927,6 +928,7 @@
 ;
 PERL_CALLCONV void     Perl_sv_vsetpvf_mg(pTHX_ SV* sv, const char* pat, va_list* 
args);
 PERL_CALLCONV void     Perl_sv_setiv_mg(pTHX_ SV *sv, IV i);
+PERL_CALLCONV void     Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv);
 PERL_CALLCONV void     Perl_sv_setuv_mg(pTHX_ SV *sv, UV u);
 PERL_CALLCONV void     Perl_sv_setnv_mg(pTHX_ SV *sv, NV num);
 PERL_CALLCONV void     Perl_sv_setpv_mg(pTHX_ SV *sv, const char *ptr);
End of Patch.

Reply via email to