v0.5.3
- Мелкие исправления увеличивающие работу конвертера
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
"""Дефис внутри гиперссылки: текст не должен дублироваться.
|
||||
|
||||
Методичка МИРЭА (`_method_extract.txt`, строки 373-376): знак дефиса «-» не
|
||||
отделяется пробелами и используется в сложных словах (во-первых,
|
||||
физико-математический, кто-либо) и в интервалах (100-150 Мб). Поэтому слово не
|
||||
должно рваться по дефису при переносе строки — вместо обычного дефиса в текст
|
||||
пишется отдельный элемент `w:noBreakHyphen`, как это уже делает
|
||||
`Paragraph.add_run`.
|
||||
"""
|
||||
|
||||
import os
|
||||
import unittest
|
||||
|
||||
import docx
|
||||
from docx.oxml.ns import qn
|
||||
|
||||
from md2gost import package_dir
|
||||
from md2gost.renderable.paragraph import Link, Paragraph
|
||||
from md2gost.styles import apply_mirea_styles
|
||||
|
||||
|
||||
def _texts(element) -> list[str]:
|
||||
return [t.text or "" for t in element.iter(qn("w:t"))]
|
||||
|
||||
|
||||
class TestLinkHyphen(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self._document = docx.Document(os.path.join(package_dir(), "Template.docx"))
|
||||
self._document._body.clear_content()
|
||||
apply_mirea_styles(self._document)
|
||||
|
||||
def _hyperlink(self, text: str):
|
||||
paragraph = Paragraph(self._document._body)
|
||||
link = Link("https://example.com", paragraph._docx_paragraph)
|
||||
link.add_run(text)
|
||||
return link.element
|
||||
|
||||
def test_compound_word_is_split_around_no_break_hyphen(self):
|
||||
hyperlink = self._hyperlink("во-первых")
|
||||
|
||||
runs = hyperlink.findall(qn("w:r"))
|
||||
self.assertEqual(3, len(runs))
|
||||
self.assertEqual(
|
||||
1, len(hyperlink.findall(f'{qn("w:r")}/{qn("w:noBreakHyphen")}'))
|
||||
)
|
||||
self.assertEqual("вопервых", "".join(_texts(hyperlink)))
|
||||
for run in runs:
|
||||
self.assertNotIn("во-первых", "".join(_texts(run)))
|
||||
|
||||
def test_interval_is_split_around_no_break_hyphen(self):
|
||||
hyperlink = self._hyperlink("100-150")
|
||||
|
||||
self.assertEqual(["100", "150"], [t for t in _texts(hyperlink) if t])
|
||||
|
||||
def test_several_hyphens_produce_one_run_per_part(self):
|
||||
hyperlink = self._hyperlink("физико-математический-факультет")
|
||||
|
||||
self.assertEqual(5, len(hyperlink.findall(qn("w:r"))))
|
||||
self.assertEqual(
|
||||
"физикоматематическийфакультет", "".join(_texts(hyperlink))
|
||||
)
|
||||
|
||||
def test_text_without_hyphen_stays_one_run(self):
|
||||
hyperlink = self._hyperlink("пример")
|
||||
|
||||
self.assertEqual(1, len(hyperlink.findall(qn("w:r"))))
|
||||
self.assertEqual("пример", "".join(_texts(hyperlink)))
|
||||
Reference in New Issue
Block a user