diff options
author | Karl Berry <karl@freefriends.org> | 2015-04-26 22:16:26 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2015-04-26 22:16:26 +0000 |
commit | 342e672574c4e67d510e46ab6acd0e21a7d0cf54 (patch) | |
tree | 79e04202d08c0404bbd780bd26c1e34710e539b6 /Master/tlpkg/tlperl/lib/utf8_heavy.pl | |
parent | be2706af7c57a0ef0f4d4e9f684ca4ef74922a82 (diff) |
(tl)perl 5.20.2 for windows, from siep
git-svn-id: svn://tug.org/texlive/trunk@37064 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlperl/lib/utf8_heavy.pl')
-rw-r--r-- | Master/tlpkg/tlperl/lib/utf8_heavy.pl | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/Master/tlpkg/tlperl/lib/utf8_heavy.pl b/Master/tlpkg/tlperl/lib/utf8_heavy.pl index fc422835abc..0d2888f5a49 100644 --- a/Master/tlpkg/tlperl/lib/utf8_heavy.pl +++ b/Master/tlpkg/tlperl/lib/utf8_heavy.pl @@ -407,9 +407,9 @@ sub _loose_name ($) { # Add the constant and go fetch it in. if (defined $file) { - # A beginning ! means to invert. The 0+ makes sure is - # numeric - $invert_it = 0 + $file =~ s/^!//; + # If the file name contains a !, it means to invert. The + # 0+ makes sure result is numeric + $invert_it = 0 + $file =~ s/!//; if ($utf8::why_deprecated{$file}) { warnings::warnif('deprecated', "Use of '$type' in \\p{} or \\P{} is deprecated because: $utf8::why_deprecated{$file};"); @@ -420,7 +420,11 @@ sub _loose_name ($) { { $file = $utf8::caseless_equivalent{$property_and_table}; } - $file= "$unicore_dir/lib/$file.pl"; + + # The pseudo-directory '#' means that there really isn't a + # file to read, the data is in-line as part of the string; + # we extract it below. + $file = "$unicore_dir/lib/$file.pl" unless $file =~ m!^#/!; last GETFILE; } print STDERR __LINE__, ": didn't find $property_and_table\n" if DEBUG; @@ -482,8 +486,8 @@ sub _loose_name ($) { $minbits = 1; # The 0+ makes sure is numeric - $invert_it = 0 + $file =~ s/^!//; - $file = "$unicore_dir/lib/$file.pl"; + $invert_it = 0 + $file =~ s/!//; + $file = "$unicore_dir/lib/$file.pl" unless $file =~ m!^#/!; last GETFILE; } } } @@ -504,20 +508,31 @@ sub _loose_name ($) { ## If we reach here, it was due to a 'last GETFILE' above ## (exception: user-defined properties and mappings), so we ## have a filename, so now we load it if we haven't already. - ## If we have, return the cached results. The cache key is the - ## class and file to load, and whether the results need to be - ## inverted. - ## - my $found = $Cache{$class, $file, $invert_it}; - if ($found and ref($found) eq $class) { - print STDERR __LINE__, ": Returning cached swash for '$class,$file,$invert_it' for \\p{$type}\n" if DEBUG; - pop @recursed if @recursed; - return $found; + + # The pseudo-directory '#' means the result isn't really a + # file, but is in-line, with semi-colons to be turned into + # new-lines. Since it is in-line there is no advantage to + # caching the result + if ($file =~ s!^#/!!) { + $list = $utf8::inline_definitions[$file]; + } + else { + # Here, we have an actual file to read in and load, but it + # may already have been read-in and cached. The cache key + # is the class and file to load, and whether the results + # need to be inverted. + my $found = $Cache{$class, $file, $invert_it}; + if ($found and ref($found) eq $class) { + print STDERR __LINE__, ": Returning cached swash for '$class,$file,$invert_it' for \\p{$type}\n" if DEBUG; + pop @recursed if @recursed; + return $found; + } + + local $@; + local $!; + $list = do $file; die $@ if $@; } - local $@; - local $!; - $list = do $file; die $@ if $@; $list_is_from_mktables = 1; } } # End of $type is non-null |