自動箇条書き

提供: MeryWiki
2024年9月3日 (火) 10:42時点におけるMSY-07 (トーク | 投稿記録)による版 (変更履歴: 句点の除去)
ナビゲーションに移動 検索に移動

概要

  • 箇条書きの行頭記号や数字を自動的に挿入します。
  • Shift+Enterに登録して便利に使っています。
  • 行末で実行する場合とインデントをずらして実行する場合を考えました。

ソースコード

#language = "JScript"
#title = "箇条書き"
// itemizer.js
// 2013-03-15

var firstitem = "・";
var reg = /^([\t  ]*)(?:([((]*)([a-zA-Z]+|[0-9]+|[0-9]+)([))\.. ]+)|([--・・**■□]))/;

var ty = Editor.ActiveDocument.Selection.GetActivePointY(mePosLogical);
var trymax = 5;
var tyend = (ty - trymax > 0) ? ty - trymax : 1;
var line = "";
var result;
var resultary = [];
var thisline = Editor.ActiveDocument.GetLine(ty, 0);
var indent = thisline.replace(/^([ \t]*).*/, "$1");
for (var i = ty; i >= tyend; i--) {
	line = Editor.ActiveDocument.GetLine(i, 0);
	var linechk = line.replace(/^([ \t]*).*/, "$1");
	if (i < ty && linechk.length < indent.length) {
		break;
	}
	result = reg.exec(line);
	if (result != null) {
		if (result[1] == indent) {
			resultary.unshift(result.slice(0));
		} else if (result[1] < indent) {
			break;
		}
	} else if (resultary.length > 0) {
		break;
	}
}

Editor.ActiveDocument.Write(bulletSucc(resultary, thisline));

function bulletSucc(resultary, thisline) {
	if (resultary.length == 0) {
		return firstitem;
	}
	var chklast = resultary.pop();
	var chklastlast = resultary.pop();
	var i = (chklastlast == null || isNaN(chklast[3]) || isNaN(chklastlast[3])) ? 1 : chklast[3] - chklastlast[3];
	var s = "", r3 = (chklast == null) ? 0 : chklast[3];
	if (r3) {
		if (isNaN(r3)) {
			if (r3 == "9") {
				s = 10;
			} else {
				i = (r3 == "z" || r3 == "Z") ? -25 : 1;
				s = String.fromCharCode(r3.charCodeAt(r3.length - 1) + i);
			}
		} else {
			s = Number(r3) + i;
			s = (s > 0) ? s : 0;
			if (r3.charAt(0) == "0") {
				s = ("0000" + s).slice(-r3.length);
			}
		}
	}
	if (thisline.replace(/^[ \t]+/, "").length == 0) {
		return chklast[2] + s + chklast[4] + chklast[5];
	} else {
		return "\n" + chklast[1] + chklast[2] + s + chklast[4] + chklast[5];
	}
}

変更履歴

  • 2013-03-15
    • 空行があったときの動作を修正
  • 2013-03-07
    • 数字の加算時にインデントのチェックをするようにした
    • その他こまかい動作の修正
  • 2013-03-06
    • 全角数字に対応
    • 箇条書きが一行しかないとエラーになるのを修正
スポンサーリンク