chgksuite 0.26.0b9__tar.gz → 0.26.0b11__tar.gz

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 (67) hide show
  1. {chgksuite-0.26.0b9/chgksuite.egg-info → chgksuite-0.26.0b11}/PKG-INFO +1 -1
  2. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/cli.py +72 -31
  3. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/pptx.py +2 -4
  4. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/parser.py +52 -13
  5. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/regexes_by.json +1 -1
  6. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/regexes_en.json +1 -1
  7. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/regexes_kz_cyr.json +1 -1
  8. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/regexes_ru.json +2 -2
  9. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/regexes_sr.json +1 -1
  10. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/regexes_ua.json +1 -1
  11. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/regexes_uz_cyr.json +1 -1
  12. chgksuite-0.26.0b11/chgksuite/version.py +1 -0
  13. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11/chgksuite.egg-info}/PKG-INFO +1 -1
  14. chgksuite-0.26.0b9/chgksuite/version.py +0 -1
  15. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/LICENSE +0 -0
  16. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/MANIFEST.in +0 -0
  17. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/README.md +0 -0
  18. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/__init__.py +0 -0
  19. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/__main__.py +0 -0
  20. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/common.py +0 -0
  21. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/__init__.py +0 -0
  22. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/chgksuite_parser.py +0 -0
  23. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/composer_common.py +0 -0
  24. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/db.py +0 -0
  25. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/docx.py +0 -0
  26. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/latex.py +0 -0
  27. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/lj.py +0 -0
  28. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/openquiz.py +0 -0
  29. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/reddit.py +0 -0
  30. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/stats.py +0 -0
  31. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/telegram.py +0 -0
  32. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/telegram_bot.py +0 -0
  33. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/composer/telegram_parser.py +0 -0
  34. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/handouter/__init__.py +0 -0
  35. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/handouter/gen.py +0 -0
  36. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/handouter/installer.py +0 -0
  37. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/handouter/pack.py +0 -0
  38. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/handouter/runner.py +0 -0
  39. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/handouter/tex_internals.py +0 -0
  40. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/handouter/utils.py +0 -0
  41. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/parser_db.py +0 -0
  42. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/cheader.tex +0 -0
  43. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/fix-unnumbered-sections.sty +0 -0
  44. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/labels_by.toml +0 -0
  45. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/labels_by_tar.toml +0 -0
  46. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/labels_en.toml +0 -0
  47. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/labels_kz_cyr.toml +0 -0
  48. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/labels_ru.toml +0 -0
  49. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/labels_sr.toml +0 -0
  50. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/labels_ua.toml +0 -0
  51. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/labels_uz.toml +0 -0
  52. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/labels_uz_cyr.toml +0 -0
  53. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/pptx_config.toml +0 -0
  54. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/template.docx +0 -0
  55. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/template.pptx +0 -0
  56. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/resources/trello.json +0 -0
  57. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/trello.py +0 -0
  58. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/typotools.py +0 -0
  59. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite/vulture_whitelist.py +0 -0
  60. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite.egg-info/SOURCES.txt +0 -0
  61. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite.egg-info/dependency_links.txt +0 -0
  62. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite.egg-info/entry_points.txt +0 -0
  63. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite.egg-info/requires.txt +0 -0
  64. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/chgksuite.egg-info/top_level.txt +0 -0
  65. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/history.md +0 -0
  66. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/setup.cfg +0 -0
  67. {chgksuite-0.26.0b9 → chgksuite-0.26.0b11}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chgksuite
3
- Version: 0.26.0b9
3
+ Version: 0.26.0b11
4
4
  Summary: A package for chgk automation
5
5
  Home-page: https://gitlab.com/peczony/chgksuite
6
6
  Author: Alexander Pecheny
@@ -72,37 +72,6 @@ class ArgparseBuilder:
72
72
  advanced=True,
73
73
  argtype="filename",
74
74
  )
