← Index
NYTProf Performance Profile   « line view »
For /usr/local/libexec/sympa/task_manager-debug.pl
  Run on Tue Jun 1 22:32:51 2021
Reported on Tue Jun 1 22:35:08 2021

Filename/usr/local/lib/perl5/5.32/mach/Unicode/Normalize.pm
StatementsExecuted 1035 statements in 21.9ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3451120.2ms20.2msUnicode::Normalize::::NFCUnicode::Normalize::NFC (xsub)
345111.85ms22.0msUnicode::Normalize::::normalizeUnicode::Normalize::normalize
0000s0sUnicode::Normalize::::BEGIN@12Unicode::Normalize::BEGIN@12
0000s0sUnicode::Normalize::::BEGIN@13Unicode::Normalize::BEGIN@13
0000s0sUnicode::Normalize::::BEGIN@14Unicode::Normalize::BEGIN@14
0000s0sUnicode::Normalize::::BEGIN@15Unicode::Normalize::BEGIN@15
0000s0sUnicode::Normalize::::BEGIN@17Unicode::Normalize::BEGIN@17
0000s0sUnicode::Normalize::::BEGIN@3Unicode::Normalize::BEGIN@3
0000s0sUnicode::Normalize::::BEGIN@60Unicode::Normalize::BEGIN@60
0000s0sUnicode::Normalize::::CORE:unpackUnicode::Normalize::CORE:unpack (opcode)
0000s0sUnicode::Normalize::::FCDUnicode::Normalize::FCD
0000s0sUnicode::Normalize::::NFC_partialUnicode::Normalize::NFC_partial
0000s0sUnicode::Normalize::::NFD_partialUnicode::Normalize::NFD_partial
0000s0sUnicode::Normalize::::NFKC_partialUnicode::Normalize::NFKC_partial
0000s0sUnicode::Normalize::::NFKD_partialUnicode::Normalize::NFKD_partial
0000s0sUnicode::Normalize::::checkUnicode::Normalize::check
0000s0sUnicode::Normalize::::normalize_partialUnicode::Normalize::normalize_partial
0000s0sUnicode::Normalize::::pack_UUnicode::Normalize::pack_U
0000s0sUnicode::Normalize::::unpack_UUnicode::Normalize::unpack_U
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Unicode::Normalize;
2
3BEGIN {
4 unless ('A' eq pack('U', 0x41)) {
5 die "Unicode::Normalize cannot stringify a Unicode code point\n";
6 }
7 unless (0x41 == unpack('U', 'A')) {
8 die "Unicode::Normalize cannot get Unicode code point\n";
9 }
10}
11
12use 5.006;
13use strict;
14use warnings;
15use Carp;
16
17no warnings 'utf8';
18
19our $VERSION = '1.27';
20our $PACKAGE = __PACKAGE__;
21
22our @EXPORT = qw( NFC NFD NFKC NFKD );
23our @EXPORT_OK = qw(
24 normalize decompose reorder compose
25 checkNFD checkNFKD checkNFC checkNFKC check
26 getCanon getCompat getComposite getCombinClass
27 isExclusion isSingleton isNonStDecomp isComp2nd isComp_Ex
28 isNFD_NO isNFC_NO isNFC_MAYBE isNFKD_NO isNFKC_NO isNFKC_MAYBE
29 FCD checkFCD FCC checkFCC composeContiguous splitOnLastStarter
30 normalize_partial NFC_partial NFD_partial NFKC_partial NFKD_partial
31);
32our %EXPORT_TAGS = (
33 all => [ @EXPORT, @EXPORT_OK ],
34 normalize => [ @EXPORT, qw/normalize decompose reorder compose/ ],
35 check => [ qw/checkNFD checkNFKD checkNFC checkNFKC check/ ],
36 fast => [ qw/FCD checkFCD FCC checkFCC composeContiguous/ ],
37);
38
39##
40## utilities for tests
41##
42
43sub pack_U {
44 return pack('U*', @_);
45}
46
47sub unpack_U {
48
49 # The empty pack returns an empty UTF-8 string, so the effect is to force
50 # the shifted parameter into being UTF-8. This allows this to work on
51 # Perl 5.6, where there is no utf8::upgrade().
52 return unpack('U*', shift(@_).pack('U*'));
53}
54
55require Exporter;
56
57##### The above part is common to XS and PP #####
58
59our @ISA = qw(Exporter);
60use XSLoader ();
61XSLoader::load( 'Unicode::Normalize', $VERSION );
62
63##### The below part is common to XS and PP #####
64
65##
66## normalize
67##
68
69sub FCD ($) {
70 my $str = shift;
71 return checkFCD($str) ? $str : NFD($str);
72}
73
74our %formNorm = (
75 NFC => \&NFC, C => \&NFC,
76 NFD => \&NFD, D => \&NFD,
77 NFKC => \&NFKC, KC => \&NFKC,
78 NFKD => \&NFKD, KD => \&NFKD,
79 FCD => \&FCD, FCC => \&FCC,
80);
81
82sub normalize($$)
83
# spent 22.0ms (1.85+20.2) within Unicode::Normalize::normalize which was called 345 times, avg 64µs/call: # 345 times (1.85ms+20.2ms) by Sympa::Tools::Text::canonic_text at line 137 of /usr/local/libexec/sympa/Sympa/Tools/Text.pm, avg 64µs/call
{
84345158µs my $form = shift;
85345124µs my $str = shift;
8634521.6ms34520.2ms if (exists $formNorm{$form}) {
# spent 20.2ms making 345 calls to Unicode::Normalize::NFC, avg 58µs/call
87 return $formNorm{$form}->($str);
88 }
89 croak($PACKAGE."::normalize: invalid form name: $form");
90}
91
92##
93## partial
94##
95
96sub normalize_partial ($$) {
97 if (exists $formNorm{$_[0]}) {
98 my $n = normalize($_[0], $_[1]);
99 my($p, $u) = splitOnLastStarter($n);
100 $_[1] = $u;
101 return $p;
102 }
103 croak($PACKAGE."::normalize_partial: invalid form name: $_[0]");
104}
105
106sub NFD_partial ($) { return normalize_partial('NFD', $_[0]) }
107sub NFC_partial ($) { return normalize_partial('NFC', $_[0]) }
108sub NFKD_partial($) { return normalize_partial('NFKD',$_[0]) }
109sub NFKC_partial($) { return normalize_partial('NFKC',$_[0]) }
110
111##
112## check
113##
114
115our %formCheck = (
116 NFC => \&checkNFC, C => \&checkNFC,
117 NFD => \&checkNFD, D => \&checkNFD,
118 NFKC => \&checkNFKC, KC => \&checkNFKC,
119 NFKD => \&checkNFKD, KD => \&checkNFKD,
120 FCD => \&checkFCD, FCC => \&checkFCC,
121);
122
123sub check($$)
124{
125 my $form = shift;
126 my $str = shift;
127 if (exists $formCheck{$form}) {
128 return $formCheck{$form}->($str);
129 }
130 croak($PACKAGE."::check: invalid form name: $form");
131}
132
1331;
134__END__
 
# spent 20.2ms within Unicode::Normalize::NFC which was called 345 times, avg 58µs/call: # 345 times (20.2ms+0s) by Unicode::Normalize::normalize at line 86, avg 58µs/call
sub Unicode::Normalize::NFC; # xsub