This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Close the filehandle actually being tested in uni/readline.t
[perl5.git] / lib / charnames.pm
index 534ed5c..495c303 100644 (file)
@@ -1,7 +1,7 @@
 package charnames;
 use strict;
 use warnings;
-our $VERSION = '1.29';
+our $VERSION = '1.30';
 use unicore::Name;    # mktables-generated algorithmically-defined names
 use _charnames ();    # The submodule for this where most of the work gets done
 
@@ -211,13 +211,8 @@ use variables inside the C<\N{...}>.  If you want similar run-time
 functionality, use
 L<charnames::string_vianame()|/charnames::string_vianame(I<name>)>.
 
-For the C0 and C1 control characters (U+0000..U+001F, U+0080..U+009F)
-there are no official Unicode names but you can use instead the ISO 6429
-names (LINE FEED, ESCAPE, and so forth, and their abbreviations, LF,
-ESC, ...).  In Unicode 3.2 (as of Perl 5.8) some naming changes took
-place, and ISO 6429 was updated, see L</ALIASES>.  Since Unicode 6.0, it
-is deprecated to use C<BELL>.  Instead use C<ALERT> (but C<BEL> will continue
-to work).
+Since Unicode 6.0, it is deprecated to use C<BELL>.  Instead use C<ALERT> (but
+C<BEL> will continue to work).
 
 If the input name is unknown, C<\N{NAME}> raises a warning and
 substitutes the Unicode REPLACEMENT CHARACTER (U+FFFD).
@@ -258,104 +253,15 @@ string_vianame(), since C<\N{...}> look-ups are done at compile time.
 
 =head1 ALIASES
 
