def testNesting(self): c1 = text.Cell(value="Hello, world!", width=6, align="r") self.assertEqual(c1.lines, ["Hello,", "world!"]) c1.rewrap(width=7) self.assertEqual(c1.lines, [" Hello,", " world!"]) c1.rewrap(align="l") self.assertEqual(c1.lines, ["Hello, ", "world! "]) c2 = text.Cell(value="I am a line of text.", width=13, align="l") self.assertEqual(c2.lines, ["I am a line ", "of text. "]) c2.rewrap(width=8) self.assertEqual(c2.lines, ["I am a ", "line of ", "text. "]) self.assertEqual(c2.width, 8) self.assertEqual(c2.height, 3) c3 = text.JoinedCell(c1, c2, tablesep="|") self.assertEqual( c3.lines, ["Hello, |I am a ", "world! |line of ", " |text. "]) self.assertEqual(c3.height, 3) self.assertEqual(c3.width, 7 + 1 + 8) c4 = text.JoinedCell(c3, c1) self.assertEqual(len(c4.cells), 3) self.assertEqual(c4.width, 7 + 1 + 8 + 1 + 7)
def render_full(self, target, **options): orientation = options.pop("orientation", "vertical") cells = [] for sigil, description, bg in target.legend: bg = colors.RGBToXTerm(*bg) fg = colors.XTermTextForBackground(bg) if sigil: title = "%s (%s)" % (description, sigil) else: title = description cell = text.Cell(value=title, highlights=[dict(bg=bg, fg=fg, start=0, end=-1)], colorizer=self.renderer.colorizer, padding=2, align="c") cells.append(cell) if orientation == "vertical": legend = text.StackedCell(*cells, table_align=False) elif orientation == "horizontal": legend = text.JoinedCell(*cells) else: raise ValueError("Invalid orientation %s." % orientation) if target.notes: cell = text.Cell(target.notes) legend = text.StackedCell(cell, legend, table_align=False) return legend
def render_full(self, target, **options): column_headers = [] row_headers = [] for row_header in target.row_headers or (): row_headers.append(text.Cell(row_header, align="r", padding=1)) # If we're prepending row headers we need an extra column on the left. if row_headers: column_headers.append(text.Cell(target.caption or "-", padding=1)) for column_header in target.column_headers: column_headers.append( text.Cell(column_header, align="c", padding=1)) rows = [text.JoinedCell(*column_headers, tablesep="")] for idx, row in enumerate(target.rows): cells = [] if row_headers: cells.append(row_headers[idx]) for cell in row: fg = cell.get("fg") bg = cell.get("bg") heat = cell.get("heat") if heat and not bg: bg = colors.HeatToRGB(heat, greyscale=target.greyscale) bg = colors.RGBToXTerm(*bg) if bg else None if bg and not fg: fg = colors.XTermTextForBackground(bg) cells.append( text.Cell(value=unicode(cell.get("value", "-")), highlights=[ dict(bg=bg, fg=fg, start=0, end=-1, bold=True) ], colorizer=self.renderer.colorizer, padding=1)) rows.append(text.JoinedCell(*cells, tablesep="", align="l")) return text.StackedCell(*rows, align="l")
def render_row(self, item, **_): result = [] for element in item: delegate_cls = renderer_module.ObjectRenderer.ForTarget( element, renderer=self.renderer) result.append( delegate_cls(session=self.session, renderer=self.renderer).render_row(element)) return text.JoinedCell(*result)
def render_row(self, target, **options): result = [] for item in target: object_renderer = self.ForTarget(item, self.renderer)( session=self.session, renderer=self.renderer) result.append(object_renderer.render_row(item, **options)) result.append(text.Cell(",")) if result: result.pop(-1) return text.JoinedCell(*result)
def render_row(self, target, **_): column_names = [x["name"] for x in target.fields] table = text.TextTable(columns=target.fields, renderer=self.renderer, session=self.session) if not target.results: return text.Cell("") result = [ text.JoinedCell(*[text.Cell(x) for x in column_names]), text.JoinedCell(*[text.Cell("-" * len(x)) for x in column_names]) ] for row in target.results: ordered_row = [] for column in column_names: ordered_row.append(row.get(column)) result.append(table.get_row(*ordered_row)) result = text.StackedCell(*result) return result
def render_row(self, item, hex_width=None, **options): if hex_width is None: hex_width = self.session.GetParameter("hexdump_width", 8) data = item.value highlights = item.highlights or [] hex_highlights = [] for x, y, f, b in highlights: hex_highlights.append((3 * x, 3 * y, f, b)) hexcell = text.Cell(width=hex_width * 3, highlights=hex_highlights, colorizer=self.renderer.colorizer) datacell = text.Cell(width=hex_width, highlights=highlights, colorizer=self.renderer.colorizer) for _, hexdata, translated_data in utils.Hexdump(data, width=hex_width): hexcell.append_line(hexdata) datacell.append_line("".join(translated_data)) return text.JoinedCell(hexcell, datacell)