「アウトライン用ノード追加」の版間の差分
ナビゲーションに移動
検索に移動
注意事項の追加 |
変数にvarの宣言を追加 |
||
| (同じ利用者による、間の1版が非表示) | |||
| 1行目: | 1行目: | ||
2025年1月11日現在、Google Playでハルナアウトラインがダウンロードできないため、このマクロを使用する意味がなくなりました。 | 2025年1月11日現在、Google Playでハルナアウトラインがダウンロードできないため、このマクロを使用する意味がなくなりました。 | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript" copy> | ||
#title = "ノード追加" | #title = "ノード追加" | ||
/*********************************************************************************************************** | /*********************************************************************************************************** | ||
| 33行目: | 33行目: | ||
//カーソル位置を保持 | //カーソル位置を保持 | ||
pos = sel.GetActivePos(); | var pos = sel.GetActivePos(); | ||
//ノード行先頭にカーソルがある場合、自ノードを取り漏らすためカーソルを移動 | //ノード行先頭にカーソルがある場合、自ノードを取り漏らすためカーソルを移動 | ||
| 49行目: | 49行目: | ||
//行頭ノード記号の数(ノードの深さ)を取得 | //行頭ノード記号の数(ノードの深さ)を取得 | ||
reg = new RegExp("^\\" + NdMkr + "+"); | var reg = new RegExp("^\\" + NdMkr + "+"); | ||
cntMkr = sel.Text.match(reg)[0].length; | cntMkr = sel.Text.match(reg)[0].length; | ||
| 72行目: | 72行目: | ||
//ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加 | //ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加 | ||
for(step = 0; step < cntMkr; step++){ | for(var step = 0; step < cntMkr; step++){ | ||
document.Write(NdMkr); | document.Write(NdMkr); | ||
} | } | ||
| 85行目: | 85行目: | ||
//ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加 | //ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加 | ||
for(step = 0; step < cntMkr; step++){ | for(var step = 0; step < cntMkr; step++){ | ||
document.Write(NdMkr); | document.Write(NdMkr); | ||
} | } | ||
2025年11月24日 (月) 16:50時点における最新版
2025年1月11日現在、Google Playでハルナアウトラインがダウンロードできないため、このマクロを使用する意味がなくなりました。
#title = "ノード追加"
/***********************************************************************************************************
************************************************************************************************************
**
** 当マクロはhalna氏作成のAndroidアプリ「ハルナアウトライン」
** https://play.google.com/store/apps/details?id=jp.blogspot.halnablue.HalnaOutliner
** とMeryを併用する前提で、Mery側に欲しい機能を私が勝手にマクロで実装したものです。
** 当マクロはhalna氏作成のAndroidアプリ「ハルナアウトライン」と直接の関係はありません。
** 当マクロについてhalna氏への問い合わせはおやめください。
**
** 選択中のノードの末尾(実態は次のノードの手前)に「ノードを示す文字」を持った新規行を追加する。
** 追加されるノードの深さは現在カーソルが存在するノードと同じ深さとする。
** 追加する仮ノード名は"[AddedNode]"とする(仮)。
** ただし……
** ・ハルナアウトラインの.hol形式の階層付きテキストは、先頭ノードの手前に2行のデータ行があるためそれを考慮し、
** 先頭ノードよりも手前にカーソルがある状態では、先頭に深さ1のノードを追加する。
** ・最後尾のノードでは「次のノードの手前」が取得できないため、ファイル末尾を追加位置とする。
**
** ノードを示す記号にはハルナアウトライン用に"."を用いる。
** NdMkrの値を変更すればMarkdownやらにも使えるかもしれません(未検証)。
**
************************************************************************************************************
***********************************************************************************************************/
var NdMkr = ".";
var cntMkr = 0;
var adNodeNm = "[AddedNode]";
var sel = document.selection;
//カーソル位置を保持
var pos = sel.GetActivePos();
//ノード行先頭にカーソルがある場合、自ノードを取り漏らすためカーソルを移動
sel.EndOfLine(false,mePosLogical);
//先頭ノードより手前でない限り…
if(sel.Find("^\\"+ NdMkr , meFindPrevious | meFindReplaceRegExp) > 0){
//カーソル復帰し、行末にカーソルを移動
//ノード記号をカーソル手前へ検索して、発見した行を選択する。
sel.SetActivePos (pos, false);
sel.EndOfLine(false,mePosLogical);
sel.Find("^\\"+ NdMkr , meFindPrevious | meFindReplaceRegExp);
sel.SelectLine();
//行頭ノード記号の数(ノードの深さ)を取得
var reg = new RegExp("^\\" + NdMkr + "+");
cntMkr = sel.Text.match(reg)[0].length;
//次のノードを検索するためカーソルを移動
sel.LineDown(false, 1);
sel.StartOfLine(false,mePosLogical);
//カーソルより後にある行頭ノード記号の存在する行を取得
//末尾ノードでない限り…
if (sel.Find("^\\"+ NdMkr , meFindNext | meFindReplaceRegExp) > 0){
//その1行手前に新ノード用の行を追加する
//一行遡って行末へ移動
sel.LineUp(false, 1);
sel.EndOfLine(false,mePosLogical);
//改行、段落分の自動インデント発生を抑制できないためアンインデント、改行
sel.NewLine(1);
sel.SelectLine();
sel.Unindent(1);
sel.NewLine(1);
//ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加
for(var step = 0; step < cntMkr; step++){
document.Write(NdMkr);
}
document.Writeln(adNodeNm + "\r\n");
} else {
//末尾ノードの場合、「次ノードの手前」が取得できないため特殊処理
//ファイル末尾に追加する
sel.EndOfDocument(false);
sel.NewLine(2);
sel.StartOfLine(false,mePosLogical);
//ノードの深さに応じたノード記号と、仮ノード名[AddedNode]と、空行を追加
for(var step = 0; step < cntMkr; step++){
document.Write(NdMkr);
}
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;
スポンサーリンク