runtime(vimtutor): Add a second chapter
fixes: #5719
closes: #5729
Signed-off-by: Paul Desmond Parker <pauldesmondparker@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/vimtutor b/src/vimtutor
index 3b154f2..3faf100 100755
--- a/src/vimtutor
+++ b/src/vimtutor
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
# Start Vim on a copy of the tutor file.
@@ -13,15 +13,126 @@
# have Vim installed with its version number.
# We anticipate up to a future Vim 8.1 version :-).
seq="vim vim81 vim80 vim8 vim74 vim73 vim72 vim71 vim70 vim7 vim6 vi"
-if test "$1" = "-g"; then
- # Try to use the GUI version of Vim if possible, it will fall back
- # on Vim if Gvim is not installed.
- seq="gvim gvim81 gvim80 gvim8 gvim74 gvim73 gvim72 gvim71 gvim70 gvim7 gvim6 $seq"
- shift
-fi
-xx=$1
-export xx
+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=01) is one or two digits representing the chapter number\n"
+ printf "\texamples:\n"
+ printf "\t\tvimtutor -l es -c 2 -g\n"
+ printf "\t\tvimtutor --language de --chapter 02\n"
+ printf "\t\tvimtutor fr\n"
+ echo "More information at 'man vimtutor'"
+ echo "================================================================================================"
+}
+
+listOptions()
+{
+ declare -A language
+ language[bar]=Bavarian
+ language[bg]=Bulgarian
+ language[ca]=Catalan
+ language[cs]=Czech
+ language[da]=Danish
+ language[de]=German
+ language[el]=Greek
+ language[en]=English\(default\)
+ language[eo]=Esperanto
+ language[es]=Spanish
+ language[fr]=French
+ language[hr]=Croatian
+ language[hu]=Hungarian
+ language[it]=Italian
+ language[ja]=Japanese
+ language[ko]=Korean
+ language[lv]=Latvian
+ language[nb]=Bokmål
+ language[nl]=Dutch
+ language[no]=Norwegian
+ language[pl]=Polish
+ language[pt]=Portuguese
+ language[ru]=Russian
+ language[sk]=Slovak
+ language[sr]=Serbian
+ language[sv]=Swedish
+ language[tr]=Turkish
+ language[uk]=English
+ language[vi]=Vietnamese
+ language[zh]=Chinese
+
+ echo "==OPTIONS======================================================================================="
+ echo "Chapter: 1"
+ for code in bar bg ca cs da de el en eo es fr hr hu it ja ko lv nb nl no pl pt ru sk sr sv tr uk vi zh
+ do
+ printf "\tLang: %s => %s\n" ${code} ${language[${code}]}
+ done
+ echo "Chapter: 2"
+ for code in en
+ do
+ printf "\tLang: %s => %s\n" ${code} ${language[${code}]}
+ done
+ echo "================================================================================================"
+}
+
+validateLang()
+{
+ if [[ $xx =~ ^[^a-z]*$ ]]; then echo "Error: iso639 code must contain only [a-z]" && exit 1; fi
+ if [ ${#xx} == 2 ] || [ ${#xx} == 3 ]; then :; else echo "Error: iso639 code must be 2 or 3 characters only" && exit 1; fi
+ export xx
+}
+
+validateChapter()
+{
+ if [[ $cc =~ ^[0-9]*$ ]]; then :; else echo "Error: chapter argument must contain digits only" && exit 1; fi
+ if [ $cc == "0" ]; then echo "Error: chapter must be non-zero" && exit 1; fi
+ if [ $cc == "00" ]; then echo "Error: chapter must be non-zero" && exit 1; fi
+ export CHAPTER="$cc"
+}
+
+shopt -s extglob
+while [ "$1" != "" ]; do
+ case $1 in
+ -g | --gui ) seq="gvim gvim91 gvim90 gvim81 gvim80 gvim8 gvim74 gvim73 gvim72 gvim71 gvim70 gvim7 gvim6 $seq"
+ ;;
+ -l | --language ) shift
+ xx=$1
+ validateLang
+ ;;
+ -l[a-z][a-z]?([a-z]) ) xx=${1#*l}
+ validateLang
+ ;;
+ --language[a-z][a-z]?([a-z]) ) xx=${1#*e}
+ validateLang
+ ;;
+ [a-z][a-z]?([a-z]) ) xx=$1
+ validateLang
+ ;;
+ -c | --chapter ) shift
+ cc=$1
+ validateChapter
+ ;;
+ -c[0-9]?([0-9]) ) cc=${1#*c}
+ validateChapter
+ ;;
+ --chapter[0-9]?([0-9]) ) cc=${1#*r}
+ validateChapter
+ ;;
+ -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}"
@@ -68,6 +179,7 @@
# Use Vim to copy the tutor, it knows the value of $VIMRUNTIME
# The script tutor.vim tells Vim which file to copy
+
$VIM -f -u NONE -c 'so $VIMRUNTIME/tutor/tutor.vim'
# Start vim without any .vimrc, set 'nocompatible' and 'showcmd'