def test_transform_tables__with_header(): E = ElementMaker() # fmt: off fmx_tbl = E.TBL( E.CORPUS( E.ROW(E.CELL("Header 1", TYPE="HEADER"), E.CELL("Header 2", TYPE="HEADER"), TYPE="HEADER"), E.ROW(E.CELL("A1"), E.CELL("B1")), E.ROW(E.CELL("A2"), E.CELL("B2")), E.ROW(E.CELL("A3"), E.CELL("B3")), )) # fmt: on tree = E.FORMEX(fmx_tbl) builder = StrBuilder() parser = FormexParser(builder) parser.transform_tables(tree) str_table = tree.xpath("//table")[0].text # print("str_table:") # print(str_table) # fmt: off assert str_table == textwrap.dedent("""\ +-----------+-----------+ | Header 1 | Header 2 | +-----------+-----------+ | A1 | B1 | +-----------+-----------+ | A2 | B2 | +-----------+-----------+ | A3 | B3 | +-----------+-----------+""")
def test_parse_fmx_cell__with_cals(): E = ElementMaker() fmx_cell = E.CELL( colsep="1", rowsep="1", namest="c1", nameend="c3", bgcolor="#00007f", morerows="1", align="center", valign="middle", ) parser = FormexParser(BaseBuilder()) state = parser.setup_table() state.next_row() state.row = state.table.rows[state.row_pos] parser.parse_fmx_cell(fmx_cell) table = state.table cell = table[(1, 1)] assert cell.styles == { 'align': 'center', 'background-color': '#00007f', 'vertical-align': 'middle', 'x-cell-border-bottom': 'solid 1pt black', 'x-cell-border-right': 'solid 1pt black', } assert cell.nature is None assert cell.size == (3, 2)
def test_transform_tables__no_namespace(): E = ElementMaker() fmx_tbl = E.TBL( E.CORPUS(E.ROW(E.CELL("A1"), E.CELL("B1", ROWSPAN="2")), E.ROW(E.CELL("A2")))) tree = E.FORMEX(fmx_tbl) builder = StrBuilder() parser = FormexParser(builder) parser.transform_tables(tree) str_table = tree.xpath("//table")[0].text # print("str_table:") # print(str_table) # fmt: off assert str_table == textwrap.dedent("""\ +-----------+-----------+ | A1 | B1 | +-----------| | | A2 | | +-----------+-----------+""")
def test_parse_fmx_cell(attrib, styles, nature, size): E = ElementMaker() fmx_cell = E.CELL(**attrib) parser = FormexParser(BaseBuilder()) state = parser.setup_table() state.next_row() state.row = state.table.rows[state.row_pos] parser.parse_fmx_cell(fmx_cell) table = state.table cell = table[(1, 1)] assert cell.styles == styles assert cell.nature == nature assert cell.size == size
def test_transform_tables__with_namespace(): E = ElementMaker(namespace=FORMEX_NS, nsmap={FORMEX_PREFIX: FORMEX_NS}) colspan = etree.QName(FORMEX_NS, "COLSPAN") # fmt: off tree = E.FORMEX( E.TBL( E.CORPUS(E.ROW(E.CELL("A1"), E.CELL("B1")), E.ROW(E.CELL("A2", **{colspan.text: "2"}))))) # fmt: on builder = StrBuilder() parser = FormexParser(builder, formex_prefix=FORMEX_PREFIX, formex_ns=FORMEX_NS) parser.transform_tables(tree) str_table = tree.xpath("//table")[0].text # print("str_table:") # print(str_table) # fmt: off assert str_table == textwrap.dedent("""\ +-----------+-----------+ | A1 | B1 | +-----------------------+ | A2 | +-----------------------+""")