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

提供: MeryWiki
ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
1行目: 1行目:
箇条書きの行頭記号や数字を自動的に挿入します。<br>
=== 概要 ===
Shift+Enterに登録して便利に使っています。<br>
*箇条書きの行頭記号や数字を自動的に挿入します。
*Shift+Enterに登録して便利に使っています。
*行末で実行する場合とインデントをずらして実行する場合を考えました。
<br>
<pre>
<pre>
#title="箇条書き"
#title="箇条書き"
// itemizer.js
// itemizer.js
// 2013/03/06
// 2013/03/07


var reg = /^([\t  ]*)(?:([((]*)([a-zA-Z]+|[0-9]+|[0-9]+)([))\.. ]+)|([--・・*]))/;
var firstitem = "(1)";
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 = 3;
var trymax = 9;
var starty = ( ty - trymax > 0 )? ty - trymax : 1 ;
var tyend = ( ty - trymax > 0 )? ty - trymax : 1 ;
var line = "";
var line = "";
var result;
var result;
var chk = [];
var resultary = [];
for ( var i = starty; i <= ty; i++ ){
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 );
line = Editor.ActiveDocument.GetLine( i, 0 );
var linechk = line.replace( /^([ \t]*).*/, "$1" );
if ( i < ty && linechk.length < indent.length ){ break }
result = reg.exec( line );
result = reg.exec( line );
if ( result != null ){
if ( result != null ){
chk.push( { indent : result[ 1 ], bullet : result[ 3 ] } );
if ( result[ 1 ] == indent ){
resultary.unshift( result.slice( 0 )  )
} else if ( result[ 1 ] < indent ){
break;
}
}
}
}
}


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


function bulletSucc( result, chk ){
function bulletSucc( resultary, thisline ){
if ( result == null ){ return "\n" };
if ( resultary.length == 0 ){ return firstitem }
var chklast = chk.pop();
var chklast = resultary.pop();
var chklastlast = chk.pop();
var chklastlast = resultary.pop();
var i = ( isNaN( chklast.bullet ) || chklastlast == null || isNaN( chklastlast.bullet ) || chklast.indent != chklastlast.indent )? 1 : chklast.bullet - chklastlast.bullet ;
var i = ( chklastlast == null || isNaN( chklast[ 3 ] ) || isNaN( chklastlast[ 3 ] ) )? 1 : chklast[ 3 ] - chklastlast[ 3 ] ;
var s = "", r3 = result[ 3 ];
var s = "", r3 = ( chklast == null )? 0 : chklast[ 3 ] ;
if ( r3 ){
if ( r3 ){
if  ( isNaN( r3 ) ){
if  ( isNaN( r3 ) ){
if ( r3 == "9" ){
if ( r3 == "9" ){
s = 10
s = 10;
} else {
} else {
i = ( r3 == "z" || r3 == "Z" )? -25 : 1 ;
i = ( r3 == "z" || r3 == "Z" )? -25 : 1 ;
43行目: 55行目:
if ( r3.charAt( 0 ) == "0" ){
if ( r3.charAt( 0 ) == "0" ){
s = ( "0000" + s ).slice( -r3.length );
s = ( "0000" + s ).slice( -r3.length );
} else if ( r3.charAt( 0 ) == " " ){
s = ( "    " + s ).slice( -r3.length );
}
}
}
}
}
if ( thisline.replace( /^[ \t]+/, "" ).length == 0 ){
return chklast[ 2 ] + s + chklast[ 4 ] + chklast[ 5 ];
} else {
} else {
s = "";
return "\n" + chklast[ 1 ] + chklast[ 2 ] + s + chklast[ 4 ] + chklast[ 5 ];
}
}
return "\n" + result[ 1 ] + result[ 2 ] + s + result[ 4 ] + result[ 5 ];
}
}
</pre>
</pre>
=== 更新履歴 ===
=== 更新履歴 ===
;20130306
;20130306
:*全角数字に対応。
:*全角数字に対応。
:*箇条書きが一行しかないとエラーになるのをこっそり修正。
:*箇条書きが一行しかないとエラーになるのを修正。
;20130307
:*数字の加算時にインデントのチェックをするようにした。
:*その他こまかい動作の修正。

2013年3月7日 (木) 19:49時点における版

概要

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


#title="箇条書き"
// itemizer.js
// 2013/03/07

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

var ty = Editor.ActiveDocument.Selection.GetActivePointY( mePosLogical );
var trymax = 9;
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;
		}
	}
}

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 ];
	}
}

更新履歴

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