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