diff-to-html.sh (1171B)
1 #!/bin/bash 2 # diff-to-html.sh 3 # Uso: ./diff-to-html.sh archivo.diff 4 5 if [ -z "$1" ]; then 6 echo "Uso: $0 <archivo.diff>" 7 exit 1 8 fi 9 10 if [ ! -f "$1" ]; then 11 echo "Error: El archivo '$1' no existe." 12 exit 1 13 fi 14 15 cat << 'EOF' 16 <pre><code class="diff"> 17 EOF 18 19 while IFS= read -r line || [ -n "$line" ]; do 20 # Convertir tabs a espacios (importante para indentación) 21 line="${line//$'\t'/ }" 22 23 # Escapar HTML 24 escaped="${line//&/&}" 25 escaped="${escaped//</<}" 26 escaped="${escaped//>/>}" 27 28 if [[ $line == From\ * ]] || \ 29 [[ $line == Date:\ * ]] || \ 30 [[ $line == Subject:\ * ]] || \ 31 [[ $line == diff\ --git* ]] || \ 32 [[ $line == index\ * ]] || \ 33 [[ $line == ---\ * ]] || \ 34 [[ $line == +++\ * ]]; then 35 echo "<span class=\"info\">$escaped</span>" 36 37 elif [[ $line == @@* ]]; then 38 echo "<span class=\"hunk\">$escaped</span>" 39 40 elif [[ $line == +* ]]; then 41 echo "<span class=\"add\">$escaped</span>" 42 43 elif [[ $line == -* ]]; then 44 echo "<span class=\"del\">$escaped</span>" 45 46 else 47 echo "$escaped" 48 fi 49 done < "$1" 50 51 cat << 'EOF' 52 </code></pre> 53 EOF