diff --git a/backend/doc/config.py b/backend/doc/config.py index 8450f70f..f2bf1cfc 100755 --- a/backend/doc/config.py +++ b/backend/doc/config.py @@ -175,7 +175,7 @@ class Settings(BaseSettings): UNORDERED_LIST_END_STR: str = "" VERSE_SPAN_FMT_STR: str = '{}' BOOK_NAME_FMT_STR: str = "

{}

" - RESOURCE_TYPE_NAME_FMT_STR: str = "

{}

" + RESOURCE_TYPE_NAME_FMT_STR: str = "

{}

" HR: str = "
" TW_WORD_LIST_VERTICAL: bool = False diff --git a/backend/doc/domain/assembly_strategies/assemble_by_book.py b/backend/doc/domain/assembly_strategies/assemble_by_book.py index a4ce77c9..f0c03c50 100755 --- a/backend/doc/domain/assembly_strategies/assemble_by_book.py +++ b/backend/doc/domain/assembly_strategies/assemble_by_book.py @@ -27,7 +27,6 @@ from doc.domain.parsing import handle_split_chapter_into_verses from doc.reviewers_guide.model import RGBook - logger = settings.logger(__name__) diff --git a/backend/doc/domain/assembly_strategies/assembly_strategy_utils.py b/backend/doc/domain/assembly_strategies/assembly_strategy_utils.py index 3751ff45..9178f618 100644 --- a/backend/doc/domain/assembly_strategies/assembly_strategy_utils.py +++ b/backend/doc/domain/assembly_strategies/assembly_strategy_utils.py @@ -26,7 +26,6 @@ from docx.oxml import parse_xml, OxmlElement from docx.oxml.ns import qn - logger = settings.logger(__name__) @@ -125,7 +124,7 @@ def tn_chapter_intro( and chapter_num in tn_book.chapters and tn_book.chapters[chapter_num].intro_html ): - content.append(tn_book.chapters[chapter_num].intro_html) + content.append(demote_headings_by_one(tn_book.chapters[chapter_num].intro_html)) return "".join(content) @@ -516,7 +515,6 @@ def get_chapter_intros( is_rtl: bool, show_tn_chapter_intro: bool, use_section_visual_separator: bool, - resource_type_name_fmt_str: str = settings.RESOURCE_TYPE_NAME_FMT_STR, ) -> list[DocumentPart]: document_parts: list[DocumentPart] = [] if show_tn_chapter_intro: @@ -891,9 +889,9 @@ def get_non_usfm_resources_chapter( use_section_visual_separator, ) ) - document_parts.extend( - rg_verses_parts(rg_book, chapter_num, is_rtl, use_section_visual_separator) - ) + # document_parts.extend( + # rg_verses_parts(rg_book, chapter_num, is_rtl, use_section_visual_separator) + # ) return document_parts @@ -978,7 +976,9 @@ def tnc_chapter_intro( and chapter_num in tnc_book.chapters and tnc_book.chapters[chapter_num].intro_html ): - content.append(tnc_book.chapters[chapter_num].intro_html) + content.append( + demote_headings_by_one(tnc_book.chapters[chapter_num].intro_html) + ) if use_section_visual_separator: content.append(hr) return "".join(content) diff --git a/backend/doc/domain/document_generator.py b/backend/doc/domain/document_generator.py index 5c595f1d..7d223e58 100755 --- a/backend/doc/domain/document_generator.py +++ b/backend/doc/domain/document_generator.py @@ -758,7 +758,11 @@ def compose_docx_document( performing preprocessing and optional separators. """ doc = Document() - html_to_docx = HtmlToDocx() + parser = HtmlToDocx( + tag_style_overrides={ + "h1": "Title", + } + ) t0 = time.time() for part in document_parts: if part.contained_in_two_column_section: @@ -766,14 +770,14 @@ def compose_docx_document( else: add_one_column_section(doc) try: - html_to_docx.add_html_to_document(part.content, doc) + parser.add_html_to_document(part.content, doc) except ValueError as e: logger.exception("Error converting HTML to docx: %s", e) if part.use_section_visual_separator: add_full_width_hr(doc) if part.add_page_break: add_page_break(doc) - style_superscripts(doc, lift_half_points=2, color=RGBColor(0x99, 0x99, 0x99)) + style_superscripts(doc, lift_half_points=2, color=None) t1 = time.time() logger.info("Time for converting HTML to Docx: %.2f seconds", t1 - t0) return doc diff --git a/backend/doc/utils/docx_util.py b/backend/doc/utils/docx_util.py index efaa20c0..2f35821d 100644 --- a/backend/doc/utils/docx_util.py +++ b/backend/doc/utils/docx_util.py @@ -167,7 +167,7 @@ def style_superscripts( doc: DocxDocument, *, lift_half_points: int = 2, - color: RGBColor = RGBColor(0x66, 0x66, 0x66), + color: RGBColor | None = None, ) -> None: """ lift_half_points: @@ -175,7 +175,7 @@ def style_superscripts( 4 = +2pt 6 = +3pt color: - RGBColor for superscripts (e.g. light gray) + RGBColor for superscripts (e.g. light gray) or None """ for para in doc.paragraphs: runs = para.runs diff --git a/backend/doc/utils/text_utils.py b/backend/doc/utils/text_utils.py index 05d6486f..b72e77df 100644 --- a/backend/doc/utils/text_utils.py +++ b/backend/doc/utils/text_utils.py @@ -2,7 +2,6 @@ from doc.config import settings - logger = settings.logger(__name__) HEADING_RE = compile(r" str: ) -def demote_headings_by_two(content: str) -> str: - return HEADING_RE.sub( - lambda m: _demote_heading(m, levels=2), - content, - ) - - if __name__ == "__main__": # To run the doctests in this module, in the root of the project do: diff --git a/backend/requirements.in b/backend/requirements.in index c6af9614..a6f6ee23 100644 --- a/backend/requirements.in +++ b/backend/requirements.in @@ -1,9 +1,3 @@ -# TODO do we still need cython here? I think pyproject.toml build -# dependencies brings it in for pydantic so it probably isn't needed -# here. You have to test pydantic install to see though as it will -# only use Rust backend if cython is detected -# cython # For pydantic: https://pydantic-docs.helpmanual.io/install/ -# TODO do we still need aiofiles? aiofiles beautifulsoup4 cachetools diff --git a/frontend/tests/e2e/doc_test_2.ts b/frontend/tests/e2e/doc_test_2.ts index 7e45ff67..6a24c4db 100644 --- a/frontend/tests/e2e/doc_test_2.ts +++ b/frontend/tests/e2e/doc_test_2.ts @@ -52,7 +52,7 @@ test('can select gateway tab after first selecting heart language and hitting ne await page.getByText('Cebuano').click() await page.getByRole('button', { name: 'Next' }).click() await page.getByRole('button', { name: 'Next' }).click() - await page.getByText('Regular').click({ timeout: 32_000 }) + await page.getByText('Regular').click({ timeout: 120_000 }) await page.getByText('Unlocked Literal Bible').click() await page.getByRole('button', { name: 'Next' }).click() await page.getByRole('radio', { name: 'PDF' }).click() diff --git a/frontend/tests/e2e/doc_test_3.ts b/frontend/tests/e2e/doc_test_3.ts index b94f8b41..65f7a55e 100644 --- a/frontend/tests/e2e/doc_test_3.ts +++ b/frontend/tests/e2e/doc_test_3.ts @@ -40,7 +40,7 @@ test.skip('limit tw words switch', async ({ page }) => { test('use section visual separator setting', async ({ page }) => { await page.goto('http://localhost:8001/') - await page.getByText('Español Latin America (Latin').click() + await page.getByText('Español Latin America (Latin').click({ timeout: 120000 }) await page.getByRole('button', { name: 'Next' }).click() await page.getByText('Efesios').click() await page.getByRole('button', { name: 'Next' }).click() diff --git a/frontend/tests/e2e/passages_test.ts b/frontend/tests/e2e/passages_test.ts index 4025df8e..e9a6b3db 100644 --- a/frontend/tests/e2e/passages_test.ts +++ b/frontend/tests/e2e/passages_test.ts @@ -1,6 +1,6 @@ import { test, expect } from '@playwright/test' -test.only('add passages', async ({ page }) => { +test.skip('add passages', async ({ page }) => { await page.goto('http://localhost:8001/passages') await page.getByText('Español Latin America (Latin').click() await page.getByRole('button', { name: 'Next' }).click() diff --git a/frontend/tests/e2e/passages_test_2.ts b/frontend/tests/e2e/passages_test_2.ts index 17e75095..88fb1867 100644 --- a/frontend/tests/e2e/passages_test_2.ts +++ b/frontend/tests/e2e/passages_test_2.ts @@ -30,7 +30,7 @@ test('checkboxes are only shown when language chosen has books in each checkbox // await expect(page.locator('body')).not.toContainText('Add OT Survey RG3 Passages') // await expect(page.locator('body')).not.toContainText('Add OT Survey RG4 Passages') await expect(page.locator('body')).toContainText("Add NT Survey Reviewers' Guide (RG) Passages", { - timeout: 32_000 + timeout: 120_000 }) // await expect(page.locator('#stet-passages')).toContainText('Add STET Passages') await page.getByText("Add NT Survey Reviewers'").click() @@ -44,7 +44,7 @@ test('checkboxes are only shown when language chosen has books in each checkbox await expect(page.locator('body')).toContainText( "Add all OT Survey Reviewers' Guide (RG) Passages", { - timeout: 32_000 + timeout: 120_000 } ) await expect(page.locator('#add-ot-rg1-passages')).toContainText( diff --git a/template.docx b/template.docx index c1871004..697f6f88 100755 Binary files a/template.docx and b/template.docx differ