崖っぷちの男

たぶん技術っぽいネタ。ブログ名が決められない

Flash Develop のマクロ

FlashDevelop のマクロ書いたことないなーと思ったので
何か書いてみることに。

言語は C# 。正直書いたことないのでコピペ。

このマクロの機能については、プロジェクトマネージャで複数の画像ファイルをコピーしてからこのマクロを実行すると、それらファイル名を元に各画像をあらわすクラスの定数の宣言文を作って、出力パネルに出力する。
ただし画像ファイル名がキャメルケースになってる必要あり。特にパスとか全然汎用性なし。マクロの引数を指定できれば汎用性をもたせられると思うけどやり方が分からない。

あと本当はプロジェクトマネージャで選択されているファイルの情報ってのを取得したかったけど、ソースを見てみたらどうも TreeView が private な感じでアクセス用のメソッドもないっぽいのでしょうがなくクリップボードのデータを使うようにした。ので使う前に対象ファイルをとりあえずコピーする必要あり。

using System;
using System.IO;
using System.Windows.Forms;
using PluginCore.Managers;
using System.Text.RegularExpressions;
public class OutputEmbedCode
{
     public static void Execute()
     {
          string basePath = "../images/";
         
          IDataObject iData = Clipboard.GetDataObject();
          if (iData.GetDataPresent(DataFormats.FileDrop)) {
               String[] files = (string[])iData.GetData(DataFormats.FileDrop);
              foreach (string file in files)
              {
                  string filename = System.IO.Path.GetFileName(file);
                  TraceManager.Add("\t\t[Embed(source=\"" + basePath + filename + "\")]");
                  TraceManager.Add("\t\tpublic static const " + CamelToUpperTitleCase(Path.GetFileNameWithoutExtension(filename)) + ":Class;");
              }
          } else {
              TraceManager.Add("Copy files before run this macro.");
          }
     }
    
     private static string CamelToUpperTitleCase(string text)
     {
          text = text.Substring(0, 1).ToUpper() + text.Substring(1);
          return Regex.Replace(text, @"(\B[A-Z])", @"_$1").ToUpper();
     }
}