Hail2u

blosxomのエントリを作成する秀丸マクロ

$entDir = "X:\\hogehoge\\blog\\put_entries_here";

#posX = x;
#posY = y;
$srBuf = searchbuffer;
#srOpt = searchoption;

disabledraw;
escape;

moveto 0, 0;

replaceallfast "&",  "&";
replaceallfast "\"", """;
replaceallfast "<",  "&lt;";
replaceallfast ">",  "&gt;";
replaceallfast "'",  "&#39;";

movetolineno 1, 2;
#slNo = lineno;
gofileend;
#elNo = lineno;
#clNo = #slNo;

while(#clNo < #elNo){
  movetolineno 1, #clNo;
  if(code == 0x09){
    delete;
    insert "<blockquote>\n<p>";
    golineend2;
    insert "</p>\n</blockquote>";
    #clNo = #clNo + 2;
    #elNo = #elNo + 2;
  }
  else if(code == 0x23){
    delete;
    insert "<div class=\"image\"><img src=\"";
    searchdown "\\t", regular;
    delete;
    insert "\" alt=\"";
    searchdown "\\t", regular;
    delete;
    insert "\" width=\"";
    searchdown "\\t", regular;
    delete;
    insert "\" height=\"";
    golineend2;
    insert "\" /></div>";
  }
  else{
    insert "<p class=\"text\">";
    golineend2;
    insert "</p>";
  }
  #clNo = #clNo + 1;
}

moveto #posX, #posY;
setsearch $srBuf, #srOpt;
enabledraw;

loaddll hidemarudir + "\\DengakuDLL.dll";

CategoryMenu:
  #r = dllfunc("ENUMDIR", $entDir + "\\*.*");
  #i = 0;
  while(1){
    $dir = dllfuncstr("FINDNEXT");
    if($dir == ""){
      break;
    }
    else if($dir == "." || $dir == ".."){
        continue;
    }
    $categories[#i] = $dir;
    #i = #i + 1;
  }
  $categories[#i] = "新しいカテゴリを作成...";

  mousemenuarray $categories, #i + 1;

  if(result == #i + 1){
    call InputCategoryName;
    $catName = $$return;
  }
  else if(result != 0){
    $catName = $categories[result - 1];
  }
  else{
    goto CategoryMenu;
  }

$msgBody = "エントリーの名前を指定してください。";
InputEntryName:
  $entName = input($msgBody, "");
  if($entName == ""){
    goto InputEntryName;
  }

// message $entDir + "\\" + $catName + "\\" + $entName + ".txt";
saveas $entDir + "\\" + $catName + "\\" + $entName + ".txt", utf8;

endmacro;

InputCategoryName:
  $$temp = input("カテゴリの名前を指定してください。", "");
  if($$temp == ""){
    goto InputCategoryName;
  }
  if(!dllfunc("MKDIR", "/p " + $entDir + "\\" + $$temp)){
    goto InputCategoryName;
  }
  return $$temp;

こんな感じです。いのうさん。マクロ起動すると、実体参照化→マークアップ(ちょっとした構文あり)→カテゴリ一覧のメニューを表示→エントリ名を決めるInputBox表示→UTF-8で保存、とやってくれます。確認したらバッチファイルでFTPしてます。

ちょっとした構文は、行頭に水平タブ入れておくと引用マークアップするのと、

#test.png<TAB>Test<TAB>100<TAB>100

を、

<div class="image">
<img src="test.png" alt="Test" width="100" height="100" />
</div>

とマークアップしてくれるものしか作ってない。まぁ、どうにでも拡張できると思うんですが。