読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

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ドキュメントにはならないんだけどね。