「自動箇条書き」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
編集の要約なし |
||
| 7行目: | 7行目: | ||
#title="箇条書き" | #title="箇条書き" | ||
// itemizer.js | // itemizer.js | ||
// 2013/03/ | // 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 = | var trymax = 5; | ||
var tyend = ( ty - trymax > 0 )? ty - trymax : 1 ; | var tyend = ( ty - trymax > 0 )? ty - trymax : 1 ; | ||
var line = ""; | var line = ""; | ||
| 21行目: | 21行目: | ||
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 ); | |||
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; | |||
} | |||
} | } | ||
| 37行目: | 39行目: | ||
function 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 ]; | |||
} | |||
} | } | ||
| 73行目: | 75行目: | ||
:*数字の加算時にインデントのチェックをするようにした。 | :*数字の加算時にインデントのチェックをするようにした。 | ||
:*その他こまかい動作の修正。 | :*その他こまかい動作の修正。 | ||
;20130315 | |||
:*空行があったときの動作を修正。 | |||
2013年3月15日 (金) 08:31時点における版
概要
- 箇条書きの行頭記号や数字を自動的に挿入します。
- 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 ];
}
}
更新履歴
- 20130306
-
- 全角数字に対応。
- 箇条書きが一行しかないとエラーになるのを修正。
- 20130307
-
- 数字の加算時にインデントのチェックをするようにした。
- その他こまかい動作の修正。
- 20130315
-
- 空行があったときの動作を修正。
スポンサーリンク