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))
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())
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())
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
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))