「
連番を挿入
」を編集中
2013年8月29日 (木) 00:03時点における
Masme
(
トーク
|
投稿記録
)
による版
(ダウンロード版を添付。注意※を赤字に。目次を右寄せ。他微修正)
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
ナビゲーションに移動
検索に移動
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、さまざまなメリットもあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
<div style="float:right">__TOC__</div> カーソル位置or選択範囲の行頭に連番(半角数字)を挿入するマクロです。<br>範囲選択している場合は、各行の行頭に連番を付加します。<br>範囲選択していない場合は、入力した「行数」分の連番を挿入します。 ※アルファベット連番やカタカナ連番などには対応していません。 [[ファイル:InsertSequentialNumber_Popup.png|left]] {| border="1" cellspacing="0" !連番を挿入 |連番の挿入を実行します。 |- !(プレビュー) |挿入される連番の内容を事前に確認できます。 |- !プリセット |あらかじめ登録しておいた内容に従い、設定を一括変更します。 |- !始値 |開始番号。0以上の半角数字を入力してください。 |- !行数 |連番の個数。1以上の半角数字を入力してください。<br><span style="color:#c00;">※範囲選択している場合は変更できません。</span> |- !増分 |連番の増え方。0以上の半角数字を入力してください。<br>増分が 2 なら、1,3,5,7,9... のように2ずつ増える連番になります。 |- !桁数 |連番の最低桁数。1以上の半角数字を入力してください。<br>桁数が 3 なら、最低でも3桁以上になるよう桁埋めします。<br><span style="color:#c00;">※「桁埋め」が (無し) の場合、この設定は無視されます。</span> |- !桁埋め |桁揃えに使用する文字列。半角1文字を入力してください。<br>※全角文字や2文字以上を入力することもできますが桁が揃わなくなります。 |- !接頭辞 |連番の前に付ける文字列。 |- !接尾辞 |連番の後に付ける文字列。 |} ==注意点== * ポップアップメニュー上での視認性を良くするため、半角空白は ␣ (U+2423)、水平タブは › (U+203A) の記号で代替表示されます。また、空欄の場合(何も入力されてない項目)は、(無し) と表示されます。 * 桁埋め/接頭辞/接尾辞の文字入力時にキャンセルすると、入力前の状態に戻るのではなく、空欄あつかい=(無し) となります。 ==プリセットについて== プリセットは、設定項目を一発で変更する機能です。<br>「プリセット一覧」部分を各自で編集する必要がありますが、よく使う設定をプリセットに登録しておけば、使い勝手が向上します。 ※記述ミスがあると正しく機能しません。セミコロン ; や括弧の打ち忘れ、打ち間違いに注意してください。 ==ソースコード== ダウンロード→[[ファイル:連番を挿入.zip]] <source lang="javascript"> //■連番を挿入 // 2013/08/25 // //・カーソル位置or選択範囲の行頭に連番(半角数字)を挿入します。 //・範囲選択してない場合は、連番の行数(個数)を変更できます。 //▲注意点 //・桁埋め/接頭辞/接尾辞の文字入力時にキャンセルすると、 // 入力前の状態に戻るのではなく、空欄=(無し)となります。 // ※空欄でOKした時とキャンセルした時の返り値が同じなので、 // 分岐処理することができません。求ム、解決法。 //■初期設定 ●初期値 var start = 1; //始値 ●1 ※半角数字/0以上の整数 var lines = 10; //行数 ●10 ※半角数字/1以上の整数 var incre = 1; //増分 ●1 ※半角数字/0以上の整数 var digit = 1; //桁数 ●1 ※半角数字/1以上の整数 var supply = "0"; //桁埋め ●"0" ※文字列/半角1文字を推奨 var prefix = ""; //接頭辞 ●"" ※文字列 var suffix = ""; //接尾辞 ●"" ※文字列 //■プリセット一覧 var last = start+(lines-1)*incre; //終値を計算 var f = []; // ----------------- ↓ここより下にプリセットを記述 f.push(["桁埋め=(無し)",{cmd:function(){ supply=""; }}]); f.push(["桁埋め= ",{cmd:function(){ supply=" "; }}]); f.push(["桁埋め=0",{cmd:function(){ supply="0"; }}]); f.push("----"); f.push(["(n~nn)",{cmd:function(){ supply=""; prefix="("; suffix=")"; }}]); f.push([" n~nn. ",{cmd:function(){ supply=" "; prefix=""; suffix=". "; }}]); f.push(["第0n~nn章",{cmd:function(){ supply="0"; prefix="第"; suffix="章"; }}]); f.push(["第0n~nn位",{cmd:function(){ supply="0"; prefix="第"; suffix="位"; }}]); f.push(["n~nn/終値",{cmd:function(){ supply=""; prefix=""; suffix="/"+ last; }}]); // ----------------- ↑ここより上にプリセットを記述 //■実行コード (function(){ var sel = document.Selection; var cmd = [], cid = 101; //コマンド格納用,ID //選択範囲orカーソル位置の調整 var meP = mePosLogical; var ty = sel.GetTopPointY(meP); //範囲開始行 var by = sel.GetBottomPointY(meP); //範囲終了行 if (sel.Text) { //◆範囲選択している場合:選択範囲を行頭行末まで拡張 if (ty!=by && sel.GetBottomPointX(meP)==1) by--; //行選択時、次の行を含めない sel.SetActivePoint(meP, 1, by); sel.EndOfLine(false, meP); sel.SetAnchorPoint(meP, 1, ty); lines = 1 + by - ty; //行数を自動設定 } else { //◆範囲選択していない場合:カーソルを行頭に移動 sel.SetActivePoint(meP, 1, ty); } //プリセット一覧からメニュー生成 var preset = CreatePopupMenu(); ListToMenu(f, preset); //ポップアップメニュー var tr = 10; while (tr>1) { //実行(1)orキャンセル(0)するまで繰り返す last = start+(lines-1)*incre; //終値を再計算 //メニューを生成 var popup = CreatePopupMenu(); popup.Add("連番を挿入", 1); popup.Add(Naming(prefix+Padding(start)+suffix)+"~", 0, meMenuGrayed); popup.Add(Naming(prefix+Padding(last)+suffix), 0, meMenuGrayed); popup.Add("----", 0, meMenuSeparator); popup.AddPopup("プリセット", preset); popup.Add("----", 0, meMenuSeparator); popup.Add("始値: "+ start, 2); popup.Add("行数: "+ lines, 3, ((sel.Text)? meMenuGrayed:0)); popup.Add("増分: "+ incre, 4); popup.Add("桁数: "+ digit +"桁以上", 5, (supply? 0:meMenuGrayed)); popup.Add("桁埋め: "+ Naming(supply), 6); popup.Add("接頭辞: "+ Naming(prefix), 7); popup.Add("接尾辞: "+ Naming(suffix), 9); //メニューを表示して処理 tr = popup.Track(0); if (tr>100) { cmd[tr]["cmd"](); //プリセットの実行 if (sel.Text) lines = 1 + by - ty; //範囲選択時、行数は固定させる } switch (tr) { case 1: sel.Text = Numbering(); Quit(); case 2: start = PromptEx("始値: ※半角数字/0 以上の整数",start,0); break; case 3: lines = PromptEx("行数: ※半角数字/1 以上の整数",lines,1); break; case 4: incre = PromptEx("増分: ※半角数字/0 以上の整数",incre,0); break; case 5: digit = PromptEx("桁数: ※半角数字/1 以上の整数",digit,1); break; case 6: supply = Prompt("桁埋め: ※半角1文字を推奨",supply); break; case 7: prefix = Prompt("接頭辞:",prefix); break; case 9: suffix = Prompt("接尾辞:",suffix); break; } } //▼桁埋め関数:現在値との桁数差を求め、桁埋めする function Padding(num) { var sup = ""; var diff = (digit > String(last).length)? digit: String(last).length; diff = diff - String(num).length; for (var i=0; i<diff; i++) sup += supply; return sup + num; }; //▼連番を挿入する関数 function Numbering() { var num = start; var output = []; if (sel.Text) { //◆範囲選択している場合 var input = sel.Text.split("\n"); for (var i=0; i<input.length; i++) { var text = prefix + Padding(num) + suffix + input[i]; output.push(text); num += incre; } return output.join("\n"); } else { //◆範囲選択していない場合 for (var i=0; i<lines; i++) { var text = prefix + Padding(num) + suffix + "\n"; output.push(text); num += incre; } return output.join(""); } }; //▼プロンプト拡張:入力文字を簡易判定 function PromptEx(text,input,mode) { var p = Prompt(text,input); switch (mode) { case 0: //0以上の整数 case 1: //1以上の整数 return (parseInt(p) >= mode)? parseInt(p): input; } return p; }; //▼メニュー表示補助関数 function Naming(str) { if (!str) return "(無し)"; //空欄の場合 (無し) と表示 str = str.replace(/ /g,"\u2423"); //半角空白をU+2423に str = str.replace(/\t/g," \u203A "); //水平タブを U+203A に return str; }; //▼メニュー生成用関数 function ListToMenu(List, M) { for (var i=0; i<List.length; i++) { var L = List[i]; //セパレータ if (typeof L == "string" && /^-+$/.test(L)) { M.Add(L, 0, meMenuSeparator); //サブメニュー } else if (typeof L[1] == "function") { var sub_popup = CreatePopupMenu(); M.AddPopup(L[0], sub_popup); var sub_f = []; L[1](sub_f); ListToMenu(sub_f, sub_popup); //再帰処理:サブメニュー作成 //コマンド } else if (typeof L[1] == "object") { cmd[cid] = L[1]; M.Add(Naming(L[0]), cid++); } } }; })(); </source> ==開発者メモ== * 半角数字以外の連番 →未定 「プリセット一覧」のような「連番タイプ一覧」を作る案がありましたが、繰上がり処理・桁埋め処理・メニュー処理が複雑になり、仕様がまとまらなくて頓挫しました。<br>個人的に、アルファベットやひらがなの連番は使用頻度が低く、開発意欲が湧きません。 * 文字入力時キャンセルすると(無し)になる仕様 現状、「仕様です」と言う他ありません。<br>キャンセルすると入力前の状態に戻る事を期待するのが自然だろうと思うのですが、空欄で OK した時とキャンセルした時の返り値が同じらしく、対策しようがありません。<br>解決法があれば、ご教授ください。
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
スポンサーリンク
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
スポンサーリンク
スポンサーリンク
案内
メインページ
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
練習用ページ
開発室
開発者のブログ
ツール
スポンサーリンク