def splitListItems(t): nt = t.copy() nt.children = [] for r in t.children: nr = Row() cols = [] maxItems = 0 for cell in r: items = [] for c in cell.children: if c.__class__ == ItemList: items.extend(c.children) cols.append(items) maxItems = max(maxItems,len(items)) for i in range(maxItems): for (j,col) in enumerate(cols): try: item = cols[j][i] il = ItemList() il.appendChild(item) nc = Cell() nc.appendChild(il) nr.appendChild(nc) except IndexError: nr.appendChild(Cell()) nt.appendChild(nr) nr = Row() return nt
def setup(): # WARNING, ALTERING THIS'll PROPABLY BREAK ALL TESTS! EDIT WITH CARE t = [Article(), [Section(), [PreFormatted(), [Text("bla blub"), ImageLink()]]], [Table(), [Row(), [Cell(), PreFormatted(), [Text("jo")]], ImageLink()]], [Section(), [Section(), [Strong()]]], [Text("bla")], ] # WARNING, ALTERING THE ABOVE PROPABLY BREAK ALL TESTS! EDIT WITH CARE def rec(elements, parent): last = None for c in elements: if type(c) == type([]): assert last rec(c, last) else: if parent: parent.children.append(c) last = c rec(t, None) t = t[0] buildAdvancedTree(t) #import mwlib.parser, sys; mwlib.parser.show(sys.stderr, t, 0) return t
def reduceCols(t, colnum=2): nt = t.copy() nt.children = [] for r in t.children: nr = Row() for c in r: nc = c.copy() if len(nr.children) == colnum: nt.appendChild(nr) nr=Row() nr.appendChild(nc) if len(nr.children)>0: while len(nr.children) < colnum: nr.appendChild(Cell()) nt.appendChild(nr) return nt