#title 設定 function ShowMenu(menuDef) { function Array2Menu(a, commands) { var menu = CreatePopupMenu(); for (var i = 0 ; i < a.length ; ++i) { if (a[i].submenu instanceof Array) { var submenu = Array2Menu(a[i].submenu, commands); menu.AddPopup(a[i].label, submenu); } else { var index = commands.length; if (index == 0) { index = 1; } if (a[i].label == "----") { menu.Add("", 0, eeMenuSeparator); } else { var flags = (a[i].checked ? eeMenuChecked : 0) | (a[i].grayed ? eeMenuGrayed : 0); menu.Add(a[i].label, index, flags); commands[index] = a[i]; } } } return menu; } var commands = []; var menu = Array2Menu(menuDef, commands); var commandIndex = menu.Track(/*eePosMouse*/); if (commandIndex > 0) { commands[commandIndex].command(); return true; } return false; } cfg = document.Config; function Command(lbl, id) { return { label : lbl, id:id, checked : false, grayed : false, command : function () { editor.ExecuteCommandByID(this.id); } }; } function CheckBox(lbl, prop1, prop2) { return { label : lbl, checked : (cfg[prop1][prop2]), grayed : false, command : function () { cfg[prop1][prop2] = ! cfg[prop1][prop2]; status = "設定 " + cfg.Name + " の " + lbl + " が " + (cfg[prop1][prop2] ? "有効" : "無効") + " に変更されました。"; } }; } function Enum(lbl, prop1, prop2, source) { var item = { label:lbl, submenu:[] } for (var i = 0; i < source.length ; i += 2) { item.submenu.push({ label : source[i], value : source[i + 1], checked:(source[i + 1] == cfg[prop1][prop2]), grayed:false, command: function () { var newValue= this.value; cfg[prop1][prop2] = newValue; status = "設定 " + cfg.Name + " の " + lbl + " が " + this.label + " に変更されました。"; } }); } return item; } function escapeAmb(str) { return str.replace(/&/g, "&&"); } function TextBox(lbl, prop1, prop2) { return { label : lbl + " - " + escapeAmb(cfg[prop1][prop2]), checked : false, grayed : false, command : function () { var newValue = prompt(lbl + "の新しい値を入力して下さい", cfg[prop1][prop2]); if (newValue != "") { cfg[prop1][prop2] = newValue; status = "設定 " + cfg.Name + " の " + lbl + " が " + newValue + " に変更されました。"; } else { status = ""; } } }; } function ListMenu(sourceName, labelName, addPrompt, removePrompt, filter) { var source = cfg[sourceName]; var sourceList = source.List; var list = [CheckBox(labelName, sourceName, "Enabled")]; var deleteList = []; list.push({filter:filter, addPrompt:addPrompt, label:"追加する", list:sourceList, command : function () { var added = prompt(this.addPrompt, ""); if (added && (added != "")) { if (this.list.Add(this.filter(added), true)) { } } }}); list.push({label:"----"}); for(var i = 1 ; i <= sourceList.Count ; ++i ){ var item = sourceList.Item(i); list.push({ assoc : item, label : item.Name, checked : item.Enabled, grayed : false, command : function () { this.assoc.Enabled = ! this.assoc.Enabled; } }); deleteList.push({ assoc : item, list : sourceList, count : i, label : item.Name, checked : false, grayed : false, command : function() { if (confirm(this.assoc.Name + removePrompt)) { this.list.Remove(this.count); } } }); } list.push({label:"----"}); list.push({label:"削除する", submenu:deleteList}); return list; } function NumberBox(lbl, prop1, prop2) { return { label : lbl + " [" + cfg[prop1][prop2] + "]", checked : false, grayed : false, command : function () { var newValue = parseInt(prompt(lbl + "の新しい値を入力して下さい", cfg[prop1][prop2].toString())); if (! newValue.isNaN) { cfg[prop1][prop2] = newValue.toString(); status = "設定 " + cfg.Name + " の " + lbl + " が " + newValue.toString() + " に変更されました。"; } else { status = ""; } } }; } encodingList = ["システム既定のエンコード", eeEncodingSystemDefault, "Unicode (UTF-16LE)", eeEncodingUnicode, "Unicode (UTF-16BE)", eeEncodingUnicodeBigendian, "Unicode (UTF-8)", eeEncodingUTF8, "Unicode (UTF-7)", eeEncodingUTF7, "バルト言語 (iso-8859-4)", 29594, "バルト言語 (windows-1257)", 1257, "中央ヨーロッパ言語 (ibm852)", 852, "中央ヨーロッパ言語 (iso-8859-2)", 28592, "中央ヨーロッパ言語 (windows-1250)", 1250, "簡体字中国語 (gb2312)", 936, "簡体字中国語 (hz-gb-2312)", 52936, "繁体字中国語 (big5)", 950, "キリル言語 (cp866)", 866, "キリル言語 (iso-8859-5)", 28595, "キリル言語 (koi8-r)", 20866, "キリル言語 (koi8-ru)", 21866, "キリル言語 (windows-1251)", 1251, "ギリシャ語 (iso-8859-7)", 28597, "ギリシャ語 (windows-1253)", 1253, "日本語 (自動選択)", 50932, "日本語 (euc-jp)", 51932, "日本語 (JIS, iso-2022-jp)", 50220, "日本語 (JIS 1 バイト カタカナ可, csISO2022JP)", 50221, "日本語 (JIS 1 バイト カタカナ可 - SO/SI, iso-2022-jp)", 50222, "日本語 (シフト JIS, shift_jis)", 932, "韓国語 (ks_c_5601-1987)", 949, "韓国語 (自動選択)", 50949, "韓国語 (euc-kr)", 51949, "韓国語 (iso-2022-kr)", 50225, "タイ語 (windows-874)", 874, "トルコ語 (iso-8859-9)", 1254, "ベトナム語 (windows-1258)", 1258, "西ヨーロッパ言語 (iso-8859-1)", 1252]; fontCategoryList = ["標準", 0, "アラビア語", 1, "バルト言語", 2, "中央ヨーロッパ言語", 3, "簡体字中国語", 4, "繁体字中国語", 5, "キリル言語", 6, "ギリシャ語", 7, "ヘブライ語", 8, "日本語", 9, "韓国語", 10, "タイ語", 11, "トルコ語", 12, "ベトナム語", 13, "西ヨーロッパ言語", 14, "OEM/DOS", 15]; returnList = ["CR+LF (Windows)", 0, "CR (Macintosh)", 1, "LF (Unix)", 2]; menuDef = [ { label:"基本", submenu: [//完成 { label:"タブ/インデント(&I)", submenu: [//完成 CheckBox("自動インデントを有効にする", "Indent", "AutoIndent"), CheckBox("タブの代わりに空白を挿入", "Indent", "InsertSpaces"), NumberBox("タブの桁数", "Indent", "TabColumns"), NumberBox("インデントの桁数", "Indent", "IndentColumns"), TextBox("インデント開始", "Indent", "Begin"), TextBox("インデント終了", "Indent", "End"), TextBox("ステートメント終了", "Indent", "EndOfStatement"), CheckBox("折り返しインデント", "Indent", "WrapIndent") ] }, Enum("折り返し方法", "General", "WrapMode", ["折り返さない", 0, "指定文字数で折り返し", 1, "ウィンドウの右端で折り返し", 2, "ページの右端で折り返し", 3]), Enum("行、桁の表示方法", "General", "LineColumnMode", ["表示座標", 0, "論理座標(2バイト文字を2桁と数える)", 1, "論理座標(2バイト文字を1桁と数える)", 2, "論理タブ(2バイト文字を1桁と数える)", 3]), NumberBox("普通行の文字数", "General", "MarginNormal"), NumberBox("引用行の文字数", "General", "MarginQuote"), TextBox("引用マーク", "General", "QuoteCharacter"), NumberBox("[元に戻す] 最大回数", "General", "UndoBufferSize"), CheckBox("行番号を表示", "General", "ShowLineNumbers"), CheckBox("ルーラを表示", "General", "ShowRuler"), CheckBox("かな漢字変換を起動", "General", "OpenIME"), CheckBox("ウィンドウ左端に空白を入れない", "General", "NoSpaceEdge"), CheckBox("ページ番号を表示", "General", "ShowPage"), CheckBox("制御文字の入力を許可", "General", "AllowControlCharacter"), CheckBox("クリップボードで改行方法を保持", "General", "PreserveReturnsClipboard"), CheckBox("常にANSIで貼り付け", "General", "PasteAnsi"), CheckBox("フリー カーソル モード", "General", "VirtualSpace") ] }, { label:"スクロール", submenu: [//完成 Enum("水平スクロール バー", "Scroll", "HorizontalBar", ["表示しない", 0, "必要な時だけ表示する", 1, "常に表示する", 2]), Enum("垂直スクロール バー", "Scroll", "VerticalBar", ["表示しない", 0, "必要な時だけ表示する", 1, "常に表示する", 2]), CheckBox("スムーズ スクロール", "Scroll", "Smooth"), NumberBox("速度", "Scroll", "SmoothSpeed"), CheckBox("1頁の水平スクロールを常に有効", "Scroll", "HorizontalPage"), CheckBox("1頁の垂直スクロールを常に有効", "Scroll", "VerticalPage"), CheckBox("水平罫線", "Scroll", "HorizontalLine"), CheckBox("垂直罫線", "Scroll", "VerticalLine"), CheckBox("アクティブ ペインの中だけバーを表示", "Scroll", "ShowOnlyActive"), CheckBox("2行スクロール", "Scroll", "DoubleLineScroll"), CheckBox("カーソル移動の高速化", "Scroll", "FastCursorMove"), CheckBox("スクロールでカーソルも移動", "Scroll", "MoveCursorScroll"), CheckBox("半ページ スクロール", "Scroll", "HalfPage") ] }, { label:"ファイル", submenu: [//完成 { label:"新規作成時", submenu: [//完成 Enum("エンコード", "FileNew", "Encoding", encodingList), CheckBox("Unicodeサイン(BOM)を付ける", "FileNew", "UnicodeSignature"), Enum("改行方法", "FileNew", "ReturnMethod", returnList), Enum("フォント分類", "FileNew", "FontCategory", fontCategoryList), CheckBox("テンプレートを使用", "FileNew", "UseTemplate"), TextBox("テンプレート ファイル", "FileNew", "TemplateFile") ] }, { label:"保存時", submenu: [//完成 CheckBox("Unicode文字をシステム既定エンコード保存で警告", "FileSave", "PromptUnicode"), CheckBox("Unicode文字をHTML/XMLの文字参照として保存", "FileSave", "NumericEntity"), CheckBox("名前による実体参照を使用する", "FileSave", "NamedEntity"), CheckBox("保存時、タブをスペースに変換", "FileSave", "TabsAsSpaces"), CheckBox("保存時、改行を挿入", "FileSave", "InsertReturns"), CheckBox("保存時、空のファイルは削除", "FileSave", "DeleteEmpty"), CheckBox("変更がなくても保存を有効", "FileSave", "AlwaysEnabled"), CheckBox("行末の空白を削除", "FileSave", "DeleteSpacesAtEnd"), CheckBox("自動的に無題の文書に名前を付ける", "FileSave", "NameUntitled"), Enum("エンコード", "FileSave", "Encoding", encodingList), CheckBox("Unicodeサイン(BOM)を付ける", "FileSave", "UnicodeSignature"), Enum("改行方法", "FileSave", "ReturnMethod", returnList) ] }, CheckBox("Null文字を含むファイルで警告", "File", "PromptNull"), CheckBox("変換できない不正な文字で警告", "File", "PromptInvalid"), CheckBox("ファイル名をフルパスで表示", "File", "ShowFullPath"), CheckBox("非アクティブ時フルパスにしない", "File", "NoFullPathIfNotActive"), CheckBox("メモ帳互換の日誌作成", "File", "NotepadDiary"), CheckBox("HTML/XMLのCharsetを検出", "File", "DetectCharset"), CheckBox("すべて自動検出", "File", "DetectAll"), CheckBox("Unicodeサイン(BOM)を検出", "File", "DetectUnicodeSignature"), CheckBox("UTF-8を自動検出", "File", "DetectUTF8"), CheckBox("改行方法が不統一ファイルで警告", "File", "PromptInconsistentReturns"), Enum("開く時のエンコード", "File", "Encoding", encodingList), Enum("外部で変更された時", "File", "CheckFileChanged", ["何もしない", 0, "読み直すかどうか選択する", 1, "更新していなければ常に読み直す", 2, "外部から書き込みを禁止する", 3]), TextBox("既定の拡張子", "FileSave", "DefaultExtension"), NumberBox("監視間隔", "File", "MonitorInterval") ] }, { label:"バックアップ", submenu: [//完成 CheckBox("バックアップをバックアップ フォルダに保存", "Backup", "SaveToFolder"), CheckBox("バックアップを保存するファイルと同じフォルダに保存", "Backup", "SaveToSameFolder"), CheckBox("バックアップをごみ箱に保存", "Backup", "UseRecycleBin"), CheckBox("ごみ箱に保存できない場合、バックアップ フォルダに保存", "Backup", "SaveToFolderIfRecycleFailed"), CheckBox("同名のファイルが存在する場合はファイル名を変更する", "Backup", "RenameIfSameNameExists"), TextBox("バックアップ フォルダ", "Backup", "Folder") ] }, { label:"自動保存", submenu: [//完成 CheckBox("自動保存", "AutoSave", "Enabled"), TextBox("自動保存フォルダ", "AutoSave", "Folder"), CheckBox("同名のファイルが存在する場合はファイル名を変更する", "AutoSave", "RenameIfSameNameExists"), CheckBox("自動保存フォルダに保存", "AutoSave", "SaveToFolder") ] }, { label:"関連付け", submenu: ListMenu("Association", "ここで設定する関連付けを有効にする", "新しく関連付けに加える拡張子を入力してください", " を関連づけから削除しますか?", function (s) {return s.toUpperCase();})//完成 }, { label:"禁則文字", submenu: [//完成 CheckBox("欧文ワード ラップを行う", "Wrap", "WordWrap"), CheckBox("記号の後の折り返しを有効にする", "Wrap", "WordWrapAfterMarks"), CheckBox("禁則処理を行う", "Wrap", "Kinsoku"), TextBox("行頭禁則文字", "Wrap", "KinsokuBegin"), TextBox("行末禁則文字", "Wrap", "KinsokuEnd") ] }, { label:"分割禁止単語", submenu: ListMenu("NoWrap", "分割禁止単語の処理を有効にする", "追加したい分割禁止単語を入力してください", " を分割禁止単語一覧から削除しますか?", function (s) {return s;})//完成 }, { label:"記号", submenu: [ CheckBox("改行表示", "Mark", "ShowReturns"), CheckBox("EOF表示", "Mark", "ShowEOF"), CheckBox("タブ表示", "Mark", "ShowTabs "), CheckBox("半角空白表示", "Mark", "ShowSpaces"), CheckBox("全角空白表示", "Mark", "ShowDBSpaces"), CheckBox("CRとLFを区別して表示", "Mark", "CrLdDifference"), CheckBox("制御文字を表示", "Mark", "ShowEOF") ] }, { label:"印刷", submenu: [ CheckBox("行番号を印刷", "Print", "ShowLineNumbers"), CheckBox("色と下線を無効にする", "Print", "IgnoreColor"), CheckBox("区切り線を引く", "Print", "DrawSeparatingLines"), NumberBox("行間隔", "Print", "LineSpace"), TextBox("ヘッダ", "Print", "Header"), TextBox("フッタ", "Print", "Footer"), CheckBox("印刷時ページの右端で折り返す", "Print", "WrapPage") ] }, { label:"リンク", submenu: [ CheckBox("URLをクリックするとそのURLを表示", "Link", "URL"), CheckBox("メール アドレスをクリックするとメール送信", "Link", "MailTo"), CheckBox("引用符の内側をクリックするとその文字列を選択する", "Link", "SelectInQuotes"), CheckBox("ダブル クリックのみ有効", "Link", "DoubleClickOnly"), CheckBox("全角文字をURLとして認識する", "Link", "DBCharURL"), CheckBox("半角カナとカナ記号をURLとして認識する", "Link", "KanaURL"), TextBox("認識する文字", "Link", "URLCharacters"), TextBox("最後に認識されない文字", "Link", "URLCharactersNotEnd") ] }, { label:"その他", submenu: [ Command("強調(1)", 8968), Command("強調(2)", 8969), Command("表示", 8970), Command("キーボード", 8974) ] } ]; status = cfg.Name + " の設定をメニューから変更します。"; if (ShowMenu(menuDef)) { } else { status = ""; } cfg.Save();