「自動箇条書き」の版間の差分
編集の要約なし |
SyntaxHighlightにcopyの追加 |
||
| (3人の利用者による、間の19版が非表示) | |||
| 1行目: | 1行目: | ||
箇条書きの行頭記号や数字を自動的に挿入します。 | == 概要 == | ||
Shift+Enterに登録して便利に使っています。 | * 箇条書きの行頭記号や数字を自動的に挿入します。 | ||
* Shift+Enterに登録して便利に使っています。 | |||
* 行末で実行する場合とインデントをずらして実行する場合を考えました。 | |||
< | == ソースコード == | ||
#title="箇条書き" | <syntaxhighlight lang="javascript" copy> | ||
#title = "箇条書き" | |||
// itemizer.js | // itemizer.js | ||
// 2013 | // 2013-03-15 | ||
var reg = /^([\t ]*)(?:([((]*)([a-zA-Z]+|[0-9]+|[0-9]+)([))\.. ]+)|([--・・* | var firstitem = "・"; | ||
var reg = /^([\t ]*)(?:([((]*)([a-zA-Z]+|[0-9]+|[0-9]+)([))\.. ]+)|([--・・**■□]))/; | |||
var ty = | var ty = editor.ActiveDocument.selection.GetActivePointY(mePosLogical); | ||
var trymax = | var trymax = 5; | ||
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); | ||
line = | var indent = thisline.replace(/^([ \t]*).*/, "$1"); | ||
result = reg.exec( line ); | for (var i = ty; i >= tyend; i--) { | ||
if ( result != null ){ | 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( | function bulletSucc(resultary, thisline) { | ||
if ( | if (resultary.length == 0) { | ||
var chklast = | return firstitem; | ||
var chklastlast = | } | ||
var i = ( | var chklast = resultary.pop(); | ||
var s = "", r3 = | var chklastlast = resultary.pop(); | ||
if ( r3 ){ | var i = (chklastlast == null || isNaN(chklast[3]) || isNaN(chklastlast[3])) ? 1 : chklast[3] - chklastlast[3]; | ||
if | var s = "", r3 = (chklast == null) ? 0 : chklast[3]; | ||
if ( r3 == "9" ){ | if (r3) { | ||
s = 10 | if (isNaN(r3)) { | ||
if (r3 == "9") { | |||
s = 10; | |||
} else { | } else { | ||
i = ( r3 == "z" || r3 == "Z" )? -25 : 1 ; | i = (r3 == "z" || r3 == "Z") ? -25 : 1; | ||
s = String.fromCharCode( r3.charCodeAt( r3.length - 1 ) + i ) ; | s = String.fromCharCode(r3.charCodeAt(r3.length - 1) + i); | ||
} | } | ||
} else { | } else { | ||
s = Number( r3 ) + i; | s = Number(r3) + i; | ||
s = ( s > 0 )? s : 0 ; | s = (s > 0) ? s : 0; | ||
if ( r3.charAt( 0 ) == "0" ){ | if (r3.charAt(0) == "0") { | ||
s = ( "0000 | s = ("0000" + 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] || ""); | ||
} | } | ||
} | } | ||
</ | </syntaxhighlight> | ||
== 変更履歴 == | |||
* 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) | |||
** 初版 | |||
スポンサーリンク