Given any plain-old plain-text file, creates a new HTML file which, when viewed in a browser, displays a listing of the original text file (with optional line numbers). The input file can even itself be a HTML file.
Specifically:
This script uses sed(1) to do all the text transformations.
This listing was itself produced by running txt2html on itself:
txt2html -n < txt2html > txt2html_list.html
See "Usage" remarks in the list below for instructions.
1 #!/bin/bash
2 # txt2html
3 # L. J. Jaeckel
4 # March 5, 2011
5 #
6 # Convert any plain text file to a HTML file that, when viewed,
7 # will show what the original file had. The input can even
8 # be a HTML file.
9
10 # Usage:
11 # ------
12 # As currently written, this script is strictly a simple
13 # stdin --> stdout filter. It will not take input from
14 # a named file argument on the command line. It only
15 # reads from stdin. It will take one argument, -n
16 # to produce a line numbered listing.
17 #
18 # Right: txt2html < infile > outfile
19 # Right: txt2html -n < infile > outfile
20 #
21 # Wrong: txt2html infile > outfile
22 # Wrong: txt2html -n infile > outfile
23 #
24 # The output file has some template header lines (including
25 # the <title>xxxxx</title> line) that you will probably want
26 # to edit manually.
27
28 lnums=''
29 indarg1='s/^/ /'
30 if [ "$1" = "-n" ]
31 then
32 lnums=-n
33 indarg1='1s/x/x/'
34 fi
35
36 cat $lnums | sed -e '1i\
37 <html>\
38 <head>\
39 <title>Listing of file</title>\
40 <style type="text/css">\
41 cmnt {color:green; font-style:italic}\
42 cmnd {font-family:Courier; text-decoration:underline}\
43 inp {color:red; font-weight:bold; text-decoration:underline}\
44 badd {color:red; font-weight:bold}\
45 look {background-color:yellow}\
46 </style>\
47 </head>\
48 <body>\
49 <strong>L. J. Jaeckel</strong><br />\
50 <strong>CMPSC 210 — Linux System Administration</strong><br />\
51 <strong>'"`date '+%B %-e, %Y'`"'</strong><br /><br />\
52 <center>\
53 <h2><strong>Listing of file</strong></h2>\
54 </center>\
55 <p>Put any remarks you want here, or delete this line altogether.</p>\
56 <hr />\
57 <pre>' -e \
58 's/&/\&/g' -e \
59 's/</\</g' -e \
60 's/>/\>/g' -e \
61 "$indarg1" -e \
62 '$a\
63 <hr />\
64 </pre>\
65 </body>\
66 </html>\
67 '
68