Filename | /usr/lib/perl/5.18/Unicode/Normalize.pm |
Statements | Executed 1181 statements in 7.73ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
386 | 1 | 1 | 4.42ms | 4.42ms | NFC (xsub) | Unicode::Normalize::
386 | 1 | 1 | 1.85ms | 6.27ms | normalize | Unicode::Normalize::
1 | 1 | 1 | 102µs | 102µs | bootstrap (xsub) | Unicode::Normalize::
1 | 1 | 1 | 15µs | 21µs | BEGIN@11 | Unicode::Normalize::
1 | 1 | 1 | 13µs | 13µs | BEGIN@9 | Unicode::Normalize::
1 | 1 | 1 | 10µs | 22µs | BEGIN@14 | Unicode::Normalize::
1 | 1 | 1 | 9µs | 54µs | BEGIN@12 | Unicode::Normalize::
1 | 1 | 1 | 8µs | 25µs | BEGIN@10 | Unicode::Normalize::
1 | 1 | 1 | 5µs | 5µs | BEGIN@3 | Unicode::Normalize::
0 | 0 | 0 | 0s | 0s | FCD | Unicode::Normalize::
0 | 0 | 0 | 0s | 0s | NFC_partial | Unicode::Normalize::
0 | 0 | 0 | 0s | 0s | NFD_partial | Unicode::Normalize::
0 | 0 | 0 | 0s | 0s | NFKC_partial | Unicode::Normalize::
0 | 0 | 0 | 0s | 0s | NFKD_partial | Unicode::Normalize::
0 | 0 | 0 | 0s | 0s | check | Unicode::Normalize::
0 | 0 | 0 | 0s | 0s | normalize_partial | Unicode::Normalize::
0 | 0 | 0 | 0s | 0s | pack_U | Unicode::Normalize::
0 | 0 | 0 | 0s | 0s | unpack_U | Unicode::Normalize::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package Unicode::Normalize; | ||||
2 | |||||
3 | # spent 5µs within Unicode::Normalize::BEGIN@3 which was called:
# once (5µs+0s) by String::Markov::BEGIN@11 at line 7 | ||||
4 | 1 | 13µs | 1 | 20µs | unless ("A" eq pack('U', 0x41)) { # spent 20µs making 1 call to main::CORE:pack |
5 | die "Unicode::Normalize cannot stringify a Unicode code point\n"; | ||||
6 | } | ||||
7 | 1 | 24µs | 1 | 5µs | } # spent 5µs making 1 call to Unicode::Normalize::BEGIN@3 |
8 | |||||
9 | 2 | 55µs | 1 | 13µs | # spent 13µs within Unicode::Normalize::BEGIN@9 which was called:
# once (13µs+0s) by String::Markov::BEGIN@11 at line 9 # spent 13µs making 1 call to Unicode::Normalize::BEGIN@9 |
10 | 2 | 28µs | 2 | 42µs | # spent 25µs (8+17) within Unicode::Normalize::BEGIN@10 which was called:
# once (8µs+17µs) by String::Markov::BEGIN@11 at line 10 # spent 25µs making 1 call to Unicode::Normalize::BEGIN@10
# spent 17µs making 1 call to strict::import |
11 | 2 | 27µs | 2 | 28µs | # spent 21µs (15+7) within Unicode::Normalize::BEGIN@11 which was called:
# once (15µs+7µs) by String::Markov::BEGIN@11 at line 11 # spent 21µs making 1 call to Unicode::Normalize::BEGIN@11
# spent 6µs making 1 call to warnings::import |
12 | 2 | 34µs | 2 | 100µs | # spent 54µs (9+45) within Unicode::Normalize::BEGIN@12 which was called:
# once (9µs+45µs) by String::Markov::BEGIN@11 at line 12 # spent 54µs making 1 call to Unicode::Normalize::BEGIN@12
# spent 45µs making 1 call to Exporter::import |
13 | |||||
14 | 2 | 848µs | 2 | 35µs | # spent 22µs (10+13) within Unicode::Normalize::BEGIN@14 which was called:
# once (10µs+13µs) by String::Markov::BEGIN@11 at line 14 # spent 22µs making 1 call to Unicode::Normalize::BEGIN@14
# spent 13µs making 1 call to warnings::unimport |
15 | |||||
16 | 1 | 1µs | our $VERSION = '1.16'; | ||
17 | 1 | 200ns | our $PACKAGE = __PACKAGE__; | ||
18 | |||||
19 | 1 | 2µs | our @EXPORT = qw( NFC NFD NFKC NFKD ); | ||
20 | 1 | 5µs | our @EXPORT_OK = qw( | ||
21 | normalize decompose reorder compose | ||||
22 | checkNFD checkNFKD checkNFC checkNFKC check | ||||
23 | getCanon getCompat getComposite getCombinClass | ||||
24 | isExclusion isSingleton isNonStDecomp isComp2nd isComp_Ex | ||||
25 | isNFD_NO isNFC_NO isNFC_MAYBE isNFKD_NO isNFKC_NO isNFKC_MAYBE | ||||
26 | FCD checkFCD FCC checkFCC composeContiguous splitOnLastStarter | ||||
27 | normalize_partial NFC_partial NFD_partial NFKC_partial NFKD_partial | ||||
28 | ); | ||||
29 | 1 | 10µs | our %EXPORT_TAGS = ( | ||
30 | all => [ @EXPORT, @EXPORT_OK ], | ||||
31 | normalize => [ @EXPORT, qw/normalize decompose reorder compose/ ], | ||||
32 | check => [ qw/checkNFD checkNFKD checkNFC checkNFKC check/ ], | ||||
33 | fast => [ qw/FCD checkFCD FCC checkFCC composeContiguous/ ], | ||||
34 | ); | ||||
35 | |||||
36 | ## | ||||
37 | ## utilities for tests | ||||
38 | ## | ||||
39 | |||||
40 | sub pack_U { | ||||
41 | return pack('U*', @_); | ||||
42 | } | ||||
43 | |||||
44 | sub unpack_U { | ||||
45 | 1 | 2µs | return unpack('U*', shift(@_).pack('U*')); # spent 2µs making 1 call to main::CORE:pack | ||
46 | } | ||||
47 | |||||
48 | 1 | 500ns | require Exporter; | ||
49 | |||||
50 | ##### The above part is common to XS and PP ##### | ||||
51 | |||||
52 | 1 | 10µs | our @ISA = qw(Exporter DynaLoader); | ||
53 | 1 | 115µs | require DynaLoader; | ||
54 | 1 | 9µs | 1 | 734µs | bootstrap Unicode::Normalize $VERSION; # spent 734µs making 1 call to DynaLoader::bootstrap |
55 | |||||
56 | ##### The below part is common to XS and PP ##### | ||||
57 | |||||
58 | ## | ||||
59 | ## normalize | ||||
60 | ## | ||||
61 | |||||
62 | sub FCD ($) { | ||||
63 | my $str = shift; | ||||
64 | return checkFCD($str) ? $str : NFD($str); | ||||
65 | } | ||||
66 | |||||
67 | 1 | 6µs | our %formNorm = ( | ||
68 | NFC => \&NFC, C => \&NFC, | ||||
69 | NFD => \&NFD, D => \&NFD, | ||||
70 | NFKC => \&NFKC, KC => \&NFKC, | ||||
71 | NFKD => \&NFKD, KD => \&NFKD, | ||||
72 | FCD => \&FCD, FCC => \&FCC, | ||||
73 | ); | ||||
74 | |||||
75 | sub normalize($$) | ||||
76 | # spent 6.27ms (1.85+4.42) within Unicode::Normalize::normalize which was called 386 times, avg 16µs/call:
# 386 times (1.85ms+4.42ms) by String::Markov::split_line at line 87 of String/Markov.pm, avg 16µs/call | ||||
77 | 386 | 123µs | my $form = shift; | ||
78 | 386 | 97µs | my $str = shift; | ||
79 | 386 | 6.30ms | 386 | 4.42ms | if (exists $formNorm{$form}) { # spent 4.42ms making 386 calls to Unicode::Normalize::NFC, avg 11µs/call |
80 | return $formNorm{$form}->($str); | ||||
81 | } | ||||
82 | croak($PACKAGE."::normalize: invalid form name: $form"); | ||||
83 | } | ||||
84 | |||||
85 | ## | ||||
86 | ## partial | ||||
87 | ## | ||||
88 | |||||
89 | sub normalize_partial ($$) { | ||||
90 | if (exists $formNorm{$_[0]}) { | ||||
91 | my $n = normalize($_[0], $_[1]); | ||||
92 | my($p, $u) = splitOnLastStarter($n); | ||||
93 | $_[1] = $u; | ||||
94 | return $p; | ||||
95 | } | ||||
96 | croak($PACKAGE."::normalize_partial: invalid form name: $_[0]"); | ||||
97 | } | ||||
98 | |||||
99 | sub NFD_partial ($) { return normalize_partial('NFD', $_[0]) } | ||||
100 | sub NFC_partial ($) { return normalize_partial('NFC', $_[0]) } | ||||
101 | sub NFKD_partial($) { return normalize_partial('NFKD',$_[0]) } | ||||
102 | sub NFKC_partial($) { return normalize_partial('NFKC',$_[0]) } | ||||
103 | |||||
104 | ## | ||||
105 | ## check | ||||
106 | ## | ||||
107 | |||||
108 | 1 | 3µs | our %formCheck = ( | ||
109 | NFC => \&checkNFC, C => \&checkNFC, | ||||
110 | NFD => \&checkNFD, D => \&checkNFD, | ||||
111 | NFKC => \&checkNFKC, KC => \&checkNFKC, | ||||
112 | NFKD => \&checkNFKD, KD => \&checkNFKD, | ||||
113 | FCD => \&checkFCD, FCC => \&checkFCC, | ||||
114 | ); | ||||
115 | |||||
116 | sub check($$) | ||||
117 | { | ||||
118 | my $form = shift; | ||||
119 | my $str = shift; | ||||
120 | if (exists $formCheck{$form}) { | ||||
121 | return $formCheck{$form}->($str); | ||||
122 | } | ||||
123 | croak($PACKAGE."::check: invalid form name: $form"); | ||||
124 | } | ||||
125 | |||||
126 | 1 | 19µs | 1; | ||
127 | __END__ | ||||
# spent 4.42ms within Unicode::Normalize::NFC which was called 386 times, avg 11µs/call:
# 386 times (4.42ms+0s) by Unicode::Normalize::normalize at line 79, avg 11µs/call | |||||
# spent 102µs within Unicode::Normalize::bootstrap which was called:
# once (102µs+0s) by DynaLoader::bootstrap at line 207 of DynaLoader.pm |