xref: /vim-8.2.3635/runtime/tutor/tutor.vim (revision 574ee7bc)
1071d4279SBram Moolenaar" Vim tutor support file
2071d4279SBram Moolenaar" Author: Eduardo F. Amatria <[email protected]>
3e37d50a5SBram Moolenaar" Maintainer: Bram Moolenaar
4*574ee7bcSBram Moolenaar" Last Change:	2019 Nov 11
5071d4279SBram Moolenaar
6e37d50a5SBram Moolenaar" This Vim script is used for detecting if a translation of the
7071d4279SBram Moolenaar" tutor file exist, i.e., a tutor.xx file, where xx is the language.
8071d4279SBram Moolenaar" If the translation does not exist, or no extension is given,
97dda86f2SBram Moolenaar" it defaults to the English version.
10071d4279SBram Moolenaar
11071d4279SBram Moolenaar" It is invoked by the vimtutor shell script.
12071d4279SBram Moolenaar
13071d4279SBram Moolenaar" 1. Build the extension of the file, if any:
14071d4279SBram Moolenaarlet s:ext = ""
15071d4279SBram Moolenaarif strlen($xx) > 1
16071d4279SBram Moolenaar  let s:ext = "." . $xx
17071d4279SBram Moolenaarelse
18071d4279SBram Moolenaar  let s:lang = ""
1997b2ad35SBram Moolenaar  " Check that a potential value has at least two letters.
2097b2ad35SBram Moolenaar  " Ignore "1043" and "C".
2197b2ad35SBram Moolenaar  if exists("v:lang") && v:lang =~ '\a\a'
22071d4279SBram Moolenaar    let s:lang = v:lang
2397b2ad35SBram Moolenaar  elseif $LC_ALL =~ '\a\a'
24e2cc9702SBram Moolenaar    let s:lang = $LC_ALL
25b44b7addSBram Moolenaar  elseif $LC_MESSAGES =~ '\a\a' || $LC_MESSAGES ==# "C"
26b44b7addSBram Moolenaar    " LC_MESSAGES=C can be used to explicitly ask for English messages while
27b44b7addSBram Moolenaar    " keeping LANG non-English; don't set s:lang then.
28b44b7addSBram Moolenaar    if $LC_MESSAGES =~ '\a\a'
29b44b7addSBram Moolenaar      let s:lang = $LC_MESSAGES
30b44b7addSBram Moolenaar    endif
3197b2ad35SBram Moolenaar  elseif $LANG =~ '\a\a'
32071d4279SBram Moolenaar    let s:lang = $LANG
33071d4279SBram Moolenaar  endif
34071d4279SBram Moolenaar  if s:lang != ""
35071d4279SBram Moolenaar    " Remove "@euro" (ignoring case), it may be at the end
36071d4279SBram Moolenaar    let s:lang = substitute(s:lang, '\c@euro', '', '')
37071d4279SBram Moolenaar    " On MS-Windows it may be German_Germany.1252 or Polish_Poland.1250.  How
38071d4279SBram Moolenaar    " about other languages?
39071d4279SBram Moolenaar    if s:lang =~ "German"
40071d4279SBram Moolenaar      let s:ext = ".de"
41071d4279SBram Moolenaar    elseif s:lang =~ "Polish"
42071d4279SBram Moolenaar      let s:ext = ".pl"
43071d4279SBram Moolenaar    elseif s:lang =~ "Slovak"
44071d4279SBram Moolenaar      let s:ext = ".sk"
45946e27abSBram Moolenaar    elseif s:lang =~ "Serbian"
46946e27abSBram Moolenaar      let s:ext = ".sr"
47d7afed37SBram Moolenaar    elseif s:lang =~ "Czech"
48d7afed37SBram Moolenaar      let s:ext = ".cs"
4997b2ad35SBram Moolenaar    elseif s:lang =~ "Dutch"
5097b2ad35SBram Moolenaar      let s:ext = ".nl"
5142ebd066SBram Moolenaar    elseif s:lang =~ "Bulgarian"
5242ebd066SBram Moolenaar      let s:ext = ".bg"
53071d4279SBram Moolenaar    else
54071d4279SBram Moolenaar      let s:ext = "." . strpart(s:lang, 0, 2)
55071d4279SBram Moolenaar    endif
56071d4279SBram Moolenaar  endif
57071d4279SBram Moolenaarendif
58071d4279SBram Moolenaar
59446cb837SBram Moolenaar" Somehow ".ge" (Germany) is sometimes used for ".de" (Deutsch).
60446cb837SBram Moolenaarif s:ext =~? '\.ge'
61446cb837SBram Moolenaar  let s:ext = ".de"
62446cb837SBram Moolenaarendif
63446cb837SBram Moolenaar
64446cb837SBram Moolenaarif s:ext =~? '\.en'
65446cb837SBram Moolenaar  let s:ext = ""
66446cb837SBram Moolenaarendif
67446cb837SBram Moolenaar
68a9604e61SBram Moolenaar" The Japanese tutor is available in three encodings, guess which one to use
69071d4279SBram Moolenaar" The "sjis" one is actually "cp932", it doesn't matter for this text.
70071d4279SBram Moolenaarif s:ext =~? '\.ja'
71071d4279SBram Moolenaar  if &enc =~ "euc"
72071d4279SBram Moolenaar    let s:ext = ".ja.euc"
73446cb837SBram Moolenaar  elseif &enc != "utf-8"
74071d4279SBram Moolenaar    let s:ext = ".ja.sjis"
75071d4279SBram Moolenaar  endif
76071d4279SBram Moolenaarendif
77071d4279SBram Moolenaar
78a9604e61SBram Moolenaar" The Korean tutor is available in two encodings, guess which one to use
79071d4279SBram Moolenaarif s:ext =~? '\.ko'
80446cb837SBram Moolenaar  if &enc != "utf-8"
81071d4279SBram Moolenaar    let s:ext = ".ko.euc"
82071d4279SBram Moolenaar  endif
83071d4279SBram Moolenaarendif
84071d4279SBram Moolenaar
85d09acef4SBram Moolenaar" The Chinese tutor is available in three encodings, guess which one to use
86071d4279SBram Moolenaar" This segment is from the above lines and modified by
87071d4279SBram Moolenaar" Mendel L Chan <[email protected]> for Chinese vim tutorial
88d09acef4SBram Moolenaar" When 'encoding' is utf-8, choose between China (simplified) and Taiwan
89d09acef4SBram Moolenaar" (traditional) based on the language, suggested by Alick Zhao.
90071d4279SBram Moolenaarif s:ext =~? '\.zh'
91071d4279SBram Moolenaar  if &enc =~ 'big5\|cp950'
92071d4279SBram Moolenaar    let s:ext = ".zh.big5"
93446cb837SBram Moolenaar  elseif &enc != 'utf-8'
94071d4279SBram Moolenaar    let s:ext = ".zh.euc"
95d09acef4SBram Moolenaar  elseif s:ext =~? 'zh_tw' || (exists("s:lang") && s:lang =~? 'zh_tw')
96d09acef4SBram Moolenaar    let s:ext = ".zh_tw"
97d09acef4SBram Moolenaar  else
98d09acef4SBram Moolenaar    let s:ext = ".zh_cn"
99071d4279SBram Moolenaar  endif
100071d4279SBram Moolenaarendif
101071d4279SBram Moolenaar
102071d4279SBram Moolenaar" The Polish tutor is available in two encodings, guess which one to use.
103c0197e28SBram Moolenaarif s:ext =~? '\.pl'
104c0197e28SBram Moolenaar  if &enc =~ 1250
105071d4279SBram Moolenaar    let s:ext = ".pl.cp1250"
106c0197e28SBram Moolenaar  endif
107071d4279SBram Moolenaarendif
108071d4279SBram Moolenaar
109a5792f58SBram Moolenaar" The Turkish tutor is available in two encodings, guess which one to use
110a5792f58SBram Moolenaarif s:ext =~? '\.tr'
111*574ee7bcSBram Moolenaar  if &enc == "iso-8859-9" || &enc == "cp1254"
112a5792f58SBram Moolenaar    let s:ext = ".tr.iso9"
113a5792f58SBram Moolenaar  endif
114a5792f58SBram Moolenaarendif
115a5792f58SBram Moolenaar
11645125098SBram Moolenaar" The Greek tutor is available in three encodings, guess what to use.
11745125098SBram Moolenaar" We used ".gr" (Greece) instead of ".el" (Greek); accept both.
11845125098SBram Moolenaarif s:ext =~? '\.gr\|\.el'
11945125098SBram Moolenaar  if &enc == "iso-8859-7"
120446cb837SBram Moolenaar    let s:ext = ".el"
12145125098SBram Moolenaar  elseif &enc == "utf-8"
122446cb837SBram Moolenaar    let s:ext = ".el.utf-8"
12345125098SBram Moolenaar  elseif &enc =~ 737
124446cb837SBram Moolenaar    let s:ext = ".el.cp737"
125071d4279SBram Moolenaar  endif
12645125098SBram Moolenaarendif
127071d4279SBram Moolenaar
128d7afed37SBram Moolenaar" The Slovak tutor is available in three encodings, guess which one to use
129d7afed37SBram Moolenaarif s:ext =~? '\.sk'
130446cb837SBram Moolenaar  if &enc =~ 1250
131071d4279SBram Moolenaar    let s:ext = ".sk.cp1250"
132071d4279SBram Moolenaar  endif
133d7afed37SBram Moolenaarendif
134d7afed37SBram Moolenaar
135946e27abSBram Moolenaar" The Slovak tutor is available in two encodings, guess which one to use
136946e27abSBram Moolenaar" Note that the utf-8 version is the original, the cp1250 version is created
137946e27abSBram Moolenaar" from it.
138946e27abSBram Moolenaarif s:ext =~? '\.sr'
139946e27abSBram Moolenaar  if &enc =~ 1250
140946e27abSBram Moolenaar    let s:ext = ".sr.cp1250"
141946e27abSBram Moolenaar  endif
142946e27abSBram Moolenaarendif
143946e27abSBram Moolenaar
144d7afed37SBram Moolenaar" The Czech tutor is available in three encodings, guess which one to use
145d7afed37SBram Moolenaarif s:ext =~? '\.cs'
146446cb837SBram Moolenaar  if &enc =~ 1250
147d7afed37SBram Moolenaar    let s:ext = ".cs.cp1250"
148d7afed37SBram Moolenaar  endif
149d7afed37SBram Moolenaarendif
150071d4279SBram Moolenaar
151d9380f5cSBram Moolenaar" The Russian tutor is available in three encodings, guess which one to use.
152d9380f5cSBram Moolenaarif s:ext =~? '\.ru'
153446cb837SBram Moolenaar  if &enc =~ '1251'
154d9380f5cSBram Moolenaar    let s:ext = '.ru.cp1251'
155d9380f5cSBram Moolenaar  elseif &enc =~ 'koi8'
156d9380f5cSBram Moolenaar    let s:ext = '.ru'
157d9380f5cSBram Moolenaar  endif
158071d4279SBram Moolenaarendif
159071d4279SBram Moolenaar
160446cb837SBram Moolenaar" The Hungarian tutor is available in three encodings, guess which one to use.
161d7afed37SBram Moolenaarif s:ext =~? '\.hu'
162446cb837SBram Moolenaar  if &enc =~ 1250
163446cb837SBram Moolenaar    let s:ext = ".hu.cp1250"
164d7afed37SBram Moolenaar  elseif &enc =~ 'iso-8859-2'
165d7afed37SBram Moolenaar    let s:ext = '.hu'
166d7afed37SBram Moolenaar  endif
167d7afed37SBram Moolenaarendif
168d7afed37SBram Moolenaar
169446cb837SBram Moolenaar" The Croatian tutor is available in three encodings, guess which one to use.
170446cb837SBram Moolenaarif s:ext =~? '\.hr'
171446cb837SBram Moolenaar  if &enc =~ 1250
172446cb837SBram Moolenaar    let s:ext = ".hr.cp1250"
173446cb837SBram Moolenaar  elseif &enc =~ 'iso-8859-2'
174446cb837SBram Moolenaar    let s:ext = '.hr'
175446cb837SBram Moolenaar  endif
176071d4279SBram Moolenaarendif
177071d4279SBram Moolenaar
178446cb837SBram Moolenaar" If 'encoding' is utf-8 s:ext must end in utf-8.
179446cb837SBram Moolenaarif &enc == 'utf-8' && s:ext !~ '\.utf-8'
180e37d50a5SBram Moolenaar  let s:ext .= '.utf-8'
181071d4279SBram Moolenaarendif
182071d4279SBram Moolenaar
183071d4279SBram Moolenaar" 2. Build the name of the file:
184071d4279SBram Moolenaarlet s:tutorfile = "/tutor/tutor"
185071d4279SBram Moolenaarlet s:tutorxx = $VIMRUNTIME . s:tutorfile . s:ext
186071d4279SBram Moolenaar
187071d4279SBram Moolenaar" 3. Finding the file:
188071d4279SBram Moolenaarif filereadable(s:tutorxx)
189071d4279SBram Moolenaar  let $TUTOR = s:tutorxx
190a9604e61SBram Moolenaarelseif s:ext !~ '\.utf-8' && filereadable(s:tutorxx . ".utf-8")
191a9604e61SBram Moolenaar  " Fallback to utf-8 if available.
192a9604e61SBram Moolenaar  let $TUTOR = s:tutorxx . ".utf-8"
193071d4279SBram Moolenaarelse
194071d4279SBram Moolenaar  let $TUTOR = $VIMRUNTIME . s:tutorfile
195071d4279SBram Moolenaar  echo "The file " . s:tutorxx . " does not exist.\n"
196071d4279SBram Moolenaar  echo "Copying English version: " . $TUTOR
197071d4279SBram Moolenaar  4sleep
198071d4279SBram Moolenaarendif
199071d4279SBram Moolenaar
200071d4279SBram Moolenaar" 4. Making the copy and exiting Vim:
201071d4279SBram Moolenaare $TUTOR
202071d4279SBram Moolenaarwq! $TUTORCOPY
203