plover 5.0.0.dev2__py3-none-any.whl → 5.0.0.dev3__py3-none-any.whl

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 (130) hide show
  1. plover/__init__.py +8 -7
  2. plover/__main__.py +1 -1
  3. plover/command/set_config.py +7 -4
  4. plover/config.py +177 -74
  5. plover/dictionary/base.py +21 -9
  6. plover/dictionary/helpers.py +6 -4
  7. plover/dictionary/json_dict.py +10 -12
  8. plover/dictionary/loading_manager.py +8 -10
  9. plover/dictionary/rtfcre_dict.py +46 -43
  10. plover/dictionary/rtfcre_parse.py +116 -100
  11. plover/engine.py +112 -96
  12. plover/exception.py +4 -1
  13. plover/formatting.py +198 -140
  14. plover/gui_none/add_translation.py +17 -16
  15. plover/gui_none/engine.py +1 -3
  16. plover/gui_none/main.py +2 -2
  17. plover/gui_qt/about_dialog.py +17 -17
  18. plover/gui_qt/add_translation_dialog.py +8 -9
  19. plover/gui_qt/add_translation_widget.py +66 -63
  20. plover/gui_qt/config_window.py +274 -154
  21. plover/gui_qt/console_widget.py +9 -13
  22. plover/gui_qt/dictionaries_widget.py +140 -119
  23. plover/gui_qt/dictionary_editor.py +60 -61
  24. plover/gui_qt/engine.py +3 -3
  25. plover/gui_qt/info_browser.py +50 -4
  26. plover/gui_qt/log_qt.py +3 -2
  27. plover/gui_qt/lookup_dialog.py +9 -9
  28. plover/gui_qt/machine_options.py +38 -37
  29. plover/gui_qt/main.py +19 -19
  30. plover/gui_qt/main_window.py +88 -71
  31. plover/gui_qt/paper_tape.py +69 -52
  32. plover/gui_qt/paper_tape_ui.py +0 -3
  33. plover/gui_qt/plugins_manager.py +47 -43
  34. plover/gui_qt/resources_rc.py +28 -28
  35. plover/gui_qt/run_dialog.py +7 -6
  36. plover/gui_qt/steno_validator.py +2 -3
  37. plover/gui_qt/suggestions_dialog.py +34 -38
  38. plover/gui_qt/suggestions_widget.py +22 -16
  39. plover/gui_qt/tool.py +1 -3
  40. plover/gui_qt/trayicon.py +19 -19
  41. plover/gui_qt/utils.py +19 -9
  42. plover/i18n.py +9 -8
  43. plover/key_combo.py +130 -130
  44. plover/log.py +26 -26
  45. plover/machine/base.py +40 -35
  46. plover/machine/geminipr.py +7 -7
  47. plover/machine/keyboard.py +16 -14
  48. plover/machine/keyboard_capture/__init__.py +0 -1
  49. plover/machine/keymap.py +24 -20
  50. plover/machine/passport.py +6 -5
  51. plover/machine/procat.py +12 -16
  52. plover/machine/stentura.py +45 -29
  53. plover/machine/txbolt.py +5 -3
  54. plover/macro/repeat.py +0 -1
  55. plover/macro/retro.py +9 -9
  56. plover/macro/undo.py +4 -3
  57. plover/meta/attach.py +12 -10
  58. plover/meta/case.py +2 -1
  59. plover/meta/conditional.py +3 -3
  60. plover/meta/currency.py +4 -4
  61. plover/meta/mode.py +15 -15
  62. plover/meta/punctuation.py +1 -0
  63. plover/misc.py +21 -17
  64. plover/orthography.py +12 -10
  65. plover/oslayer/__init__.py +7 -5
  66. plover/oslayer/config.py +16 -15
  67. plover/oslayer/controller.py +13 -13
  68. plover/oslayer/linux/i18n.py +2 -1
  69. plover/oslayer/linux/keyboardcontrol.py +2 -2
  70. plover/oslayer/linux/keyboardcontrol_uinput.py +48 -3
  71. plover/oslayer/linux/keyboardcontrol_x11.py +860 -851
  72. plover/oslayer/linux/log.py +1 -1
  73. plover/oslayer/linux/log_dbus.py +97 -65
  74. plover/oslayer/linux/serial.py +2 -2
  75. plover/oslayer/linux/wmctrl_x11.py +11 -15
  76. plover/oslayer/osx/keyboardcontrol.py +194 -99
  77. plover/oslayer/osx/keyboardlayout.py +138 -119
  78. plover/oslayer/osx/log.py +14 -8
  79. plover/oslayer/osx/serial.py +1 -1
  80. plover/oslayer/osx/wmctrl.py +6 -1
  81. plover/oslayer/windows/keyboardcontrol.py +195 -89
  82. plover/oslayer/windows/keyboardlayout.py +367 -334
  83. plover/oslayer/windows/log.py +5 -3
  84. plover/oslayer/windows/serial.py +4 -5
  85. plover/oslayer/windows/wmctrl.py +1 -1
  86. plover/output/__init__.py +1 -2
  87. plover/output/keyboard.py +15 -15
  88. plover/plugins_manager/__main__.py +42 -39
  89. plover/plugins_manager/global_registry.py +2 -5
  90. plover/plugins_manager/local_registry.py +11 -13
  91. plover/plugins_manager/package_index.py +12 -18
  92. plover/plugins_manager/pip_wrapper.py +5 -5
  93. plover/plugins_manager/plugin_metadata.py +17 -9
  94. plover/plugins_manager/registry.py +39 -28
  95. plover/plugins_manager/requests.py +2 -4
  96. plover/plugins_manager/utils.py +9 -7
  97. plover/registry.py +28 -26
  98. plover/resource.py +13 -10
  99. plover/scripts/dist_main.py +7 -7
  100. plover/scripts/main.py +57 -34
  101. plover/scripts/send_command.py +13 -7
  102. plover/steno.py +16 -9
  103. plover/steno_dictionary.py +47 -21
  104. plover/suggestions.py +11 -11
  105. plover/system/__init__.py +39 -23
  106. plover/system/english_stenotype.py +231 -229
  107. plover/translation.py +67 -51
  108. {plover-5.0.0.dev2.dist-info → plover-5.0.0.dev3.dist-info}/METADATA +1 -1
  109. plover-5.0.0.dev3.dist-info/RECORD +216 -0
  110. plover_build_utils/check_requirements.py +5 -6
  111. plover_build_utils/download.py +10 -8
  112. plover_build_utils/get_pip.py +10 -5
  113. plover_build_utils/install_wheels.py +33 -31
  114. plover_build_utils/pyqt.py +24 -22
  115. plover_build_utils/setup.py +64 -54
  116. plover_build_utils/source_less.py +6 -6
  117. plover_build_utils/testing/blackbox.py +31 -31
  118. plover_build_utils/testing/dict.py +3 -3
  119. plover_build_utils/testing/output.py +5 -6
  120. plover_build_utils/testing/parametrize.py +5 -3
  121. plover_build_utils/testing/steno_dictionary.py +145 -124
  122. plover_build_utils/tree.py +21 -19
  123. plover_build_utils/trim.py +5 -5
  124. plover_build_utils/zipdir.py +3 -3
  125. plover-5.0.0.dev2.dist-info/RECORD +0 -216
  126. {plover-5.0.0.dev2.dist-info → plover-5.0.0.dev3.dist-info}/WHEEL +0 -0
  127. {plover-5.0.0.dev2.dist-info → plover-5.0.0.dev3.dist-info}/entry_points.txt +0 -0
  128. {plover-5.0.0.dev2.dist-info → plover-5.0.0.dev3.dist-info}/licenses/LICENSE.txt +0 -0
  129. {plover-5.0.0.dev2.dist-info → plover-5.0.0.dev3.dist-info}/top_level.txt +0 -0
  130. {plover-5.0.0.dev2.dist-info → plover-5.0.0.dev3.dist-info}/zip-safe +0 -0
