def field_sel(self, ctx, row_num, field_num):
     if ctx.table.empty():
         visual_field_num = 0
     else:
         pos = tbase.TablePos(row_num, field_num)
         visual_field_num = ctx.table_driver.internal_to_visual_index(
             ctx.table, pos).field_num
     return self.visual_field_sel(ctx, row_num, visual_field_num)
 def visual_field_sel(self, ctx, row_num, visual_field_num):
     if ctx.table.empty():
         pt = self.view.text_point(ctx.first_table_row, 0)
     else:
         pos = tbase.TablePos(row_num, visual_field_num)
         col = ctx.table_driver.get_cursor(ctx.table, pos)
         pt = self.view.text_point(ctx.first_table_row + row_num, col)
     return sublime.Region(pt, pt)
 def editor_insert_hline_and_move(self, table, table_pos):
     table.rows.insert(table_pos.row_num + 1, SeparatorRow(table, '-'))
     table.pack()
     if table_pos.row_num + 2 < len(table):
         if table[table_pos.row_num + 2].is_separator():
             table.insert_empty_row(table_pos.row_num + 2)
     else:
         table.insert_empty_row(table_pos.row_num + 2)
     return ("Single separator row inserted",
             tbase.TablePos(table_pos.row_num + 2, 0))
示例#4
0
    def testInsertDoubleHline(self):
        text = """
|     Name    |    Gender   |      Age      |
| Text Column | Char Column | Number Column |
| Alisa       | F           |            21 |
| Alex        | M           |            22 |
        """.strip()

        expected = """
|     Name    |    Gender   |      Age      |
| Text Column | Char Column | Number Column |
|=============|=============|===============|
| Alisa       | F           |            21 |
| Alex        | M           |            22 |
        """.strip()

        t = self.syntax.table_parser.parse_text(text)
        d = self.syntax.table_driver
        msg, pos = d.editor_insert_double_hline(t, tbase.TablePos(1, 0))
        self.assertEqual(tbase.TablePos(1, 0), pos)
        self.assert_table_equals(expected, t.render())
示例#5
0
    def testKillRow(self):
        text = """
|     Name    |    Gender   |      Age      |
| Text Column | Char Column | Number Column |
|-------------|-------------|---------------|
| Alisa       | F           |            21 |
| Alex        | M           |            22 |
        """.strip()

        expected = """
|     Name    |    Gender   |      Age      |
| Text Column | Char Column | Number Column |
|-------------|-------------|---------------|
| Alisa       | F           |            21 |
        """.strip()

        t = self.syntax.table_parser.parse_text(text)
        d = self.syntax.table_driver
        msg, pos = d.editor_kill_row(t, tbase.TablePos(4, 0))
        self.assertEqual(tbase.TablePos(3, 0), pos)
        self.assert_table_equals(expected, t.render())
示例#6
0
    def testMoveColumnLeft(self):
        text = """
|     Name    |    Gender   |      Age      |
| Text Column | Char Column | Number Column |
|-------------|-------------|---------------|
| Alisa       | F           |            21 |
| Alex        | M           |            22 |
        """.strip()

        expected = """
|     Name    |      Age      |    Gender   |
| Text Column | Number Column | Char Column |
|-------------|---------------|-------------|
| Alisa       |            21 | F           |
| Alex        |            22 | M           |
        """.strip()

        t = self.syntax.table_parser.parse_text(text)
        d = self.syntax.table_driver
        msg, pos = d.editor_move_column_left(t, tbase.TablePos(0, 2))
        self.assertEqual(tbase.TablePos(0, 1), pos)
        self.assert_table_equals(expected, t.render())
    def run_one_sel(self, edit, sel):
        if sel.empty():
            return sel
        else:
            syntax = self.detect_syntax()
            text = self.view.substr(sel)
            table = syntax.table_driver.parse_csv(text)
            self.view.replace(edit, sel, table.render())

            first_row = self.view.rowcol(sel.begin())[0]

            pt = self.view.text_point(
                first_row,
                syntax.table_driver.get_cursor(table, tbase.TablePos(0, 0)))
            sublime.status_message("Table Editor: Table created from CSV")
            return sublime.Region(pt, pt)
    def __init__(self, view, sel, syntax):
        self.view = view
        (sel_row, sel_col) = self.view.rowcol(sel.begin())
        self.syntax = syntax

        self.first_table_row = self._get_first_table_row(sel_row, sel_col)
        self.last_table_row = self._get_last_table_row(sel_row, sel_col)
        self.table_text = self._get_table_text(self.first_table_row,
                                               self.last_table_row)
        self.visual_field_num = self._visual_field_num(sel_row, sel_col)
        self.row_num = sel_row - self.first_table_row

        self.table_pos = tbase.TablePos(self.row_num, self.visual_field_num)

        self.table = self.syntax.table_parser.parse_text(self.table_text)
        self.table_driver = self.syntax.table_driver
        self.field_num = self.table_driver.visual_to_internal_index(
            self.table, self.table_pos).field_num
