iniedit プログラム仕様

Inifile Editor

概要: 簡易的なINI/TOMLファイルエディタです。設定ファイルの編集に特化しており、構文ハイライト、検索・置換、セクションジャンプ、外部コマンド実行などの機能を提供します。

詳細説明: 本エディタは、主にWindows環境でのINIファイルやTOMLファイルの編集を想定しています。 エディタの設定は 'iniedit.ini' に保存され、挿入テキストは 'text.ini'、 構文ハイライトルールは 'color.ini' から読み込まれます。 ファイルのドラッグ&ドロップによるオープン、文字コードの自動判別と指定、 未保存の変更に対する警告、カスタム可能な外部コマンド実行機能などが実装されています。

関連リンク: :doc:'iniedit_usage'

class editor.iniedit.SimpleTomlParser[ソース]

ベースクラス: object

簡易的なTOML/INIパーサーです。

概要: セクション '[section]' と 'key=value' のペアを処理するシンプルなパーサーを提供します。

詳細説明: このパーサーは、複雑なTOML仕様のすべてをサポートしているわけではありませんが、 基本的なセクション定義とキー=値の割り当てを識別し、データを構造化された辞書形式で抽出します。 コメント行 ('#' で始まる行) と空行はスキップされます。 セクション名は、セクションの定義行全体とともに、その開始行番号も保持されます。

parse(content)[ソース]

与えられたテキストコンテンツを解析します。

概要: 入力されたINI/TOML形式の文字列を解析し、セクションごとのキーと値のペアを抽出します。

詳細説明: 解析前に 'self.data' と 'self.sections' をリセットします。 行ごとにコンテンツを走査し、正規表現を使用してセクション定義 ('[section]') を識別します。 識別されたセクションは 'self.sections' に元の行と行番号と共に保存されます。 キー=値のペアは現在のセクションの下に格納されます。セクションが定義されていない場合、 空文字列のキーを持つデフォルトセクションに格納されます。

パラメータ:

content -- str: 解析する文字列コンテンツ。

戻り値:

tuple: - dict: 解析されたデータ。セクション名をキーとし、その中にキー=値のペアを持つ辞書。 - list: セクション情報のリスト。各要素は '(元のセクション行文字列, 行番号, 元の行)' のタプル。

class editor.iniedit.TomlEditor(master, initial_file=None, initial_line=None, initial_col=None)[ソース]

ベースクラス: object

INI/TOMLファイルのためのメインエディタアプリケーションです。

概要: Tkinterをベースにしたテキストエディタで、設定ファイルの編集に特化した機能を提供します。

詳細説明: ファイルの開閉、保存、検索・置換、構文ハイライト、ドラッグ&ドロップ、 設定の永続化、セクション一覧表示、外部コマンド実行などの機能を含みます。 'iniedit.ini' からウィンドウサイズや位置、フォント設定を読み込み、 'text.ini' からコンテキストメニューに挿入するテキストを、 'color.ini' から構文ハイライトルールを読み込みます。

find_next_menu()[ソース]

以前の検索条件を使用して、次の検索結果にジャンプします。

概要: 最後に実行された検索の条件(検索語、正規表現、大文字小文字区別)を記憶しており、 それに基づいてテキストエリア内の次の出現箇所を検索します。

find_previous_menu()[ソース]

以前の検索条件を使用して、前の検索結果にジャンプします。

概要: 最後に実行された検索の条件(検索語、正規表現、大文字小文字区別)を記憶しており、 それに基づいてテキストエリア内の前の出現箇所を検索します。

find_text()[ソース]

検索ダイアログを表示します。

概要: テキストを検索するための独立したダイアログウィンドウを作成し、表示します。

詳細説明: 既に検索ダイアログが開いている場合は、既存のダイアログを前面に表示します。 ダイアログには検索文字列の入力フィールド、正規表現オプション、大文字小文字区別オプション、 「前を検索」「次を検索」「閉じる」ボタンが含まれます。 ダイアログのサイズと位置は 'iniedit.ini' から読み込まれ、終了時に保存されます。

handle_drop(event)[ソース]

ファイルがエディタにドラッグ&ドロップされたときの処理を行います。

概要: ドラッグ&ドロップイベントからファイルパスを取得し、そのファイルをエディタに読み込みます。

詳細説明: ドロップされたファイルパスは 'event.data' から取得され、余分な括弧やスペースが除去されます。 もし現在のファイルに未保存の変更がある場合、ユーザーに保存を促します。 ファイルが有効な場合は '_load_initial_file' を呼び出して開きます。 そうでない場合は警告メッセージが表示されます。

