| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | :: Start Vim on a copy of the tutor file. | 
					
						
							|  |  |  | @echo off | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | SetLocal | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | :: Usage: | 
					
						
							|  |  |  | :: vimtutor [/?|{/ | -}h|{/ | --}help] [{/ | -}c|{/ | --}chapter NUMBER] [{/ | --}console] [xx] | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | :: | 
					
						
							|  |  |  | :: -console means gvim will not be used | 
					
						
							|  |  |  | :: xx is a language code like "es" or "nl". | 
					
						
							|  |  |  | :: When an xx argument is given, it tries loading that tutor. | 
					
						
							|  |  |  | :: When this fails or no xx argument was given, it tries using 'v:lang' | 
					
						
							|  |  |  | :: When that also fails, it uses the English version. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :: Use Vim to copy the tutor, it knows the value of $VIMRUNTIME | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | for %%G in (. %TMP% %TEMP%) do ( | 
					
						
							|  |  |  |   call :TestDirWritable "%~f0" %%G | 
					
						
							|  |  |  |   if not ERRORLEVEL 1 goto DirOk | 
					
						
							| 
									
										
										
										
											2020-03-19 17:13:40 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | echo: | 
					
						
							|  |  |  | echo:No working directory is found. | 
					
						
							|  |  |  | goto End | 
					
						
							| 
									
										
										
										
											2020-03-19 17:13:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | :TestDirWritable | 
					
						
							|  |  |  | set TUTORCOPY=%2\$tutor$ | 
					
						
							|  |  |  | copy %1 %TUTORCOPY% 2>&1> nul | 
					
						
							|  |  |  | goto DelTmpCopy | 
					
						
							| 
									
										
										
										
											2020-03-19 17:13:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | :DirOk | 
					
						
							|  |  |  | title Tutorial on the Vim editor | 
					
						
							|  |  |  | set "use=Gui" | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | for /F "usebackq tokens=2 delims=:" %%G in (`chcp`) do ( | 
					
						
							|  |  |  |   set /a "_sav_chcp=%%G" | 
					
						
							|  |  |  |   1> nul chcp 65001 | 
					
						
							| 
									
										
										
										
											2024-11-03 20:47:53 +01:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | :GetChptLngs | 
					
						
							|  |  |  | for %%G in (tutor1;tutor2) do ( | 
					
						
							|  |  |  |   if exist "%~dp0tutor\%%G" (set "lngs_%%G=en;") else ( | 
					
						
							|  |  |  |     if exist "%~dp0tutor\%%G.utf-8" set "lngs_%%G=en;") | 
					
						
							|  |  |  |   for /F "tokens=2 delims=._" %%H in ( | 
					
						
							|  |  |  |     '2^> nul dir /B /A:-D "%~dp0tutor\%%G.???.utf-8"') do ( | 
					
						
							|  |  |  |       call set "lngs_%%G=%%lngs_%%G%%%%H;") | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | :EndGetChptLngs | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :ParseArgs | 
					
						
							|  |  |  | if "%*"=="" goto Use%use% | 
					
						
							|  |  |  | if "%1"=="/?" goto Usage | 
					
						
							|  |  |  | if "%1"=="/h" goto Usage | 
					
						
							|  |  |  | if "%1"=="-h" goto Usage | 
					
						
							|  |  |  | if "%1"=="/help" goto Usage | 
					
						
							|  |  |  | if "%1"=="--help" goto Usage | 
					
						
							|  |  |  | if "%1"=="/list" goto List | 
					
						
							|  |  |  | if "%1"=="--list" goto List | 
					
						
							|  |  |  | :DoShift | 
					
						
							|  |  |  | if "%1"=="/c" (call :ChkChpt %2 && (shift & shift & goto DoShift) || goto End) | 
					
						
							|  |  |  | if "%1"=="-c" (call :ChkChpt %2 && (shift & shift & goto DoShift) || goto End) | 
					
						
							|  |  |  | if "%1"=="/chapter" ( | 
					
						
							|  |  |  |   call :ChkChpt %2 && (shift & shift & goto DoShift) || goto End | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | if "%1"=="--chapter" ( | 
					
						
							|  |  |  |   call :ChkChpt %2 && (shift & shift & goto DoShift) || goto End | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | if "%1"=="/console" (set "use=Vim" & shift & goto DoShift) | 
					
						
							|  |  |  | if "%1"=="--console" (set "use=Vim" & shift & goto DoShift) | 
					
						
							|  |  |  | call :ChkLng %1 && shift || goto End | 
					
						
							|  |  |  | if not "%1"=="" goto DoShift | 
					
						
							|  |  |  | goto Use%use% | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | :UseGui | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | :: Try making a copy of tutor with gvim.  If gvim cannot be found, try using | 
					
						
							|  |  |  | :: vim instead.  If vim cannot be found, alert user to check environment and | 
					
						
							|  |  |  | :: installation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :: The script tutor.vim tells Vim which file to copy. | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | start "dummy" /B /W "%~dp0gvim.exe" -u NONE -c "so $VIMRUNTIME/tutor/tutor.vim" | 
					
						
							|  |  |  | if ERRORLEVEL 1 goto UseVim | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | :: Start gvim without any .vimrc, set 'nocompatible' and 'showcmd' | 
					
						
							|  |  |  | start "dummy" /B /W "%~dp0gvim.exe" -u NONE -c "set nocp sc" %TUTORCOPY% | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | goto End | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | :UseVim | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | :: The script tutor.vim tells Vim which file to copy | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | call "%~dp0vim.exe" -u NONE -c "so $VIMRUNTIME/tutor/tutor.vim" | 
					
						
							|  |  |  | if ERRORLEVEL 1 goto NoExecutable | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :: Start vim without any .vimrc, set 'nocompatible and 'showcmd'' | 
					
						
							|  |  |  | call "%~dp0vim.exe" -u NONE -c "set nocp sc" %TUTORCOPY% | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | goto End | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | :NoExecutable | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:No vim or gvim found in current directory or %%PATH%%. | 
					
						
							|  |  |  | echo:Check your installation or re-run install.exe. | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | goto End | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :ChkChpt | 
					
						
							|  |  |  | if defined CHAPTER ( | 
					
						
							|  |  |  |   echo:Error. Invalid command line arguments. | 
					
						
							|  |  |  |   echo:See %~nx0 /? for help. | 
					
						
							|  |  |  |   exit /B 1 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | for /F %%G in ('echo %1 ^| findstr /R "\<[1-2]\>"') do ( | 
					
						
							|  |  |  |   set "CHAPTER=%%G" & exit /B 0 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | echo:Error. The chapter argument must contain only the digits 1 or 2. | 
					
						
							|  |  |  | exit /B 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :ChkLng | 
					
						
							|  |  |  | if "%1"=="" exit /B 0 | 
					
						
							|  |  |  | if defined xx ( | 
					
						
							|  |  |  |   echo:Error. Invalid command line arguments. | 
					
						
							|  |  |  |   echo:See %~nx0 /? for help. | 
					
						
							|  |  |  |   exit /B 1 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | for /F %%G in ('echo %1 ^| findstr /R "[-0-9\._\[\]\$\^\*/!@#&(|)=+\\]"') do ( | 
					
						
							|  |  |  |   echo:Error. The language code must contain only alphabetic characters. | 
					
						
							|  |  |  |   exit /B 1 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | set "_t=%1" | 
					
						
							|  |  |  | if ""=="%_t:~1%" ( | 
					
						
							|  |  |  |   echo:Error. The language code must be 2 or 3 characters only. | 
					
						
							|  |  |  |   exit /B 1 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | if not ""=="%_t:~3%" ( | 
					
						
							|  |  |  |   echo:Error. The language code must be 2 or 3 characters only. | 
					
						
							|  |  |  |   exit /B 1 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | SetLocal EnableDelayedExpansion | 
					
						
							|  |  |  | if "!lngs_tutor%CHAPTER%:%1;=!"=="!lngs_tutor%CHAPTER%!" ( | 
					
						
							|  |  |  |   echo:The current installation does not have the %1 language. | 
					
						
							|  |  |  |   echo:English will be used for the tutorial. | 
					
						
							|  |  |  |   echo:To view the available languages, use the `%~nx0 /list` command. | 
					
						
							|  |  |  |   1> nul timeout /T 2 | 
					
						
							|  |  |  |   EndLocal & set "xx=en" & exit /B 0 | 
					
						
							|  |  |  | ) else (EndLocal & set "xx=%1" & exit /B 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :Usage | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:== USAGE ================================================================= | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:%~nx0 /? ^| ^{/ ^| -^}h ^| ^{/ ^| --^}help | 
					
						
							|  |  |  | echo:or | 
					
						
							|  |  |  | echo:%~nx0 ^{/ ^| --^}list | 
					
						
							|  |  |  | echo:or | 
					
						
							|  |  |  | echo:%~nx0 ^[^{/ ^| -^}c ^| ^{/ ^| --}chapter NUMBER^] ^[^{/ ^| --^}console^] ^[lng^] | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:where: | 
					
						
							|  |  |  | echo:/? or /h or -h or /help or --help | 
					
						
							|  |  |  | echo:				Display the quick help and exit. | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:/list or --list | 
					
						
							|  |  |  | echo:				Display the available chapters and languages | 
					
						
							|  |  |  | echo:				of the tutorial and exit. | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:/c or -c or /chapter or --chapter NUMBER | 
					
						
							|  |  |  | echo:				Specified chapter of the tutorial. | 
					
						
							|  |  |  | echo:				The NUMBER should be 1 or 2. | 
					
						
							|  |  |  | echo:				By default, the first chapter. | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:/console or --console | 
					
						
							|  |  |  | echo:				Open the tutorial in the console instead of GUI. | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:lng | 
					
						
							|  |  |  | echo:				Is a 2 or 3 character ISO639 language code | 
					
						
							|  |  |  | echo:				like "es", "nl" or "bar". | 
					
						
							|  |  |  | echo:				The default language is English. | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:Examples: | 
					
						
							|  |  |  | echo:	%~nx0 es /c 1 /console | 
					
						
							|  |  |  | echo:	%~nx0 --chapter 2 de | 
					
						
							|  |  |  | echo:	%~nx0 fr | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :EndUsage | 
					
						
							|  |  |  | goto End | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :List | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :GetLngName | 
					
						
							|  |  |  | if defined TMP (set "pscult_fl=%TMP%\pscult.tmp") else ( | 
					
						
							|  |  |  |   set "pscult_fl=%TEMP%\pscult.tmp") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | powershell.exe -NoLogo -NoProfile -Command ^
 | 
					
						
							|  |  |  | [system.globalization.cultureinfo]::GetCultures('AllCultures') ^| ^
 | 
					
						
							|  |  |  | Where Name -NotLike "*-*" ^| Where DisplayName -NotLike "Invariant*" ^| ^
 | 
					
						
							|  |  |  | %%{$_.Name + \"`t\" + $_.DisplayName + \"`t\" + $_.NativeName} ^| ^
 | 
					
						
							|  |  |  | Sort-Object ^| Out-File -FilePath "%pscult_fl%" -Encoding utf8 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if defined lngs_tutor1 (set "lngs=%lngs_tutor1%") | 
					
						
							|  |  |  | if defined lngs_tutor2 if defined lngs ( | 
					
						
							|  |  |  |   for %%G in (%lngs_tutor2%) do (call set "lngs=%%lngs:%%G;=%%") | 
					
						
							|  |  |  |   set "lngs=%lngs%%lngs_tutor2%" | 
					
						
							|  |  |  |   ) else (set "lngs=%lngs_tutor2%") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if defined lngs ( | 
					
						
							|  |  |  |   for %%G in (%lngs%) do ( | 
					
						
							|  |  |  |     for /F "tokens=2,* delims=	" %%H in ( | 
					
						
							|  |  |  |       '2^> nul findstr /BR "\<%%G\>" "%pscult_fl%"' | 
					
						
							|  |  |  |     ) do (set "%%G_name=%%H       %%I") | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  |   set "bar_name=Bavarian       Boarisch" | 
					
						
							|  |  |  |   set "eo_name=Esperanto       Esperanto" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | :EndGetLngName | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | echo:The following chapters and languages are available in the current | 
					
						
							|  |  |  | echo:installation tutorial: | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | if defined lngs_tutor1 ( | 
					
						
							|  |  |  |   echo:Chapter: 1 | 
					
						
							|  |  |  |   for %%G in (%lngs_tutor1%) do if "en"=="%%G" ( | 
					
						
							|  |  |  |     call echo:%%G	%%%%G_name%%  by default) else ( | 
					
						
							|  |  |  |       call echo:%%G	%%%%G_name%%) | 
					
						
							|  |  |  |   echo: | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if defined lngs_tutor2 ( | 
					
						
							|  |  |  |   echo:Chapter: 2 | 
					
						
							|  |  |  |   for %%G in (%lngs_tutor2%) do if "en"=="%%G" ( | 
					
						
							|  |  |  |     call echo:%%G	%%%%G_name%%  by default) else ( | 
					
						
							|  |  |  |       call echo:%%G	%%%%G_name%%) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | echo: | 
					
						
							|  |  |  | goto End | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | :DelTmpCopy | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | :: remove the copy of the tutor | 
					
						
							| 
									
										
										
										
											2024-12-02 20:07:58 +01:00
										 |  |  | if exist %TUTORCOPY% del /F /Q %TUTORCOPY% | 
					
						
							|  |  |  | goto :EOF | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :End | 
					
						
							|  |  |  | :: remove the copy of the tutor and ISO639 file | 
					
						
							|  |  |  | if exist %TUTORCOPY% del /F /Q %TUTORCOPY% | 
					
						
							|  |  |  | if exist %pscult_fl% del /F /Q %pscult_fl% | 
					
						
							|  |  |  | chcp %_sav_chcp% 1> nul | 
					
						
							|  |  |  | title %ComSpec% | 
					
						
							|  |  |  | EndLocal | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @rem vim:ft=dosbatch:ts=8:sts=2:sw=2:noet: |