概要
テーブル構造の文字列をスペースパディングで整形するPlugin
内容
テーブル構造の文字列をスペースパディングで整形するPluginを作成しました。
各種Wiki記法やMarkdown記法や、CucumberのDSL等で以下のような記述を利用することが多いと思います。
|column1|coln2|c3| |v1|value2|val3| |value1|v2|value3|
ちなみに上記はわざと不揃いにしてありますが、実際は下記のようにしたい場合が多いと思います。
|column1|coln2 |c3 | |v1 |value2|val3 | |value1 |v2 |value3|
そのような際にショートカット一発で変換できるPluginを作成しました。
キーバインドの指定時にセパレーターを指定出来るようにしてありますので、
パイプ以外の区切り文字にも対応可能です。
ソースコード
文字列整形処理
table_justifier.py
# -*- coding: utf-8 -*- class TableJustifier: def justify(self, value, separator): rows = value.split("\n") separated_rows = self._get_separated_rows(value, separator) max_lens = self._get_max_lens(value, separator) justyfid_rows = self._get_justyfid_rows(separated_rows, max_lens, separator) return justyfid_rows def _get_separated_rows(self, value, separator): rows = value.split("\n") separated_rows = [] for row_index, row in enumerate(rows): columns = row.split(separator) separated_rows.append(columns) return separated_rows def _get_max_lens(self, value, separator): max_lens= [] rows = value.split("\n") for row_index, row in enumerate(rows): columns = row.split(separator) for column_index,column in enumerate(columns): if (column_index == len(columns) -1): break if row_index == 0: max_lens.append(len(column)) continue if max_lens[column_index] < len(column): max_lens[column_index] = len(column) return max_lens def _get_justyfid_rows(self, separated_rows, max_lens, separator): justyfid_rows = [] for separated_row in separated_rows: justyfid_columns = "" for separated_column_index,separated_column in enumerate(separated_row): if (separated_column_index == len(separated_row) -1): break justyfid_columns += separated_column.ljust(max_lens[separated_column_index]) justyfid_columns += separator justyfid_rows.append(justyfid_columns) return "\n".join(justyfid_rows)
Sublime Text Plugin Commandからの呼び出し部
TableJustifierCommand.py
# -*- coding: utf-8 -*- import sublime, sublime_plugin from table_justifier import * class TableJustifierCommand(sublime_plugin.TextCommand): def run(self, edit, **kwargs): if kwargs == None: kwargs["separator"] = "|" separator = kwargs["separator"] ret = "" region_of_line = "" for region in self.view.sel(): region_of_line = self.view.line(region) justifier = TableJustifier() ret = justifier.justify(self.view.substr(region_of_line), separator) return self.view.replace(edit, region_of_line, ret)
設定
・table_justifier.pyを%Sublime Text 2%\Packages\Userにコピーします。
・TableJustifierCommand.pyを%Sublime Text 2%\Packages\Userにコピーします。
・Preference=>Key Bindings Userに下記を追加します。(Windowsの場合)
{ "keys": ["alt+shift+j"], "command": "table_justifier", "args": {"separator": "|" }}
"|"の部分を他のセパレータに返ることで任意の区切り文字に対応可能です。