-A few aliases have been defined for convenience; instead of having
-to use the official names,
-
-    LINE FEED (LF)
-    FORM FEED (FF)
-    CARRIAGE RETURN (CR)
-    NEXT LINE (NEL)
-
-(yes, with parentheses), one can use
-
-    LINE FEED
-    FORM FEED
-    CARRIAGE RETURN
-    NEXT LINE
-    LF
-    FF
-    CR
-    NEL
-
-All the other standard abbreviations for the controls, such as C<ACK> for
-C<ACKNOWLEDGE> also can be used.
-
-One can also use
-
-    BYTE ORDER MARK
-    BOM
-
-and these abbreviations
-
-    Abbreviation        Full Name
-
-    CGJ                 COMBINING GRAPHEME JOINER
-    FVS1                MONGOLIAN FREE VARIATION SELECTOR ONE
-    FVS2                MONGOLIAN FREE VARIATION SELECTOR TWO
-    FVS3                MONGOLIAN FREE VARIATION SELECTOR THREE
-    LRE                 LEFT-TO-RIGHT EMBEDDING
-    LRM                 LEFT-TO-RIGHT MARK
-    LRO                 LEFT-TO-RIGHT OVERRIDE
-    MMSP                MEDIUM MATHEMATICAL SPACE
-    MVS                 MONGOLIAN VOWEL SEPARATOR
-    NBSP                NO-BREAK SPACE
-    NNBSP               NARROW NO-BREAK SPACE
-    PDF                 POP DIRECTIONAL FORMATTING
-    RLE                 RIGHT-TO-LEFT EMBEDDING
-    RLM                 RIGHT-TO-LEFT MARK
-    RLO                 RIGHT-TO-LEFT OVERRIDE
-    SHY                 SOFT HYPHEN
-    VS1                 VARIATION SELECTOR-1
-    .
-    .
-    .
-    VS256               VARIATION SELECTOR-256
-    WJ                  WORD JOINER
-    ZWJ                 ZERO WIDTH JOINER
-    ZWNJ                ZERO WIDTH NON-JOINER
-    ZWSP                ZERO WIDTH SPACE
-
-For backward compatibility one can use the old names for
-certain C0 and C1 controls
-
-    old                         new
-
-    FILE SEPARATOR              INFORMATION SEPARATOR FOUR
-    GROUP SEPARATOR             INFORMATION SEPARATOR THREE
-    HORIZONTAL TABULATION       CHARACTER TABULATION
-    HORIZONTAL TABULATION SET   CHARACTER TABULATION SET
-    HORIZONTAL TABULATION WITH JUSTIFICATION    CHARACTER TABULATION
-                                                WITH JUSTIFICATION
-    PARTIAL LINE DOWN           PARTIAL LINE FORWARD
-    PARTIAL LINE UP             PARTIAL LINE BACKWARD
-    RECORD SEPARATOR            INFORMATION SEPARATOR TWO
-    REVERSE INDEX               REVERSE LINE FEED
-    UNIT SEPARATOR              INFORMATION SEPARATOR ONE
-    VERTICAL TABULATION         LINE TABULATION
-    VERTICAL TABULATION SET     LINE TABULATION SET
-
-but the old names in addition to giving the character
-will also give a warning about being deprecated.
-
-And finally, certain published variants are usable, including some for
-controls that have no Unicode names:
-
-    name                                   character
-
-    END OF PROTECTED AREA                  END OF GUARDED AREA, U+0097
-    HIGH OCTET PRESET                      U+0081
-    HOP                                    U+0081
-    IND                                    U+0084
-    INDEX                                  U+0084
-    PAD                                    U+0080
-    PADDING CHARACTER                      U+0080
-    PRIVATE USE 1                          PRIVATE USE ONE, U+0091
-    PRIVATE USE 2                          PRIVATE USE TWO, U+0092
-    SGC                                    U+0099
-    SINGLE GRAPHIC CHARACTER INTRODUCER    U+0099
-    SINGLE-SHIFT 2                         SINGLE SHIFT TWO, U+008E
-    SINGLE-SHIFT 3                         SINGLE SHIFT THREE, U+008F
-    START OF PROTECTED AREA                START OF GUARDED AREA, U+0096
+Starting in Unicode 6.1 and Perl v5.16, Unicode defines many abbreviations and
+names that were formerly Perl extensions, and some additional ones that Perl
+did not previously accept.  The list is getting too long to reproduce here,
+but you can get the complete list from the Unicode web site:
+L<http://www.unicode.org/Public/UNIDATA/NameAliases.txt>.
+
+Earlier versions of Perl accepted almost all the 6.1 names.  These were most
+extensively documented in the v5.14 version of this pod:
+L<http://perldoc.perl.org/5.14.0/charnames.html#ALIASES>.
 
 =head1 CUSTOM ALIASES
 
@@ -422,38 +328,6 @@ Also, both these methods currently allow only single characters to be named.
 To name a sequence of characters, use a
 L<custom translator|/CUSTOM TRANSLATORS> (described below).
 
-=head1 charnames::viacode(I<code>)
-
-Returns the full name of the character indicated by the numeric code.
-For example,
-
-    print charnames::viacode(0x2722);
-
-prints "FOUR TEARDROP-SPOKED ASTERISK".
-
-The name returned is the official name for the code point, if
-available; otherwise your custom alias for it.  This means that your
-alias will only be returned for code points that don't have an official
-Unicode name (nor a Unicode version 1 name), such as private use code
-points, and the 4 control characters U+0080, U+0081, U+0084, and U+0099.
-If you define more than one name for the code point, it is indeterminate
-which one will be returned.
-
-The function returns C<undef> if no name is known for the code point.
-In Unicode the proper name of these is the empty string, which
-C<undef> stringifies to.  (If you ask for a code point past the legal
-Unicode maximum of U+10FFFF that you haven't assigned an alias to, you
-get C<undef> plus a warning.)
-
-The input number must be a non-negative integer, or a string beginning
-with C<"U+"> or C<"0x"> with the remainder considered to be a
-hexadecimal integer.  A literal numeric constant must be unsigned; it
-will be interpreted as hex if it has a leading zero or contains
-non-decimal hex digits; otherwise it will be interpreted as decimal.
-
-Notice that the name returned for U+FEFF is "ZERO WIDTH NO-BREAK
-SPACE", not "BYTE ORDER MARK".
-
 =head1 charnames::string_vianame(I<name>)
 
 This is a runtime equivalent to C<\N{...}>.  I<name> can be any expression
