1+ from datetime import datetime
12from typing import Mapping , Sequence
23
34import mistune
2829from pydantic import Json
2930from stet .domain .model import VerseEntry , WordEntry
3031from stet .domain .parser import get_word_entry_dtos
32+ from stet .domain .strings import (
33+ LOCALIZED_DATE_FORMAT_STRINGS ,
34+ TRANSLATED_FOOTER_PHRASES_TABLE ,
35+ TRANSLATED_HEADER_PHRASES_TABLE ,
36+ TRANSLATED_TABLE_COLUMN_HEADERS ,
37+ )
3138from stet .utils .docx_utils import (
3239 add_footer ,
3340 add_header ,
@@ -59,11 +66,13 @@ def generate_docx_document(
5966 >>> generate_docx_document()
6067 """
6168 word_entries : list [WordEntry ] = []
62- word_entry_dtos , book_codes_and_names = get_word_entry_dtos (lang0_code , lang1_code )
69+ word_entry_dtos , lang0_book_codes_and_names = get_word_entry_dtos (
70+ lang0_code , lang1_code
71+ )
6372 lang0_resource_types = resource_types (
6473 lang0_code ,
6574 "," .join (
66- [book_code_and_name [0 ] for book_code_and_name in book_codes_and_names ]
75+ [book_code_and_name [0 ] for book_code_and_name in lang0_book_codes_and_names ]
6776 ),
6877 )
6978 lang0_resource_types_ = [
@@ -73,7 +82,7 @@ def generate_docx_document(
7382 lang1_resource_types = resource_types (
7483 lang1_code ,
7584 "," .join (
76- [book_code_and_name [0 ] for book_code_and_name in book_codes_and_names ]
85+ [book_code_and_name [0 ] for book_code_and_name in lang0_book_codes_and_names ]
7786 ),
7887 )
7988 lang1_resource_types_ = [
@@ -115,7 +124,7 @@ def generate_docx_document(
115124 if lang0_usfm_resource_type and lang1_usfm_resource_type :
116125 source_usfm_book = None
117126 target_usfm_book = None
118- for book_code , book_name in book_codes_and_names :
127+ for book_code , book_name in lang0_book_codes_and_names :
119128 current_task .update_state (state = "Locating assets" )
120129 lang0_resource_lookup_dto_ = resource_lookup_dto (
121130 lang0_code , lang0_usfm_resource_type , book_code
@@ -196,23 +205,13 @@ def generate_docx_document(
196205 )
197206 if target_selected_usfm_books :
198207 target_selected_usfm_book = target_selected_usfm_books [0 ]
199- for verse_ref in verse_ref_dto .verse_refs :
200- if source_selected_usfm_book :
201- source_verse_text = lookup_verse_text (
202- source_selected_usfm_book ,
203- verse_ref_dto .chapter_num ,
204- verse_ref .strip (),
205- )
206- else :
207- source_verse_text = ""
208- if target_selected_usfm_book :
209- target_verse_text = lookup_verse_text (
210- target_selected_usfm_book ,
211- verse_ref_dto .chapter_num ,
212- verse_ref .strip (),
213- )
214- else :
215- target_verse_text = ""
208+ target_selected_usfm_book .national_book_name = maybe_correct_book_name (
209+ lang1_code , target_selected_usfm_book .national_book_name
210+ )
211+ logger .debug (
212+ "target_usfm_book.national_book_name: %s" ,
213+ target_selected_usfm_book .national_book_name ,
214+ )
216215 non_book_name_portion_of_source_reference = extract_chapter_and_beyond (
217216 verse_ref_dto .source_reference
218217 )
@@ -231,6 +230,23 @@ def generate_docx_document(
231230 and non_book_name_portion_of_target_reference
232231 else verse_ref_dto .target_reference
233232 )
233+ for verse_ref in verse_ref_dto .verse_refs :
234+ if source_selected_usfm_book :
235+ source_verse_text = lookup_verse_text (
236+ source_selected_usfm_book ,
237+ verse_ref_dto .chapter_num ,
238+ verse_ref .strip (),
239+ )
240+ else :
241+ source_verse_text = ""
242+ if target_selected_usfm_book :
243+ target_verse_text = lookup_verse_text (
244+ target_selected_usfm_book ,
245+ verse_ref_dto .chapter_num ,
246+ verse_ref .strip (),
247+ )
248+ else :
249+ target_verse_text = ""
234250 word_entry .verses .append (
235251 VerseEntry (
236252 source_reference = localized_source_reference ,
@@ -246,7 +262,16 @@ def generate_docx_document(
246262
247263
248264def generate_docx (
249- word_entries : list [WordEntry ], docx_filepath : str , lang0_code : str , lang1_code : str
265+ word_entries : list [WordEntry ],
266+ docx_filepath : str ,
267+ lang0_code : str ,
268+ lang1_code : str ,
269+ translated_table_column_headers : dict [
270+ str , tuple [str , str , str , str ]
271+ ] = TRANSLATED_TABLE_COLUMN_HEADERS ,
272+ translated_footer_phrases_table : dict [str , str ] = TRANSLATED_FOOTER_PHRASES_TABLE ,
273+ localized_date_format_strings : dict [str , str ] = LOCALIZED_DATE_FORMAT_STRINGS ,
274+ translated_header_phrases_table : dict [str , str ] = TRANSLATED_HEADER_PHRASES_TABLE ,
250275) -> None :
251276 """
252277 Generates a DOCX document from a list of word entries and saves it to the given file path.
@@ -273,9 +298,9 @@ def generate_docx(
273298 table .style = "Table Grid"
274299 # Set the header of the table and apply bold formatting
275300 hdr_cells = table .rows [0 ].cells
276- hdr_cells [0 ].text = "Source Reference"
277- hdr_cells [1 ].text = "Target Reference"
278- hdr_cells [2 ].text = "Status"
301+ hdr_cells [0 ].text = translated_table_column_headers [ lang0_code ][ 0 ]
302+ hdr_cells [1 ].text = translated_table_column_headers [ lang0_code ][ 1 ]
303+ hdr_cells [2 ].text = translated_table_column_headers [ lang0_code ][ 2 ]
279304 hdr_cells [2 ].paragraphs [0 ].alignment = WD_PARAGRAPH_ALIGNMENT .CENTER
280305 for hdr_cell in hdr_cells :
281306 hdr_cell .paragraphs [0 ].runs [0 ].bold = True
@@ -287,7 +312,11 @@ def generate_docx(
287312 source_run .bold = True
288313 target_run = row_cells [1 ].paragraphs [0 ].add_run (verse .target_reference )
289314 target_run .bold = True
290- status_run = row_cells [2 ].paragraphs [0 ].add_run ("OK" )
315+ status_run = (
316+ row_cells [2 ]
317+ .paragraphs [0 ]
318+ .add_run (translated_table_column_headers [lang0_code ][3 ])
319+ )
291320 status_run .bold = True
292321 row_cells [2 ].paragraphs [0 ].alignment = WD_PARAGRAPH_ALIGNMENT .CENTER
293322 # Row for texts
@@ -319,8 +348,14 @@ def generate_docx(
319348 tcPr .append (vAlign ) # Append the vertical alignment to cell properties
320349 # Adjust column widths to prioritize the first two columns
321350 adjust_table_columns (table )
322- doc = add_footer (doc )
323- doc = add_header (doc , lang0_code , lang1_code )
351+ footer_phrase = translated_footer_phrases_table [lang0_code ]
352+ current_datetime = datetime .now ().strftime (
353+ localized_date_format_strings [lang0_code ]
354+ )
355+ date_text = f"{ footer_phrase } { current_datetime } "
356+ doc = add_footer (doc , date_text )
357+ header_phrase = translated_header_phrases_table [lang0_code ]
358+ doc = add_header (doc , lang0_code , lang1_code , header_phrase )
324359 doc = add_lined_page_at_end (doc )
325360 reduce_spacing_around_tables (doc )
326361 doc .save (docx_filepath )
0 commit comments