summaryrefslogtreecommitdiff
path: root/mnv/src/mnvtutor
diff options
context:
space:
mode:
Diffstat (limited to 'mnv/src/mnvtutor')
-rwxr-xr-xmnv/src/mnvtutor213
1 files changed, 213 insertions, 0 deletions
diff --git a/mnv/src/mnvtutor b/mnv/src/mnvtutor
new file mode 100755
index 0000000000..ff4f777a74
--- /dev/null
+++ b/mnv/src/mnvtutor
@@ -0,0 +1,213 @@
+#!/bin/sh
+
+# Start MNV on a copy of the tutor file.
+
+# Type "man mnvtutor" (or "mnvtutor --help") to learn more about the supported
+# command-line options.
+#
+# Tutors in several human languages are distributed. Type "mnvtutor" to use
+# a tutor in the language of the current locale (:help v:lang), if available;
+# otherwise fall back to using the English tutor. To request any bundled
+# tutor, specify its ISO639 name as an argument, e.g. "mnvtutor nl".
+
+# MNV could be called "mnv" or "vi". Also check for "mnvN", for people who
+# have MNV installed with its version number.
+seq="mnv mnv91 mnv90 mnv81 mnv80 mnv8 mnv74 mnv73 mnv72 mnv71 mnv70 mnv7 mnv6 vi"
+
+usage()
+{
+ echo "==USAGE========================================================================================="
+ echo "${0##*/} [[-(-l)anguage] ISO639] [-(-c)hapter NUMBER] [-(-g)ui] | [-(-h)elp] | [--list]"
+ printf "\twhere:\n"
+ printf "\t\tISO639 (default=en) is a 2 or 3 character language code\n"
+ printf "\t\tNUMBER (default=1) is a chapter number (1 or 2)\n"
+ printf "\texamples:\n"
+ printf "\t\tmnvtutor -l es -c 2 -g\n"
+ printf "\t\tmnvtutor --language de --chapter 2\n"
+ printf "\t\tmnvtutor fr\n"
+ echo "More information at 'man mnvtutor'"
+ echo "================================================================================================"
+}
+
+listOptions()
+{
+ echo "==OPTIONS======================================================================================="
+ echo "Chapter: 1"
+ printf "\tLang: %-3s => %s\n" \
+bar Bavarian \
+bg Bulgarian \
+ca Catalan \
+cs Czech \
+da Danish \
+de German \
+el Greek \
+en English\(default\) \
+eo Esperanto \
+es Spanish \
+fr French \
+hr Croatian \
+hu Hungarian \
+it Italian \
+ja Japanese \
+ko Korean \
+lt Lithuanian \
+lv Latvian \
+nb Bokmål \
+nl Dutch \
+no Norwegian \
+pl Polish \
+pt Portuguese \
+ru Russian \
+sk Slovak \
+sr Serbian \
+sv Swedish \
+tr Turkish \
+uk Ukrainian \
+vi Vietnamese \
+zh Chinese
+
+ echo "Chapter: 2"
+ printf "\tLang: %-3s => %s\n" \
+en English\(default\) \
+fr French
+ echo "================================================================================================"
+}
+
+validateLang()
+{
+ case "$xx" in
+ '' | *[!a-z]* )
+ echo "Error: iso639 code must contain only [a-z]"
+ exit 1
+ esac
+
+ case "${#xx}" in
+ [23] )
+ ;;
+ * )
+ echo "Error: iso639 code must be 2 or 3 characters only"
+ exit 1
+ esac
+
+ export xx
+}
+
+validateChapter()
+{
+ case "$cc" in
+ '' | *[!0-9]* )
+ echo "Error: chapter argument must contain digits only"
+ exit 1
+ ;;
+ [12] )
+ ;;
+ * )
+ echo "Error: invalid chapter number: [12]"
+ exit 1
+ esac
+
+ export CHAPTER="$cc"
+}
+
+while [ "$1" != "" ]; do
+ case "$1" in
+ -g | --gui )
+ seq="gmnv gmnv91 gmnv90 gmnv81 gmnv80 gmnv8 gmnv74 gmnv73 gmnv72 gmnv71 gmnv70 gmnv7 gmnv6 $seq"
+ ;;
+ -l | --language )
+ shift
+ xx="$1"
+ validateLang
+ ;;
+ -l[a-z][a-z][a-z] | -l[a-z][a-z] )
+ export xx="${1#*l}"
+ ;;
+ --language[a-z][a-z][a-z] | --language[a-z][a-z] )
+ export xx="${1#*e}"
+ ;;
+ [a-z][a-z][a-z] | [a-z][a-z] )
+ export xx="$1"
+ ;;
+ -c | --chapter )
+ shift
+ cc="$1"
+ validateChapter
+ ;;
+ -c[12] )
+ export CHAPTER="${1#*c}"
+ ;;
+ --chapter[12] )
+ export CHAPTER="${1#*r}"
+ ;;
+ -h | --help )
+ usage
+ exit
+ ;;
+ --list )
+ listOptions
+ exit
+ ;;
+ "" )
+ ;;
+ * )
+ usage
+ exit 1
+ esac
+
+ shift
+done
+
+
+# We need a temp file for the copy. First try using a standard command.
+tmp="${TMPDIR-/tmp}"
+# shellcheck disable=SC2186
+TUTORCOPY=$(mktemp "$tmp/tutorXXXXXX" || tempfile -p tutor || echo none)
+
+# If the standard commands failed then create a directory to put the copy in.
+# That is a secure way to make a temp file.
+if test "$TUTORCOPY" = none; then
+ tmpdir="$tmp/mnvtutor$$"
+ OLD_UMASK=$(umask)
+ umask 077
+ getout=no
+ mkdir "$tmpdir" || getout=yes
+ umask "$OLD_UMASK"
+ if test "$getout" = yes; then
+ echo "Could not create directory for tutor copy, exiting."
+ exit 1
+ fi
+ TUTORCOPY="$tmpdir/tutorcopy"
+ touch "$TUTORCOPY"
+ TODELETE="$tmpdir"
+else
+ TODELETE="$TUTORCOPY"
+fi
+
+export TUTORCOPY
+
+# remove the copy of the tutor on exit
+trap 'rm -rf "$TODELETE"' EXIT HUP INT QUIT SEGV PIPE TERM
+
+for i in $seq; do
+ testmnv=$(command -v "$i" 2>/dev/null)
+ if test -f "$testmnv"; then
+ MNV="$i"
+ break
+ fi
+done
+
+# When no MNV version was found fall back to "mnv", you'll get an error message
+# below.
+if test -z "$MNV"; then
+ MNV=mnv
+fi
+
+# Use MNV to copy the tutor, it knows the value of $MNVRUNTIME
+# The script tutor.mnv tells MNV which file to copy
+
+$MNV -f -u NONE -c "so \$MNVRUNTIME/tutor/tutor.mnv"
+
+# Start mnv without any .mnvrc, set 'nocompatible' and 'showcmd'
+$MNV -f -u NONE -c "set nocp showcmd" "$TUTORCOPY"
+
+# mnv:sw=4:ts=8:noet:nosta: