#!/bin/bash # A simple helper tool to create valid Gophermap info lines from the standard input # Features: # - implemented in pure Bash and doesn't depend on wc (that can have a non-standard implementation) # - aligns the spaces according to the longest line so that the output would look nice in plaintext too # - doesn't do any heuristics but allows you to specify the amount of leading and trailing spaces (0 by default) # - allows visual selector/host placeholder customization (';' by default) # - converts LF-only line endings to CRLF (as required by the RFC) without unix2dos dependency # - only outputs to stdout (but you can redirect it into a file if you need to) # # Usage: cat [file] | gopherinfo.sh [leading_spaces] [trailing_spaces] [placeholder_char] # # Created by Luxferre in 2023, released into public domain LSPACES="$1" TSPACES="$2" DELIM="$3" TAB=$'\t' CRLF=$'\r\n' [[ -z "$LSPACES" ]] && LSPACES=0 [[ -z "$TSPACES" ]] && TSPACES=0 [[ -z "$DELIM" ]] && DELIM=';' readarray -t LINES -d $'\n' # read the input line array (split by LF) LINECOUNT=${#LINES[@]} # get the array length MAXLEN=0 # initialize the maximum length variable for ((idx=0;idx MAXLEN )) && MAXLEN=$llen # update the current maximum length LINES[$idx]="$line" # update the element by index done fmtstr="%-$(( LSPACES + 1 ))s%-$(( MAXLEN + TSPACES ))s${TAB}%s${TAB}%s${TAB}0${CRLF}" # params: i, line, DELIM, DELIM for line in "${LINES[@]}"; do # second pass to actually output the formatted lines printf "$fmtstr" 'i' "$line" "$DELIM" "$DELIM" done