source: prepare highlighted lines before output
authorMischa POSLAWSKY <perl@shiar.org>
Wed, 24 Nov 2021 23:45:16 +0000 (00:45 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Mon, 6 Dec 2021 11:07:29 +0000 (12:07 +0100)
Code cleanup for readability and to facilitate upcoming caching.

source.plp

index f49c8edeea7788e3e5974e857d25d87af5ca74f6..e645cd25e7167c60f844bb7c7e6f3c21054815d8 100644 (file)
@@ -96,24 +96,20 @@ else {
                        my ($type, $contents) = @{$_};
                        $contents = decode_utf8($contents);
                        my $tag = $type && ($TYPETAG{$type} || 'span');
-                       my $arg = '';
-                       print "<$tag$arg class=\"sy-\l$type\">" if $tag;
-                       if (!$type || $type eq 'Constant'
-                       and $contents =~ s{^(['"]?)($incname)(?=\1$)}{}) {
-                               # link other page sources, stylesheets, and javascript
-                               print $1 . showlink($2, "/source/$2");
-                       }
-                       if (!$type and $contents =~ s/^(\s*)([A-Z]\w+(?:::\w+)+)(?![^;\s])//) {
-                               # link perl module names (Xx::Xx...)
-                               print $1 . showlink($2, "/source/$2");
-                       }
-                       if ($type && $type eq 'Comment'
-                       and $contents =~ s{^(.*? by )(tools/\S+)}{}) {
-                               # link generator scripts (by tools/...)
-                               print $1 . showlink($2, "/source/$2");
-                       }
-                       print Text::VimColor::_xml_escape($contents);
-                       print "</$tag>" if $tag;
+                       my $line = Text::VimColor::_xml_escape($contents);
+
+                       # link other page sources, stylesheets, and javascript
+                       $line =~ s{ ^(['"]?) \K ($incname) (?=\1$) }{ showlink($2, "/source/$2") }xe
+                               if !$type || $type eq 'Constant';
+                       # link perl module names (Xx::Xx...)
+                       $line =~ s{ ^\s* \K ([A-Z]\w+(?:::\w+)+) (?![^;\s]) }{ showlink($1, "/source/$1") }xe
+                               if !$type;
+                       # link generator scripts (by tools/...)
+                       $line =~ s{ ^.*? by\  \K (tools/\S+) }{ showlink($1, "/source/$1") }xe
+                               if $type && $type eq 'Comment';
+
+                       $line = qq(<$tag class="sy-\l$type">$line</$tag>) if $tag;
+                       print $line;
                }
                say '</pre>';
        }