source: main/trunk/greenstone2/perllib/cpan/Mojo/Util.pm@ 32205

Last change on this file since 32205 was 32205, checked in by ak19, 6 years ago

First set of commits to do with implementing the new 'paged_html' output option of PDFPlugin that uses using xpdftools' new pdftohtml. So far tested only on Linux (64 bit), but things work there so I'm optimistically committing the changes since they work. 2. Committing the pre-built Linux binaries of XPDFtools for both 32 and 64 bit built by the XPDF group. 2. To use the correct bitness variant of xpdftools, setup.bash now exports the BITNESS env var, consulted by gsConvert.pl. 3. All the perl code changes to do with using xpdf tools' pdftohtml to generate paged_html and feed it in the desired form into GS(3): gsConvert.pl, PDFPlugin.pm and its parent ConvertBinaryPFile.pm have been modified to make it all work. xpdftools' pdftohtml generates a folder containing an html file and a screenshot for each page in a PDF (as well as an index.html linking to each page's html). However, we want a single html file that contains each individual 'page' html's content in a div, and need to do some further HTML style, attribute and structure modifications to massage the xpdftool output to what we want for GS. In order to parse and manipulate the HTML 'DOM' to do this, we're using the Mojo::DOM package that Dr Bainbridge found and which he's compiled up. Mojo::DOM is therefore also committed in this revision. Some further changes and some display fixes are required, but need to check with the others about that.

File size: 57.0 KB
Line 
1package Mojo::Util;
2use Mojo::Base -strict;
3
4use Carp qw(carp croak);
5use Data::Dumper ();
6use Digest::MD5 qw(md5 md5_hex);
7use Digest::SHA qw(hmac_sha1_hex sha1 sha1_hex);
8use Encode 'find_encoding';
9use Exporter 'import';
10use Getopt::Long 'GetOptionsFromArray';
11use IO::Poll qw(POLLIN POLLPRI);
12use List::Util 'min';
13use MIME::Base64 qw(decode_base64 encode_base64);
14use Pod::Usage 'pod2usage';
15use Symbol 'delete_package';
16use Time::HiRes ();
17use Unicode::Normalize ();
18
19# Check for monotonic clock support
20use constant MONOTONIC =>
21 eval { !!Time::HiRes::clock_gettime(Time::HiRes::CLOCK_MONOTONIC()) };
22
23# Punycode bootstring parameters
24use constant {
25 PC_BASE => 36,
26 PC_TMIN => 1,
27 PC_TMAX => 26,
28 PC_SKEW => 38,
29 PC_DAMP => 700,
30 PC_INITIAL_BIAS => 72,
31 PC_INITIAL_N => 128
32};
33
34# Supported on Perl 5.22+
35my $NAME
36 = eval { require Sub::Util; Sub::Util->can('set_subname') } || sub { $_[1] };
37
38# To generate a new HTML entity table run this command
39# perl examples/entities.pl
40my %ENTITIES;
41for my $line (split "\n", join('', <DATA>)) {
42 next unless $line =~ /^(\S+)\s+U\+(\S+)(?:\s+U\+(\S+))?/;
43 $ENTITIES{$1} = defined $3 ? (chr(hex $2) . chr(hex $3)) : chr(hex $2);
44}
45close DATA;
46
47# Characters that should be escaped in XML
48my %XML = (
49 '&' => '&amp;',
50 '<' => '&lt;',
51 '>' => '&gt;',
52 '"' => '&quot;',
53 '\'' => '&#39;'
54);
55
56# "Sun, 06 Nov 1994 08:49:37 GMT" and "Sunday, 06-Nov-94 08:49:37 GMT"
57my $EXPIRES_RE = qr/(\w+\W+\d+\W+\w+\W+\d+\W+\d+:\d+:\d+\W*\w+)/;
58
59# HTML entities
60my $ENTITY_RE = qr/&(?:\#((?:[0-9]{1,7}|x[0-9a-fA-F]{1,6}));|(\w+[;=]?))/;
61
62# Encoding and pattern cache
63my (%ENCODING, %PATTERN);
64
65our @EXPORT_OK = (
66 qw(b64_decode b64_encode camelize class_to_file class_to_path decamelize),
67 qw(decode deprecated dumper encode extract_usage getopt hmac_sha1_sum),
68 qw(html_attr_unescape html_unescape md5_bytes md5_sum monkey_patch),
69 qw(punycode_decode punycode_encode quote secure_compare sha1_bytes sha1_sum),
70 qw(slugify split_cookie_header split_header steady_time tablify term_escape),
71 qw(trim unindent unquote url_escape url_unescape xml_escape xor_encode)
72);
73
74# Aliases
75monkey_patch(__PACKAGE__, 'b64_decode', \&decode_base64);
76monkey_patch(__PACKAGE__, 'b64_encode', \&encode_base64);
77monkey_patch(__PACKAGE__, 'hmac_sha1_sum', \&hmac_sha1_hex);
78monkey_patch(__PACKAGE__, 'md5_bytes', \&md5);
79monkey_patch(__PACKAGE__, 'md5_sum', \&md5_hex);
80monkey_patch(__PACKAGE__, 'sha1_bytes', \&sha1);
81monkey_patch(__PACKAGE__, 'sha1_sum', \&sha1_hex);
82
83# Use a monotonic clock if possible
84monkey_patch(__PACKAGE__, 'steady_time',
85 MONOTONIC
86 ? sub () { Time::HiRes::clock_gettime(Time::HiRes::CLOCK_MONOTONIC()) }
87 : \&Time::HiRes::time);
88
89sub camelize {
90 my $str = shift;
91 return $str if $str =~ /^[A-Z]/;
92
93 # CamelCase words
94 return join '::', map {
95 join('', map { ucfirst lc } split '_')
96 } split '-', $str;
97}
98
99sub class_to_file {
100 my $class = shift;
101 $class =~ s/::|'//g;
102 $class =~ s/([A-Z])([A-Z]*)/$1 . lc $2/ge;
103 return decamelize($class);
104}
105
106sub class_to_path { join '.', join('/', split(/::|'/, shift)), 'pm' }
107
108sub decamelize {
109 my $str = shift;
110 return $str if $str !~ /^[A-Z]/;
111
112 # snake_case words
113 return join '-', map {
114 join('_', map {lc} grep {length} split /([A-Z]{1}[^A-Z]*)/)
115 } split '::', $str;
116}
117
118sub decode {
119 my ($encoding, $bytes) = @_;
120 return undef
121 unless eval { $bytes = _encoding($encoding)->decode("$bytes", 1); 1 };
122 return $bytes;
123}
124
125sub deprecated {
126 local $Carp::CarpLevel = 1;
127 $ENV{MOJO_FATAL_DEPRECATIONS} ? croak @_ : carp @_;
128}
129
130sub dumper {
131 Data::Dumper->new([@_])->Indent(1)->Sortkeys(1)->Terse(1)->Useqq(1)->Dump;
132}
133
134sub encode { _encoding($_[0])->encode("$_[1]", 0) }
135
136sub extract_usage {
137 my $file = @_ ? "$_[0]" : (caller)[1];
138
139 open my $handle, '>', \my $output;
140 pod2usage -exitval => 'noexit', -input => $file, -output => $handle;
141 $output =~ s/^.*\n|\n$//;
142 $output =~ s/\n$//;
143
144 return unindent($output);
145}
146
147sub getopt {
148 my ($array, $opts) = map { ref $_[0] eq 'ARRAY' ? shift : $_ } \@ARGV, [];
149 my $save = Getopt::Long::Configure(qw(default no_auto_abbrev no_ignore_case),
150 @$opts);
151 GetOptionsFromArray $array, @_;
152 Getopt::Long::Configure($save);
153}
154
155sub html_attr_unescape { _html(shift, 1) }
156sub html_unescape { _html(shift, 0) }
157
158sub monkey_patch {
159 my ($class, %patch) = @_;
160 no strict 'refs';
161 no warnings 'redefine';
162 *{"${class}::$_"} = $NAME->("${class}::$_", $patch{$_}) for keys %patch;
163}
164
165# Direct translation of RFC 3492
166sub punycode_decode {
167 my $input = shift;
168 use integer;
169
170 my ($n, $i, $bias, @output) = (PC_INITIAL_N, 0, PC_INITIAL_BIAS);
171
172 # Consume all code points before the last delimiter
173 push @output, split('', $1) if $input =~ s/(.*)\x2d//s;
174
175 while (length $input) {
176 my ($oldi, $w) = ($i, 1);
177
178 # Base to infinity in steps of base
179 for (my $k = PC_BASE; 1; $k += PC_BASE) {
180 my $digit = ord substr $input, 0, 1, '';
181 $digit = $digit < 0x40 ? $digit + (26 - 0x30) : ($digit & 0x1f) - 1;
182 $i += $digit * $w;
183 my $t = $k - $bias;
184 $t = $t < PC_TMIN ? PC_TMIN : $t > PC_TMAX ? PC_TMAX : $t;
185 last if $digit < $t;
186 $w *= PC_BASE - $t;
187 }
188
189 $bias = _adapt($i - $oldi, @output + 1, $oldi == 0);
190 $n += $i / (@output + 1);
191 $i = $i % (@output + 1);
192 splice @output, $i++, 0, chr $n;
193 }
194
195 return join '', @output;
196}
197
198# Direct translation of RFC 3492
199sub punycode_encode {
200 my $output = shift;
201 use integer;
202
203 my ($n, $delta, $bias) = (PC_INITIAL_N, 0, PC_INITIAL_BIAS);
204
205 # Extract basic code points
206 my @input = map {ord} split '', $output;
207 $output =~ s/[^\x00-\x7f]+//gs;
208 my $h = my $basic = length $output;
209 $output .= "\x2d" if $basic > 0;
210
211 for my $m (sort grep { $_ >= PC_INITIAL_N } @input) {
212 next if $m < $n;
213 $delta += ($m - $n) * ($h + 1);
214 $n = $m;
215
216 for my $c (@input) {
217
218 if ($c < $n) { $delta++ }
219 elsif ($c == $n) {
220 my $q = $delta;
221
222 # Base to infinity in steps of base
223 for (my $k = PC_BASE; 1; $k += PC_BASE) {
224 my $t = $k - $bias;
225 $t = $t < PC_TMIN ? PC_TMIN : $t > PC_TMAX ? PC_TMAX : $t;
226 last if $q < $t;
227 my $o = $t + (($q - $t) % (PC_BASE - $t));
228 $output .= chr $o + ($o < 26 ? 0x61 : 0x30 - 26);
229 $q = ($q - $t) / (PC_BASE - $t);
230 }
231
232 $output .= chr $q + ($q < 26 ? 0x61 : 0x30 - 26);
233 $bias = _adapt($delta, $h + 1, $h == $basic);
234 $delta = 0;
235 $h++;
236 }
237 }
238
239 $delta++;
240 $n++;
241 }
242
243 return $output;
244}
245
246sub quote {
247 my $str = shift;
248 $str =~ s/(["\\])/\\$1/g;
249 return qq{"$str"};
250}
251
252sub secure_compare {
253 my ($one, $two) = @_;
254 return undef if length $one != length $two;
255 my $r = 0;
256 $r |= ord(substr $one, $_) ^ ord(substr $two, $_) for 0 .. length($one) - 1;
257 return $r == 0;
258}
259
260sub slugify {
261 my ($value, $allow_unicode) = @_;
262
263 if ($allow_unicode) {
264
265 # Force unicode semantics by upgrading string
266 utf8::upgrade($value = Unicode::Normalize::NFKC($value));
267 $value =~ s/[^\w\s-]+//g;
268 }
269 else {
270 $value = Unicode::Normalize::NFKD($value);
271 $value =~ s/[^a-zA-Z0-9_\p{PosixSpace}-]+//g;
272 }
273 (my $new = lc trim($value)) =~ s/[-\s]+/-/g;
274
275 return $new;
276}
277
278sub split_cookie_header { _header(shift, 1) }
279sub split_header { _header(shift, 0) }
280
281sub tablify {
282 my $rows = shift;
283
284 my @spec;
285 for my $row (@$rows) {
286 for my $i (0 .. $#$row) {
287 ($row->[$i] //= '') =~ s/[\r\n]//g;
288 my $len = length $row->[$i];
289 $spec[$i] = $len if $len >= ($spec[$i] // 0);
290 }
291 }
292
293 my @fm = (map({"\%-${_}s"} @spec[0 .. $#spec - 1]), '%s');
294 return join '', map { sprintf join(' ', @fm[0 .. $#$_]) . "\n", @$_ } @$rows;
295}
296
297sub term_escape {
298 my $str = shift;
299 $str =~ s/([\x00-\x09\x0b-\x1f\x7f\x80-\x9f])/sprintf '\\x%02x', ord $1/ge;
300 return $str;
301}
302
303sub trim {
304 my $str = shift;
305 $str =~ s/^\s+//;
306 $str =~ s/\s+$//;
307 return $str;
308}
309
310sub unindent {
311 my $str = shift;
312 my $min = min map { m/^([ \t]*)/; length $1 || () } split "\n", $str;
313 $str =~ s/^[ \t]{0,$min}//gm if $min;
314 return $str;
315}
316
317sub unquote {
318 my $str = shift;
319 return $str unless $str =~ s/^"(.*)"$/$1/g;
320 $str =~ s/\\\\/\\/g;
321 $str =~ s/\\"/"/g;
322 return $str;
323}
324
325sub url_escape {
326 my ($str, $pattern) = @_;
327
328 if ($pattern) {
329 unless (exists $PATTERN{$pattern}) {
330 (my $quoted = $pattern) =~ s!([/\$\[])!\\$1!g;
331 $PATTERN{$pattern}
332 = eval "sub { \$_[0] =~ s/([$quoted])/sprintf '%%%02X', ord \$1/ge }"
333 or croak $@;
334 }
335 $PATTERN{$pattern}->($str);
336 }
337 else { $str =~ s/([^A-Za-z0-9\-._~])/sprintf '%%%02X', ord $1/ge }
338
339 return $str;
340}
341
342sub url_unescape {
343 my $str = shift;
344 $str =~ s/%([0-9a-fA-F]{2})/chr hex $1/ge;
345 return $str;
346}
347
348sub xml_escape {
349 return $_[0] if ref $_[0] && ref $_[0] eq 'Mojo::ByteStream';
350 my $str = shift // '';
351 $str =~ s/([&<>"'])/$XML{$1}/ge;
352 return $str;
353}
354
355sub xor_encode {
356 my ($input, $key) = @_;
357
358 # Encode with variable key length
359 my $len = length $key;
360 my $buffer = my $output = '';
361 $output .= $buffer ^ $key
362 while length($buffer = substr($input, 0, $len, '')) == $len;
363 return $output .= $buffer ^ substr($key, 0, length $buffer, '');
364}
365
366sub _adapt {
367 my ($delta, $numpoints, $firsttime) = @_;
368 use integer;
369
370 $delta = $firsttime ? $delta / PC_DAMP : $delta / 2;
371 $delta += $delta / $numpoints;
372 my $k = 0;
373 while ($delta > ((PC_BASE - PC_TMIN) * PC_TMAX) / 2) {
374 $delta /= PC_BASE - PC_TMIN;
375 $k += PC_BASE;
376 }
377
378 return $k + (((PC_BASE - PC_TMIN + 1) * $delta) / ($delta + PC_SKEW));
379}
380
381sub _encoding {
382 $ENCODING{$_[0]} //= find_encoding($_[0]) // croak "Unknown encoding '$_[0]'";
383}
384
385sub _entity {
386 my ($point, $name, $attr) = @_;
387
388 # Code point
389 return chr($point !~ /^x/ ? $point : hex $point) unless defined $name;
390
391 # Named character reference
392 my $rest = my $last = '';
393 while (length $name) {
394 return $ENTITIES{$name} . reverse $rest
395 if exists $ENTITIES{$name}
396 && (!$attr || $name =~ /;$/ || $last !~ /[A-Za-z0-9=]/);
397 $rest .= $last = chop $name;
398 }
399 return '&' . reverse $rest;
400}
401
402# Supported on Perl 5.14+
403sub _global_destruction {
404 defined ${^GLOBAL_PHASE} && ${^GLOBAL_PHASE} eq 'DESTRUCT';
405}
406
407sub _header {
408 my ($str, $cookie) = @_;
409
410 my (@tree, @part);
411 while ($str =~ /\G[,;\s]*([^=;, ]+)\s*/gc) {
412 push @part, $1, undef;
413 my $expires = $cookie && @part > 2 && lc $1 eq 'expires';
414
415 # Special "expires" value
416 if ($expires && $str =~ /\G=\s*$EXPIRES_RE/gco) { $part[-1] = $1 }
417
418 # Quoted value
419 elsif ($str =~ /\G=\s*("(?:\\\\|\\"|[^"])*")/gc) { $part[-1] = unquote $1 }
420
421 # Unquoted value
422 elsif ($str =~ /\G=\s*([^;, ]*)/gc) { $part[-1] = $1 }
423
424 # Separator
425 next unless $str =~ /\G[;\s]*,\s*/gc;
426 push @tree, [@part];
427 @part = ();
428 }
429
430 # Take care of final part
431 return [@part ? (@tree, \@part) : @tree];
432}
433
434sub _html {
435 my ($str, $attr) = @_;
436 $str =~ s/$ENTITY_RE/_entity($1, $2, $attr)/geo;
437 return $str;
438}
439
440sub _options {
441
442 # Hash or name (one)
443 return ref $_[0] eq 'HASH' ? (undef, %{shift()}) : @_ if @_ == 1;
444
445 # Name and values (odd)
446 return shift, @_ if @_ % 2;
447
448 # Name and hash or just values (even)
449 return ref $_[1] eq 'HASH' ? (shift, %{shift()}) : (undef, @_);
450}
451
452# This may break in the future, but is worth it for performance
453sub _readable { !!(IO::Poll::_poll(@_[0, 1], my $m = POLLIN | POLLPRI) > 0) }
454
455sub _stash {
456 my ($name, $object) = (shift, shift);
457
458 # Hash
459 return $object->{$name} ||= {} unless @_;
460
461 # Get
462 return $object->{$name}{$_[0]} unless @_ > 1 || ref $_[0];
463
464 # Set
465 my $values = ref $_[0] ? $_[0] : {@_};
466 @{$object->{$name}}{keys %$values} = values %$values;
467
468 return $object;
469}
470
471sub _teardown {
472 return unless my $class = shift;
473
474 # @ISA has to be cleared first because of circular references
475 no strict 'refs';
476 @{"${class}::ISA"} = ();
477 delete_package $class;
478}
479
4801;
481
482=encoding utf8
483
484=head1 NAME
485
486Mojo::Util - Portable utility functions
487
488=head1 SYNOPSIS
489
490 use Mojo::Util qw(b64_encode url_escape url_unescape);
491
492 my $str = 'test=23';
493 my $escaped = url_escape $str;
494 say url_unescape $escaped;
495 say b64_encode $escaped, '';
496
497=head1 DESCRIPTION
498
499L<Mojo::Util> provides portable utility functions for L<Mojo>.
500
501=head1 FUNCTIONS
502
503L<Mojo::Util> implements the following functions, which can be imported
504individually.
505
506=head2 b64_decode
507
508 my $bytes = b64_decode $b64;
509
510Base64 decode bytes with L<MIME::Base64>.
511
512=head2 b64_encode
513
514 my $b64 = b64_encode $bytes;
515 my $b64 = b64_encode $bytes, "\n";
516
517Base64 encode bytes with L<MIME::Base64>, the line ending defaults to a newline.
518
519=head2 camelize
520
521 my $camelcase = camelize $snakecase;
522
523Convert C<snake_case> string to C<CamelCase> and replace C<-> with C<::>.
524
525 # "FooBar"
526 camelize 'foo_bar';
527
528 # "FooBar::Baz"
529 camelize 'foo_bar-baz';
530
531 # "FooBar::Baz"
532 camelize 'FooBar::Baz';
533
534=head2 class_to_file
535
536 my $file = class_to_file 'Foo::Bar';
537
538Convert a class name to a file.
539
540 # "foo_bar"
541 class_to_file 'Foo::Bar';
542
543 # "foobar"
544 class_to_file 'FOO::Bar';
545
546 # "foo_bar"
547 class_to_file 'FooBar';
548
549 # "foobar"
550 class_to_file 'FOOBar';
551
552=head2 class_to_path
553
554 my $path = class_to_path 'Foo::Bar';
555
556Convert class name to path, as used by C<%INC>.
557
558 # "Foo/Bar.pm"
559 class_to_path 'Foo::Bar';
560
561 # "FooBar.pm"
562 class_to_path 'FooBar';
563
564=head2 decamelize
565
566 my $snakecase = decamelize $camelcase;
567
568Convert C<CamelCase> string to C<snake_case> and replace C<::> with C<->.
569
570 # "foo_bar"
571 decamelize 'FooBar';
572
573 # "foo_bar-baz"
574 decamelize 'FooBar::Baz';
575
576 # "foo_bar-baz"
577 decamelize 'foo_bar-baz';
578
579=head2 decode
580
581 my $chars = decode 'UTF-8', $bytes;
582
583Decode bytes to characters with L<Encode>, or return C<undef> if decoding
584failed.
585
586=head2 deprecated
587
588 deprecated 'foo is DEPRECATED in favor of bar';
589
590Warn about deprecated feature from perspective of caller. You can also set the
591C<MOJO_FATAL_DEPRECATIONS> environment variable to make them die instead.
592
593=head2 dumper
594
595 my $perl = dumper {some => 'data'};
596
597Dump a Perl data structure with L<Data::Dumper>.
598
599=head2 encode
600
601 my $bytes = encode 'UTF-8', $chars;
602
603Encode characters to bytes with L<Encode>.
604
605=head2 extract_usage
606
607 my $usage = extract_usage;
608 my $usage = extract_usage '/home/sri/foo.pod';
609
610Extract usage message from the SYNOPSIS section of a file containing POD
611documentation, defaults to using the file this function was called from.
612
613 # "Usage: APPLICATION test [OPTIONS]\n"
614 extract_usage;
615
616 =head1 SYNOPSIS
617
618 Usage: APPLICATION test [OPTIONS]
619
620 =cut
621
622=head2 getopt
623
624 getopt
625 'H|headers=s' => \my @headers,
626 't|timeout=i' => \my $timeout,
627 'v|verbose' => \my $verbose;
628 getopt $array,
629 'H|headers=s' => \my @headers,
630 't|timeout=i' => \my $timeout,
631 'v|verbose' => \my $verbose;
632 getopt $array, ['pass_through'],
633 'H|headers=s' => \my @headers,
634 't|timeout=i' => \my $timeout,
635 'v|verbose' => \my $verbose;
636
637Extract options from an array reference with L<Getopt::Long>, but without
638changing its global configuration, defaults to using C<@ARGV>. The configuration
639options C<no_auto_abbrev> and C<no_ignore_case> are enabled by default.
640
641 # Extract "charset" option
642 getopt ['--charset', 'UTF-8'], 'charset=s' => \my $charset;
643 say $charset;
644
645=head2 hmac_sha1_sum
646
647 my $checksum = hmac_sha1_sum $bytes, 'passw0rd';
648
649Generate HMAC-SHA1 checksum for bytes with L<Digest::SHA>.
650
651 # "11cedfd5ec11adc0ec234466d8a0f2a83736aa68"
652 hmac_sha1_sum 'foo', 'passw0rd';
653
654=head2 html_attr_unescape
655
656 my $str = html_attr_unescape $escaped;
657
658Same as L</"html_unescape">, but handles special rules from the
659L<HTML Living Standard|https://html.spec.whatwg.org> for HTML attributes.
660
661 # "foo=bar&ltest=baz"
662 html_attr_unescape 'foo=bar&ltest=baz';
663
664 # "foo=bar<est=baz"
665 html_attr_unescape 'foo=bar&lt;est=baz';
666
667=head2 html_unescape
668
669 my $str = html_unescape $escaped;
670
671Unescape all HTML entities in string.
672
673 # "<div>"
674 html_unescape '&lt;div&gt;';
675
676=head2 md5_bytes
677
678 my $checksum = md5_bytes $bytes;
679
680Generate binary MD5 checksum for bytes with L<Digest::MD5>.
681
682=head2 md5_sum
683
684 my $checksum = md5_sum $bytes;
685
686Generate MD5 checksum for bytes with L<Digest::MD5>.
687
688 # "acbd18db4cc2f85cedef654fccc4a4d8"
689 md5_sum 'foo';
690
691=head2 monkey_patch
692
693 monkey_patch $package, foo => sub {...};
694 monkey_patch $package, foo => sub {...}, bar => sub {...};
695
696Monkey patch functions into package.
697
698 monkey_patch 'MyApp',
699 one => sub { say 'One!' },
700 two => sub { say 'Two!' },
701 three => sub { say 'Three!' };
702
703=head2 punycode_decode
704
705 my $str = punycode_decode $punycode;
706
707Punycode decode string as described in
708L<RFC 3492|http://tools.ietf.org/html/rfc3492>.
709
710 # "bÃŒcher"
711 punycode_decode 'bcher-kva';
712
713=head2 punycode_encode
714
715 my $punycode = punycode_encode $str;
716
717Punycode encode string as described in
718L<RFC 3492|http://tools.ietf.org/html/rfc3492>.
719
720 # "bcher-kva"
721 punycode_encode 'bÃŒcher';
722
723=head2 quote
724
725 my $quoted = quote $str;
726
727Quote string.
728
729=head2 secure_compare
730
731 my $bool = secure_compare $str1, $str2;
732
733Constant time comparison algorithm to prevent timing attacks.
734
735=head2 sha1_bytes
736
737 my $checksum = sha1_bytes $bytes;
738
739Generate binary SHA1 checksum for bytes with L<Digest::SHA>.
740
741=head2 sha1_sum
742
743 my $checksum = sha1_sum $bytes;
744
745Generate SHA1 checksum for bytes with L<Digest::SHA>.
746
747 # "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
748 sha1_sum 'foo';
749
750=head2 slugify
751
752 my $slug = slugify $string;
753 my $slug = slugify $string, $bool;
754
755Returns a URL slug generated from the input string. Non-word characters are
756removed, the string is trimmed and lowercased, and whitespace characters are
757replaced by a dash. By default, non-ASCII characters are normalized to ASCII
758word characters or removed, but if a true value is passed as the second
759parameter, all word characters will be allowed in the result according to
760unicode semantics.
761
762 # "joel-is-a-slug"
763 slugify 'Joel is a slug';
764
765 # "this-is-my-resume"
766 slugify 'This is: my - résumé! ☃ ';
767
768 # "this-is-my-résumé"
769 slugify 'This is: my - résumé! ☃ ', 1;
770
771=head2 split_cookie_header
772
773 my $tree = split_cookie_header 'a=b; expires=Thu, 07 Aug 2008 07:07:59 GMT';
774
775Same as L</"split_header">, but handles C<expires> values from
776L<RFC 6265|http://tools.ietf.org/html/rfc6265>.
777
778=head2 split_header
779
780 my $tree = split_header 'foo="bar baz"; test=123, yada';
781
782Split HTTP header value into key/value pairs, each comma separated part gets
783its own array reference, and keys without a value get C<undef> assigned.
784
785 # "one"
786 split_header('one; two="three four", five=six')->[0][0];
787
788 # "two"
789 split_header('one; two="three four", five=six')->[0][2];
790
791 # "three four"
792 split_header('one; two="three four", five=six')->[0][3];
793
794 # "five"
795 split_header('one; two="three four", five=six')->[1][0];
796
797 # "six"
798 split_header('one; two="three four", five=six')->[1][1];
799
800=head2 steady_time
801
802 my $time = steady_time;
803
804High resolution time elapsed from an arbitrary fixed point in the past,
805resilient to time jumps if a monotonic clock is available through
806L<Time::HiRes>.
807
808=head2 tablify
809
810 my $table = tablify [['foo', 'bar'], ['baz', 'yada']];
811
812Row-oriented generator for text tables.
813
814 # "foo bar\nyada yada\nbaz yada\n"
815 tablify [['foo', 'bar'], ['yada', 'yada'], ['baz', 'yada']];
816
817=head2 term_escape
818
819 my $escaped = term_escape $str;
820
821Escape all POSIX control characters except for C<\n>.
822
823 # "foo\\x09bar\\x0d\n"
824 term_escape "foo\tbar\r\n";
825
826=head2 trim
827
828 my $trimmed = trim $str;
829
830Trim whitespace characters from both ends of string.
831
832 # "foo bar"
833 trim ' foo bar ';
834
835=head2 unindent
836
837 my $unindented = unindent $str;
838
839Unindent multi-line string.
840
841 # "foo\nbar\nbaz\n"
842 unindent " foo\n bar\n baz\n";
843
844=head2 unquote
845
846 my $str = unquote $quoted;
847
848Unquote string.
849
850=head2 url_escape
851
852 my $escaped = url_escape $str;
853 my $escaped = url_escape $str, '^A-Za-z0-9\-._~';
854
855Percent encode unsafe characters in string as described in
856L<RFC 3986|http://tools.ietf.org/html/rfc3986>, the pattern used defaults to
857C<^A-Za-z0-9\-._~>.
858
859 # "foo%3Bbar"
860 url_escape 'foo;bar';
861
862=head2 url_unescape
863
864 my $str = url_unescape $escaped;
865
866Decode percent encoded characters in string as described in
867L<RFC 3986|http://tools.ietf.org/html/rfc3986>.
868
869 # "foo;bar"
870 url_unescape 'foo%3Bbar';
871
872=head2 xml_escape
873
874 my $escaped = xml_escape $str;
875
876Escape unsafe characters C<&>, C<E<lt>>, C<E<gt>>, C<"> and C<'> in string, but
877do not escape L<Mojo::ByteStream> objects.
878
879 # "&lt;div&gt;"
880 xml_escape '<div>';
881
882 # "<div>"
883 use Mojo::ByteStream 'b';
884 xml_escape b('<div>');
885
886=head2 xor_encode
887
888 my $encoded = xor_encode $str, $key;
889
890XOR encode string with variable length key.
891
892=head1 SEE ALSO
893
894L<Mojolicious>, L<Mojolicious::Guides>, L<https://mojolicious.org>.
895
896=cut
897
898__DATA__
899Aacute; U+000C1
900Aacute U+000C1
901aacute; U+000E1
902aacute U+000E1
903Abreve; U+00102
904abreve; U+00103
905ac; U+0223E
906acd; U+0223F
907acE; U+0223E U+00333
908Acirc; U+000C2
909Acirc U+000C2
910acirc; U+000E2
911acirc U+000E2
912acute; U+000B4
913acute U+000B4
914Acy; U+00410
915acy; U+00430
916AElig; U+000C6
917AElig U+000C6
918aelig; U+000E6
919aelig U+000E6
920af; U+02061
921Afr; U+1D504
922afr; U+1D51E
923Agrave; U+000C0
924Agrave U+000C0
925agrave; U+000E0
926agrave U+000E0
927alefsym; U+02135
928aleph; U+02135
929Alpha; U+00391
930alpha; U+003B1
931Amacr; U+00100
932amacr; U+00101
933amalg; U+02A3F
934AMP; U+00026
935AMP U+00026
936amp; U+00026
937amp U+00026
938And; U+02A53
939and; U+02227
940andand; U+02A55
941andd; U+02A5C
942andslope; U+02A58
943andv; U+02A5A
944ang; U+02220
945ange; U+029A4
946angle; U+02220
947angmsd; U+02221
948angmsdaa; U+029A8
949angmsdab; U+029A9
950angmsdac; U+029AA
951angmsdad; U+029AB
952angmsdae; U+029AC
953angmsdaf; U+029AD
954angmsdag; U+029AE
955angmsdah; U+029AF
956angrt; U+0221F
957angrtvb; U+022BE
958angrtvbd; U+0299D
959angsph; U+02222
960angst; U+000C5
961angzarr; U+0237C
962Aogon; U+00104
963aogon; U+00105
964Aopf; U+1D538
965aopf; U+1D552
966ap; U+02248
967apacir; U+02A6F
968apE; U+02A70
969ape; U+0224A
970apid; U+0224B
971apos; U+00027
972ApplyFunction; U+02061
973approx; U+02248
974approxeq; U+0224A
975Aring; U+000C5
976Aring U+000C5
977aring; U+000E5
978aring U+000E5
979Ascr; U+1D49C
980ascr; U+1D4B6
981Assign; U+02254
982ast; U+0002A
983asymp; U+02248
984asympeq; U+0224D
985Atilde; U+000C3
986Atilde U+000C3
987atilde; U+000E3
988atilde U+000E3
989Auml; U+000C4
990Auml U+000C4
991auml; U+000E4
992auml U+000E4
993awconint; U+02233
994awint; U+02A11
995backcong; U+0224C
996backepsilon; U+003F6
997backprime; U+02035
998backsim; U+0223D
999backsimeq; U+022CD
1000Backslash; U+02216
1001Barv; U+02AE7
1002barvee; U+022BD
1003Barwed; U+02306
1004barwed; U+02305
1005barwedge; U+02305
1006bbrk; U+023B5
1007bbrktbrk; U+023B6
1008bcong; U+0224C
1009Bcy; U+00411
1010bcy; U+00431
1011bdquo; U+0201E
1012becaus; U+02235
1013Because; U+02235
1014because; U+02235
1015bemptyv; U+029B0
1016bepsi; U+003F6
1017bernou; U+0212C
1018Bernoullis; U+0212C
1019Beta; U+00392
1020beta; U+003B2
1021beth; U+02136
1022between; U+0226C
1023Bfr; U+1D505
1024bfr; U+1D51F
1025bigcap; U+022C2
1026bigcirc; U+025EF
1027bigcup; U+022C3
1028bigodot; U+02A00
1029bigoplus; U+02A01
1030bigotimes; U+02A02
1031bigsqcup; U+02A06
1032bigstar; U+02605
1033bigtriangledown; U+025BD
1034bigtriangleup; U+025B3
1035biguplus; U+02A04
1036bigvee; U+022C1
1037bigwedge; U+022C0
1038bkarow; U+0290D
1039blacklozenge; U+029EB
1040blacksquare; U+025AA
1041blacktriangle; U+025B4
1042blacktriangledown; U+025BE
1043blacktriangleleft; U+025C2
1044blacktriangleright; U+025B8
1045blank; U+02423
1046blk12; U+02592
1047blk14; U+02591
1048blk34; U+02593
1049block; U+02588
1050bne; U+0003D U+020E5
1051bnequiv; U+02261 U+020E5
1052bNot; U+02AED
1053bnot; U+02310
1054Bopf; U+1D539
1055bopf; U+1D553
1056bot; U+022A5
1057bottom; U+022A5
1058bowtie; U+022C8
1059boxbox; U+029C9
1060boxDL; U+02557
1061boxDl; U+02556
1062boxdL; U+02555
1063boxdl; U+02510
1064boxDR; U+02554
1065boxDr; U+02553
1066boxdR; U+02552
1067boxdr; U+0250C
1068boxH; U+02550
1069boxh; U+02500
1070boxHD; U+02566
1071boxHd; U+02564
1072boxhD; U+02565
1073boxhd; U+0252C
1074boxHU; U+02569
1075boxHu; U+02567
1076boxhU; U+02568
1077boxhu; U+02534
1078boxminus; U+0229F
1079boxplus; U+0229E
1080boxtimes; U+022A0
1081boxUL; U+0255D
1082boxUl; U+0255C
1083boxuL; U+0255B
1084boxul; U+02518
1085boxUR; U+0255A
1086boxUr; U+02559
1087boxuR; U+02558
1088boxur; U+02514
1089boxV; U+02551
1090boxv; U+02502
1091boxVH; U+0256C
1092boxVh; U+0256B
1093boxvH; U+0256A
1094boxvh; U+0253C
1095boxVL; U+02563
1096boxVl; U+02562
1097boxvL; U+02561
1098boxvl; U+02524
1099boxVR; U+02560
1100boxVr; U+0255F
1101boxvR; U+0255E
1102boxvr; U+0251C
1103bprime; U+02035
1104Breve; U+002D8
1105breve; U+002D8
1106brvbar; U+000A6
1107brvbar U+000A6
1108Bscr; U+0212C
1109bscr; U+1D4B7
1110bsemi; U+0204F
1111bsim; U+0223D
1112bsime; U+022CD
1113bsol; U+0005C
1114bsolb; U+029C5
1115bsolhsub; U+027C8
1116bull; U+02022
1117bullet; U+02022
1118bump; U+0224E
1119bumpE; U+02AAE
1120bumpe; U+0224F
1121Bumpeq; U+0224E
1122bumpeq; U+0224F
1123Cacute; U+00106
1124cacute; U+00107
1125Cap; U+022D2
1126cap; U+02229
1127capand; U+02A44
1128capbrcup; U+02A49
1129capcap; U+02A4B
1130capcup; U+02A47
1131capdot; U+02A40
1132CapitalDifferentialD; U+02145
1133caps; U+02229 U+0FE00
1134caret; U+02041
1135caron; U+002C7
1136Cayleys; U+0212D
1137ccaps; U+02A4D
1138Ccaron; U+0010C
1139ccaron; U+0010D
1140Ccedil; U+000C7
1141Ccedil U+000C7
1142ccedil; U+000E7
1143ccedil U+000E7
1144Ccirc; U+00108
1145ccirc; U+00109
1146Cconint; U+02230
1147ccups; U+02A4C
1148ccupssm; U+02A50
1149Cdot; U+0010A
1150cdot; U+0010B
1151cedil; U+000B8
1152cedil U+000B8
1153Cedilla; U+000B8
1154cemptyv; U+029B2
1155cent; U+000A2
1156cent U+000A2
1157CenterDot; U+000B7
1158centerdot; U+000B7
1159Cfr; U+0212D
1160cfr; U+1D520
1161CHcy; U+00427
1162chcy; U+00447
1163check; U+02713
1164checkmark; U+02713
1165Chi; U+003A7
1166chi; U+003C7
1167cir; U+025CB
1168circ; U+002C6
1169circeq; U+02257
1170circlearrowleft; U+021BA
1171circlearrowright; U+021BB
1172circledast; U+0229B
1173circledcirc; U+0229A
1174circleddash; U+0229D
1175CircleDot; U+02299
1176circledR; U+000AE
1177circledS; U+024C8
1178CircleMinus; U+02296
1179CirclePlus; U+02295
1180CircleTimes; U+02297
1181cirE; U+029C3
1182cire; U+02257
1183cirfnint; U+02A10
1184cirmid; U+02AEF
1185cirscir; U+029C2
1186ClockwiseContourIntegral; U+02232
1187CloseCurlyDoubleQuote; U+0201D
1188CloseCurlyQuote; U+02019
1189clubs; U+02663
1190clubsuit; U+02663
1191Colon; U+02237
1192colon; U+0003A
1193Colone; U+02A74
1194colone; U+02254
1195coloneq; U+02254
1196comma; U+0002C
1197commat; U+00040
1198comp; U+02201
1199compfn; U+02218
1200complement; U+02201
1201complexes; U+02102
1202cong; U+02245
1203congdot; U+02A6D
1204Congruent; U+02261
1205Conint; U+0222F
1206conint; U+0222E
1207ContourIntegral; U+0222E
1208Copf; U+02102
1209copf; U+1D554
1210coprod; U+02210
1211Coproduct; U+02210
1212COPY; U+000A9
1213COPY U+000A9
1214copy; U+000A9
1215copy U+000A9
1216copysr; U+02117
1217CounterClockwiseContourIntegral; U+02233
1218crarr; U+021B5
1219Cross; U+02A2F
1220cross; U+02717
1221Cscr; U+1D49E
1222cscr; U+1D4B8
1223csub; U+02ACF
1224csube; U+02AD1
1225csup; U+02AD0
1226csupe; U+02AD2
1227ctdot; U+022EF
1228cudarrl; U+02938
1229cudarrr; U+02935
1230cuepr; U+022DE
1231cuesc; U+022DF
1232cularr; U+021B6
1233cularrp; U+0293D
1234Cup; U+022D3
1235cup; U+0222A
1236cupbrcap; U+02A48
1237CupCap; U+0224D
1238cupcap; U+02A46
1239cupcup; U+02A4A
1240cupdot; U+0228D
1241cupor; U+02A45
1242cups; U+0222A U+0FE00
1243curarr; U+021B7
1244curarrm; U+0293C
1245curlyeqprec; U+022DE
1246curlyeqsucc; U+022DF
1247curlyvee; U+022CE
1248curlywedge; U+022CF
1249curren; U+000A4
1250curren U+000A4
1251curvearrowleft; U+021B6
1252curvearrowright; U+021B7
1253cuvee; U+022CE
1254cuwed; U+022CF
1255cwconint; U+02232
1256cwint; U+02231
1257cylcty; U+0232D
1258Dagger; U+02021
1259dagger; U+02020
1260daleth; U+02138
1261Darr; U+021A1
1262dArr; U+021D3
1263darr; U+02193
1264dash; U+02010
1265Dashv; U+02AE4
1266dashv; U+022A3
1267dbkarow; U+0290F
1268dblac; U+002DD
1269Dcaron; U+0010E
1270dcaron; U+0010F
1271Dcy; U+00414
1272dcy; U+00434
1273DD; U+02145
1274dd; U+02146
1275ddagger; U+02021
1276ddarr; U+021CA
1277DDotrahd; U+02911
1278ddotseq; U+02A77
1279deg; U+000B0
1280deg U+000B0
1281Del; U+02207
1282Delta; U+00394
1283delta; U+003B4
1284demptyv; U+029B1
1285dfisht; U+0297F
1286Dfr; U+1D507
1287dfr; U+1D521
1288dHar; U+02965
1289dharl; U+021C3
1290dharr; U+021C2
1291DiacriticalAcute; U+000B4
1292DiacriticalDot; U+002D9
1293DiacriticalDoubleAcute; U+002DD
1294DiacriticalGrave; U+00060
1295DiacriticalTilde; U+002DC
1296diam; U+022C4
1297Diamond; U+022C4
1298diamond; U+022C4
1299diamondsuit; U+02666
1300diams; U+02666
1301die; U+000A8
1302DifferentialD; U+02146
1303digamma; U+003DD
1304disin; U+022F2
1305div; U+000F7
1306divide; U+000F7
1307divide U+000F7
1308divideontimes; U+022C7
1309divonx; U+022C7
1310DJcy; U+00402
1311djcy; U+00452
1312dlcorn; U+0231E
1313dlcrop; U+0230D
1314dollar; U+00024
1315Dopf; U+1D53B
1316dopf; U+1D555
1317Dot; U+000A8
1318dot; U+002D9
1319DotDot; U+020DC
1320doteq; U+02250
1321doteqdot; U+02251
1322DotEqual; U+02250
1323dotminus; U+02238
1324dotplus; U+02214
1325dotsquare; U+022A1
1326doublebarwedge; U+02306
1327DoubleContourIntegral; U+0222F
1328DoubleDot; U+000A8
1329DoubleDownArrow; U+021D3
1330DoubleLeftArrow; U+021D0
1331DoubleLeftRightArrow; U+021D4
1332DoubleLeftTee; U+02AE4
1333DoubleLongLeftArrow; U+027F8
1334DoubleLongLeftRightArrow; U+027FA
1335DoubleLongRightArrow; U+027F9
1336DoubleRightArrow; U+021D2
1337DoubleRightTee; U+022A8
1338DoubleUpArrow; U+021D1
1339DoubleUpDownArrow; U+021D5
1340DoubleVerticalBar; U+02225
1341DownArrow; U+02193
1342Downarrow; U+021D3
1343downarrow; U+02193
1344DownArrowBar; U+02913
1345DownArrowUpArrow; U+021F5
1346DownBreve; U+00311
1347downdownarrows; U+021CA
1348downharpoonleft; U+021C3
1349downharpoonright; U+021C2
1350DownLeftRightVector; U+02950
1351DownLeftTeeVector; U+0295E
1352DownLeftVector; U+021BD
1353DownLeftVectorBar; U+02956
1354DownRightTeeVector; U+0295F
1355DownRightVector; U+021C1
1356DownRightVectorBar; U+02957
1357DownTee; U+022A4
1358DownTeeArrow; U+021A7
1359drbkarow; U+02910
1360drcorn; U+0231F
1361drcrop; U+0230C
1362Dscr; U+1D49F
1363dscr; U+1D4B9
1364DScy; U+00405
1365dscy; U+00455
1366dsol; U+029F6
1367Dstrok; U+00110
1368dstrok; U+00111
1369dtdot; U+022F1
1370dtri; U+025BF
1371dtrif; U+025BE
1372duarr; U+021F5
1373duhar; U+0296F
1374dwangle; U+029A6
1375DZcy; U+0040F
1376dzcy; U+0045F
1377dzigrarr; U+027FF
1378Eacute; U+000C9
1379Eacute U+000C9
1380eacute; U+000E9
1381eacute U+000E9
1382easter; U+02A6E
1383Ecaron; U+0011A
1384ecaron; U+0011B
1385ecir; U+02256
1386Ecirc; U+000CA
1387Ecirc U+000CA
1388ecirc; U+000EA
1389ecirc U+000EA
1390ecolon; U+02255
1391Ecy; U+0042D
1392ecy; U+0044D
1393eDDot; U+02A77
1394Edot; U+00116
1395eDot; U+02251
1396edot; U+00117
1397ee; U+02147
1398efDot; U+02252
1399Efr; U+1D508
1400efr; U+1D522
1401eg; U+02A9A
1402Egrave; U+000C8
1403Egrave U+000C8
1404egrave; U+000E8
1405egrave U+000E8
1406egs; U+02A96
1407egsdot; U+02A98
1408el; U+02A99
1409Element; U+02208
1410elinters; U+023E7
1411ell; U+02113
1412els; U+02A95
1413elsdot; U+02A97
1414Emacr; U+00112
1415emacr; U+00113
1416empty; U+02205
1417emptyset; U+02205
1418EmptySmallSquare; U+025FB
1419emptyv; U+02205
1420EmptyVerySmallSquare; U+025AB
1421emsp; U+02003
1422emsp13; U+02004
1423emsp14; U+02005
1424ENG; U+0014A
1425eng; U+0014B
1426ensp; U+02002
1427Eogon; U+00118
1428eogon; U+00119
1429Eopf; U+1D53C
1430eopf; U+1D556
1431epar; U+022D5
1432eparsl; U+029E3
1433eplus; U+02A71
1434epsi; U+003B5
1435Epsilon; U+00395
1436epsilon; U+003B5
1437epsiv; U+003F5
1438eqcirc; U+02256
1439eqcolon; U+02255
1440eqsim; U+02242
1441eqslantgtr; U+02A96
1442eqslantless; U+02A95
1443Equal; U+02A75
1444equals; U+0003D
1445EqualTilde; U+02242
1446equest; U+0225F
1447Equilibrium; U+021CC
1448equiv; U+02261
1449equivDD; U+02A78
1450eqvparsl; U+029E5
1451erarr; U+02971
1452erDot; U+02253
1453Escr; U+02130
1454escr; U+0212F
1455esdot; U+02250
1456Esim; U+02A73
1457esim; U+02242
1458Eta; U+00397
1459eta; U+003B7
1460ETH; U+000D0
1461ETH U+000D0
1462eth; U+000F0
1463eth U+000F0
1464Euml; U+000CB
1465Euml U+000CB
1466euml; U+000EB
1467euml U+000EB
1468euro; U+020AC
1469excl; U+00021
1470exist; U+02203
1471Exists; U+02203
1472expectation; U+02130
1473ExponentialE; U+02147
1474exponentiale; U+02147
1475fallingdotseq; U+02252
1476Fcy; U+00424
1477fcy; U+00444
1478female; U+02640
1479ffilig; U+0FB03
1480fflig; U+0FB00
1481ffllig; U+0FB04
1482Ffr; U+1D509
1483ffr; U+1D523
1484filig; U+0FB01
1485FilledSmallSquare; U+025FC
1486FilledVerySmallSquare; U+025AA
1487fjlig; U+00066 U+0006A
1488flat; U+0266D
1489fllig; U+0FB02
1490fltns; U+025B1
1491fnof; U+00192
1492Fopf; U+1D53D
1493fopf; U+1D557
1494ForAll; U+02200
1495forall; U+02200
1496fork; U+022D4
1497forkv; U+02AD9
1498Fouriertrf; U+02131
1499fpartint; U+02A0D
1500frac12; U+000BD
1501frac12 U+000BD
1502frac13; U+02153
1503frac14; U+000BC
1504frac14 U+000BC
1505frac15; U+02155
1506frac16; U+02159
1507frac18; U+0215B
1508frac23; U+02154
1509frac25; U+02156
1510frac34; U+000BE
1511frac34 U+000BE
1512frac35; U+02157
1513frac38; U+0215C
1514frac45; U+02158
1515frac56; U+0215A
1516frac58; U+0215D
1517frac78; U+0215E
1518frasl; U+02044
1519frown; U+02322
1520Fscr; U+02131
1521fscr; U+1D4BB
1522gacute; U+001F5
1523Gamma; U+00393
1524gamma; U+003B3
1525Gammad; U+003DC
1526gammad; U+003DD
1527gap; U+02A86
1528Gbreve; U+0011E
1529gbreve; U+0011F
1530Gcedil; U+00122
1531Gcirc; U+0011C
1532gcirc; U+0011D
1533Gcy; U+00413
1534gcy; U+00433
1535Gdot; U+00120
1536gdot; U+00121
1537gE; U+02267
1538ge; U+02265
1539gEl; U+02A8C
1540gel; U+022DB
1541geq; U+02265
1542geqq; U+02267
1543geqslant; U+02A7E
1544ges; U+02A7E
1545gescc; U+02AA9
1546gesdot; U+02A80
1547gesdoto; U+02A82
1548gesdotol; U+02A84
1549gesl; U+022DB U+0FE00
1550gesles; U+02A94
1551Gfr; U+1D50A
1552gfr; U+1D524
1553Gg; U+022D9
1554gg; U+0226B
1555ggg; U+022D9
1556gimel; U+02137
1557GJcy; U+00403
1558gjcy; U+00453
1559gl; U+02277
1560gla; U+02AA5
1561glE; U+02A92
1562glj; U+02AA4
1563gnap; U+02A8A
1564gnapprox; U+02A8A
1565gnE; U+02269
1566gne; U+02A88
1567gneq; U+02A88
1568gneqq; U+02269
1569gnsim; U+022E7
1570Gopf; U+1D53E
1571gopf; U+1D558
1572grave; U+00060
1573GreaterEqual; U+02265
1574GreaterEqualLess; U+022DB
1575GreaterFullEqual; U+02267
1576GreaterGreater; U+02AA2
1577GreaterLess; U+02277
1578GreaterSlantEqual; U+02A7E
1579GreaterTilde; U+02273
1580Gscr; U+1D4A2
1581gscr; U+0210A
1582gsim; U+02273
1583gsime; U+02A8E
1584gsiml; U+02A90
1585GT; U+0003E
1586GT U+0003E
1587Gt; U+0226B
1588gt; U+0003E
1589gt U+0003E
1590gtcc; U+02AA7
1591gtcir; U+02A7A
1592gtdot; U+022D7
1593gtlPar; U+02995
1594gtquest; U+02A7C
1595gtrapprox; U+02A86
1596gtrarr; U+02978
1597gtrdot; U+022D7
1598gtreqless; U+022DB
1599gtreqqless; U+02A8C
1600gtrless; U+02277
1601gtrsim; U+02273
1602gvertneqq; U+02269 U+0FE00
1603gvnE; U+02269 U+0FE00
1604Hacek; U+002C7
1605hairsp; U+0200A
1606half; U+000BD
1607hamilt; U+0210B
1608HARDcy; U+0042A
1609hardcy; U+0044A
1610hArr; U+021D4
1611harr; U+02194
1612harrcir; U+02948
1613harrw; U+021AD
1614Hat; U+0005E
1615hbar; U+0210F
1616Hcirc; U+00124
1617hcirc; U+00125
1618hearts; U+02665
1619heartsuit; U+02665
1620hellip; U+02026
1621hercon; U+022B9
1622Hfr; U+0210C
1623hfr; U+1D525
1624HilbertSpace; U+0210B
1625hksearow; U+02925
1626hkswarow; U+02926
1627hoarr; U+021FF
1628homtht; U+0223B
1629hookleftarrow; U+021A9
1630hookrightarrow; U+021AA
1631Hopf; U+0210D
1632hopf; U+1D559
1633horbar; U+02015
1634HorizontalLine; U+02500
1635Hscr; U+0210B
1636hscr; U+1D4BD
1637hslash; U+0210F
1638Hstrok; U+00126
1639hstrok; U+00127
1640HumpDownHump; U+0224E
1641HumpEqual; U+0224F
1642hybull; U+02043
1643hyphen; U+02010
1644Iacute; U+000CD
1645Iacute U+000CD
1646iacute; U+000ED
1647iacute U+000ED
1648ic; U+02063
1649Icirc; U+000CE
1650Icirc U+000CE
1651icirc; U+000EE
1652icirc U+000EE
1653Icy; U+00418
1654icy; U+00438
1655Idot; U+00130
1656IEcy; U+00415
1657iecy; U+00435
1658iexcl; U+000A1
1659iexcl U+000A1
1660iff; U+021D4
1661Ifr; U+02111
1662ifr; U+1D526
1663Igrave; U+000CC
1664Igrave U+000CC
1665igrave; U+000EC
1666igrave U+000EC
1667ii; U+02148
1668iiiint; U+02A0C
1669iiint; U+0222D
1670iinfin; U+029DC
1671iiota; U+02129
1672IJlig; U+00132
1673ijlig; U+00133
1674Im; U+02111
1675Imacr; U+0012A
1676imacr; U+0012B
1677image; U+02111
1678ImaginaryI; U+02148
1679imagline; U+02110
1680imagpart; U+02111
1681imath; U+00131
1682imof; U+022B7
1683imped; U+001B5
1684Implies; U+021D2
1685in; U+02208
1686incare; U+02105
1687infin; U+0221E
1688infintie; U+029DD
1689inodot; U+00131
1690Int; U+0222C
1691int; U+0222B
1692intcal; U+022BA
1693integers; U+02124
1694Integral; U+0222B
1695intercal; U+022BA
1696Intersection; U+022C2
1697intlarhk; U+02A17
1698intprod; U+02A3C
1699InvisibleComma; U+02063
1700InvisibleTimes; U+02062
1701IOcy; U+00401
1702iocy; U+00451
1703Iogon; U+0012E
1704iogon; U+0012F
1705Iopf; U+1D540
1706iopf; U+1D55A
1707Iota; U+00399
1708iota; U+003B9
1709iprod; U+02A3C
1710iquest; U+000BF
1711iquest U+000BF
1712Iscr; U+02110
1713iscr; U+1D4BE
1714isin; U+02208
1715isindot; U+022F5
1716isinE; U+022F9
1717isins; U+022F4
1718isinsv; U+022F3
1719isinv; U+02208
1720it; U+02062
1721Itilde; U+00128
1722itilde; U+00129
1723Iukcy; U+00406
1724iukcy; U+00456
1725Iuml; U+000CF
1726Iuml U+000CF
1727iuml; U+000EF
1728iuml U+000EF
1729Jcirc; U+00134
1730jcirc; U+00135
1731Jcy; U+00419
1732jcy; U+00439
1733Jfr; U+1D50D
1734jfr; U+1D527
1735jmath; U+00237
1736Jopf; U+1D541
1737jopf; U+1D55B
1738Jscr; U+1D4A5
1739jscr; U+1D4BF
1740Jsercy; U+00408
1741jsercy; U+00458
1742Jukcy; U+00404
1743jukcy; U+00454
1744Kappa; U+0039A
1745kappa; U+003BA
1746kappav; U+003F0
1747Kcedil; U+00136
1748kcedil; U+00137
1749Kcy; U+0041A
1750kcy; U+0043A
1751Kfr; U+1D50E
1752kfr; U+1D528
1753kgreen; U+00138
1754KHcy; U+00425
1755khcy; U+00445
1756KJcy; U+0040C
1757kjcy; U+0045C
1758Kopf; U+1D542
1759kopf; U+1D55C
1760Kscr; U+1D4A6
1761kscr; U+1D4C0
1762lAarr; U+021DA
1763Lacute; U+00139
1764lacute; U+0013A
1765laemptyv; U+029B4
1766lagran; U+02112
1767Lambda; U+0039B
1768lambda; U+003BB
1769Lang; U+027EA
1770lang; U+027E8
1771langd; U+02991
1772langle; U+027E8
1773lap; U+02A85
1774Laplacetrf; U+02112
1775laquo; U+000AB
1776laquo U+000AB
1777Larr; U+0219E
1778lArr; U+021D0
1779larr; U+02190
1780larrb; U+021E4
1781larrbfs; U+0291F
1782larrfs; U+0291D
1783larrhk; U+021A9
1784larrlp; U+021AB
1785larrpl; U+02939
1786larrsim; U+02973
1787larrtl; U+021A2
1788lat; U+02AAB
1789lAtail; U+0291B
1790latail; U+02919
1791late; U+02AAD
1792lates; U+02AAD U+0FE00
1793lBarr; U+0290E
1794lbarr; U+0290C
1795lbbrk; U+02772
1796lbrace; U+0007B
1797lbrack; U+0005B
1798lbrke; U+0298B
1799lbrksld; U+0298F
1800lbrkslu; U+0298D
1801Lcaron; U+0013D
1802lcaron; U+0013E
1803Lcedil; U+0013B
1804lcedil; U+0013C
1805lceil; U+02308
1806lcub; U+0007B
1807Lcy; U+0041B
1808lcy; U+0043B
1809ldca; U+02936
1810ldquo; U+0201C
1811ldquor; U+0201E
1812ldrdhar; U+02967
1813ldrushar; U+0294B
1814ldsh; U+021B2
1815lE; U+02266
1816le; U+02264
1817LeftAngleBracket; U+027E8
1818LeftArrow; U+02190
1819Leftarrow; U+021D0
1820leftarrow; U+02190
1821LeftArrowBar; U+021E4
1822LeftArrowRightArrow; U+021C6
1823leftarrowtail; U+021A2
1824LeftCeiling; U+02308
1825LeftDoubleBracket; U+027E6
1826LeftDownTeeVector; U+02961
1827LeftDownVector; U+021C3
1828LeftDownVectorBar; U+02959
1829LeftFloor; U+0230A
1830leftharpoondown; U+021BD
1831leftharpoonup; U+021BC
1832leftleftarrows; U+021C7
1833LeftRightArrow; U+02194
1834Leftrightarrow; U+021D4
1835leftrightarrow; U+02194
1836leftrightarrows; U+021C6
1837leftrightharpoons; U+021CB
1838leftrightsquigarrow; U+021AD
1839LeftRightVector; U+0294E
1840LeftTee; U+022A3
1841LeftTeeArrow; U+021A4
1842LeftTeeVector; U+0295A
1843leftthreetimes; U+022CB
1844LeftTriangle; U+022B2
1845LeftTriangleBar; U+029CF
1846LeftTriangleEqual; U+022B4
1847LeftUpDownVector; U+02951
1848LeftUpTeeVector; U+02960
1849LeftUpVector; U+021BF
1850LeftUpVectorBar; U+02958
1851LeftVector; U+021BC
1852LeftVectorBar; U+02952
1853lEg; U+02A8B
1854leg; U+022DA
1855leq; U+02264
1856leqq; U+02266
1857leqslant; U+02A7D
1858les; U+02A7D
1859lescc; U+02AA8
1860lesdot; U+02A7F
1861lesdoto; U+02A81
1862lesdotor; U+02A83
1863lesg; U+022DA U+0FE00
1864lesges; U+02A93
1865lessapprox; U+02A85
1866lessdot; U+022D6
1867lesseqgtr; U+022DA
1868lesseqqgtr; U+02A8B
1869LessEqualGreater; U+022DA
1870LessFullEqual; U+02266
1871LessGreater; U+02276
1872lessgtr; U+02276
1873LessLess; U+02AA1
1874lesssim; U+02272
1875LessSlantEqual; U+02A7D
1876LessTilde; U+02272
1877lfisht; U+0297C
1878lfloor; U+0230A
1879Lfr; U+1D50F
1880lfr; U+1D529
1881lg; U+02276
1882lgE; U+02A91
1883lHar; U+02962
1884lhard; U+021BD
1885lharu; U+021BC
1886lharul; U+0296A
1887lhblk; U+02584
1888LJcy; U+00409
1889ljcy; U+00459
1890Ll; U+022D8
1891ll; U+0226A
1892llarr; U+021C7
1893llcorner; U+0231E
1894Lleftarrow; U+021DA
1895llhard; U+0296B
1896lltri; U+025FA
1897Lmidot; U+0013F
1898lmidot; U+00140
1899lmoust; U+023B0
1900lmoustache; U+023B0
1901lnap; U+02A89
1902lnapprox; U+02A89
1903lnE; U+02268
1904lne; U+02A87
1905lneq; U+02A87
1906lneqq; U+02268
1907lnsim; U+022E6
1908loang; U+027EC
1909loarr; U+021FD
1910lobrk; U+027E6
1911LongLeftArrow; U+027F5
1912Longleftarrow; U+027F8
1913longleftarrow; U+027F5
1914LongLeftRightArrow; U+027F7
1915Longleftrightarrow; U+027FA
1916longleftrightarrow; U+027F7
1917longmapsto; U+027FC
1918LongRightArrow; U+027F6
1919Longrightarrow; U+027F9
1920longrightarrow; U+027F6
1921looparrowleft; U+021AB
1922looparrowright; U+021AC
1923lopar; U+02985
1924Lopf; U+1D543
1925lopf; U+1D55D
1926loplus; U+02A2D
1927lotimes; U+02A34
1928lowast; U+02217
1929lowbar; U+0005F
1930LowerLeftArrow; U+02199
1931LowerRightArrow; U+02198
1932loz; U+025CA
1933lozenge; U+025CA
1934lozf; U+029EB
1935lpar; U+00028
1936lparlt; U+02993
1937lrarr; U+021C6
1938lrcorner; U+0231F
1939lrhar; U+021CB
1940lrhard; U+0296D
1941lrm; U+0200E
1942lrtri; U+022BF
1943lsaquo; U+02039
1944Lscr; U+02112
1945lscr; U+1D4C1
1946Lsh; U+021B0
1947lsh; U+021B0
1948lsim; U+02272
1949lsime; U+02A8D
1950lsimg; U+02A8F
1951lsqb; U+0005B
1952lsquo; U+02018
1953lsquor; U+0201A
1954Lstrok; U+00141
1955lstrok; U+00142
1956LT; U+0003C
1957LT U+0003C
1958Lt; U+0226A
1959lt; U+0003C
1960lt U+0003C
1961ltcc; U+02AA6
1962ltcir; U+02A79
1963ltdot; U+022D6
1964lthree; U+022CB
1965ltimes; U+022C9
1966ltlarr; U+02976
1967ltquest; U+02A7B
1968ltri; U+025C3
1969ltrie; U+022B4
1970ltrif; U+025C2
1971ltrPar; U+02996
1972lurdshar; U+0294A
1973luruhar; U+02966
1974lvertneqq; U+02268 U+0FE00
1975lvnE; U+02268 U+0FE00
1976macr; U+000AF
1977macr U+000AF
1978male; U+02642
1979malt; U+02720
1980maltese; U+02720
1981Map; U+02905
1982map; U+021A6
1983mapsto; U+021A6
1984mapstodown; U+021A7
1985mapstoleft; U+021A4
1986mapstoup; U+021A5
1987marker; U+025AE
1988mcomma; U+02A29
1989Mcy; U+0041C
1990mcy; U+0043C
1991mdash; U+02014
1992mDDot; U+0223A
1993measuredangle; U+02221
1994MediumSpace; U+0205F
1995Mellintrf; U+02133
1996Mfr; U+1D510
1997mfr; U+1D52A
1998mho; U+02127
1999micro; U+000B5
2000micro U+000B5
2001mid; U+02223
2002midast; U+0002A
2003midcir; U+02AF0
2004middot; U+000B7
2005middot U+000B7
2006minus; U+02212
2007minusb; U+0229F
2008minusd; U+02238
2009minusdu; U+02A2A
2010MinusPlus; U+02213
2011mlcp; U+02ADB
2012mldr; U+02026
2013mnplus; U+02213
2014models; U+022A7
2015Mopf; U+1D544
2016mopf; U+1D55E
2017mp; U+02213
2018Mscr; U+02133
2019mscr; U+1D4C2
2020mstpos; U+0223E
2021Mu; U+0039C
2022mu; U+003BC
2023multimap; U+022B8
2024mumap; U+022B8
2025nabla; U+02207
2026Nacute; U+00143
2027nacute; U+00144
2028nang; U+02220 U+020D2
2029nap; U+02249
2030napE; U+02A70 U+00338
2031napid; U+0224B U+00338
2032napos; U+00149
2033napprox; U+02249
2034natur; U+0266E
2035natural; U+0266E
2036naturals; U+02115
2037nbsp; U+000A0
2038nbsp U+000A0
2039nbump; U+0224E U+00338
2040nbumpe; U+0224F U+00338
2041ncap; U+02A43
2042Ncaron; U+00147
2043ncaron; U+00148
2044Ncedil; U+00145
2045ncedil; U+00146
2046ncong; U+02247
2047ncongdot; U+02A6D U+00338
2048ncup; U+02A42
2049Ncy; U+0041D
2050ncy; U+0043D
2051ndash; U+02013
2052ne; U+02260
2053nearhk; U+02924
2054neArr; U+021D7
2055nearr; U+02197
2056nearrow; U+02197
2057nedot; U+02250 U+00338
2058NegativeMediumSpace; U+0200B
2059NegativeThickSpace; U+0200B
2060NegativeThinSpace; U+0200B
2061NegativeVeryThinSpace; U+0200B
2062nequiv; U+02262
2063nesear; U+02928
2064nesim; U+02242 U+00338
2065NestedGreaterGreater; U+0226B
2066NestedLessLess; U+0226A
2067NewLine; U+0000A
2068nexist; U+02204
2069nexists; U+02204
2070Nfr; U+1D511
2071nfr; U+1D52B
2072ngE; U+02267 U+00338
2073nge; U+02271
2074ngeq; U+02271
2075ngeqq; U+02267 U+00338
2076ngeqslant; U+02A7E U+00338
2077nges; U+02A7E U+00338
2078nGg; U+022D9 U+00338
2079ngsim; U+02275
2080nGt; U+0226B U+020D2
2081ngt; U+0226F
2082ngtr; U+0226F
2083nGtv; U+0226B U+00338
2084nhArr; U+021CE
2085nharr; U+021AE
2086nhpar; U+02AF2
2087ni; U+0220B
2088nis; U+022FC
2089nisd; U+022FA
2090niv; U+0220B
2091NJcy; U+0040A
2092njcy; U+0045A
2093nlArr; U+021CD
2094nlarr; U+0219A
2095nldr; U+02025
2096nlE; U+02266 U+00338
2097nle; U+02270
2098nLeftarrow; U+021CD
2099nleftarrow; U+0219A
2100nLeftrightarrow; U+021CE
2101nleftrightarrow; U+021AE
2102nleq; U+02270
2103nleqq; U+02266 U+00338
2104nleqslant; U+02A7D U+00338
2105nles; U+02A7D U+00338
2106nless; U+0226E
2107nLl; U+022D8 U+00338
2108nlsim; U+02274
2109nLt; U+0226A U+020D2
2110nlt; U+0226E
2111nltri; U+022EA
2112nltrie; U+022EC
2113nLtv; U+0226A U+00338
2114nmid; U+02224
2115NoBreak; U+02060
2116NonBreakingSpace; U+000A0
2117Nopf; U+02115
2118nopf; U+1D55F
2119Not; U+02AEC
2120not; U+000AC
2121not U+000AC
2122NotCongruent; U+02262
2123NotCupCap; U+0226D
2124NotDoubleVerticalBar; U+02226
2125NotElement; U+02209
2126NotEqual; U+02260
2127NotEqualTilde; U+02242 U+00338
2128NotExists; U+02204
2129NotGreater; U+0226F
2130NotGreaterEqual; U+02271
2131NotGreaterFullEqual; U+02267 U+00338
2132NotGreaterGreater; U+0226B U+00338
2133NotGreaterLess; U+02279
2134NotGreaterSlantEqual; U+02A7E U+00338
2135NotGreaterTilde; U+02275
2136NotHumpDownHump; U+0224E U+00338
2137NotHumpEqual; U+0224F U+00338
2138notin; U+02209
2139notindot; U+022F5 U+00338
2140notinE; U+022F9 U+00338
2141notinva; U+02209
2142notinvb; U+022F7
2143notinvc; U+022F6
2144NotLeftTriangle; U+022EA
2145NotLeftTriangleBar; U+029CF U+00338
2146NotLeftTriangleEqual; U+022EC
2147NotLess; U+0226E
2148NotLessEqual; U+02270
2149NotLessGreater; U+02278
2150NotLessLess; U+0226A U+00338
2151NotLessSlantEqual; U+02A7D U+00338
2152NotLessTilde; U+02274
2153NotNestedGreaterGreater; U+02AA2 U+00338
2154NotNestedLessLess; U+02AA1 U+00338
2155notni; U+0220C
2156notniva; U+0220C
2157notnivb; U+022FE
2158notnivc; U+022FD
2159NotPrecedes; U+02280
2160NotPrecedesEqual; U+02AAF U+00338
2161NotPrecedesSlantEqual; U+022E0
2162NotReverseElement; U+0220C
2163NotRightTriangle; U+022EB
2164NotRightTriangleBar; U+029D0 U+00338
2165NotRightTriangleEqual; U+022ED
2166NotSquareSubset; U+0228F U+00338
2167NotSquareSubsetEqual; U+022E2
2168NotSquareSuperset; U+02290 U+00338
2169NotSquareSupersetEqual; U+022E3
2170NotSubset; U+02282 U+020D2
2171NotSubsetEqual; U+02288
2172NotSucceeds; U+02281
2173NotSucceedsEqual; U+02AB0 U+00338
2174NotSucceedsSlantEqual; U+022E1
2175NotSucceedsTilde; U+0227F U+00338
2176NotSuperset; U+02283 U+020D2
2177NotSupersetEqual; U+02289
2178NotTilde; U+02241
2179NotTildeEqual; U+02244
2180NotTildeFullEqual; U+02247
2181NotTildeTilde; U+02249
2182NotVerticalBar; U+02224
2183npar; U+02226
2184nparallel; U+02226
2185nparsl; U+02AFD U+020E5
2186npart; U+02202 U+00338
2187npolint; U+02A14
2188npr; U+02280
2189nprcue; U+022E0
2190npre; U+02AAF U+00338
2191nprec; U+02280
2192npreceq; U+02AAF U+00338
2193nrArr; U+021CF
2194nrarr; U+0219B
2195nrarrc; U+02933 U+00338
2196nrarrw; U+0219D U+00338
2197nRightarrow; U+021CF
2198nrightarrow; U+0219B
2199nrtri; U+022EB
2200nrtrie; U+022ED
2201nsc; U+02281
2202nsccue; U+022E1
2203nsce; U+02AB0 U+00338
2204Nscr; U+1D4A9
2205nscr; U+1D4C3
2206nshortmid; U+02224
2207nshortparallel; U+02226
2208nsim; U+02241
2209nsime; U+02244
2210nsimeq; U+02244
2211nsmid; U+02224
2212nspar; U+02226
2213nsqsube; U+022E2
2214nsqsupe; U+022E3
2215nsub; U+02284
2216nsubE; U+02AC5 U+00338
2217nsube; U+02288
2218nsubset; U+02282 U+020D2
2219nsubseteq; U+02288
2220nsubseteqq; U+02AC5 U+00338
2221nsucc; U+02281
2222nsucceq; U+02AB0 U+00338
2223nsup; U+02285
2224nsupE; U+02AC6 U+00338
2225nsupe; U+02289
2226nsupset; U+02283 U+020D2
2227nsupseteq; U+02289
2228nsupseteqq; U+02AC6 U+00338
2229ntgl; U+02279
2230Ntilde; U+000D1
2231Ntilde U+000D1
2232ntilde; U+000F1
2233ntilde U+000F1
2234ntlg; U+02278
2235ntriangleleft; U+022EA
2236ntrianglelefteq; U+022EC
2237ntriangleright; U+022EB
2238ntrianglerighteq; U+022ED
2239Nu; U+0039D
2240nu; U+003BD
2241num; U+00023
2242numero; U+02116
2243numsp; U+02007
2244nvap; U+0224D U+020D2
2245nVDash; U+022AF
2246nVdash; U+022AE
2247nvDash; U+022AD
2248nvdash; U+022AC
2249nvge; U+02265 U+020D2
2250nvgt; U+0003E U+020D2
2251nvHarr; U+02904
2252nvinfin; U+029DE
2253nvlArr; U+02902
2254nvle; U+02264 U+020D2
2255nvlt; U+0003C U+020D2
2256nvltrie; U+022B4 U+020D2
2257nvrArr; U+02903
2258nvrtrie; U+022B5 U+020D2
2259nvsim; U+0223C U+020D2
2260nwarhk; U+02923
2261nwArr; U+021D6
2262nwarr; U+02196
2263nwarrow; U+02196
2264nwnear; U+02927
2265Oacute; U+000D3
2266Oacute U+000D3
2267oacute; U+000F3
2268oacute U+000F3
2269oast; U+0229B
2270ocir; U+0229A
2271Ocirc; U+000D4
2272Ocirc U+000D4
2273ocirc; U+000F4
2274ocirc U+000F4
2275Ocy; U+0041E
2276ocy; U+0043E
2277odash; U+0229D
2278Odblac; U+00150
2279odblac; U+00151
2280odiv; U+02A38
2281odot; U+02299
2282odsold; U+029BC
2283OElig; U+00152
2284oelig; U+00153
2285ofcir; U+029BF
2286Ofr; U+1D512
2287ofr; U+1D52C
2288ogon; U+002DB
2289Ograve; U+000D2
2290Ograve U+000D2
2291ograve; U+000F2
2292ograve U+000F2
2293ogt; U+029C1
2294ohbar; U+029B5
2295ohm; U+003A9
2296oint; U+0222E
2297olarr; U+021BA
2298olcir; U+029BE
2299olcross; U+029BB
2300oline; U+0203E
2301olt; U+029C0
2302Omacr; U+0014C
2303omacr; U+0014D
2304Omega; U+003A9
2305omega; U+003C9
2306Omicron; U+0039F
2307omicron; U+003BF
2308omid; U+029B6
2309ominus; U+02296
2310Oopf; U+1D546
2311oopf; U+1D560
2312opar; U+029B7
2313OpenCurlyDoubleQuote; U+0201C
2314OpenCurlyQuote; U+02018
2315operp; U+029B9
2316oplus; U+02295
2317Or; U+02A54
2318or; U+02228
2319orarr; U+021BB
2320ord; U+02A5D
2321order; U+02134
2322orderof; U+02134
2323ordf; U+000AA
2324ordf U+000AA
2325ordm; U+000BA
2326ordm U+000BA
2327origof; U+022B6
2328oror; U+02A56
2329orslope; U+02A57
2330orv; U+02A5B
2331oS; U+024C8
2332Oscr; U+1D4AA
2333oscr; U+02134
2334Oslash; U+000D8
2335Oslash U+000D8
2336oslash; U+000F8
2337oslash U+000F8
2338osol; U+02298
2339Otilde; U+000D5
2340Otilde U+000D5
2341otilde; U+000F5
2342otilde U+000F5
2343Otimes; U+02A37
2344otimes; U+02297
2345otimesas; U+02A36
2346Ouml; U+000D6
2347Ouml U+000D6
2348ouml; U+000F6
2349ouml U+000F6
2350ovbar; U+0233D
2351OverBar; U+0203E
2352OverBrace; U+023DE
2353OverBracket; U+023B4
2354OverParenthesis; U+023DC
2355par; U+02225
2356para; U+000B6
2357para U+000B6
2358parallel; U+02225
2359parsim; U+02AF3
2360parsl; U+02AFD
2361part; U+02202
2362PartialD; U+02202
2363Pcy; U+0041F
2364pcy; U+0043F
2365percnt; U+00025
2366period; U+0002E
2367permil; U+02030
2368perp; U+022A5
2369pertenk; U+02031
2370Pfr; U+1D513
2371pfr; U+1D52D
2372Phi; U+003A6
2373phi; U+003C6
2374phiv; U+003D5
2375phmmat; U+02133
2376phone; U+0260E
2377Pi; U+003A0
2378pi; U+003C0
2379pitchfork; U+022D4
2380piv; U+003D6
2381planck; U+0210F
2382planckh; U+0210E
2383plankv; U+0210F
2384plus; U+0002B
2385plusacir; U+02A23
2386plusb; U+0229E
2387pluscir; U+02A22
2388plusdo; U+02214
2389plusdu; U+02A25
2390pluse; U+02A72
2391PlusMinus; U+000B1
2392plusmn; U+000B1
2393plusmn U+000B1
2394plussim; U+02A26
2395plustwo; U+02A27
2396pm; U+000B1
2397Poincareplane; U+0210C
2398pointint; U+02A15
2399Popf; U+02119
2400popf; U+1D561
2401pound; U+000A3
2402pound U+000A3
2403Pr; U+02ABB
2404pr; U+0227A
2405prap; U+02AB7
2406prcue; U+0227C
2407prE; U+02AB3
2408pre; U+02AAF
2409prec; U+0227A
2410precapprox; U+02AB7
2411preccurlyeq; U+0227C
2412Precedes; U+0227A
2413PrecedesEqual; U+02AAF
2414PrecedesSlantEqual; U+0227C
2415PrecedesTilde; U+0227E
2416preceq; U+02AAF
2417precnapprox; U+02AB9
2418precneqq; U+02AB5
2419precnsim; U+022E8
2420precsim; U+0227E
2421Prime; U+02033
2422prime; U+02032
2423primes; U+02119
2424prnap; U+02AB9
2425prnE; U+02AB5
2426prnsim; U+022E8
2427prod; U+0220F
2428Product; U+0220F
2429profalar; U+0232E
2430profline; U+02312
2431profsurf; U+02313
2432prop; U+0221D
2433Proportion; U+02237
2434Proportional; U+0221D
2435propto; U+0221D
2436prsim; U+0227E
2437prurel; U+022B0
2438Pscr; U+1D4AB
2439pscr; U+1D4C5
2440Psi; U+003A8
2441psi; U+003C8
2442puncsp; U+02008
2443Qfr; U+1D514
2444qfr; U+1D52E
2445qint; U+02A0C
2446Qopf; U+0211A
2447qopf; U+1D562
2448qprime; U+02057
2449Qscr; U+1D4AC
2450qscr; U+1D4C6
2451quaternions; U+0210D
2452quatint; U+02A16
2453quest; U+0003F
2454questeq; U+0225F
2455QUOT; U+00022
2456QUOT U+00022
2457quot; U+00022
2458quot U+00022
2459rAarr; U+021DB
2460race; U+0223D U+00331
2461Racute; U+00154
2462racute; U+00155
2463radic; U+0221A
2464raemptyv; U+029B3
2465Rang; U+027EB
2466rang; U+027E9
2467rangd; U+02992
2468range; U+029A5
2469rangle; U+027E9
2470raquo; U+000BB
2471raquo U+000BB
2472Rarr; U+021A0
2473rArr; U+021D2
2474rarr; U+02192
2475rarrap; U+02975
2476rarrb; U+021E5
2477rarrbfs; U+02920
2478rarrc; U+02933
2479rarrfs; U+0291E
2480rarrhk; U+021AA
2481rarrlp; U+021AC
2482rarrpl; U+02945
2483rarrsim; U+02974
2484Rarrtl; U+02916
2485rarrtl; U+021A3
2486rarrw; U+0219D
2487rAtail; U+0291C
2488ratail; U+0291A
2489ratio; U+02236
2490rationals; U+0211A
2491RBarr; U+02910
2492rBarr; U+0290F
2493rbarr; U+0290D
2494rbbrk; U+02773
2495rbrace; U+0007D
2496rbrack; U+0005D
2497rbrke; U+0298C
2498rbrksld; U+0298E
2499rbrkslu; U+02990
2500Rcaron; U+00158
2501rcaron; U+00159
2502Rcedil; U+00156
2503rcedil; U+00157
2504rceil; U+02309
2505rcub; U+0007D
2506Rcy; U+00420
2507rcy; U+00440
2508rdca; U+02937
2509rdldhar; U+02969
2510rdquo; U+0201D
2511rdquor; U+0201D
2512rdsh; U+021B3
2513Re; U+0211C
2514real; U+0211C
2515realine; U+0211B
2516realpart; U+0211C
2517reals; U+0211D
2518rect; U+025AD
2519REG; U+000AE
2520REG U+000AE
2521reg; U+000AE
2522reg U+000AE
2523ReverseElement; U+0220B
2524ReverseEquilibrium; U+021CB
2525ReverseUpEquilibrium; U+0296F
2526rfisht; U+0297D
2527rfloor; U+0230B
2528Rfr; U+0211C
2529rfr; U+1D52F
2530rHar; U+02964
2531rhard; U+021C1
2532rharu; U+021C0
2533rharul; U+0296C
2534Rho; U+003A1
2535rho; U+003C1
2536rhov; U+003F1
2537RightAngleBracket; U+027E9
2538RightArrow; U+02192
2539Rightarrow; U+021D2
2540rightarrow; U+02192
2541RightArrowBar; U+021E5
2542RightArrowLeftArrow; U+021C4
2543rightarrowtail; U+021A3
2544RightCeiling; U+02309
2545RightDoubleBracket; U+027E7
2546RightDownTeeVector; U+0295D
2547RightDownVector; U+021C2
2548RightDownVectorBar; U+02955
2549RightFloor; U+0230B
2550rightharpoondown; U+021C1
2551rightharpoonup; U+021C0
2552rightleftarrows; U+021C4
2553rightleftharpoons; U+021CC
2554rightrightarrows; U+021C9
2555rightsquigarrow; U+0219D
2556RightTee; U+022A2
2557RightTeeArrow; U+021A6
2558RightTeeVector; U+0295B
2559rightthreetimes; U+022CC
2560RightTriangle; U+022B3
2561RightTriangleBar; U+029D0
2562RightTriangleEqual; U+022B5
2563RightUpDownVector; U+0294F
2564RightUpTeeVector; U+0295C
2565RightUpVector; U+021BE
2566RightUpVectorBar; U+02954
2567RightVector; U+021C0
2568RightVectorBar; U+02953
2569ring; U+002DA
2570risingdotseq; U+02253
2571rlarr; U+021C4
2572rlhar; U+021CC
2573rlm; U+0200F
2574rmoust; U+023B1
2575rmoustache; U+023B1
2576rnmid; U+02AEE
2577roang; U+027ED
2578roarr; U+021FE
2579robrk; U+027E7
2580ropar; U+02986
2581Ropf; U+0211D
2582ropf; U+1D563
2583roplus; U+02A2E
2584rotimes; U+02A35
2585RoundImplies; U+02970
2586rpar; U+00029
2587rpargt; U+02994
2588rppolint; U+02A12
2589rrarr; U+021C9
2590Rrightarrow; U+021DB
2591rsaquo; U+0203A
2592Rscr; U+0211B
2593rscr; U+1D4C7
2594Rsh; U+021B1
2595rsh; U+021B1
2596rsqb; U+0005D
2597rsquo; U+02019
2598rsquor; U+02019
2599rthree; U+022CC
2600rtimes; U+022CA
2601rtri; U+025B9
2602rtrie; U+022B5
2603rtrif; U+025B8
2604rtriltri; U+029CE
2605RuleDelayed; U+029F4
2606ruluhar; U+02968
2607rx; U+0211E
2608Sacute; U+0015A
2609sacute; U+0015B
2610sbquo; U+0201A
2611Sc; U+02ABC
2612sc; U+0227B
2613scap; U+02AB8
2614Scaron; U+00160
2615scaron; U+00161
2616sccue; U+0227D
2617scE; U+02AB4
2618sce; U+02AB0
2619Scedil; U+0015E
2620scedil; U+0015F
2621Scirc; U+0015C
2622scirc; U+0015D
2623scnap; U+02ABA
2624scnE; U+02AB6
2625scnsim; U+022E9
2626scpolint; U+02A13
2627scsim; U+0227F
2628Scy; U+00421
2629scy; U+00441
2630sdot; U+022C5
2631sdotb; U+022A1
2632sdote; U+02A66
2633searhk; U+02925
2634seArr; U+021D8
2635searr; U+02198
2636searrow; U+02198
2637sect; U+000A7
2638sect U+000A7
2639semi; U+0003B
2640seswar; U+02929
2641setminus; U+02216
2642setmn; U+02216
2643sext; U+02736
2644Sfr; U+1D516
2645sfr; U+1D530
2646sfrown; U+02322
2647sharp; U+0266F
2648SHCHcy; U+00429
2649shchcy; U+00449
2650SHcy; U+00428
2651shcy; U+00448
2652ShortDownArrow; U+02193
2653ShortLeftArrow; U+02190
2654shortmid; U+02223
2655shortparallel; U+02225
2656ShortRightArrow; U+02192
2657ShortUpArrow; U+02191
2658shy; U+000AD
2659shy U+000AD
2660Sigma; U+003A3
2661sigma; U+003C3
2662sigmaf; U+003C2
2663sigmav; U+003C2
2664sim; U+0223C
2665simdot; U+02A6A
2666sime; U+02243
2667simeq; U+02243
2668simg; U+02A9E
2669simgE; U+02AA0
2670siml; U+02A9D
2671simlE; U+02A9F
2672simne; U+02246
2673simplus; U+02A24
2674simrarr; U+02972
2675slarr; U+02190
2676SmallCircle; U+02218
2677smallsetminus; U+02216
2678smashp; U+02A33
2679smeparsl; U+029E4
2680smid; U+02223
2681smile; U+02323
2682smt; U+02AAA
2683smte; U+02AAC
2684smtes; U+02AAC U+0FE00
2685SOFTcy; U+0042C
2686softcy; U+0044C
2687sol; U+0002F
2688solb; U+029C4
2689solbar; U+0233F
2690Sopf; U+1D54A
2691sopf; U+1D564
2692spades; U+02660
2693spadesuit; U+02660
2694spar; U+02225
2695sqcap; U+02293
2696sqcaps; U+02293 U+0FE00
2697sqcup; U+02294
2698sqcups; U+02294 U+0FE00
2699Sqrt; U+0221A
2700sqsub; U+0228F
2701sqsube; U+02291
2702sqsubset; U+0228F
2703sqsubseteq; U+02291
2704sqsup; U+02290
2705sqsupe; U+02292
2706sqsupset; U+02290
2707sqsupseteq; U+02292
2708squ; U+025A1
2709Square; U+025A1
2710square; U+025A1
2711SquareIntersection; U+02293
2712SquareSubset; U+0228F
2713SquareSubsetEqual; U+02291
2714SquareSuperset; U+02290
2715SquareSupersetEqual; U+02292
2716SquareUnion; U+02294
2717squarf; U+025AA
2718squf; U+025AA
2719srarr; U+02192
2720Sscr; U+1D4AE
2721sscr; U+1D4C8
2722ssetmn; U+02216
2723ssmile; U+02323
2724sstarf; U+022C6
2725Star; U+022C6
2726star; U+02606
2727starf; U+02605
2728straightepsilon; U+003F5
2729straightphi; U+003D5
2730strns; U+000AF
2731Sub; U+022D0
2732sub; U+02282
2733subdot; U+02ABD
2734subE; U+02AC5
2735sube; U+02286
2736subedot; U+02AC3
2737submult; U+02AC1
2738subnE; U+02ACB
2739subne; U+0228A
2740subplus; U+02ABF
2741subrarr; U+02979
2742Subset; U+022D0
2743subset; U+02282
2744subseteq; U+02286
2745subseteqq; U+02AC5
2746SubsetEqual; U+02286
2747subsetneq; U+0228A
2748subsetneqq; U+02ACB
2749subsim; U+02AC7
2750subsub; U+02AD5
2751subsup; U+02AD3
2752succ; U+0227B
2753succapprox; U+02AB8
2754succcurlyeq; U+0227D
2755Succeeds; U+0227B
2756SucceedsEqual; U+02AB0
2757SucceedsSlantEqual; U+0227D
2758SucceedsTilde; U+0227F
2759succeq; U+02AB0
2760succnapprox; U+02ABA
2761succneqq; U+02AB6
2762succnsim; U+022E9
2763succsim; U+0227F
2764SuchThat; U+0220B
2765Sum; U+02211
2766sum; U+02211
2767sung; U+0266A
2768Sup; U+022D1
2769sup; U+02283
2770sup1; U+000B9
2771sup1 U+000B9
2772sup2; U+000B2
2773sup2 U+000B2
2774sup3; U+000B3
2775sup3 U+000B3
2776supdot; U+02ABE
2777supdsub; U+02AD8
2778supE; U+02AC6
2779supe; U+02287
2780supedot; U+02AC4
2781Superset; U+02283
2782SupersetEqual; U+02287
2783suphsol; U+027C9
2784suphsub; U+02AD7
2785suplarr; U+0297B
2786supmult; U+02AC2
2787supnE; U+02ACC
2788supne; U+0228B
2789supplus; U+02AC0
2790Supset; U+022D1
2791supset; U+02283
2792supseteq; U+02287
2793supseteqq; U+02AC6
2794supsetneq; U+0228B
2795supsetneqq; U+02ACC
2796supsim; U+02AC8
2797supsub; U+02AD4
2798supsup; U+02AD6
2799swarhk; U+02926
2800swArr; U+021D9
2801swarr; U+02199
2802swarrow; U+02199
2803swnwar; U+0292A
2804szlig; U+000DF
2805szlig U+000DF
2806Tab; U+00009
2807target; U+02316
2808Tau; U+003A4
2809tau; U+003C4
2810tbrk; U+023B4
2811Tcaron; U+00164
2812tcaron; U+00165
2813Tcedil; U+00162
2814tcedil; U+00163
2815Tcy; U+00422
2816tcy; U+00442
2817tdot; U+020DB
2818telrec; U+02315
2819Tfr; U+1D517
2820tfr; U+1D531
2821there4; U+02234
2822Therefore; U+02234
2823therefore; U+02234
2824Theta; U+00398
2825theta; U+003B8
2826thetasym; U+003D1
2827thetav; U+003D1
2828thickapprox; U+02248
2829thicksim; U+0223C
2830ThickSpace; U+0205F U+0200A
2831thinsp; U+02009
2832ThinSpace; U+02009
2833thkap; U+02248
2834thksim; U+0223C
2835THORN; U+000DE
2836THORN U+000DE
2837thorn; U+000FE
2838thorn U+000FE
2839Tilde; U+0223C
2840tilde; U+002DC
2841TildeEqual; U+02243
2842TildeFullEqual; U+02245
2843TildeTilde; U+02248
2844times; U+000D7
2845times U+000D7
2846timesb; U+022A0
2847timesbar; U+02A31
2848timesd; U+02A30
2849tint; U+0222D
2850toea; U+02928
2851top; U+022A4
2852topbot; U+02336
2853topcir; U+02AF1
2854Topf; U+1D54B
2855topf; U+1D565
2856topfork; U+02ADA
2857tosa; U+02929
2858tprime; U+02034
2859TRADE; U+02122
2860trade; U+02122
2861triangle; U+025B5
2862triangledown; U+025BF
2863triangleleft; U+025C3
2864trianglelefteq; U+022B4
2865triangleq; U+0225C
2866triangleright; U+025B9
2867trianglerighteq; U+022B5
2868tridot; U+025EC
2869trie; U+0225C
2870triminus; U+02A3A
2871TripleDot; U+020DB
2872triplus; U+02A39
2873trisb; U+029CD
2874tritime; U+02A3B
2875trpezium; U+023E2
2876Tscr; U+1D4AF
2877tscr; U+1D4C9
2878TScy; U+00426
2879tscy; U+00446
2880TSHcy; U+0040B
2881tshcy; U+0045B
2882Tstrok; U+00166
2883tstrok; U+00167
2884twixt; U+0226C
2885twoheadleftarrow; U+0219E
2886twoheadrightarrow; U+021A0
2887Uacute; U+000DA
2888Uacute U+000DA
2889uacute; U+000FA
2890uacute U+000FA
2891Uarr; U+0219F
2892uArr; U+021D1
2893uarr; U+02191
2894Uarrocir; U+02949
2895Ubrcy; U+0040E
2896ubrcy; U+0045E
2897Ubreve; U+0016C
2898ubreve; U+0016D
2899Ucirc; U+000DB
2900Ucirc U+000DB
2901ucirc; U+000FB
2902ucirc U+000FB
2903Ucy; U+00423
2904ucy; U+00443
2905udarr; U+021C5
2906Udblac; U+00170
2907udblac; U+00171
2908udhar; U+0296E
2909ufisht; U+0297E
2910Ufr; U+1D518
2911ufr; U+1D532
2912Ugrave; U+000D9
2913Ugrave U+000D9
2914ugrave; U+000F9
2915ugrave U+000F9
2916uHar; U+02963
2917uharl; U+021BF
2918uharr; U+021BE
2919uhblk; U+02580
2920ulcorn; U+0231C
2921ulcorner; U+0231C
2922ulcrop; U+0230F
2923ultri; U+025F8
2924Umacr; U+0016A
2925umacr; U+0016B
2926uml; U+000A8
2927uml U+000A8
2928UnderBar; U+0005F
2929UnderBrace; U+023DF
2930UnderBracket; U+023B5
2931UnderParenthesis; U+023DD
2932Union; U+022C3
2933UnionPlus; U+0228E
2934Uogon; U+00172
2935uogon; U+00173
2936Uopf; U+1D54C
2937uopf; U+1D566
2938UpArrow; U+02191
2939Uparrow; U+021D1
2940uparrow; U+02191
2941UpArrowBar; U+02912
2942UpArrowDownArrow; U+021C5
2943UpDownArrow; U+02195
2944Updownarrow; U+021D5
2945updownarrow; U+02195
2946UpEquilibrium; U+0296E
2947upharpoonleft; U+021BF
2948upharpoonright; U+021BE
2949uplus; U+0228E
2950UpperLeftArrow; U+02196
2951UpperRightArrow; U+02197
2952Upsi; U+003D2
2953upsi; U+003C5
2954upsih; U+003D2
2955Upsilon; U+003A5
2956upsilon; U+003C5
2957UpTee; U+022A5
2958UpTeeArrow; U+021A5
2959upuparrows; U+021C8
2960urcorn; U+0231D
2961urcorner; U+0231D
2962urcrop; U+0230E
2963Uring; U+0016E
2964uring; U+0016F
2965urtri; U+025F9
2966Uscr; U+1D4B0
2967uscr; U+1D4CA
2968utdot; U+022F0
2969Utilde; U+00168
2970utilde; U+00169
2971utri; U+025B5
2972utrif; U+025B4
2973uuarr; U+021C8
2974Uuml; U+000DC
2975Uuml U+000DC
2976uuml; U+000FC
2977uuml U+000FC
2978uwangle; U+029A7
2979vangrt; U+0299C
2980varepsilon; U+003F5
2981varkappa; U+003F0
2982varnothing; U+02205
2983varphi; U+003D5
2984varpi; U+003D6
2985varpropto; U+0221D
2986vArr; U+021D5
2987varr; U+02195
2988varrho; U+003F1
2989varsigma; U+003C2
2990varsubsetneq; U+0228A U+0FE00
2991varsubsetneqq; U+02ACB U+0FE00
2992varsupsetneq; U+0228B U+0FE00
2993varsupsetneqq; U+02ACC U+0FE00
2994vartheta; U+003D1
2995vartriangleleft; U+022B2
2996vartriangleright; U+022B3
2997Vbar; U+02AEB
2998vBar; U+02AE8
2999vBarv; U+02AE9
3000Vcy; U+00412
3001vcy; U+00432
3002VDash; U+022AB
3003Vdash; U+022A9
3004vDash; U+022A8
3005vdash; U+022A2
3006Vdashl; U+02AE6
3007Vee; U+022C1
3008vee; U+02228
3009veebar; U+022BB
3010veeeq; U+0225A
3011vellip; U+022EE
3012Verbar; U+02016
3013verbar; U+0007C
3014Vert; U+02016
3015vert; U+0007C
3016VerticalBar; U+02223
3017VerticalLine; U+0007C
3018VerticalSeparator; U+02758
3019VerticalTilde; U+02240
3020VeryThinSpace; U+0200A
3021Vfr; U+1D519
3022vfr; U+1D533
3023vltri; U+022B2
3024vnsub; U+02282 U+020D2
3025vnsup; U+02283 U+020D2
3026Vopf; U+1D54D
3027vopf; U+1D567
3028vprop; U+0221D
3029vrtri; U+022B3
3030Vscr; U+1D4B1
3031vscr; U+1D4CB
3032vsubnE; U+02ACB U+0FE00
3033vsubne; U+0228A U+0FE00
3034vsupnE; U+02ACC U+0FE00
3035vsupne; U+0228B U+0FE00
3036Vvdash; U+022AA
3037vzigzag; U+0299A
3038Wcirc; U+00174
3039wcirc; U+00175
3040wedbar; U+02A5F
3041Wedge; U+022C0
3042wedge; U+02227
3043wedgeq; U+02259
3044weierp; U+02118
3045Wfr; U+1D51A
3046wfr; U+1D534
3047Wopf; U+1D54E
3048wopf; U+1D568
3049wp; U+02118
3050wr; U+02240
3051wreath; U+02240
3052Wscr; U+1D4B2
3053wscr; U+1D4CC
3054xcap; U+022C2
3055xcirc; U+025EF
3056xcup; U+022C3
3057xdtri; U+025BD
3058Xfr; U+1D51B
3059xfr; U+1D535
3060xhArr; U+027FA
3061xharr; U+027F7
3062Xi; U+0039E
3063xi; U+003BE
3064xlArr; U+027F8
3065xlarr; U+027F5
3066xmap; U+027FC
3067xnis; U+022FB
3068xodot; U+02A00
3069Xopf; U+1D54F
3070xopf; U+1D569
3071xoplus; U+02A01
3072xotime; U+02A02
3073xrArr; U+027F9
3074xrarr; U+027F6
3075Xscr; U+1D4B3
3076xscr; U+1D4CD
3077xsqcup; U+02A06
3078xuplus; U+02A04
3079xutri; U+025B3
3080xvee; U+022C1
3081xwedge; U+022C0
3082Yacute; U+000DD
3083Yacute U+000DD
3084yacute; U+000FD
3085yacute U+000FD
3086YAcy; U+0042F
3087yacy; U+0044F
3088Ycirc; U+00176
3089ycirc; U+00177
3090Ycy; U+0042B
3091ycy; U+0044B
3092yen; U+000A5
3093yen U+000A5
3094Yfr; U+1D51C
3095yfr; U+1D536
3096YIcy; U+00407
3097yicy; U+00457
3098Yopf; U+1D550
3099yopf; U+1D56A
3100Yscr; U+1D4B4
3101yscr; U+1D4CE
3102YUcy; U+0042E
3103yucy; U+0044E
3104Yuml; U+00178
3105yuml; U+000FF
3106yuml U+000FF
3107Zacute; U+00179
3108zacute; U+0017A
3109Zcaron; U+0017D
3110zcaron; U+0017E
3111Zcy; U+00417
3112zcy; U+00437
3113Zdot; U+0017B
3114zdot; U+0017C
3115zeetrf; U+02128
3116ZeroWidthSpace; U+0200B
3117Zeta; U+00396
3118zeta; U+003B6
3119Zfr; U+02128
3120zfr; U+1D537
3121ZHcy; U+00416
3122zhcy; U+00436
3123zigrarr; U+021DD
3124Zopf; U+02124
3125zopf; U+1D56B
3126Zscr; U+1D4B5
3127zscr; U+1D4CF
3128zwj; U+0200D
3129zwnj; U+0200C
Note: See TracBrowser for help on using the repository browser.