From 0b29b069930fb49ee4ae95ad25f90d60c94d0178 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 7 May 2025 16:43:51 +0300 Subject: [PATCH] URLise links --- zk | 63 ++++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/zk b/zk index 8b2a8d7..a65ff5c 100755 --- a/zk +++ b/zk @@ -179,6 +179,20 @@ sub startBody { "; } + +my %schemes = ( + "finger" => 1, + "ftp" => 1, + "gemini" => 1, + "gopher" => 1, + "http" => 1, + "https" => 1, + "irc" => 1, + "ircs" => 1, + "news" => 1, + "telnet" => 1, +); + use File::Spec; sub genHTML { @@ -186,27 +200,47 @@ sub genHTML { my $page = shift; my @lnks = defined $links{$page} ? @{$links{$page}} : (); my @rels; - my $rel; - foreach (@lnks) { - $rel = File::Spec->abs2rel($_, $page); - $rel = substr $rel, 3; - if (-d $rel) { - $rel .= "/index"; + { + my $rel; + foreach (@lnks) { + $rel = File::Spec->abs2rel($_, $page); + $rel = substr $rel, 3; + if (-d $rel) { + $rel .= "/index"; + } + push @rels, $rel; } - push @rels, $rel; } startBody $out, $page; print $out "
\n";
     open(my $fh, "<", $page) or die "$!";
     while (<$fh>) {
-        s/&/\&/g;
-        s//\>/g;
-        my $rel;
-        while (my ($i, $l) = each @lnks) {
-            s/\[$l\]/[$l]<\/a>/g;
+        my @ws;
+        chop;
+        /( *)$/;
+        my $tail = $1;
+        foreach my $w (split / /) {
+            my ($scheme, $authority, $path, $query, $fragment) = $w =~
+                m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;
+            if (defined $scheme and exists $schemes{$scheme}) {
+                my $e = $w;
+                $e =~ s/&/\&/g;
+                $w = "$e";
+            } else {
+                if ($w =~ m/^\[.+\]$/) {
+                    while (my ($i, $l) = each @lnks) {
+                        $w =~ s/\[$l\]/[$l]<\/a>/g;
+                    }
+                } else {
+                    $w =~ s/&/\&/g;
+                    $w =~ s//\>/g;
+                }
+            }
+            push @ws, $w;
         }
-        print $out $_;
+        my $w = join " ", @ws;
+        print $out "${w}${tail}\n";
     }
     close $fh;
     print $out "
\n"; @@ -223,6 +257,7 @@ sub genHTML { @lnks = sort keys %{$backs{$page}}; if ($#lnks != -1) { print $out "\n"; + my $rel; foreach my $l (@lnks) { $rel = File::Spec->abs2rel($l, $page); $rel = substr $rel, 3; -- 2.48.1
Backlinks