XML export adjusted
This commit is contained in:
@@ -4,6 +4,39 @@ from datetime import datetime
|
|||||||
from dokumente.models import Dokument, Vorgabe, VorgabeKurztext, VorgabeLangtext, Checklistenfrage
|
from dokumente.models import Dokument, Vorgabe, VorgabeKurztext, VorgabeLangtext, Checklistenfrage
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_markdown_table(markdown_content):
|
||||||
|
"""
|
||||||
|
Parse markdown table content and return XML element with <table><header><row><column> structure
|
||||||
|
"""
|
||||||
|
lines = [line.strip() for line in markdown_content.strip().split('\n') if line.strip()]
|
||||||
|
if not lines:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Create table element
|
||||||
|
table = ET.Element('table')
|
||||||
|
|
||||||
|
# Parse first row as header
|
||||||
|
header_row = [cell.strip() for cell in lines[0].split('|') if cell.strip()]
|
||||||
|
header = ET.SubElement(table, 'header')
|
||||||
|
for cell in header_row:
|
||||||
|
column = ET.SubElement(header, 'column')
|
||||||
|
column.text = cell
|
||||||
|
|
||||||
|
# Parse remaining rows (skip separator row if it exists)
|
||||||
|
for line in lines[2:] if len(lines) > 1 and all(c in '-| ' for c in lines[1]) else lines[1:]:
|
||||||
|
# Check if this is a separator row
|
||||||
|
if all(c in '-| ' for c in line):
|
||||||
|
continue
|
||||||
|
|
||||||
|
row = ET.SubElement(table, 'row')
|
||||||
|
row_cells = [cell.strip() for cell in line.split('|') if cell.strip()]
|
||||||
|
for cell in row_cells:
|
||||||
|
column = ET.SubElement(row, 'column')
|
||||||
|
column.text = cell
|
||||||
|
|
||||||
|
return table
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = 'Export all dokumente as XML'
|
help = 'Export all dokumente as XML'
|
||||||
|
|
||||||
@@ -49,20 +82,34 @@ class Command(BaseCommand):
|
|||||||
geltungsbereich_sections = dokument.geltungsbereich_set.all().order_by('order')
|
geltungsbereich_sections = dokument.geltungsbereich_set.all().order_by('order')
|
||||||
if geltungsbereich_sections:
|
if geltungsbereich_sections:
|
||||||
geltungsbereich_element = ET.SubElement(doc_element, 'Geltungsbereich')
|
geltungsbereich_element = ET.SubElement(doc_element, 'Geltungsbereich')
|
||||||
abschnitt_element = ET.SubElement(geltungsbereich_element, 'Abschnitt')
|
|
||||||
for gb in geltungsbereich_sections:
|
for gb in geltungsbereich_sections:
|
||||||
section = ET.SubElement(abschnitt_element, 'Teil')
|
section_type = gb.abschnitttyp.abschnitttyp if gb.abschnitttyp else "text"
|
||||||
section.set('typ', gb.abschnitttyp.abschnitttyp if gb.abschnitttyp else "text")
|
if section_type in ('tabelle', 'table'):
|
||||||
section.text = gb.inhalt
|
table = _parse_markdown_table(gb.inhalt)
|
||||||
|
if table is not None:
|
||||||
|
abschnitt_element = ET.SubElement(geltungsbereich_element, 'Abschnitt')
|
||||||
|
abschnitt_element.set('typ', section_type)
|
||||||
|
abschnitt_element.append(table)
|
||||||
|
else:
|
||||||
|
abschnitt_element = ET.SubElement(geltungsbereich_element, 'Abschnitt')
|
||||||
|
abschnitt_element.set('typ', section_type)
|
||||||
|
abschnitt_element.text = gb.inhalt
|
||||||
|
|
||||||
einleitung_sections = dokument.einleitung_set.all().order_by('order')
|
einleitung_sections = dokument.einleitung_set.all().order_by('order')
|
||||||
if einleitung_sections:
|
if einleitung_sections:
|
||||||
einleitung_element = ET.SubElement(doc_element, 'Einleitung')
|
einleitung_element = ET.SubElement(doc_element, 'Einleitung')
|
||||||
abschnitt_element = ET.SubElement(einleitung_element, 'Abschnitt')
|
|
||||||
for ei in einleitung_sections:
|
for ei in einleitung_sections:
|
||||||
section = ET.SubElement(abschnitt_element, 'Teil')
|
section_type = ei.abschnitttyp.abschnitttyp if ei.abschnitttyp else "text"
|
||||||
section.set('typ', ei.abschnitttyp.abschnitttyp if ei.abschnitttyp else "text")
|
if section_type in ('tabelle', 'table'):
|
||||||
section.text = ei.inhalt
|
table = _parse_markdown_table(ei.inhalt)
|
||||||
|
if table is not None:
|
||||||
|
abschnitt_element = ET.SubElement(einleitung_element, 'Abschnitt')
|
||||||
|
abschnitt_element.set('typ', section_type)
|
||||||
|
abschnitt_element.append(table)
|
||||||
|
else:
|
||||||
|
abschnitt_element = ET.SubElement(einleitung_element, 'Abschnitt')
|
||||||
|
abschnitt_element.set('typ', section_type)
|
||||||
|
abschnitt_element.text = ei.inhalt
|
||||||
|
|
||||||
ET.SubElement(doc_element, 'Ziel').text = ""
|
ET.SubElement(doc_element, 'Ziel').text = ""
|
||||||
ET.SubElement(doc_element, 'Grundlagen').text = ""
|
ET.SubElement(doc_element, 'Grundlagen').text = ""
|
||||||
@@ -96,20 +143,34 @@ class Command(BaseCommand):
|
|||||||
kurztext_sections = vorgabe.vorgabekurztext_set.all().order_by('order')
|
kurztext_sections = vorgabe.vorgabekurztext_set.all().order_by('order')
|
||||||
if kurztext_sections:
|
if kurztext_sections:
|
||||||
kurztext_element = ET.SubElement(vorgabe_el, 'Kurztext')
|
kurztext_element = ET.SubElement(vorgabe_el, 'Kurztext')
|
||||||
abschnitt = ET.SubElement(kurztext_element, 'Abschnitt')
|
|
||||||
for kt in kurztext_sections:
|
for kt in kurztext_sections:
|
||||||
teil = ET.SubElement(abschnitt, 'Teil')
|
section_type = kt.abschnitttyp.abschnitttyp if kt.abschnitttyp else "text"
|
||||||
teil.set('typ', kt.abschnitttyp.abschnitttyp if kt.abschnitttyp else "text")
|
if section_type in ('tabelle', 'table'):
|
||||||
teil.text = kt.inhalt
|
table = _parse_markdown_table(kt.inhalt)
|
||||||
|
if table is not None:
|
||||||
|
abschnitt = ET.SubElement(kurztext_element, 'Abschnitt')
|
||||||
|
abschnitt.set('typ', section_type)
|
||||||
|
abschnitt.append(table)
|
||||||
|
else:
|
||||||
|
abschnitt = ET.SubElement(kurztext_element, 'Abschnitt')
|
||||||
|
abschnitt.set('typ', section_type)
|
||||||
|
abschnitt.text = kt.inhalt
|
||||||
|
|
||||||
langtext_sections = vorgabe.vorgabelangtext_set.all().order_by('order')
|
langtext_sections = vorgabe.vorgabelangtext_set.all().order_by('order')
|
||||||
if langtext_sections:
|
if langtext_sections:
|
||||||
langtext_element = ET.SubElement(vorgabe_el, 'Langtext')
|
langtext_element = ET.SubElement(vorgabe_el, 'Langtext')
|
||||||
abschnitt = ET.SubElement(langtext_element, 'Abschnitt')
|
|
||||||
for lt in langtext_sections:
|
for lt in langtext_sections:
|
||||||
teil = ET.SubElement(abschnitt, 'Teil')
|
section_type = lt.abschnitttyp.abschnitttyp if lt.abschnitttyp else "text"
|
||||||
teil.set('typ', lt.abschnitttyp.abschnitttyp if lt.abschnitttyp else "text")
|
if section_type in ('tabelle', 'table'):
|
||||||
teil.text = lt.inhalt
|
table = _parse_markdown_table(lt.inhalt)
|
||||||
|
if table is not None:
|
||||||
|
abschnitt = ET.SubElement(langtext_element, 'Abschnitt')
|
||||||
|
abschnitt.set('typ', section_type)
|
||||||
|
abschnitt.append(table)
|
||||||
|
else:
|
||||||
|
abschnitt = ET.SubElement(langtext_element, 'Abschnitt')
|
||||||
|
abschnitt.set('typ', section_type)
|
||||||
|
abschnitt.text = lt.inhalt
|
||||||
|
|
||||||
referenz_element = ET.SubElement(vorgabe_el, 'Referenzen')
|
referenz_element = ET.SubElement(vorgabe_el, 'Referenzen')
|
||||||
for ref in vorgabe.referenzen.all():
|
for ref in vorgabe.referenzen.all():
|
||||||
|
|||||||
@@ -1675,6 +1675,54 @@ class ExportXMLCommandTest(TestCase):
|
|||||||
# Should still contain active document
|
# Should still contain active document
|
||||||
self.assertIn('TEST-001', output)
|
self.assertIn('TEST-001', output)
|
||||||
self.assertIn('Test Standard', output)
|
self.assertIn('Test Standard', output)
|
||||||
|
|
||||||
|
def test_export_xml_command_table_structure(self):
|
||||||
|
"""Test export_xml command converts markdown tables to proper XML structure"""
|
||||||
|
# Create document with table
|
||||||
|
table_doc = Dokument.objects.create(
|
||||||
|
nummer="TABLE-001",
|
||||||
|
dokumententyp=self.dokumententyp,
|
||||||
|
name="Table Test Document",
|
||||||
|
aktiv=True
|
||||||
|
)
|
||||||
|
table_doc.autoren.add(self.autor1)
|
||||||
|
|
||||||
|
table_vorgabe = Vorgabe.objects.create(
|
||||||
|
order=1,
|
||||||
|
nummer=1,
|
||||||
|
dokument=table_doc,
|
||||||
|
thema=self.thema,
|
||||||
|
titel="Table Test Vorgabe",
|
||||||
|
gueltigkeit_von=date(2023, 1, 1),
|
||||||
|
gueltigkeit_bis=date(2025, 12, 31)
|
||||||
|
)
|
||||||
|
|
||||||
|
table_content = "| Spalte1 | Spalte2 |\n|---------|---------|\n| Wert1 | Wert2 |\n| Wert3 | Wert4 |"
|
||||||
|
|
||||||
|
self.langtext_table = VorgabeLangtext.objects.create(
|
||||||
|
abschnitt=table_vorgabe,
|
||||||
|
abschnitttyp=self.abschnitttyp_table,
|
||||||
|
inhalt=table_content,
|
||||||
|
order=1
|
||||||
|
)
|
||||||
|
|
||||||
|
out = StringIO()
|
||||||
|
call_command('export_xml', stdout=out)
|
||||||
|
|
||||||
|
output = out.getvalue()
|
||||||
|
|
||||||
|
# Check that table structure is properly exported
|
||||||
|
self.assertIn('<table>', output)
|
||||||
|
self.assertIn('<header>', output)
|
||||||
|
self.assertIn('<column>Spalte1</column>', output)
|
||||||
|
self.assertIn('<column>Spalte2</column>', output)
|
||||||
|
self.assertIn('<row>', output)
|
||||||
|
self.assertIn('<column>Wert1</column>', output)
|
||||||
|
self.assertIn('<column>Wert2</column>', output)
|
||||||
|
self.assertIn('<column>Wert3</column>', output)
|
||||||
|
self.assertIn('<column>Wert4</column>', output)
|
||||||
|
# Should not contain the markdown table content as plain text
|
||||||
|
self.assertNotIn('| Spalte1 | Spalte2 |', output)
|
||||||
|
|
||||||
|
|
||||||
class StandardJSONViewTest(TestCase):
|
class StandardJSONViewTest(TestCase):
|
||||||
@@ -1915,6 +1963,7 @@ class StandardXMLViewTest(TestCase):
|
|||||||
|
|
||||||
# Create text sections
|
# Create text sections
|
||||||
self.abschnitttyp_text = AbschnittTyp.objects.create(abschnitttyp="text")
|
self.abschnitttyp_text = AbschnittTyp.objects.create(abschnitttyp="text")
|
||||||
|
self.abschnitttyp_table = AbschnittTyp.objects.create(abschnitttyp="table")
|
||||||
|
|
||||||
self.geltungsbereich = Geltungsbereich.objects.create(
|
self.geltungsbereich = Geltungsbereich.objects.create(
|
||||||
geltungsbereich=self.dokument,
|
geltungsbereich=self.dokument,
|
||||||
@@ -2049,6 +2098,71 @@ class StandardXMLViewTest(TestCase):
|
|||||||
self.assertIn('<?xml version', response.content.decode())
|
self.assertIn('<?xml version', response.content.decode())
|
||||||
self.assertIn('\n', response.content.decode())
|
self.assertIn('\n', response.content.decode())
|
||||||
self.assertIn(' ', response.content.decode()) # Check for indentation
|
self.assertIn(' ', response.content.decode()) # Check for indentation
|
||||||
|
|
||||||
|
def test_standard_xml_view_table_structure(self):
|
||||||
|
"""Test standard_xml view converts markdown tables to proper XML structure"""
|
||||||
|
# Create document with table
|
||||||
|
table_doc = Dokument.objects.create(
|
||||||
|
nummer="TABLE-XML-001",
|
||||||
|
dokumententyp=self.dokumententyp,
|
||||||
|
name="Table XML Test Document",
|
||||||
|
aktiv=True
|
||||||
|
)
|
||||||
|
table_doc.autoren.add(self.autor)
|
||||||
|
|
||||||
|
table_vorgabe = Vorgabe.objects.create(
|
||||||
|
order=1,
|
||||||
|
nummer=1,
|
||||||
|
dokument=table_doc,
|
||||||
|
thema=self.thema,
|
||||||
|
titel="Table XML Test Vorgabe",
|
||||||
|
gueltigkeit_von=date(2023, 1, 1),
|
||||||
|
gueltigkeit_bis=date(2025, 12, 31)
|
||||||
|
)
|
||||||
|
|
||||||
|
table_content = "| Col1 | Col2 |\n|------|------|\n| A | B |\n| C | D |"
|
||||||
|
|
||||||
|
langtext_table = VorgabeLangtext.objects.create(
|
||||||
|
abschnitt=table_vorgabe,
|
||||||
|
abschnitttyp=self.abschnitttyp_table,
|
||||||
|
inhalt=table_content,
|
||||||
|
order=1
|
||||||
|
)
|
||||||
|
|
||||||
|
url = reverse('standard_xml', kwargs={'nummer': 'TABLE-XML-001'})
|
||||||
|
response = self.client.get(url)
|
||||||
|
|
||||||
|
# Parse XML response
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
root = ET.fromstring(response.content)
|
||||||
|
|
||||||
|
# Find table element
|
||||||
|
table = root.find('.//table')
|
||||||
|
self.assertIsNotNone(table, 'Table element should exist')
|
||||||
|
|
||||||
|
# Check header structure
|
||||||
|
header = table.find('header')
|
||||||
|
self.assertIsNotNone(header, 'Header should exist')
|
||||||
|
header_cols = header.findall('column')
|
||||||
|
self.assertEqual(len(header_cols), 2, 'Header should have 2 columns')
|
||||||
|
self.assertEqual(header_cols[0].text, 'Col1')
|
||||||
|
self.assertEqual(header_cols[1].text, 'Col2')
|
||||||
|
|
||||||
|
# Check row structure
|
||||||
|
rows = table.findall('row')
|
||||||
|
self.assertEqual(len(rows), 2, 'Should have 2 data rows')
|
||||||
|
|
||||||
|
# Check first row
|
||||||
|
row1_cols = rows[0].findall('column')
|
||||||
|
self.assertEqual(len(row1_cols), 2)
|
||||||
|
self.assertEqual(row1_cols[0].text, 'A')
|
||||||
|
self.assertEqual(row1_cols[1].text, 'B')
|
||||||
|
|
||||||
|
# Check second row
|
||||||
|
row2_cols = rows[1].findall('column')
|
||||||
|
self.assertEqual(len(row2_cols), 2)
|
||||||
|
self.assertEqual(row2_cols[0].text, 'C')
|
||||||
|
self.assertEqual(row2_cols[1].text, 'D')
|
||||||
|
|
||||||
|
|
||||||
class VorgabeCommentModelTest(TestCase):
|
class VorgabeCommentModelTest(TestCase):
|
||||||
|
|||||||
@@ -17,6 +17,39 @@ import parsedatetime
|
|||||||
calendar=parsedatetime.Calendar()
|
calendar=parsedatetime.Calendar()
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_markdown_table(markdown_content):
|
||||||
|
"""
|
||||||
|
Parse markdown table content and return XML element with <table><header><row><column> structure
|
||||||
|
"""
|
||||||
|
lines = [line.strip() for line in markdown_content.strip().split('\n') if line.strip()]
|
||||||
|
if not lines:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Create table element
|
||||||
|
table = ET.Element('table')
|
||||||
|
|
||||||
|
# Parse first row as header
|
||||||
|
header_row = [cell.strip() for cell in lines[0].split('|') if cell.strip()]
|
||||||
|
header = ET.SubElement(table, 'header')
|
||||||
|
for cell in header_row:
|
||||||
|
column = ET.SubElement(header, 'column')
|
||||||
|
column.text = cell
|
||||||
|
|
||||||
|
# Parse remaining rows (skip separator row if it exists)
|
||||||
|
for line in lines[2:] if len(lines) > 1 and all(c in '-| ' for c in lines[1]) else lines[1:]:
|
||||||
|
# Check if this is a separator row
|
||||||
|
if all(c in '-| ' for c in line):
|
||||||
|
continue
|
||||||
|
|
||||||
|
row = ET.SubElement(table, 'row')
|
||||||
|
row_cells = [cell.strip() for cell in line.split('|') if cell.strip()]
|
||||||
|
for cell in row_cells:
|
||||||
|
column = ET.SubElement(row, 'column')
|
||||||
|
column.text = cell
|
||||||
|
|
||||||
|
return table
|
||||||
|
|
||||||
|
|
||||||
def standard_list(request):
|
def standard_list(request):
|
||||||
dokumente = Dokument.objects.all()
|
dokumente = Dokument.objects.all()
|
||||||
return render(request, 'standards/standard_list.html',
|
return render(request, 'standards/standard_list.html',
|
||||||
@@ -294,20 +327,34 @@ def standard_xml(request, nummer):
|
|||||||
geltungsbereich_sections = dokument.geltungsbereich_set.all().order_by('order')
|
geltungsbereich_sections = dokument.geltungsbereich_set.all().order_by('order')
|
||||||
if geltungsbereich_sections:
|
if geltungsbereich_sections:
|
||||||
geltungsbereich_element = ET.SubElement(root, 'Geltungsbereich')
|
geltungsbereich_element = ET.SubElement(root, 'Geltungsbereich')
|
||||||
abschnitt_element = ET.SubElement(geltungsbereich_element, 'Abschnitt')
|
|
||||||
for gb in geltungsbereich_sections:
|
for gb in geltungsbereich_sections:
|
||||||
section = ET.SubElement(abschnitt_element, 'Teil')
|
section_type = gb.abschnitttyp.abschnitttyp if gb.abschnitttyp else "text"
|
||||||
section.set('typ', gb.abschnitttyp.abschnitttyp if gb.abschnitttyp else "text")
|
if section_type in ('tabelle', 'table'):
|
||||||
section.text = gb.inhalt
|
table = _parse_markdown_table(gb.inhalt)
|
||||||
|
if table is not None:
|
||||||
|
abschnitt_element = ET.SubElement(geltungsbereich_element, 'Abschnitt')
|
||||||
|
abschnitt_element.set('typ', section_type)
|
||||||
|
abschnitt_element.append(table)
|
||||||
|
else:
|
||||||
|
abschnitt_element = ET.SubElement(geltungsbereich_element, 'Abschnitt')
|
||||||
|
abschnitt_element.set('typ', section_type)
|
||||||
|
abschnitt_element.text = gb.inhalt
|
||||||
|
|
||||||
einleitung_sections = dokument.einleitung_set.all().order_by('order')
|
einleitung_sections = dokument.einleitung_set.all().order_by('order')
|
||||||
if einleitung_sections:
|
if einleitung_sections:
|
||||||
einleitung_element = ET.SubElement(root, 'Einleitung')
|
einleitung_element = ET.SubElement(root, 'Einleitung')
|
||||||
abschnitt_element = ET.SubElement(einleitung_element, 'Abschnitt')
|
|
||||||
for ei in einleitung_sections:
|
for ei in einleitung_sections:
|
||||||
section = ET.SubElement(abschnitt_element, 'Teil')
|
section_type = ei.abschnitttyp.abschnitttyp if ei.abschnitttyp else "text"
|
||||||
section.set('typ', ei.abschnitttyp.abschnitttyp if ei.abschnitttyp else "text")
|
if section_type in ('tabelle', 'table'):
|
||||||
section.text = ei.inhalt
|
table = _parse_markdown_table(ei.inhalt)
|
||||||
|
if table is not None:
|
||||||
|
abschnitt_element = ET.SubElement(einleitung_element, 'Abschnitt')
|
||||||
|
abschnitt_element.set('typ', section_type)
|
||||||
|
abschnitt_element.append(table)
|
||||||
|
else:
|
||||||
|
abschnitt_element = ET.SubElement(einleitung_element, 'Abschnitt')
|
||||||
|
abschnitt_element.set('typ', section_type)
|
||||||
|
abschnitt_element.text = ei.inhalt
|
||||||
|
|
||||||
ET.SubElement(root, 'Ziel').text = ""
|
ET.SubElement(root, 'Ziel').text = ""
|
||||||
ET.SubElement(root, 'Grundlagen').text = ""
|
ET.SubElement(root, 'Grundlagen').text = ""
|
||||||
@@ -341,20 +388,34 @@ def standard_xml(request, nummer):
|
|||||||
kurztext_sections = vorgabe.vorgabekurztext_set.all().order_by('order')
|
kurztext_sections = vorgabe.vorgabekurztext_set.all().order_by('order')
|
||||||
if kurztext_sections:
|
if kurztext_sections:
|
||||||
kurztext_element = ET.SubElement(vorgabe_el, 'Kurztext')
|
kurztext_element = ET.SubElement(vorgabe_el, 'Kurztext')
|
||||||
abschnitt = ET.SubElement(kurztext_element, 'Abschnitt')
|
|
||||||
for kt in kurztext_sections:
|
for kt in kurztext_sections:
|
||||||
teil = ET.SubElement(abschnitt, 'Teil')
|
section_type = kt.abschnitttyp.abschnitttyp if kt.abschnitttyp else "text"
|
||||||
teil.set('typ', kt.abschnitttyp.abschnitttyp if kt.abschnitttyp else "text")
|
if section_type in ('tabelle', 'table'):
|
||||||
teil.text = kt.inhalt
|
table = _parse_markdown_table(kt.inhalt)
|
||||||
|
if table is not None:
|
||||||
|
abschnitt = ET.SubElement(kurztext_element, 'Abschnitt')
|
||||||
|
abschnitt.set('typ', section_type)
|
||||||
|
abschnitt.append(table)
|
||||||
|
else:
|
||||||
|
abschnitt = ET.SubElement(kurztext_element, 'Abschnitt')
|
||||||
|
abschnitt.set('typ', section_type)
|
||||||
|
abschnitt.text = kt.inhalt
|
||||||
|
|
||||||
langtext_sections = vorgabe.vorgabelangtext_set.all().order_by('order')
|
langtext_sections = vorgabe.vorgabelangtext_set.all().order_by('order')
|
||||||
if langtext_sections:
|
if langtext_sections:
|
||||||
langtext_element = ET.SubElement(vorgabe_el, 'Langtext')
|
langtext_element = ET.SubElement(vorgabe_el, 'Langtext')
|
||||||
abschnitt = ET.SubElement(langtext_element, 'Abschnitt')
|
|
||||||
for lt in langtext_sections:
|
for lt in langtext_sections:
|
||||||
teil = ET.SubElement(abschnitt, 'Teil')
|
section_type = lt.abschnitttyp.abschnitttyp if lt.abschnitttyp else "text"
|
||||||
teil.set('typ', lt.abschnitttyp.abschnitttyp if lt.abschnitttyp else "text")
|
if section_type in ('tabelle', 'table'):
|
||||||
teil.text = lt.inhalt
|
table = _parse_markdown_table(lt.inhalt)
|
||||||
|
if table is not None:
|
||||||
|
abschnitt = ET.SubElement(langtext_element, 'Abschnitt')
|
||||||
|
abschnitt.set('typ', section_type)
|
||||||
|
abschnitt.append(table)
|
||||||
|
else:
|
||||||
|
abschnitt = ET.SubElement(langtext_element, 'Abschnitt')
|
||||||
|
abschnitt.set('typ', section_type)
|
||||||
|
abschnitt.text = lt.inhalt
|
||||||
|
|
||||||
referenz_element = ET.SubElement(vorgabe_el, 'Referenzen')
|
referenz_element = ET.SubElement(vorgabe_el, 'Referenzen')
|
||||||
for ref in vorgabe.referenzen.all():
|
for ref in vorgabe.referenzen.all():
|
||||||
|
|||||||
Reference in New Issue
Block a user