chgksuite 0.26.0b9__py3-none-any.whl → 0.26.0b11__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.
- chgksuite/cli.py +72 -31
- chgksuite/composer/pptx.py +2 -4
- chgksuite/parser.py +52 -13
- chgksuite/resources/regexes_by.json +1 -1
- chgksuite/resources/regexes_en.json +1 -1
- chgksuite/resources/regexes_kz_cyr.json +1 -1
- chgksuite/resources/regexes_ru.json +2 -2
- chgksuite/resources/regexes_sr.json +1 -1
- chgksuite/resources/regexes_ua.json +1 -1
- chgksuite/resources/regexes_uz_cyr.json +1 -1
- chgksuite/version.py +1 -1
- {chgksuite-0.26.0b9.dist-info → chgksuite-0.26.0b11.dist-info}/METADATA +1 -1
- {chgksuite-0.26.0b9.dist-info → chgksuite-0.26.0b11.dist-info}/RECORD +17 -17
- {chgksuite-0.26.0b9.dist-info → chgksuite-0.26.0b11.dist-info}/WHEEL +1 -1
- {chgksuite-0.26.0b9.dist-info → chgksuite-0.26.0b11.dist-info}/entry_points.txt +0 -0
- {chgksuite-0.26.0b9.dist-info → chgksuite-0.26.0b11.dist-info}/licenses/LICENSE +0 -0
- {chgksuite-0.26.0b9.dist-info → chgksuite-0.26.0b11.dist-info}/top_level.txt +0 -0
chgksuite/cli.py
CHANGED
|
@@ -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(
|
chgksuite/composer/pptx.py
CHANGED
|
@@ -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
|
chgksuite/parser.py
CHANGED
|
@@ -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
|
-
|
|
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]+)\\[",
|
|
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(
|
|
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
|
-
|
|
512
|
-
|
|
513
|
-
|
|
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(
|
|
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]
|
|
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]
|
|
4
|
-
"question": "
|
|
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?[\\.:]",
|
chgksuite/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.26.
|
|
1
|
+
__version__ = "0.26.0b11"
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
chgksuite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
chgksuite/__main__.py,sha256=0-_jfloveTW3SZYW5XEagbyaHKGCiDhGNgcLxsT_dMs,140
|
|
3
|
-
chgksuite/cli.py,sha256=
|
|
3
|
+
chgksuite/cli.py,sha256=6mmd_TcGaBykW9tye9km6hp6STNF0LZzlleDRfOh4-o,40276
|
|
4
4
|
chgksuite/common.py,sha256=VkOhoBA_P3qY5VgtvfrBjOsm5uVNL2s2Th2AhGB2pg8,11207
|
|
5
|
-
chgksuite/parser.py,sha256=
|
|
5
|
+
chgksuite/parser.py,sha256=vouLNwSAoITBa7E8fye2Y0ZnN-WNapkoqW93qvpIkY0,39114
|
|
6
6
|
chgksuite/parser_db.py,sha256=W1--OcDnx18mehH1T2ISHu3Saeq-9mqHo-xJopNySXI,11135
|
|
7
7
|
chgksuite/trello.py,sha256=BG1Qb_W7Uu4o3Mfc_tK71ElU8ysdSplGlj_sAKfvUn4,14730
|
|
8
8
|
chgksuite/typotools.py,sha256=Jdk65Wn_bXqpQtOT7PkBZyD2ZG1MBeeZFPMzcHEPkf4,12771
|
|
9
|
-
chgksuite/version.py,sha256=
|
|
9
|
+
chgksuite/version.py,sha256=ibWtFzx4N9iZIKpM-hhKG9nm0d5VsBrsioedlZ33Dgg,26
|
|
10
10
|
chgksuite/vulture_whitelist.py,sha256=P__p_X0zt10ivddIf81uyxsobV14vFg8uS2lt4foYpc,3582
|
|
11
11
|
chgksuite/composer/__init__.py,sha256=MAOVZIYXmZmD6nNQSo9DueV6b5RgxF7_HGeLvsAhMJs,6490
|
|
12
12
|
chgksuite/composer/chgksuite_parser.py,sha256=MFcLUWbccMqo3OYEuaAIA0loEvWM_PNS9vR7c1z_c60,8843
|
|
@@ -16,7 +16,7 @@ chgksuite/composer/docx.py,sha256=5MASXACM-ztWrr3VdO8HZ-W-hWWQ5TY1jXMsCQIufGc,18
|
|
|
16
16
|
chgksuite/composer/latex.py,sha256=WtLdUICxeX4_5vHEJRF0YhFLpTsOUwBkQFunQS488FA,9248
|
|
17
17
|
chgksuite/composer/lj.py,sha256=nty3Zs3N1H0gNK378U04aAHo71_5cABhCM1Mm9jiUEA,15213
|
|
18
18
|
chgksuite/composer/openquiz.py,sha256=4adZewvRXpZhKrh9H4epKoMMDhmki9US55-Q0LcpZW0,7019
|
|
19
|
-
chgksuite/composer/pptx.py,sha256
|
|
19
|
+
chgksuite/composer/pptx.py,sha256=KszvRAbSbKmbPS257YcYhE6wB1gSf7gIXRH8VwiSqyg,23775
|
|
20
20
|
chgksuite/composer/reddit.py,sha256=-Eg4CqMHhyGGfCteVwdQdtE1pfUXQ42XcP5OYUrBXmo,3878
|
|
21
21
|
chgksuite/composer/stats.py,sha256=GbraSrjaZ8Mc2URs5aGAsI4ekboAKzlJJOqsbe96ELA,3995
|
|
22
22
|
chgksuite/composer/telegram.py,sha256=ZiCBFXxKJJ5vD5ttkfvmURd4Q9Gif6eT8R93nz-LAq0,47146
|
|
@@ -41,19 +41,19 @@ chgksuite/resources/labels_ua.toml,sha256=sUZdwwpkddb_56bmrZyO56cDrm68ft_JoMqR38
|
|
|
41
41
|
chgksuite/resources/labels_uz.toml,sha256=uRnf6tjBf1rYpWjt675ecB2MPn_Ohz-Hj6XDYNPpe3o,609
|
|
42
42
|
chgksuite/resources/labels_uz_cyr.toml,sha256=ztqHItwhJjfBTOIj_vA1hrneYo8s5gvZkkSr0k9S3rs,814
|
|
43
43
|
chgksuite/resources/pptx_config.toml,sha256=pbdQpZTBZajfXxf9Ej6jFQv8luA9_h2Lsihx9hs2jkI,570
|
|
44
|
-
chgksuite/resources/regexes_by.json,sha256=
|
|
45
|
-
chgksuite/resources/regexes_en.json,sha256=
|
|
46
|
-
chgksuite/resources/regexes_kz_cyr.json,sha256=
|
|
47
|
-
chgksuite/resources/regexes_ru.json,sha256=
|
|
48
|
-
chgksuite/resources/regexes_sr.json,sha256=
|
|
49
|
-
chgksuite/resources/regexes_ua.json,sha256=
|
|
50
|
-
chgksuite/resources/regexes_uz_cyr.json,sha256=
|
|
44
|
+
chgksuite/resources/regexes_by.json,sha256=ps_dLYxgPnZRCUkLo_ti1tsZAWZNIf48UobRvQ88z6E,1306
|
|
45
|
+
chgksuite/resources/regexes_en.json,sha256=XdpKRlT2azLglFeXRKv3BdZKHDem2qXFbwRixiUVmbU,1013
|
|
46
|
+
chgksuite/resources/regexes_kz_cyr.json,sha256=wkkf_Gll07i9V1QLdexKG2DjxAhV9ZZOWMjvbX7Tjvg,1689
|
|
47
|
+
chgksuite/resources/regexes_ru.json,sha256=3OrNLq6LkIB2rVErPRYYHrljrKK-mOdna1zfXCaIUK0,2187
|
|
48
|
+
chgksuite/resources/regexes_sr.json,sha256=S8IRDUh3E4y3G8Cavb4F6gPDfHzOk2HH3RXy_D32RFw,935
|
|
49
|
+
chgksuite/resources/regexes_ua.json,sha256=vLUP9nRsVB7nPk4Ea3CpC7zcg57N62Uf4A24YJjRMFA,1340
|
|
50
|
+
chgksuite/resources/regexes_uz_cyr.json,sha256=GlGkA6ys2e1-9xPcgOL8Sy9ZuDZHQZXp_p_MvGJirMU,1116
|
|
51
51
|
chgksuite/resources/template.docx,sha256=Do29TAsg3YbH0rRSaXhVzKEoh4pwXkklW_idWA34HVE,11189
|
|
52
52
|
chgksuite/resources/template.pptx,sha256=hEFWqE-yYpwZ8ejrMCJIPEyoMT3eDqaqtiEeQ7I4fyk,29777
|
|
53
53
|
chgksuite/resources/trello.json,sha256=M5Q9JR-AAJF1u16YtNAxDX-7c7VoVTXuq4POTqYvq8o,555
|
|
54
|
-
chgksuite-0.26.
|
|
55
|
-
chgksuite-0.26.
|
|
56
|
-
chgksuite-0.26.
|
|
57
|
-
chgksuite-0.26.
|
|
58
|
-
chgksuite-0.26.
|
|
59
|
-
chgksuite-0.26.
|
|
54
|
+
chgksuite-0.26.0b11.dist-info/licenses/LICENSE,sha256=_a1yfntuPmctLsuiE_08xMSORuCfGS8X5hQph2U_PUw,1081
|
|
55
|
+
chgksuite-0.26.0b11.dist-info/METADATA,sha256=wSSFZjHl01qih4-d1kdY8g0R1TaSE3l2VnAIGct-DOE,1342
|
|
56
|
+
chgksuite-0.26.0b11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
57
|
+
chgksuite-0.26.0b11.dist-info/entry_points.txt,sha256=lqjX6ULQZGDt0rgouTXBuwEPiwKkDQkSiNsT877A_Jg,54
|
|
58
|
+
chgksuite-0.26.0b11.dist-info/top_level.txt,sha256=cSWiRBOGZW9nIO6Rv1IrEfwPgV2ZWs87QV9wPXeBGqM,10
|
|
59
|
+
chgksuite-0.26.0b11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|