Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #
- # Convert diff output to colorized HTML.
- # sourced from https://www.linuxjournal.com/content/convert-diff-output-colorized-html
- cat <<XX
- <html>
- <head>
- <title>Colorized Diff</title>
- </head>
- <style>
- .diffdiv { border: solid 1px black; }
- .comment { color: gray; }
- .diff { color: #8A2BE2; }
- .minus3 { color: blue; }
- .plus3 { color: maroon; }
- .at2 { color: lime; }
- .plus { color: green; background: #E7E7E7; }
- .minus { color: red; background: #D7D7D7; }
- .only { color: purple; }
- </style>
- <body>
- <pre>
- XX
- echo -n '<span class="comment">'
- first=1
- diffseen=0
- lastonly=0
- OIFS=$IFS
- IFS='
- '
- # The -r option keeps the backslash from being an escape char.
- read -r s
- while [[ $? -eq 0 ]]
- do
- # Get beginning of line to determine what type
- # of diff line it is.
- t1=${s:0:1}
- t2=${s:0:2}
- t3=${s:0:3}
- t4=${s:0:4}
- t7=${s:0:7}
- # Determine HTML class to use.
- if [[ "$t7" == 'Only in' ]]; then
- cls='only'
- if [[ $diffseen -eq 0 ]]; then
- diffseen=1
- echo -n '</span>'
- else
- if [[ $lastonly -eq 0 ]]; then
- echo "</div>"
- fi
- fi
- if [[ $lastonly -eq 0 ]]; then
- echo "<div class='diffdiv'>"
- fi
- lastonly=1
- elif [[ "$t4" == 'diff' ]]; then
- cls='diff'
- if [[ $diffseen -eq 0 ]]; then
- diffseen=1
- echo -n '</span>'
- else
- echo "</div>"
- fi
- echo "<div class='diffdiv'>"
- lastonly=0
- elif [[ "$t3" == '+++' ]]; then
- cls='plus3'
- lastonly=0
- elif [[ "$t3" == '---' ]]; then
- cls='minus3'
- lastonly=0
- elif [[ "$t2" == '@@' ]]; then
- cls='at2'
- lastonly=0
- elif [[ "$t1" == '+' ]]; then
- cls='plus'
- lastonly=0
- elif [[ "$t1" == '-' ]]; then
- cls='minus'
- lastonly=0
- else
- cls=
- lastonly=0
- fi
- # Convert &, <, > to HTML entities.
- s=$(sed -e 's/\&/\&/g' -e 's/</\</g' -e 's/>/\>/g' <<<"$s")
- if [[ $first -eq 1 ]]; then
- first=0
- else
- echo
- fi
- # Output the line.
- if [[ "$cls" ]]; then
- echo -n '<span class="'${cls}'">'${s}'</span>'
- else
- echo -n ${s}
- fi
- read -r s
- done
- IFS=$OIFS
- if [[ $diffseen -eq 0 && $onlyseen -eq 0 ]]; then
- echo -n '</span>'
- else
- echo "</div>"
- fi
- echo
- cat <<XX
- </pre>
- </body>
- </html>
- XX
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement