Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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")
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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)