pyact-cli 0.7.2__tar.gz → 0.7.3__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.
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/PKG-INFO +1 -1
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact/mdTOword.py +64 -2
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact_cli.egg-info/PKG-INFO +1 -1
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/setup.py +1 -1
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/README.md +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pamd_helpers/__init__.py +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact/__init__.py +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact/cli.py +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact/core.py +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact/css2json.py +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact/linter.py +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact/py2tex.py +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact_cli.egg-info/SOURCES.txt +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact_cli.egg-info/dependency_links.txt +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact_cli.egg-info/entry_points.txt +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact_cli.egg-info/requires.txt +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/pyact_cli.egg-info/top_level.txt +0 -0
- {pyact_cli-0.7.2 → pyact_cli-0.7.3}/setup.cfg +0 -0
|
@@ -82,8 +82,8 @@ def markdown_parser(md_text: str) -> list:
|
|
|
82
82
|
blocks.append(('list', text, 'unordered'))
|
|
83
83
|
|
|
84
84
|
elif re.match(r'^\d+\.\s+', line_s):
|
|
85
|
-
m = re.match(r'
|
|
86
|
-
blocks.append(('list', m.group(
|
|
85
|
+
m = re.match(r'^(\d+)\.\s+(.*)', line_s)
|
|
86
|
+
blocks.append(('list', m.group(2), 'ordered', int(m.group(1))))
|
|
87
87
|
|
|
88
88
|
# Math Block Parsing
|
|
89
89
|
elif (line_s.startswith('$$') and line_s.endswith('$$')) or (line_s.startswith('$') and line_s.endswith('$') and len(line_s) >= 2):
|
|
@@ -383,6 +383,48 @@ def _process_inline(paragraph, text, styles, tag):
|
|
|
383
383
|
run = paragraph.add_run(subpart)
|
|
384
384
|
if tag in styles: _apply_css_to_run(run, styles[tag])
|
|
385
385
|
|
|
386
|
+
def _restart_list_numbering(doc, p):
|
|
387
|
+
try:
|
|
388
|
+
num_part = doc.part.numbering_part
|
|
389
|
+
numbering = num_part.numbering_definitions._numbering
|
|
390
|
+
nums = numbering.xpath('w:num')
|
|
391
|
+
if not nums: return None
|
|
392
|
+
max_id = max([int(n.get(qn('w:numId'))) for n in nums])
|
|
393
|
+
new_id = max_id + 1
|
|
394
|
+
|
|
395
|
+
list_num = numbering.xpath('w:num[@w:numId="5"]')
|
|
396
|
+
if not list_num: list_num = nums
|
|
397
|
+
abstract_id = list_num[0].xpath('w:abstractNumId/@w:val')[0]
|
|
398
|
+
|
|
399
|
+
new_num = OxmlElement('w:num')
|
|
400
|
+
new_num.set(qn('w:numId'), str(new_id))
|
|
401
|
+
ab_num_id = OxmlElement('w:abstractNumId')
|
|
402
|
+
ab_num_id.set(qn('w:val'), abstract_id)
|
|
403
|
+
new_num.append(ab_num_id)
|
|
404
|
+
|
|
405
|
+
lvl_override = OxmlElement('w:lvlOverride')
|
|
406
|
+
lvl_override.set(qn('w:ilvl'), "0")
|
|
407
|
+
start_override = OxmlElement('w:startOverride')
|
|
408
|
+
start_override.set(qn('w:val'), "1")
|
|
409
|
+
lvl_override.append(start_override)
|
|
410
|
+
new_num.append(lvl_override)
|
|
411
|
+
|
|
412
|
+
numbering.append(new_num)
|
|
413
|
+
|
|
414
|
+
pPr = p._p.get_or_add_pPr()
|
|
415
|
+
numPr = OxmlElement('w:numPr')
|
|
416
|
+
ilvl = OxmlElement('w:ilvl')
|
|
417
|
+
ilvl.set(qn('w:val'), "0")
|
|
418
|
+
numId_el = OxmlElement('w:numId')
|
|
419
|
+
numId_el.set(qn('w:val'), str(new_id))
|
|
420
|
+
numPr.append(ilvl)
|
|
421
|
+
numPr.append(numId_el)
|
|
422
|
+
pPr.append(numPr)
|
|
423
|
+
|
|
424
|
+
return new_id
|
|
425
|
+
except Exception:
|
|
426
|
+
return None
|
|
427
|
+
|
|
386
428
|
def docx_writer(blocks: list, styles: dict, output_file: str):
|
|
387
429
|
"""
|
|
388
430
|
Translates parsed markdown blocks into a Word document and applies CSS styling.
|
|
@@ -401,6 +443,7 @@ def docx_writer(blocks: list, styles: dict, output_file: str):
|
|
|
401
443
|
None: This function does not return a value, but it writes a binary .docx file to disk.
|
|
402
444
|
"""
|
|
403
445
|
doc = Document()
|
|
446
|
+
current_ordered_numId = None
|
|
404
447
|
|
|
405
448
|
# Global body style
|
|
406
449
|
if 'body' in styles:
|
|
@@ -428,8 +471,27 @@ def docx_writer(blocks: list, styles: dict, output_file: str):
|
|
|
428
471
|
elif btype == 'list':
|
|
429
472
|
text = block[1]
|
|
430
473
|
list_type = block[2] if len(block) > 2 else 'unordered'
|
|
474
|
+
num_val = block[3] if len(block) > 3 else None
|
|
475
|
+
|
|
431
476
|
style = 'List Number' if list_type == 'ordered' else 'List Bullet'
|
|
432
477
|
p = doc.add_paragraph(style=style)
|
|
478
|
+
|
|
479
|
+
if list_type == 'ordered':
|
|
480
|
+
if num_val == 1:
|
|
481
|
+
new_id = _restart_list_numbering(doc, p)
|
|
482
|
+
if new_id:
|
|
483
|
+
current_ordered_numId = new_id
|
|
484
|
+
elif current_ordered_numId:
|
|
485
|
+
pPr = p._p.get_or_add_pPr()
|
|
486
|
+
numPr = OxmlElement('w:numPr')
|
|
487
|
+
ilvl = OxmlElement('w:ilvl')
|
|
488
|
+
ilvl.set(qn('w:val'), "0")
|
|
489
|
+
numId_el = OxmlElement('w:numId')
|
|
490
|
+
numId_el.set(qn('w:val'), str(current_ordered_numId))
|
|
491
|
+
numPr.append(ilvl)
|
|
492
|
+
numPr.append(numId_el)
|
|
493
|
+
pPr.append(numPr)
|
|
494
|
+
|
|
433
495
|
if 'list' in styles:
|
|
434
496
|
_apply_paragraph_formatting(p, styles['list'])
|
|
435
497
|
_process_inline(p, text, styles, 'list')
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|