@@ -486,6 +360,76 @@ character, even ones that aren't legal under the C<S<use bytes>> pragma,
 See L</BUGS> for the circumstances in which the behavior differs
 from  that described above.
 
+=head1 charnames::viacode(I<code>)
+
+Returns the full name of the character indicated by the numeric code.
+For example,
+
+    print charnames::viacode(0x2722);
+
+prints "FOUR TEARDROP-SPOKED ASTERISK".
+
+The name returned is the "best" (defined below) official name or alias
+for the code point, if
+available; otherwise your custom alias for it, if defined; otherwise C<undef>.
+This means that your alias will only be returned for code points that don't
+have an official Unicode name (nor alias) such as private use code points.
+
+If you define more than one name for the code point, it is indeterminate
+which one will be returned.
+
+As mentioned, the function returns C<undef> if no name is known for the code
+point.  In Unicode the proper name of these is the empty string, which
+C<undef> stringifies to.  (If you ask for a code point past the legal
+Unicode maximum of U+10FFFF that you haven't assigned an alias to, you
+get C<undef> plus a warning.)
+
+The input number must be a non-negative integer, or a string beginning
+with C<"U+"> or C<"0x"> with the remainder considered to be a
+hexadecimal integer.  A literal numeric constant must be unsigned; it
+will be interpreted as hex if it has a leading zero or contains
+non-decimal hex digits; otherwise it will be interpreted as decimal.
+
+As mentioned above under L</ALIASES>, Unicode 6.1 defines extra names
+(synonyms or aliases) for some code points, most of which were already
+available as Perl extensions.  All these are accepted by C<\N{...}> and the
+other functions in this module, but C<viacode> has to choose which one
+name to return for a given input code point, so it returns the "best" name.
+To understand how this works, it is helpful to know more about the Unicode
+name properties.  All code points actually have only a single name, which
+(starting in Unicode 2.0) can never change once a character has been assigned
+to the code point.  But mistakes have been made in assigning names, for
+example sometimes a clerical error was made during the publishing of the
+Standard which caused words to be misspelled, and there was no way to correct
+those.  The Name_Alias property was eventually created to handle these
+situations.  If a name was wrong, a corrected synonym would be published for
+it, using Name_Alias.  C<viacode> will return that corrected synonym as the
+"best" name for a code point.  (It is even possible, though it hasn't happened
+yet, that the correction itself will need to be corrected, and so another
+Name_Alias can be created for that code point; C<viacode> will return the
+most recent correction.)
+
+The Unicode name for each of the control characters (such as LINE FEED) is the
+empty string.  However almost all had names assigned by other standards, such
+as the ASCII Standard, or were in common use.  C<viacode> returns these names
+as the "best" ones available.  Unicode 6.1 has created Name_Aliases for each
+of them, including alternate names, like NEW LINE.  C<viacode> uses the
+original name, "LINE FEED" in preference to the alternate.  Similarly the
+name returned for U+FEFF is "ZERO WIDTH NO-BREAK SPACE", not "BYTE ORDER
+MARK".
+
+Until Unicode 6.1, the 4 control characters U+0080, U+0081, U+0084, and U+0099
+did not have names nor aliases.
+To preserve backwards compatibility, any alias you define for these code
+points will be returned by this function, in preference to the official name.
+
+Some code points also have abbreviated names, such as "LF" or "NL".
+C<viacode> never returns these.
+
+Because a name correction may be added in future Unicode releases, the name
+that C<viacode> returns may change as a result.  This is a rare event, but it
+does happen.
+
 =head1 CUSTOM TRANSLATORS
 
 The mechanism of translation of C<\N{...}> escapes is general and not