@rowstile/cli-win32-x64 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (759) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +5 -0
  3. package/package.json +23 -0
  4. package/python/DLLs/_asyncio.pyd +0 -0
  5. package/python/DLLs/_bz2.pyd +0 -0
  6. package/python/DLLs/_ctypes.pyd +0 -0
  7. package/python/DLLs/_ctypes_test.pyd +0 -0
  8. package/python/DLLs/_decimal.pyd +0 -0
  9. package/python/DLLs/_elementtree.pyd +0 -0
  10. package/python/DLLs/_hashlib.pyd +0 -0
  11. package/python/DLLs/_lzma.pyd +0 -0
  12. package/python/DLLs/_multiprocessing.pyd +0 -0
  13. package/python/DLLs/_overlapped.pyd +0 -0
  14. package/python/DLLs/_queue.pyd +0 -0
  15. package/python/DLLs/_socket.pyd +0 -0
  16. package/python/DLLs/_sqlite3.pyd +0 -0
  17. package/python/DLLs/_ssl.pyd +0 -0
  18. package/python/DLLs/_testbuffer.pyd +0 -0
  19. package/python/DLLs/_testcapi.pyd +0 -0
  20. package/python/DLLs/_testclinic.pyd +0 -0
  21. package/python/DLLs/_testclinic_limited.pyd +0 -0
  22. package/python/DLLs/_testconsole.pyd +0 -0
  23. package/python/DLLs/_testimportmultiple.pyd +0 -0
  24. package/python/DLLs/_testinternalcapi.pyd +0 -0
  25. package/python/DLLs/_testlimitedcapi.pyd +0 -0
  26. package/python/DLLs/_testmultiphase.pyd +0 -0
  27. package/python/DLLs/_testsinglephase.pyd +0 -0
  28. package/python/DLLs/_uuid.pyd +0 -0
  29. package/python/DLLs/_wmi.pyd +0 -0
  30. package/python/DLLs/_zoneinfo.pyd +0 -0
  31. package/python/DLLs/libcrypto-3-x64.dll +0 -0
  32. package/python/DLLs/libffi-8.dll +0 -0
  33. package/python/DLLs/libssl-3-x64.dll +0 -0
  34. package/python/DLLs/pyexpat.pyd +0 -0
  35. package/python/DLLs/select.pyd +0 -0
  36. package/python/DLLs/sqlite3.dll +0 -0
  37. package/python/DLLs/unicodedata.pyd +0 -0
  38. package/python/DLLs/winsound.pyd +0 -0
  39. package/python/DLLs/zlib1.dll +0 -0
  40. package/python/LICENSE.txt +445 -0
  41. package/python/Lib/__future__.py +147 -0
  42. package/python/Lib/__hello__.py +16 -0
  43. package/python/Lib/__pycache__/__future__.cpython-313.pyc +0 -0
  44. package/python/Lib/__pycache__/_colorize.cpython-313.pyc +0 -0
  45. package/python/Lib/__pycache__/_compat_pickle.cpython-313.pyc +0 -0
  46. package/python/Lib/__pycache__/_compression.cpython-313.pyc +0 -0
  47. package/python/Lib/__pycache__/_markupbase.cpython-313.pyc +0 -0
  48. package/python/Lib/__pycache__/_opcode_metadata.cpython-313.pyc +0 -0
  49. package/python/Lib/__pycache__/_weakrefset.cpython-313.pyc +0 -0
  50. package/python/Lib/__pycache__/ast.cpython-313.pyc +0 -0
  51. package/python/Lib/__pycache__/base64.cpython-313.pyc +0 -0
  52. package/python/Lib/__pycache__/bisect.cpython-313.pyc +0 -0
  53. package/python/Lib/__pycache__/bz2.cpython-313.pyc +0 -0
  54. package/python/Lib/__pycache__/calendar.cpython-313.pyc +0 -0
  55. package/python/Lib/__pycache__/colorsys.cpython-313.pyc +0 -0
  56. package/python/Lib/__pycache__/compileall.cpython-313.pyc +0 -0
  57. package/python/Lib/__pycache__/configparser.cpython-313.pyc +0 -0
  58. package/python/Lib/__pycache__/contextlib.cpython-313.pyc +0 -0
  59. package/python/Lib/__pycache__/copy.cpython-313.pyc +0 -0
  60. package/python/Lib/__pycache__/copyreg.cpython-313.pyc +0 -0
  61. package/python/Lib/__pycache__/csv.cpython-313.pyc +0 -0
  62. package/python/Lib/__pycache__/dataclasses.cpython-313.pyc +0 -0
  63. package/python/Lib/__pycache__/datetime.cpython-313.pyc +0 -0
  64. package/python/Lib/__pycache__/decimal.cpython-313.pyc +0 -0
  65. package/python/Lib/__pycache__/dis.cpython-313.pyc +0 -0
  66. package/python/Lib/__pycache__/enum.cpython-313.pyc +0 -0
  67. package/python/Lib/__pycache__/filecmp.cpython-313.pyc +0 -0
  68. package/python/Lib/__pycache__/fnmatch.cpython-313.pyc +0 -0
  69. package/python/Lib/__pycache__/fractions.cpython-313.pyc +0 -0
  70. package/python/Lib/__pycache__/functools.cpython-313.pyc +0 -0
  71. package/python/Lib/__pycache__/getpass.cpython-313.pyc +0 -0
  72. package/python/Lib/__pycache__/gettext.cpython-313.pyc +0 -0
  73. package/python/Lib/__pycache__/glob.cpython-313.pyc +0 -0
  74. package/python/Lib/__pycache__/gzip.cpython-313.pyc +0 -0
  75. package/python/Lib/__pycache__/hashlib.cpython-313.pyc +0 -0
  76. package/python/Lib/__pycache__/heapq.cpython-313.pyc +0 -0
  77. package/python/Lib/__pycache__/hmac.cpython-313.pyc +0 -0
  78. package/python/Lib/__pycache__/inspect.cpython-313.pyc +0 -0
  79. package/python/Lib/__pycache__/ipaddress.cpython-313.pyc +0 -0
  80. package/python/Lib/__pycache__/keyword.cpython-313.pyc +0 -0
  81. package/python/Lib/__pycache__/linecache.cpython-313.pyc +0 -0
  82. package/python/Lib/__pycache__/locale.cpython-313.pyc +0 -0
  83. package/python/Lib/__pycache__/lzma.cpython-313.pyc +0 -0
  84. package/python/Lib/__pycache__/mimetypes.cpython-313.pyc +0 -0
  85. package/python/Lib/__pycache__/nturl2path.cpython-313.pyc +0 -0
  86. package/python/Lib/__pycache__/numbers.cpython-313.pyc +0 -0
  87. package/python/Lib/__pycache__/opcode.cpython-313.pyc +0 -0
  88. package/python/Lib/__pycache__/operator.cpython-313.pyc +0 -0
  89. package/python/Lib/__pycache__/optparse.cpython-313.pyc +0 -0
  90. package/python/Lib/__pycache__/pickle.cpython-313.pyc +0 -0
  91. package/python/Lib/__pycache__/pkgutil.cpython-313.pyc +0 -0
  92. package/python/Lib/__pycache__/platform.cpython-313.pyc +0 -0
  93. package/python/Lib/__pycache__/py_compile.cpython-313.pyc +0 -0
  94. package/python/Lib/__pycache__/queue.cpython-313.pyc +0 -0
  95. package/python/Lib/__pycache__/quopri.cpython-313.pyc +0 -0
  96. package/python/Lib/__pycache__/random.cpython-313.pyc +0 -0
  97. package/python/Lib/__pycache__/reprlib.cpython-313.pyc +0 -0
  98. package/python/Lib/__pycache__/selectors.cpython-313.pyc +0 -0
  99. package/python/Lib/__pycache__/shlex.cpython-313.pyc +0 -0
  100. package/python/Lib/__pycache__/shutil.cpython-313.pyc +0 -0
  101. package/python/Lib/__pycache__/signal.cpython-313.pyc +0 -0
  102. package/python/Lib/__pycache__/socket.cpython-313.pyc +0 -0
  103. package/python/Lib/__pycache__/socketserver.cpython-313.pyc +0 -0
  104. package/python/Lib/__pycache__/ssl.cpython-313.pyc +0 -0
  105. package/python/Lib/__pycache__/string.cpython-313.pyc +0 -0
  106. package/python/Lib/__pycache__/stringprep.cpython-313.pyc +0 -0
  107. package/python/Lib/__pycache__/struct.cpython-313.pyc +0 -0
  108. package/python/Lib/__pycache__/subprocess.cpython-313.pyc +0 -0
  109. package/python/Lib/__pycache__/tarfile.cpython-313.pyc +0 -0
  110. package/python/Lib/__pycache__/tempfile.cpython-313.pyc +0 -0
  111. package/python/Lib/__pycache__/textwrap.cpython-313.pyc +0 -0
  112. package/python/Lib/__pycache__/threading.cpython-313.pyc +0 -0
  113. package/python/Lib/__pycache__/token.cpython-313.pyc +0 -0
  114. package/python/Lib/__pycache__/tokenize.cpython-313.pyc +0 -0
  115. package/python/Lib/__pycache__/traceback.cpython-313.pyc +0 -0
  116. package/python/Lib/__pycache__/types.cpython-313.pyc +0 -0
  117. package/python/Lib/__pycache__/typing.cpython-313.pyc +0 -0
  118. package/python/Lib/__pycache__/uuid.cpython-313.pyc +0 -0
  119. package/python/Lib/__pycache__/warnings.cpython-313.pyc +0 -0
  120. package/python/Lib/__pycache__/weakref.cpython-313.pyc +0 -0
  121. package/python/Lib/_aix_support.py +108 -0
  122. package/python/Lib/_android_support.py +192 -0
  123. package/python/Lib/_apple_support.py +66 -0
  124. package/python/Lib/_collections_abc.py +1187 -0
  125. package/python/Lib/_colorize.py +119 -0
  126. package/python/Lib/_compat_pickle.py +251 -0
  127. package/python/Lib/_compression.py +162 -0
  128. package/python/Lib/_ios_support.py +71 -0
  129. package/python/Lib/_markupbase.py +396 -0
  130. package/python/Lib/_opcode_metadata.py +343 -0
  131. package/python/Lib/_osx_support.py +579 -0
  132. package/python/Lib/_py_abc.py +147 -0
  133. package/python/Lib/_pydatetime.py +2640 -0
  134. package/python/Lib/_pydecimal.py +6356 -0
  135. package/python/Lib/_pyio.py +2714 -0
  136. package/python/Lib/_pylong.py +363 -0
  137. package/python/Lib/_pyrepl/__init__.py +19 -0
  138. package/python/Lib/_pyrepl/__main__.py +10 -0
  139. package/python/Lib/_pyrepl/_minimal_curses.py +68 -0
  140. package/python/Lib/_pyrepl/_threading_handler.py +74 -0
  141. package/python/Lib/_pyrepl/base_eventqueue.py +110 -0
  142. package/python/Lib/_pyrepl/commands.py +492 -0
  143. package/python/Lib/_pyrepl/completing_reader.py +295 -0
  144. package/python/Lib/_pyrepl/console.py +229 -0
  145. package/python/Lib/_pyrepl/curses.py +33 -0
  146. package/python/Lib/_pyrepl/fancy_termios.py +82 -0
  147. package/python/Lib/_pyrepl/historical_reader.py +419 -0
  148. package/python/Lib/_pyrepl/input.py +114 -0
  149. package/python/Lib/_pyrepl/keymap.py +213 -0
  150. package/python/Lib/_pyrepl/main.py +59 -0
  151. package/python/Lib/_pyrepl/mypy.ini +29 -0
  152. package/python/Lib/_pyrepl/pager.py +175 -0
  153. package/python/Lib/_pyrepl/reader.py +764 -0
  154. package/python/Lib/_pyrepl/readline.py +599 -0
  155. package/python/Lib/_pyrepl/simple_interact.py +180 -0
  156. package/python/Lib/_pyrepl/trace.py +21 -0
  157. package/python/Lib/_pyrepl/types.py +10 -0
  158. package/python/Lib/_pyrepl/unix_console.py +852 -0
  159. package/python/Lib/_pyrepl/unix_eventqueue.py +76 -0
  160. package/python/Lib/_pyrepl/utils.py +83 -0
  161. package/python/Lib/_pyrepl/windows_console.py +687 -0
  162. package/python/Lib/_pyrepl/windows_eventqueue.py +42 -0
  163. package/python/Lib/_sitebuiltins.py +91 -0
  164. package/python/Lib/_strptime.py +800 -0
  165. package/python/Lib/_threading_local.py +120 -0
  166. package/python/Lib/_weakrefset.py +205 -0
  167. package/python/Lib/abc.py +188 -0
  168. package/python/Lib/antigravity.py +17 -0
  169. package/python/Lib/argparse.py +2690 -0
  170. package/python/Lib/ast.py +1865 -0
  171. package/python/Lib/asyncio/__init__.py +47 -0
  172. package/python/Lib/asyncio/__main__.py +211 -0
  173. package/python/Lib/asyncio/base_events.py +2086 -0
  174. package/python/Lib/asyncio/base_futures.py +67 -0
  175. package/python/Lib/asyncio/base_subprocess.py +312 -0
  176. package/python/Lib/asyncio/base_tasks.py +94 -0
  177. package/python/Lib/asyncio/constants.py +41 -0
  178. package/python/Lib/asyncio/coroutines.py +109 -0
  179. package/python/Lib/asyncio/events.py +885 -0
  180. package/python/Lib/asyncio/exceptions.py +62 -0
  181. package/python/Lib/asyncio/format_helpers.py +84 -0
  182. package/python/Lib/asyncio/futures.py +425 -0
  183. package/python/Lib/asyncio/locks.py +617 -0
  184. package/python/Lib/asyncio/log.py +7 -0
  185. package/python/Lib/asyncio/mixins.py +21 -0
  186. package/python/Lib/asyncio/proactor_events.py +891 -0
  187. package/python/Lib/asyncio/protocols.py +216 -0
  188. package/python/Lib/asyncio/queues.py +309 -0
  189. package/python/Lib/asyncio/runners.py +217 -0
  190. package/python/Lib/asyncio/selector_events.py +1328 -0
  191. package/python/Lib/asyncio/sslproto.py +929 -0
  192. package/python/Lib/asyncio/staggered.py +174 -0
  193. package/python/Lib/asyncio/streams.py +787 -0
  194. package/python/Lib/asyncio/subprocess.py +229 -0
  195. package/python/Lib/asyncio/taskgroups.py +278 -0
  196. package/python/Lib/asyncio/tasks.py +1121 -0
  197. package/python/Lib/asyncio/threads.py +26 -0
  198. package/python/Lib/asyncio/timeouts.py +185 -0
  199. package/python/Lib/asyncio/transports.py +337 -0
  200. package/python/Lib/asyncio/trsock.py +98 -0
  201. package/python/Lib/asyncio/unix_events.py +1550 -0
  202. package/python/Lib/asyncio/windows_events.py +906 -0
  203. package/python/Lib/asyncio/windows_utils.py +181 -0
  204. package/python/Lib/base64.py +628 -0
  205. package/python/Lib/bdb.py +973 -0
  206. package/python/Lib/bisect.py +118 -0
  207. package/python/Lib/bz2.py +352 -0
  208. package/python/Lib/cProfile.py +197 -0
  209. package/python/Lib/calendar.py +813 -0
  210. package/python/Lib/cmd.py +409 -0
  211. package/python/Lib/code.py +386 -0
  212. package/python/Lib/codecs.py +1132 -0
  213. package/python/Lib/codeop.py +155 -0
  214. package/python/Lib/collections/__init__.py +1603 -0
  215. package/python/Lib/collections/__pycache__/__init__.cpython-313.pyc +0 -0
  216. package/python/Lib/colorsys.py +166 -0
  217. package/python/Lib/compileall.py +470 -0
  218. package/python/Lib/concurrent/__init__.py +1 -0
  219. package/python/Lib/concurrent/futures/__init__.py +54 -0
  220. package/python/Lib/concurrent/futures/_base.py +660 -0
  221. package/python/Lib/concurrent/futures/process.py +892 -0
  222. package/python/Lib/concurrent/futures/thread.py +240 -0
  223. package/python/Lib/configparser.py +1396 -0
  224. package/python/Lib/contextlib.py +814 -0
  225. package/python/Lib/contextvars.py +4 -0
  226. package/python/Lib/copy.py +306 -0
  227. package/python/Lib/copyreg.py +217 -0
  228. package/python/Lib/csv.py +527 -0
  229. package/python/Lib/ctypes/__init__.py +602 -0
  230. package/python/Lib/ctypes/__pycache__/__init__.cpython-313.pyc +0 -0
  231. package/python/Lib/ctypes/__pycache__/_endian.cpython-313.pyc +0 -0
  232. package/python/Lib/ctypes/__pycache__/wintypes.cpython-313.pyc +0 -0
  233. package/python/Lib/ctypes/_aix.py +327 -0
  234. package/python/Lib/ctypes/_endian.py +78 -0
  235. package/python/Lib/ctypes/macholib/README.ctypes +7 -0
  236. package/python/Lib/ctypes/macholib/__init__.py +9 -0
  237. package/python/Lib/ctypes/macholib/dyld.py +165 -0
  238. package/python/Lib/ctypes/macholib/dylib.py +42 -0
  239. package/python/Lib/ctypes/macholib/fetch_macholib +2 -0
  240. package/python/Lib/ctypes/macholib/fetch_macholib.bat +1 -0
  241. package/python/Lib/ctypes/macholib/framework.py +42 -0
  242. package/python/Lib/ctypes/util.py +387 -0
  243. package/python/Lib/ctypes/wintypes.py +202 -0
  244. package/python/Lib/curses/__init__.py +101 -0
  245. package/python/Lib/curses/ascii.py +99 -0
  246. package/python/Lib/curses/has_key.py +192 -0
  247. package/python/Lib/curses/panel.py +6 -0
  248. package/python/Lib/curses/textpad.py +236 -0
  249. package/python/Lib/dataclasses.py +1679 -0
  250. package/python/Lib/datetime.py +9 -0
  251. package/python/Lib/dbm/__init__.py +194 -0
  252. package/python/Lib/dbm/dumb.py +319 -0
  253. package/python/Lib/dbm/gnu.py +3 -0
  254. package/python/Lib/dbm/ndbm.py +3 -0
  255. package/python/Lib/dbm/sqlite3.py +144 -0
  256. package/python/Lib/decimal.py +109 -0
  257. package/python/Lib/difflib.py +2058 -0
  258. package/python/Lib/dis.py +1075 -0
  259. package/python/Lib/doctest.py +2919 -0
  260. package/python/Lib/email/__init__.py +61 -0
  261. package/python/Lib/email/__pycache__/__init__.cpython-313.pyc +0 -0
  262. package/python/Lib/email/__pycache__/_encoded_words.cpython-313.pyc +0 -0
  263. package/python/Lib/email/__pycache__/_parseaddr.cpython-313.pyc +0 -0
  264. package/python/Lib/email/__pycache__/_policybase.cpython-313.pyc +0 -0
  265. package/python/Lib/email/__pycache__/base64mime.cpython-313.pyc +0 -0
  266. package/python/Lib/email/__pycache__/charset.cpython-313.pyc +0 -0
  267. package/python/Lib/email/__pycache__/encoders.cpython-313.pyc +0 -0
  268. package/python/Lib/email/__pycache__/errors.cpython-313.pyc +0 -0
  269. package/python/Lib/email/__pycache__/feedparser.cpython-313.pyc +0 -0
  270. package/python/Lib/email/__pycache__/header.cpython-313.pyc +0 -0
  271. package/python/Lib/email/__pycache__/iterators.cpython-313.pyc +0 -0
  272. package/python/Lib/email/__pycache__/message.cpython-313.pyc +0 -0
  273. package/python/Lib/email/__pycache__/parser.cpython-313.pyc +0 -0
  274. package/python/Lib/email/__pycache__/quoprimime.cpython-313.pyc +0 -0
  275. package/python/Lib/email/__pycache__/utils.cpython-313.pyc +0 -0
  276. package/python/Lib/email/_encoded_words.py +233 -0
  277. package/python/Lib/email/_header_value_parser.py +3153 -0
  278. package/python/Lib/email/_parseaddr.py +563 -0
  279. package/python/Lib/email/_policybase.py +382 -0
  280. package/python/Lib/email/architecture.rst +216 -0
  281. package/python/Lib/email/base64mime.py +115 -0
  282. package/python/Lib/email/charset.py +396 -0
  283. package/python/Lib/email/contentmanager.py +254 -0
  284. package/python/Lib/email/encoders.py +65 -0
  285. package/python/Lib/email/errors.py +117 -0
  286. package/python/Lib/email/feedparser.py +536 -0
  287. package/python/Lib/email/generator.py +530 -0
  288. package/python/Lib/email/header.py +582 -0
  289. package/python/Lib/email/headerregistry.py +618 -0
  290. package/python/Lib/email/iterators.py +68 -0
  291. package/python/Lib/email/message.py +1217 -0
  292. package/python/Lib/email/mime/__init__.py +0 -0
  293. package/python/Lib/email/mime/application.py +37 -0
  294. package/python/Lib/email/mime/audio.py +97 -0
  295. package/python/Lib/email/mime/base.py +29 -0
  296. package/python/Lib/email/mime/image.py +152 -0
  297. package/python/Lib/email/mime/message.py +33 -0
  298. package/python/Lib/email/mime/multipart.py +47 -0
  299. package/python/Lib/email/mime/nonmultipart.py +21 -0
  300. package/python/Lib/email/mime/text.py +40 -0
  301. package/python/Lib/email/parser.py +127 -0
  302. package/python/Lib/email/policy.py +232 -0
  303. package/python/Lib/email/quoprimime.py +300 -0
  304. package/python/Lib/email/utils.py +497 -0
  305. package/python/Lib/encodings/__init__.py +179 -0
  306. package/python/Lib/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
  307. package/python/Lib/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
  308. package/python/Lib/encodings/__pycache__/cp1252.cpython-313.pyc +0 -0
  309. package/python/Lib/encodings/__pycache__/cp437.cpython-313.pyc +0 -0
  310. package/python/Lib/encodings/__pycache__/hex_codec.cpython-313.pyc +0 -0
  311. package/python/Lib/encodings/__pycache__/idna.cpython-313.pyc +0 -0
  312. package/python/Lib/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
  313. package/python/Lib/encodings/aliases.py +560 -0
  314. package/python/Lib/encodings/ascii.py +50 -0
  315. package/python/Lib/encodings/base64_codec.py +55 -0
  316. package/python/Lib/encodings/big5.py +39 -0
  317. package/python/Lib/encodings/big5hkscs.py +39 -0
  318. package/python/Lib/encodings/bz2_codec.py +78 -0
  319. package/python/Lib/encodings/charmap.py +69 -0
  320. package/python/Lib/encodings/cp037.py +307 -0
  321. package/python/Lib/encodings/cp1006.py +307 -0
  322. package/python/Lib/encodings/cp1026.py +307 -0
  323. package/python/Lib/encodings/cp1125.py +698 -0
  324. package/python/Lib/encodings/cp1140.py +307 -0
  325. package/python/Lib/encodings/cp1250.py +307 -0
  326. package/python/Lib/encodings/cp1251.py +307 -0
  327. package/python/Lib/encodings/cp1252.py +307 -0
  328. package/python/Lib/encodings/cp1253.py +307 -0
  329. package/python/Lib/encodings/cp1254.py +307 -0
  330. package/python/Lib/encodings/cp1255.py +307 -0
  331. package/python/Lib/encodings/cp1256.py +307 -0
  332. package/python/Lib/encodings/cp1257.py +307 -0
  333. package/python/Lib/encodings/cp1258.py +307 -0
  334. package/python/Lib/encodings/cp273.py +307 -0
  335. package/python/Lib/encodings/cp424.py +307 -0
  336. package/python/Lib/encodings/cp437.py +698 -0
  337. package/python/Lib/encodings/cp500.py +307 -0
  338. package/python/Lib/encodings/cp720.py +309 -0
  339. package/python/Lib/encodings/cp737.py +698 -0
  340. package/python/Lib/encodings/cp775.py +697 -0
  341. package/python/Lib/encodings/cp850.py +698 -0
  342. package/python/Lib/encodings/cp852.py +698 -0
  343. package/python/Lib/encodings/cp855.py +698 -0
  344. package/python/Lib/encodings/cp856.py +307 -0
  345. package/python/Lib/encodings/cp857.py +694 -0
  346. package/python/Lib/encodings/cp858.py +698 -0
  347. package/python/Lib/encodings/cp860.py +698 -0
  348. package/python/Lib/encodings/cp861.py +698 -0
  349. package/python/Lib/encodings/cp862.py +698 -0
  350. package/python/Lib/encodings/cp863.py +698 -0
  351. package/python/Lib/encodings/cp864.py +690 -0
  352. package/python/Lib/encodings/cp865.py +698 -0
  353. package/python/Lib/encodings/cp866.py +698 -0
  354. package/python/Lib/encodings/cp869.py +689 -0
  355. package/python/Lib/encodings/cp874.py +307 -0
  356. package/python/Lib/encodings/cp875.py +307 -0
  357. package/python/Lib/encodings/cp932.py +39 -0
  358. package/python/Lib/encodings/cp949.py +39 -0
  359. package/python/Lib/encodings/cp950.py +39 -0
  360. package/python/Lib/encodings/euc_jis_2004.py +39 -0
  361. package/python/Lib/encodings/euc_jisx0213.py +39 -0
  362. package/python/Lib/encodings/euc_jp.py +39 -0
  363. package/python/Lib/encodings/euc_kr.py +39 -0
  364. package/python/Lib/encodings/gb18030.py +39 -0
  365. package/python/Lib/encodings/gb2312.py +39 -0
  366. package/python/Lib/encodings/gbk.py +39 -0
  367. package/python/Lib/encodings/hex_codec.py +55 -0
  368. package/python/Lib/encodings/hp_roman8.py +314 -0
  369. package/python/Lib/encodings/hz.py +39 -0
  370. package/python/Lib/encodings/idna.py +387 -0
  371. package/python/Lib/encodings/iso2022_jp.py +39 -0
  372. package/python/Lib/encodings/iso2022_jp_1.py +39 -0
  373. package/python/Lib/encodings/iso2022_jp_2.py +39 -0
  374. package/python/Lib/encodings/iso2022_jp_2004.py +39 -0
  375. package/python/Lib/encodings/iso2022_jp_3.py +39 -0
  376. package/python/Lib/encodings/iso2022_jp_ext.py +39 -0
  377. package/python/Lib/encodings/iso2022_kr.py +39 -0
  378. package/python/Lib/encodings/iso8859_1.py +307 -0
  379. package/python/Lib/encodings/iso8859_10.py +307 -0
  380. package/python/Lib/encodings/iso8859_11.py +307 -0
  381. package/python/Lib/encodings/iso8859_13.py +307 -0
  382. package/python/Lib/encodings/iso8859_14.py +307 -0
  383. package/python/Lib/encodings/iso8859_15.py +307 -0
  384. package/python/Lib/encodings/iso8859_16.py +307 -0
  385. package/python/Lib/encodings/iso8859_2.py +307 -0
  386. package/python/Lib/encodings/iso8859_3.py +307 -0
  387. package/python/Lib/encodings/iso8859_4.py +307 -0
  388. package/python/Lib/encodings/iso8859_5.py +307 -0
  389. package/python/Lib/encodings/iso8859_6.py +307 -0
  390. package/python/Lib/encodings/iso8859_7.py +307 -0
  391. package/python/Lib/encodings/iso8859_8.py +307 -0
  392. package/python/Lib/encodings/iso8859_9.py +307 -0
  393. package/python/Lib/encodings/johab.py +39 -0
  394. package/python/Lib/encodings/koi8_r.py +307 -0
  395. package/python/Lib/encodings/koi8_t.py +308 -0
  396. package/python/Lib/encodings/koi8_u.py +307 -0
  397. package/python/Lib/encodings/kz1048.py +307 -0
  398. package/python/Lib/encodings/latin_1.py +50 -0
  399. package/python/Lib/encodings/mac_arabic.py +698 -0
  400. package/python/Lib/encodings/mac_croatian.py +307 -0
  401. package/python/Lib/encodings/mac_cyrillic.py +307 -0
  402. package/python/Lib/encodings/mac_farsi.py +307 -0
  403. package/python/Lib/encodings/mac_greek.py +307 -0
  404. package/python/Lib/encodings/mac_iceland.py +307 -0
  405. package/python/Lib/encodings/mac_latin2.py +312 -0
  406. package/python/Lib/encodings/mac_roman.py +307 -0
  407. package/python/Lib/encodings/mac_romanian.py +307 -0
  408. package/python/Lib/encodings/mac_turkish.py +307 -0
  409. package/python/Lib/encodings/mbcs.py +47 -0
  410. package/python/Lib/encodings/oem.py +41 -0
  411. package/python/Lib/encodings/palmos.py +308 -0
  412. package/python/Lib/encodings/ptcp154.py +312 -0
  413. package/python/Lib/encodings/punycode.py +253 -0
  414. package/python/Lib/encodings/quopri_codec.py +56 -0
  415. package/python/Lib/encodings/raw_unicode_escape.py +46 -0
  416. package/python/Lib/encodings/rot_13.py +113 -0
  417. package/python/Lib/encodings/shift_jis.py +39 -0
  418. package/python/Lib/encodings/shift_jis_2004.py +39 -0
  419. package/python/Lib/encodings/shift_jisx0213.py +39 -0
  420. package/python/Lib/encodings/tis_620.py +307 -0
  421. package/python/Lib/encodings/undefined.py +49 -0
  422. package/python/Lib/encodings/unicode_escape.py +46 -0
  423. package/python/Lib/encodings/utf_16.py +155 -0
  424. package/python/Lib/encodings/utf_16_be.py +42 -0
  425. package/python/Lib/encodings/utf_16_le.py +42 -0
  426. package/python/Lib/encodings/utf_32.py +150 -0
  427. package/python/Lib/encodings/utf_32_be.py +37 -0
  428. package/python/Lib/encodings/utf_32_le.py +37 -0
  429. package/python/Lib/encodings/utf_7.py +38 -0
  430. package/python/Lib/encodings/utf_8.py +42 -0
  431. package/python/Lib/encodings/utf_8_sig.py +130 -0
  432. package/python/Lib/encodings/uu_codec.py +103 -0
  433. package/python/Lib/encodings/zlib_codec.py +77 -0
  434. package/python/Lib/enum.py +2183 -0
  435. package/python/Lib/filecmp.py +320 -0
  436. package/python/Lib/fileinput.py +442 -0
  437. package/python/Lib/fnmatch.py +192 -0
  438. package/python/Lib/fractions.py +1043 -0
  439. package/python/Lib/ftplib.py +975 -0
  440. package/python/Lib/functools.py +1036 -0
  441. package/python/Lib/genericpath.py +200 -0
  442. package/python/Lib/getopt.py +215 -0
  443. package/python/Lib/getpass.py +192 -0
  444. package/python/Lib/gettext.py +657 -0
  445. package/python/Lib/glob.py +572 -0
  446. package/python/Lib/graphlib.py +250 -0
  447. package/python/Lib/gzip.py +693 -0
  448. package/python/Lib/hashlib.py +255 -0
  449. package/python/Lib/heapq.py +603 -0
  450. package/python/Lib/hmac.py +220 -0
  451. package/python/Lib/html/__init__.py +132 -0
  452. package/python/Lib/html/__pycache__/__init__.cpython-313.pyc +0 -0
  453. package/python/Lib/html/__pycache__/entities.cpython-313.pyc +0 -0
  454. package/python/Lib/html/__pycache__/parser.cpython-313.pyc +0 -0
  455. package/python/Lib/html/entities.py +2513 -0
  456. package/python/Lib/html/parser.py +583 -0
  457. package/python/Lib/http/__init__.py +202 -0
  458. package/python/Lib/http/__pycache__/__init__.cpython-313.pyc +0 -0
  459. package/python/Lib/http/__pycache__/client.cpython-313.pyc +0 -0
  460. package/python/Lib/http/__pycache__/cookiejar.cpython-313.pyc +0 -0
  461. package/python/Lib/http/__pycache__/cookies.cpython-313.pyc +0 -0
  462. package/python/Lib/http/client.py +1598 -0
  463. package/python/Lib/http/cookiejar.py +2122 -0
  464. package/python/Lib/http/cookies.py +635 -0
  465. package/python/Lib/http/server.py +1355 -0
  466. package/python/Lib/imaplib.py +1769 -0
  467. package/python/Lib/importlib/__init__.py +136 -0
  468. package/python/Lib/importlib/__pycache__/__init__.cpython-313.pyc +0 -0
  469. package/python/Lib/importlib/__pycache__/_abc.cpython-313.pyc +0 -0
  470. package/python/Lib/importlib/__pycache__/abc.cpython-313.pyc +0 -0
  471. package/python/Lib/importlib/__pycache__/readers.cpython-313.pyc +0 -0
  472. package/python/Lib/importlib/_abc.py +39 -0
  473. package/python/Lib/importlib/_bootstrap.py +1559 -0
  474. package/python/Lib/importlib/_bootstrap_external.py +1826 -0
  475. package/python/Lib/importlib/abc.py +243 -0
  476. package/python/Lib/importlib/machinery.py +21 -0
  477. package/python/Lib/importlib/metadata/__init__.py +1093 -0
  478. package/python/Lib/importlib/metadata/__pycache__/__init__.cpython-313.pyc +0 -0
  479. package/python/Lib/importlib/metadata/__pycache__/_adapters.cpython-313.pyc +0 -0
  480. package/python/Lib/importlib/metadata/__pycache__/_collections.cpython-313.pyc +0 -0
  481. package/python/Lib/importlib/metadata/__pycache__/_functools.cpython-313.pyc +0 -0
  482. package/python/Lib/importlib/metadata/__pycache__/_itertools.cpython-313.pyc +0 -0
  483. package/python/Lib/importlib/metadata/__pycache__/_meta.cpython-313.pyc +0 -0
  484. package/python/Lib/importlib/metadata/__pycache__/_text.cpython-313.pyc +0 -0
  485. package/python/Lib/importlib/metadata/_adapters.py +89 -0
  486. package/python/Lib/importlib/metadata/_collections.py +30 -0
  487. package/python/Lib/importlib/metadata/_functools.py +104 -0
  488. package/python/Lib/importlib/metadata/_itertools.py +73 -0
  489. package/python/Lib/importlib/metadata/_meta.py +67 -0
  490. package/python/Lib/importlib/metadata/_text.py +99 -0
  491. package/python/Lib/importlib/metadata/diagnose.py +21 -0
  492. package/python/Lib/importlib/readers.py +12 -0
  493. package/python/Lib/importlib/resources/__init__.py +43 -0
  494. package/python/Lib/importlib/resources/__pycache__/__init__.cpython-313.pyc +0 -0
  495. package/python/Lib/importlib/resources/__pycache__/_adapters.cpython-313.pyc +0 -0
  496. package/python/Lib/importlib/resources/__pycache__/_common.cpython-313.pyc +0 -0
  497. package/python/Lib/importlib/resources/__pycache__/_functional.cpython-313.pyc +0 -0
  498. package/python/Lib/importlib/resources/__pycache__/_itertools.cpython-313.pyc +0 -0
  499. package/python/Lib/importlib/resources/__pycache__/abc.cpython-313.pyc +0 -0
  500. package/python/Lib/importlib/resources/__pycache__/readers.cpython-313.pyc +0 -0
  501. package/python/Lib/importlib/resources/_adapters.py +168 -0
  502. package/python/Lib/importlib/resources/_common.py +211 -0
  503. package/python/Lib/importlib/resources/_functional.py +81 -0
  504. package/python/Lib/importlib/resources/_itertools.py +38 -0
  505. package/python/Lib/importlib/resources/abc.py +173 -0
  506. package/python/Lib/importlib/resources/readers.py +203 -0
  507. package/python/Lib/importlib/resources/simple.py +106 -0
  508. package/python/Lib/importlib/simple.py +14 -0
  509. package/python/Lib/importlib/util.py +274 -0
  510. package/python/Lib/inspect.py +3479 -0
  511. package/python/Lib/io.py +99 -0
  512. package/python/Lib/ipaddress.py +2440 -0
  513. package/python/Lib/json/__init__.py +365 -0
  514. package/python/Lib/json/__pycache__/__init__.cpython-313.pyc +0 -0
  515. package/python/Lib/json/__pycache__/decoder.cpython-313.pyc +0 -0
  516. package/python/Lib/json/__pycache__/encoder.cpython-313.pyc +0 -0
  517. package/python/Lib/json/__pycache__/scanner.cpython-313.pyc +0 -0
  518. package/python/Lib/json/decoder.py +364 -0
  519. package/python/Lib/json/encoder.py +446 -0
  520. package/python/Lib/json/scanner.py +73 -0
  521. package/python/Lib/json/tool.py +90 -0
  522. package/python/Lib/keyword.py +64 -0
  523. package/python/Lib/linecache.py +236 -0
  524. package/python/Lib/locale.py +1987 -0
  525. package/python/Lib/logging/__init__.py +2330 -0
  526. package/python/Lib/logging/__pycache__/__init__.cpython-313.pyc +0 -0
  527. package/python/Lib/logging/__pycache__/config.cpython-313.pyc +0 -0
  528. package/python/Lib/logging/__pycache__/handlers.cpython-313.pyc +0 -0
  529. package/python/Lib/logging/config.py +1080 -0
  530. package/python/Lib/logging/handlers.py +1629 -0
  531. package/python/Lib/lzma.py +364 -0
  532. package/python/Lib/mailbox.py +2219 -0
  533. package/python/Lib/mimetypes.py +679 -0
  534. package/python/Lib/modulefinder.py +671 -0
  535. package/python/Lib/multiprocessing/__init__.py +37 -0
  536. package/python/Lib/multiprocessing/connection.py +1216 -0
  537. package/python/Lib/multiprocessing/context.py +383 -0
  538. package/python/Lib/multiprocessing/dummy/__init__.py +126 -0
  539. package/python/Lib/multiprocessing/dummy/connection.py +75 -0
  540. package/python/Lib/multiprocessing/forkserver.py +373 -0
  541. package/python/Lib/multiprocessing/heap.py +337 -0
  542. package/python/Lib/multiprocessing/managers.py +1397 -0
  543. package/python/Lib/multiprocessing/pool.py +957 -0
  544. package/python/Lib/multiprocessing/popen_fork.py +97 -0
  545. package/python/Lib/multiprocessing/popen_forkserver.py +74 -0
  546. package/python/Lib/multiprocessing/popen_spawn_posix.py +76 -0
  547. package/python/Lib/multiprocessing/popen_spawn_win32.py +147 -0
  548. package/python/Lib/multiprocessing/process.py +436 -0
  549. package/python/Lib/multiprocessing/queues.py +399 -0
  550. package/python/Lib/multiprocessing/reduction.py +281 -0
  551. package/python/Lib/multiprocessing/resource_sharer.py +154 -0
  552. package/python/Lib/multiprocessing/resource_tracker.py +499 -0
  553. package/python/Lib/multiprocessing/shared_memory.py +544 -0
  554. package/python/Lib/multiprocessing/sharedctypes.py +240 -0
  555. package/python/Lib/multiprocessing/spawn.py +307 -0
  556. package/python/Lib/multiprocessing/synchronize.py +404 -0
  557. package/python/Lib/multiprocessing/util.py +562 -0
  558. package/python/Lib/netrc.py +199 -0
  559. package/python/Lib/ntpath.py +872 -0
  560. package/python/Lib/nturl2path.py +69 -0
  561. package/python/Lib/numbers.py +427 -0
  562. package/python/Lib/opcode.py +115 -0
  563. package/python/Lib/operator.py +467 -0
  564. package/python/Lib/optparse.py +1681 -0
  565. package/python/Lib/os.py +1184 -0
  566. package/python/Lib/pathlib/__init__.py +12 -0
  567. package/python/Lib/pathlib/__pycache__/__init__.cpython-313.pyc +0 -0
  568. package/python/Lib/pathlib/__pycache__/_abc.cpython-313.pyc +0 -0
  569. package/python/Lib/pathlib/__pycache__/_local.cpython-313.pyc +0 -0
  570. package/python/Lib/pathlib/_abc.py +930 -0
  571. package/python/Lib/pathlib/_local.py +861 -0
  572. package/python/Lib/pdb.py +2550 -0
  573. package/python/Lib/pickle.py +1860 -0
  574. package/python/Lib/pickletools.py +2904 -0
  575. package/python/Lib/pkgutil.py +529 -0
  576. package/python/Lib/platform.py +1454 -0
  577. package/python/Lib/plistlib.py +948 -0
  578. package/python/Lib/poplib.py +477 -0
  579. package/python/Lib/posixpath.py +578 -0
  580. package/python/Lib/pprint.py +658 -0
  581. package/python/Lib/profile.py +616 -0
  582. package/python/Lib/pstats.py +778 -0
  583. package/python/Lib/pty.py +211 -0
  584. package/python/Lib/py_compile.py +212 -0
  585. package/python/Lib/pyclbr.py +314 -0
  586. package/python/Lib/pydoc.py +2861 -0
  587. package/python/Lib/queue.py +383 -0
  588. package/python/Lib/quopri.py +237 -0
  589. package/python/Lib/random.py +1078 -0
  590. package/python/Lib/re/__init__.py +428 -0
  591. package/python/Lib/re/__pycache__/__init__.cpython-313.pyc +0 -0
  592. package/python/Lib/re/__pycache__/_casefix.cpython-313.pyc +0 -0
  593. package/python/Lib/re/__pycache__/_compiler.cpython-313.pyc +0 -0
  594. package/python/Lib/re/__pycache__/_constants.cpython-313.pyc +0 -0
  595. package/python/Lib/re/__pycache__/_parser.cpython-313.pyc +0 -0
  596. package/python/Lib/re/_casefix.py +106 -0
  597. package/python/Lib/re/_compiler.py +768 -0
  598. package/python/Lib/re/_constants.py +222 -0
  599. package/python/Lib/re/_parser.py +1081 -0
  600. package/python/Lib/reprlib.py +230 -0
  601. package/python/Lib/rlcompleter.py +222 -0
  602. package/python/Lib/runpy.py +326 -0
  603. package/python/Lib/sched.py +167 -0
  604. package/python/Lib/secrets.py +71 -0
  605. package/python/Lib/selectors.py +603 -0
  606. package/python/Lib/shelve.py +250 -0
  607. package/python/Lib/shlex.py +345 -0
  608. package/python/Lib/shutil.py +1569 -0
  609. package/python/Lib/signal.py +94 -0
  610. package/python/Lib/site.py +773 -0
  611. package/python/Lib/smtplib.py +1123 -0
  612. package/python/Lib/socket.py +988 -0
  613. package/python/Lib/socketserver.py +863 -0
  614. package/python/Lib/sqlite3/__init__.py +70 -0
  615. package/python/Lib/sqlite3/__main__.py +139 -0
  616. package/python/Lib/sqlite3/dbapi2.py +108 -0
  617. package/python/Lib/sqlite3/dump.py +118 -0
  618. package/python/Lib/sre_compile.py +7 -0
  619. package/python/Lib/sre_constants.py +7 -0
  620. package/python/Lib/sre_parse.py +7 -0
  621. package/python/Lib/ssl.py +1529 -0
  622. package/python/Lib/stat.py +212 -0
  623. package/python/Lib/statistics.py +1817 -0
  624. package/python/Lib/string.py +314 -0
  625. package/python/Lib/stringprep.py +272 -0
  626. package/python/Lib/struct.py +15 -0
  627. package/python/Lib/subprocess.py +2258 -0
  628. package/python/Lib/symtable.py +414 -0
  629. package/python/Lib/sysconfig/__init__.py +734 -0
  630. package/python/Lib/sysconfig/__main__.py +248 -0
  631. package/python/Lib/sysconfig/__pycache__/__init__.cpython-313.pyc +0 -0
  632. package/python/Lib/tabnanny.py +340 -0
  633. package/python/Lib/tarfile.py +3136 -0
  634. package/python/Lib/tempfile.py +958 -0
  635. package/python/Lib/textwrap.py +497 -0
  636. package/python/Lib/this.py +28 -0
  637. package/python/Lib/threading.py +1602 -0
  638. package/python/Lib/timeit.py +381 -0
  639. package/python/Lib/token.py +141 -0
  640. package/python/Lib/tokenize.py +592 -0
  641. package/python/Lib/tomllib/__init__.py +10 -0
  642. package/python/Lib/tomllib/__pycache__/__init__.cpython-313.pyc +0 -0
  643. package/python/Lib/tomllib/__pycache__/_parser.cpython-313.pyc +0 -0
  644. package/python/Lib/tomllib/__pycache__/_re.cpython-313.pyc +0 -0
  645. package/python/Lib/tomllib/__pycache__/_types.cpython-313.pyc +0 -0
  646. package/python/Lib/tomllib/_parser.py +703 -0
  647. package/python/Lib/tomllib/_re.py +107 -0
  648. package/python/Lib/tomllib/_types.py +10 -0
  649. package/python/Lib/tomllib/mypy.ini +15 -0
  650. package/python/Lib/trace.py +754 -0
  651. package/python/Lib/traceback.py +1639 -0
  652. package/python/Lib/tracemalloc.py +560 -0
  653. package/python/Lib/tty.py +73 -0
  654. package/python/Lib/types.py +346 -0
  655. package/python/Lib/typing.py +3846 -0
  656. package/python/Lib/unittest/__init__.py +80 -0
  657. package/python/Lib/unittest/__main__.py +18 -0
  658. package/python/Lib/unittest/_log.py +86 -0
  659. package/python/Lib/unittest/async_case.py +146 -0
  660. package/python/Lib/unittest/case.py +1478 -0
  661. package/python/Lib/unittest/loader.py +460 -0
  662. package/python/Lib/unittest/main.py +280 -0
  663. package/python/Lib/unittest/mock.py +3189 -0
  664. package/python/Lib/unittest/result.py +256 -0
  665. package/python/Lib/unittest/runner.py +292 -0
  666. package/python/Lib/unittest/signals.py +71 -0
  667. package/python/Lib/unittest/suite.py +379 -0
  668. package/python/Lib/unittest/util.py +170 -0
  669. package/python/Lib/urllib/__init__.py +0 -0
  670. package/python/Lib/urllib/__pycache__/__init__.cpython-313.pyc +0 -0
  671. package/python/Lib/urllib/__pycache__/error.cpython-313.pyc +0 -0
  672. package/python/Lib/urllib/__pycache__/parse.cpython-313.pyc +0 -0
  673. package/python/Lib/urllib/__pycache__/request.cpython-313.pyc +0 -0
  674. package/python/Lib/urllib/__pycache__/response.cpython-313.pyc +0 -0
  675. package/python/Lib/urllib/error.py +74 -0
  676. package/python/Lib/urllib/parse.py +1264 -0
  677. package/python/Lib/urllib/request.py +2796 -0
  678. package/python/Lib/urllib/response.py +84 -0
  679. package/python/Lib/urllib/robotparser.py +363 -0
  680. package/python/Lib/uuid.py +784 -0
  681. package/python/Lib/warnings.py +735 -0
  682. package/python/Lib/wave.py +665 -0
  683. package/python/Lib/weakref.py +674 -0
  684. package/python/Lib/webbrowser.py +724 -0
  685. package/python/Lib/wsgiref/__init__.py +25 -0
  686. package/python/Lib/wsgiref/handlers.py +575 -0
  687. package/python/Lib/wsgiref/headers.py +192 -0
  688. package/python/Lib/wsgiref/simple_server.py +161 -0
  689. package/python/Lib/wsgiref/types.py +54 -0
  690. package/python/Lib/wsgiref/util.py +159 -0
  691. package/python/Lib/wsgiref/validate.py +438 -0
  692. package/python/Lib/xml/__init__.py +20 -0
  693. package/python/Lib/xml/__pycache__/__init__.cpython-313.pyc +0 -0
  694. package/python/Lib/xml/dom/NodeFilter.py +27 -0
  695. package/python/Lib/xml/dom/__init__.py +140 -0
  696. package/python/Lib/xml/dom/domreg.py +99 -0
  697. package/python/Lib/xml/dom/expatbuilder.py +962 -0
  698. package/python/Lib/xml/dom/minicompat.py +109 -0
  699. package/python/Lib/xml/dom/minidom.py +2024 -0
  700. package/python/Lib/xml/dom/pulldom.py +336 -0
  701. package/python/Lib/xml/dom/xmlbuilder.py +389 -0
  702. package/python/Lib/xml/etree/ElementInclude.py +186 -0
  703. package/python/Lib/xml/etree/ElementPath.py +430 -0
  704. package/python/Lib/xml/etree/ElementTree.py +2116 -0
  705. package/python/Lib/xml/etree/__init__.py +33 -0
  706. package/python/Lib/xml/etree/cElementTree.py +3 -0
  707. package/python/Lib/xml/parsers/__init__.py +8 -0
  708. package/python/Lib/xml/parsers/__pycache__/__init__.cpython-313.pyc +0 -0
  709. package/python/Lib/xml/parsers/__pycache__/expat.cpython-313.pyc +0 -0
  710. package/python/Lib/xml/parsers/expat.py +8 -0
  711. package/python/Lib/xml/sax/__init__.py +94 -0
  712. package/python/Lib/xml/sax/_exceptions.py +127 -0
  713. package/python/Lib/xml/sax/expatreader.py +454 -0
  714. package/python/Lib/xml/sax/handler.py +387 -0
  715. package/python/Lib/xml/sax/saxutils.py +369 -0
  716. package/python/Lib/xml/sax/xmlreader.py +378 -0
  717. package/python/Lib/xmlrpc/__init__.py +1 -0
  718. package/python/Lib/xmlrpc/__pycache__/__init__.cpython-313.pyc +0 -0
  719. package/python/Lib/xmlrpc/__pycache__/client.cpython-313.pyc +0 -0
  720. package/python/Lib/xmlrpc/client.py +1503 -0
  721. package/python/Lib/xmlrpc/server.py +1002 -0
  722. package/python/Lib/zipapp.py +229 -0
  723. package/python/Lib/zipfile/__init__.py +2391 -0
  724. package/python/Lib/zipfile/__main__.py +4 -0
  725. package/python/Lib/zipfile/__pycache__/__init__.cpython-313.pyc +0 -0
  726. package/python/Lib/zipfile/_path/__init__.py +452 -0
  727. package/python/Lib/zipfile/_path/__pycache__/__init__.cpython-313.pyc +0 -0
  728. package/python/Lib/zipfile/_path/__pycache__/glob.cpython-313.pyc +0 -0
  729. package/python/Lib/zipfile/_path/glob.py +113 -0
  730. package/python/Lib/zipimport.py +803 -0
  731. package/python/Lib/zoneinfo/__init__.py +34 -0
  732. package/python/Lib/zoneinfo/_common.py +172 -0
  733. package/python/Lib/zoneinfo/_tzpath.py +189 -0
  734. package/python/Lib/zoneinfo/_zoneinfo.py +779 -0
  735. package/python/licenses/LICENSE.bdb.txt +126 -0
  736. package/python/licenses/LICENSE.bzip2.txt +37 -0
  737. package/python/licenses/LICENSE.cpython.txt +771 -0
  738. package/python/licenses/LICENSE.expat.txt +21 -0
  739. package/python/licenses/LICENSE.libX11.txt +942 -0
  740. package/python/licenses/LICENSE.libXau.txt +21 -0
  741. package/python/licenses/LICENSE.libedit.txt +29 -0
  742. package/python/licenses/LICENSE.libffi.txt +21 -0
  743. package/python/licenses/LICENSE.liblzma.txt +13 -0
  744. package/python/licenses/LICENSE.libuuid.txt +27 -0
  745. package/python/licenses/LICENSE.libxcb.txt +30 -0
  746. package/python/licenses/LICENSE.mpdecimal.txt +24 -0
  747. package/python/licenses/LICENSE.ncurses.txt +29 -0
  748. package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
  749. package/python/licenses/LICENSE.openssl-3.txt +177 -0
  750. package/python/licenses/LICENSE.sqlite.txt +23 -0
  751. package/python/licenses/LICENSE.tcl.txt +40 -0
  752. package/python/licenses/LICENSE.tix.txt +54 -0
  753. package/python/licenses/LICENSE.zlib.txt +21 -0
  754. package/python/python.exe +0 -0
  755. package/python/python3.dll +0 -0
  756. package/python/python313.dll +0 -0
  757. package/python/pythonw.exe +0 -0
  758. package/python/vcruntime140.dll +0 -0
  759. package/python/vcruntime140_1.dll +0 -0
