def content(self, trim_left=0, trim_top=0, cols=None, rows=None, attr_map=None): """ Return the canvas content as a list of rows where each row is a list of (attr, cs, text) tuples. trim_left, trim_top, cols, rows may be set by CompositeCanvas when rendering a partially obscured canvas. """ maxcol, maxrow = self.cols(), self.rows() if not cols: cols = maxcol - trim_left if not rows: rows = maxrow - trim_top assert trim_left >= 0 and trim_left < maxcol assert cols > 0 and trim_left + cols <= maxcol assert trim_top >= 0 and trim_top < maxrow assert rows > 0 and trim_top + rows <= maxrow if trim_top or rows < maxrow: text_attr_cs = list( zip(self._text[trim_top:trim_top + rows], self._attr[trim_top:trim_top + rows], self._cs[trim_top:trim_top + rows])) else: text_attr_cs = list(zip(self._text, self._attr, self._cs)) for text, a_row, cs_row in text_attr_cs: if trim_left or cols < self._maxcol: text, a_row, cs_row = trim_text_attr_cs( text, a_row, cs_row, trim_left, trim_left + cols) attr_cs = rle_product(a_row, cs_row) i = 0 row = [] for (a, cs), run in attr_cs: if attr_map and a in attr_map: a = attr_map[a] row.append((a, cs, text[i:i + run])) i += run yield row
def content(self, trim_left=0, trim_top=0, cols=None, rows=None, attr_map=None): """ Return the canvas content as a list of rows where each row is a list of (attr, cs, text) tuples. trim_left, trim_top, cols, rows may be set by CompositeCanvas when rendering a partially obscured canvas. """ maxcol, maxrow = self.cols(), self.rows() if not cols: cols = maxcol - trim_left if not rows: rows = maxrow - trim_top assert trim_left >= 0 and trim_left < maxcol assert cols > 0 and trim_left + cols <= maxcol assert trim_top >=0 and trim_top < maxrow assert rows > 0 and trim_top + rows <= maxrow if trim_top or rows < maxrow: text_attr_cs = zip( self._text[trim_top:trim_top+rows], self._attr[trim_top:trim_top+rows], self._cs[trim_top:trim_top+rows]) else: text_attr_cs = zip(self._text, self._attr, self._cs) for text, a_row, cs_row in text_attr_cs: if trim_left or cols < self._maxcol: text, a_row, cs_row = trim_text_attr_cs( text, a_row, cs_row, trim_left, trim_left + cols) attr_cs = rle_product(a_row, cs_row) i = 0 row = [] for (a, cs), run in attr_cs: if attr_map and a in attr_map: a = attr_map[a] row.append((a, cs, text[i:i+run])) i += run yield row