plover/translation.py CHANGED
@@ -25,55 +25,59 @@ from plover.registry import registry
25
25
  from plover import system
26
26
 
27
27
 
28
- _ESCAPE_RX = re.compile('(\\\\[nrt]|[\n\r\t])')
28
+ _ESCAPE_RX = re.compile("(\\\\[nrt]|[\n\r\t])")
29
29
  _ESCAPE_REPLACEMENTS = {
30
- '\n': r'\n',
31
- '\r': r'\r',
32
- '\t': r'\t',
33
- r'\n': r'\\n',
34
- r'\r': r'\\r',
35
- r'\t': r'\\t',
30
+ "\n": r"\n",
31
+ "\r": r"\r",
32
+ "\t": r"\t",
33
+ r"\n": r"\\n",
34
+ r"\r": r"\\r",
35
+ r"\t": r"\\t",
36
36
  }
37
37
 
38
+
38
39
  def escape_translation(translation):
39
40
  return _ESCAPE_RX.sub(lambda m: _ESCAPE_REPLACEMENTS[m.group(0)], translation)
40
41
 
41
- _UNESCAPE_RX = re.compile(r'((?<!\\)|\\)\\([nrt])')
42
+
43
+ _UNESCAPE_RX = re.compile(r"((?<!\\)|\\)\\([nrt])")
42
44
  _UNESCAPE_REPLACEMENTS = {
43
- r'\\n': r'\n',
44
- r'\\r': r'\r',
45
- r'\\t': r'\t',
46
- r'\n' : '\n',
47
- r'\r' : '\r',
48
- r'\t' : '\t',
45
+ r"\\n": r"\n",
46
+ r"\\r": r"\r",
47
+ r"\\t": r"\t",
48
+ r"\n": "\n",
49
+ r"\r": "\r",
50
+ r"\t": "\t",
49
51
  }
50
52
 
53
+
51
54
  def unescape_translation(translation):
52
55
  return _UNESCAPE_RX.sub(lambda m: _UNESCAPE_REPLACEMENTS[m.group(0)], translation)
53
56
 
54
57
 
55
58
  _LEGACY_MACROS_ALIASES = {
56
- '{*}': 'retro_toggle_asterisk',
57
- '{*!}': 'retro_delete_space',
58
- '{*?}': 'retro_insert_space',
59
- '{*+}': 'repeat_last_stroke',
59
+ "{*}": "retro_toggle_asterisk",
60
+ "{*!}": "retro_delete_space",
61
+ "{*?}": "retro_insert_space",
62
+ "{*+}": "repeat_last_stroke",
60
63
  }
61
64
 
62
- _MACRO_RX = re.compile(r'=\w+(:|$)')
65
+ _MACRO_RX = re.compile(r"=\w+(:|$)")
66
+
67
+ Macro = namedtuple("Macro", "name stroke cmdline")
63
68
 
64
- Macro = namedtuple('Macro', 'name stroke cmdline')
65
69
 
66
70
  def _mapping_to_macro(mapping, stroke):
67
- '''Return a macro/stroke if mapping is one, or None otherwise.'''
68
- macro, cmdline = None, ''
71
+ """Return a macro/stroke if mapping is one, or None otherwise."""
72
+ macro, cmdline = None, ""
69
73
  if mapping is None:
70
74
  if stroke.is_correction:
71
- macro = 'undo'
75
+ macro = "undo"
72
76
  else:
73
77
  if mapping in _LEGACY_MACROS_ALIASES:
74
78
  macro = _LEGACY_MACROS_ALIASES[mapping]
75
79
  elif _MACRO_RX.match(mapping):
76
- args = mapping[1:].split(':', 1)
80
+ args = mapping[1:].split(":", 1)
77
81
  macro = args[0]
78
82
  if len(args) == 2:
79
83
  cmdline = args[1]
@@ -85,7 +89,7 @@ class Translation:
85
89
 
86
90
  This class represents the mapping between a sequence of Stroke objects and
87
91
  a text string, typically a word or phrase. This class is used as the output
88
- from translation and the input to formatting. The class contains the
92
+ from translation and the input to formatting. The class contains the
89
93
  following attributes:
90
94
 
91
95
  strokes -- A sequence of Stroke objects from which the translation is
@@ -130,11 +134,11 @@ class Translation:
130
134
 
131
135
  def __str__(self):
132
136
  if self.english is None:
133
- translation = 'None'
137
+ translation = "None"
134
138
  else:
135
139
  translation = escape_translation(self.english)
136
- translation = '"%s"' % translation.replace('"', r'\"')
137
- return 'Translation(%s : %s)' % (self.rtfcre, translation)
140
+ translation = '"%s"' % translation.replace('"', r"\"")
141
+ return "Translation(%s : %s)" % (self.rtfcre, translation)
138
142
 
139
143
  def __repr__(self):
140
144
  return str(self)
@@ -190,6 +194,7 @@ class Translator:
190
194
  output to every function that has registered via the add_callback method.
191
195
 
192
196
  """
197
+
193
198
  def __init__(self):
194
199
  self._undo_length = 0
195
200
  self._dictionary = None
@@ -238,17 +243,17 @@ class Translator:
238
243
  self._resize_translations()
239
244
 
240
245
  def flush(self, extra_translations=None):
241
- '''Process translations scheduled for undoing/doing.
246
+ """Process translations scheduled for undoing/doing.
242
247
 
243
248
  Arguments:
244
249
 
245
250
  extra_translations -- Extra translations to add to the list
246
251
  of translation to do. Note: those will
247
252
  not be saved to the state history.
248
- '''
253
+ """
249
254
  if self._to_do:
250
255
  prev = self._state.prev(self._to_do)
251
- do = self._state.translations[-self._to_do:]
256
+ do = self._state.translations[-self._to_do :]
252
257
  else:
253
258
  prev = self._state.prev()
254
259
  do = []
@@ -266,8 +271,7 @@ class Translator:
266
271
  callback(undo, do, prev)
267
272
 
268
273
  def _resize_translations(self):
269
- self._state.restrict_size(max(self._dictionary.longest_key,
270
- self._undo_length))
274
+ self._state.restrict_size(max(self._dictionary.longest_key, self._undo_length))
271
275
 
272
276
  def get_state(self):
273
277
  """Get the state of the translator."""
@@ -300,18 +304,21 @@ class Translator:
300
304
  return
301
305
  t = (
302
306
  # No prefix lookups (note we avoid looking up [stroke] again).
303
- self._find_longest_match(2, max_len, stroke) or
307
+ self._find_longest_match(2, max_len, stroke)
308
+ or
304
309
  # Return [stroke] result if mapped.
305
- (mapping is not None and Translation([stroke], mapping)) or
310
+ (mapping is not None and Translation([stroke], mapping))
311
+ or
306
312
  # No direct match, try with suffixes.
307
- self._find_longest_match(1, max_len, stroke, system.SUFFIX_KEYS) or
313
+ self._find_longest_match(1, max_len, stroke, system.SUFFIX_KEYS)
314
+ or
308
315
  # Fallback to untranslate.
309
316
  Translation([stroke], None)
310
317
  )
311
318
  self.translate_translation(t)
312
319
 
313
320
  def translate_macro(self, macro):
314
- macro_fn = registry.get_plugin('macro', macro.name).obj
321
+ macro_fn = registry.get_plugin("macro", macro.name).obj
315
322
  macro_fn(self, macro.stroke, macro.cmdline)
316
323
 
317
324
  def translate_translation(self, t):
@@ -335,7 +342,7 @@ class Translator:
335
342
  self._to_do += len(translations)
336
343
 
337
344
  def _find_longest_match(self, min_len, max_len, stroke, suffixes=()):
338
- '''Find mapping with the longest series of strokes.
345
+ """Find mapping with the longest series of strokes.
339
346
 
340
347
  min_len -- Minimum number of strokes involved.
341
348
  max_len -- Maximum number of strokes involved.
@@ -347,7 +354,7 @@ class Translator:
347
354
  Note: the code either look for a direct match (empty suffix
348
355
  list), or assume the last stroke contains an implicit suffix
349
356
  and look for a corresponding match, but not both.
350
- '''
357
+ """
351
358
  if suffixes:
