App-Greple-xlate

 view release on metacpan or  search on metacpan

script/xlate  view on Meta::CPAN

##############################################################################
# Option definitions
##############################################################################

define USAGE <<END
$myname - Translation CLI front-end

Usage: $myname [ options ] -t LANG FILE [ greple options ]
END

declare -A OPTS=(
    [&USAGE]="$USAGE" [&REQUIRE]=0.8 [&PERMUTE]=
    # Basic options
    [     debug | d     # debug mode (enables trace)       ]=
    [     trace         # trace mode                       ]=
    [     quiet | q     # quiet mode                       ]=
    [      help | h  !  # show help                        ]=
    [   version      !  # show version                     ]=
    # Translation options
    [       api | a     # use API                          ]=
    [     check | c     # just check translation area      ]=
    [   refresh | r     # refresh cache                    ]=
    [    update | u     # force update cache               ]=
    [    silent | s     # silent mode                      ]=
    [    dryrun | n     # dry-run                          ]=
    [    engine | e :   # translation engine               ]=
    [      wrap | w :   # wrap line width                  ]=
    [    format | o :   # output format                    ]=
    [ from-lang | b :   # base language                    ]=
    [   to-lang | t :   # target language                  ]=
    [    maxlen | m :   # max length per API call          ]=
    [  maskfile | x :   # mask patterns file               ]=
    [  glossary | g :   # glossary file                    ]=
    [   pattern | p @   # pattern to determine area        ]=
    [      file | f @   # pattern file                     ]=
    [   library | l :!  # show library files               ]=
    # Make option
    [      make | M     # run make                         ]=
    # Docker options
    [     image | I :!          # Docker image             ]=
    [    docker | D  !          # run xlate on Docker      ]=
    [   command | C  !          # run command on Docker    ]=
    [      live | L  !          # use live container       ]=
    [      kill | K  !          # kill container           ]=
    [       env | E @>dozo_opts # environment variable     ]=
    [ mount-cwd | W  >dozo_opts # mount cwd                ]=
    [ mount-home| H  >dozo_opts # mount home               ]=
    [    volume | V @>dozo_opts # additional volume        ]=
    [   unmount | U  >dozo_opts # do not mount             ]=
    [  mount-ro | R  >dozo_opts # mount read-only          ]=
    [     batch | B  >dozo_opts # batch mode               ]=
    [      name | N :>dozo_opts # container name           ]=
    [      port | P @>dozo_opts # port mapping             ]=
    [     other | O @>dozo_opts # additional docker option ]=
)

##############################################################################
# Parse options
##############################################################################

# Save args for get_remaining_args (used by callbacks)
declare -a PARSE_ARGS=("$@")

. getoptlong.sh OPTS "${PARSE_ARGS[@]}" || die "getoptlong.sh not found"

# Debug mode (currently enables trace)
[[ ${debug:-} ]] && trace=1

# Trace mode
[[ ${trace:-} ]] && set -x

find_gmake() {
    local make
    (( $# == 0 )) && set make gmake gnumake
    for make in "$@"
    do
	[[ $("$make" --version) =~ GNU ]] && { echo "$make"; return 0; }
    done
    return 1
}

##
## Make
##
if [[ ${make:-} ]]; then
    declare -a opt
    for m in "$@"; do
        if [[ -f $m ]]; then
            # GNU Make behaves differently in different versions with
            # respect to double-quoted strings and spaces within them.
            files="${files:+$files|||}$m"
        else
            opt+=("$m")
        fi
    done
    unset MAKELEVEL
    gmake=$(find_gmake) || { warn "GNU Make is required."; exit 1; }
    exec $gmake -f "$share/XLATE.mk" \
         ${dryrun:+-n} \
         XLATE_LANG=\""${to_lang:-}"\" \
         XLATE_DEBUG=${debug:-} \
         XLATE_MAXLEN=${maxlen:-} \
         XLATE_USEAPI=${api:-} \
         XLATE_UPDATE=${update:-} \
         ${engine:+XLATE_ENGINE=\""$engine"\"} \
         ${format:+XLATE_FORMAT=\""$format"\"} \
         ${files:+XLATE_FILES=\""$files"\"} \
         "${opt[@]}" \
    || exit 1
fi

if [[ ! ${to_lang:-} ]]; then
    warn "$myname: -t option is required."
    exit 1
fi

: ${format:=xtxt}
: ${engine:=deepl}

if [[ $format =~ ^(.+)-fold$ ]]; then
    format=${BASH_REMATCH[1]}



( run in 1.714 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )