Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -551,25 +551,84 @@ with tabs[2]:
|
|
| 551 |
# -------------------------------
|
| 552 |
# Editor Edition Tab
|
| 553 |
# -------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 554 |
with tabs[3]:
|
| 555 |
st.subheader("Editor Edition")
|
|
|
|
| 556 |
# Select Inscription
|
| 557 |
inscription_numbers = df['Number'].tolist()
|
| 558 |
selected_inscription_num = st.selectbox("Select Inscription Number", inscription_numbers, key='editor_select')
|
| 559 |
selected_inscription = df[df['Number'] == selected_inscription_num].iloc[0]
|
| 560 |
-
|
|
|
|
|
|
|
|
|
|
| 561 |
# Parse the selected inscription's XML to get the Text element
|
| 562 |
-
|
| 563 |
-
|
| 564 |
-
|
| 565 |
-
|
| 566 |
-
|
| 567 |
-
|
| 568 |
-
|
| 569 |
-
|
| 570 |
-
|
| 571 |
-
|
|
|
|
|
|
|
| 572 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 573 |
# -------------------------------
|
| 574 |
# Visualization Tab
|
| 575 |
# -------------------------------
|
|
|
|
| 551 |
# -------------------------------
|
| 552 |
# Editor Edition Tab
|
| 553 |
# -------------------------------
|
| 554 |
+
def render_editor(text_element):
|
| 555 |
+
"""
|
| 556 |
+
Processes the Text XML element and converts it to plaintext.
|
| 557 |
+
"""
|
| 558 |
+
def process_element(elem):
|
| 559 |
+
result = elem.text if elem.text else ''
|
| 560 |
+
|
| 561 |
+
for child in elem:
|
| 562 |
+
if child.tag == 'lb':
|
| 563 |
+
# Line break; add a newline
|
| 564 |
+
result += '\n'
|
| 565 |
+
elif child.tag == 'expan':
|
| 566 |
+
# Handle expansions, e.g., <expan><abbr>T</abbr><ex>ίτου</ex></expan> → T(ίτου)
|
| 567 |
+
abbr = child.find('abbr')
|
| 568 |
+
ex = child.find('ex')
|
| 569 |
+
if abbr is not None and ex is not None:
|
| 570 |
+
result += f"{abbr.text}({ex.text})"
|
| 571 |
+
else:
|
| 572 |
+
# If structure is unexpected, process children recursively
|
| 573 |
+
result += process_element(child)
|
| 574 |
+
elif child.tag == 'abbr':
|
| 575 |
+
# Abbreviation; add text without special formatting
|
| 576 |
+
result += child.text if child.text else ''
|
| 577 |
+
elif child.tag == 'ex':
|
| 578 |
+
# Expansion; add text within parentheses
|
| 579 |
+
result += f"({child.text})" if child.text else ''
|
| 580 |
+
elif child.tag in ['persName', 'place', 'title']:
|
| 581 |
+
# Names and titles; add text without tags
|
| 582 |
+
# If they contain nested elements, process them
|
| 583 |
+
result += process_element(child)
|
| 584 |
+
else:
|
| 585 |
+
# For any other tags, process their children
|
| 586 |
+
result += process_element(child)
|
| 587 |
+
|
| 588 |
+
if child.tail:
|
| 589 |
+
result += child.tail
|
| 590 |
+
|
| 591 |
+
return result
|
| 592 |
+
|
| 593 |
+
return process_element(text_element).strip()
|
| 594 |
+
|
| 595 |
+
# Assuming 'df' is your DataFrame and 'inscriptions_content' is defined appropriately
|
| 596 |
+
# Here's the updated 'with tabs[3]:' block:
|
| 597 |
+
|
| 598 |
with tabs[3]:
|
| 599 |
st.subheader("Editor Edition")
|
| 600 |
+
|
| 601 |
# Select Inscription
|
| 602 |
inscription_numbers = df['Number'].tolist()
|
| 603 |
selected_inscription_num = st.selectbox("Select Inscription Number", inscription_numbers, key='editor_select')
|
| 604 |
selected_inscription = df[df['Number'] == selected_inscription_num].iloc[0]
|
| 605 |
+
|
| 606 |
+
# Assuming 'Content' column contains the XML string for each inscription
|
| 607 |
+
inscriptions_content = selected_inscription['Content']
|
| 608 |
+
|
| 609 |
# Parse the selected inscription's XML to get the Text element
|
| 610 |
+
try:
|
| 611 |
+
tree = ET.ElementTree(ET.fromstring(inscriptions_content))
|
| 612 |
+
root = tree.getroot()
|
| 613 |
+
|
| 614 |
+
# Locate the inscription element with the matching number
|
| 615 |
+
inscription_elem = root.find(f".//inscription[@n='{selected_inscription_num}']")
|
| 616 |
+
|
| 617 |
+
# If the root itself is the inscription
|
| 618 |
+
if inscription_elem is None and root.tag == 'inscription' and root.attrib.get('n') == str(selected_inscription_num):
|
| 619 |
+
inscription_elem = root
|
| 620 |
+
|
| 621 |
+
text_element = inscription_elem.find("Text") if inscription_elem is not None else None
|
| 622 |
|
| 623 |
+
if text_element is not None:
|
| 624 |
+
editor_text = render_editor(text_element)
|
| 625 |
+
st.code(editor_text, language="plaintext")
|
| 626 |
+
else:
|
| 627 |
+
st.warning("No text found for the selected inscription.")
|
| 628 |
+
except ET.ParseError as e:
|
| 629 |
+
st.error(f"Error parsing XML: {e}")
|
| 630 |
+
except Exception as e:
|
| 631 |
+
st.error(f"An unexpected error occurred: {e}")
|
| 632 |
# -------------------------------
|
| 633 |
# Visualization Tab
|
| 634 |
# -------------------------------
|