#!/usr/bin/env bash # Parse the plain text file into an html file # # $1 source file name # $2 (optional) timestamp for the file # $3 (optional) destination file name # note that although timestamp is optional, something must be provided at its # place if destination file name is provided, i.e: # parse_file source.txt "" destination.html declare convert_filename declare template_tags_line_header declare prefix_tags declare global_author parse_file() { # Read for the title and check that the filename is ok title="" while IFS='' read -r line; do if [[ -z $title ]]; then # remove extra

and

added by markdown title=$(echo "$line" | sed 's/<\/*p>//g') if [[ -n $3 ]]; then filename=$3 else filename=$title [[ -n $convert_filename ]] && filename=$(echo "$title" | eval "$convert_filename") [[ -n $filename ]] || filename=$RANDOM # don't allow empty filenames filename=$filename.html # Check for duplicate file names while [[ -f $filename ]]; do filename=${filename%.html}$RANDOM.html done fi content=$filename.tmp # Parse possible tags elif [[ $line == "

$template_tags_line_header"* ]]; then tags=$(echo "$line" | cut -d ":" -f 2- | sed -e 's/<\/p>//g' -e 's/^ *//' -e 's/ *$//' -e 's/, /,/g') IFS=, read -r -a array <<<"$tags" echo -n "

$template_tags_line_header " >>"$content" for item in "${array[@]}"; do echo -n "$item, " done | sed 's/, $/<\/p>/g' >>"$content" else echo "$line" >>"$content" fi done <"$1" # Create the actual html page create_html_page "$content" "$filename" no "$title" "$2" "$global_author" rm "$content" }