連番の挿入
概要[編集]
ナンバリング.js
- 連番を行頭に挿入します。次の文字から始まる連番を挿入できます。
- a,a,A,A,イ,い,ア,あ,i,ⅰ,I,Ⅰ,一,壱,甲,α,Α
- 数字の桁幅は、5桁まで対応しています。
- 数字以外はリストの終わりに達したら先頭に戻ります。
- ポップアップメニュー非選択の場合、それ以降の“menu.Track(0)”は非選択で素通りします。この場合、初期値が設定されます。
- 各ポップアップメニューの初期値は、半角数字・2桁・ゼロ埋め・半角括弧、です。
ソースコード[編集]
// numbering.js
// 2012/12/03
if (document.selection.Text == ""){Quit()};
// 接頭語と接尾語。
var prefix = "\t"; // promptでタブの入力方法が不明のため。
var suffix = "\t";
// 表示桁数。とりあえず5桁まで対応。
var dig = 1;
var pad_zero = "0000"
var pad_spc = " "
// 数字のとき、桁の空きをゼロで埋めるか。
var ZeroPadding = true;
// 開始番号(開始位置)のずらし量。使っていません。
var start_at = 0;
// 連番の種別。
var pattern = "0";
var alph_hans = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
var alph_zens = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
var alph_hanl = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
var alph_zenl = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
var iro_kata = ["イ","ロ","ハ","ニ","ホ","ヘ","ト","チ","リ","ヌ","ル","ヲ","ワ","カ","ヨ","タ","レ","ソ","ツ","ネ","ナ","ラ","ム","ウ","ヰ","ノ","オ","ク","ヤ","マ","ケ","フ","コ","エ","テ","ア","サ","キ","ユ","メ","ミ","シ","ヱ","ヒ","モ","セ","ス","ン"];
var iro_hira = ["い","ろ","は","に","ほ","へ","と","ち","り","ぬ","る","を","わ","か","よ","た","れ","そ","つ","ね","な","ら","む","う","ゐ","の","お","く","や","ま","け","ふ","こ","え","て","あ","さ","き","ゆ","め","み","し","ゑ","ひ","も","せ","す","ん"];
var aiu_kata = ["ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ヰ","ヱ","ヲ","ン"];
var aiu_hira = ["あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ","た","ち","つ","て","と","な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ","ま","み","む","め","も","や","ゆ","よ","ら","り","る","れ","ろ","わ","ゐ","ゑ","を","ん"];
var roma_hans = ["i","ii","iii","iv","v","vi","vii","viii","xi","x","xi","xii","xiii","xiv","xv","xvi","xvii","xviii","xix","xx"];
var roma_zens = ["ⅰ","ⅱ","ⅲ","ⅳ","ⅴ","ⅵ","ⅶ","ⅷ","ⅸ","ⅹ"];
var roma_hanl = ["I","II","III","IV","V","VI","VII","VIII","XI","X","XI","XII","XIII","XIV","XV","XVI","XVII","XVIII","XIX","XX"];
var roma_zenl = ["Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ","Ⅹ"];
var kouotsu = ["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"];
var grek_zens = ["α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","σ","τ","υ","φ","χ","ψ","ω"];
var grek_zenl = ["Α","Β","Γ","Δ","Ε","Ζ","Η","Θ","Ι","Κ","Λ","Μ","Ν","Ξ","Ο","Π","Ρ","Σ","Τ","Υ","Φ","Χ","Ψ","Ω"];
var kigou = ["☆"];
var su_han= "0123456789 ";
var su_zen= "0123456789 ";
var kansuji = ["一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十"]
var daiji = ["壱","弐","参","四","五","六","七","八","九","拾","拾壱","拾弐","拾参","拾四","拾五","拾六","拾七","拾八","拾九","弐拾"]
var menui = CreatePopupMenu();
// 使わないものは、適当にコメントアウトしてください。
// meMenuGrayed - 無効。
menui.Add("1,2,3,…(半角)", 1, meMenuChecked);
menui.Add("1,2,3,…", 2, 0);
menui.Add("区切り", 0, meMenuSeparator);
menui.Add("a,b,c,…(半角)", 11, 0);
menui.Add("A,B,C,…(半角)", 13, 0);
menui.Add("a,b,c,…", 12, 0);
menui.Add("A,B,C,…", 14, 0);
menui.Add("区切り", 0, meMenuSeparator);
menui.Add("イ,ロ,ハ,…", 21, 0);
menui.Add("い,ろ,は,…", 22, 0);
menui.Add("ア,イ,ウ,…", 23, 0);
menui.Add("あ,い,う,…", 24, 0);
menui.Add("区切り", 0, meMenuSeparator);
menui.Add("i,ii,iii,…(半角)", 31, 0);
menui.Add("I,II,III,…(半角)", 32, 0);
menui.Add("ⅰ,ⅱ,ⅲ,…", 33, meMenuGrayed);
menui.Add("Ⅰ,Ⅱ,Ⅲ,…", 34, meMenuGrayed);
menui.Add("区切り", 0, meMenuSeparator);
menui.Add("一,二,三,…", 51, 0);
menui.Add("壱,弐,参,…", 52, 0);
menui.Add("甲,乙,丙,…", 53, 0);
menui.Add("区切り", 0, meMenuSeparator);
menui.Add("α,β,γ,…", 41, 0);
menui.Add("Α,Β,Γ,…", 42, 0);
menui.Add("区切り", 0, meMenuSeparator);
menui.Add("その他(カンマ区切りで指定)", 98, 0);
menui.Add("区切り", 0, meMenuSeparator);
menui.Add("キャンセル", 99, 0);
//var pt = menui.Track(mePosMouse)
var pt = menui.Track(0);
switch(pt){
case 0: pattern = "0"; setDigPadding(); break; // meMenuCheckedと同じ
case 1: pattern = "0"; setDigPadding(); break; // meMenuChecked
case 2: pattern = "0"; setDigPadding(); break;
case 11: pattern = "a"; break;
case 12: pattern = "a"; break;
case 13: pattern = "A"; break;
case 14: pattern = "A"; break;
case 21: pattern = "イ"; break;
case 22: pattern = "い"; break;
case 23: pattern = "ア"; break;
case 24: pattern = "あ"; break;
case 31: pattern = "i"; break;
case 32: pattern = "I"; break;
case 33: pattern = "ⅰ"; break;
case 34: pattern = "Ⅰ"; break;
case 41: pattern = "α"; break;
case 42: pattern = "Α"; break;
case 51: pattern = "一"; break;
case 52: pattern = "壱"; break;
case 53: pattern = "甲"; break;
case 98: pattern = "☆";
kigou = prompt("記号等のリスト(カンマ区切り)を入力してください。", "> ,>> ,>>> ,>>>>").split(",");
break;
case 99: Quit();
default:
}
function setDigPadding(){
dig = setDigit();
if (dig > 1){ZeroPadding = setZeroPadding();}
}
function setDigit(){
var menud = CreatePopupMenu();
menud.Add("1桁", 1, 0);
menud.Add("2桁", 2, meMenuChecked);
menud.Add("3桁", 3, 0);
menud.Add("4桁", 4, 0);
menud.Add("5桁", 5, 0);
var r = menud.Track(0);
// var r = menud.Track(mePosMouse);
return (r==0)? 2: r;
}
function setZeroPadding(){
if (dig < 2){
return true
}else{
var menuz = CreatePopupMenu();
menuz.Add("ゼロ埋め", 1, meMenuChecked);
menuz.Add("空白埋め", 2, 0);
var r = menuz.Track(0);
// var r = menuz.Track(mePosMouse);
return (r==2)? false: true;
}
}
var menuf = CreatePopupMenu();
menuf.Add("()(半角)", 11, meMenuChecked);
menuf.Add("()", 21, 0);
menuf.Add("区切り", 0, meMenuSeparator);
menuf.Add(".(半角)", 12, 0);
menuf.Add(".", 22, 0);
menuf.Add("区切り", 0, meMenuSeparator);
menuf.Add(",(半角)", 13, 0);
menuf.Add(",", 23, 0);
menuf.Add("区切り", 0, meMenuSeparator);
menuf.Add("“第”", 31, 0);
menuf.Add("無し", 97, 0);
menuf.Add("指定 or タブ", 98, 0);
menuf.Add("区切り", 0, meMenuSeparator);
menuf.Add("キャンセル", 99, 0);
var fx = menuf.Track(0);
//var fx = menuf.Track(mePosMouse);
switch(fx){
case 0: prefix = "("; suffix = ")"; break; // meMenuCheckedと同じ
case 11: prefix = "("; suffix = ")"; break; // meMenuChecked
case 12: prefix = ""; suffix = "."; break;
case 13: prefix = ""; suffix = ", "; break;
case 21: prefix = "("; suffix = ")"; break;
case 22: prefix = ""; suffix = "."; break;
case 23: prefix = ""; suffix = ","; break;
case 31: prefix = "第"; suffix = ""; break;
case 97: prefix = ""; suffix = ""; break;
case 98:
var px = prompt("prefix(接頭語)", prefix);
var sx = prompt("suffix(接尾語)", suffix);
prefix = px;
suffix = sx;
break;
case 99: Quit();
default :
}
// 選択範囲の調整
var sel = Editor.ActiveDocument.Selection;
var ty = sel.GetTopPointY(mePosLogical);
var bx = sel.GetBottomPointX(mePosLogical);
var by = sel.GetBottomPointY(mePosLogical);
sel.SetActivePoint(mePosLogical, 1, ty, false);
sel.SetActivePoint(mePosLogical, bx, by, true);
if ((bx == 1)&&(ty != by)){
sel.WordLeft(true, 1);
}else{
sel.EndOfLine(true, mePosLogical);
};
var s_in = sel.Text.split("\n");
var s_out = [];
for (var i in s_in) {
s_out.push(header(i) + s_in[i]);
}
function header(i){
i = +i + start_at;
var nbr = 1 + i;
nbr += "" // <= nbrを文字列に変換。
if (nbr.length < dig){
nbr = (ZeroPadding)? (pad_zero + nbr).slice(-dig): (pad_spc + nbr).slice(-dig);
}
switch(pattern){
case "0":
break;
case "0":
var zensu = "";
for (var j in nbr.split("")){
zensu += su_zen.substr(su_han.indexOf(nbr.substr(j,1)), 1);
}
nbr = zensu
break;
case "a": nbr = alph_hans[i % alph_hans.length]; break;
case "a": nbr = alph_zens[i % alph_zens.length]; break;
case "A": nbr = alph_hanl[i % alph_hanl.length]; break;
case "A": nbr = alph_zenl[i % alph_zenl.length]; break;
case "イ": nbr = iro_kata[i % iro_kata.length]; break;
case "い": nbr = iro_hira[i % iro_hira.length]; break;
case "ア": nbr = aiu_kata[i % aiu_kata.length]; break;
case "あ": nbr = aiu_hira[i % aiu_hira.length]; break;
case "i": nbr = roma_hans[i % roma_hans.length]; break;
case "ⅰ": nbr = roma_zens[i % roma_zens.length]; break;
case "I": nbr = roma_hanl[i % roma_hanl.length]; break;
case "Ⅰ": nbr = roma_zenl[i % roma_zenl.length]; break;
case "α": nbr = grek_zens[i % grek_zens.length]; break;
case "Α": nbr = grek_zenl[i % grek_zenl.length]; break;
case "一": nbr = kansuji[i % kansuji.length]; break;
case "壱": nbr = daiji[i % daiji.length]; break;
case "甲": nbr = kouotsu[i % kouotsu.length]; break;
case "☆":
if (kigou.length == 0){
nbr = "";
}else{
nbr = kigou[i % kigou.length];
}
break;
default :
}
return prefix + nbr + suffix
}
// 選択部分を書き換える
sel.Text = s_out.join("\n");
スポンサーリンク