e1996e8f2ecf1187bf294ac50c8f766b2a5597a5
[p5sagit/p5-mst-13.2.git] / ext / Encode / Encode.pm
1 package Encode;
2 use strict;
3
4 our $VERSION = 0.02;
5
6 require DynaLoader;
7 require Exporter;
8
9 our @ISA = qw(Exporter DynaLoader);
10
11 # Public, encouraged API is exported by default
12 our @EXPORT = qw (
13   encode
14   decode
15   encode_utf8
16   decode_utf8
17   find_encoding
18   encodings
19 );
20
21 our @EXPORT_OK =
22     qw(
23        define_encoding
24        define_alias
25        from_to
26        is_utf8
27        is_8bit
28        is_16bit
29        utf8_upgrade
30        utf8_downgrade
31        _utf8_on
32        _utf8_off
33       );
34
35 bootstrap Encode ();
36
37 # Documentation moved after __END__ for speed - NI-S
38
39 use Carp;
40
41 # Make a %encoding package variable to allow a certain amount of cheating
42 our %encoding;
43 my @alias;  # ordered matching list
44 my %alias;  # cached known aliases
45
46 sub encodings
47 {
48  my ($class) = @_;
49  return keys %encoding;
50 }
51
52 sub findAlias
53 {
54  my $class = shift;
55  local $_ = shift;
56  unless (exists $alias{$_})
57   {
58    for (my $i=0; $i < @alias; $i += 2)
59     {
60      my $alias = $alias[$i];
61      my $val   = $alias[$i+1];
62      my $new;
63      if (ref($alias) eq 'Regexp' && $_ =~ $alias)
64       {
65        $new = eval $val;
66       }
67      elsif (ref($alias) eq 'CODE')
68       {
69        $new = &{$alias}($val)
70       }
71      elsif (lc($_) eq $alias)
72       {
73        $new = $val;
74       }
75      if (defined($new))
76       {
77        next if $new eq $_; # avoid (direct) recursion on bugs
78        my $enc = (ref($new)) ? $new : find_encoding($new);
79        if ($enc)
80         {
81          $alias{$_} = $enc;
82          last;
83         }
84       }
85     }
86   }
87  return $alias{$_};
88 }
89
90 sub define_alias
91 {
92  while (@_)
93   {
94    my ($alias,$name) = splice(@_,0,2);
95    push(@alias, $alias => $name);
96   }
97 }
98
99 define_alias( qr/^iso\W?(\d+)\W(\d+)$/i => '"iso-$1-$2"' );
100 define_alias( qr/^(?:iso\W?)?(?:8859|latin)\W(\d+)$/i => '"iso-8859-$1"' );
101 define_alias( qr/^(\S+)\s+(.*)$/i => '"$1-$2"' );
102 #define_alias( sub { return /^iso-(\d+-\d+)$/i  ? "iso$1" : '' } );
103 define_alias( 'ascii' => 'US-ascii');
104 define_alias( 'ibm-1047' => 'cp1047');
105
106 sub define_encoding
107 {
108  my $obj  = shift;
109  my $name = shift;
110  $encoding{$name} = $obj;
111  my $lc = lc($name);
112  define_alias($lc => $obj) unless $lc eq $name;
113  while (@_)
114   {
115    my $alias = shift;
116    define_alias($alias,$obj);
117   }
118  return $obj;
119 }
120
121 sub getEncoding
122 {
123  my ($class,$name) = @_;
124  my $enc;
125  if (exists $encoding{$name})
126   {
127    return $encoding{$name};
128   }
129  else
130   {
131    return $class->findAlias($name);
132   }
133 }
134
135 sub find_encoding
136 {
137  my ($name) = @_;
138  return __PACKAGE__->getEncoding($name);
139 }
140
141 sub encode
142 {
143  my ($name,$string,$check) = @_;
144  my $enc = find_encoding($name);
145  croak("Unknown encoding '$name'") unless defined $enc;
146  my $octets = $enc->encode($string,$check);
147  return undef if ($check && length($string));
148  return $octets;
149 }
150
151 sub decode
152 {
153  my ($name,$octets,$check) = @_;
154  my $enc = find_encoding($name);
155  croak("Unknown encoding '$name'") unless defined $enc;
156  my $string = $enc->decode($octets,$check);
157  return undef if ($check && length($octets));
158  return $string;
159 }
160
161 sub from_to
162 {
163  my ($string,$from,$to,$check) = @_;
164  my $f = find_encoding($from);
165  croak("Unknown encoding '$from'") unless defined $f;
166  my $t = find_encoding($to);
167  croak("Unknown encoding '$to'") unless defined $t;
168  my $uni = $f->decode($string,$check);
169  return undef if ($check && length($string));
170  $string = $t->encode($uni,$check);
171  return undef if ($check && length($uni));
172  return length($_[0] = $string);
173 }
174
175 sub encode_utf8
176 {
177  my ($str) = @_;
178  utf8_encode($str);
179  return $str;
180 }
181
182 sub decode_utf8
183 {
184  my ($str) = @_;
185  return undef unless utf8_decode($str);
186  return $str;
187 }
188
189 package Encode::Encoding;
190 # Base class for classes which implement encodings
191
192 sub Define
193 {
194  my $obj = shift;
195  my $canonical = shift;
196  $obj = bless { Name => $canonical },$obj unless ref $obj;
197  # warn "$canonical => $obj\n";
198  Encode::define_encoding($obj, $canonical, @_);
199 }
200
201 sub name { shift->{'Name'} }
202
203 # Temporary legacy methods
204 sub toUnicode    { shift->decode(@_) }
205 sub fromUnicode  { shift->encode(@_) }
206
207 sub new_sequence { return $_[0] }
208
209 package Encode::XS;
210 use base 'Encode::Encoding';
211
212 package Encode::Unicode;
213 use base 'Encode::Encoding';
214
215 # Dummy package that provides the encode interface but leaves data
216 # as UTF-8 encoded. It is here so that from_to() works.
217
218 __PACKAGE__->Define('Unicode');
219
220 sub decode
221 {
222  my ($obj,$str,$chk) = @_;
223  Encode::utf8_upgrade($str);
224  $_[1] = '' if $chk;
225  return $str;
226 }
227
228 *encode = \&decode;
229
230 package Encode::utf8;
231 use base 'Encode::Encoding';
232 # package to allow long-hand
233 #   $octets = encode( utf8 => $string );
234 #
235
236 __PACKAGE__->Define(qw(UTF-8 utf8));
237
238 sub decode
239 {
240  my ($obj,$octets,$chk) = @_;
241  my $str = Encode::decode_utf8($octets);
242  if (defined $str)
243   {
244    $_[1] = '' if $chk;
245    return $str;
246   }
247  return undef;
248 }
249
250 sub encode
251 {
252  my ($obj,$string,$chk) = @_;
253  my $octets = Encode::encode_utf8($string);
254  $_[1] = '' if $chk;
255  return $octets;
256 }
257
258 package Encode::iso10646_1;
259 use base 'Encode::Encoding';
260 # Encoding is 16-bit network order Unicode (no surogates)
261 # Used for X font encodings
262
263 __PACKAGE__->Define(qw(UCS-2 iso10646-1));
264
265 sub decode
266 {
267  my ($obj,$str,$chk) = @_;
268  my $uni   = '';
269  while (length($str))
270   {
271    my $code = unpack('n',substr($str,0,2,'')) & 0xffff;
272    $uni .= chr($code);
273   }
274  $_[1] = $str if $chk;
275  Encode::utf8_upgrade($uni);
276  return $uni;
277 }
278
279 sub encode
280 {
281  my ($obj,$uni,$chk) = @_;
282  my $str   = '';
283  while (length($uni))
284   {
285    my $ch = substr($uni,0,1,'');
286    my $x  = ord($ch);
287    unless ($x < 32768)
288     {
289      last if ($chk);
290      $x = 0;
291     }
292    $str .= pack('n',$x);
293   }
294  $_[1] = $uni if $chk;
295  return $str;
296 }
297
298 # switch back to Encode package in case we ever add AutoLoader
299 package Encode;
300
301 1;
302
303 __END__
304
305 =head1 NAME
306
307 Encode - character encodings
308
309 =head1 SYNOPSIS
310
311     use Encode;
312
313 =head1 DESCRIPTION
314
315 The C<Encode> module provides the interfaces between perl's strings
316 and the rest of the system. Perl strings are sequences of B<characters>.
317
318 The repertoire of characters that Perl can represent is at least that
319 defined by the Unicode Consortium. On most platforms the ordinal values
320 of the  characters (as returned by C<ord(ch)>) is the "Unicode codepoint" for
321 the character (the exceptions are those platforms where the legacy
322 encoding is some variant of EBCDIC rather than a super-set of ASCII
323 - see L<perlebcdic>).
324
325 Traditionaly computer data has been moved around in 8-bit chunks
326 often called "bytes". These chunks are also known as "octets" in
327 networking standards. Perl is widely used to manipulate data of
328 many types - not only strings of characters representing human or
329 computer languages but also "binary" data being the machines representation
330 of numbers, pixels in an image - or just about anything.
331
332 When perl is processing "binary data" the programmer wants perl to process
333 "sequences of bytes". This is not a problem for perl - as a byte has 256
334 possible values it easily fits in perl's much larger "logical character".
335
336 =head2 TERMINOLOGY
337
338 =over 4
339
340 =item *
341
342 I<character>: a character in the range 0..(2**32-1) (or more).
343 (What perl's strings are made of.)
344
345 =item *
346
347 I<byte>: a character in the range 0..255
348 (A special case of a perl character.)
349
350 =item *
351
352 I<octet>: 8 bits of data, with ordinal values 0..255
353 (Term for bytes passed to or from a non-perl context, e.g. disk file.)
354
355 =back
356
357 The marker [INTERNAL] marks Internal Implementation Details, in
358 general meant only for those who think they know what they are doing,
359 and such details may change in future releases.
360
361 =head1 ENCODINGS
362
363 =head2 Characteristics of an Encoding
364
365 An encoding has a "repertoire" of characters that it can represent,
366 and for each representable character there is at least one sequence of
367 octets that represents it.
368
369 =head2 Types of Encodings
370
371 Encodings can be divided into the following types:
372
373 =over 4
374
375 =item * Fixed length 8-bit (or less) encodings.
376
377 Each character is a single octet so may have a repertoire of up to
378 256 characters. ASCII and iso-8859-* are typical examples.
379
380 =item * Fixed length 16-bit encodings
381
382 Each character is two octets so may have a repertoire of up to
383 65,536 characters. Unicode's UCS-2 is an example. Also used for
384 encodings for East Asian languages.
385
386 =item * Fixed length 32-bit encodings.
387
388 Not really very "encoded" encodings. The Unicode code points
389 are just represented as 4-octet integers. None the less because
390 different architectures use different representations of integers
391 (so called "endian") there at least two disctinct encodings.
392
393 =item * Multi-byte encodings
394
395 The number of octets needed to represent a character varies.
396 UTF-8 is a particularly complex but regular case of a multi-byte
397 encoding. Several East Asian countries use a multi-byte encoding
398 where 1-octet is used to cover western roman characters and Asian
399 characters get 2-octets.
400 (UTF-16 is strictly a multi-byte encoding taking either 2 or 4 octets
401 to represent a Unicode code point.)
402
403 =item * "Escape" encodings.
404
405 These encodings embed "escape sequences" into the octet sequence
406 which describe how the following octets are to be interpreted.
407 The iso-2022-* family is typical. Following the escape sequence
408 octets are encoded by an "embedded" encoding (which will be one
409 of the above types) until another escape sequence switches to
410 a different "embedded" encoding.
411
412 These schemes are very flexible and can handle mixed languages but are
413 very complex to process (and have state).
414 No escape encodings are implemented for perl yet.
415
416 =back
417
418 =head2 Specifying Encodings
419
420 Encodings can be specified to the API described below in two ways:
421
422 =over 4
423
424 =item 1. By name
425
426 Encoding names are strings with characters taken from a restricted repertoire.
427 See L</"Encoding Names">.
428
429 =item 2. As an object
430
431 Encoding objects are returned by C<find_encoding($name)>.
432
433 =back
434
435 =head2 Encoding Names
436
437 Encoding names are case insensitive. White space in names is ignored.
438 In addition an encoding may have aliases. Each encoding has one "canonical" name.
439 The "canonical" name is chosen from the names of the encoding by picking
440 the first in the following sequence:
441
442 =over 4
443
444 =item * The MIME name as defined in IETF RFC-XXXX.
445
446 =item * The name in the IANA registry.
447
448 =item * The name used by the the organization that defined it.
449
450 =back
451
452 Because of all the alias issues, and because in the general case
453 encodings have state C<Encode> uses the encoding object internally
454 once an operation is in progress.
455
456 =head1 PERL ENCODING API
457
458 =head2 Generic Encoding Interface
459
460 =over 4
461
462 =item *
463
464         $bytes  = encode(ENCODING, $string[, CHECK])
465
466 Encodes string from perl's internal form into I<ENCODING> and returns a
467 sequence of octets.
468 See L</"Handling Malformed Data">.
469
470 =item *
471
472         $string = decode(ENCODING, $bytes[, CHECK])
473
474 Decode sequence of octets assumed to be in I<ENCODING> into perls internal
475 form and returns the resuting string.
476 See L</"Handling Malformed Data">.
477
478 =back
479
480 =head2 Handling Malformed Data
481
482 If CHECK is not set, C<undef> is returned.  If the data is supposed to
483 be UTF-8, an optional lexical warning (category utf8) is given.
484 If CHECK is true but not a code reference, dies.
485
486 It would desirable to have a way to indicate that transform should use the
487 encodings "replacement character" - no such mechanism is defined yet.
488
489 It is also planned to allow I<CHECK> to be a code reference.
490
491 This is not yet implemented as there are design issues with what its arguments
492 should be and how it returns its results.
493
494 =over 4
495
496 =item Scheme 1
497
498 Passed remaining fragment of string being processed.
499 Modifies it in place to remove bytes/characters it can understand
500 and returns a string used to represent them.
501 e.g.
502
503  sub fixup {
504    my $ch = substr($_[0],0,1,'');
505    return sprintf("\x{%02X}",ord($ch);
506  }
507
508 This scheme is close to how underlying C code for Encode works, but gives
509 the fixup routine very little context.
510
511 =item Scheme 2
512
513 Passed original string, and an index into it of the problem area,
514 and output string so far.
515 Appends what it will to output string and returns new index into
516 original string.
517 e.g.
518
519  sub fixup {
520    # my ($s,$i,$d) = @_;
521    my $ch = substr($_[0],$_[1],1);
522    $_[2] .= sprintf("\x{%02X}",ord($ch);
523    return $_[1]+1;
524  }
525
526 This scheme gives maximal control to the fixup routine but is more complicated
527 to code, and may need internals of Encode to be tweaked to keep original
528 string intact.
529
530 =item Other Schemes
531
532 Hybrids of above.
533
534 Multiple return values rather than in-place modifications.
535
536 Index into the string could be pos($str) allowing s/\G...//.
537
538 =back
539
540 =head2 UTF-8 / utf8
541
542 The Unicode consortium defines the UTF-8 standard as a way of encoding
543 the entire Unicode repertiore as sequences of octets. This encoding
544 is expected to become very widespread. Perl can use this form internaly
545 to represent strings, so conversions to and from this form are particularly
546 efficient (as octets in memory do not have to change, just the meta-data
547 that tells perl how to treat them).
548
549 =over 4
550
551 =item *
552
553         $bytes = encode_utf8($string);
554
555 The characters that comprise string are encoded in perl's superset of UTF-8
556 and the resulting octets returned as a sequence of bytes. All possible
557 characters have a UTF-8 representation so this function cannot fail.
558
559 =item *
560
561         $string = decode_utf8($bytes [,CHECK]);
562
563 The sequence of octets represented by $bytes is decoded from UTF-8 into
564 a sequence of logical characters. Not all sequences of octets form valid
565 UTF-8 encodings, so it is possible for this call to fail.
566 See L</"Handling Malformed Data">.
567
568 =back
569
570 =head2 Other Encodings of Unicode
571
572 UTF-16 is similar to UCS-2, 16 bit or 2-byte chunks.
573 UCS-2 can only represent 0..0xFFFF, while UTF-16 has a "surogate pair"
574 scheme which allows it to cover the whole Unicode range.
575
576 Encode implements big-endian UCS-2 aliased to "iso10646-1" as that
577 happens to be the name used by that representation when used with X11 fonts.
578
579 UTF-32 or UCS-4 is 32-bit or 4-byte chunks.  Perl's logical characters
580 can be considered as being in this form without encoding. An encoding
581 to transfer strings in this form (e.g. to write them to a file) would need to
582
583      pack('L',map(chr($_),split(//,$string)));   # native
584   or
585      pack('V',map(chr($_),split(//,$string)));   # little-endian
586   or
587      pack('N',map(chr($_),split(//,$string)));   # big-endian
588
589 depending on the endian required.
590
591 No UTF-32 encodings are implemented yet.
592
593 Both UCS-2 and UCS-4 style encodings can have "byte order marks" by representing
594 the code point 0xFFFE as the very first thing in a file.
595
596 =head2 Listing available encodings
597
598   use Encode qw(encodings);
599   @list = encodings();
600
601 Returns a list of the canonical names of the available encodings.
602
603 =head2 Defining Aliases
604
605   use Encode qw(define_alias);
606   define_alias( newName => ENCODING);
607
608 Allows newName to be used as am alias for ENCODING. ENCODING may be either the
609 name of an encoding or and encoding object (as above).
610
611 Currently I<newName> can be specified in the following ways:
612
613 =over 4
614
615 =item As a simple string.
616
617 =item As a qr// compiled regular expression, e.g.:
618
619   define_alias( qr/^iso8859-(\d+)$/i => '"iso-8859-$1"' );
620
621 In this case if I<ENCODING> is not a reference it is C<eval>-ed to allow
622 C<$1> etc. to be subsituted.
623 The example is one way to names as used in X11 font names to alias the MIME names for the
624 iso-8859-* family.
625
626 =item As a code reference, e.g.:
627
628   define_alias( sub { return /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } , '');
629
630 In this case C<$_> will be set to the name that is being looked up and
631 I<ENCODING> is passed to the sub as its first argument.
632 The example is another way to names as used in X11 font names to alias the MIME names for
633 the iso-8859-* family.
634
635 =back
636
637 =head2 Defining Encodings
638
639   use Encode qw(define_alias);
640   define_encoding( $object, 'canonicalName' [,alias...]);
641
642 Causes I<canonicalName> to be associated with I<$object>.
643 The object should provide the interface described in L</"IMPLEMENTATION CLASSES"> below.
644 If more than two arguments are provided then additional arguments are taken
645 as aliases for I<$object> as for C<define_alias>.
646
647 =head1 Encoding and IO
648
649 It is very common to want to do encoding transformations when
650 reading or writing files, network connections, pipes etc.
651 If perl is configured to use the new 'perlio' IO system then
652 C<Encode> provides a "layer" (See L<perliol>) which can transform
653 data as it is read or written.
654
655      open(my $ilyad,'>:encoding(iso-8859-7)','ilyad.greek');
656      print $ilyad @epic;
657
658 In addition the new IO system can also be configured to read/write
659 UTF-8 encoded characters (as noted above this is efficient):
660
661      open(my $fh,'>:utf8','anything');
662      print $fh "Any \x{0021} string \N{SMILEY FACE}\n";
663
664 Either of the above forms of "layer" specifications can be made the default
665 for a lexical scope with the C<use open ...> pragma. See L<open>.
666
667 Once a handle is open is layers can be altered using C<binmode>.
668
669 Without any such configuration, or if perl itself is built using
670 system's own IO, then write operations assume that file handle accepts
671 only I<bytes> and will C<die> if a character larger than 255 is
672 written to the handle. When reading, each octet from the handle
673 becomes a byte-in-a-character. Note that this default is the same
674 behaviour as bytes-only languages (including perl before v5.6) would have,
675 and is sufficient to handle native 8-bit encodings e.g. iso-8859-1,
676 EBCDIC etc. and any legacy mechanisms for handling other encodings
677 and binary data.
678
679 In other cases it is the programs responsibility
680 to transform characters into bytes using the API above before
681 doing writes, and to transform the bytes read from a handle into characters
682 before doing "character operations" (e.g. C<lc>, C</\W+/>, ...).
683
684 =head1 Encoding How to ...
685
686 To do:
687
688 =over 4
689
690 =item * IO with mixed content (faking iso-2020-*)
691
692 =item * MIME's Content-Length:
693
694 =item * UTF-8 strings in binary data.
695
696 =item * perl/Encode wrappers on non-Unicode XS modules.
697
698 =back
699
700 =head1 Messing with Perl's Internals
701
702 The following API uses parts of perl's internals in the current implementation.
703 As such they are efficient, but may change.
704
705 =over 4
706
707 =item *
708
709         $num_octets = utf8_upgrade($string);
710
711 Converts internal representation of string to the UTF-8 form.
712 Returns the number of octets necessary to represent the string as UTF-8.
713
714 =item * utf8_downgrade($string[, CHECK])
715
716 Converts internal representation of string to be un-encoded bytes.
717
718 =item * is_utf8(STRING [, CHECK])
719
720 [INTERNAL] Test whether the UTF-8 flag is turned on in the STRING.
721 If CHECK is true, also checks the data in STRING for being
722 well-formed UTF-8.  Returns true if successful, false otherwise.
723
724 =item * valid_utf8(STRING)
725
726 [INTERNAL] Test whether STRING is in a consistent state.
727 Will return true if string is held as bytes, or is well-formed UTF-8
728 and has the UTF-8 flag on.
729 Main reason for this routine is to allow perl's testsuite to check
730 that operations have left strings in a consistent state.
731
732 =item *
733
734         _utf8_on(STRING)
735
736 [INTERNAL] Turn on the UTF-8 flag in STRING.  The data in STRING is
737 B<not> checked for being well-formed UTF-8.  Do not use unless you
738 B<know> that the STRING is well-formed UTF-8.  Returns the previous
739 state of the UTF-8 flag (so please don't test the return value as
740 I<not> success or failure), or C<undef> if STRING is not a string.
741
742 =item *
743
744         _utf8_off(STRING)
745
746 [INTERNAL] Turn off the UTF-8 flag in STRING.  Do not use frivolously.
747 Returns the previous state of the UTF-8 flag (so please don't test the
748 return value as I<not> success or failure), or C<undef> if STRING is
749 not a string.
750
751 =back
752
753 =head1 IMPLEMENTATION CLASSES
754
755 As mentioned above encodings are (in the current implementation at least)
756 defined by objects. The mapping of encoding name to object is via the
757 C<%encodings> hash.
758
759 The values of the hash can currently be either strings or objects.
760 The string form may go away in the future. The string form occurs
761 when C<encodings()> has scanned C<@INC> for loadable encodings but has
762 not actually loaded the encoding in question. This is because the
763 current "loading" process is all perl and a bit slow.
764
765 Once an encoding is loaded then value of the hash is object which implements
766 the encoding. The object should provide the following interface:
767
768 =over 4
769
770 =item -E<gt>name
771
772 Should return the string representing the canonical name of the encoding.
773
774 =item -E<gt>new_sequence
775
776 This is a placeholder for encodings with state. It should return an object
777 which implements this interface, all current implementations return the
778 original object.
779
780 =item -E<gt>encode($string,$check)
781
782 Should return the octet sequence representing I<$string>. If I<$check> is true
783 it should modify I<$string> in place to remove the converted part (i.e.
784 the whole string unless there is an error).
785 If an error occurs it should return the octet sequence for the
786 fragment of string that has been converted, and modify $string in-place
787 to remove the converted part leaving it starting with the problem fragment.
788
789 If check is is false then C<encode> should make a "best effort" to convert
790 the string - for example by using a replacement character.
791
792 =item -E<gt>decode($octets,$check)
793
794 Should return the string that I<$octets> represents. If I<$check> is true
795 it should modify I<$octets> in place to remove the converted part (i.e.
796 the whole sequence unless there is an error).
797 If an error occurs it should return the fragment of string
798 that has been converted, and modify $octets in-place to remove the converted part
799 leaving it starting with the problem fragment.
800
801 If check is is false then C<decode> should make a "best effort" to convert
802 the string - for example by using Unicode's "\x{FFFD}" as a replacement character.
803
804 =back
805
806 It should be noted that the check behaviour is different from the outer
807 public API. The logic is that the "unchecked" case is useful when
808 encoding is part of a stream which may be reporting errors (e.g. STDERR).
809 In such cases it is desirable to get everything through somehow without
810 causing additional errors which obscure the original one. Also the encoding
811 is best placed to know what the correct replacement character is, so if that
812 is the desired behaviour then letting low level code do it is the most efficient.
813
814 In contrast if check is true, the scheme above allows the encoding to do as
815 much as it can and tell layer above how much that was. What is lacking
816 at present is a mechanism to report what went wrong. The most likely interface
817 will be an additional method call to the object, or perhaps
818 (to avoid forcing per-stream objects on otherwise stateless encodings)
819 and additional parameter.
820
821 It is also highly desirable that encoding classes inherit from C<Encode::Encoding>
822 as a base class. This allows that class to define additional behaviour for
823 all encoding objects. For example built in Unicode, UCS-2 and UTF-8 classes
824 use :
825
826   package Encode::MyEncoding;
827   use base qw(Encode::Encoding);
828
829   __PACKAGE__->Define(qw(myCanonical myAlias));
830
831 To create an object with bless {Name => ...},$class, and call define_encoding.
832 They inherit their C<name> method from C<Encode::Encoding>.
833
834 =head2 Compiled Encodings
835
836 F<Encode.xs> provides a class C<Encode::XS> which provides the interface described
837 above. It calls a generic octet-sequence to octet-sequence "engine" that is
838 driven by tables (defined in F<encengine.c>). The same engine is used for both
839 encode and decode. C<Encode:XS>'s C<encode> forces perl's characters to their UTF-8 form
840 and then treats them as just another multibyte encoding. C<Encode:XS>'s C<decode> transforms
841 the sequence and then turns the UTF-8-ness flag as that is the form that the tables
842 are defined to produce. For details of the engine see the comments in F<encengine.c>.
843
844 The tables are produced by the perl script F<compile> (the name needs to change so
845 we can eventually install it somewhere). F<compile> can currently read two formats:
846
847 =over 4
848
849 =item *.enc
850
851 This is a coined format used by Tcl. It is documented in Encode/EncodeFormat.pod.
852
853 =item *.ucm
854
855 This is the semi-standard format used by IBM's ICU package.
856
857 =back
858
859 F<compile> can write the following forms:
860
861 =over 4
862
863 =item *.ucm
864
865 See above - the F<Encode/*.ucm> files provided with the distribution have
866 been created from the original Tcl .enc files using this approach.
867
868 =item *.c
869
870 Produces tables as C data structures - this is used to build in encodings
871 into F<Encode.so>/F<Encode.dll>.
872
873 =item *.xs
874
875 In theory this allows encodings to be stand-alone loadable perl extensions.
876 The process has not yet been tested. The plan is to use this approach
877 for large East Asian encodings.
878
879 =back
880
881 The set of encodings built-in to F<Encode.so>/F<Encode.dll> is determined by
882 F<Makefile.PL>. The current set is as follows:
883
884 =over 4
885
886 =item ascii and iso-8859-*
887
888 That is all the common 8-bit "western" encodings.
889
890 =item IBM-1047 and two other variants of EBCDIC.
891
892 These are the same variants that are supported by EBCDIC perl as "native" encodings.
893 They are included to prove "reversibility" of some constructs in EBCDIC perl.
894
895 =item symbol and dingbats as used by Tk on X11.
896
897 (The reason Encode got started was to support perl/Tk.)
898
899 =back
900
901 That set is rather ad. hoc. and has been driven by the needs of the tests rather
902 than the needs of typical applications. It is likely to be rationalized.
903
904 =head1 SEE ALSO
905
906 L<perlunicode>, L<perlebcdic>, L<perlfunc/open>
907
908 =cut
909
910
911