# shellcheck shell=dash

xrc:mod:lib line    \
    iter/wrap iter/join             \
    iter/arg1 iter/args iter/prf    \
    iter/duo iter/uni iter/uno      \
    two/minus

___x_cmd_line___main(){
    [ "$#" -gt 0 ] ||   set -- --help

    local op="$1"; shift
    case "$op" in
        wrap|wrap_|map|eval|\
        join|join_|\
        prf|uni|duo|uno|minus|arg1|args|prln|\
        from_|fromcomma_|fromcolon_)
                            ___x_cmd_line_"${op}"       "$@" ;;

        -h|--help)          ___x_cmd help -m line       "$@" ;;
        *)                  ___x_cmd_line_prf "$op"     "$@" ;;
    esac
}


___x_cmd_line_prln(){
    case "$1" in
        -h|--help)      ___x_cmd help -m line   prln "$@"; return ;;
        --)             shift ;;
    esac

    local IFS=' '
    printf "%s\n" "$@"
}

___x_cmd_line_from_(){
    local srcstr="$1"
    local elem=""
    x_=""

    while [ -n "$srcstr" ]; do
        case "$srcstr" in
            *:*)    elem="${srcstr%%:*}";   srcstr="${srcstr#*:}" ;;
            *,*)    elem="${srcstr%%,*}";   srcstr="${srcstr#*,}" ;;
            *" "*)  elem="${srcstr%%" "*}"; srcstr="${srcstr#*" "}" ;;
            *)      elem="$srcstr";         srcstr="" ;;
        esac
        [ -z "$elem" ] || x_="${x_}${elem}
"
    done
}

___x_cmd_line_fromcomma_(){
    local srcstr="$1"
    local elem=""
    x_=""

    while [ -n "$srcstr" ]; do
        case "$srcstr" in
            *,*)    elem="${srcstr%%,*}";   srcstr="${srcstr#*,}" ;;
            *)      elem="$srcstr";         srcstr="" ;;
        esac
        [ -z "$elem" ] || x_="${x_}${elem}
"
    done
}

___x_cmd_line_fromcolon_(){
    local srcstr="$1"
    local elem=""
    x_=""

    while [ -n "$srcstr" ]; do
        case "$srcstr" in
            *:*)    elem="${srcstr%%:*}";   srcstr="${srcstr#*:}" ;;
            *)      elem="$srcstr";         srcstr="" ;;
        esac
        [ -z "$elem" ] || x_="${x_}${elem}
"
    done
}

