obs-StreamFX/tools/argparse.sh

144 lines
3.3 KiB
Bash
Raw Normal View History

2022-08-03 02:00:13 +00:00
#!/bin/bash
# Usage
# - Call argparse after registering all Options and Commands.
#
#! Option Handlers: '-name', '--name'
# - $1 will be the exact key (The 'name' part of '-name', '--name').
# - $2 will be the value either assigned with = or as a second argument.
# - ARGPARSE_USED must be set to 1 if $2 was used by the handler.
# - A status code of 0 must be returned if parsing was successful.
# - A status code of 1 must be returned if parsing failed.
#
#! Command Handlers: 'name'
# - $1 will be the exact key ('name' part)
# - $2 will contain the remaining arguments.
# - ARGPARSE_USED must be set to the number of arguments used by the handler.
# - A status code of 0 must be returned if parsing was successful.
# - A status code of 1 must be returned if parsing failed.
################################################################################
# Variables
################################################################################
# Where is this script really?
SELF=`realpath "$0"`
# Known and Unknown arguments
declare -a ARGPARSE_KNOWN
declare -a ARGPARSE_UNKNOWN
# Options
declare -a ARGPARSE_OPTIONS
# Commands
declare -a ARGPARSE_COMMANDS
################################################################################
# Main Functionality
################################################################################
function argparse_split_option {
OPTION="$1"
IFS=";" read -a OPTION <<< ${OPTION}
IFS="," read -a OPTION_NAMES <<< ${OPTION[0]}
OPTION_FUNCTION=${OPTION[1]}
OPTION_HELP=${OPTION[2]}
}
function argparse_parse_arg {
ARGPARSE_KEY=$1
ARGPARSE_VALUE=$2
ARGPARSE_HAS_ASSIGN=`false`
if [[ "$KEY" =~ .*=.* ]]; then
ARGPARSE_HAS_ASSIGN=`true`
VALUE=${${KEY}//.*=/}
KEY=${${KEY}//=.*/}
fi
}
function argparse_option {
# Parse Key=Value structures
argparse_split_option ${3}
for OPTION_NAME in "${OPTION_NAMES[@]}"; do
if [[ "$1" == "${OPTION_NAME}" ]]; then
${OPTION_FUNCTION} ${}
fi
done
}
function argparse {
# Parse both Options and Commands
while (( $# )); do
argparse_parse_arg "$@"
echo "$1"
for ARGPARSE_OPTION in "${ARGPARSE_OPTIONS[@]}"; do
done
for ARGPARSE_COMMAND in "${ARGPARSE_COMMANDS[@]}"; do
argparse_split_option ${ARGPARSE_COMMAND}
echo " c $ARGPARSE_COMMAND"
done
if ARGPARSE_HAS_ASSIGN; then
shift
else
shift 2
fi
done
#declare -a ARGS
#while (( $# )); do
# ARGS+=("$1")
# shift
#done
# echo "$7"
# # Parse the array one by one, filling either the known or unknown array.
# while (( ${#ARGPARSE_ARGS[@]} )); do
# argparse_parse
# if $? =
# done
}
################################################################################
# Command: Help
################################################################################
# function argparse_help {
# echo "${SELF} [<options>] <command> ..."
# echo " Options: "
# echo ""
# echo " Commands: "
# # We only handled $1, so return 0
# return 0
# }
# COMMANDS+=("-h,--help;argparse_help;Show this help.")
# function parse_flag {
# RET_NO_ARGS=0
# RET_ONE_ARG=1
# RET_TWO_ARG=2
# case "$KEY" in
# "-qt"|"--qt-version")
# QT_VERSION=${VALUE}
# return ${RET_TWO_ARG}
# ;;
# "-ssl"|"--ssl-flavor")
# SSL=${VALUE}
# return ${RET_TWO_ARG}
# ;;
# "-s"|"--silent"|"-q"|"--quiet")
# SILENT=TRUE
# return ${RET_ONE_ARG}
# ;;
# *) # Nothing was parsed.
# return ${RET_NO_ARGS}
# esac
# }