@@ -0,0 +1,1987 @@
1
+ """Locale support module.
2
+
3
+ The module provides low-level access to the C lib's locale APIs and adds high
4
+ level number formatting APIs as well as a locale aliasing engine to complement
5
+ these.
6
+
7
+ The aliasing engine includes support for many commonly used locale names and
8
+ maps them to values suitable for passing to the C lib's setlocale() function. It
9
+ also includes default encodings for all supported locale names.
10
+
11
+ """
12
+
13
+ import sys
14
+ import encodings
15
+ import encodings.aliases
16
+ import re
17
+ import _collections_abc
18
+ from builtins import str as _builtin_str
19
+ import functools
20
+
21
+ # Try importing the _locale module.
22
+ #
23
+ # If this fails, fall back on a basic 'C' locale emulation.
24
+
25
+ # Yuck: LC_MESSAGES is non-standard: can't tell whether it exists before
26
+ # trying the import. So __all__ is also fiddled at the end of the file.
27
+ __all__ = ["getlocale", "getdefaultlocale", "getpreferredencoding", "Error",
28
+ "setlocale", "localeconv", "strcoll", "strxfrm",
29
+ "str", "atof", "atoi", "format_string", "currency",
30
+ "normalize", "LC_CTYPE", "LC_COLLATE", "LC_TIME", "LC_MONETARY",
31
+ "LC_NUMERIC", "LC_ALL", "CHAR_MAX", "getencoding"]
32
+
33
+ def _strcoll(a,b):
34
+ """ strcoll(string,string) -> int.
35
+ Compares two strings according to the locale.
36
+ """
37
+ return (a > b) - (a < b)
38
+
39
+ def _strxfrm(s):
40
+ """ strxfrm(string) -> string.
41
+ Returns a string that behaves for cmp locale-aware.
42
+ """
43
+ return s
44
+
45
+ try:
46
+
47
+ from _locale import *
48
+
49
+ except ImportError:
50
+
51
+ # Locale emulation
52
+
53
+ CHAR_MAX = 127
54
+ LC_ALL = 6
55
+ LC_COLLATE = 3
56
+ LC_CTYPE = 0
57
+ LC_MESSAGES = 5
58
+ LC_MONETARY = 4
59
+ LC_NUMERIC = 1
60
+ LC_TIME = 2
61
+ Error = ValueError
62
+
63
+ def localeconv():
64
+ """ localeconv() -> dict.
65
+ Returns numeric and monetary locale-specific parameters.
66
+ """
67
+ # 'C' locale default values
68
+ return {'grouping': [127],
69
+ 'currency_symbol': '',
70
+ 'n_sign_posn': 127,
71
+ 'p_cs_precedes': 127,
72
+ 'n_cs_precedes': 127,
73
+ 'mon_grouping': [],
74
+ 'n_sep_by_space': 127,
75
+ 'decimal_point': '.',
76
+ 'negative_sign': '',
77
+ 'positive_sign': '',
78
+ 'p_sep_by_space': 127,
79
+ 'int_curr_symbol': '',
80
+ 'p_sign_posn': 127,
81
+ 'thousands_sep': '',
82
+ 'mon_thousands_sep': '',
83
+ 'frac_digits': 127,
84
+ 'mon_decimal_point': '',
85
+ 'int_frac_digits': 127}
86
+
87
+ def setlocale(category, value=None):
88
+ """ setlocale(integer,string=None) -> string.
89
+ Activates/queries locale processing.
90
+ """
91
+ if value not in (None, '', 'C'):
92
+ raise Error('_locale emulation only supports "C" locale')
93
+ return 'C'
94
+
95
+ # These may or may not exist in _locale, so be sure to set them.
96
+ if 'strxfrm' not in globals():
97
+ strxfrm = _strxfrm
98
+ if 'strcoll' not in globals():
99
+ strcoll = _strcoll
100
+
101
+
102
+ _localeconv = localeconv
103
+
104
+ # With this dict, you can override some items of localeconv's return value.
105
+ # This is useful for testing purposes.
106
+ _override_localeconv = {}
107
+
108
+ @functools.wraps(_localeconv)
109
+ def localeconv():
110
+ d = _localeconv()
111
+ if _override_localeconv:
112
+ d.update(_override_localeconv)
113
+ return d
114
+
115
+
116
+ ### Number formatting APIs
117
+
118
+ # Author: Martin von Loewis
119
+ # improved by Georg Brandl
120
+
121
+ # Iterate over grouping intervals
122
+ def _grouping_intervals(grouping):
123
+ last_interval = None
124
+ for interval in grouping:
125
+ # if grouping is -1, we are done
126
+ if interval == CHAR_MAX:
127
+ return
128
+ # 0: re-use last group ad infinitum
129
+ if interval == 0:
130
+ if last_interval is None:
131
+ raise ValueError("invalid grouping")
132
+ while True:
133
+ yield last_interval
134
+ yield interval
135
+ last_interval = interval
136
+
137
+ #perform the grouping from right to left
138
+ def _group(s, monetary=False):
139
+ conv = localeconv()
140
+ thousands_sep = conv[monetary and 'mon_thousands_sep' or 'thousands_sep']
141
+ grouping = conv[monetary and 'mon_grouping' or 'grouping']
142
+ if not grouping:
143
+ return (s, 0)
144
+ if s[-1] == ' ':
145
+ stripped = s.rstrip()
146
+ right_spaces = s[len(stripped):]
147
+ s = stripped
148
+ else:
149
+ right_spaces = ''
150
+ left_spaces = ''
151
+ groups = []
152
+ for interval in _grouping_intervals(grouping):
153
+ if not s or s[-1] not in "0123456789":
154
+ # only non-digit characters remain (sign, spaces)
155
+ left_spaces = s
156
+ s = ''
157
+ break
158
+ groups.append(s[-interval:])
159
+ s = s[:-interval]
160
+ if s:
161
+ groups.append(s)
162
+ groups.reverse()
163
+ return (
164
+ left_spaces + thousands_sep.join(groups) + right_spaces,
165
+ len(thousands_sep) * (len(groups) - 1)
166
+ )
167
+
168
+ # Strip a given amount of excess padding from the given string
169
+ def _strip_padding(s, amount):
170
+ lpos = 0
171
+ while amount and s[lpos] == ' ':
172
+ lpos += 1
173
+ amount -= 1
174
+ rpos = len(s) - 1
175
+ while amount and s[rpos] == ' ':
176
+ rpos -= 1
177
+ amount -= 1
178
+ return s[lpos:rpos+1]
179
+
180
+ _percent_re = re.compile(r'%(?:\((?P<key>.*?)\))?'
181
+ r'(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
182
+
183
+ def _format(percent, value, grouping=False, monetary=False, *additional):
184
+ if additional:
185
+ formatted = percent % ((value,) + additional)
186
+ else:
187
+ formatted = percent % value
188
+ if percent[-1] in 'eEfFgGdiu':
189
+ formatted = _localize(formatted, grouping, monetary)
190
+ return formatted
191
+
192
+ # Transform formatted as locale number according to the locale settings
193
+ def _localize(formatted, grouping=False, monetary=False):
194
+ # floats and decimal ints need special action!
195
+ if '.' in formatted:
196
+ seps = 0
197
+ parts = formatted.split('.')
198
+ if grouping:
199
+ parts[0], seps = _group(parts[0], monetary=monetary)
200
+ decimal_point = localeconv()[monetary and 'mon_decimal_point'
201
+ or 'decimal_point']
202
+ formatted = decimal_point.join(parts)
203
+ if seps:
204
+ formatted = _strip_padding(formatted, seps)
205
+ else:
206
+ seps = 0
207
+ if grouping:
208
+ formatted, seps = _group(formatted, monetary=monetary)
209
+ if seps:
210
+ formatted = _strip_padding(formatted, seps)
211
+ return formatted
212
+
213
+ def format_string(f, val, grouping=False, monetary=False):
214
+ """Formats a string in the same way that the % formatting would use,
215
+ but takes the current locale into account.
216
+
217
+ Grouping is applied if the third parameter is true.
218
+ Conversion uses monetary thousands separator and grouping strings if
219
+ forth parameter monetary is true."""
220
+ percents = list(_percent_re.finditer(f))
221
+ new_f = _percent_re.sub('%s', f)
222
+
223
+ if isinstance(val, _collections_abc.Mapping):
224
+ new_val = []
225
+ for perc in percents:
226
+ if perc.group()[-1]=='%':
227
+ new_val.append('%')
228
+ else:
229
+ new_val.append(_format(perc.group(), val, grouping, monetary))
230
+ else:
231
+ if not isinstance(val, tuple):
232
+ val = (val,)
233
+ new_val = []
234
+ i = 0
235
+ for perc in percents:
236
+ if perc.group()[-1]=='%':
237
+ new_val.append('%')
238
+ else:
239
+ starcount = perc.group('modifiers').count('*')
240
+ new_val.append(_format(perc.group(),
241
+ val[i],
242
+ grouping,
243
+ monetary,
244
+ *val[i+1:i+1+starcount]))
245
+ i += (1 + starcount)
246
+ val = tuple(new_val)
247
+
248
+ return new_f % val
249
+
250
+ def currency(val, symbol=True, grouping=False, international=False):
251
+ """Formats val according to the currency settings
252
+ in the current locale."""
253
+ conv = localeconv()
254
+
255
+ # check for illegal values
256
+ digits = conv[international and 'int_frac_digits' or 'frac_digits']
257
+ if digits == 127:
258
+ raise ValueError("Currency formatting is not possible using "
259
+ "the 'C' locale.")
260
+
261
+ s = _localize(f'{abs(val):.{digits}f}', grouping, monetary=True)
262
+ # '<' and '>' are markers if the sign must be inserted between symbol and value
263
+ s = '<' + s + '>'
264
+
265
+ if symbol:
266
+ smb = conv[international and 'int_curr_symbol' or 'currency_symbol']
267
+ precedes = conv[val<0 and 'n_cs_precedes' or 'p_cs_precedes']
268
+ separated = conv[val<0 and 'n_sep_by_space' or 'p_sep_by_space']
269
+
270
+ if precedes:
271
+ s = smb + (separated and ' ' or '') + s
272
+ else:
273
+ if international and smb[-1] == ' ':
274
+ smb = smb[:-1]
275
+ s = s + (separated and ' ' or '') + smb
276
+
277
+ sign_pos = conv[val<0 and 'n_sign_posn' or 'p_sign_posn']
278
+ sign = conv[val<0 and 'negative_sign' or 'positive_sign']
279
+
280
+ if sign_pos == 0:
281
+ s = '(' + s + ')'
282
+ elif sign_pos == 1:
283
+ s = sign + s
284
+ elif sign_pos == 2:
285
+ s = s + sign
286
+ elif sign_pos == 3:
287
+ s = s.replace('<', sign)
288
+ elif sign_pos == 4:
289
+ s = s.replace('>', sign)
290
+ else:
291
+ # the default if nothing specified;
292
+ # this should be the most fitting sign position
293
+ s = sign + s
294
+
295
+ return s.replace('<', '').replace('>', '')
296
+
297
+ def str(val):
298
+ """Convert float to string, taking the locale into account."""
299
+ return _format("%.12g", val)
300
+
301
+ def delocalize(string):
302
+ "Parses a string as a normalized number according to the locale settings."
303
+
304
+ conv = localeconv()
305
+
306
+ #First, get rid of the grouping
307
+ ts = conv['thousands_sep']
308
+ if ts:
309
+ string = string.replace(ts, '')
310
+
311
+ #next, replace the decimal point with a dot
312
+ dd = conv['decimal_point']
313
+ if dd:
314
+ string = string.replace(dd, '.')
315
+ return string
316
+
317
+ def localize(string, grouping=False, monetary=False):
318
+ """Parses a string as locale number according to the locale settings."""
319
+ return _localize(string, grouping, monetary)
320
+
321
+ def atof(string, func=float):
322
+ "Parses a string as a float according to the locale settings."
323
+ return func(delocalize(string))
324
+
325
+ def atoi(string):
326
+ "Converts a string to an integer according to the locale settings."
327
+ return int(delocalize(string))
328
+
329
+ def _test():
330
+ setlocale(LC_ALL, "")
331
+ #do grouping
332
+ s1 = format_string("%d", 123456789,1)
333
+ print(s1, "is", atoi(s1))
334
+ #standard formatting
335
+ s1 = str(3.14)
336
+ print(s1, "is", atof(s1))
337
+
338
+ ### Locale name aliasing engine
339
+
340
+ # Author: Marc-Andre Lemburg, mal@lemburg.com
341
+ # Various tweaks by Fredrik Lundh <fredrik@pythonware.com>
342
+
343
+ # store away the low-level version of setlocale (it's
344
+ # overridden below)
345
+ _setlocale = setlocale
346
+
347
+ def _replace_encoding(code, encoding):
348
+ if '.' in code:
349
+ langname = code[:code.index('.')]
350
+ else:
351
+ langname = code
352
+ # Convert the encoding to a C lib compatible encoding string
353
+ norm_encoding = encodings.normalize_encoding(encoding)
354
+ #print('norm encoding: %r' % norm_encoding)
355
+ norm_encoding = encodings.aliases.aliases.get(norm_encoding.lower(),
356
+ norm_encoding)
357
+ #print('aliased encoding: %r' % norm_encoding)
358
+ encoding = norm_encoding
359
+ norm_encoding = norm_encoding.lower()
360
+ if norm_encoding in locale_encoding_alias:
361
+ encoding = locale_encoding_alias[norm_encoding]
362
+ else:
363
+ norm_encoding = norm_encoding.replace('_', '')
364
+ norm_encoding = norm_encoding.replace('-', '')
365
+ if norm_encoding in locale_encoding_alias:
366
+ encoding = locale_encoding_alias[norm_encoding]
367
+ #print('found encoding %r' % encoding)
368
+ return langname + '.' + encoding
369
+
370
+ def _append_modifier(code, modifier):
371
+ if modifier == 'euro':
372
+ if '.' not in code:
373
+ return code + '.ISO8859-15'
374
+ _, _, encoding = code.partition('.')
375
+ if encoding in ('ISO8859-15', 'UTF-8'):
376
+ return code
377
+ if encoding == 'ISO8859-1':
378
+ return _replace_encoding(code, 'ISO8859-15')
379
+ return code + '@' + modifier
380
+
381
+ def normalize(localename):
382
+
383
+ """ Returns a normalized locale code for the given locale
384
+ name.
385
+
386
+ The returned locale code is formatted for use with
387
+ setlocale().
388
+
389
+ If normalization fails, the original name is returned
390
+ unchanged.
391
+
392
+ If the given encoding is not known, the function defaults to
393
+ the default encoding for the locale code just like setlocale()
394
+ does.
395
+
396
+ """
397
+ # Normalize the locale name and extract the encoding and modifier
398
+ code = localename.lower()
399
+ if ':' in code:
400
+ # ':' is sometimes used as encoding delimiter.
401
+ code = code.replace(':', '.')
402
+ if '@' in code:
403
+ code, modifier = code.split('@', 1)
404
+ else:
405
+ modifier = ''
406
+ if '.' in code:
407
+ langname, encoding = code.split('.')[:2]
408
+ else:
409
+ langname = code
410
+ encoding = ''
411
+
412
+ # First lookup: fullname (possibly with encoding and modifier)
413
+ lang_enc = langname
414
+ if encoding:
415
+ norm_encoding = encoding.replace('-', '')
416
+ norm_encoding = norm_encoding.replace('_', '')
417
+ lang_enc += '.' + norm_encoding
418
+ lookup_name = lang_enc
419
+ if modifier:
420
+ lookup_name += '@' + modifier
421
+ code = locale_alias.get(lookup_name, None)
422
+ if code is not None:
423
+ return code
424
+ #print('first lookup failed')
425
+
426
+ if modifier:
427
+ # Second try: fullname without modifier (possibly with encoding)
428
+ code = locale_alias.get(lang_enc, None)
429
+ if code is not None:
430
+ #print('lookup without modifier succeeded')
431
+ if '@' not in code:
432
+ return _append_modifier(code, modifier)
433
+ if code.split('@', 1)[1].lower() == modifier:
434
+ return code
435
+ #print('second lookup failed')
436
+
437
+ if encoding:
438
+ # Third try: langname (without encoding, possibly with modifier)
439
+ lookup_name = langname
440
+ if modifier:
441
+ lookup_name += '@' + modifier
442
+ code = locale_alias.get(lookup_name, None)
443
+ if code is not None:
444
+ #print('lookup without encoding succeeded')
445
+ if '@' not in code:
446
+ return _replace_encoding(code, encoding)
447
+ code, modifier = code.split('@', 1)
448
+ return _replace_encoding(code, encoding) + '@' + modifier
449
+
450
+ if modifier:
451
+ # Fourth try: langname (without encoding and modifier)
452
+ code = locale_alias.get(langname, None)
453
+ if code is not None:
454
+ #print('lookup without modifier and encoding succeeded')
455
+ if '@' not in code:
456
+ code = _replace_encoding(code, encoding)
457
+ return _append_modifier(code, modifier)
458
+ code, defmod = code.split('@', 1)
459
+ if defmod.lower() == modifier:
460
+ return _replace_encoding(code, encoding) + '@' + defmod
461
+
462
+ return localename
463
+
464
+ def _parse_localename(localename):
465
+
466
+ """ Parses the locale code for localename and returns the
467
+ result as tuple (language code, encoding).
468
+
469
+ The localename is normalized and passed through the locale
470
+ alias engine. A ValueError is raised in case the locale name
471
+ cannot be parsed.
472
+
473
+ The language code corresponds to RFC 1766. code and encoding
474
+ can be None in case the values cannot be determined or are
475
+ unknown to this implementation.
476
+
477
+ """
478
+ code = normalize(localename)
479
+ if '@' in code:
480
+ # Deal with locale modifiers
481
+ code, modifier = code.split('@', 1)
482
+ if modifier == 'euro' and '.' not in code:
483
+ # Assume Latin-9 for @euro locales. This is bogus,
484
+ # since some systems may use other encodings for these
485
+ # locales. Also, we ignore other modifiers.
486
+ return code, 'iso-8859-15'
487
+
488
+ if '.' in code:
489
+ return tuple(code.split('.')[:2])
490
+ elif code == 'C':
491
+ return None, None
492
+ elif code == 'UTF-8':
493
+ # On macOS "LC_CTYPE=UTF-8" is a valid locale setting
494
+ # for getting UTF-8 handling for text.
495
+ return None, 'UTF-8'
496
+ raise ValueError('unknown locale: %s' % localename)
497
+
498
+ def _build_localename(localetuple):
499
+
500
+ """ Builds a locale code from the given tuple (language code,
501
+ encoding).
502
+
503
+ No aliasing or normalizing takes place.
504
+
505
+ """
506
+ try:
507
+ language, encoding = localetuple
508
+
509
+ if language is None:
510
+ language = 'C'
511
+ if encoding is None:
512
+ return language
513
+ else:
514
+ return language + '.' + encoding
515
+ except (TypeError, ValueError):
516
+ raise TypeError('Locale must be None, a string, or an iterable of '
517
+ 'two strings -- language code, encoding.') from None
518
+
519
+ def getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')):
520
+
521
+ """ Tries to determine the default locale settings and returns
522
+ them as tuple (language code, encoding).
523
+
524
+ According to POSIX, a program which has not called
525
+ setlocale(LC_ALL, "") runs using the portable 'C' locale.
526
+ Calling setlocale(LC_ALL, "") lets it use the default locale as
527
+ defined by the LANG variable. Since we don't want to interfere
528
+ with the current locale setting we thus emulate the behavior
529
+ in the way described above.
530
+
531
+ To maintain compatibility with other platforms, not only the
532
+ LANG variable is tested, but a list of variables given as
533
+ envvars parameter. The first found to be defined will be
534
+ used. envvars defaults to the search path used in GNU gettext;
535
+ it must always contain the variable name 'LANG'.
536
+
537
+ Except for the code 'C', the language code corresponds to RFC
538
+ 1766. code and encoding can be None in case the values cannot
539
+ be determined.
540
+
541
+ """
542
+
543
+ return _getdefaultlocale(envvars)
544
+
545
+
546
+ def _getdefaultlocale(envvars=('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')):
547
+ try:
548
+ # check if it's supported by the _locale module
549
+ import _locale
550
+ code, encoding = _locale._getdefaultlocale()
551
+ except (ImportError, AttributeError):
552
+ pass
553
+ else:
554
+ # make sure the code/encoding values are valid
555
+ if sys.platform == "win32" and code and code[:2] == "0x":
556
+ # map windows language identifier to language name
557
+ code = windows_locale.get(int(code, 0))
558
+ # ...add other platform-specific processing here, if
559
+ # necessary...
560
+ return code, encoding
561
+
562
+ # fall back on POSIX behaviour
563
+ import os
564
+ lookup = os.environ.get
565
+ for variable in envvars:
566
+ localename = lookup(variable,None)
567
+ if localename:
568
+ if variable == 'LANGUAGE':
569
+ localename = localename.split(':')[0]
570
+ break
571
+ else:
572
+ localename = 'C'
573
+ return _parse_localename(localename)
574
+
575
+
576
+ def getlocale(category=LC_CTYPE):
577
+
578
+ """ Returns the current setting for the given locale category as
579
+ tuple (language code, encoding).
580
+
581
+ category may be one of the LC_* value except LC_ALL. It
582
+ defaults to LC_CTYPE.
583
+
584
+ Except for the code 'C', the language code corresponds to RFC
585
+ 1766. code and encoding can be None in case the values cannot
586
+ be determined.
587
+
588
+ """
589
+ localename = _setlocale(category)
590
+ if category == LC_ALL and ';' in localename:
591
+ raise TypeError('category LC_ALL is not supported')
592
+ return _parse_localename(localename)
593
+
594
+ def setlocale(category, locale=None):
595
+
596
+ """ Set the locale for the given category. The locale can be
597
+ a string, an iterable of two strings (language code and encoding),
598
+ or None.
599
+
600
+ Iterables are converted to strings using the locale aliasing
601
+ engine. Locale strings are passed directly to the C lib.
602
+
603
+ category may be given as one of the LC_* values.
604
+
605
+ """
606
+ if locale and not isinstance(locale, _builtin_str):
607
+ # convert to string
608
+ locale = normalize(_build_localename(locale))
609
+ return _setlocale(category, locale)
610
+
611
+
612
+ try:
613
+ from _locale import getencoding
614
+ except ImportError:
615
+ # When _locale.getencoding() is missing, locale.getencoding() uses the
616
+ # Python filesystem encoding.
617
+ def getencoding():
618
+ return sys.getfilesystemencoding()
619
+
620
+
621
+ try:
622
+ CODESET
623
+ except NameError:
624
+ def getpreferredencoding(do_setlocale=True):
625
+ """Return the charset that the user is likely using."""
626
+ if sys.flags.warn_default_encoding:
627
+ import warnings
628
+ warnings.warn(
629
+ "UTF-8 Mode affects locale.getpreferredencoding(). Consider locale.getencoding() instead.",
630
+ EncodingWarning, 2)
631
+ if sys.flags.utf8_mode:
632
+ return 'utf-8'
633
+ return getencoding()
634
+ else:
635
+ # On Unix, if CODESET is available, use that.
636
+ def getpreferredencoding(do_setlocale=True):
637
+ """Return the charset that the user is likely using,
638
+ according to the system configuration."""
639
+
640
+ if sys.flags.warn_default_encoding:
641
+ import warnings
642
+ warnings.warn(
643
+ "UTF-8 Mode affects locale.getpreferredencoding(). Consider locale.getencoding() instead.",
644
+ EncodingWarning, 2)
645
+ if sys.flags.utf8_mode:
646
+ return 'utf-8'
647
+
648
+ if not do_setlocale:
649
+ return getencoding()
650
+
651
+ old_loc = setlocale(LC_CTYPE)
652
+ try:
653
+ try:
654
+ setlocale(LC_CTYPE, "")
655
+ except Error:
656
+ pass
657
+ return getencoding()
658
+ finally:
659
+ setlocale(LC_CTYPE, old_loc)
660
+
661
+
662
+ ### Database
663
+ #
664
+ # The following data was extracted from the locale.alias file which
665
+ # comes with X11 and then hand edited removing the explicit encoding
666
+ # definitions and adding some more aliases. The file is usually
667
+ # available as /usr/lib/X11/locale/locale.alias.
668
+ #
669
+
670
+ #
671
+ # The local_encoding_alias table maps lowercase encoding alias names
672
+ # to C locale encoding names (case-sensitive). Note that normalize()
673
+ # first looks up the encoding in the encodings.aliases dictionary and
674
+ # then applies this mapping to find the correct C lib name for the
675
+ # encoding.
676
+ #
677
+ locale_encoding_alias = {
678
+
679
+ # Mappings for non-standard encoding names used in locale names
680
+ '437': 'C',
681
+ 'c': 'C',
682
+ 'en': 'ISO8859-1',
683
+ 'jis': 'JIS7',
684
+ 'jis7': 'JIS7',
685
+ 'ajec': 'eucJP',
686
+ 'koi8c': 'KOI8-C',
687
+ 'microsoftcp1251': 'CP1251',
688
+ 'microsoftcp1255': 'CP1255',
689
+ 'microsoftcp1256': 'CP1256',
690
+ '88591': 'ISO8859-1',
691
+ '88592': 'ISO8859-2',
692
+ '88595': 'ISO8859-5',
693
+ '885915': 'ISO8859-15',
694
+
695
+ # Mappings from Python codec names to C lib encoding names
696
+ 'ascii': 'ISO8859-1',
697
+ 'latin_1': 'ISO8859-1',
698
+ 'iso8859_1': 'ISO8859-1',
699
+ 'iso8859_10': 'ISO8859-10',
700
+ 'iso8859_11': 'ISO8859-11',
701
+ 'iso8859_13': 'ISO8859-13',
702
+ 'iso8859_14': 'ISO8859-14',
703
+ 'iso8859_15': 'ISO8859-15',
704
+ 'iso8859_16': 'ISO8859-16',
705
+ 'iso8859_2': 'ISO8859-2',
706
+ 'iso8859_3': 'ISO8859-3',
707
+ 'iso8859_4': 'ISO8859-4',
708
+ 'iso8859_5': 'ISO8859-5',
709
+ 'iso8859_6': 'ISO8859-6',
710
+ 'iso8859_7': 'ISO8859-7',
711
+ 'iso8859_8': 'ISO8859-8',
712
+ 'iso8859_9': 'ISO8859-9',
713
+ 'iso2022_jp': 'JIS7',
714
+ 'shift_jis': 'SJIS',
715
+ 'tactis': 'TACTIS',
716
+ 'euc_jp': 'eucJP',
717
+ 'euc_kr': 'eucKR',
718
+ 'utf_8': 'UTF-8',
719
+ 'koi8_r': 'KOI8-R',
720
+ 'koi8_t': 'KOI8-T',
721
+ 'koi8_u': 'KOI8-U',
722
+ 'kz1048': 'RK1048',
723
+ 'cp1251': 'CP1251',
724
+ 'cp1255': 'CP1255',
725
+ 'cp1256': 'CP1256',
726
+
727
+ # XXX This list is still incomplete. If you know more
728
+ # mappings, please file a bug report. Thanks.
729
+ }
730
+
731
+ for k, v in sorted(locale_encoding_alias.items()):
732
+ k = k.replace('_', '')
733
+ locale_encoding_alias.setdefault(k, v)
734
+ del k, v
735
+
736
+ #
737
+ # The locale_alias table maps lowercase alias names to C locale names
738
+ # (case-sensitive). Encodings are always separated from the locale
739
+ # name using a dot ('.'); they should only be given in case the
740
+ # language name is needed to interpret the given encoding alias
741
+ # correctly (CJK codes often have this need).
742
+ #
743
+ # Note that the normalize() function which uses this tables
744
+ # removes '_' and '-' characters from the encoding part of the
745
+ # locale name before doing the lookup. This saves a lot of
746
+ # space in the table.
747
+ #
748
+ # MAL 2004-12-10:
749
+ # Updated alias mapping to most recent locale.alias file
750
+ # from X.org distribution using makelocalealias.py.
751
+ #
752
+ # These are the differences compared to the old mapping (Python 2.4
753
+ # and older):
754
+ #
755
+ # updated 'bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251'
756
+ # updated 'bg_bg' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251'
757
+ # updated 'bulgarian' -> 'bg_BG.ISO8859-5' to 'bg_BG.CP1251'
758
+ # updated 'cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2'
759
+ # updated 'cz_cz' -> 'cz_CZ.ISO8859-2' to 'cs_CZ.ISO8859-2'
760
+ # updated 'czech' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2'
761
+ # updated 'dutch' -> 'nl_BE.ISO8859-1' to 'nl_NL.ISO8859-1'
762
+ # updated 'et' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15'
763
+ # updated 'et_ee' -> 'et_EE.ISO8859-4' to 'et_EE.ISO8859-15'
764
+ # updated 'fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15'
765
+ # updated 'fi_fi' -> 'fi_FI.ISO8859-1' to 'fi_FI.ISO8859-15'
766
+ # updated 'iw' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8'
767
+ # updated 'iw_il' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8'
768
+ # updated 'japanese' -> 'ja_JP.SJIS' to 'ja_JP.eucJP'
769
+ # updated 'lt' -> 'lt_LT.ISO8859-4' to 'lt_LT.ISO8859-13'
770
+ # updated 'lv' -> 'lv_LV.ISO8859-4' to 'lv_LV.ISO8859-13'
771
+ # updated 'sl' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2'
772
+ # updated 'slovene' -> 'sl_CS.ISO8859-2' to 'sl_SI.ISO8859-2'
773
+ # updated 'th_th' -> 'th_TH.TACTIS' to 'th_TH.ISO8859-11'
774
+ # updated 'zh_cn' -> 'zh_CN.eucCN' to 'zh_CN.gb2312'
775
+ # updated 'zh_cn.big5' -> 'zh_TW.eucTW' to 'zh_TW.big5'
776
+ # updated 'zh_tw' -> 'zh_TW.eucTW' to 'zh_TW.big5'
777
+ #
778
+ # MAL 2008-05-30:
779
+ # Updated alias mapping to most recent locale.alias file
780
+ # from X.org distribution using makelocalealias.py.
781
+ #
782
+ # These are the differences compared to the old mapping (Python 2.5
783
+ # and older):
784
+ #
785
+ # updated 'cs_cs.iso88592' -> 'cs_CZ.ISO8859-2' to 'cs_CS.ISO8859-2'
786
+ # updated 'serbocroatian' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
787
+ # updated 'sh' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
788
+ # updated 'sh_hr.iso88592' -> 'sh_HR.ISO8859-2' to 'hr_HR.ISO8859-2'
789
+ # updated 'sh_sp' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
790
+ # updated 'sh_yu' -> 'sh_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
791
+ # updated 'sp' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
792
+ # updated 'sp_yu' -> 'sp_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
793
+ # updated 'sr' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
794
+ # updated 'sr@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
795
+ # updated 'sr_sp' -> 'sr_SP.ISO8859-2' to 'sr_CS.ISO8859-2'
796
+ # updated 'sr_yu' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
797
+ # updated 'sr_yu.cp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251'
798
+ # updated 'sr_yu.iso88592' -> 'sr_YU.ISO8859-2' to 'sr_CS.ISO8859-2'
799
+ # updated 'sr_yu.iso88595' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
800
+ # updated 'sr_yu.iso88595@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
801
+ # updated 'sr_yu.microsoftcp1251@cyrillic' -> 'sr_YU.CP1251' to 'sr_CS.CP1251'
802
+ # updated 'sr_yu.utf8@cyrillic' -> 'sr_YU.UTF-8' to 'sr_CS.UTF-8'
803
+ # updated 'sr_yu@cyrillic' -> 'sr_YU.ISO8859-5' to 'sr_CS.ISO8859-5'
804
+ #
805
+ # AP 2010-04-12:
806
+ # Updated alias mapping to most recent locale.alias file
807
+ # from X.org distribution using makelocalealias.py.
808
+ #
809
+ # These are the differences compared to the old mapping (Python 2.6.5
810
+ # and older):
811
+ #
812
+ # updated 'ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8'
813
+ # updated 'ru_ru' -> 'ru_RU.ISO8859-5' to 'ru_RU.UTF-8'
814
+ # updated 'serbocroatian' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
815
+ # updated 'sh' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
816
+ # updated 'sh_yu' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
817
+ # updated 'sr' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8'
818
+ # updated 'sr@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8'
819
+ # updated 'sr@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
820
+ # updated 'sr_cs.utf8@latn' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8@latin'
821
+ # updated 'sr_cs@latn' -> 'sr_CS.ISO8859-2' to 'sr_RS.UTF-8@latin'
822
+ # updated 'sr_yu' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8@latin'
823
+ # updated 'sr_yu.utf8@cyrillic' -> 'sr_CS.UTF-8' to 'sr_RS.UTF-8'
824
+ # updated 'sr_yu@cyrillic' -> 'sr_CS.ISO8859-5' to 'sr_RS.UTF-8'
825
+ #
826
+ # SS 2013-12-20:
827
+ # Updated alias mapping to most recent locale.alias file
828
+ # from X.org distribution using makelocalealias.py.
829
+ #
830
+ # These are the differences compared to the old mapping (Python 3.3.3
831
+ # and older):
832
+ #
833
+ # updated 'a3' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C'
834
+ # updated 'a3_az' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C'
835
+ # updated 'a3_az.koi8c' -> 'a3_AZ.KOI8-C' to 'az_AZ.KOI8-C'
836
+ # updated 'cs_cs.iso88592' -> 'cs_CS.ISO8859-2' to 'cs_CZ.ISO8859-2'
837
+ # updated 'hebrew' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8'
838
+ # updated 'hebrew.iso88598' -> 'iw_IL.ISO8859-8' to 'he_IL.ISO8859-8'
839
+ # updated 'sd' -> 'sd_IN@devanagari.UTF-8' to 'sd_IN.UTF-8'
840
+ # updated 'sr@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin'
841
+ # updated 'sr_cs' -> 'sr_RS.UTF-8' to 'sr_CS.UTF-8'
842
+ # updated 'sr_cs.utf8@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin'
843
+ # updated 'sr_cs@latn' -> 'sr_RS.UTF-8@latin' to 'sr_CS.UTF-8@latin'
844
+ #
845
+ # SS 2014-10-01:
846
+ # Updated alias mapping with glibc 2.19 supported locales.
847
+ #
848
+ # SS 2018-05-05:
849
+ # Updated alias mapping with glibc 2.27 supported locales.
850
+ #
851
+ # These are the differences compared to the old mapping (Python 3.6.5
852
+ # and older):
853
+ #
854
+ # updated 'ca_es@valencia' -> 'ca_ES.ISO8859-15@valencia' to 'ca_ES.UTF-8@valencia'
855
+ # updated 'kk_kz' -> 'kk_KZ.RK1048' to 'kk_KZ.ptcp154'
856
+ # updated 'russian' -> 'ru_RU.ISO8859-5' to 'ru_RU.KOI8-R'
857
+ #
858
+ # SS 2025-02-04:
859
+ # Updated alias mapping with glibc 2.41 supported locales and the latest
860
+ # X lib alias mapping.
861
+ #
862
+ # These are the differences compared to the old mapping (Python 3.13.1
863
+ # and older):
864
+ #
865
+ # updated 'c.utf8' -> 'C.UTF-8' to 'en_US.UTF-8'
866
+ # updated 'de_it' -> 'de_IT.ISO8859-1' to 'de_IT.UTF-8'
867
+ # removed 'de_li.utf8'
868
+ # updated 'en_il' -> 'en_IL.UTF-8' to 'en_IL.ISO8859-1'
869
+ # removed 'english.iso88591'
870
+ # updated 'es_cu' -> 'es_CU.UTF-8' to 'es_CU.ISO8859-1'
871
+ # updated 'russian' -> 'ru_RU.KOI8-R' to 'ru_RU.ISO8859-5'
872
+ # updated 'sr@latn' -> 'sr_CS.UTF-8@latin' to 'sr_RS.UTF-8@latin'
873
+ # removed 'univ'
874
+ # removed 'universal'
875
+ #
876
+ # SS 2025-06-10:
877
+ # Remove 'c.utf8' -> 'en_US.UTF-8' because 'en_US.UTF-8' does not exist
878
+ # on all platforms.
879
+
880
+ locale_alias = {
881
+ 'a3': 'az_AZ.KOI8-C',
882
+ 'a3_az': 'az_AZ.KOI8-C',
883
+ 'a3_az.koic': 'az_AZ.KOI8-C',
884
+ 'aa_dj': 'aa_DJ.ISO8859-1',
885
+ 'aa_er': 'aa_ER.UTF-8',
886
+ 'aa_et': 'aa_ET.UTF-8',
887
+ 'af': 'af_ZA.ISO8859-1',
888
+ 'af_za': 'af_ZA.ISO8859-1',
889
+ 'agr_pe': 'agr_PE.UTF-8',
890
+ 'ak_gh': 'ak_GH.UTF-8',
891
+ 'am': 'am_ET.UTF-8',
892
+ 'am_et': 'am_ET.UTF-8',
893
+ 'american': 'en_US.ISO8859-1',
894
+ 'an_es': 'an_ES.ISO8859-15',
895
+ 'anp_in': 'anp_IN.UTF-8',
896
+ 'ar': 'ar_AA.ISO8859-6',
897
+ 'ar_aa': 'ar_AA.ISO8859-6',
898
+ 'ar_ae': 'ar_AE.ISO8859-6',
899
+ 'ar_bh': 'ar_BH.ISO8859-6',
900
+ 'ar_dz': 'ar_DZ.ISO8859-6',
901
+ 'ar_eg': 'ar_EG.ISO8859-6',
902
+ 'ar_in': 'ar_IN.UTF-8',
903
+ 'ar_iq': 'ar_IQ.ISO8859-6',
904
+ 'ar_jo': 'ar_JO.ISO8859-6',
905
+ 'ar_kw': 'ar_KW.ISO8859-6',
906
+ 'ar_lb': 'ar_LB.ISO8859-6',
907
+ 'ar_ly': 'ar_LY.ISO8859-6',
908
+ 'ar_ma': 'ar_MA.ISO8859-6',
909
+ 'ar_om': 'ar_OM.ISO8859-6',
910
+ 'ar_qa': 'ar_QA.ISO8859-6',
911
+ 'ar_sa': 'ar_SA.ISO8859-6',
912
+ 'ar_sd': 'ar_SD.ISO8859-6',
913
+ 'ar_ss': 'ar_SS.UTF-8',
914
+ 'ar_sy': 'ar_SY.ISO8859-6',
915
+ 'ar_tn': 'ar_TN.ISO8859-6',
916
+ 'ar_ye': 'ar_YE.ISO8859-6',
917
+ 'arabic': 'ar_AA.ISO8859-6',
918
+ 'as': 'as_IN.UTF-8',
919
+ 'as_in': 'as_IN.UTF-8',
920
+ 'ast_es': 'ast_ES.ISO8859-15',
921
+ 'ayc_pe': 'ayc_PE.UTF-8',
922
+ 'az': 'az_AZ.ISO8859-9E',
923
+ 'az_az': 'az_AZ.ISO8859-9E',
924
+ 'az_az.iso88599e': 'az_AZ.ISO8859-9E',
925
+ 'az_ir': 'az_IR.UTF-8',
926
+ 'be': 'be_BY.CP1251',
927
+ 'be@latin': 'be_BY.UTF-8@latin',
928
+ 'be_bg.utf8': 'bg_BG.UTF-8',
929
+ 'be_by': 'be_BY.CP1251',
930
+ 'be_by@latin': 'be_BY.UTF-8@latin',
931
+ 'bem_zm': 'bem_ZM.UTF-8',
932
+ 'ber_dz': 'ber_DZ.UTF-8',
933
+ 'ber_ma': 'ber_MA.UTF-8',
934
+ 'bg': 'bg_BG.CP1251',
935
+ 'bg_bg': 'bg_BG.CP1251',
936
+ 'bhb_in.utf8': 'bhb_IN.UTF-8',
937
+ 'bho_in': 'bho_IN.UTF-8',
938
+ 'bho_np': 'bho_NP.UTF-8',
939
+ 'bi_vu': 'bi_VU.UTF-8',
940
+ 'bn_bd': 'bn_BD.UTF-8',
941
+ 'bn_in': 'bn_IN.UTF-8',
942
+ 'bo_cn': 'bo_CN.UTF-8',
943
+ 'bo_in': 'bo_IN.UTF-8',
944
+ 'bokmal': 'nb_NO.ISO8859-1',
945
+ 'bokm\xe5l': 'nb_NO.ISO8859-1',
946
+ 'br': 'br_FR.ISO8859-1',
947
+ 'br_fr': 'br_FR.ISO8859-1',
948
+ 'brx_in': 'brx_IN.UTF-8',
949
+ 'bs': 'bs_BA.ISO8859-2',
950
+ 'bs_ba': 'bs_BA.ISO8859-2',
951
+ 'bulgarian': 'bg_BG.CP1251',
952
+ 'byn_er': 'byn_ER.UTF-8',
953
+ 'c': 'C',
954
+ 'c-french': 'fr_CA.ISO8859-1',
955
+ 'c.ascii': 'C',
956
+ 'c.en': 'C',
957
+ 'c.iso88591': 'en_US.ISO8859-1',
958
+ 'c_c': 'C',
959
+ 'c_c.c': 'C',
960
+ 'ca': 'ca_ES.ISO8859-1',
961
+ 'ca_ad': 'ca_AD.ISO8859-1',
962
+ 'ca_es': 'ca_ES.ISO8859-1',
963
+ 'ca_es@valencia': 'ca_ES.UTF-8@valencia',
964
+ 'ca_fr': 'ca_FR.ISO8859-1',
965
+ 'ca_it': 'ca_IT.ISO8859-1',
966
+ 'catalan': 'ca_ES.ISO8859-1',
967
+ 'ce_ru': 'ce_RU.UTF-8',
968
+ 'cextend': 'en_US.ISO8859-1',
969
+ 'chinese-s': 'zh_CN.eucCN',
970
+ 'chinese-t': 'zh_TW.eucTW',
971
+ 'chr_us': 'chr_US.UTF-8',
972
+ 'ckb_iq': 'ckb_IQ.UTF-8',
973
+ 'cmn_tw': 'cmn_TW.UTF-8',
974
+ 'crh_ru': 'crh_RU.UTF-8',
975
+ 'crh_ua': 'crh_UA.UTF-8',
976
+ 'croatian': 'hr_HR.ISO8859-2',
977
+ 'cs': 'cs_CZ.ISO8859-2',
978
+ 'cs_cs': 'cs_CZ.ISO8859-2',
979
+ 'cs_cz': 'cs_CZ.ISO8859-2',
980
+ 'csb_pl': 'csb_PL.UTF-8',
981
+ 'cv_ru': 'cv_RU.UTF-8',
982
+ 'cy': 'cy_GB.ISO8859-1',
983
+ 'cy_gb': 'cy_GB.ISO8859-1',
984
+ 'cz': 'cs_CZ.ISO8859-2',
985
+ 'cz_cz': 'cs_CZ.ISO8859-2',
986
+ 'czech': 'cs_CZ.ISO8859-2',
987
+ 'da': 'da_DK.ISO8859-1',
988
+ 'da_dk': 'da_DK.ISO8859-1',
989
+ 'danish': 'da_DK.ISO8859-1',
990
+ 'dansk': 'da_DK.ISO8859-1',
991
+ 'de': 'de_DE.ISO8859-1',
992
+ 'de_at': 'de_AT.ISO8859-1',
993
+ 'de_be': 'de_BE.ISO8859-1',
994
+ 'de_ch': 'de_CH.ISO8859-1',
995
+ 'de_de': 'de_DE.ISO8859-1',
996
+ 'de_it': 'de_IT.UTF-8',
997
+ 'de_li': 'de_LI.ISO8859-1',
998
+ 'de_lu': 'de_LU.ISO8859-1',
999
+ 'deutsch': 'de_DE.ISO8859-1',
1000
+ 'doi_in': 'doi_IN.UTF-8',
1001
+ 'dsb_de': 'dsb_DE.UTF-8',
1002
+ 'dutch': 'nl_NL.ISO8859-1',
1003
+ 'dutch.iso88591': 'nl_BE.ISO8859-1',
1004
+ 'dv_mv': 'dv_MV.UTF-8',
1005
+ 'dz_bt': 'dz_BT.UTF-8',
1006
+ 'ee': 'ee_EE.ISO8859-4',
1007
+ 'ee_ee': 'ee_EE.ISO8859-4',
1008
+ 'eesti': 'et_EE.ISO8859-1',
1009
+ 'el': 'el_GR.ISO8859-7',
1010
+ 'el_cy': 'el_CY.ISO8859-7',
1011
+ 'el_gr': 'el_GR.ISO8859-7',
1012
+ 'el_gr@euro': 'el_GR.ISO8859-15',
1013
+ 'en': 'en_US.ISO8859-1',
1014
+ 'en_ag': 'en_AG.UTF-8',
1015
+ 'en_au': 'en_AU.ISO8859-1',
1016
+ 'en_be': 'en_BE.ISO8859-1',
1017
+ 'en_bw': 'en_BW.ISO8859-1',
1018
+ 'en_ca': 'en_CA.ISO8859-1',
1019
+ 'en_dk': 'en_DK.ISO8859-1',
1020
+ 'en_dl.utf8': 'en_DL.UTF-8',
1021
+ 'en_gb': 'en_GB.ISO8859-1',
1022
+ 'en_hk': 'en_HK.ISO8859-1',
1023
+ 'en_ie': 'en_IE.ISO8859-1',
1024
+ 'en_il': 'en_IL.ISO8859-1',
1025
+ 'en_in': 'en_IN.ISO8859-1',
1026
+ 'en_ng': 'en_NG.UTF-8',
1027
+ 'en_nz': 'en_NZ.ISO8859-1',
1028
+ 'en_ph': 'en_PH.ISO8859-1',
1029
+ 'en_sc.utf8': 'en_SC.UTF-8',
1030
+ 'en_sg': 'en_SG.ISO8859-1',
1031
+ 'en_uk': 'en_GB.ISO8859-1',
1032
+ 'en_us': 'en_US.ISO8859-1',
1033
+ 'en_us@euro@euro': 'en_US.ISO8859-15',
1034
+ 'en_za': 'en_ZA.ISO8859-1',
1035
+ 'en_zm': 'en_ZM.UTF-8',
1036
+ 'en_zw': 'en_ZW.ISO8859-1',
1037
+ 'en_zw.utf8': 'en_ZS.UTF-8',
1038
+ 'eng_gb': 'en_GB.ISO8859-1',
1039
+ 'english': 'en_EN.ISO8859-1',
1040
+ 'english_uk': 'en_GB.ISO8859-1',
1041
+ 'english_united-states': 'en_US.ISO8859-1',
1042
+ 'english_united-states.437': 'C',
1043
+ 'english_us': 'en_US.ISO8859-1',
1044
+ 'eo': 'eo_XX.ISO8859-3',
1045
+ 'eo.utf8': 'eo.UTF-8',
1046
+ 'eo_eo': 'eo_EO.ISO8859-3',
1047
+ 'eo_us.utf8': 'eo_US.UTF-8',
1048
+ 'eo_xx': 'eo_XX.ISO8859-3',
1049
+ 'es': 'es_ES.ISO8859-1',
1050
+ 'es_ar': 'es_AR.ISO8859-1',
1051
+ 'es_bo': 'es_BO.ISO8859-1',
1052
+ 'es_cl': 'es_CL.ISO8859-1',
1053
+ 'es_co': 'es_CO.ISO8859-1',
1054
+ 'es_cr': 'es_CR.ISO8859-1',
1055
+ 'es_cu': 'es_CU.ISO8859-1',
1056
+ 'es_do': 'es_DO.ISO8859-1',
1057
+ 'es_ec': 'es_EC.ISO8859-1',
1058
+ 'es_es': 'es_ES.ISO8859-1',
1059
+ 'es_gt': 'es_GT.ISO8859-1',
1060
+ 'es_hn': 'es_HN.ISO8859-1',
1061
+ 'es_mx': 'es_MX.ISO8859-1',
1062
+ 'es_ni': 'es_NI.ISO8859-1',
1063
+ 'es_pa': 'es_PA.ISO8859-1',
1064
+ 'es_pe': 'es_PE.ISO8859-1',
1065
+ 'es_pr': 'es_PR.ISO8859-1',
1066
+ 'es_py': 'es_PY.ISO8859-1',
1067
+ 'es_sv': 'es_SV.ISO8859-1',
1068
+ 'es_us': 'es_US.ISO8859-1',
1069
+ 'es_uy': 'es_UY.ISO8859-1',
1070
+ 'es_ve': 'es_VE.ISO8859-1',
1071
+ 'estonian': 'et_EE.ISO8859-1',
1072
+ 'et': 'et_EE.ISO8859-15',
1073
+ 'et_ee': 'et_EE.ISO8859-15',
1074
+ 'eu': 'eu_ES.ISO8859-1',
1075
+ 'eu_es': 'eu_ES.ISO8859-1',
1076
+ 'eu_fr': 'eu_FR.ISO8859-1',
1077
+ 'fa': 'fa_IR.UTF-8',
1078
+ 'fa_ir': 'fa_IR.UTF-8',
1079
+ 'fa_ir.isiri3342': 'fa_IR.ISIRI-3342',
1080
+ 'ff_sn': 'ff_SN.UTF-8',
1081
+ 'fi': 'fi_FI.ISO8859-15',
1082
+ 'fi_fi': 'fi_FI.ISO8859-15',
1083
+ 'fil_ph': 'fil_PH.UTF-8',
1084
+ 'finnish': 'fi_FI.ISO8859-1',
1085
+ 'fo': 'fo_FO.ISO8859-1',
1086
+ 'fo_fo': 'fo_FO.ISO8859-1',
1087
+ 'fr': 'fr_FR.ISO8859-1',
1088
+ 'fr_be': 'fr_BE.ISO8859-1',
1089
+ 'fr_ca': 'fr_CA.ISO8859-1',
1090
+ 'fr_ch': 'fr_CH.ISO8859-1',
1091
+ 'fr_fr': 'fr_FR.ISO8859-1',
1092
+ 'fr_lu': 'fr_LU.ISO8859-1',
1093
+ 'fran\xe7ais': 'fr_FR.ISO8859-1',
1094
+ 'fre_fr': 'fr_FR.ISO8859-1',
1095
+ 'french': 'fr_FR.ISO8859-1',
1096
+ 'french.iso88591': 'fr_CH.ISO8859-1',
1097
+ 'french_france': 'fr_FR.ISO8859-1',
1098
+ 'fur_it': 'fur_IT.UTF-8',
1099
+ 'fy_de': 'fy_DE.UTF-8',
1100
+ 'fy_nl': 'fy_NL.UTF-8',
1101
+ 'ga': 'ga_IE.ISO8859-1',
1102
+ 'ga_ie': 'ga_IE.ISO8859-1',
1103
+ 'galego': 'gl_ES.ISO8859-1',
1104
+ 'galician': 'gl_ES.ISO8859-1',
1105
+ 'gbm_in': 'gbm_IN.UTF-8',
1106
+ 'gd': 'gd_GB.ISO8859-1',
1107
+ 'gd_gb': 'gd_GB.ISO8859-1',
1108
+ 'ger_de': 'de_DE.ISO8859-1',
1109
+ 'german': 'de_DE.ISO8859-1',
1110
+ 'german.iso88591': 'de_CH.ISO8859-1',
1111
+ 'german_germany': 'de_DE.ISO8859-1',
1112
+ 'gez_er': 'gez_ER.UTF-8',
1113
+ 'gez_et': 'gez_ET.UTF-8',
1114
+ 'gl': 'gl_ES.ISO8859-1',
1115
+ 'gl_es': 'gl_ES.ISO8859-1',
1116
+ 'greek': 'el_GR.ISO8859-7',
1117
+ 'gu_in': 'gu_IN.UTF-8',
1118
+ 'gv': 'gv_GB.ISO8859-1',
1119
+ 'gv_gb': 'gv_GB.ISO8859-1',
1120
+ 'ha_ng': 'ha_NG.UTF-8',
1121
+ 'hak_tw': 'hak_TW.UTF-8',
1122
+ 'he': 'he_IL.ISO8859-8',
1123
+ 'he_il': 'he_IL.ISO8859-8',
1124
+ 'hebrew': 'he_IL.ISO8859-8',
1125
+ 'hi': 'hi_IN.ISCII-DEV',
1126
+ 'hi_in': 'hi_IN.ISCII-DEV',
1127
+ 'hi_in.isciidev': 'hi_IN.ISCII-DEV',
1128
+ 'hif_fj': 'hif_FJ.UTF-8',
1129
+ 'hne': 'hne_IN.UTF-8',
1130
+ 'hne_in': 'hne_IN.UTF-8',
1131
+ 'hr': 'hr_HR.ISO8859-2',
1132
+ 'hr_hr': 'hr_HR.ISO8859-2',
1133
+ 'hrvatski': 'hr_HR.ISO8859-2',
1134
+ 'hsb_de': 'hsb_DE.ISO8859-2',
1135
+ 'ht_ht': 'ht_HT.UTF-8',
1136
+ 'hu': 'hu_HU.ISO8859-2',
1137
+ 'hu_hu': 'hu_HU.ISO8859-2',
1138
+ 'hungarian': 'hu_HU.ISO8859-2',
1139
+ 'hy_am': 'hy_AM.UTF-8',
1140
+ 'hy_am.armscii8': 'hy_AM.ARMSCII_8',
1141
+ 'ia': 'ia.UTF-8',
1142
+ 'ia_fr': 'ia_FR.UTF-8',
1143
+ 'icelandic': 'is_IS.ISO8859-1',
1144
+ 'id': 'id_ID.ISO8859-1',
1145
+ 'id_id': 'id_ID.ISO8859-1',
1146
+ 'ie': 'ie.UTF-8',
1147
+ 'ig_ng': 'ig_NG.UTF-8',
1148
+ 'ik_ca': 'ik_CA.UTF-8',
1149
+ 'in': 'id_ID.ISO8859-1',
1150
+ 'in_id': 'id_ID.ISO8859-1',
1151
+ 'is': 'is_IS.ISO8859-1',
1152
+ 'is_is': 'is_IS.ISO8859-1',
1153
+ 'iso-8859-1': 'en_US.ISO8859-1',
1154
+ 'iso-8859-15': 'en_US.ISO8859-15',
1155
+ 'iso8859-1': 'en_US.ISO8859-1',
1156
+ 'iso8859-15': 'en_US.ISO8859-15',
1157
+ 'iso_8859_1': 'en_US.ISO8859-1',
1158
+ 'iso_8859_15': 'en_US.ISO8859-15',
1159
+ 'it': 'it_IT.ISO8859-1',
1160
+ 'it_ch': 'it_CH.ISO8859-1',
1161
+ 'it_it': 'it_IT.ISO8859-1',
1162
+ 'italian': 'it_IT.ISO8859-1',
1163
+ 'iu': 'iu_CA.NUNACOM-8',
1164
+ 'iu_ca': 'iu_CA.NUNACOM-8',
1165
+ 'iu_ca.nunacom8': 'iu_CA.NUNACOM-8',
1166
+ 'iw': 'he_IL.ISO8859-8',
1167
+ 'iw_il': 'he_IL.ISO8859-8',
1168
+ 'iw_il.utf8': 'iw_IL.UTF-8',
1169
+ 'ja': 'ja_JP.eucJP',
1170
+ 'ja_jp': 'ja_JP.eucJP',
1171
+ 'ja_jp.euc': 'ja_JP.eucJP',
1172
+ 'ja_jp.mscode': 'ja_JP.SJIS',
1173
+ 'ja_jp.pck': 'ja_JP.SJIS',
1174
+ 'japan': 'ja_JP.eucJP',
1175
+ 'japanese': 'ja_JP.eucJP',
1176
+ 'japanese-euc': 'ja_JP.eucJP',
1177
+ 'japanese.euc': 'ja_JP.eucJP',
1178
+ 'jp_jp': 'ja_JP.eucJP',
1179
+ 'ka': 'ka_GE.GEORGIAN-ACADEMY',
1180
+ 'ka_ge': 'ka_GE.GEORGIAN-ACADEMY',
1181
+ 'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY',
1182
+ 'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS',
1183
+ 'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY',
1184
+ 'kab_dz': 'kab_DZ.UTF-8',
1185
+ 'kk_kz': 'kk_KZ.ptcp154',
1186
+ 'kl': 'kl_GL.ISO8859-1',
1187
+ 'kl_gl': 'kl_GL.ISO8859-1',
1188
+ 'km_kh': 'km_KH.UTF-8',
1189
+ 'kn': 'kn_IN.UTF-8',
1190
+ 'kn_in': 'kn_IN.UTF-8',
1191
+ 'ko': 'ko_KR.eucKR',
1192
+ 'ko_kr': 'ko_KR.eucKR',
1193
+ 'ko_kr.euc': 'ko_KR.eucKR',
1194
+ 'kok_in': 'kok_IN.UTF-8',
1195
+ 'korean': 'ko_KR.eucKR',
1196
+ 'korean.euc': 'ko_KR.eucKR',
1197
+ 'ks': 'ks_IN.UTF-8',
1198
+ 'ks_in': 'ks_IN.UTF-8',
1199
+ 'ks_in@devanagari.utf8': 'ks_IN.UTF-8@devanagari',
1200
+ 'ku_tr': 'ku_TR.ISO8859-9',
1201
+ 'kv_ru': 'kv_RU.UTF-8',
1202
+ 'kw': 'kw_GB.ISO8859-1',
1203
+ 'kw_gb': 'kw_GB.ISO8859-1',
1204
+ 'ky': 'ky_KG.UTF-8',
1205
+ 'ky_kg': 'ky_KG.UTF-8',
1206
+ 'lb_lu': 'lb_LU.UTF-8',
1207
+ 'lg_ug': 'lg_UG.ISO8859-10',
1208
+ 'li_be': 'li_BE.UTF-8',
1209
+ 'li_nl': 'li_NL.UTF-8',
1210
+ 'lij_it': 'lij_IT.UTF-8',
1211
+ 'lithuanian': 'lt_LT.ISO8859-13',
1212
+ 'ln_cd': 'ln_CD.UTF-8',
1213
+ 'lo': 'lo_LA.MULELAO-1',
1214
+ 'lo_la': 'lo_LA.MULELAO-1',
1215
+ 'lo_la.cp1133': 'lo_LA.IBM-CP1133',
1216
+ 'lo_la.ibmcp1133': 'lo_LA.IBM-CP1133',
1217
+ 'lo_la.mulelao1': 'lo_LA.MULELAO-1',
1218
+ 'lt': 'lt_LT.ISO8859-13',
1219
+ 'lt_lt': 'lt_LT.ISO8859-13',
1220
+ 'ltg_lv.utf8': 'ltg_LV.UTF-8',
1221
+ 'lv': 'lv_LV.ISO8859-13',
1222
+ 'lv_lv': 'lv_LV.ISO8859-13',
1223
+ 'lzh_tw': 'lzh_TW.UTF-8',
1224
+ 'mag_in': 'mag_IN.UTF-8',
1225
+ 'mai': 'mai_IN.UTF-8',
1226
+ 'mai_in': 'mai_IN.UTF-8',
1227
+ 'mai_np': 'mai_NP.UTF-8',
1228
+ 'mdf_ru': 'mdf_RU.UTF-8',
1229
+ 'mfe_mu': 'mfe_MU.UTF-8',
1230
+ 'mg_mg': 'mg_MG.ISO8859-15',
1231
+ 'mhr_ru': 'mhr_RU.UTF-8',
1232
+ 'mi': 'mi_NZ.ISO8859-1',
1233
+ 'mi_nz': 'mi_NZ.ISO8859-1',
1234
+ 'miq_ni': 'miq_NI.UTF-8',
1235
+ 'mjw_in': 'mjw_IN.UTF-8',
1236
+ 'mk': 'mk_MK.ISO8859-5',
1237
+ 'mk_mk': 'mk_MK.ISO8859-5',
1238
+ 'ml': 'ml_IN.UTF-8',
1239
+ 'ml_in': 'ml_IN.UTF-8',
1240
+ 'mn_mn': 'mn_MN.UTF-8',
1241
+ 'mni_in': 'mni_IN.UTF-8',
1242
+ 'mnw_mm': 'mnw_MM.UTF-8',
1243
+ 'mr': 'mr_IN.UTF-8',
1244
+ 'mr_in': 'mr_IN.UTF-8',
1245
+ 'ms': 'ms_MY.ISO8859-1',
1246
+ 'ms_my': 'ms_MY.ISO8859-1',
1247
+ 'mt': 'mt_MT.ISO8859-3',
1248
+ 'mt_mt': 'mt_MT.ISO8859-3',
1249
+ 'my_mm': 'my_MM.UTF-8',
1250
+ 'nan_tw': 'nan_TW.UTF-8',
1251
+ 'nb': 'nb_NO.ISO8859-1',
1252
+ 'nb_no': 'nb_NO.ISO8859-1',
1253
+ 'nds_de': 'nds_DE.UTF-8',
1254
+ 'nds_nl': 'nds_NL.UTF-8',
1255
+ 'ne_np': 'ne_NP.UTF-8',
1256
+ 'nhn_mx': 'nhn_MX.UTF-8',
1257
+ 'niu_nu': 'niu_NU.UTF-8',
1258
+ 'niu_nz': 'niu_NZ.UTF-8',
1259
+ 'nl': 'nl_NL.ISO8859-1',
1260
+ 'nl_aw': 'nl_AW.UTF-8',
1261
+ 'nl_be': 'nl_BE.ISO8859-1',
1262
+ 'nl_nl': 'nl_NL.ISO8859-1',
1263
+ 'nn': 'nn_NO.ISO8859-1',
1264
+ 'nn_no': 'nn_NO.ISO8859-1',
1265
+ 'no': 'no_NO.ISO8859-1',
1266
+ 'no@nynorsk': 'ny_NO.ISO8859-1',
1267
+ 'no_no': 'no_NO.ISO8859-1',
1268
+ 'no_no.iso88591@bokmal': 'no_NO.ISO8859-1',
1269
+ 'no_no.iso88591@nynorsk': 'no_NO.ISO8859-1',
1270
+ 'norwegian': 'no_NO.ISO8859-1',
1271
+ 'nr': 'nr_ZA.ISO8859-1',
1272
+ 'nr_za': 'nr_ZA.ISO8859-1',
1273
+ 'nso': 'nso_ZA.ISO8859-15',
1274
+ 'nso_za': 'nso_ZA.ISO8859-15',
1275
+ 'ny': 'ny_NO.ISO8859-1',
1276
+ 'ny_no': 'ny_NO.ISO8859-1',
1277
+ 'nynorsk': 'nn_NO.ISO8859-1',
1278
+ 'oc': 'oc_FR.ISO8859-1',
1279
+ 'oc_fr': 'oc_FR.ISO8859-1',
1280
+ 'om_et': 'om_ET.UTF-8',
1281
+ 'om_ke': 'om_KE.ISO8859-1',
1282
+ 'or': 'or_IN.UTF-8',
1283
+ 'or_in': 'or_IN.UTF-8',
1284
+ 'os_ru': 'os_RU.UTF-8',
1285
+ 'pa': 'pa_IN.UTF-8',
1286
+ 'pa_in': 'pa_IN.UTF-8',
1287
+ 'pa_pk': 'pa_PK.UTF-8',
1288
+ 'pap_an': 'pap_AN.UTF-8',
1289
+ 'pap_aw': 'pap_AW.UTF-8',
1290
+ 'pap_cw': 'pap_CW.UTF-8',
1291
+ 'pd': 'pd_US.ISO8859-1',
1292
+ 'pd_de': 'pd_DE.ISO8859-1',
1293
+ 'pd_us': 'pd_US.ISO8859-1',
1294
+ 'ph': 'ph_PH.ISO8859-1',
1295
+ 'ph_ph': 'ph_PH.ISO8859-1',
1296
+ 'pl': 'pl_PL.ISO8859-2',
1297
+ 'pl_pl': 'pl_PL.ISO8859-2',
1298
+ 'polish': 'pl_PL.ISO8859-2',
1299
+ 'portuguese': 'pt_PT.ISO8859-1',
1300
+ 'portuguese_brazil': 'pt_BR.ISO8859-1',
1301
+ 'posix': 'C',
1302
+ 'posix-utf2': 'C',
1303
+ 'pp': 'pp_AN.ISO8859-1',
1304
+ 'pp_an': 'pp_AN.ISO8859-1',
1305
+ 'ps_af': 'ps_AF.UTF-8',
1306
+ 'pt': 'pt_PT.ISO8859-1',
1307
+ 'pt_br': 'pt_BR.ISO8859-1',
1308
+ 'pt_pt': 'pt_PT.ISO8859-1',
1309
+ 'quz_pe': 'quz_PE.UTF-8',
1310
+ 'raj_in': 'raj_IN.UTF-8',
1311
+ 'rif_ma': 'rif_MA.UTF-8',
1312
+ 'ro': 'ro_RO.ISO8859-2',
1313
+ 'ro_ro': 'ro_RO.ISO8859-2',
1314
+ 'romanian': 'ro_RO.ISO8859-2',
1315
+ 'ru': 'ru_RU.UTF-8',
1316
+ 'ru_ru': 'ru_RU.UTF-8',
1317
+ 'ru_ua': 'ru_UA.KOI8-U',
1318
+ 'rumanian': 'ro_RO.ISO8859-2',
1319
+ 'russian': 'ru_RU.ISO8859-5',
1320
+ 'rw': 'rw_RW.ISO8859-1',
1321
+ 'rw_rw': 'rw_RW.ISO8859-1',
1322
+ 'sa_in': 'sa_IN.UTF-8',
1323
+ 'sah_ru': 'sah_RU.UTF-8',
1324
+ 'sat_in': 'sat_IN.UTF-8',
1325
+ 'sc_it': 'sc_IT.UTF-8',
1326
+ 'scn_it': 'scn_IT.UTF-8',
1327
+ 'sd': 'sd_IN.UTF-8',
1328
+ 'sd_in': 'sd_IN.UTF-8',
1329
+ 'sd_in@devanagari.utf8': 'sd_IN.UTF-8@devanagari',
1330
+ 'sd_pk': 'sd_PK.UTF-8',
1331
+ 'se_no': 'se_NO.UTF-8',
1332
+ 'serbocroatian': 'sr_RS.UTF-8@latin',
1333
+ 'sgs_lt': 'sgs_LT.UTF-8',
1334
+ 'sh': 'sr_RS.UTF-8@latin',
1335
+ 'sh_ba.iso88592@bosnia': 'sr_CS.ISO8859-2',
1336
+ 'sh_hr': 'sh_HR.ISO8859-2',
1337
+ 'sh_hr.iso88592': 'hr_HR.ISO8859-2',
1338
+ 'sh_sp': 'sr_CS.ISO8859-2',
1339
+ 'sh_yu': 'sr_RS.UTF-8@latin',
1340
+ 'shn_mm': 'shn_MM.UTF-8',
1341
+ 'shs_ca': 'shs_CA.UTF-8',
1342
+ 'si': 'si_LK.UTF-8',
1343
+ 'si_lk': 'si_LK.UTF-8',
1344
+ 'sid_et': 'sid_ET.UTF-8',
1345
+ 'sinhala': 'si_LK.UTF-8',
1346
+ 'sk': 'sk_SK.ISO8859-2',
1347
+ 'sk_sk': 'sk_SK.ISO8859-2',
1348
+ 'sl': 'sl_SI.ISO8859-2',
1349
+ 'sl_cs': 'sl_CS.ISO8859-2',
1350
+ 'sl_si': 'sl_SI.ISO8859-2',
1351
+ 'slovak': 'sk_SK.ISO8859-2',
1352
+ 'slovene': 'sl_SI.ISO8859-2',
1353
+ 'slovenian': 'sl_SI.ISO8859-2',
1354
+ 'sm_ws': 'sm_WS.UTF-8',
1355
+ 'so_dj': 'so_DJ.ISO8859-1',
1356
+ 'so_et': 'so_ET.UTF-8',
1357
+ 'so_ke': 'so_KE.ISO8859-1',
1358
+ 'so_so': 'so_SO.ISO8859-1',
1359
+ 'sp': 'sr_CS.ISO8859-5',
1360
+ 'sp_yu': 'sr_CS.ISO8859-5',
1361
+ 'spanish': 'es_ES.ISO8859-1',
1362
+ 'spanish_spain': 'es_ES.ISO8859-1',
1363
+ 'sq': 'sq_AL.ISO8859-2',
1364
+ 'sq_al': 'sq_AL.ISO8859-2',
1365
+ 'sq_mk': 'sq_MK.UTF-8',
1366
+ 'sr': 'sr_RS.UTF-8',
1367
+ 'sr@cyrillic': 'sr_RS.UTF-8',
1368
+ 'sr@latn': 'sr_RS.UTF-8@latin',
1369
+ 'sr_cs': 'sr_CS.UTF-8',
1370
+ 'sr_cs.iso88592@latn': 'sr_CS.ISO8859-2',
1371
+ 'sr_cs@latn': 'sr_CS.UTF-8@latin',
1372
+ 'sr_me': 'sr_ME.UTF-8',
1373
+ 'sr_rs': 'sr_RS.UTF-8',
1374
+ 'sr_rs@latn': 'sr_RS.UTF-8@latin',
1375
+ 'sr_sp': 'sr_CS.ISO8859-2',
1376
+ 'sr_yu': 'sr_RS.UTF-8@latin',
1377
+ 'sr_yu.cp1251@cyrillic': 'sr_CS.CP1251',
1378
+ 'sr_yu.iso88592': 'sr_CS.ISO8859-2',
1379
+ 'sr_yu.iso88595': 'sr_CS.ISO8859-5',
1380
+ 'sr_yu.iso88595@cyrillic': 'sr_CS.ISO8859-5',
1381
+ 'sr_yu.microsoftcp1251@cyrillic': 'sr_CS.CP1251',
1382
+ 'sr_yu.utf8': 'sr_RS.UTF-8',
1383
+ 'sr_yu.utf8@cyrillic': 'sr_RS.UTF-8',
1384
+ 'sr_yu@cyrillic': 'sr_RS.UTF-8',
1385
+ 'ss': 'ss_ZA.ISO8859-1',
1386
+ 'ss_za': 'ss_ZA.ISO8859-1',
1387
+ 'ssy_er': 'ssy_ER.UTF-8',
1388
+ 'st': 'st_ZA.ISO8859-1',
1389
+ 'st_za': 'st_ZA.ISO8859-1',
1390
+ 'su_id': 'su_ID.UTF-8',
1391
+ 'sv': 'sv_SE.ISO8859-1',
1392
+ 'sv_fi': 'sv_FI.ISO8859-1',
1393
+ 'sv_se': 'sv_SE.ISO8859-1',
1394
+ 'sw_ke': 'sw_KE.UTF-8',
1395
+ 'sw_tz': 'sw_TZ.UTF-8',
1396
+ 'swedish': 'sv_SE.ISO8859-1',
1397
+ 'syr': 'syr.UTF-8',
1398
+ 'szl_pl': 'szl_PL.UTF-8',
1399
+ 'ta': 'ta_IN.TSCII-0',
1400
+ 'ta_in': 'ta_IN.TSCII-0',
1401
+ 'ta_in.tscii': 'ta_IN.TSCII-0',
1402
+ 'ta_in.tscii0': 'ta_IN.TSCII-0',
1403
+ 'ta_lk': 'ta_LK.UTF-8',
1404
+ 'tcy_in.utf8': 'tcy_IN.UTF-8',
1405
+ 'te': 'te_IN.UTF-8',
1406
+ 'te_in': 'te_IN.UTF-8',
1407
+ 'tg': 'tg_TJ.KOI8-C',
1408
+ 'tg_tj': 'tg_TJ.KOI8-C',
1409
+ 'th': 'th_TH.ISO8859-11',
1410
+ 'th_th': 'th_TH.ISO8859-11',
1411
+ 'th_th.tactis': 'th_TH.TIS620',
1412
+ 'th_th.tis620': 'th_TH.TIS620',
1413
+ 'thai': 'th_TH.ISO8859-11',
1414
+ 'the_np': 'the_NP.UTF-8',
1415
+ 'ti_er': 'ti_ER.UTF-8',
1416
+ 'ti_et': 'ti_ET.UTF-8',
1417
+ 'tig_er': 'tig_ER.UTF-8',
1418
+ 'tk_tm': 'tk_TM.UTF-8',
1419
+ 'tl': 'tl_PH.ISO8859-1',
1420
+ 'tl_ph': 'tl_PH.ISO8859-1',
1421
+ 'tn': 'tn_ZA.ISO8859-15',
1422
+ 'tn_za': 'tn_ZA.ISO8859-15',
1423
+ 'to_to': 'to_TO.UTF-8',
1424
+ 'tok': 'tok.UTF-8',
1425
+ 'tpi_pg': 'tpi_PG.UTF-8',
1426
+ 'tr': 'tr_TR.ISO8859-9',
1427
+ 'tr_cy': 'tr_CY.ISO8859-9',
1428
+ 'tr_tr': 'tr_TR.ISO8859-9',
1429
+ 'ts': 'ts_ZA.ISO8859-1',
1430
+ 'ts_za': 'ts_ZA.ISO8859-1',
1431
+ 'tt': 'tt_RU.TATAR-CYR',
1432
+ 'tt_ru': 'tt_RU.TATAR-CYR',
1433
+ 'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR',
1434
+ 'tt_ru@iqtelif': 'tt_RU.UTF-8@iqtelif',
1435
+ 'turkish': 'tr_TR.ISO8859-9',
1436
+ 'ug_cn': 'ug_CN.UTF-8',
1437
+ 'uk': 'uk_UA.KOI8-U',
1438
+ 'uk_ua': 'uk_UA.KOI8-U',
1439
+ 'univ.utf8': 'en_US.UTF-8',
1440
+ 'universal.utf8@ucs4': 'en_US.UTF-8',
1441
+ 'unm_us': 'unm_US.UTF-8',
1442
+ 'ur': 'ur_PK.CP1256',
1443
+ 'ur_in': 'ur_IN.UTF-8',
1444
+ 'ur_pk': 'ur_PK.CP1256',
1445
+ 'uz': 'uz_UZ.UTF-8',
1446
+ 'uz_uz': 'uz_UZ.UTF-8',
1447
+ 'uz_uz@cyrillic': 'uz_UZ.UTF-8',
1448
+ 've': 've_ZA.UTF-8',
1449
+ 've_za': 've_ZA.UTF-8',
1450
+ 'vi': 'vi_VN.TCVN',
1451
+ 'vi_vn': 'vi_VN.TCVN',
1452
+ 'vi_vn.tcvn': 'vi_VN.TCVN',
1453
+ 'vi_vn.tcvn5712': 'vi_VN.TCVN',
1454
+ 'vi_vn.viscii': 'vi_VN.VISCII',
1455
+ 'vi_vn.viscii111': 'vi_VN.VISCII',
1456
+ 'wa': 'wa_BE.ISO8859-1',
1457
+ 'wa_be': 'wa_BE.ISO8859-1',
1458
+ 'wae_ch': 'wae_CH.UTF-8',
1459
+ 'wal_et': 'wal_ET.UTF-8',
1460
+ 'wo_sn': 'wo_SN.UTF-8',
1461
+ 'xh': 'xh_ZA.ISO8859-1',
1462
+ 'xh_za': 'xh_ZA.ISO8859-1',
1463
+ 'yi': 'yi_US.CP1255',
1464
+ 'yi_us': 'yi_US.CP1255',
1465
+ 'yo_ng': 'yo_NG.UTF-8',
1466
+ 'yue_hk': 'yue_HK.UTF-8',
1467
+ 'yuw_pg': 'yuw_PG.UTF-8',
1468
+ 'zgh_ma': 'zgh_MA.UTF-8',
1469
+ 'zh': 'zh_CN.eucCN',
1470
+ 'zh_cn': 'zh_CN.gb2312',
1471
+ 'zh_cn.big5': 'zh_TW.big5',
1472
+ 'zh_cn.euc': 'zh_CN.eucCN',
1473
+ 'zh_hk': 'zh_HK.big5hkscs',
1474
+ 'zh_hk.big5hk': 'zh_HK.big5hkscs',
1475
+ 'zh_sg': 'zh_SG.GB2312',
1476
+ 'zh_sg.gbk': 'zh_SG.GBK',
1477
+ 'zh_tw': 'zh_TW.big5',
1478
+ 'zh_tw.euc': 'zh_TW.eucTW',
1479
+ 'zh_tw.euctw': 'zh_TW.eucTW',
1480
+ 'zu': 'zu_ZA.ISO8859-1',
1481
+ 'zu_za': 'zu_ZA.ISO8859-1',
1482
+ }
1483
+
1484
+ #
1485
+ # This maps Windows language identifiers to locale strings.
1486
+ #
1487
+ # This list has been updated from
1488
+ # https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/70feba9f-294e-491e-b6eb-56532684c37f
1489
+ # to include every locale up to protocol revision 16.0 (2024-04-23).
1490
+ #
1491
+ # NOTE: this mapping is incomplete. If your language is missing, please
1492
+ # submit a bug report as detailed in the Python devguide at:
1493
+ # https://devguide.python.org/triage/issue-tracker/
1494
+ # Make sure you include the missing language identifier and the suggested
1495
+ # locale code.
1496
+ #
1497
+
1498
+ windows_locale = {
1499
+ 0x0036: "af", # Afrikaans
1500
+ 0x0436: "af_ZA", # Afrikaans - South Africa
1501
+ 0x001c: "sq", # Albanian
1502
+ 0x041c: "sq_AL", # Albanian - Albania
1503
+ 0x0084: "gsw", # Alsatian
1504
+ 0x0484: "gsw_FR", # Alsatian - France
1505
+ 0x005e: "am", # Amharic
1506
+ 0x045e: "am_ET", # Amharic - Ethiopia
1507
+ 0x0001: "ar", # Arabic
1508
+ 0x0401: "ar_SA", # Arabic - Saudi Arabia
1509
+ 0x0801: "ar_IQ", # Arabic - Iraq
1510
+ 0x0c01: "ar_EG", # Arabic - Egypt
1511
+ 0x1001: "ar_LY", # Arabic - Libya
1512
+ 0x1401: "ar_DZ", # Arabic - Algeria
1513
+ 0x1801: "ar_MA", # Arabic - Morocco
1514
+ 0x1c01: "ar_TN", # Arabic - Tunisia
1515
+ 0x2001: "ar_OM", # Arabic - Oman
1516
+ 0x2401: "ar_YE", # Arabic - Yemen
1517
+ 0x2801: "ar_SY", # Arabic - Syria
1518
+ 0x2c01: "ar_JO", # Arabic - Jordan
1519
+ 0x3001: "ar_LB", # Arabic - Lebanon
1520
+ 0x3401: "ar_KW", # Arabic - Kuwait
1521
+ 0x3801: "ar_AE", # Arabic - U.A.E.
1522
+ 0x3c01: "ar_BH", # Arabic - Bahrain
1523
+ 0x4001: "ar_QA", # Arabic - Qatar
1524
+ 0x002b: "hy", # Armenian
1525
+ 0x042b: "hy_AM", # Armenian - Armenia
1526
+ 0x004d: "as", # Assamese
1527
+ 0x044d: "as_IN", # Assamese - India
1528
+ 0x002c: "az", # Azerbaijani (Latin)
1529
+ 0x742c: "az", # Azerbaijani (Cyrillic)
1530
+ 0x782c: "az", # Azerbaijani (Latin)
1531
+ 0x042c: "az_AZ", # Azerbaijani (Latin) - Azerbaijan
1532
+ 0x0045: "bn", # Bangla
1533
+ 0x0445: "bn_IN", # Bangla - India
1534
+ 0x0845: "bn_BD", # Bangla - Bangladesh
1535
+ 0x006d: "ba", # Bashkir
1536
+ 0x046d: "ba_RU", # Bashkir - Russia
1537
+ 0x002d: "eu", # Basque
1538
+ 0x042d: "eu_ES", # Basque - Spain
1539
+ 0x0023: "be", # Belarusian
1540
+ 0x0423: "be_BY", # Belarusian - Belarus
1541
+ 0x641a: "bs", # Bosnian (Cyrillic)
1542
+ 0x681a: "bs", # Bosnian (Latin)
1543
+ 0x141a: "bs_BA", # Bosnian (Latin) - Bosnia and Herzegovina
1544
+ 0x201a: "bs_BA", # Bosnian (Cyrillic) - Bosnia and Herzegovina
1545
+ 0x781a: "bs", # Bosnian (Latin)
1546
+ 0x007e: "br", # Breton
1547
+ 0x047e: "br_FR", # Breton - France
1548
+ 0x0002: "bg", # Bulgarian
1549
+ 0x0402: "bg_BG", # Bulgarian - Bulgaria
1550
+ 0x0055: "my", # Burmese
1551
+ 0x0455: "my_MM", # Burmese - Myanmar
1552
+ 0x0003: "ca", # Catalan
1553
+ 0x0403: "ca_ES", # Catalan - Spain
1554
+ 0x0803: "ca_ES", # Valencian - Spain
1555
+ 0x0092: "ku", # Central Kurdish
1556
+ 0x7c92: "ku", # Central Kurdish
1557
+ 0x0492: "ku_IQ", # Central Kurdish - Iraq
1558
+ 0x005c: "chr", # Cherokee
1559
+ 0x7c5c: "chr", # Cherokee
1560
+ 0x045c: "chr_US", # Cherokee - United States
1561
+ 0x0004: "zh", # Chinese (Simplified)
1562
+ 0x7804: "zh", # Chinese (Simplified)
1563
+ 0x7c04: "zh", # Chinese (Traditional)
1564
+ 0x0404: "zh_TW", # Chinese (Traditional) - Taiwan
1565
+ 0x0804: "zh_CN", # Chinese (Simplified) - People's Republic of China
1566
+ 0x0c04: "zh_HK", # Chinese (Traditional) - Hong Kong S.A.R.
1567
+ 0x1004: "zh_SG", # Chinese (Simplified) - Singapore
1568
+ 0x1404: "zh_MO", # Chinese (Traditional) - Macao S.A.R.
1569
+ 0x0083: "co", # Corsican
1570
+ 0x0483: "co_FR", # Corsican - France
1571
+ 0x001a: "hr", # Croatian
1572
+ 0x041a: "hr_HR", # Croatian - Croatia
1573
+ 0x101a: "hr_BA", # Croatian (Latin) - Bosnia and Herzegovina
1574
+ 0x0005: "cs", # Czech
1575
+ 0x0405: "cs_CZ", # Czech - Czech Republic
1576
+ 0x0006: "da", # Danish
1577
+ 0x0406: "da_DK", # Danish - Denmark
1578
+ 0x008c: "prs", # Dari
1579
+ 0x048c: "prs_AF", # Dari - Afghanistan
1580
+ 0x0065: "dv", # Divehi
1581
+ 0x0465: "dv_MV", # Divehi - Maldives
1582
+ 0x0013: "nl", # Dutch
1583
+ 0x0413: "nl_NL", # Dutch - Netherlands
1584
+ 0x0813: "nl_BE", # Dutch - Belgium
1585
+ 0x0c51: "dz_BT", # Dzongkha - Bhutan
1586
+ 0x0009: "en", # English
1587
+ 0x0409: "en_US", # English - United States
1588
+ 0x0809: "en_GB", # English - United Kingdom
1589
+ 0x0c09: "en_AU", # English - Australia
1590
+ 0x1009: "en_CA", # English - Canada
1591
+ 0x1409: "en_NZ", # English - New Zealand
1592
+ 0x1809: "en_IE", # English - Ireland
1593
+ 0x1c09: "en_ZA", # English - South Africa
1594
+ 0x2009: "en_JM", # English - Jamaica
1595
+ 0x2809: "en_BZ", # English - Belize
1596
+ 0x2c09: "en_TT", # English - Trinidad and Tobago
1597
+ 0x3009: "en_ZW", # English - Zimbabwe
1598
+ 0x3409: "en_PH", # English - Republic of the Philippines
1599
+ 0x3c09: "en_HK", # English - Hong Kong
1600
+ 0x4009: "en_IN", # English - India
1601
+ 0x4409: "en_MY", # English - Malaysia
1602
+ 0x4809: "en_SG", # English - Singapore
1603
+ 0x4c09: "en_AE", # English - United Arab Emirates
1604
+ 0x0025: "et", # Estonian
1605
+ 0x0425: "et_EE", # Estonian - Estonia
1606
+ 0x0038: "fo", # Faroese
1607
+ 0x0438: "fo_FO", # Faroese - Faroe Islands
1608
+ 0x0064: "fil", # Filipino
1609
+ 0x0464: "fil_PH", # Filipino - Philippines
1610
+ 0x000b: "fi", # Finnish
1611
+ 0x040b: "fi_FI", # Finnish - Finland
1612
+ 0x000c: "fr", # French
1613
+ 0x040c: "fr_FR", # French - France
1614
+ 0x080c: "fr_BE", # French - Belgium
1615
+ 0x0c0c: "fr_CA", # French - Canada
1616
+ 0x100c: "fr_CH", # French - Switzerland
1617
+ 0x140c: "fr_LU", # French - Luxembourg
1618
+ 0x180c: "fr_MC", # French - Principality of Monaco
1619
+ 0x1c0c: "fr_029", # French - Caribbean
1620
+ 0x200c: "fr_RE", # French - Reunion
1621
+ 0x240c: "fr_CD", # French - Congo, DRC
1622
+ 0x280c: "fr_SN", # French - Senegal
1623
+ 0x2c0c: "fr_CM", # French - Cameroon
1624
+ 0x300c: "fr_CI", # French - Côte d'Ivoire
1625
+ 0x340c: "fr_ML", # French - Mali
1626
+ 0x380c: "fr_MA", # French - Morocco
1627
+ 0x3c0c: "fr_HT", # French - Haiti
1628
+ 0x0062: "fy", # Frisian
1629
+ 0x0462: "fy_NL", # Frisian - Netherlands
1630
+ 0x0067: "ff", # Fulah
1631
+ 0x7c67: "ff", # Fulah (Latin)
1632
+ 0x0467: "ff_NG",
1633
+ 0x0867: "ff_SN", # Fulah - Senegal
1634
+ 0x0056: "gl", # Galician
1635
+ 0x0456: "gl_ES", # Galician - Spain
1636
+ 0x0037: "ka", # Georgian
1637
+ 0x0437: "ka_GE", # Georgian - Georgia
1638
+ 0x0007: "de", # German
1639
+ 0x0407: "de_DE", # German - Germany
1640
+ 0x0807: "de_CH", # German - Switzerland
1641
+ 0x0c07: "de_AT", # German - Austria
1642
+ 0x1007: "de_LU", # German - Luxembourg
1643
+ 0x1407: "de_LI", # German - Liechtenstein
1644
+ 0x0008: "el", # Greek
1645
+ 0x0408: "el_GR", # Greek - Greece
1646
+ 0x006f: "kl", # Greenlandic
1647
+ 0x046f: "kl_GL", # Greenlandic - Greenland
1648
+ 0x0074: "gn", # Guarani
1649
+ 0x0474: "gn_PY", # Guarani - Paraguay
1650
+ 0x0047: "gu", # Gujarati
1651
+ 0x0447: "gu_IN", # Gujarati - India
1652
+ 0x0068: "ha", # Hausa (Latin)
1653
+ 0x7c68: "ha", # Hausa (Latin)
1654
+ 0x0468: "ha_NG", # Hausa (Latin) - Nigeria
1655
+ 0x0075: "haw", # Hawaiian
1656
+ 0x0475: "haw_US", # Hawaiian - United States
1657
+ 0x000d: "he", # Hebrew
1658
+ 0x040d: "he_IL", # Hebrew - Israel
1659
+ 0x0039: "hi", # Hindi
1660
+ 0x0439: "hi_IN", # Hindi - India
1661
+ 0x000e: "hu", # Hungarian
1662
+ 0x040e: "hu_HU", # Hungarian - Hungary
1663
+ 0x000f: "is", # Icelandic
1664
+ 0x040f: "is_IS", # Icelandic - Iceland
1665
+ 0x0070: "ig", # Igbo
1666
+ 0x0470: "ig_NG", # Igbo - Nigeria
1667
+ 0x0021: "id", # Indonesian
1668
+ 0x0421: "id_ID", # Indonesian - Indonesia
1669
+ 0x005d: "iu", # Inuktitut (Latin)
1670
+ 0x785d: "iu", # Inuktitut (Syllabics)
1671
+ 0x7c5d: "iu", # Inuktitut (Latin)
1672
+ 0x045d: "iu_CA", # Inuktitut (Syllabics) - Canada
1673
+ 0x085d: "iu_CA", # Inuktitut (Latin) - Canada
1674
+ 0x003c: "ga", # Irish
1675
+ 0x083c: "ga_IE", # Irish - Ireland
1676
+ 0x0010: "it", # Italian
1677
+ 0x0410: "it_IT", # Italian - Italy
1678
+ 0x0810: "it_CH", # Italian - Switzerland
1679
+ 0x0011: "ja", # Japanese
1680
+ 0x0411: "ja_JP", # Japanese - Japan
1681
+ 0x004b: "kn", # Kannada
1682
+ 0x044b: "kn_IN", # Kannada - India
1683
+ 0x0471: "kr_NG", # Kanuri (Latin) - Nigeria
1684
+ 0x0060: "ks", # Kashmiri
1685
+ 0x0460: "ks", # Kashmiri - Perso_Arabic
1686
+ 0x0860: "ks_IN", # Kashmiri (Devanagari) - India
1687
+ 0x003f: "kk", # Kazakh
1688
+ 0x043f: "kk_KZ", # Kazakh - Kazakhstan
1689
+ 0x0053: "km", # Khmer
1690
+ 0x0453: "km_KH", # Khmer - Cambodia
1691
+ 0x0087: "rw", # Kinyarwanda
1692
+ 0x0487: "rw_RW", # Kinyarwanda - Rwanda
1693
+ 0x0041: "sw", # Kiswahili
1694
+ 0x0441: "sw_KE", # Kiswahili - Kenya
1695
+ 0x0057: "kok", # Konkani
1696
+ 0x0457: "kok_IN", # Konkani - India
1697
+ 0x0012: "ko", # Korean
1698
+ 0x0412: "ko_KR", # Korean - Korea
1699
+ 0x0040: "ky", # Kyrgyz
1700
+ 0x0440: "ky_KG", # Kyrgyz - Kyrgyzstan
1701
+ 0x0054: "lo", # Lao
1702
+ 0x0454: "lo_LA", # Lao - Lao P.D.R.
1703
+ 0x0476: "la_VA", # Latin - Vatican City
1704
+ 0x0026: "lv", # Latvian
1705
+ 0x0426: "lv_LV", # Latvian - Latvia
1706
+ 0x0027: "lt", # Lithuanian
1707
+ 0x0427: "lt_LT", # Lithuanian - Lithuania
1708
+ 0x7c2e: "dsb", # Lower Sorbian
1709
+ 0x082e: "dsb_DE", # Lower Sorbian - Germany
1710
+ 0x006e: "lb", # Luxembourgish
1711
+ 0x046e: "lb_LU", # Luxembourgish - Luxembourg
1712
+ 0x002f: "mk", # Macedonian
1713
+ 0x042f: "mk_MK", # Macedonian - North Macedonia
1714
+ 0x003e: "ms", # Malay
1715
+ 0x043e: "ms_MY", # Malay - Malaysia
1716
+ 0x083e: "ms_BN", # Malay - Brunei Darussalam
1717
+ 0x004c: "ml", # Malayalam
1718
+ 0x044c: "ml_IN", # Malayalam - India
1719
+ 0x003a: "mt", # Maltese
1720
+ 0x043a: "mt_MT", # Maltese - Malta
1721
+ 0x0081: "mi", # Maori
1722
+ 0x0481: "mi_NZ", # Maori - New Zealand
1723
+ 0x007a: "arn", # Mapudungun
1724
+ 0x047a: "arn_CL", # Mapudungun - Chile
1725
+ 0x004e: "mr", # Marathi
1726
+ 0x044e: "mr_IN", # Marathi - India
1727
+ 0x007c: "moh", # Mohawk
1728
+ 0x047c: "moh_CA", # Mohawk - Canada
1729
+ 0x0050: "mn", # Mongolian (Cyrillic)
1730
+ 0x7850: "mn", # Mongolian (Cyrillic)
1731
+ 0x7c50: "mn", # Mongolian (Traditional Mongolian)
1732
+ 0x0450: "mn_MN", # Mongolian (Cyrillic) - Mongolia
1733
+ 0x0c50: "mn_MN", # Mongolian (Traditional Mongolian) - Mongolia
1734
+ 0x0061: "ne", # Nepali
1735
+ 0x0461: "ne_NP", # Nepali - Nepal
1736
+ 0x0861: "ne_IN", # Nepali - India
1737
+ 0x0014: "no", # Norwegian (Bokmal)
1738
+ 0x0414: "nb_NO", # Norwegian (Bokmal) - Norway
1739
+ 0x0814: "nn_NO", # Norwegian (Nynorsk) - Norway
1740
+ 0x7814: "nn", # Norwegian (Nynorsk)
1741
+ 0x7c14: "nb", # Norwegian (Bokmal)
1742
+ 0x0082: "oc", # Occitan
1743
+ 0x0482: "oc_FR", # Occitan - France
1744
+ 0x0048: "or", # Odia
1745
+ 0x0448: "or_IN", # Odia - India
1746
+ 0x0072: "om", # Oromo
1747
+ 0x0472: "om_ET", # Oromo - Ethiopia
1748
+ 0x0063: "ps", # Pashto
1749
+ 0x0463: "ps_AF", # Pashto - Afghanistan
1750
+ 0x0029: "fa", # Persian
1751
+ 0x0429: "fa_IR", # Persian - Iran
1752
+ 0x0015: "pl", # Polish
1753
+ 0x0415: "pl_PL", # Polish - Poland
1754
+ 0x0016: "pt", # Portuguese
1755
+ 0x0416: "pt_BR", # Portuguese - Brazil
1756
+ 0x0816: "pt_PT", # Portuguese - Portugal
1757
+ 0x0046: "pa", # Punjabi
1758
+ 0x7c46: "pa", # Punjabi
1759
+ 0x0446: "pa_IN", # Punjabi - India
1760
+ 0x0846: "pa_PK", # Punjabi - Islamic Republic of Pakistan
1761
+ 0x006b: "quz", # Quechua
1762
+ 0x046b: "quz_BO", # Quechua - Bolivia
1763
+ 0x086b: "quz_EC", # Quechua - Ecuador
1764
+ 0x0c6b: "quz_PE", # Quechua - Peru
1765
+ 0x0018: "ro", # Romanian
1766
+ 0x0418: "ro_RO", # Romanian - Romania
1767
+ 0x0818: "ro_MD", # Romanian - Moldova
1768
+ 0x0017: "rm", # Romansh
1769
+ 0x0417: "rm_CH", # Romansh - Switzerland
1770
+ 0x0019: "ru", # Russian
1771
+ 0x0419: "ru_RU", # Russian - Russia
1772
+ 0x0819: "ru_MD", # Russian - Moldova
1773
+ 0x0085: "sah", # Sakha
1774
+ 0x0485: "sah_RU", # Sakha - Russia
1775
+ 0x003b: "se", # Sami (Northern)
1776
+ 0x043b: "se_NO", # Sami (Northern) - Norway
1777
+ 0x083b: "se_SE", # Sami (Northern) - Sweden
1778
+ 0x0c3b: "se_FI", # Sami (Northern) - Finland
1779
+ 0x7c3b: "smj", # Sami (Lule)
1780
+ 0x103b: "smj_NO", # Sami (Lule) - Norway
1781
+ 0x143b: "smj_SE", # Sami (Lule) - Sweden
1782
+ 0x783b: "sma", # Sami (Southern)
1783
+ 0x183b: "sma_NO", # Sami (Southern) - Norway
1784
+ 0x1c3b: "sma_SE", # Sami (Southern) - Sweden
1785
+ 0x743b: "sms", # Sami (Skolt)
1786
+ 0x203b: "sms_FI", # Sami (Skolt) - Finland
1787
+ 0x703b: "smn", # Sami (Inari)
1788
+ 0x243b: "smn_FI", # Sami (Inari) - Finland
1789
+ 0x004f: "sa", # Sanskrit
1790
+ 0x044f: "sa_IN", # Sanskrit - India
1791
+ 0x0091: "gd", # Scottish Gaelic
1792
+ 0x0491: "gd_GB", # Scottish Gaelic - United Kingdom
1793
+ 0x6c1a: "sr", # Serbian (Cyrillic)
1794
+ 0x701a: "sr", # Serbian (Latin)
1795
+ 0x7c1a: "sr", # Serbian (Latin)
1796
+ 0x081a: "sr_CS", # Serbian (Latin) - Serbia and Montenegro (Former)
1797
+ 0x0c1a: "sr_CS", # Serbian (Cyrillic) - Serbia and Montenegro (Former)
1798
+ 0x181a: "sr_BA", # Serbian (Latin) - Bosnia and Herzegovina
1799
+ 0x1c1a: "sr_BA", # Serbian (Cyrillic) - Bosnia and Herzegovina
1800
+ 0x241a: "sr_RS", # Serbian (Latin) - Serbia
1801
+ 0x281a: "sr_RS", # Serbian (Cyrillic) - Serbia
1802
+ 0x2c1a: "sr_ME", # Serbian (Latin) - Montenegro
1803
+ 0x301a: "sr_ME", # Serbian (Cyrillic) - Montenegro
1804
+ 0x006c: "nso", # Sesotho sa Leboa
1805
+ 0x046c: "nso_ZA", # Sesotho sa Leboa - South Africa
1806
+ 0x0032: "tn", # Setswana
1807
+ 0x0432: "tn_ZA", # Setswana - South Africa
1808
+ 0x0832: "tn_BW", # Setswana - Botswana
1809
+ 0x0059: "sd", # Sindhi
1810
+ 0x7c59: "sd", # Sindhi
1811
+ 0x0859: "sd_PK", # Sindhi - Islamic Republic of Pakistan
1812
+ 0x005b: "si", # Sinhala
1813
+ 0x045b: "si_LK", # Sinhala - Sri Lanka
1814
+ 0x001b: "sk", # Slovak
1815
+ 0x041b: "sk_SK", # Slovak - Slovakia
1816
+ 0x0024: "sl", # Slovenian
1817
+ 0x0424: "sl_SI", # Slovenian - Slovenia
1818
+ 0x0477: "so_SO", # Somali - Somalia
1819
+ 0x0030: "st", # Sotho
1820
+ 0x0430: "st_ZA", # Sotho - South Africa
1821
+ 0x000a: "es", # Spanish
1822
+ 0x040a: "es_ES", # Spanish - Spain
1823
+ 0x080a: "es_MX", # Spanish - Mexico
1824
+ 0x0c0a: "es_ES", # Spanish - Spain
1825
+ 0x100a: "es_GT", # Spanish - Guatemala
1826
+ 0x140a: "es_CR", # Spanish - Costa Rica
1827
+ 0x180a: "es_PA", # Spanish - Panama
1828
+ 0x1c0a: "es_DO", # Spanish - Dominican Republic
1829
+ 0x200a: "es_VE", # Spanish - Bolivarian Republic of Venezuela
1830
+ 0x240a: "es_CO", # Spanish - Colombia
1831
+ 0x280a: "es_PE", # Spanish - Peru
1832
+ 0x2c0a: "es_AR", # Spanish - Argentina
1833
+ 0x300a: "es_EC", # Spanish - Ecuador
1834
+ 0x340a: "es_CL", # Spanish - Chile
1835
+ 0x380a: "es_UY", # Spanish - Uruguay
1836
+ 0x3c0a: "es_PY", # Spanish - Paraguay
1837
+ 0x400a: "es_BO", # Spanish - Bolivia
1838
+ 0x440a: "es_SV", # Spanish - El Salvador
1839
+ 0x480a: "es_HN", # Spanish - Honduras
1840
+ 0x4c0a: "es_NI", # Spanish - Nicaragua
1841
+ 0x500a: "es_PR", # Spanish - Puerto Rico
1842
+ 0x540a: "es_US", # Spanish - United States
1843
+ 0x5c0a: "es_CU", # Spanish - Cuba
1844
+ 0x001d: "sv", # Swedish
1845
+ 0x041d: "sv_SE", # Swedish - Sweden
1846
+ 0x081d: "sv_FI", # Swedish - Finland
1847
+ 0x005a: "syr", # Syriac
1848
+ 0x045a: "syr_SY", # Syriac - Syria
1849
+ 0x0028: "tg", # Tajik (Cyrillic)
1850
+ 0x7c28: "tg", # Tajik (Cyrillic)
1851
+ 0x0428: "tg_TJ", # Tajik (Cyrillic) - Tajikistan
1852
+ 0x005f: "tzm", # Tamazight (Latin)
1853
+ 0x785f: "tzm",
1854
+ 0x7c5f: "tzm", # Tamazight (Latin)
1855
+ 0x085f: "tzm_DZ", # Tamazight (Latin) - Algeria
1856
+ 0x045f: "tzm_MA", # Central Atlas Tamazight (Arabic) - Morocco
1857
+ 0x105f: "tzm_MA",
1858
+ 0x0049: "ta", # Tamil
1859
+ 0x0449: "ta_IN", # Tamil - India
1860
+ 0x0849: "ta_LK", # Tamil - Sri Lanka
1861
+ 0x0044: "tt", # Tatar
1862
+ 0x0444: "tt_RU", # Tatar - Russia
1863
+ 0x004a: "te", # Telugu
1864
+ 0x044a: "te_IN", # Telugu - India
1865
+ 0x001e: "th", # Thai
1866
+ 0x041e: "th_TH", # Thai - Thailand
1867
+ 0x0051: "bo", # Tibetan
1868
+ 0x0451: "bo_CN", # Tibetan - People's Republic of China
1869
+ 0x0073: "ti", # Tigrinya
1870
+ 0x0473: "ti_ET", # Tigrinya - Ethiopia
1871
+ 0x0873: "ti_ER", # Tigrinya - Eritrea
1872
+ 0x0031: "ts", # Tsonga
1873
+ 0x0431: "ts_ZA", # Tsonga - South Africa
1874
+ 0x001f: "tr", # Turkish
1875
+ 0x041f: "tr_TR", # Turkish - Turkey
1876
+ 0x0042: "tk", # Turkmen
1877
+ 0x0442: "tk_TM", # Turkmen - Turkmenistan
1878
+ 0x0022: "uk", # Ukrainian
1879
+ 0x0422: "uk_UA", # Ukrainian - Ukraine
1880
+ 0x002e: "hsb", # Upper Sorbian
1881
+ 0x042e: "hsb_DE", # Upper Sorbian - Germany
1882
+ 0x0020: "ur", # Urdu
1883
+ 0x0420: "ur_PK", # Urdu - Islamic Republic of Pakistan
1884
+ 0x0820: "ur_IN", # Urdu - India
1885
+ 0x0080: "ug", # Uyghur
1886
+ 0x0480: "ug_CN", # Uyghur - People's Republic of China
1887
+ 0x0043: "uz", # Uzbek (Latin)
1888
+ 0x7843: "uz", # Uzbek (Cyrillic)
1889
+ 0x7c43: "uz", # Uzbek (Latin)
1890
+ 0x0443: "uz_UZ", # Uzbek (Latin) - Uzbekistan
1891
+ 0x0033: "ve", # Venda
1892
+ 0x0433: "ve_ZA", # Venda - South Africa
1893
+ 0x002a: "vi", # Vietnamese
1894
+ 0x042a: "vi_VN", # Vietnamese - Vietnam
1895
+ 0x0052: "cy", # Welsh
1896
+ 0x0452: "cy_GB", # Welsh - United Kingdom
1897
+ 0x0088: "wo", # Wolof
1898
+ 0x0488: "wo_SN", # Wolof - Senegal
1899
+ 0x0034: "xh", # Xhosa
1900
+ 0x0434: "xh_ZA", # Xhosa - South Africa
1901
+ 0x0078: "ii", # Yi
1902
+ 0x0478: "ii_CN", # Yi - People's Republic of China
1903
+ 0x043d: "yi_001", # Yiddish - World
1904
+ 0x006a: "yo", # Yoruba
1905
+ 0x046a: "yo_NG", # Yoruba - Nigeria
1906
+ 0x0035: "zu", # Zulu
1907
+ 0x0435: "zu_ZA", # Zulu - South Africa
1908
+ 0x0086: "qut",
1909
+
1910
+ # 0x0001007f: "x-IV-mathan", # math alphanumeric sorting
1911
+ 0x00010407: "de_DE",
1912
+ 0x0001040e: "hu_HU",
1913
+ 0x00010437: "ka_GE",
1914
+ 0x00020804: "zh_CN",
1915
+ 0x00021004: "zh_SG",
1916
+ 0x00021404: "zh_MO",
1917
+ 0x00030404: "zh_TW",
1918
+ 0x00040404: "zh_TW",
1919
+ 0x00040411: "ja_JP",
1920
+ 0x00040c04: "zh_HK",
1921
+ 0x00041404: "zh_MO",
1922
+ 0x00050804: "zh_CN",
1923
+ 0x00051004: "zh_SG",
1924
+ }
1925
+
1926
+ def _print_locale():
1927
+
1928
+ """ Test function.
1929
+ """
1930
+ categories = {}
1931
+ def _init_categories(categories=categories):
1932
+ for k,v in globals().items():
1933
+ if k[:3] == 'LC_':
1934
+ categories[k] = v
1935
+ _init_categories()
1936
+ del categories['LC_ALL']
1937
+
1938
+ print('Locale defaults as determined by getdefaultlocale():')
1939
+ print('-'*72)
1940
+ lang, enc = getdefaultlocale()
1941
+ print('Language: ', lang or '(undefined)')
1942
+ print('Encoding: ', enc or '(undefined)')
1943
+ print()
1944
+
1945
+ print('Locale settings on startup:')
1946
+ print('-'*72)
1947
+ for name,category in categories.items():
1948
+ print(name, '...')
1949
+ lang, enc = getlocale(category)
1950
+ print(' Language: ', lang or '(undefined)')
1951
+ print(' Encoding: ', enc or '(undefined)')
1952
+ print()
1953
+
1954
+ try:
1955
+ setlocale(LC_ALL, "")
1956
+ except:
1957
+ print('NOTE:')
1958
+ print('setlocale(LC_ALL, "") does not support the default locale')
1959
+ print('given in the OS environment variables.')
1960
+ else:
1961
+ print()
1962
+ print('Locale settings after calling setlocale(LC_ALL, ""):')
1963
+ print('-'*72)
1964
+ for name,category in categories.items():
1965
+ print(name, '...')
1966
+ lang, enc = getlocale(category)
1967
+ print(' Language: ', lang or '(undefined)')
1968
+ print(' Encoding: ', enc or '(undefined)')
1969
+ print()
1970
+
1971
+ ###
1972
+
1973
+ try:
1974
+ LC_MESSAGES
1975
+ except NameError:
1976
+ pass
1977
+ else:
1978
+ __all__.append("LC_MESSAGES")
1979
+
1980
+ if __name__=='__main__':
1981
+ print('Locale aliasing:')
1982
+ print()
1983
+ _print_locale()
1984
+ print()
1985
+ print('Number formatting:')
1986
+ print()
1987
+ _test()