◀マクロトップへ
  • 396 PHP&JS向けのxDocコメント生成
    • 397 Re:PHP&JS向けのxDocコメント生成
      • 398 Re2:PHP&JS向けのxDocコメント生成
        • 399 Re3:PHP&JS向けのxDocコメント生成
  • [396] PHP&JS向けのxDocコメント生成 てふてふ 2007年09月24日 06:58

    はじめまして。
    ちょっとよさげなマクロができたので投稿します。

    JavaDocのようなコメントを生成します。
    PHPやJavaScriptなど、関数宣言に型を使わない言語専用です。
    (Javaはだめ)

    関数・クラス・変数・ファイルヘッダ対応のつもり。
    あえてJSぽく書いてみました。

    # Wikiに投稿したかったけどできなかったのでこちらへ。
    # 長くてすみませんが前・後編で。
    -----------------------------
    /**
    * サクラエディタマクロ
    * PHP・JS向けxDoc風コメント作成
    * @author てふてふさん
    * @license http://www.opensource.org/licenses/gpl-license.php GPL
    * @version 1.0
    * @link
    * @since sakura:1.5.5.0
    * @see 似たようなのがあったので参考にしました
    * @see → doxgen用のコメントを付加
    * @see http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F100
    *
    * 起動方法:対象となる function や class 行の上でマクロ起動。
    * 種別 :JScript
    */


    // 改行コードの取得
    var cr = ["\x0d\x0a", "\x0a", "\x0a"][Editor.GetLineCode()];
    d("cr:「" + cr + "」");

    /**
    * デバッグ出力
    * @param s 文字列
    */
    function d(s) {
    // Editor.AddTail(s + cr);
    }

    /**
    * オブジェクトの要素表示(デバッグ)
    * @param o オブジェクト
    */
    function inspect(o) {
    var s = "";
    for (key in o) {
    s += key + " => " + o[key].toString() + cr;
    }
    d(s);
    }

    /**
    * スクリプト離脱
    * @throw number=0の例外オブジェクト
    * @param s メッセージ
    */
    function exit(s) {
    throw {number: 0, message: s};
    }

    /**
    * ファイルヘッダを出力する
    */
    function fileHeader() {
    out.put("/**" + cr);
    out.put(" * " + cr);
    // 以下、不要なものはコメントアウトしてください。
    out.put(" * @package " + cr);
    out.put(" * @author " + cr);
    out.put(" * @copyright " + cr);
    out.put(" * @license " + cr);
    out.put(" * @version " + cr);
    out.put(" * @filesource " + cr);
    out.put(" * @link " + cr);
    out.put(" * @see " + cr);
    out.put(" * @since " + cr);
    out.put(" */" + cr);
    out.flush();
    up(out.line - 1);
    Editor.GoLineEnd();
    exit("ファイルヘッダ出力");
    }

    /**
    * カーソルを上に移動
    * @return
    * @param n 移動回数
    */
    function up(n) {
    if (n > 0) {
    for (var i = 0; i < n; i++) {
    Editor.Up();
    }
    } else if (n < 0) {
    for (var i = 0; i > n; i--) {
    Editor.Down();
    }
    }
    }
    • [397] Re:PHP&JS向けのxDocコメント生成 てふてふ 2007年09月24日 07:01


      try {

      /**
      * @var out 出力コメントオブジェクト
      */
      var out = {
      line: 0, /* 出力行数 */
      /**
      * コメント行追加
      * @param s 行。改行は自分で付加すること。
      */
      put: function(s) {
      this[this.line++] = s;
      },
      /**
      * コメント行出力
      */
      flush: function() {
      Editor.GoLineTop(1);
      out.buf = "";
      for (var i = 0; i < out.line; i++) {
      out.buf += out[i];
      }
      Editor.InsText(out.buf);
      }
      };

      // カーソル行取得
      var line = Editor.GetLineStr(0);
      if (line.length == 0) {
      exit("line.len = 0");
      }

      // 行番号取得
      Editor.GoLineTop();
      Editor.GoLineEnd_Sel();
      var lineno = Editor.GetSelectLineFrom().toString();

      // 1、2行目のときは、ファイルヘッダを出す。
      if (lineno <= 2) {
      fileHeader();
      exit("ファイルヘッダ出力");
      }

      // 行をトークンわけする
      var norm = line.match(/[\$a-zA-Z0-9_]+|\(|\)/g).toString();
      d("norm:" + norm);
      var tok = norm.split(",");
      if (tok.length == 0) {
      exit("tok.len = 0");
      }

      // インデントの取得
      var head = line.search(tok[0]);
      d("head:" + head);
      var indent = line.slice(0, head);
      d("indent:「" + indent + "」");

      out.put(indent + "/**" + cr);

      -------
      # だめだ~。前・中・後編だぁ。
      • [398] Re2:PHP&JS向けのxDocコメント生成 てふてふ 2007年09月24日 07:01

        // コメントの作成
        if (tok[0] == "function") {
        // 関数
        out.put(indent + " * " + cr);
        out.put(indent + " * @return " + cr);
        out.put(indent + " * @throws " + cr);
        for (var i = 3; i < tok.length && tok[i] != ")"; i++) {
        out.put(indent + " * @param " + tok[i] + " " + cr);
        }
        } else if (tok[0] == "class") {
        // クラス
        out.put(indent + " * " + cr);
        out.put(indent + " * @package " + cr);
        } else if (tok[0] == "var") {
        // 変数
        out.put(indent + " * " + cr);
        out.put(indent + " * @var"
        + (tok.length > 1 ? " " + tok[1] : "") + " " + cr);
        } else {
        // 空のコメント
        out.put(indent + " * " + cr);
        }
        out.put(indent + " */" + cr);

        // コメントの出力
        out.flush();
        // カーソル移動
        up(out.line - 1);
        Editor.GoLineEnd();

        d("正常終了");

        } catch (e) {
        if (e.number == 0) {
        d("離脱:" + e.message);
        } else {
        d(cr + e.name + ": " + e.description);
        d("エラー終了");
        }
        }
        ------
        おわり。
        • [399] Re3:PHP&JS向けのxDocコメント生成 げんた 2007年09月24日 20:55

          Wikiに転載しました.
          http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F175