75
- self.add_argument(
76
- parser,
77
- "--add_ts",
78
- "-ts",
79
- choices=["on", "off"],
80
- default=default_overrides.get("add_ts") or "off",
81
- help="append timestamp to filenames",
82
- caption="Добавить временную отметку в имя файла",
83
- advanced=True,
84
- argtype="radiobutton",
85
- )
86
- self.add_argument(
87
- parser,
88
- "--replace_no_break_spaces",
89
- choices=["on", "off"],
90
- default=default_overrides.get("replace_no_break_spaces") or "on",
91
- help="add non-breaking spaces where applicable",
92
- caption="Добавить неразрывные пробелы",
93
- advanced=True,
94
- argtype="radiobutton",
95
- )
96
- self.add_argument(
97
- parser,
98
- "--replace_no_break_hyphens",
99
- choices=["on", "off"],
100
- default=default_overrides.get("replace_no_break_hyphens") or "on",
101
- help="add non-breaking hyphens where applicable",
102
- caption="Добавить неразрывные дефисы",
103
- advanced=True,
104
- argtype="radiobutton",
105
- )
106
75
  self.add_argument(
107
76
  parser,
108
77
  "-v",
@@ -298,6 +267,47 @@ class ArgparseBuilder:
298
267
  caption="Обработка строчек, состоящих из одного числа",
299
268
  argtype="radiobutton",
300
269
  )
270
+ self.add_argument(
271
+ cmdparse,
272
+ "--tour_numbers_as_words",
273
+ choices=["on", "off"],
274
+ default=default_overrides.get("tour_numbers_as_words") or "off",
275
+ help="force tour numbers as words",
276
+ caption="Номера туров словами",
277
+ advanced=True,
278
+ argtype="radiobutton",
279
+ )
280
+ self.add_argument(
281
+ cmdparse,
282
+ "--add_ts",
283
+ "-ts",
284
+ choices=["on", "off"],
285
+ default=default_overrides.get("add_ts") or "off",
286
+ help="append timestamp to filenames",
287
+ caption="Добавить временную отметку в имя файла",
288
+ advanced=True,
289
+ argtype="radiobutton",
290
+ )
291
+ self.add_argument(
292
+ cmdparse,
293
+ "--replace_no_break_spaces",
294
+ choices=["on", "off"],
295
+ default=default_overrides.get("replace_no_break_spaces") or "on",
296
+ help="add non-breaking spaces where applicable",
297
+ caption="Добавить неразрывные пробелы",
298
+ advanced=True,
299
+ argtype="radiobutton",
300
+ )
301
+ self.add_argument(
302
+ cmdparse,
303
+ "--replace_no_break_hyphens",
304
+ choices=["on", "off"],
305
+ default=default_overrides.get("replace_no_break_hyphens") or "on",
306
+ help="add non-breaking hyphens where applicable",
307
+ caption="Добавить неразрывные дефисы",
308
+ advanced=True,
309
+ argtype="radiobutton",
310
+ )
301
311
 
302
312
  cmdcompose = subparsers.add_parser("compose")
303
313
  self.add_argument(
@@ -334,6 +344,37 @@ class ArgparseBuilder:
334
344
  caption="Client ID для API Imgur",
335
345
  advanced=True,
336
346
  )
347
+ self.add_argument(
348
+ cmdcompose,
349
+ "--add_ts",
350
+ "-ts",
351
+ choices=["on", "off"],
352
+ default=default_overrides.get("add_ts") or "off",
353
+ help="append timestamp to filenames",
354
+ caption="Добавить временную отметку в имя файла",
355
+ advanced=True,
356
+ argtype="radiobutton",
357
+ )
358
+ self.add_argument(
359
+ cmdcompose,
360
+ "--replace_no_break_spaces",
361
+ choices=["on", "off"],
362
+ default=default_overrides.get("replace_no_break_spaces") or "on",
363
+ help="add non-breaking spaces where applicable",
364
+ caption="Добавить неразрывные пробелы",
365
+ advanced=True,
366
+ argtype="radiobutton",
367
+ )
368
+ self.add_argument(
369
+ cmdcompose,
370
+ "--replace_no_break_hyphens",
371
+ choices=["on", "off"],
372
+ default=default_overrides.get("replace_no_break_hyphens") or "on",
373
+ help="add non-breaking hyphens where applicable",
374
+ caption="Добавить неразрывные дефисы",
375
+ advanced=True,
376
+ argtype="radiobutton",
377
+ )
337
378
  cmdcompose_filetype = cmdcompose.add_subparsers(dest="filetype")
