「自動箇条書き」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
編集の要約なし |
||
| 1行目: | 1行目: | ||
箇条書きの行頭記号や数字を自動的に挿入します。 | === 概要 === | ||
Shift+Enterに登録して便利に使っています。<br> | *箇条書きの行頭記号や数字を自動的に挿入します。 | ||
*Shift+Enterに登録して便利に使っています。 | |||
*行末で実行する場合とインデントをずらして実行する場合を考えました。 | |||
<br> | |||
<pre> | <pre> | ||
#title="箇条書き" | #title="箇条書き" | ||
// itemizer.js | // itemizer.js | ||
// 2013/03/ | // 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 = | var trymax = 9; | ||
var | var tyend = ( ty - trymax > 0 )? ty - trymax : 1 ; | ||
var line = ""; | var line = ""; | ||
var result; | var result; | ||
var | var resultary = []; | ||
for ( var 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 ){ | ||
if ( result[ 1 ] == indent ){ | |||
resultary.unshift( result.slice( 0 ) ) | |||
} else if ( result[ 1 ] < indent ){ | |||
break; | |||
} | |||
} | } | ||
} | } | ||
Editor.ActiveDocument.Write( bulletSucc( | Editor.ActiveDocument.Write( bulletSucc( resultary, thisline ) ); | ||
function bulletSucc( | function bulletSucc( resultary, thisline ){ | ||
if ( | if ( resultary.length == 0 ){ return firstitem } | ||
var chklast = | var chklast = resultary.pop(); | ||
var chklastlast = | var chklastlast = resultary.pop(); | ||
var i = ( | var i = ( chklastlast == null || isNaN( chklast[ 3 ] ) || isNaN( chklastlast[ 3 ] ) )? 1 : chklast[ 3 ] - chklastlast[ 3 ] ; | ||
var s = "", r3 = | 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 ); | ||
} | } | ||
} | } | ||
} | |||
if ( thisline.replace( /^[ \t]+/, "" ).length == 0 ){ | |||
return chklast[ 2 ] + s + chklast[ 4 ] + chklast[ 5 ]; | |||
} else { | } else { | ||
return "\n" + chklast[ 1 ] + chklast[ 2 ] + s + chklast[ 4 ] + chklast[ 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
-
- 数字の加算時にインデントのチェックをするようにした。
- その他こまかい動作の修正。
スポンサーリンク