352
359
  # Implicit suffix lookup, determine possible suffixes.
353
360
  suffixes = self._lookup_involved_suffixes(stroke, suffixes)
@@ -368,13 +375,15 @@ class Translator:
368
375
  # The new stroke can either create a new translation or replace
369
376
  # existing translations by matching a longer entry in the
370
377
  # dictionary.
371
- for i in range(len(translations)+1):
378
+ for i in range(len(translations) + 1):
372
379
  replaced = translations[i:]
373
380
  strokes = [s for t in replaced for s in t.strokes]
374
381
  strokes.append(stroke)
375
382
  if len(strokes) < min_len:
376
383
  continue
377
- mapping = self._lookup_with_prefix(max_len, translations[:i], strokes, suffixes)
384
+ mapping = self._lookup_with_prefix(
385
+ max_len, translations[:i], strokes, suffixes
386
+ )
378
387
  if mapping is not None:
379
388
  t = Translation(strokes, mapping)
380
389
  t.replaced = replaced
@@ -382,16 +391,16 @@ class Translator:
382
391
  return None
383
392
 
384
393
  def _lookup_strokes(self, strokes):
385
- '''Look for a matching translation.
394
+ """Look for a matching translation.
386
395
 
387
396
  strokes -- a list of Stroke instances.
388
397
 
389
398
  Return the resulting mapping.
390
- '''
399
+ """
391
400
  return self._dictionary.lookup(tuple(s.rtfcre for s in strokes))
392
401
 
393
402
  def _lookup_with_suffix(self, strokes, suffixes=()):
394
- '''Look for a matching translation.
403
+ """Look for a matching translation.
395
404
 
396
405
  suffixes -- A list of (suffix stroke, suffix mapping) pairs to try.
397
406
 
@@ -399,25 +408,27 @@ class Translator:
399
408
 
400
409
  Otherwise, assume the last stroke contains an implicit suffix,
401
410
  and look for a corresponding match.
402
- '''
411
+ """
403
412
  if not suffixes:
404
413
  # No suffix, do a regular lookup.
405
414
  return self._lookup_strokes(strokes)
406
415
  for suffix_stroke, suffix_mapping in suffixes:
407
416
  assert suffix_stroke in strokes[-1]
408
- main_mapping = self._lookup_strokes(strokes[:-1] + [strokes[-1] - suffix_stroke])
417
+ main_mapping = self._lookup_strokes(
418
+ strokes[:-1] + [strokes[-1] - suffix_stroke]
419
+ )
409
420
  if main_mapping is not None:
410
- return main_mapping + ' ' + suffix_mapping
421
+ return main_mapping + " " + suffix_mapping
411
422
  return None
412
423
 
413
424
  def _lookup_involved_suffixes(self, stroke, suffixes):
414
- '''Find possible implicit suffixes for a stroke.
425
+ """Find possible implicit suffixes for a stroke.
415
426
 
416
427
  stroke -- The stroke to check for implicit suffixes.
417
428
  suffixes -- List of supported suffix keys.
418
429
 
419
430
  Return a list of (suffix_stroke, suffix_mapping) pairs.
420
- '''
431
+ """
421
432
  possible_suffixes = []
422
433
  for suffix_stroke in map(Stroke, suffixes):
423
434
  if suffix_stroke not in stroke:
@@ -447,8 +458,12 @@ class Translator:
447
458
  return formatting[-1].word_is_finished
448
459
 
449
460
  def _lookup_with_prefix(self, max_len, last_translations, strokes, suffixes=()):
450
- if len(strokes) < max_len and self._previous_word_is_finished(last_translations):
451
- mapping = self._lookup_with_suffix([Stroke.PREFIX_STROKE] + strokes, suffixes)
461
+ if len(strokes) < max_len and self._previous_word_is_finished(
462
+ last_translations
463
+ ):
464
+ mapping = self._lookup_with_suffix(
465
+ [Stroke.PREFIX_STROKE] + strokes, suffixes
466
+ )
452
467
  if mapping is not None:
453
468
  return mapping
454
469
  if len(strokes) <= max_len:
@@ -466,6 +481,7 @@ class _State:
466
481
  tail -- The oldest translation still saved but is no longer undoable.
467
482
 
