「自動箇条書き」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
編集の要約なし
MSY-07 (トーク | 投稿記録)
SyntaxHighlightにcopyの追加
 
(2人の利用者による、間の16版が非表示)
1行目: 1行目:
=== 概要 ===
== 概要 ==
*箇条書きの行頭記号や数字を自動的に挿入します。
* 箇条書きの行頭記号や数字を自動的に挿入します。
*Shift+Enterに登録して便利に使っています。
* Shift+Enterに登録して便利に使っています。
*行末で実行する場合とインデントをずらして実行する場合を考えました。
* 行末で実行する場合とインデントをずらして実行する場合を考えました。
<br>
 
<pre>
== ソースコード ==
#title="箇条書き"
<syntaxhighlight lang="javascript" copy>
#title = "箇条書き"
// itemizer.js
// itemizer.js
// 2013/03/15
// 2013-03-15


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


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


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


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


</pre>
== 変更履歴 ==
=== 更新履歴 ===
* 1.0.4 (2013-03-15)
;20130306
** 空行があったときの動作を修正
:*全角数字に対応。
* 1.0.3 (2013-03-07)
:*箇条書きが一行しかないとエラーになるのを修正。
** 数字の加算時にインデントのチェックをするようにした
;20130307
** その他こまかい動作の修正
:*数字の加算時にインデントのチェックをするようにした。
* 1.0.2 (2013-03-06)
:*その他こまかい動作の修正。
** 全角数字に対応
;20130315
** 箇条書きが一行しかないとエラーになるのを修正
:*空行があったときの動作を修正。
* 1.0.1 (2013-03-02)
** 不明
* 1.0.0 (2013-02-27)
** 初版

2025年6月30日 (月) 00:06時点における最新版

概要[編集]

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

ソースコード[編集]

#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] || "");
	}
}

変更履歴[編集]

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