338
379
  cmdcompose_docx = cmdcompose_filetype.add_parser("docx")
339
380
  self.add_argument(
@@ -182,9 +182,8 @@ class PptxExporter(BaseExporter):
182
182
  r = self.add_run(
183
183
  p,
184
184
  self._replace_no_break(
185
- ("\n" if add_line_break else "")
185
+ ("\n\n" if add_line_break else "")
186
186
  + self.pptx_process_text(editor[0][1])
187
- + "\n"
188
187
  ),
189
188
  )
190
189
  add_line_break = True
@@ -193,9 +192,8 @@ class PptxExporter(BaseExporter):
193
192
  r = self.add_run(
194
193
  p,
195
194
  self._replace_no_break(
196
- ("\n" if add_line_break else "")
195
+ ("\n\n" if add_line_break else "")
197
196
  + self.pptx_process_text(element[1])
198
- + "\n"
199
197
  ),
200
198
  )
201
199
  add_line_break = True
@@ -91,6 +91,19 @@ class ChgkParser:
91
91
  BADNEXTFIELDS = set(["question", "answer"])
92
92
  RE_NUM = re.compile("^([0-9]+)\\.?$")
93
93
  RE_NUM_START = re.compile("^([0-9]+)\\.")
94
+ ZERO_PREFIXES = ("Нулевой вопрос", "Разминочный вопрос")
95
+ TOUR_NUMBERS_AS_WORDS = (
96
+ "Первый",
97
+ "Второй",
98
+ "Третий",
99
+ "Четвертый",
100
+ "Пятый",
101
+ "Шестой",
102
+ "Седьмой",
103
+ "Восьмой",
104
+ "Девятый",
105
+ "Десятый",
106
+ )
94
107
 
95
108
  def __init__(self, defaultauthor=None, args=None, logger=None):
96
109
  self.defaultauthor = defaultauthor
@@ -200,7 +213,7 @@ class ChgkParser:
200
213
  @classmethod
201
214
  def _replace(cls, obj, val, new_val):
202
215
  if isinstance(obj, str):
203
- return obj.replace(val, new_val)
216
+ return obj.replace(val, new_val).strip()
204
217
  elif isinstance(obj, list):
205
218
  for i, el in enumerate(obj):
206
219
  obj[i] = cls._replace(el, val, new_val)
@@ -214,6 +227,11 @@ class ChgkParser:
214
227
  for el in val:
215
228
  self._get_strings(el, list_)
216
229
 
230
+ def _get_strings_joined(self, val):
231
+ strings = []
232
+ self._get_strings(val, strings)
233
+ return "\n".join(strings)
234
+
217
235
  def _try_extract_field(self, question, k):
218
236
  regex = self.regexes[k]
219
237
  keys = sorted(question.keys())
@@ -255,14 +273,18 @@ class ChgkParser:
255
273
  and not question["number"].strip()
256
274
  ):
257
275
  question.pop("number")
276
+ question_str = self._get_strings_joined(question["question"])
277
+ for prefix in self.ZERO_PREFIXES:
278
+ if question_str.startswith(prefix):
279
+ question["question"] = self._replace(question["question"], prefix, "")
280
+ question["number"] = 0
281
+ question_str = self._get_strings_joined(question["question"])
258
282
  for k in ("zachet", "nezachet", "source", "comment", "author"):
259
283
  if k not in question:
260
284
  self._try_extract_field(question, k)
261
- strings = []
262
- self._get_strings(question["question"], strings)
263
- strings = "\n".join(strings)
285
+ question_str = self._get_strings_joined(question["question"])
264
286
  handout = self.labels["question_labels"]["handout"]
