| :: Start Vim on a copy of the tutor file. |
| @echo off |
| SetLocal |
| |
| :: Usage: |
| :: vimtutor [/?|{/ | -}h|{/ | --}help] [{/ | -}c|{/ | --}chapter NUMBER] [{/ | --}console] [xx] |
| :: |
| :: -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 |
| for %%G in (. %TMP% %TEMP%) do ( |
| call :TestDirWritable "%~f0" %%G |
| if not ERRORLEVEL 1 goto DirOk |
| ) |
| |
| echo: |
| echo:No working directory is found. |
| goto End |
| |
| :TestDirWritable |
| set TUTORCOPY=%2\$tutor$ |
| copy %1 %TUTORCOPY% 2>&1> nul |
| goto DelTmpCopy |
| |
| :DirOk |
| title Tutorial on the Vim editor |
| set "use=Gui" |
| |
| for /F "usebackq tokens=2 delims=:" %%G in (`chcp`) do ( |
| set /a "_sav_chcp=%%G" |
| 1> nul chcp 65001 |
| ) |
| |
| :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% |
| |
| :UseGui |
| :: 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. |
| start "dummy" /B /W "%~dp0gvim.exe" -u NONE -c "so $VIMRUNTIME/tutor/tutor.vim" |
| if ERRORLEVEL 1 goto UseVim |
| |
| :: Start gvim without any .vimrc, set 'nocompatible' and 'showcmd' |
| start "dummy" /B /W "%~dp0gvim.exe" -u NONE -c "set nocp sc" %TUTORCOPY% |
| |
| goto End |
| |
| :UseVim |
| :: The script tutor.vim tells Vim which file to copy |
| 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% |
| |
| goto End |
| |
| :NoExecutable |
| echo: |
| echo: |
| echo:No vim or gvim found in current directory or %%PATH%%. |
| echo:Check your installation or re-run install.exe. |
| |
| 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 |
| |
| :DelTmpCopy |
| :: remove the copy of the tutor |
| 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: |