パラメータ:

event -- TkinterDnD.Event: ドラッグ&ドロップイベントオブジェクト。

戻り値:

None

manual_apply_highlighting()[ソース]

手動で構文ハイライトを適用します。

概要: 'color.ini' からハイライトルールを再読み込みし、テキストエリアのコンテンツに適用します。

詳細説明: 主にデバッグや、'color.ini' を変更した後にエディタを再起動せずにハイライトを更新したい場合に呼び出されます。 ルールを読み込み、タグを設定し、テキストエリア全体にハイライトを適用する一連の処理を実行します。

new_file()[ソース]

新しい空のファイルを作成します。

概要: 現在編集中のファイルに未保存の変更がある場合、保存を促した上で、 テキストエリアの内容をクリアし、新規ファイルとしてエディタをリセットします。

詳細説明: 'self.loading' フラグを 'True' に設定し、UIの更新を一時停止します。 'current_file' を 'None' に設定し、タイトルバーを「無題」に戻します。 文字コードも「自動判別」にリセットされます。 リセット後、'_finish_loading' が呼び出されます。

戻り値:

None

on_text_modified(event=None)[ソース]

テキストエリアの内容が変更されたときにウィンドウタイトルを更新します。

概要: テキストエリアに変更があった場合、ウィンドウタイトルにファイル名の後にアスタリスク '*' を追加します。

詳細説明: 'self.loading' フラグが 'True' の間は、この処理はスキップされます。 これにより、初期ファイル読み込み時の不要なタイトル更新が防がれます。 'edit_modified()' メソッドを使用して変更状態をチェックします。

open_file()[ソース]

ファイルダイアログを開き、ファイルを選択してエディタに読み込みます。

概要: ユーザーにファイル選択ダイアログを表示し、選択されたファイルをエディタに開きます。

詳細説明: 現在編集中のファイルに未保存の変更がある場合、保存を促します。 '.ini', '.toml', '.txt' ファイル、およびすべてのファイルタイプをフィルタリングするダイアログが表示されます。 ファイルが選択された場合、'_load_initial_file' を呼び出してそのファイルを読み込みます。

戻り値:

None

replace_text()[ソース]

置換ダイアログを表示します。

概要: テキストを検索し、置換するための独立したダイアログウィンドウを作成し、表示します。

詳細説明: 既に置換ダイアログが開いている場合は、既存のダイアログを前面に表示します。 ダイアログには検索文字列の入力フィールド、置換文字列の入力フィールド、 正規表現オプション、大文字小文字区別オプション、 「次を検索」「置換」「すべて置換」「閉じる」ボタンが含まれます。 ダイアログのサイズと位置は 'iniedit.ini' から読み込まれ、終了時に保存されます。

save_file()[ソース]

現在のファイルを保存します。

概要: 現在開いているファイルがある場合、そのファイルに内容を上書き保存します。 新規ファイルの場合(まだファイルパスがない場合)は、'save_file_as' を呼び出して ユーザーにファイルパスを尋ねます。

戻り値:

None

save_file_as()[ソース]

ファイルダイアログを開き、指定された名前でファイルを保存します。

概要: 「名前を付けて保存」ダイアログをユーザーに表示し、新しいファイル名とパスを選択させ、 現在のエディタの内容をその場所に保存します。

詳細説明: '.ini', '.toml', '.txt' ファイル、およびすべてのファイルタイプをフィルタリングするダイアログが表示されます。 ファイルパスが選択された場合、'_save_content' を呼び出してファイルを保存します。

戻り値:

None

show_section_dialog()[ソース]

セクション一覧表示ダイアログを開きます。

概要: ファイル内のセクション('[section]' 形式の行)を一覧表示し、 選択するとエディタ内の該当セクションにジャンプできる独立したダイアログウィンドウを作成し、表示します。

詳細説明: 既にセクションダイアログが開いている場合は、既存のダイアログを前面に表示します。 ダイアログには、セクションを検索するための正規表現入力フィールドと、大文字小文字区別のチェックボックスが含まれます。 検索結果はリストボックスに表示され、ユーザーが項目を選択するとエディタが該当行にスクロールし、その行をハイライトします。 ダイアログのサイズと位置は 'iniedit.ini' から読み込まれ、終了時に保存されます。

toggle_word_wrap()[ソース]

テキストエリアの単語折り返し設定を切り替えます。

概要: 「表示」メニューの「折り返し」チェックボックスの状態に応じて、 テキストエリアの 'wrap' オプションを 'tk.WORD' (単語単位で折り返す) または 'tk.NONE' (折り返さない) に設定します。

