X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fxscreensaver-text;fp=driver%2Fxscreensaver-text;h=6c0b63d48d23a749923e0fa937328c5300201d48;hb=5f1f12f2a37da634000f96d18d59cc73a8814ef7;hp=fbcb9ee1879fd7b9d7e9b078da26f60daad53569;hpb=3243731044b944673630b55e16674c191b026f84;p=xscreensaver diff --git a/driver/xscreensaver-text b/driver/xscreensaver-text index fbcb9ee1..6c0b63d4 100755 --- a/driver/xscreensaver-text +++ b/driver/xscreensaver-text @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2005-2009 Jamie Zawinski +# Copyright © 2005-2010 Jamie Zawinski # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -30,7 +30,7 @@ use Text::Wrap qw(wrap); use bytes; my $progname = $0; $progname =~ s@.*/@@g; -my $version = q{ $Revision: 1.18 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/; +my $version = q{ $Revision: 1.21 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/; my $verbose = 0; my $http_proxy = undef; @@ -132,15 +132,19 @@ sub de_entify($) { my ($text) = @_; $text =~ s/(&(\#)?([[:alpha:]\d]+);?)/ { - my $c; - if ($2) { - $c = chr($3); # the &#number is always decimal, right? + my $c = $3; + if (! defined($2)) { + $c = $entity_table{$c}; # for Á } else { - $c = $entity_table{$3}; + if ($c =~ m@^x([\dA-F]+)$@si) { # for A + $c = chr(hex($1)); + } elsif ($c =~ m@^\d+$@si) { # for A + $c = chr($c); + } else { + $c = undef; + } } -# print STDERR "$progname: warning: unknown HTML character entity \"$1\"\n" -# unless $c; - ($c ? $c : "[$3]"); + ($c || "[$3]"); # for &unknown; => "[unknown]" } /gexi; return $text; @@ -424,7 +428,8 @@ sub output() { sub get_url_1($;$) { my ($url, $referer) = @_; - if (! ($url =~ m@^(http|feed)://@i)) { + $url =~ s@^feed:@http:@si; + if (! ($url =~ m@^http://@i)) { error ("not an HTTP URL: $url"); } @@ -610,8 +615,18 @@ sub reformat_html($$) { my ($body, $rss_p) = @_; $_ = $body; + # In HTML, try to preserve newlines inside of PRE. + # + if (! $rss_p) { + s@(]*>\s*)(.*?)(/gs; + $a . $b . $c; + }@gsexi; + } + if (! $rss_p) { - # In HTML, unfold lines (this breaks PRE. Sue me.) + # In HTML, unfold lines. # In RSS, assume \n means literal line break. s@[\r\n]@ @gsi; }