Skip to content

Commit db85e3a

Browse files
committed
Fix crash when a sidebar is the first element in a book
1 parent c848f64 commit db85e3a

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

machine/corpora/scripture_ref_usfm_parser_handler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ def end_para(self, state: UsfmParserState, marker: str) -> None:
8989

9090
def start_row(self, state: UsfmParserState, marker: str) -> None:
9191
if self._current_text_type == ScriptureTextType.NONVERSE or self._current_text_type == ScriptureTextType.NONE:
92+
if self._cur_verse_ref.is_default:
93+
self._update_verse_ref(state.verse_ref, marker)
9294
self._start_parent_element(marker)
9395

9496
def end_row(self, state: UsfmParserState, marker: str) -> None:
@@ -106,6 +108,8 @@ def end_cell(self, state: UsfmParserState, marker: str) -> None:
106108
self._end_non_verse_text_wrapper(state)
107109

108110
def start_sidebar(self, state: UsfmParserState, marker: str, category: str) -> None:
111+
if self._cur_verse_ref.is_default:
112+
self._update_verse_ref(state.verse_ref, marker)
109113
self._start_parent_element(marker)
110114

111115
def end_sidebar(self, state: UsfmParserState, marker: str, closed: bool) -> None:

tests/corpora/test_usfm_memory_text.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,49 @@ def test_get_rows_opt_break_middle_include_markers() -> None:
9090
assert rows[0].text == "First verse in line // More text"
9191

9292

93+
def test_get_sidebar_first_tag() -> None:
94+
rows: List[TextRow] = get_rows(
95+
r"""\id MAT - Test
96+
\esb
97+
\ip My sidebar text
98+
\esbe
99+
\c 1
100+
\p
101+
\v 1 First verse
102+
""",
103+
include_all_text=True,
104+
include_markers=True,
105+
)
106+
assert len(rows) == 3, str.join(",", [tr.text for tr in rows])
107+
assert rows[0].text == "My sidebar text"
108+
assert scripture_ref(rows[0]) == ScriptureRef.parse("MAT 1:0/1:esb/1:ip")
109+
assert rows[1].text == ""
110+
assert scripture_ref(rows[1]) == ScriptureRef.parse("MAT 1:0/2:p")
111+
assert rows[2].text == "First verse"
112+
assert scripture_ref(rows[2]) == ScriptureRef.parse("MAT 1:1")
113+
114+
115+
def test_get_table_row_first_tag() -> None:
116+
rows: List[TextRow] = get_rows(
117+
r"""\id MAT - Test
118+
\tr \th1 Day \th2 Tribe \th3 Leader
119+
\tr \tcr1 1st \tc2 Judah \tc3 Nahshon son of Amminadab
120+
\c 1
121+
\p
122+
\v 1 First verse
123+
""",
124+
include_all_text=True,
125+
include_markers=True,
126+
)
127+
assert len(rows) == 8, str.join(",", [tr.text for tr in rows])
128+
assert rows[0].text == "\\th1 Day"
129+
assert scripture_ref(rows[0]) == ScriptureRef.parse("MAT 1:0/1:tr/1:th1")
130+
assert rows[6].text == ""
131+
assert scripture_ref(rows[6]) == ScriptureRef.parse("MAT 1:0/3:p")
132+
assert rows[7].text == "First verse"
133+
assert scripture_ref(rows[7]) == ScriptureRef.parse("MAT 1:1")
134+
135+
93136
def test_get_rows_verse_para_beginning_non_verse_segment() -> None:
94137
# a verse paragraph that begins with a non-verse segment followed by a verse segment
95138
rows: List[TextRow] = get_rows(

0 commit comments

Comments
 (0)