33import sys
44import os
55import re
6- import locale
76from argparse import ArgumentParser
87from zipfile import ZipFile
98from datetime import datetime
2726 'TLDR_DOWNLOAD_CACHE_LOCATION' ,
2827 'https://tldr-pages.github.io/assets/tldr.zip'
2928)
30- DEFAULT_LANG = os .environ .get ('LANG' , locale .getlocale ()[0 ]).split ("_" )[0 ]
29+
30+ DEFAULT_LANG = os .environ .get (
31+ 'TLDR_LANGUAGE' ,
32+ os .environ .get ('LANG' , None )
33+ ).split ('_' )[0 ]
34+
35+ if DEFAULT_LANG == 'C' :
36+ DEFAULT_LANG = None
37+
3138USE_CACHE = int (os .environ .get ('TLDR_CACHE_ENABLED' , '1' )) > 0
3239MAX_CACHE_AGE = int (os .environ .get ('TLDR_CACHE_MAX_AGE' , 24 ))
40+
3341URLOPEN_CONTEXT = None
3442if int (os .environ .get ('TLDR_ALLOW_INSECURE' , '0' )) == 1 :
3543 URLOPEN_CONTEXT = ssl .create_default_context ()
@@ -148,20 +156,40 @@ def get_platform_list():
148156 return platforms
149157
150158
151- def get_page (command , remote = None , platform = None , language = None ):
152- if platform is None :
153- platform = get_platform_list ()
154- for _platform in platform :
155- if _platform is None :
156- continue
159+ def get_language_list ():
160+ languages = os .environ .get ('LANGUAGES' , '' ).split (':' )
161+ languages = list (map (
162+ lambda x : x .split ('_' )[0 ],
163+ filter (lambda x : x != 'C' , languages )
164+ ))
165+ if DEFAULT_LANG is not None :
157166 try :
158- return get_page_for_platform (command , _platform , remote , language )
159- except HTTPError as err :
160- if err .code != 404 :
161- raise
162- except URLError :
163- if not PAGES_SOURCE_LOCATION .startswith ('file://' ):
164- raise
167+ languages .remove (DEFAULT_LANG )
168+ except ValueError :
169+ pass
170+ languages .insert (0 , DEFAULT_LANG )
171+ else :
172+ languages .append ('en' )
173+ return languages
174+
175+
176+ def get_page (command , remote = None , platforms = None , languages = None ):
177+ if platforms is None :
178+ platforms = get_platform_list ()
179+ if languages is None :
180+ languages = get_language_list ()
181+ for platform in platforms :
182+ for language in languages :
183+ if platform is None :
184+ continue
185+ try :
186+ return get_page_for_platform (command , platform , remote , language )
187+ except HTTPError as err :
188+ if err .code != 404 :
189+ raise
190+ except URLError :
191+ if not PAGES_SOURCE_LOCATION .startswith ('file://' ):
192+ raise
165193
166194 return False
167195
@@ -218,22 +246,22 @@ def output(page):
218246 for line in page :
219247 line = line .rstrip ().decode ('utf-8' )
220248 if len (line ) == 0 :
221- pass
249+ continue
222250 elif line [0 ] == '#' :
223251 line = ' ' * LEADING_SPACES_NUM + \
224252 colored (line .replace ('# ' , '' ), * colors_of ('name' )) + '\n '
225- print (line )
253+ sys . stdout . buffer . write (line . encode ( 'utf-8' ) )
226254 elif line [0 ] == '>' :
227255 line = ' ' * (LEADING_SPACES_NUM - 1 ) + \
228256 colored (
229257 line .replace ('>' , '' ).replace ('<' , '' ),
230258 * colors_of ('description' )
231259 )
232- print (line )
260+ sys . stdout . buffer . write (line . encode ( 'utf-8' ) )
233261 elif line [0 ] == '-' :
234262 line = '\n ' + ' ' * LEADING_SPACES_NUM + \
235263 colored (line , * colors_of ('example' ))
236- print (line )
264+ sys . stdout . buffer . write (line . encode ( 'utf-8' ) )
237265 elif line [0 ] == '`' :
238266 line = line [1 :- 1 ] # need to actually parse ``
239267 elements = [' ' * 2 * LEADING_SPACES_NUM ]
@@ -245,11 +273,14 @@ def output(page):
245273 if not replaced :
246274 item = colored (item , * colors_of ('command' ))
247275 elements .append (item )
248- print ('' .join (elements ))
276+ sys .stdout .buffer .write ('' .join (elements ).encode ('utf-8' ))
277+ print ()
249278 print ()
250279
251280
252281def update_cache (language = None ):
282+ if language is None :
283+ language = DEFAULT_LANG if DEFAULT_LANG is not None else 'en'
253284 try :
254285 pages_dir = "pages"
255286 if language and language != 'en' :
@@ -322,7 +353,8 @@ def main():
322353 )
323354
324355 parser .add_argument ('-L' , '--language' ,
325- default = DEFAULT_LANG ,
356+ nargs = 1 ,
357+ default = None ,
326358 type = str ,
327359 help = 'Override the default language' )
328360
@@ -354,9 +386,9 @@ def main():
354386 command = '-' .join (rest .command )
355387 result = get_page (
356388 command ,
357- platform = options .platform ,
358- remote = options .source ,
359- language = options .language
389+ options .source ,
390+ options .platform ,
391+ options .language
360392 )
361393 if not result :
362394 print ((
0 commit comments