diff --git a/convert_to_markdown-bash.sh b/convert_to_markdown-bash.sh index 7453956..c59eff4 100755 --- a/convert_to_markdown-bash.sh +++ b/convert_to_markdown-bash.sh @@ -1,37 +1,39 @@ #!/bin/bash -INPUT_FILE="input.txt" -OUTPUT_FILE="output.md" +# Konfiguration +INPUT_FILE=$1 +OUTPUT_FILE=$2 +SPACES_PER_LEVEL=4 +LIST_INDENTATION=2 +HEADER_LEVELS=3 -# Schritt 1: Tabs durch 4 Leerzeichen ersetzen (ohne expand) +# Tabs zu Leerzeichen konvertieren sed 's/\t/ /g' "$INPUT_FILE" > temp_processed.txt -# Schritt 2: Hierarchische Listen generieren -while IFS= read -r line; do - # Zähle führende Leerzeichen - spaces=$(echo "$line" | grep -o '^ *' | wc -c) - spaces=$((spaces - 1)) # wc -c zählt Nullbyte - - # Berechne Ebene - level=$((spaces / 4)) - - # Generiere Einrückung - indent="" - for ((i=0; i 0 )); then - # Entferne originale Einrückung und füge MD-Formatierung hinzu - clean_line="${line:$spaces}" - new_line="${indent}- ${clean_line}" - else - new_line="$line" - fi - - echo "$new_line" -done < temp_processed.txt > "$OUTPUT_FILE" +# Ausgabedatei leeren +> "$OUTPUT_FILE" -# Aufräumen +# Verarbeitung jeder Zeile +while IFS= read -r line; do + # Führende Leerzeichen ermitteln + leading_spaces=${line%%[! ]*} + total_spaces=${#leading_spaces} + + # Ebene berechnen + level=$((total_spaces / SPACES_PER_LEVEL)) + content="${line:total_spaces}" + + if (( level <= HEADER_LEVELS )); then + # Überschriften formatieren + hashtags=$(printf "%0.s#" $(seq 0 $level)) + echo "${hashtags} ${content}" >> "$OUTPUT_FILE" + else + # Listen formatieren + list_level=$((level - HEADER_LEVELS - 1)) + indent=$(printf "%*s" $((LIST_INDENTATION * list_level)) "") + echo "${indent}- ${content}" >> "$OUTPUT_FILE" + fi +done < temp_processed.txt + +# Temporäre Datei aufräumen rm temp_processed.txt diff --git a/convert_to_markdown.sh b/convert_to_markdown.sh index f14a0f5..6c42f14 100755 --- a/convert_to_markdown.sh +++ b/convert_to_markdown.sh @@ -1,32 +1,39 @@ #!/bin/bash -INPUT_FILE="input.txt" -OUTPUT_FILE="output.md" +# Variablen definieren +INPUT_FILE=$1 +OUTPUT_FILE=$2 +SPACES_PER_LEVEL=4 +LIST_INDENTATION=2 +HEADER_LEVELS=3 -# Tabs zu 4 Leerzeichen konvertieren OHNE andere Leerzeichen zu verändern sed 's/\t/ /g' "$INPUT_FILE" > temp_processed.txt -# AWK-Verarbeitung mit exakter Ebenenerkennung -awk ' +awk -v spaces_per_level=$SPACES_PER_LEVEL -v list_indentation=$LIST_INDENTATION -v header_levels=$HEADER_LEVELS ' { - # Gesamtzahl der führenden Leerzeichen ermitteln match($0, /^ */) total_spaces = RLENGTH - - # Ebene berechnen (1 Ebene = 4 Leerzeichen) - level = int(total_spaces / 4) - - # Neue Einrückung generieren - indent = "" - for (i = 0; i < level; i++) { - indent = indent " " + level = int(total_spaces / spaces_per_level) + + # Überschriften (bis zur angegebenen Ebene) + if (level <= header_levels) { + hashtags = "" + for (i = 0; i <= level; i++) { + hashtags = hashtags "#" + } + $0 = hashtags " " substr($0, total_spaces + 1) + } + # Listen (ab der nächsten Ebene) + else { + list_level = level - header_levels - 1 + # Anpassung der Einrückung basierend auf LIST_INDENTATION + adjusted_indent = "" + for (i = 0; i < list_indentation * list_level; i++) { + adjusted_indent = adjusted_indent " " + } + $0 = adjusted_indent "- " substr($0, total_spaces + 1) } - # Zeile neu aufbauen - if (level > 0) { - # Original-Leerzeichen entfernen und durch MD-konforme ersetzen - $0 = indent "- " substr($0, total_spaces + 1) - } print }' temp_processed.txt > "$OUTPUT_FILE"