@@ -31,12 +31,23 @@ class << self
3131 def run ( *arguments )
3232 new . run ( *arguments )
3333 end
34+
35+ # Adds a parser to the default parser list.
36+ #
37+ # @param (see #add_parser)
38+ # @return [void]
39+ #
40+ # @see #add_parser
41+ def add_parser ( parser )
42+ @@default_parsers . unshift ( parser )
43+ end
3444 end
3545
3646 include GetText
3747
3848 bindtextdomain ( "rgettext" )
3949
50+ # @api private
4051 @@default_parsers = [ ]
4152 builtin_parser_info_list = [
4253 [ "glade" , "GladeParser" ] ,
@@ -66,10 +77,10 @@ def initialize #:nodoc:
6677 @copyright_holder = nil
6778 end
6879
69- # How to add your option parser
7080 # The option parser module requires to have target?(file) and
7181 # parser(file, ary) method.
7282 #
83+ # @example How to add your option parser
7384 # require "gettext/tools/xgettext"
7485 # module FooParser
7586 # module_function
@@ -109,8 +120,14 @@ def initialize #:nodoc:
109120 # end
110121 #
111122 # GetText::XGetText.add_parser(FooParser)
112- def add_parser ( klass )
113- @parsers . insert ( 0 , klass )
123+ #
124+ # @param [#target?, #parse] parser
125+ # It parses target file and extracts translate target messages from the
126+ # target file. If there are multiple target files, parser.parse is
127+ # called multiple times.
128+ # @return [void]
129+ def add_parser ( parser )
130+ @parsers . insert ( 0 , parser )
114131 end
115132
116133 def generate_pot_header # :nodoc:
@@ -156,7 +173,8 @@ def parse(paths) # :nodoc:
156173 @parsers . each do |klass |
157174 next unless klass . target? ( path )
158175
159- if klass . method ( :parse ) . arity == 1
176+ parse_method = klass . method ( :parse )
177+ if parse_method . arity == 1 or parse_method . arity == -1
160178 targets = klass . parse ( path )
161179 else
162180 # For backward compatibility
0 commit comments