示例#9
0
    def testVisualTointernalIndex(self):

        unformatted = r"""
| a     | b     | c        | d     | e     | f        |
|\2. visual 0   | visual 1 |\2. visual 2   | visual 3 |
| 0     | 1     | 2        | 3     | 4     | 5        |
""".strip()

        t = self.syntax.table_parser.parse_text(unformatted)
        d = self.syntax.table_driver
        #formatted = t.render()

        # test visual_to_internal_index
        self.assertEqual(tbase.TablePos(1, 0), d.visual_to_internal_index(t, tbase.TablePos(1, 0)))
        self.assertEqual(tbase.TablePos(1, 2), d.visual_to_internal_index(t, tbase.TablePos(1, 1)))
        self.assertEqual(tbase.TablePos(1, 3), d.visual_to_internal_index(t, tbase.TablePos(1, 2)))
        self.assertEqual(tbase.TablePos(1, 5), d.visual_to_internal_index(t, tbase.TablePos(1, 3)))

        self.assertEqual(tbase.TablePos(1, 5), d.visual_to_internal_index(t, tbase.TablePos(1, 1000)))

        # test trivial
        for col in range(len(t[0])):
            self.assertEqual(tbase.TablePos(0, col), d.visual_to_internal_index(t, tbase.TablePos(0, col)))
            self.assertEqual(tbase.TablePos(2, col), d.visual_to_internal_index(t, tbase.TablePos(2, col)))

            self.assertEqual(tbase.TablePos(0, col), d.internal_to_visual_index(t, tbase.TablePos(0, col)))
            self.assertEqual(tbase.TablePos(2, col), d.internal_to_visual_index(t, tbase.TablePos(2, col)))

        # test internal_to_visual_index
        self.assertEqual(tbase.TablePos(1, 0), d.internal_to_visual_index(t, tbase.TablePos(1, 0)))
        self.assertEqual(tbase.TablePos(1, 0), d.internal_to_visual_index(t, tbase.TablePos(1, 1)))
        self.assertEqual(tbase.TablePos(1, 1), d.internal_to_visual_index(t, tbase.TablePos(1, 2)))
        self.assertEqual(tbase.TablePos(1, 2), d.internal_to_visual_index(t, tbase.TablePos(1, 3)))
        self.assertEqual(tbase.TablePos(1, 2), d.internal_to_visual_index(t, tbase.TablePos(1, 4)))
        self.assertEqual(tbase.TablePos(1, 3), d.internal_to_visual_index(t, tbase.TablePos(1, 5)))
 def editor_insert_double_hline(self, table, table_pos):
     table.rows.insert(table_pos.row_num + 1, SeparatorRow(table, '='))
     table.pack()
     return ("Double separator row inserted",
             tbase.TablePos(table_pos.row_num, table_pos.field_num))
 def editor_insert_single_hline(self, table, table_pos):
     table.rows.insert(table_pos.row_num + 1, MultiMarkdownAlignRow(table))
     table.pack()
     return ("Single separator row inserted",
             tbase.TablePos(table_pos.row_num, table_pos.field_num))