「アウトラインのノードレベルを下げる」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
タブの除去
MSY-07 (トーク | 投稿記録)
with文を使用しないソースコードに修正
28行目: 28行目:
reg = new RegExp("^\\" + NdMkr + "+");
reg = new RegExp("^\\" + NdMkr + "+");


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


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


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


//カーソル手前に存在する先頭がノード記号である行から、旧ノード名を取得
//カーソル手前に存在する先頭がノード記号である行から、旧ノード名を取得
//先頭n文字がノードの深さを示している想定
//先頭n文字がノードの深さを示している想定


if(Find("^\\"+ NdMkr , meFindPrevious | meFindReplaceRegExp) > 0){
if(sel.Find("^\\"+ NdMkr , meFindPrevious | meFindReplaceRegExp) > 0){
SelectLine();
sel.SelectLine();
ndNmOld = Text;
ndNmOld = sel.Text;


//旧ノード名の先頭にもう1文字追加し、新ノード名とする(深さを1増やしレベルを下げる)
//旧ノード名の先頭にもう1文字追加し、新ノード名とする(深さを1増やしレベルを下げる)
ndNmNew = NdMkr + ndNmOld;
ndNmNew = NdMkr + ndNmOld;


//選択中の旧ノード名文字列を削除し、新ノード名を追記する。
//選択中の旧ノード名文字列を削除し、新ノード名を追記する。
Delete();
sel.Delete();
document.write(ndNmNew);
document.Write(ndNmNew);


pos ++;
pos ++;
}
}
 
//カーソル位置の復帰
sel.SetActivePos (pos, false);


//カーソル位置の復帰
SetActivePos (pos, false);
}
document.HighlightFind = false;
document.HighlightFind = false;
</syntaxhighlight>
</syntaxhighlight>

2025年1月6日 (月) 19:34時点における版

当方プログラムをする身ではないため、不適切な記述があるかもしれません。訂正・更新あればよろしくお願いします。

#title = "ノードレベルを下げる"
/*******************************************************************************************************
********************************************************************************************************
**
**  当マクロはhalna氏作成のAndroidアプリ「ハルナアウトライン」
**  https://play.google.com/store/apps/details?id=jp.blogspot.halnablue.HalnaOutliner
**  とMeryを併用する前提で、Mery側に欲しい機能を私が勝手にマクロで実装したものです。
**  当マクロはhalna氏作成のAndroidアプリ「ハルナアウトライン」と直接の関係はありません。
**  当マクロについてhalna氏への問い合わせはおやめください。
**  
**  選択中のノードの「ノードを示す文字」を一つ追加する。
**  但し、Meryの仕様上8階層目以降はMeryのアウトラインに適用されない。
**  ノードを示す記号にはハルナアウトライン用に"."を用いる。
**  NdMkrの値を変更すればMarkdownやらにも使えるかもしれません(未検証)。
**
********************************************************************************************************
*******************************************************************************************************/

var NdMkr = ".";
var cntMkr = 0;
var ndNmOld = "";
var ndNmNew = "";
var pos = 0;

reg = new RegExp("^\\" + NdMkr + "+");

var sel = document.selection;

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

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

//カーソル手前に存在する先頭がノード記号である行から、旧ノード名を取得
//先頭n文字がノードの深さを示している想定

if(sel.Find("^\\"+ NdMkr , meFindPrevious | meFindReplaceRegExp) > 0){
	sel.SelectLine();
	ndNmOld = sel.Text;

	//旧ノード名の先頭にもう1文字追加し、新ノード名とする(深さを1増やしレベルを下げる)
	ndNmNew = NdMkr + ndNmOld;

	//選択中の旧ノード名文字列を削除し、新ノード名を追記する。
	sel.Delete();
	document.Write(ndNmNew);

	pos ++;
}

//カーソル位置の復帰
sel.SetActivePos (pos, false);

document.HighlightFind = false;
スポンサーリンク