連番の挿入

提供: MeryWiki
2025年6月30日 (月) 00:30時点におけるMSY-07 (トーク | 投稿記録)による版 (SyntaxHighlightにcopyの追加)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要[編集]

ナンバリング.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");
スポンサーリンク