468
483
  """
484
+
469
485
  def __init__(self):
470
486
  self.translations = []
471
487
  self.tail = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plover
3
- Version: 5.0.0.dev2
3
+ Version: 5.0.0.dev3
4
4
  Summary: Open Source Stenography Software
5
5
  Home-page: http://www.openstenoproject.org/
6
6
  Download-URL: http://www.openstenoproject.org/plover
@@ -0,0 +1,216 @@
1
+ plover/__init__.py,sha256=fMawYVgEcbk1gkem_pU9QvZQrfB0trq7aEN8T50p56U,1191
2
+ plover/__main__.py,sha256=SLH-y7QnPrsefV7Fo2af3BX0edPBbhac5f1oiiQU-tM,77
3
+ plover/config.py,sha256=IgC4vn545-KkUpXDM-iRdFpD8rnYfyI6zHnydAv-mNA,16541
4
+ plover/engine.py,sha256=di2rfHdiSe_GRv9k691lZnZ-G4Hw3wEMu1Btc0HCGBU,20789
5
+ plover/exception.py,sha256=-bi53B1ouQZEozaSRGzU7eaJQewhNKqhHeG9YVb1XqY,700
6
+ plover/formatting.py,sha256=KTS3TowD71o_dFbcRD931YtaLfsooSRB8Il9WTWGMhs,32921
7
+ plover/i18n.py,sha256=0RAoY7k1WxRwvPSWkeD0qeuc4WU12sHbUWah03TN9h4,1549
8
+ plover/key_combo.py,sha256=Hmhs5QddJOqKxySlAvHrAz0GNtCyBs8X1x9WYf5H4iU,7368
9
+ plover/log.py,sha256=T-LBALHpWbQrtVa-R1EvgVzUHpeCTfUKRrVyOMznWz8,6539
10
+ plover/misc.py,sha256=A6opAGkJkUNdudyr5HvKJcQKsMuH1Gr0UeDrNqjOSDA,2432
11
+ plover/orthography.py,sha256=F-0r24sn_w0AEPuXVr4k3JzU8qmZ3DPo7VWD5bof_SU,1777
12
+ plover/registry.py,sha256=ip18fWm-eazp53FHme0KvvY_aq7CxLvlLHiioFtPeOw,3543
13
+ plover/resource.py,sha256=URRnshUPnuU16Csv8I9T06WlxnsC0hUF35VUKD2Phug,1909
14
+ plover/steno.py,sha256=ES5sGAJZJAEBlTW2N8-40uMDckog2IPT-xfXD8VA0Co,3540
15
+ plover/steno_dictionary.py,sha256=0EyaUJN8T6wr3AYTzI6ZUuIH4D7ZjFFXB0I43OFii2s,9448
16
+ plover/suggestions.py,sha256=TYumcY8HhQ8WmpqlWcMDVAzwud4KberaK38krQMx8dg,1675
17
+ plover/translation.py,sha256=F-IZLFc5jTTwNhVuT2XW1tztzLzPc8DExHj2Hf0VLjI,17432
18
+ plover/assets/american_english_words.txt,sha256=OPxJZABaHPNivKvP92RL2oVsZzV181-xF_8bNYcftPQ,4475702
19
+ plover/assets/commands.json,sha256=cfixqWBC9xaSczGCVvevrpe2kTE8KmVXNmvAQJnOjag,982
20
+ plover/assets/main.json,sha256=qZECBvv34d3_geZ19Pt7YdnGjhtd-UVhHdZjE9DVvXk,4215129
21
+ plover/assets/plover-icon.svg,sha256=wNW5MgMh_b8gUJGFhMfZ5Z2iUBTfRdAhRtNSRamZQbw,1474
22
+ plover/assets/plover.ico,sha256=uUaAtAaALzOMIb2AhwSyeRKgprZDk42EX2Lu_Qs_N0w,104076
23
+ plover/assets/plover.png,sha256=OMqLs8knuOdJpmVx4E-DK2ygeFH2HQrhOBBzJud8zsg,10767
24
+ plover/assets/user.json,sha256=jrlby8FUUwkx4V_EGMix_pkQlWcUCVUgmeoapZaZnt4,3
25
+ plover/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ plover/command/set_config.py,sha256=IreagHXEshgXQKxO3lFbc_z1H9RLmT1-fVH2Wmm4Ymg,1266
27
+ plover/dictionary/__init__.py,sha256=iub9rcPeW-MiGMTCt6zK_dZcDyd8Stpe3bXptuCu52I,100
28
+ plover/dictionary/base.py,sha256=TPCau8E3xmmndvxI8dnm1NekNlzCQpc2cXxMM_muYm4,1931
29
+ plover/dictionary/helpers.py,sha256=KV0vmeMleu-cq9CxvVRMnKkD5XFNDDSsjAjwEHky1ZI,810
30
+ plover/dictionary/json_dict.py,sha256=adKX6KK5HnMLplfGrqvdB_XBCTE5wdL1M8PHUY0fAHo,1362
31
+ plover/dictionary/loading_manager.py,sha256=eROsAVO_6Vm13rQy0F5VlyFw_PzcFQ6ytkgQpiKNxZQ,3140
32
+ plover/dictionary/rtfcre_dict.py,sha256=6rwQjL56q0KeBJu1zS_9J-w21iYq2RWlErL3ChKvRGs,5941
33
+ plover/dictionary/rtfcre_parse.py,sha256=_SuCk6xJCsI-B-ulAIJEBjeIFubXAmHqQB3MqWrCejA,11139
34
+ plover/gui_none/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ plover/gui_none/add_translation.py,sha256=RwHa1oDtI9u7hbTYthM3g3ZhowY_Nmw_RFg3RIYVZhw,2743
36
+ plover/gui_none/engine.py,sha256=Yt5nacqM_70ELnLltwR7wYSQOTlbBHd7RKcXdgFXTGA,708
37
+ plover/gui_none/main.py,sha256=IdyYr2CPLZQhOwVWgyETvNPz0msmlm1bb4sGZGq3TrM,547
38
+ plover/gui_qt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ plover/gui_qt/about_dialog.py,sha256=q186lyG9bsaCpT_3XEwU5WYkcAhEVCU9hYBrZRyk6xo,1550
40
+ plover/gui_qt/about_dialog_ui.py,sha256=AI4XADlcdVg3oePhgW95zPsOIy1-1JQcUk7VptiNrdE,2151
41
+ plover/gui_qt/add_translation_dialog.py,sha256=Q0fsVKDj-lOHhUnZ6MF_gJiLut1lpO-MzWWiVvkkly4,1665
42
+ plover/gui_qt/add_translation_dialog_ui.py,sha256=9llkhgPMVAbgR5yCCYurRjh3cTFIa1gqPOz5D-GW7pA,2684
43
+ plover/gui_qt/add_translation_widget.py,sha256=uD97LRD2Yq2us1pF8F_SJXGX1OJGHEgsJLK8xqcMKNY,12334
44
+ plover/gui_qt/add_translation_widget_ui.py,sha256=EUKct1yEsZ8xtdbX7n1EhIb7OHi6MRyVIkL_Eynvr4g,7450
45
+ plover/gui_qt/config_file_widget_ui.py,sha256=QMgushDMyjMdGD0FwgNJAdugKZ7QXBWeoVxheoYYCDY,3298
46
+ plover/gui_qt/config_keyboard_widget_ui.py,sha256=od5oHdow7o19DkrwqkIJUGMinfCVAxOMJsf02EEWISk,2828
47
+ plover/gui_qt/config_serial_widget_ui.py,sha256=mPPrLpqw4CGsfoYNPxm06hG2LRWf8D0rmg0oZFqXIQ8,13052
48
+ plover/gui_qt/config_window.py,sha256=bw23ACh5F5ML9glUU4_eARf2DS73tE_tERoPf3iEz2c,23902
49
+ plover/gui_qt/config_window_ui.py,sha256=PJDpJshJDqd2YmHYjPnE2TxNLzHZPnLzKSMMSUdjSvU,2482
50
+ plover/gui_qt/console_widget.py,sha256=YsQ0ruJ6JzzdZlCGXRPnjYJYy2YJArWkbt8EMb74hRw,2261
51
+ plover/gui_qt/console_widget_ui.py,sha256=CiYPCO-xxDnVFrhjdtDIPaMzdROrtLbutJZXXmmJCfQ,2054
52
+ plover/gui_qt/dictionaries_widget.py,sha256=KWWZuV2KL7n5o32ROLmU8GErnbG7A3b-akVuYa6hgQo,27033
53
+ plover/gui_qt/dictionaries_widget_ui.py,sha256=HbF_ZSP-EC1sweorHCQr5LxpKiRqEBaikhfVxN7wpDs,11474
54
+ plover/gui_qt/dictionary_editor.py,sha256=c-iQEk16frT0Ct0sEGajAbteHnHgPGyHap8GsDvTs2g,15001
55
+ plover/gui_qt/dictionary_editor_ui.py,sha256=oyMyXYDeC6Xmb7S-8iUPBfNLK-TW-Vul9CQfFm6iOy8,9365
56
+ plover/gui_qt/engine.py,sha256=Cr1I8BD_vmuNCTZMmXcOTCuLft_SrlUEwDN5HUaBqiE,1596
57
+ plover/gui_qt/info_browser.py,sha256=NVaUGRC_ltVztDvOxEBFFQglkb6ub4y5m6cfkilvoYY,4638
58
+ plover/gui_qt/log_qt.py,sha256=SsXgXuV7wAKg-oPEURtXI5mAzktUK2cws3yQ13qT8ts,517
59
+ plover/gui_qt/lookup_dialog.py,sha256=lgPnr5MJk-F6qXoR33DsEkPVBct8UQhIw-vtJL1_Qks,1585
60
+ plover/gui_qt/lookup_dialog_ui.py,sha256=cWKuuOfD_fXLV4FC9fyic8qygAwCkpI8976VTCPpfhM,3767
61
+ plover/gui_qt/machine_options.py,sha256=0Hyxqf4DGqXDKd-TQ528xZgKg6NwJkQ6OAl5zuzhUB4,8247
62
+ plover/gui_qt/main.py,sha256=Q3LfIp-19WbwBZJ2j8bJqM81ujCLj2U8pa5cVvCn8O0,4167
63
+ plover/gui_qt/main_window.py,sha256=jdNKLs_xov1SMJGqhQtUxD-jJF6ywttSBh50efIli4w,10911
64
+ plover/gui_qt/main_window_ui.py,sha256=w-MwwuSDdQz3shYcTuO8Obx_Stf2zXLQ3ygtZ6J4xyo,14215
65
+ plover/gui_qt/paper_tape.py,sha256=jX2z1EO3FyQDzzODzsYTzuJ2iNOlEhya0RZRaPdxTBE,8413
66
+ plover/gui_qt/paper_tape_ui.py,sha256=SrE3BrcWlw7Pod-2nYOVre4RZyqh06mR5zHHm910_a0,6953
67
+ plover/gui_qt/plugins_manager.py,sha256=XRNORZNcy81na0HExEB2W6zG_2tLQZHlizUwi7Kq8Gc,7949
68
+ plover/gui_qt/plugins_manager_ui.py,sha256=yS4KUGi3-ff1wzAqcl4s79E7_6gY9A36tDYZZevueho,7027
69
+ plover/gui_qt/resources.qrc,sha256=0D3li6rcGCeqEz18UJi358W_cJslPjMKk3mzMSf7Ejk,1203
70
+ plover/gui_qt/resources_rc.py,sha256=9shRf2zssegRncFppROijtaGdy1lWj7JyYLsjN1MoEo,79495
71
+ plover/gui_qt/run_dialog.py,sha256=d9JMFi2Q5yM8e9X3L_VhD8gAumJu5BUhnYpd63Z02kE,1375
72
+ plover/gui_qt/run_dialog_ui.py,sha256=d05vPVIz1UvJ_HSyomUfOSH8BILlwSccT0g3WpxQqNg,2046
73
+ plover/gui_qt/steno_validator.py,sha256=lK1DEul1JYUvk4isZ_ShoXknIXWWyWpo_cpn4mmcvWg,669
74
+ plover/gui_qt/suggestions_dialog.py,sha256=mPv2q6lu3FssCCKQoMYw4goYXo7m6PT9Z5Gu8yWOEtA,5271
75
+ plover/gui_qt/suggestions_dialog_ui.py,sha256=xqC-_6_5xdjQ8LpPi8rfWcfAaa6RbSaOwrf2PPCzttU,4448
76
+ plover/gui_qt/suggestions_widget.py,sha256=ZhtStjAaExvtEarS7G2l3I47cBLCCMLKD_0JcZh-cHw,6509
77
+ plover/gui_qt/tool.py,sha256=sAxhiSlpE3wf8HDtHPCPZXv1i67z7Cdd5DCJB93qMY0,674
78
+ plover/gui_qt/trayicon.py,sha256=3BXbpBbd8qFxxAAckLtPyDIc1y09rz6_YWYuJWdqdg8,4388
79
+ plover/gui_qt/utils.py,sha256=8NjKrU8V2xmoKgRE-tZzQRankhe8bG_GS6BfAMdTJA4,3356
80
+ plover/gui_qt/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ plover/gui_qt/resources/add.svg,sha256=0zJflroN3MxwDRk5435gOC5WHZjJ2kJ7zBwxpMg92_U,314
82
+ plover/gui_qt/resources/dictionary_error.svg,sha256=9NHevhwDR_TWQ0Ad1Wy0XMVfMay4dYiI8yaATz7w7JU,1422
83
+ plover/gui_qt/resources/dictionary_favorite.svg,sha256=Se_LdEXg6SbTzeX2Mkl2hJ7iMDfyaUfmEtbvgyFNNI8,1951
84
+ plover/gui_qt/resources/dictionary_loading.svg,sha256=nDzocA4cathvt5l4EH2-HAP-exdJbDfYh4DVs02bRgA,3383
85
+ plover/gui_qt/resources/dictionary_normal.svg,sha256=oCNrwVd4UjY4V_CSjw96oIaj57zTmw1j2bI4XtLqdLE,516
86
+ plover/gui_qt/resources/dictionary_readonly.svg,sha256=QRy4hqheWtmbtbLpjXy3kyVXOnVlPlDYm07ZseMAwH8,1752
87
+ plover/gui_qt/resources/down.svg,sha256=vgiuH5EioFb-tBhZGxYp38-93072dmbAedOtJIEFkh0,258
88
+ plover/gui_qt/resources/folder.svg,sha256=PWi4j9KTH95zQE5YACt8HAuZ2o9bLSqH6F7_q0392WY,331
89
+ plover/gui_qt/resources/font_selector.svg,sha256=bgsDnB5v3K96iInsI8o8yiJnMDNnQyA5b6Z5tZrf0Lg,4549
90
+ plover/gui_qt/resources/git.png,sha256=_etigUmKGsud-oO0iztLlxXCelX_U8uFnCNdkxZu_lg,461
91
+ plover/gui_qt/resources/lightbulb.svg,sha256=bGiSY4wsc2mjrlVvJL9QfFxmLyz109_5cbylK9JvX1w,1480
92
+ plover/gui_qt/resources/lookup.svg,sha256=CrLBjXsyNmr7c38bUFOLaXfUq9_ECg-fzbxkGHVRAbE,764
93
+ plover/gui_qt/resources/pencil.svg,sha256=kjoDAMGquF9qXWmLhtbRDPDMP_mJkrf63UC64_SfN4Y,952
94
+ plover/gui_qt/resources/pin.svg,sha256=9XW6S7xKIpJ2WbguRrVYEt4AroX23cZ-aX5DNTlloyU,725
95
+ plover/gui_qt/resources/plover.png,sha256=OMqLs8knuOdJpmVx4E-DK2ygeFH2HQrhOBBzJud8zsg,10767
96
+ plover/gui_qt/resources/plugins_manager.svg,sha256=8Lp4_ZEt9yMcNRJxik1-KG47IZ3C0bokerK0y9k4SKA,2671
97
+ plover/gui_qt/resources/reconnect.svg,sha256=Pa1jNRgLWPOOHA2-be9snJYznXFWzEj_tHDZyQC0nac,1043
98
+ plover/gui_qt/resources/remove.svg,sha256=PbQSU_-X54-eSuKaMtVvNDZx-LL8gyLBmcJDqAG3Qtk,423
99
+ plover/gui_qt/resources/save.svg,sha256=W1HZOcULKIiTMTza8w0qLO8PHKkRZ_Vhv82dtn09YB0,1465
100
+ plover/gui_qt/resources/settings.svg,sha256=p8dFonQn4qppMQZy0uqUevDCFo2IATQC0xuP0hel90s,1418
101
+ plover/gui_qt/resources/state-disabled.svg,sha256=UaTvrdHToplgpkkCzWM3LNsBQlI8BxT14KDHrPEVWRw,633
102
+ plover/gui_qt/resources/state-disconnected.svg,sha256=OrPdBHWMdOOy4QEF1wniICF6m3HMr9NZ-xoZMw5fnUo,660
103
+ plover/gui_qt/resources/state-enabled.svg,sha256=BnxmpqKngJHoueG08hyfMGq9NOt7US6o66YOuzdFshs,347
104
+ plover/gui_qt/resources/tape.svg,sha256=Ql4daSwmLCximhewe9q_hFyyqNGgTHAjYwGuINQ5ACo,1169
105
+ plover/gui_qt/resources/translation_add.svg,sha256=nfImE4yVn3EqGAf82Rqtt7sjm6YjbfHoYWUpw0YWvDM,980
106
+ plover/gui_qt/resources/trash.svg,sha256=Pm3F9UQYPE3FJpoFjS7qHPVlfltpoXt8U_w1_toARKU,1208
107
+ plover/gui_qt/resources/undo.svg,sha256=vUNKdmvlngnw5Jx6bwCqj4my-i2J5Jvr1utUbSdP61A,335
108
+ plover/gui_qt/resources/up.svg,sha256=7jcz8CvW0mXYHr5UNhT4uWHSQpzUYHmWK4w2B84fdjc,258
109
+ plover/machine/__init__.py,sha256=b2zhzj82TBkjYY1QMG5jsxH_VIvtcLeqe0v0LVu4rV4,101
110
+ plover/machine/base.py,sha256=AwYGYE1DjwBg5pQEhEJQOzOFfk00KJlBZMZZtVgvkyg,8809
111
+ plover/machine/geminipr.py,sha256=RQMrK2Hg5c6q_6ssubZA4ExrKW4B_q-JhZNhcVIyXK8,2106
112
+ plover/machine/keyboard.py,sha256=euyoNFq0ad3Ch0ow8wr2_6nheLrmuPA-tLRTILb2DjA,5813
113
+ plover/machine/keymap.py,sha256=fpFoZWxmshMS6zLltQE6egHvlBwHeXkPkTSPgCseNLg,5314
114
+ plover/machine/passport.py,sha256=FundT2hOaM9aUDgMJrDIG8yGBOkfW1Clw7oz2n5Uto8,1801
115
+ plover/machine/procat.py,sha256=O38mFgbpL2dpp0fpqAfgj617uZebiw1hEQUQn8P3AN8,1711
116
+ plover/machine/stentura.py,sha256=Vc7nkFKjCH0-N40hbqJkX9cJQOlv0qko2yts1Gnj-ng,23136
117
+ plover/machine/txbolt.py,sha256=SBKdTJNIUFth_kXrEhy_YiU5uF8kXzuKj3Rg1Dku5VM,3440
118
+ plover/machine/keyboard_capture/__init__.py,sha256=qLzT-5-llu4G0itxMhqiLjc0U8Koytejc9yhY7iHyqM,481
119
+ plover/macro/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
+ plover/macro/repeat.py,sha256=Gmy8OxqdT49y_CJnua_4eFEy84kXvNsngG2626w5zlM,324
121
+ plover/macro/retro.py,sha256=VmBzgBX_2UcU2-zKQDj0lY3mxXN6YJbnsChz2WSyu-E,1990
122
+ plover/macro/undo.py,sha256=lci41TsUg0CPYb52oXHxcoAnm5wNdPDCfHSuXNSFpD0,648
123
+ plover/messages/plover.pot,sha256=RxFKa9EWSExPqNvyAWPJSJKyPadq9Ij_kec1ZySrb9s,29813
124
+ plover/messages/es/LC_MESSAGES/plover.mo,sha256=NjqAQBN7eFrN-hke4BdpohbKyxEi7W4O_IKCMCNih7s,15414
125
+ plover/messages/es/LC_MESSAGES/plover.po,sha256=OP6USReOVfnwlzTM7q5F8F8z7D_gP4iV7Faw63se8yA,35928
126
+ plover/messages/fr/LC_MESSAGES/plover.mo,sha256=chYUQS0MBFfbZLjlG4SOgrcG7anN7eRlAtvLgEcCxzo,14227
127
+ plover/messages/fr/LC_MESSAGES/plover.po,sha256=Arh6Q7s9zToTWVpdVOQ4_HyYkn7L6WJJZ6HcV_YJ_54,36199
128
+ plover/messages/it/LC_MESSAGES/plover.mo,sha256=c3qiUP-DPxpekPZcbr5uMOujGOEFbvFJL-Gb7mzYDJE,12978
129
+ plover/messages/it/LC_MESSAGES/plover.po,sha256=yE5fVY5ReFJkVimM_1C8gPMXYv0V0CRzhkvVDzg131k,29328
130
+ plover/messages/nl/LC_MESSAGES/plover.mo,sha256=MXGkoM9YH4u5vRs-vXnjqK8vZl6iyCq6BKvvlDE2AVQ,13136
131
+ plover/messages/nl/LC_MESSAGES/plover.po,sha256=CIECv8woSC7GVRDjbt-XWySOo2AD23sSB-L419sr_WU,29182
132
+ plover/messages/zh_tw/LC_MESSAGES/plover.mo,sha256=2ipABGUrUtX55Y3w8hDucQ-Ypx_4vrUdV84OEDGkPiY,11629
133
+ plover/messages/zh_tw/LC_MESSAGES/plover.po,sha256=6mq4i72bS5nGEss8o5kS6Ty8XKa6ID2MIGTpH53ccIs,27570
134
+ plover/meta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
+ plover/meta/attach.py,sha256=iDQn8AlC2x7OuipdiduHBrG4HORx7XOpic_Cwv4VAZw,2357
136
+ plover/meta/case.py,sha256=eWHXO7DbAQ4Lc-7hy0vG99_gE-Y8yw0I1TxEpXqTkg8,528
137
+ plover/meta/command.py,sha256=pC3z_V8w1Bw8VYg8fAXT0h8S16tGVJ-ccncQqcbmVKs,115
138
+ plover/meta/conditional.py,sha256=-S1v5QsNg2Ltg4HwgGfT-6E4eVAy7MMyc7WbtQHUIIM,560
139
+ plover/meta/currency.py,sha256=uThlERY3JSMaPRevYgCglG3SFftH7bV2CARxeBd2n-k,643
140
+ plover/meta/glue.py,sha256=BMRmUmsLP6rF0QXSmySlNgOJl9DO4LU45BnptowsonQ,183
141
+ plover/meta/key_combo.py,sha256=Iik2-Q6uOz11Wc7VE03NIXnI6nk72MagDIPlfocz6hI,111
142
+ plover/meta/mode.py,sha256=fU0Rznrh4EA0VYprxdjznlo3qijeR_Er0oyOMSB-DoY,1451
143
+ plover/meta/punctuation.py,sha256=mODP-zLm-ws_q94GWt1kFyLfgdkOx2RLn4RmDz6FgEs,337
144
+ plover/meta/word_end.py,sha256=ahOaPPdokWV3--QWqHCNaQ5gDN4UbcssMo8vx63OWCI,119
145
+ plover/oslayer/__init__.py,sha256=ri3pEAcLJik_tTIb1G0Y70KbsfIeSG_iUmlBsT8ea38,613
146
+ plover/oslayer/config.py,sha256=nk3DDzvTJq3ULK64Ke3jNd7wWTzXdSXBn7jz-lQk4ds,1583
147
+ plover/oslayer/controller.py,sha256=d7SpSNNBmngmL49xuJfjiytAR2OShr6s7vUILY23CqE,2726
148
+ plover/oslayer/linux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
+ plover/oslayer/linux/display_server.py,sha256=rRUwFEVKLj6qvpu2g21cqAtn9Q2dEy2zfkimDJp3Sp8,140
150
+ plover/oslayer/linux/i18n.py,sha256=_hCc5UUAThJDHmYhzNUwMNjcCfVlvTDXNUdGMmd95rc,286
151
+ plover/oslayer/linux/keyboardcontrol.py,sha256=hVj-ldB249MyJda2WODvdo8zvlNc9U7WaBKv9mOSKec,291
152
+ plover/oslayer/linux/keyboardcontrol_uinput.py,sha256=GySva_EBwvnFqM6DwAtR7OSO1ricameaepfUWqB79gQ,16350
153
+ plover/oslayer/linux/keyboardcontrol_x11.py,sha256=DhL5btflL4eYe9gaOp-KbpL6X0UFUk-DfCV2OaIfshw,80456
154
+ plover/oslayer/linux/log.py,sha256=dJel6sNg5ywTSL6Mq5HjCCGXzyQ0feZCdmFBCtrUkwQ,102
155
+ plover/oslayer/linux/log_dbus.py,sha256=ieZn8KdVe6OKlfoR59r8hCIHGfTkzDssX1BaoBZxARg,8071
156
+ plover/oslayer/linux/serial.py,sha256=zoiKVNJFPemvI30EyT_kcnh8zl_ls-qVztl0aaZR1uA,463
157
+ plover/oslayer/linux/wmctrl.py,sha256=MSuNQ5sSf64UsKwOcncJr18eQCquEB2yePLNjPNbjVw,157
158
+ plover/oslayer/linux/wmctrl_x11.py,sha256=HOhTN_Qv1KCcAERj6kQ0tfUzWDw8IqGj-JHK7IYejBM,1813
159
+ plover/oslayer/osx/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
+ plover/oslayer/osx/i18n.py,sha256=btIasPN3fN-n_bbQKa3nR7zlI11tlL0ozn_iSgTzRKs,150
161
+ plover/oslayer/osx/keyboardcontrol.py,sha256=SIXfHfQg2vi7pTv_g-gTWu_c-c0x9NAwixaSEXbx0Nw,17156
162
+ plover/oslayer/osx/keyboardlayout.py,sha256=FBT_EXF4luZT_7gigk1IXoQB-iRIZo6oy04_xQd6BZ4,21021
163
+ plover/oslayer/osx/log.py,sha256=F0cFPNIrcgPL9itcKxPNVZ1rPJU9O3xIkAsxeTTjxUI,1872
164
+ plover/oslayer/osx/serial.py,sha256=bpI90KGHjlNviUnYdzwyrIVBnF8kwfR3M-TwXjJhdDY,71
165
+ plover/oslayer/osx/wmctrl.py,sha256=HxSMigEicPhS2CWNpoyM1yagPOIDrkpqYHoFU--KZFw,420
166
+ plover/oslayer/windows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
+ plover/oslayer/windows/i18n.py,sha256=G0xGVKxREEODAr4u3Ke0tapma9t4CDMpkcL3HHt-LSM,147
168
+ plover/oslayer/windows/keyboardcontrol.py,sha256=Kan53ANTRI-ubwS4XDfkmq8CiIYCyMsmtI7bL5Wos08,18143
169
+ plover/oslayer/windows/keyboardlayout.py,sha256=dlU5g2qDmV93H3Fl8IlrXlJAL2w1P7ImO3mYFX5MU3U,16673
170
+ plover/oslayer/windows/log.py,sha256=pqJGtgYZVh0HsfqLCz8kNYW_6mB3exjPYFkELlQm1mk,1011
171
+ plover/oslayer/windows/serial.py,sha256=wuyMkVwdVZ7O-IsAzGbiP93tTEa2O4P1fD62BFzaS2c,532
172
+ plover/oslayer/windows/wmctrl.py,sha256=54PFlJNQA1i75BE7p57FKaA110Ov6XWLSf9qmypeBeM,335
173
+ plover/output/__init__.py,sha256=JomRffOenGFxKVUV4dpRZCIpg3p-niXTCR_qswq3YKY,641
174
+ plover/output/keyboard.py,sha256=89PKXrCvb9kwwCSbSshrw3RLjuNEcrkCMI8rlxrI3nA,625
175
+ plover/plugins_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
+ plover/plugins_manager/__main__.py,sha256=216zqlZBCxhnAQLqOvidaux8-mBkh8keMdv9qir39yM,2883
177
+ plover/plugins_manager/global_registry.py,sha256=HdaoE0q-SkRbU1PWQwsqVoRJWUehcFjqCnI-EiFK2pQ,620
178
+ plover/plugins_manager/local_registry.py,sha256=NXKlFdoU7AdSvCSIJNELXEtYM5Uirx6eTVkhmmdTWoE,1449
179
+ plover/plugins_manager/package_index.py,sha256=dPLGWq7ix8fSF-5jMl5RrGWcYb_YTsJC2JckJkQqYgI,2042
180
+ plover/plugins_manager/pip_wrapper.py,sha256=3E2Dhx9oIL1K9BkX7va2hJgYoKhcZKb176mM5xeEyw4,556
181
+ plover/plugins_manager/plugin_metadata.py,sha256=ySRCsHTkXvJqIaZh4REt_PV5xh7qM380qRmkmRvudVQ,1442
182
+ plover/plugins_manager/registry.py,sha256=w5jRqDDtvtJgJRVTlm0oPyipbFemUVW7Sn9cBiSIot0,5099
183
+ plover/plugins_manager/requests.py,sha256=AH-O_Vt0outFJOvP8YvdrbkpTJ7lSmIesdbVMEJF-eQ,454
184
+ plover/plugins_manager/utils.py,sha256=bZj08u2aVKqeKHLmqr7CatwLK1MHm3nSUd0CUpXleRw,1009
185
+ plover/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
+ plover/scripts/dist_main.py,sha256=-Qj-DhbjXSx2WdcaRPPYoI8B7awv86-fMMtdgs6AVjw,644
187
+ plover/scripts/main.py,sha256=DG9E_qDlKnhcjpuoHHY52-6d7egldLx6rwhM-izu95M,6474
188
+ plover/scripts/send_command.py,sha256=PAwxBHDms1ULSs5eSXKdUKanU0B553O1gYY0kfSebRs,945
189
+ plover/system/__init__.py,sha256=huGEpfO_S6ca9Q2J-ejQWP8H_pQM7rTTWW5oqUfC98M,2720
190
+ plover/system/english_stenotype.py,sha256=X4ft40mFIKxKd-c6YkF7otLlVqDlRagLYAWIHKKShgA,9126
191
+ plover-5.0.0.dev3.dist-info/licenses/LICENSE.txt,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
192
+ plover_build_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
+ plover_build_utils/check_requirements.py,sha256=sl5dhjGiHVOGZ24dsr1IIL-1Fmm3KBU7SRqehBqqjck,1047
194
+ plover_build_utils/download.py,sha256=IWRsTnoJi_jTQIsxWojpCQqQX2l_l1b_j3MTnhwlDro,1633
195
+ plover_build_utils/functions.sh,sha256=myWzOgGEOQQD9ZFHKV2EE-MiVcDHsM5vplrtpxJPE_Y,5598
196
+ plover_build_utils/get_pip.py,sha256=6T8BWhyf_6Wir7S5NwruqGEUCZo9nWBsullbtgLkxww,768
197
+ plover_build_utils/install_wheels.py,sha256=O4mVeQ_2BB0mpnKTDARrUdy3_iZFP-U6velxwfezkGM,3637
198
+ plover_build_utils/pyqt.py,sha256=IispLgYxOOnZ8vJALGM_bvces8fZcH_4C7IPOzujdDg,1303
199
+ plover_build_utils/setup.py,sha256=UP9hFJ_v7x7Z-B3zytM4FrEnLMx9QvtRhvDwaBIfVYs,4951
200
+ plover_build_utils/source_less.py,sha256=xziBBOPIrznyMclu2R_QXwdn6IsYOuZCKiw8CAztils,871
201
+ plover_build_utils/tree.py,sha256=mGsscP3dwwSSXyp455rtwQjQEEIvSUohHvsG65wJoJE,1724
202
+ plover_build_utils/trim.py,sha256=CAAOf6iHkCJIh5GFUOWi5wyB-Rdx7HnrwJaUQeneB80,1644
203
+ plover_build_utils/zipdir.py,sha256=0IQgBXsNBtU0_HOcOU-LFYEAMDfZNjvyGA6nlxY4x4A,567
204
+ plover_build_utils/testing/__init__.py,sha256=8Elh71mymSBegX8v2UV80aTOfJbliyWdu-fNq6LVJKU,216
205
+ plover_build_utils/testing/blackbox.py,sha256=EiKTj6gTLe_KEhaRnkwlQ_cAqFe-uLCPfvb7HbBsXYo,5429
206
+ plover_build_utils/testing/dict.py,sha256=7D6EGm2pShlh56qWDG1dzu1Aky-eMrFBowrCY6-xBcg,506
207
+ plover_build_utils/testing/output.py,sha256=fE9bH6-hSg5JJZ3AM8yAUOFVRykRUdkFFuZOekp3M2A,509
208
+ plover_build_utils/testing/parametrize.py,sha256=z8dozkFCHCd9SLZ7wCldX4EiATfxGexBnZ7S2QMEsEA,1193
209
+ plover_build_utils/testing/steno.py,sha256=kLKKegTb6guIg9KKJhOoh2Y9LN8VmbIVOK8Su0J10Ew,98
210
+ plover_build_utils/testing/steno_dictionary.py,sha256=FBxtGpIM842ahAaS2w_s-Y_NxVgMs5sbuNjgzWXwPPQ,17667
211
+ plover-5.0.0.dev3.dist-info/METADATA,sha256=hRNKiYTpkGrL9AadeU2XZOapjzNhugjIQ301PIa3rm4,8781
212
+ plover-5.0.0.dev3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
213
+ plover-5.0.0.dev3.dist-info/entry_points.txt,sha256=3dRZcIel01EDaveqDTpqust882mt5CixebsU1u2BYNk,2337
214
+ plover-5.0.0.dev3.dist-info/top_level.txt,sha256=KVrS7DEe-ugIDrbZbjrHrb4ObXXtI2xblUFR_CTEIMI,26
215
+ plover-5.0.0.dev3.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
216
+ plover-5.0.0.dev3.dist-info/RECORD,,
@@ -13,14 +13,13 @@ def sorted_requirements(requirements):
13
13
 
14
14
  # Find all available distributions.
15
15
  all_requirements = [
16
- Requirement(f"{dist.metadata['Name']}=={dist.version}")
17
- for dist in distributions()
16
+ Requirement(f"{dist.metadata['Name']}=={dist.version}") for dist in distributions()
18
17
  ]
19
18
 
20
19
  # Find Plover requirements.
21
20
  plover_deps = set()
22
21
  try:
23
- plover_requires = requires('plover') or []
22
+ plover_requires = requires("plover") or []
24
23
  for req in plover_requires:
25
24
  plover_deps.add(Requirement(req))
26
25
  except PackageNotFoundError:
@@ -28,11 +27,11 @@ except PackageNotFoundError:
28
27
  plover_requires = []
29
28
 
30
29
  # List requirements.
31
- print('# plover')
30
+ print("# plover")
32
31
  for requirement in sorted_requirements(plover_deps):
33
32
  print(requirement)
34
- print('# other')
33
+ print("# other")
35
34
  for requirement in sorted_requirements(all_requirements):
36
35
  if requirement not in plover_deps:
37
36
  print(requirement)
38
- print('# ''vim: ft=cfg commentstring=#\\ %s list')
37
+ print("# vim: ft=cfg commentstring=#\\ %s list")
@@ -7,7 +7,7 @@ import os
7
7
  import sys
8
8
 
9
9
 
10
- DOWNLOADS_DIR = os.path.join('.cache', 'downloads')
10
+ DOWNLOADS_DIR = os.path.join(".cache", "downloads")
11
11
 
12
12
 
13
13
  def download(url, sha1=None, filename=None, downloads_dir=DOWNLOADS_DIR):
@@ -22,15 +22,15 @@ def download(url, sha1=None, filename=None, downloads_dir=DOWNLOADS_DIR):
22
22
  if sha1 is None or not os.path.exists(dst):
23
23
  retries += 1
24
24
  try:
25
- with urlopen(url) as req, open(dst, 'wb') as fp:
25
+ with urlopen(url) as req, open(dst, "wb") as fp:
26
26
  fp.write(req.read())
27
27
  except Exception as e:
28
- print('error', e, file=sys.stderr)
28
+ print("error", e, file=sys.stderr)
29
29
  continue
30
30
  if sha1 is None:
31
31
  break
32
32
  h = hashlib.sha1()
33
- with open(dst, 'rb') as fp:
33
+ with open(dst, "rb") as fp:
34
34
  while True:
35
35
  d = fp.read(4 * 1024 * 1024)
36
36
  if not d:
@@ -38,14 +38,16 @@ def download(url, sha1=None, filename=None, downloads_dir=DOWNLOADS_DIR):
38
38
  h.update(d)
39
39
  if h.hexdigest() == sha1:
40
40
  break
41
- print('sha1 does not match: %s instead of %s'
42
- % (h.hexdigest(), sha1), file=sys.stderr)
41
+ print(
42
+ "sha1 does not match: %s instead of %s" % (h.hexdigest(), sha1),
43
+ file=sys.stderr,
44
+ )
43
45
  os.unlink(dst)
44
- assert os.path.exists(dst), 'could not successfully retrieve %s' % url
46
+ assert os.path.exists(dst), "could not successfully retrieve %s" % url
45
47
  return dst
46
48
 
47
49
 
48
- if __name__ == '__main__':
50
+ if __name__ == "__main__":
49
51
  args = sys.argv[1:]
50
52
  url = args.pop(0)
51
53
  sha1 = None
@@ -4,20 +4,25 @@ import os
4
4
  import sys
5
5
  import subprocess
6
6
 
7
+
7
8
  def get_pip(args=None):
8
9
  os.makedirs("build", exist_ok=True)
9
10
 
10
11
  # can be downloaded from https://github.com/pypa/get-pip/tags by following the commit ID and opening the raw file
11
- cmd = ["curl", "https://raw.githubusercontent.com/pypa/get-pip/c8048075753de535e6279e501940f41bc040c081/public/get-pip.py", "-o", "build/get-pip.py"]
12
+ cmd = [
13
+ "curl",
14
+ "https://raw.githubusercontent.com/pypa/get-pip/c8048075753de535e6279e501940f41bc040c081/public/get-pip.py",
15
+ "-o",
16
+ "build/get-pip.py",
17
+ ]
12
18
  subprocess.call(cmd)
13
- cmd = [sys.executable,"build/get-pip.py","pip==25.1"]
19
+ cmd = [sys.executable, "build/get-pip.py", "pip==25.1"]
14
20
  subprocess.call(cmd)
15
21
  if args:
16
22
  cmd = [sys.executable, "-m", "pip", "install"] + args
17
- print('running', ' '.join(cmd), flush=True)
23
+ print("running", " ".join(cmd), flush=True)
18
24
  subprocess.check_call(cmd)
19
25
 
20
26
 
21
-
22
- if __name__ == '__main__':
27
+ if __name__ == "__main__":
23
28
  get_pip(sys.argv[1:])