Macro/投稿/175

http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F175


Top > Macro > 投稿 > 175

PHP \& JS向けのxDocコメント作成

  • ページ: Macro/投稿
  • 作者: てふてふ?
  • カテゴリー: js
  • 投稿日: 2007-09-24 (月) 20:53:38

メッセージ

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

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


  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
/**
 * サクラエディタマクロ
 * 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();
    }
  }
}
 
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);
 
 
  // コメントの作成
  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("エラー終了");
  }
}

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2014-02-03 (月) 14:17:36 (1536d)