X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=lib%2FParse%2FDebianChangelog%2FChangesFilters.pm;fp=lib%2FParse%2FDebianChangelog%2FChangesFilters.pm;h=8434770c704a213cd9139c16f1bbbf6eec5428bb;hb=08f111d6668d5278a64d304fbc3bae6be86e6a94;hp=0000000000000000000000000000000000000000;hpb=a287d590ac9129104450c822921bdab3082a7dc6;p=deb%2Fpackages.git diff --git a/lib/Parse/DebianChangelog/ChangesFilters.pm b/lib/Parse/DebianChangelog/ChangesFilters.pm new file mode 100644 index 0000000..8434770 --- /dev/null +++ b/lib/Parse/DebianChangelog/ChangesFilters.pm @@ -0,0 +1,191 @@ +# +# Parse::DebianChangelog::ChangesFilters +# +# Copyright 2005 Frank Lichtenheld +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +=head1 NAME + +Parse::DebianChangelog::ChangesFilters - filters to be applied to Debian changelog entries + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +This is currently only used internally by Parse::DebianChangelog and +is not yet documented. There may be still API changes until this module +is finalized. + +=cut + +package Parse::DebianChangelog::ChangesFilters; + +our @ISA = qw(Exporter); + +our %EXPORT_TAGS = ( 'all' => [ qw( + encode_entities + http_ftp_urls + email_to_ddpo + bugs_to_bts + cve_to_mitre + pseudo_markup + common_licenses +) ] ); + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @all_filters = ( + \&encode_entities, + \&http_ftp_urls, + \&email_to_ddpo, + \&bugs_to_bts, + \&cve_to_mitre, + \&pseudo_markup, + \&common_licenses, + ); + +sub encode_entities { + require HTML::Entities; + + return HTML::Entities::encode_entities( "$_[0]", '<>&"' ) || ''; +} + +sub http_ftp_urls { + my ($text, $cgi) = @_; + + $text=~ s|<URL:([-\w\.\/:~_\@]+):([a-zA-Z0-9\'() ]+)> + |$cgi->a({ -href=>$1 }, $2) + |xego; + $text=~ s|https?:[\w/\.:\@+\-~\%\#?=&;,]+[\w/] + |$cgi->a({ -href=>$& }, $&) + |xego; + $text=~ s|ftp:[\w/\.:\@+\-~\%\#?=&;,]+[\w/] + |$cgi->a({ -href=>$& }, $&) + |xego; + + return $text; +} + +sub email_to_ddpo { + my ($text, $cgi) = @_; + + $text =~ s|[a-zA-Z0-9_\+\-\.]+\@([a-zA-Z0-9][\w\.+\-]+\.[a-zA-Z]{2,}) + |$cgi->a({ -href=>"http://qa.debian.org/developer.php?login=$&" }, $&) + |xego; + return $text; +} + +sub bugs_to_bts { + (my $text = $_[0]) =~ s|Closes:\s*(?:Bug)?\#\d+(?:\s*,\s*(?:Bug)?\#\d+)* + |my $tmp = $&; { no warnings; + $tmp =~ s@(Bug)?\#(\d+)@$1\#$2@ig; } + "$tmp" + |xiego; + return $text; +} + +sub cve_to_mitre { + my ($text, $cgi) = @_; + + $text =~ s!\b(?:CVE|CAN)-\d{4}-\d{4}\b + !$cgi->a({ -href=>"http://cve.mitre.org/cgi-bin/cvename.cgi?name=$&" }, $&) + !xego; + return $text; +} + +sub pseudo_markup { + my ($text, $cgi) = @_; + + $text =~ s|\B\*([a-z][a-z -]*[a-z])\*\B + |$cgi->em($1) + |xiego; + $text=~ s|\B\*([a-z])\*\B + |$cgi->em($1) + |xiego; + $text=~ s|\B\#([a-z][a-z -]*[a-z])\#\B + |$cgi->strong($1) + |xego; + $text=~ s|\B\#([a-z])\#\B + |$cgi->strong($1) + |xego; + + return $text; +} + +sub common_licenses { + my ($text, $cgi) = @_; + + $text=~ s|/usr/share/common-licenses/GPL(?:-2)? + |$cgi->a({ -href=>"http://www.gnu.org/copyleft/gpl.html" }, $&) + |xego; + $text=~ s|/usr/share/common-licenses/LGPL(?:-2(?:\.1)?)? + |$cgi->a({ -href=>"http://www.gnu.org/copyleft/lgpl.html" }, $&) + |xego; + $text=~ s|/usr/share/common-licenses/Artistic + |$cgi->a({ -href=>"http://www.opensource.org/licenses/artistic-license.php" }, $&) + |xego; + $text=~ s|/usr/share/common-licenses/BSD + |$cgi->a({ -href=>"http://www.debian.org/misc/bsd.license" }, $&) + |xego; + + return $text; +} + +sub all_filters { + my ($text, $cgi) = @_; + + $text = encode_entities( $text, $cgi ); + $text = http_ftp_urls( $text, $cgi ); + $text = email_to_ddpo( $text, $cgi ); + $text = bugs_to_bts( $text, $cgi ); + $text = cve_to_mitre( $text, $cgi ); + $text = pseudo_markup( $text, $cgi ); + $text = common_licenses( $text, $cgi ); + + return $text; +} + +1; +__END__ + +=head1 SEE ALSO + +Parse::DebianChangelog + +=head1 AUTHOR + +Frank Lichtenheld, Efrank@lichtenheld.deE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2005 by Frank Lichtenheld + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +=cut