diff options
Diffstat (limited to 'MDK/Common/String.pm')
-rw-r--r-- | MDK/Common/String.pm | 164 |
1 files changed, 0 insertions, 164 deletions
diff --git a/MDK/Common/String.pm b/MDK/Common/String.pm deleted file mode 100644 index 40eee1d..0000000 --- a/MDK/Common/String.pm +++ /dev/null @@ -1,164 +0,0 @@ -package MDK::Common::String; - -=head1 NAME - -MDK::Common::String - formatting functions - -=head1 SYNOPSIS - - use MDK::Common::String qw(:all); - -=head1 EXPORTS - -=over - -=item bestMatchSentence(STRING, LIST) - -finds in the list the best corresponding string - -=item formatList(INT, LIST) - -if the list size is bigger than INT, replace the remaining elements with "...". - -formatList(3, qw(a b c d e)) # => "a, b, c, ..." - -=item formatError(STRING) - -the string is something like "error at foo.pl line 2" that you get when -catching an exception. formatError will remove the "at ..." so that you can -nicely display the returned string to the user - -=item formatTimeRaw(TIME) - -the TIME is an epoch as returned by C<time>, the formatted time looks like "23:59:00" - -=item formatLines(STRING) - -remove "\n"s when the next line doesn't start with a space. Otherwise keep -"\n"s to keep the indentation. - -=item formatAlaTeX(STRING) - -handle carriage return just like LaTeX: merge lines that are not separated by -an empty line - -=item begins_with(STRING, STRING) - -return true if first argument begins with the second argument. Use this -instead of regexps if you don't want regexps. - -begins_with("hello world", "hello") # => 1 - -=item warp_text(STRING, INT) - -return a list of lines which do not exceed INT characters -(or a string in scalar context) - -=item warp_text(STRING) - -warp_text at a default width (80) - -=back - -=head1 SEE ALSO - -L<MDK::Common> - -=cut - - -use Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(bestMatchSentence formatList formatError formatTimeRaw formatLines formatAlaTeX begins_with warp_text); -our %EXPORT_TAGS = (all => [ @EXPORT_OK ]); - - -# count the number of character that match -sub bestMatchSentence { - - my $best = -1; - my $bestSentence; - my @s = split /\W+/, shift; - foreach (@_) { - my $count = 0; - foreach my $e (@s) { - $count += length($e) if /^$e$/; - $count += length($e) if /^$e$/i; - $count += length($e) if /$e/; - $count += length($e) if /$e/i; - } - $best = $count, $bestSentence = $_ if $count > $best; - } - wantarray() ? ($bestSentence, $best) : $bestSentence; -} - - -sub formatList { - my $nb = shift; - join(", ", @_ <= $nb ? @_ : (@_[0..$nb-1], '...')); -} -sub formatError { - my ($err) = @_; - if (!$::testing) { - $err =~ s/Uncaught exception from user code:\n\t//s; #- happens with "use diagnostics" - $err =~ s/ at .*?$/./s; - } - $err; -} -sub formatTimeRaw { - my ($s, $m, $h) = gmtime($_[0]); - sprintf "%d:%02d:%02d", $h, $m, $s; -} -sub formatLines { - my ($t, $tmp); - foreach (split "\n", $_[0]) { - if (/^\s/) { - $t .= "$tmp\n"; - $tmp = $_; - } else { - $tmp = ($tmp ? "$tmp " : ($t && "\n") . $tmp) . $_; - } - } - "$t$tmp\n"; -} -sub formatAlaTeX { - my ($t, $tmp) = ('', ''); - foreach (split "\n", $_[0]) { - if (/^$/) { - $t .= ($t && "\n") . $tmp; - $tmp = ''; - } else { - $tmp = ($tmp && "$tmp ") . (/^\s*(.*?)\s*$/)[0]; - } - } - $t . ($t && $tmp && "\n") . $tmp; -} - - -sub begins_with { - my ($s, $prefix) = @_; - index($s, $prefix) == 0; -} - -sub warp_text { - my ($text, $o_width) = @_; - - my @l; - foreach (split "\n", $text) { - my ($beg) = /^(\s*)/; - my $t = ''; - foreach (split /\s+/, $_) { - if (length "$beg$t $_" > ($o_width || 80)) { - push @l, "$beg$t"; - $beg = ''; - $t = $_; - } else { - $t = $t ? "$t $_" : $_; - } - } - push @l, "$beg$t"; - } - wantarray() ? @l : join("\n", @l); -} - -1; |