]> git.xolatile.top Git - emil-bake.git/commitdiff
Better shake, but not perfect shake
authorEmil Williams <emilwilliams@tuta.io>
Sat, 2 Mar 2024 07:48:19 +0000 (07:48 +0000)
committerEmil Williams <emilwilliams@tuta.io>
Sat, 2 Mar 2024 07:48:19 +0000 (07:48 +0000)
shake

diff --git a/shake b/shake
index d309400ad4972a5a4fe15ec370c2f3fd19c2ca71..f41cc1a13664f1078d016666a6f2250a7b95fa44 100755 (executable)
--- a/shake
+++ b/shake
@@ -1,35 +1,39 @@
 #!/bin/bash
 
-# Originally written by anon, modified
+# Originally written by Anon, modified by Emil to better match Bake functionality
+
+# Issues: sloooow, fails to handle multi-line statements
 
 BLUE='\033[34m'
 GREEN='\033[32m'
+YELLOW='\033[93m'
+DIM='\033[2m'
 BOLD='\033[1m'
 NORMAL='\033[0m'
 
 MARKNAME="@BAKE"
 MARK="${MARKNAME} "
-MARKSTR="${BLUE}${MARKNAME}${NORMAL}"
+MARKSTR="${GREEN}${MARKNAME}${NORMAL}"
+
 enable -n echo
+
 usage() {
-    IFSTR="${GREEN}<input_file>${NORMAL}"
-    echo -e "${BOLD}Usage: $0 <input_file>${NORMAL}" >&2
-    echo -e "\t$0 runs the value of ${MARKSTR}." >&2
-    echo -e "\tThe point of this script is ease to compialation of single source file (toy) programs." >&2
-    echo -e "\tThe value of ${MARKSTR} is read from ${IFSTR} in is whatever comes after '${MARK}' until the end of the line." >&2
-    echo -e "\tInside the value of ${MARKSTR} all mentions of special placeholders are replaced:" >&2
-    echo -e "\t\t${BLUE}\$@${NORMAL} - ${IFSTR}"
-    echo -e "\t\t${BLUE}\$*${NORMAL} - ${IFSTR} with the last extension cut off"
-    echo -e "\t\t${BLUE}\$+${NORMAL} - All remaining arguments"
+    echo -e "$0: [option] ${BOLD}target-file${NORMAL} [${GREEN}arguments${NORMAL} ...]\n"
+    echo -e "Use the format \`${BOLD}@BAKE${NORMAL} cmd ...' within the ${BOLD}target-file${NORMAL}."
+    echo -e "This will execute until the end of line, or if existing, until the ${BOLD}@STOP${NORMAL} marker.\n"
+    echo -e "Options [Must be first]"
+    echo -e "\t${DIM}-h --help${NORMAL}, ${BOLD}-n --dry-run${NORMAL}\n"
+    echo -e "Expansions\n"
+    echo -e "\t${YELLOW}@FILENAME${NORMAL}  returns target-file                (abc.x.txt)"
+    echo -e "\t${YELLOW}@SHORT${NORMAL}     returns target-file without suffix (^-> abc.x)"
+    echo -e "\t${YELLOW}@ARGS${NORMAL}      returns ${GREEN}arguments${NORMAL}"
 }
 
 if [[ $# -lt 1 ]]; then
     usage
     exit 1
 fi
+
 if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
     usage
     exit 0
@@ -47,23 +51,31 @@ fi
 
 input_file=$1
 shift 1
+
 if [[ ! -f $input_file ]]; then
     echo -e "Input file '$input_file' does not exist." >&2
     exit 1
 fi
 
+cd $(dirname "$(readlink -f "$input_file")")
+input_file=${input_file##*/}
+
 line=$(grep "$MARK" "$input_file" | head -1)
-line=${line//\$@/$input_file}
-line=${line//\$\*/${input_file%.*}}
-line=${line//\$+/$@}
 
 if [[ -n $line ]]; then
+
+    line=${line//\$@/$input_file}
+    line=${line//\$\*/${input_file%.*}}
+    line=${line//\$+/$@}
+    line=${line//@FILENAME/$input_file}
+    line=${line//@SHORT/${input_file%.*}}
+    line=${line//@ARGS/$@}
+    line=$(echo "$line" | sed 's/\W*@STOP.*//')
+
     command="${line#*${MARK}}"
-    command=$(echo $command | sed 's/[^\\]\?#.*//')
-    echo "Exec: $command"
+    echo -e "${BOLD}${GREEN}$0${NORMAL}: $command"
     if [[ $run -eq 1 ]]; then
-        echo "Output:"
+        echo -e "${BOLD}${GREEN}output${NORMAL}:"
         sh -c "$command"
     fi
 else