「アウトライン用ノード追加」の版間の差分

MSY-07 (トーク | 投稿記録)
改行の修正
MSY-07 (トーク | 投稿記録)
変数にvarの宣言を追加
 
(同じ利用者による、間の4版が非表示)
1行目: 1行目:
当方プログラムをする身ではないため、不適切な記述があるかもしれません。訂正・更新あればよろしくお願いします。
2025年1月11日現在、Google Playでハルナアウトラインがダウンロードできないため、このマクロを使用する意味がなくなりました。


<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript" copy>
#title = "ノード追加"
#title = "ノード追加"
/***********************************************************************************************************
/***********************************************************************************************************
30行目: 30行目:
var adNodeNm = "[AddedNode]";
var adNodeNm = "[AddedNode]";


with (document.selection) {
var sel = document.selection;


//カーソル位置を保持
//カーソル位置を保持
pos = GetActivePos();
var pos = sel.GetActivePos();


//ノード行先頭にカーソルがある場合、自ノードを取り漏らすためカーソルを移動
//ノード行先頭にカーソルがある場合、自ノードを取り漏らすためカーソルを移動
EndOfLine(false,mePosLogical);
sel.EndOfLine(false,mePosLogical);


//先頭ノードより手前でない限り…
//先頭ノードより手前でない限り…
if(Find("^\\"+ NdMkr , meFindPrevious | meFindReplaceRegExp) > 0){
if(sel.Find("^\\"+ NdMkr , meFindPrevious | meFindReplaceRegExp) > 0){


//カーソル復帰し、行末にカーソルを移動
//カーソル復帰し、行末にカーソルを移動
//ノード記号をカーソル手前へ検索して、発見した行を選択する。
//ノード記号をカーソル手前へ検索して、発見した行を選択する。
SetActivePos (pos, false);
sel.SetActivePos (pos, false);
EndOfLine(false,mePosLogical);
sel.EndOfLine(false,mePosLogical);
Find("^\\"+ NdMkr , meFindPrevious | meFindReplaceRegExp);
sel.Find("^\\"+ NdMkr , meFindPrevious | meFindReplaceRegExp);
SelectLine();
sel.SelectLine();


//行頭ノード記号の数(ノードの深さ)を取得
//行頭ノード記号の数(ノードの深さ)を取得
reg = new RegExp("^\\" + NdMkr + "+");
var reg = new RegExp("^\\" + NdMkr + "+");
cntMkr = Text.match(reg)[0].length;
cntMkr = sel.Text.match(reg)[0].length;


//次のノードを検索するためカーソルを移動
//次のノードを検索するためカーソルを移動
LineDown(false, 1);
sel.LineDown(false, 1);
StartOfLine(false,mePosLogical);
sel.StartOfLine(false,mePosLogical);


//カーソルより後にある行頭ノード記号の存在する行を取得
//カーソルより後にある行頭ノード記号の存在する行を取得
//末尾ノードでない限り…
//末尾ノードでない限り…
if (Find("^\\"+ NdMkr , meFindNext | meFindReplaceRegExp) > 0){
if (sel.Find("^\\"+ NdMkr , meFindNext | meFindReplaceRegExp) > 0){
//その1行手前に新ノード用の行を追加する
//一行遡って行末へ移動
LineUp(false, 1);
EndOfLine(false,mePosLogical);


//改行、段落分の自動インデント発生を抑制できないためアンインデント、改行
//その1行手前に新ノード用の行を追加する
NewLine(1);
//一行遡って行末へ移動
SelectLine();
sel.LineUp(false, 1);
unindent(1);
sel.EndOfLine(false,mePosLogical);
NewLine(1);
//ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加
for(step = 0; step < cntMkr; step++){
document.Write(NdMkr);
}
document.Writeln(adNodeNm + "\r\n");


} else {
//改行、段落分の自動インデント発生を抑制できないためアンインデント、改行
//末尾ノードの場合、「次ノードの手前」が取得できないため特殊処理
sel.NewLine(1);
//ファイル末尾に追加する
sel.SelectLine();
EndOfDocument(false);
sel.Unindent(1);
NewLine(2);
sel.NewLine(1);
StartOfLine(false,mePosLogical);


//ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加
//ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加
for(step = 0; step < cntMkr; step++){
for(var step = 0; step < cntMkr; step++){
document.Write(NdMkr);
document.Write(NdMkr);
}
document.Writeln( adNodeNm + "\r\n");
}
}
document.Writeln(adNodeNm + "\r\n");


} else {
} else {
//先頭ノードより手前の時
//末尾ノードの場合、「次ノードの手前」が取得できないため特殊処理
//「手前のノードのノード記号の数」から深さを取得できないため特殊処理
//ファイル末尾に追加する
//先頭に、ハルナアウトライン用の特殊記述行がある前提
sel.EndOfDocument(false);
StartOfDocument();
sel.NewLine(2);
LineDown(false, 2);
sel.StartOfLine(false,mePosLogical);
NewLine();


//ノード記号1つと仮ノード名[AddedNode]と、空行を追加
//ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加
document.Write(NdMkr);
for(var step = 0; step < cntMkr; step++){
document.Write(NdMkr);
}
document.Writeln( adNodeNm + "\r\n");
document.Writeln( adNodeNm + "\r\n");
}
}


} else {
//先頭ノードより手前の時
//「手前のノードのノード記号の数」から深さを取得できないため特殊処理
//先頭に、ハルナアウトライン用の特殊記述行がある前提
sel.StartOfDocument();
sel.LineDown(false, 2);
sel.NewLine();


//ノード記号1つと仮ノード名[AddedNode]と、空行を追加
document.Write(NdMkr);
document.Writeln( adNodeNm + "\r\n");
}
}


document.HighlightFind = false;
document.HighlightFind = false;
</syntaxhighlight>
</syntaxhighlight>
スポンサーリンク