JavaScriptのコメントを抜き出す
JavaScriptのコメントを抜き出すプログラムを書いてみました。strscanを使うとさくっとできます。
require 'strscan' require 'kconv' class Tokenizer def tokenize(str) tokens = [] s = StringScanner.new( str ) while ( !s.eos? ) if ( s.scan( /\/\*((.|\n)*?)\*\// ) != nil ) # /* ... */ 形式のコメント comment = [] s[1].split("\n").each {|l| tmp = l.gsub(/^\s*\*/, "").strip comment << tmp if tmp.length > 0 } tokens << comment.join("\n").tosjis elsif ( s.scan( /\/\/(.*)/ ) != nil ) # // ... 形式のコメント tokens << s[1].strip.tosjis elsif ( s.scan( /\s+/ ) != nil ) # 空白 elsif ( s.scan( /[^\s]+/ ) != nil ) # その他 end end return tokens end end
サンプル。container.jsのコメントを抜き出してみます。
str = IO.read( "./container.js" ) puts Tokenizer.new.tokenize(str)
実行結果です。長いので途中まで。
ネームスペース コンテナ @param {Function} module コンポーネント定義を行う関数。 循環生成防止用のフィールド。作成中のモジュールの一覧が入る。 名前でキャッシュを作っておく。 EagerSingletonなオブジェクトがあれば生成。 名前でキャッシュ コンポーネント名またはcontainer.Typeに対応するオブジェクトを取得します。 @param {String or container.Type} nameOrType コンポーネント名またはcontainer.Type @return 対応するオブジェクト。複数のコンポーネントがマッチした場合、最初の1つを返します。 キャッシュがなければスキャン ...
まぁ、コメントだけ抜き出してもAPIドキュメントにはならないんだけどね。