265
- srch = re.search(f"{handout}:([ \n]+)\\[", strings, flags=re.DOTALL)
287
+ srch = re.search(f"{handout}:([ \n]+)\\[", question_str, flags=re.DOTALL)
266
288
  if srch:
267
289
  question["question"] = self._replace(
268
290
  question["question"],
@@ -502,17 +524,30 @@ class ChgkParser:
502
524
  if element[0] == "question":
503
525
  try:
504
526
  num = regexes["question"].search(element[1])
505
- if num:
506
- self.structure.insert(_id, ["number", num.group(1)])
527
+ if num and num.group("number"):
528
+ self.structure.insert(_id, ["number", num.group("number")])
507
529
  except Exception as e:
508
530
  sys.stderr.write(
509
531
  f"exception at line 445 of parser: {type(e)} {e}\n"
510
532
  )
511
- # TODO: переделать корявую обработку авторки на нормальную
512
- before_replacement = element[1]
513
- element[1] = regexes[element[0]].sub("", element[1], 1)
533
+ if (
534
+ not num
535
+ and ("нулевой вопрос" in element[1].lower())
536
+ or ("разминочный вопрос" in element[1].lower())
537
+ ):
538
+ self.structure.insert(_id, ["number", "0"])
539
+ if element[0] == "question":
540
+ lines = element[1].split(SEP)
541
+ for i, line in enumerate(lines):
542
+ if regexes["question"].search(line):
543
+ lines[i] = regexes["question"].sub("", line, 1)
544
+ element[1] = SEP.join([x.strip() for x in lines if x.strip()])
545
+ else:
546
+ before_replacement = element[1]
547
+ element[1] = regexes[element[0]].sub("", element[1], 1)
514
548
  if element[1].startswith(SEP):
515
549
  element[1] = element[1][len(SEP) :]
550
+ # TODO: переделать корявую обработку авторки на нормальную
516
551
  if element[0] == "author" and "авторка:" in before_replacement.lower():
517
552
  element[1] = "!!Авторка" + element[1]
518
553
 
@@ -529,7 +564,7 @@ class ChgkParser:
529
564
  try:
530
565
  num = regexes["question"].search(element[1])
531
566
  if num:
532
- self.structure.insert(_id, ["number", num.group(1)])
567
+ self.structure.insert(_id, ["number", num.group("number")])
533
568
  except Exception as e:
534
569
  sys.stderr.write(
535
570
  f"exception at line 470 of parser: {type(e)} {e}\n"
@@ -537,7 +572,6 @@ class ChgkParser:
537
572
  element[1] = regexes["question"].sub("", element[1])
538
573
 
539
574
  # detect inner lists
540
-
541
575
  mo = {
542
576
  m for m in re.finditer(r"(\s+|^)(\d+)[\.\)]\s*(?!\d)", element[1], re.U)
543
577
  }
@@ -608,7 +642,8 @@ class ChgkParser:
608
642
 
609
643
  for element in self.structure:
610
644
  if (
611
- element[0] in set(["number", "tour", "tourrev", "question", "meta", "editor"])
645
+ element[0]
646
+ in set(["number", "tour", "tourrev", "question", "meta", "editor"])
612
647
  and "question" in current_question
613
648
  ):
614
649
  if self.defaultauthor and "author" not in current_question:
@@ -682,9 +717,13 @@ class ChgkParser:
682
717
  except ValueError:
683
718
  pass
684
719
 
720
+ tour_cnt = 0
685
721
  for i, element in enumerate(final_structure):
686
722
  if element[0] == "Question":
687
723
  self.postprocess_question(element[1])
724
+ elif element[0] == "tour" and self.args.tour_numbers_as_words == "on":
725
+ element[1] = f"{self.TOUR_NUMBERS_AS_WORDS[tour_cnt]} тур"
726
+ tour_cnt += 1
688
727
 
689
728
  if debug:
690
729
  with codecs.open("debug_final.json", "w", "utf8") as f:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tour": "^(#\\s+)?Т[Уу][Рр]\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
3
  "tourrev": "^([0-9IVXLCDM]+)\\s[Тт][Уу][Рр]([\\.:])?$",
4
- "question": "П[Ыы][Тт][Аа][Нн][Ьь]?[Нн][Ее]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
4
+ "question": "П[Ыы][Тт][Аа][Нн][Ьь]?[Нн][Ее]\\s?[№N]?(?P<number>[0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
5
  "handout": "Р[Аа][Зз][Дд][Аа][Тт]([Аа][Чч][Нн]|[Кк][Аа][Вв])[Ыы][\\s\\s][Мм][Аа][Тт][Ээ][Рр][Ыы][Яя][Лл][\\.:]",
6
6
  "answer": "А[Дд][Кк][Аа][Зз][Ыы]?\\s?[№N]?([0-9]+)?\\s?[\\.:]",
7
7
  "zachet": "З[Аа][Лл][Іі][Кк]\\s?[\\.:]",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tour": "^(#\\s+)?(B[Ll][Oo][Cc][Kk]|R[Oo][Uu][Nn][Dd])\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
3
  "tourrev": "^([0-9IVXLCDM]+)\\s(B[Ll][Oo][Cc][Kk]|R[Oo][Uu][Nn][Dd])([\\.:])?$",
4
- "question": "Q[Uu][Ee][Ss][Tt][Ii][Oo][Nn]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
4
+ "question": "Q[Uu][Ee][Ss][Tt][Ii][Oo][Nn]\\s?[№N]?(?P<number>[0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
5
  "answer": "A[Nn][Ss][Ww][Ee][Rr]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
6
6
  "handout": "^H[Aa][Nn][Dd][Oo][Uu][Tt][\\.:]",
7
7
  "zachet": "A[Cc][Ee][Pp][Tt]\\s?[\\.:]",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "tour": "^(#\\s+)?([0-9]+)\\s?[-–—]\\s?[Тт][Уу][Рр]\\s*$",
3
- "question": "([0-9]+)\\s?[-–—]\\s?\\sС[Ұұ][Рр][Аа][Ққ]([\\.:]|\n|\r\n|$)",
3
+ "question": "(?P<number>[0-9]+)\\s?[-–—]\\s?\\sС[Ұұ][Рр][Аа][Ққ]([\\.:]|\n|\r\n|$)",
4
4
  "handout": "^Ү[Лл][Ее][Сс][Тт][Іі][Рр][Уу][\\s\\s][Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][Ыы][\\.:]",
5
5
  "answer": "Ж[Аа][Уу][Аа][Пп]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
6
6
  "zachet": "Қ[Аа][Бб][Ыы][Лл][Дд][Аа][Нн][Аа][Тт][Ыы][Нн]\\s[Жж][Аа][Уу][Аа][Пп](\\([Тт][Аа][Рр]\\))?\\s?[\\.:]",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tour": "^(#\\s+)?Т[Уу][Рр]\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
- "tourrev": "^([0-9IVXLCDM]+)\\s[Тт][Уу][Рр]([\\.:])?$",
4
- "question": "В[Оо][Пп][Рр][Оо][Сс]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
3
+ "tourrev": "^([0-9IVXLCDM]+|[Пп][Ее][Рр][Вв][Ыы][Йй]|[Вв][Тт][Оо][Рр][Оо][Йй]|[Тт][Рр][Ее][Тт][Ии][Йй]|[Чч][Ее][Тт][Вв][Ее][Рр][Тт][Ыы][Йй]|[Пп][Яя][Тт][Ыы][Йй]|[Шш][Ее][Сс][Тт][Оо][Йй]|[Сс][Ее][Дд][Ьь][Мм][Оо][Йй]|[Вв][Оо][Сс][Ьь][Мм][Оо][Йй]|[Дд][Ее][Вв][Яя][Тт][Ыы][Йй]|[Дд][Ее][Сс][Яя][Тт][Ыы][Йй])\\s[Тт][Уу][Рр]([\\.:])?$",
4
+ "question": "^([Нн][Уу][Лл][Ее][Вв][Оо][Йй]|[Рр][Аа][Зз][Мм][Ии][Нн][Оо][Чч][Нн][Ыы][Йй])? ?[Вв][Оо][Пп][Рр][Оо][Сс]\\s?[№N]?(?P<number>[0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
5
  "handout": "^Р[Аа][Зз][Дд][Аа][Тт][Оо][Чч][Нн][Ыы][Йй]\\s+[Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][\\.:]",
6
6
  "answer": "О[Тт][Вв][Ее][Тт][Ыы]?\\s?[№N]?([0-9]+)?\\s?[\\.:]",
7
7
  "zachet": "З[Аа][Чч][ЕеЁё][Тт]\\s?[\\.:]",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tour": "^(#\\s+)?R[Uu][Nn][Dd][Aa]\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
3
  "tourrev": "^([0-9IVXLCDM]+)\\sR[Uu][Nn][Dd][Aa]([\\.:])?$",
4
- "question": "P[Ii][Tt][Aa][Nn][Jj][Ee]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
4
+ "question": "P[Ii][Tt][Aa][Nn][Jj][Ee]\\s?[№N]?(?P<number>[0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
5
  "answer": "O[Dd][Gg][Oo][Vv][Oo][Rr]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
6
6
  "handout": "^(M[Aa][Tt][Ee][Rr][Ii][Jj][Aa][Ll]|P[Oo][Dd][Ee][Ll][Jj][Ee][Nn][Oo])[\\.:]",
7
7
  "zachet": "P[Rr][Ii][Hh][Vv][Aa][Tt][Aa]\\s[Ss][Ee]\\s?[\\.:]",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "tour": "^(#\\s+)?Т[Уу][Рр]\\s?№?\\s?([0-9IVXLCDM]*)([\\.:])?$",
3
3
  "tourrev": "^([0-9IVXLCDM]+)\\s[Тт][Уу][Рр]([\\.:])?$",
4
- "question": "З[Аа][Пп][Ии][Тт][Аа][Нн][Нн][Яя]\\s?[№N]?([0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
4
+ "question": "З[Аа][Пп][Ии][Тт][Аа][Нн][Нн][Яя]\\s?[№N]?(?P<number>[0-9\\s]*)\\s?([\\.:]|\n|\r\n|$)",
5
5
  "handout": "Р[Оо][Зз][Дд][Аа][Тт][Кк][Оо][Вв][Ии][Йй][\\s\\s][Мм][Аа][Тт][Ее][Рр][Іі][Аа][Лл][\\.:]",
6
6
  "answer": "В[Іі][Дд][Пп][Оо][Вв][Іі][Дд][Ьь]?\\s?[№N]?([0-9]+)?\\s?[\\.:]",
7
7
  "zachet": "З[Аа][Лл][Іі][Кк]\\s?[\\.:]",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "tour": "^(#\\s+)?([0-9]+)\\s?[-–—]\\s?[Тт][Уу][Рр]\\s*$",
3
- "question": "([0-9]+)\\s?[-–—]\\s?\\sС[Аа][Вв][Оо][Лл]([\\.:]|\n|\r\n|$)",
3
+ "question": "(?P<number>[0-9]+)\\s?[-–—]\\s?\\sС[Аа][Вв][Оо][Лл]([\\.:]|\n|\r\n|$)",
4
4
  "answer": "Ж[Аа][Вв][Оо][Бб]\\s?[№N]?([0-9]+)?\\s?[\\.:]",
5
5
  "handout": "Т[Аа][Рр][Ққ][Аа][Тт][Мм][Аа][\\s\\s][Мм][Аа][Тт][Ее][Рр][Ии][Аа][Лл][\\.:]",
6
6
  "zachet": "Қ[Аа][Бб][Уу][Лл]\\s?[\\.:]",
@@ -0,0 +1 @@
1
+ __version__ = "0.26.0b11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: chgksuite
3
- Version: 0.26.0b9
3
+ Version: 0.26.0b11
4
4
  Summary: A package for chgk automation
5
5
  Home-page: https://gitlab.com/peczony/chgksuite
6
6
  Author: Alexander Pecheny
@@ -1 +0,0 @@
1
- __version__ = "0.26.0b9"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes