🟩 もくじ
サクラエディタのJavaScriptマクロで、ツイートの絶対年月日がブレイクする位置に区切りの見出しをつける
// datekaiseki.js
// 全選択してテキストを取得
Editor.SelectAll();
var text = Editor.GetSelectedString();
// 改行コードで分割して1行ずつ処理
var lines = text.split(/\r?\n/);
var result = [];
// 英語の月名を数値に変換するマッピング
var monthMap = {
"Jan": 0, "Feb": 1, "Mar": 2, "Apr": 3, "May": 4, "Jun": 5,
"Jul": 6, "Aug": 7, "Sep": 8, "Oct": 9, "Nov": 10, "Dec": 11
};
var lastDate = null; // 直前の行のDateオブジェクトを記録
for (var i = 0; i < lines.length; i++) {
var line = lines[i];
// 行内から「Nov 1, 2020」や「Nov 3, 2021」のような形式を正規表現で探す
var match = line.match(/([A-Z][a-z]{2})\s+(\d{1,2}),\s+(\d{4})/);
if (match) {
var monthEn = match[1];
var dayNum = parseInt(match[2], 10);
var yearNum = parseInt(match[3], 10);
var monthNum = monthMap[monthEn];
if (monthNum !== undefined) {
// 現在の行の日付オブジェクトを作成 (時刻は00:00:00に統一)
var currentDate = new Date(yearNum, monthNum, dayNum);
if (lastDate === null) {
// 初回のみ無条件で見出しを出力
var yearStr = currentDate.getFullYear();
var monthStr = ("0" + (currentDate.getMonth() + 1)).slice(-2);
result.push("## " + yearStr + "-" + monthStr + "-");
} else {
// 直前の日付からの経過日数を計算
var diffTime = currentDate.getTime() - lastDate.getTime();
var diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));
// 日付が未来に進んでいる場合、その日数分だけ見出しを出力する
if (diffDays > 0) {
for (var d = 0; d < diffDays; d++) {
var targetDate = new Date(lastDate.getTime());
targetDate.setDate(targetDate.getDate() + d + 1);
var yearStr = targetDate.getFullYear();
var monthStr = ("0" + (targetDate.getMonth() + 1)).slice(-2);
// ループの最後(=現在の行と同じ日付)は実際のデータがあるので通常見出し、
// それより前のループ(=途中のスキップされた日付)は「|なし」を付与
if (d < diffDays - 1) {
result.push("## " + yearStr + "-" + monthStr + "-|なし");
} else {
result.push("## " + yearStr + "-" + monthStr + "-");
}
}
}
}
lastDate = currentDate; // 基準日を更新
}
}
// 元の行を追加
result.push(line);
}
// 編集中のテキストを更新
Editor.InsText(result.join("\r\n"));
// 選択状態を解除してクリップボードにコピー
Editor.SelectAll(0);
Editor.Copy(0);
【欠点1】:月初あたりの初回ツイート日以前において[ツイートなし=見出しなし]は人間が判断して補う必要がある
- 例えば、## 2019-09-06が初回ツイートなしだとしたら、[## 2019-09-(01)|なし][## 2019-09-(02)|なし][## 2019-09-(03)|なし][## 2019-09-(04)|なし][## 2019-09-(05)|なし]を人間が手動で補う。
- (01)~(05)は、連番マクロhiduke.jsを使うなら、打ち込む必要はない。[## 2019-09-]を5行分挿入しておくだけでよい。
【欠点2】:月末あたりの最終ツイート日以降において[ツイートなし=見出しなし]は人間が判断して補う必要がある
- 例えば、## 2019-09-30がツイートなしだとしたら、## 2019-09-29があれば、そこで見出しが止まっているので、## 2019-09-30を人間が手で補う必要がある。
- 連番マクロhiduke.jsを使うなら、[## 2019-09-]までしか打ち込む必要がない。