update_status_bar(event=None)[ソース]

ステータスバーの表示を更新します。

概要: 現在のカーソル位置(行番号、桁番号)とファイルの文字コード情報をステータスバーに表示します。

詳細説明: カーソルが移動したり、キーがリリースされたり、マウスボタンがリリースされたりするたびに呼び出されます。 文字コードが「auto」の場合は「自動判別」と表示されます。

class editor.iniedit.ToolTip(widget, text)[ソース]

ベースクラス: object

ウィジェットにツールチップ機能を提供します。

概要: 指定されたTkinterウィジェットにマウスカーソルが乗った際に、短いテキスト(ツールチップ)を表示します。

詳細説明: 'tkinter.Toplevel' ウィンドウを使用してツールチップを表示します。 マウスがウィジェットに入ると500ミリ秒後に表示がスケジュールされ、 マウスがウィジェットから離れるか、ボタンが押されると非表示になります。 これにより、ユーザーインターフェースに役立つコンテキスト情報を提供します。

enter(event=None)[ソース]

マウスカーソルがウィジェットに入ったときにツールチップの表示をスケジュールします。

hide()[ソース]

ツールチップウィンドウを非表示にします。

leave(event=None)[ソース]

マウスカーソルがウィジェットから離れたとき、またはボタンが押されたときに ツールチップの表示スケジュールをキャンセルし、ツールチップを非表示にします。

schedule()[ソース]

ツールチップの表示を500ミリ秒後に遅延実行するようにスケジュールします。 既存のスケジュールがある場合はキャンセルし、新しいスケジュールを作成します。

show()[ソース]

ツールチップウィンドウを表示します。

詳細説明: 既にツールチップが表示されている場合やテキストが空の場合は何もしません。 ウィジェットの位置に基づいてツールチップウィンドウの位置を計算し、 オーバーライドリダイレクトウィンドウ(フレームやタイトルバーなし)として表示します。

unschedule()[ソース]

スケジュールされたツールチップの表示をキャンセルします。

editor.iniedit.main()[ソース]

アプリケーションのエントリポイントです。

概要: コマンドライン引数を解析し、Tkinterルートウィンドウと 'TomlEditor' インスタンスを作成し、メインループを開始します。

詳細説明: 'argparse' を使用して、起動時に開くINI/TOMLファイル、開始行、開始桁をコマンドライン引数として受け取ります。 'TkinterDnD.Tk()' を使用して、ファイルドラッグ&ドロップ機能をサポートするルートウィンドウを作成します。 'TomlEditor' クラスのインスタンスを生成し、アプリケーションのGUIを構築・表示します。 その後、'root.mainloop()' を呼び出して、Tkinterアプリケーションイベントループを開始します。

戻り値:

None

editor.iniedit.parse_multiline_ini(filepath)[ソース]

複数行の値を含むINIファイルを解析します。

概要: '"""' で囲まれた複数行の値をサポートするINIファイル(キー=値形式)を解析します。

詳細説明: ファイルのエンコーディングを自動判別し、信頼度が80%未満の場合はUTF-8をフォールバックとして使用します。 '"""' で開始し '"""' で終了する値は、内部の改行を含めて1つの値として処理されます。 ファイルが存在しない場合は空の辞書を返します。コメント行はスキップされます。

パラメータ:

filepath -- str: 解析するINIファイルのパス。

戻り値:

dict: 解析したキーと値のペアを含む辞書。

editor.iniedit.read_ini(filepath)[ソース]

INIファイルから設定を読み込みます。

概要: シンプルなINIファイル(キー=値形式、セクションは不要)から設定を読み込み、辞書として返します。

詳細説明: ファイルのエンコーディングを自動判別し、信頼度が80%未満の場合はUTF-8をフォールバックとして使用します。 ファイルが存在しない場合は空の辞書を返します。 行頭が'#'の行と空行はスキップされます。

パラメータ:

filepath -- str: 読み込むINIファイルのパス。

戻り値:

dict: 読み込んだキーと値のペアを含む辞書。エラーが発生した場合は空の辞書。

editor.iniedit.write_ini(filepath, settings)[ソース]

INIファイルに設定を書き込みます。

概要: 辞書形式の設定をシンプルなINIファイル(キー=値形式)に書き込みます。

詳細説明: すべての設定はUTF-8エンコーディングで書き込まれます。 各キーと値のペアは新しい行に 'key=value' の形式で保存されます。

パラメータ:
  • filepath -- str: 書き込むINIファイルのパス。

  • settings -- dict: 書き込むキーと値のペアを含む辞書。

戻り値:

None