Highlight.pl
From Wiki at Neela Nurseries
- !/usr/bin/perl -T
- #!/usr/bin/perl
- ======================================================================
- FILE: highlight-like-grep.pl
- PURPOSE: to provide simple and quick HTML text highlighting,
- to aid in text based wiki content.
- NOTES: Started on 2016-12-05 by Ted Havelka.
- REFERENCES:
- * https://perlmaven.com/how-to-split-a-text-file-line-by-line
- * http://perldoc.perl.org/functions/sprintf.html
=for comment
%% a percent sign %c a character with the given number %s a string %d a signed integer, in decimal %u an unsigned integer, in decimal %o an unsigned integer, in octal %x an unsigned integer, in hexadecimal %e a floating-point number, in scientific notation %f a floating-point number, in fixed decimal notation %g a floating-point number, in %e or %f notation
%X like %x, but using upper-case letters %E like %e, but using an upper-case "E" %G like %g, but with an upper-case "E" (if applicable) %b an unsigned integer, in binary %B like %b, but using an upper-case "B" with the # flag %p a pointer (outputs the Perl value's address in hexadecimal) %n special: *stores* the number of characters output so far into the next argument in the parameter list %a hexadecimal floating point %A like %a, but using upper-case letters
%i a synonym for %d %D a synonym for %ld %U a synonym for %lu %O a synonym for %lo %F a synonym for %f
printf '%2$d %1$d', 12, 34; # prints "34 12" printf '%3$d %d %1$d', 1, 2, 3; # prints "3 1 1"
printf '<% d>', 12; # prints "< 12>" printf '<% d>', 0; # prints "< 0>" printf '<% d>', -12; # prints "<-12>" printf '<%+d>', 12; # prints "<+12>" printf '<%+d>', 0; # prints "<+0>" printf '<%+d>', -12; # prints "<-12>" printf '<%6s>', 12; # prints "< 12>" printf '<%-6s>', 12; # prints "<12 >" printf '<%06s>', 12; # prints "<000012>" printf '<%#o>', 12; # prints "<014>" printf '<%#x>', 12; # prints "<0xc>" printf '<%#X>', 12; # prints "<0XC>" printf '<%#b>', 12; # prints "<0b1100>" printf '<%#B>', 12; # prints "<0B1100>"
printf '<%+ d>', 12; # prints "<+12>" printf '<% +d>', 12; # prints "<+12>"
=cut
- ======================================================================
use strict;
use warnings;
- no warnings;
use 5.008;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sub usage
{
print "Usage: $0 [filename] [pattern_1] [highlight_color_1] [pattern_2] [highlight_color_2] [...]\n"; print " where filename is name of file to read,\n"; print " and pattern_1 is first pattern to highlight,\n"; print " highlight_color_1 is color to apply to pattern_1 instances,\n"; print " additional patterns and highlight colors optional . . .\n";
}
sub high_light_one_text_pattern {
- ----------------------------------------------------------------------
- * https://perlmaven.com/how-to-split-a-text-file-line-by-line
- ----------------------------------------------------------------------
my $caller = shift; my $filename = shift; my $pattern_1 = shift; my $highlight_color_1 = shift;
my $FILE; my $line; my $count_of_lines_processed = 0;
my $tag_for_highlight_1_open = ""; my $tag_for_highlight_1_close = "";
- - STEP - Bounds checking here on passed values:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- if ( length(...
open (FILE, $filename) or print "Could not open file '$filename' $!";
- - STEP - build text highlighting tag, and HTML tag to set font color:
$tag_for_highlight_1_open = "";
- - STEP - read file and highlight text, line by line:
$line = <FILE>;
- while ( ($line = <FILE>) && (1) )
while ( ($line ) && (1) ) { $line =~ s/${pattern_1}/${tag_for_highlight_1_open}${pattern_1}${tag_for_highlight_1_close}/g;
- print "$count_of_lines_processed: $line";
printf('%5s: %s', $count_of_lines_processed, $line); $line = <FILE>; ++$count_of_lines_processed; }
printf('closing text file \'%s\' . . .', $filename); close (FILE);
} # end subroutine high_light_one_text_pattern
sub high_light_five_text_patterns {
- ----------------------------------------------------------------------
- * https://perlmaven.com/how-to-split-a-text-file-line-by-line
- ----------------------------------------------------------------------
my $caller = shift; my $filename = shift; my $pattern_1 = shift; my $highlight_color_1 = shift; my $pattern_2 = shift; my $highlight_color_2 = shift; my $pattern_3 = shift; my $highlight_color_3 = shift; my $pattern_4 = shift; my $highlight_color_4 = shift; my $pattern_5 = shift; my $highlight_color_5 = shift;
my $FILE; my $line; my $count_of_lines_processed = 0;
my $tag_for_highlight_1_open = ""; my $tag_for_highlight_2_open = ""; my $tag_for_highlight_3_open = ""; my $tag_for_highlight_4_open = ""; my $tag_for_highlight_5_open = ""; my $tag_for_highlight_1_close = "";
print ": about to highlight up to five text patterns in lines of file . . .\n"; print "\n";
- - STEP - Bounds checking here on passed values:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- if ( length(...
open (FILE, $filename) or print "Could not open file '$filename' $!";
- - STEP - build text highlighting tag, and HTML tag to set font color:
if ( length($highlight_color_1) > 0 ) { $tag_for_highlight_1_open = ""; }
if ( length($highlight_color_2) > 0 ) { $tag_for_highlight_2_open = ""; }
if ( length($highlight_color_3) > 0 ) { $tag_for_highlight_3_open = ""; }
if ( length($highlight_color_4) > 0 ) { $tag_for_highlight_4_open = ""; }
if ( length($highlight_color_5) > 0 ) { $tag_for_highlight_5_open = ""; }
my $pattern_5 = shift; my $highlight_color_5 = shift;
my $FILE; my $line; my $count_of_lines_processed = 0;
my $tag_for_highlight_1_open = ""; my $tag_for_highlight_2_open = ""; my $tag_for_highlight_3_open = ""; my $tag_for_highlight_4_open = ""; my $tag_for_highlight_5_open = ""; my $tag_for_highlight_1_close = "";
print ": about to highlight up to five text patterns in lines of file . . .\n"; print "\n";
- - STEP - Bounds checking here on passed values:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- if ( length(...
open (FILE, $filename) or print "Could not open file '$filename' $!";
- - STEP - build text highlighting tag, and HTML tag to set font color:
if ( length($highlight_color_1) > 0 ) { $tag_for_highlight_1_open = ""; }
if ( length($highlight_color_2) > 0 ) { $tag_for_highlight_2_open = ""; }
- - STEP - read file and highlight text, line by line:
while ( ($line = <FILE>) && (1) ) { if ( length($highlight_color_1) > 0 ) {
- $line =~ s/${pattern_1}/${tag_for_highlight_1_open}${pattern_1}${tag_for_highlight_1_close}/g;
$line =~ s/(${pattern_1})/${tag_for_highlight_1_open}$1${tag_for_highlight_1_close}/g; }
if ( length($highlight_color_2) > 0 ) {
- $line =~ s/${pattern_2}/${tag_for_highlight_2_open}${pattern_2}${tag_for_highlight_1_close}/g;
$line =~ s/(${pattern_2})/${tag_for_highlight_2_open}$1${tag_for_highlight_1_close}/g; }
if ( length($highlight_color_3) > 0 ) {
- $line =~ s/${pattern_3}/${tag_for_highlight_3_open}${pattern_3}${tag_for_highlight_1_close}/g;
$line =~ s/(${pattern_3})/${tag_for_highlight_3_open}$1${tag_for_highlight_1_close}/g; }
if ( length($highlight_color_4) > 0 ) {
- $line =~ s/${pattern_4}/${tag_for_highlight_4_open}${pattern_4}${tag_for_highlight_1_close}/g;
$line =~ s/(${pattern_4})/${tag_for_highlight_4_open}$1${tag_for_highlight_1_close}/g; }
if ( length($highlight_color_5) gt 0 ) {
- $line =~ s/${pattern_5}/${tag_for_highlight_5_open}${pattern_5}${tag_for_highlight_1_close}/g;
$line =~ s/(${pattern_5})/${tag_for_highlight_5_open}$1${tag_for_highlight_1_close}/g; }
- print "$count_of_lines_processed: $line";
- printf('%5s: %s', $count_of_lines_processed, $line);
printf('%s', $line); ++$count_of_lines_processed }
print "\n"; printf(': closing text file \'%s\' . . .\n', $filename); close (FILE);
} # end subroutine high_light_five_text_patterns
- ----------------------------------------------------------------------
- - SECTION - main line code
- ----------------------------------------------------------------------
{
my $argc; my $filename = $ARGV[0]; my $pattern_1_to_highlight = $ARGV[1]; my $highlight_color_1 = $ARGV[2]; my $flag__show_usage = 0;
print "starting,\n";
if ( length($filename) > 0 ) { print "received filename to parse, filename is '$filename',\n"; } else { print "Warning - received no name of fil to parse!\n"; $flag__show_usage = 1; }
if ( length($pattern_1_to_highlight) > 0 ) { print "received first pattern to highlight, it is '$pattern_1_to_highlight'\n"; } else { print "Warning - received no pattern to highlight!\n"; $flag__show_usage = 1; }
if ( length($highlight_color_1) > 0 ) { print "received color of first highlight pattern '$highlight_color_1'\n"; } else { print "Warning - received no color for highlight pattern 1!\n"; $flag__show_usage = 1; }
if ( $flag__show_usage) { usage(); }
- - STEP - Check number of command line arguments, and select a highlighting
- routine based on this number:
$argc = @ARGV;
printf("received %d arguments,\n", $argc);
if ( $argc < 4 ) { print "calling routine to highlight one text pattern . . .\n";
- high_light_one_text_pattern("main", $filename, "CRC", "red");
high_light_one_text_pattern("main", $filename, $ARGV[1], $ARGV[2]); } else { print "calling routine to highlight between one and five text patterns . . .\n"; high_light_five_text_patterns("main", $ARGV[0], # the name of text file to read and highlight select text, $ARGV[1], $ARGV[2], # pattern 1, highlight color 1, $ARGV[3], $ARGV[4], # pattern 2, highlight color 2, $ARGV[5], $ARGV[6], # pattern 3, highlight color 3, $ARGV[7], $ARGV[8], # pattern 4, highlight color 4, $ARGV[9], $ARGV[10] # pattern 5, highlight color 5, ); }
print "done.\n\n";
}
- --- EOF ---