1package charnames; 2use strict; 3use warnings; 4our $VERSION = '1.50'; 5use unicore::Name; # mktables-generated algorithmically-defined names 6use _charnames (); # The submodule for this where most of the work gets done 7 8use bytes (); # for $bytes::hint_bits 9use re "/aa"; # Everything in here should be ASCII 10 11# Translate between Unicode character names and their code points. 12# This is a wrapper around the submodule C<_charnames>. This design allows 13# C<_charnames> to be autoloaded to enable use of \N{...}, but requires this 14# module to be explicitly requested for the functions API. 15 16$Carp::Internal{ (__PACKAGE__) } = 1; 17 18sub import 19{ 20 shift; ## ignore class name 21 _charnames->import(@_); 22} 23 24# Cache of already looked-up values. This is set to only contain 25# official values, and user aliases can't override them, so scoping is 26# not an issue. 27my %viacode; 28 29sub viacode { 30 return _charnames::viacode(@_); 31} 32 33sub vianame 34{ 35 if (@_ != 1) { 36 _charnames::carp "charnames::vianame() expects one name argument"; 37 return () 38 } 39 40 # Looks up the character name and returns its ordinal if 41 # found, undef otherwise. 42 43 my $arg = shift; 44 return () unless length $arg; 45 46 if ($arg =~ /^U\+([0-9a-fA-F]+)$/) { 47 48 # khw claims that this is poor interface design. The function should 49 # return either a an ord or a chr for all inputs; not be bipolar. But 50 # can't change it because of backward compatibility. New code can use 51 # string_vianame() instead. 52 my $ord = CORE::hex $1; 53 return chr utf8::unicode_to_native($ord) if $ord <= 255 54 || ! ((caller 0)[8] & $bytes::hint_bits); 55 _charnames::carp _charnames::not_legal_use_bytes_msg($arg, chr $ord); 56 return; 57 } 58 59 # The first 1 arg means wants an ord returned; the second that we are in 60 # runtime, and this is the first level routine called from the user 61 return _charnames::lookup_name($arg, 1, 1); 62} # vianame 63 64sub string_vianame { 65 66 # Looks up the character name and returns its string representation if 67 # found, undef otherwise. 68 69 if (@_ != 1) { 70 _charnames::carp "charnames::string_vianame() expects one name argument"; 71 return; 72 } 73 74 my $arg = shift; 75 return () unless length $arg; 76 77 if ($arg =~ /^U\+([0-9a-fA-F]+)$/) { 78 79 my $ord = CORE::hex $1; 80 return chr utf8::unicode_to_native($ord) if $ord <= 255 81 || ! ((caller 0)[8] & $bytes::hint_bits); 82 83 _charnames::carp _charnames::not_legal_use_bytes_msg($arg, chr $ord); 84 return; 85 } 86 87 # The 0 arg means wants a string returned; the 1 arg means that we are in 88 # runtime, and this is the first level routine called from the user 89 return _charnames::lookup_name($arg, 0, 1); 90} # string_vianame 91 921; 93__END__ 94 95=encoding utf8 96 97=head1 NAME 98 99charnames - access to Unicode character names and named character sequences; also define character names 100 101=head1 SYNOPSIS 102 103 use charnames ':full'; 104 print "\N{GREEK SMALL LETTER SIGMA} is called sigma.\n"; 105 print "\N{LATIN CAPITAL LETTER E WITH VERTICAL LINE BELOW}", 106 " is an officially named sequence of two Unicode characters\n"; 107 108 use charnames ':loose'; 109 print "\N{Greek small-letter sigma}", 110 "can be used to ignore case, underscores, most blanks," 111 "and when you aren't sure if the official name has hyphens\n"; 112 113 use charnames ':short'; 114 print "\N{greek:Sigma} is an upper-case sigma.\n"; 115 116 use charnames qw(cyrillic greek); 117 print "\N{sigma} is Greek sigma, and \N{be} is Cyrillic b.\n"; 118 119 use utf8; 120 use charnames ":full", ":alias" => { 121 e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE", 122 mychar => 0xE8000, # Private use area 123 "自転車に乗る人" => "BICYCLIST" 124 }; 125 print "\N{e_ACUTE} is a small letter e with an acute.\n"; 126 print "\N{mychar} allows me to name private use characters.\n"; 127 print "And I can create synonyms in other languages,", 128 " such as \N{自転車に乗る人} for "BICYCLIST (U+1F6B4)\n"; 129 130 use charnames (); 131 print charnames::viacode(0x1234); # prints "ETHIOPIC SYLLABLE SEE" 132 printf "%04X", charnames::vianame("GOTHIC LETTER AHSA"); # prints 133 # "10330" 134 print charnames::vianame("LATIN CAPITAL LETTER A"); # prints 65 on 135 # ASCII platforms; 136 # 193 on EBCDIC 137 print charnames::string_vianame("LATIN CAPITAL LETTER A"); # prints "A" 138 139=head1 DESCRIPTION 140 141Pragma C<use charnames> is used to gain access to the names of the 142Unicode characters and named character sequences, and to allow you to define 143your own character and character sequence names. 144 145All forms of the pragma enable use of the following 3 functions: 146 147=over 148 149=item * 150 151L</charnames::string_vianame(I<name>)> for run-time lookup of a 152either a character name or a named character sequence, returning its string 153representation 154 155=item * 156 157L</charnames::vianame(I<name>)> for run-time lookup of a 158character name (but not a named character sequence) to get its ordinal value 159(code point) 160 161=item * 162 163L</charnames::viacode(I<code>)> for run-time lookup of a code point to get its 164Unicode name. 165 166=back 167 168Starting in Perl v5.16, any occurrence of C<\N{I<CHARNAME>}> sequences 169in a double-quotish string automatically loads this module with arguments 170C<:full> and C<:short> (described below) if it hasn't already been loaded with 171different arguments, in order to compile the named Unicode character into 172position in the string. Prior to v5.16, an explicit S<C<use charnames>> was 173required to enable this usage. (However, prior to v5.16, the form C<S<"use 174charnames ();">> did not enable C<\N{I<CHARNAME>}>.) 175 176Note that C<\N{U+I<...>}>, where the I<...> is a hexadecimal number, 177also inserts a character into a string. 178The character it inserts is the one whose Unicode code point 179(ordinal value) is equal to the number. For example, C<"\N{U+263a}"> is 180the Unicode (white background, black foreground) smiley face 181equivalent to C<"\N{WHITE SMILING FACE}">. 182Also note, C<\N{I<...>}> can mean a regex quantifier instead of a character 183name, when the I<...> is a number (or comma separated pair of numbers 184(see L<perlreref/QUANTIFIERS>), and is not related to this pragma. 185 186The C<charnames> pragma supports arguments C<:full>, C<:loose>, C<:short>, 187script names and L<customized aliases|/CUSTOM ALIASES>. 188 189If C<:full> is present, for expansion of 190C<\N{I<CHARNAME>}>, the string I<CHARNAME> is first looked up in the list of 191standard Unicode character names. 192 193C<:loose> is a variant of C<:full> which allows I<CHARNAME> to be less 194precisely specified. Details are in L</LOOSE MATCHES>. 195 196If C<:short> is present, and 197I<CHARNAME> has the form C<I<SCRIPT>:I<CNAME>>, then I<CNAME> is looked up 198as a letter in script I<SCRIPT>, as described in the next paragraph. 199Or, if C<use charnames> is used 200with script name arguments, then for C<\N{I<CHARNAME>}> the name 201I<CHARNAME> is looked up as a letter in the given scripts (in the 202specified order). Customized aliases can override these, and are explained in 203L</CUSTOM ALIASES>. 204 205For lookup of I<CHARNAME> inside a given script I<SCRIPTNAME>, 206this pragma looks in the table of standard Unicode names for the names 207 208 SCRIPTNAME CAPITAL LETTER CHARNAME 209 SCRIPTNAME SMALL LETTER CHARNAME 210 SCRIPTNAME LETTER CHARNAME 211 212If I<CHARNAME> is all lowercase, 213then the C<CAPITAL> variant is ignored, otherwise the C<SMALL> variant 214is ignored, and both I<CHARNAME> and I<SCRIPTNAME> are converted to all 215uppercase for look-up. Other than that, both of them follow L<loose|/LOOSE 216MATCHES> rules if C<:loose> is also specified; strict otherwise. 217 218Note that C<\N{...}> is compile-time; it's a special form of string 219constant used inside double-quotish strings; this means that you cannot 220use variables inside the C<\N{...}>. If you want similar run-time 221functionality, use 222L<charnames::string_vianame()|/charnames::string_vianame(I<name>)>. 223 224Note, starting in Perl 5.18, the name C<BELL> refers to the Unicode character 225U+1F514, instead of the traditional U+0007. For the latter, use C<ALERT> 226or C<BEL>. 227 228It is a syntax error to use C<\N{NAME}> where C<NAME> is unknown. 229 230For C<\N{NAME}>, it is a fatal error if C<use bytes> is in effect and the 231input name is that of a character that won't fit into a byte (i.e., whose 232ordinal is above 255). 233 234Otherwise, any string that includes a C<\N{I<charname>}> or 235C<S<\N{U+I<code point>}>> will automatically have Unicode rules (see 236L<perlunicode/Byte and Character Semantics>). 237 238=head1 LOOSE MATCHES 239 240By specifying C<:loose>, Unicode's L<loose character name 241matching|http://www.unicode.org/reports/tr44#Matching_Rules> rules are 242selected instead of the strict exact match used otherwise. 243That means that I<CHARNAME> doesn't have to be so precisely specified. 244Upper/lower case doesn't matter (except with scripts as mentioned above), nor 245do any underscores, and the only hyphens that matter are those at the 246beginning or end of a word in the name (with one exception: the hyphen in 247U+1180 C<HANGUL JUNGSEONG O-E> does matter). 248Also, blanks not adjacent to hyphens don't matter. 249The official Unicode names are quite variable as to where they use hyphens 250versus spaces to separate word-like units, and this option allows you to not 251have to care as much. 252The reason non-medial hyphens matter is because of cases like 253U+0F60 C<TIBETAN LETTER -A> versus U+0F68 C<TIBETAN LETTER A>. 254The hyphen here is significant, as is the space before it, and so both must be 255included. 256 257C<:loose> slows down look-ups by a factor of 2 to 3 versus 258C<:full>, but the trade-off may be worth it to you. Each individual look-up 259takes very little time, and the results are cached, so the speed difference 260would become a factor only in programs that do look-ups of many different 261spellings, and probably only when those look-ups are through C<vianame()> and 262C<string_vianame()>, since C<\N{...}> look-ups are done at compile time. 263 264=head1 ALIASES 265 266Starting in Unicode 6.1 and Perl v5.16, Unicode defines many abbreviations and 267names that were formerly Perl extensions, and some additional ones that Perl 268did not previously accept. The list is getting too long to reproduce here, 269but you can get the complete list from the Unicode web site: 270L<http://www.unicode.org/Public/UNIDATA/NameAliases.txt>. 271 272Earlier versions of Perl accepted almost all the 6.1 names. These were most 273extensively documented in the v5.14 version of this pod: 274L<http://perldoc.perl.org/5.14.0/charnames.html#ALIASES>. 275 276=head1 CUSTOM ALIASES 277 278You can add customized aliases to standard (C<:full>) Unicode naming 279conventions. The aliases override any standard definitions, so, if 280you're twisted enough, you can change C<"\N{LATIN CAPITAL LETTER A}"> to 281mean C<"B">, etc. 282 283Aliases must begin with a character that is alphabetic. After that, each may 284contain any combination of word (C<\w>) characters, SPACE (U+0020), 285HYPHEN-MINUS (U+002D), LEFT PARENTHESIS (U+0028), and RIGHT PARENTHESIS 286(U+0029). These last two should never have been allowed 287in names, and are retained for backwards compatibility only, and may be 288deprecated and removed in future releases of Perl, so don't use them for new 289names. (More precisely, the first character of a name you specify must be 290something that matches all of C<\p{ID_Start}>, C<\p{Alphabetic}>, and 291C<\p{Gc=Letter}>. This makes sure it is what any reasonable person would view 292as an alphabetic character. And, the continuation characters that match C<\w> 293must also match C<\p{ID_Continue}>.) Starting with Perl v5.18, any Unicode 294characters meeting the above criteria may be used; prior to that only 295Latin1-range characters were acceptable. 296 297An alias can map to either an official Unicode character name (not a loose 298matched name) or to a 299numeric code point (ordinal). The latter is useful for assigning names 300to code points in Unicode private use areas such as U+E800 through 301U+F8FF. 302A numeric code point must be a non-negative integer, or a string beginning 303with C<"U+"> or C<"0x"> with the remainder considered to be a 304hexadecimal integer. A literal numeric constant must be unsigned; it 305will be interpreted as hex if it has a leading zero or contains 306non-decimal hex digits; otherwise it will be interpreted as decimal. 307If it begins with C<"U+">, it is interpreted as the Unicode code point; 308otherwise it is interpreted as native. (Only code points below 256 can 309differ between Unicode and native.) Thus C<U+41> is always the Latin letter 310"A"; but C<0x41> can be "NO-BREAK SPACE" on EBCDIC platforms. 311 312Aliases are added either by the use of anonymous hashes: 313 314 use charnames ":alias" => { 315 e_ACUTE => "LATIN SMALL LETTER E WITH ACUTE", 316 mychar1 => 0xE8000, 317 }; 318 my $str = "\N{e_ACUTE}"; 319 320or by using a file containing aliases: 321 322 use charnames ":alias" => "pro"; 323 324This will try to read C<"unicore/pro_alias.pl"> from the C<@INC> path. This 325file should return a list in plain perl: 326 327 ( 328 A_GRAVE => "LATIN CAPITAL LETTER A WITH GRAVE", 329 A_CIRCUM => "LATIN CAPITAL LETTER A WITH CIRCUMFLEX", 330 A_DIAERES => "LATIN CAPITAL LETTER A WITH DIAERESIS", 331 A_TILDE => "LATIN CAPITAL LETTER A WITH TILDE", 332 A_BREVE => "LATIN CAPITAL LETTER A WITH BREVE", 333 A_RING => "LATIN CAPITAL LETTER A WITH RING ABOVE", 334 A_MACRON => "LATIN CAPITAL LETTER A WITH MACRON", 335 mychar2 => "U+E8001", 336 ); 337 338Both these methods insert C<":full"> automatically as the first argument (if no 339other argument is given), and you can give the C<":full"> explicitly as 340well, like 341 342 use charnames ":full", ":alias" => "pro"; 343 344C<":loose"> has no effect with these. Input names must match exactly, using 345C<":full"> rules. 346 347Also, both these methods currently allow only single characters to be named. 348To name a sequence of characters, use a 349L<custom translator|/CUSTOM TRANSLATORS> (described below). 350 351=head1 charnames::string_vianame(I<name>) 352 353This is a runtime equivalent to C<\N{...}>. I<name> can be any expression 354that evaluates to a name accepted by C<\N{...}> under the L<C<:full> 355option|/DESCRIPTION> to C<charnames>. In addition, any other options for the 356controlling C<"use charnames"> in the same scope apply, like C<:loose> or any 357L<script list, C<:short> option|/DESCRIPTION>, or L<custom aliases|/CUSTOM 358ALIASES> you may have defined. 359 360The only differences are due to the fact that C<string_vianame> is run-time 361and C<\N{}> is compile time. You can't interpolate inside a C<\N{}>, (so 362C<\N{$variable}> doesn't work); and if the input name is unknown, 363C<string_vianame> returns C<undef> instead of it being a syntax error. 364 365=head1 charnames::vianame(I<name>) 366 367This is similar to C<string_vianame>. The main difference is that under most 368circumstances, C<vianame> returns an ordinal code 369point, whereas C<string_vianame> returns a string. For example, 370 371 printf "U+%04X", charnames::vianame("FOUR TEARDROP-SPOKED ASTERISK"); 372 373prints "U+2722". 374 375This leads to the other two differences. Since a single code point is 376returned, the function can't handle named character sequences, as these are 377composed of multiple characters (it returns C<undef> for these. And, the code 378point can be that of any 379character, even ones that aren't legal under the C<S<use bytes>> pragma, 380 381See L</BUGS> for the circumstances in which the behavior differs 382from that described above. 383 384=head1 charnames::viacode(I<code>) 385 386Returns the full name of the character indicated by the numeric code. 387For example, 388 389 print charnames::viacode(0x2722); 390 391prints "FOUR TEARDROP-SPOKED ASTERISK". 392 393The name returned is the "best" (defined below) official name or alias 394for the code point, if 395available; otherwise your custom alias for it, if defined; otherwise C<undef>. 396This means that your alias will only be returned for code points that don't 397have an official Unicode name (nor alias) such as private use code points. 398 399If you define more than one name for the code point, it is indeterminate 400which one will be returned. 401 402As mentioned, the function returns C<undef> if no name is known for the code 403point. In Unicode the proper name for these is the empty string, which 404C<undef> stringifies to. (If you ask for a code point past the legal 405Unicode maximum of U+10FFFF that you haven't assigned an alias to, you 406get C<undef> plus a warning.) 407 408The input number must be a non-negative integer, or a string beginning 409with C<"U+"> or C<"0x"> with the remainder considered to be a 410hexadecimal integer. A literal numeric constant must be unsigned; it 411will be interpreted as hex if it has a leading zero or contains 412non-decimal hex digits; otherwise it will be interpreted as decimal. 413If it begins with C<"U+">, it is interpreted as the Unicode code point; 414otherwise it is interpreted as native. (Only code points below 256 can 415differ between Unicode and native.) Thus C<U+41> is always the Latin letter 416"A"; but C<0x41> can be "NO-BREAK SPACE" on EBCDIC platforms. 417 418As mentioned above under L</ALIASES>, Unicode 6.1 defines extra names 419(synonyms or aliases) for some code points, most of which were already 420available as Perl extensions. All these are accepted by C<\N{...}> and the 421other functions in this module, but C<viacode> has to choose which one 422name to return for a given input code point, so it returns the "best" name. 423To understand how this works, it is helpful to know more about the Unicode 424name properties. All code points actually have only a single name, which 425(starting in Unicode 2.0) can never change once a character has been assigned 426to the code point. But mistakes have been made in assigning names, for 427example sometimes a clerical error was made during the publishing of the 428Standard which caused words to be misspelled, and there was no way to correct 429those. The Name_Alias property was eventually created to handle these 430situations. If a name was wrong, a corrected synonym would be published for 431it, using Name_Alias. C<viacode> will return that corrected synonym as the 432"best" name for a code point. (It is even possible, though it hasn't happened 433yet, that the correction itself will need to be corrected, and so another 434Name_Alias can be created for that code point; C<viacode> will return the 435most recent correction.) 436 437The Unicode name for each of the control characters (such as LINE FEED) is the 438empty string. However almost all had names assigned by other standards, such 439as the ASCII Standard, or were in common use. C<viacode> returns these names 440as the "best" ones available. Unicode 6.1 has created Name_Aliases for each 441of them, including alternate names, like NEW LINE. C<viacode> uses the 442original name, "LINE FEED" in preference to the alternate. Similarly the 443name returned for U+FEFF is "ZERO WIDTH NO-BREAK SPACE", not "BYTE ORDER 444MARK". 445 446Until Unicode 6.1, the 4 control characters U+0080, U+0081, U+0084, and U+0099 447did not have names nor aliases. 448To preserve backwards compatibility, any alias you define for these code 449points will be returned by this function, in preference to the official name. 450 451Some code points also have abbreviated names, such as "LF" or "NL". 452C<viacode> never returns these. 453 454Because a name correction may be added in future Unicode releases, the name 455that C<viacode> returns may change as a result. This is a rare event, but it 456does happen. 457 458=head1 CUSTOM TRANSLATORS 459 460The mechanism of translation of C<\N{...}> escapes is general and not 461hardwired into F<charnames.pm>. A module can install custom 462translations (inside the scope which C<use>s the module) with the 463following magic incantation: 464 465 sub import { 466 shift; 467 $^H{charnames} = \&translator; 468 } 469 470Here translator() is a subroutine which takes I<CHARNAME> as an 471argument, and returns text to insert into the string instead of the 472C<\N{I<CHARNAME>}> escape. 473 474This is the only way you can create a custom named sequence of code points. 475 476Since the text to insert should be different 477in C<bytes> mode and out of it, the function should check the current 478state of C<bytes>-flag as in: 479 480 use bytes (); # for $bytes::hint_bits 481 sub translator { 482 if ($^H & $bytes::hint_bits) { 483 return bytes_translator(@_); 484 } 485 else { 486 return utf8_translator(@_); 487 } 488 } 489 490See L</CUSTOM ALIASES> above for restrictions on I<CHARNAME>. 491 492Of course, C<vianame>, C<viacode>, and C<string_vianame> would need to be 493overridden as well. 494 495=head1 BUGS 496 497vianame() normally returns an ordinal code point, but when the input name is of 498the form C<U+...>, it returns a chr instead. In this case, if C<use bytes> is 499in effect and the character won't fit into a byte, it returns C<undef> and 500raises a warning. 501 502Since evaluation of the translation function (see L</CUSTOM 503TRANSLATORS>) happens in the middle of compilation (of a string 504literal), the translation function should not do any C<eval>s or 505C<require>s. This restriction should be lifted (but is low priority) in 506a future version of Perl. 507 508=cut 509 510# ex: set ts=8 sts=2 sw=2 et: 511