Module: RubyGettextExtractor::ExtractorMethods
- Included in:
- Extractor18, Extractor19
- Defined in:
- lib/gettext_i18n_rails/ruby_gettext_extractor.rb
Instance Method Summary collapse
- #extract_key(args, seperator) ⇒ Object
- #extract_string(node) ⇒ Object
- #initialize(filename, targets) ⇒ Object
- #new_call(recv, meth, args = nil) ⇒ Object
- #run(content) ⇒ Object
Instance Method Details
#extract_key(args, seperator) ⇒ Object
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 |
# File 'lib/gettext_i18n_rails/ruby_gettext_extractor.rb', line 72 def extract_key(args, seperator) key = nil if args.size == 2 key = extract_string(args.value) else # this could be n_("aaa","aaa2",1) # all strings arguemnts are extracted and joined with \004 or \000 arguments = args[1..(-1)] res = [] arguments.each do |a| str = extract_string(a) # only add strings res << str if str end return nil if res.empty? key = res.join(seperator) end return nil unless key key.gsub!("\n", '\n') key.gsub!("\t", '\t') key.gsub!("\0", '\0') return key end |
#extract_string(node) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/gettext_i18n_rails/ruby_gettext_extractor.rb', line 53 def extract_string(node) if node.first == :str return node.last elsif node.first == :call type, recv, meth, args = node # node has to be in form of "string"+"other_string" return nil unless recv && meth == :+ first_part = extract_string(recv) second_part = extract_string(args) return nil unless first_part && second_part return first_part.to_s + second_part.to_s else return nil end end |
#initialize(filename, targets) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/gettext_i18n_rails/ruby_gettext_extractor.rb', line 28 def initialize(filename, targets) @filename = filename @targets = Hash.new @results = [] targets.each do |a| k, v = a # things go wrong if k already exists, but this # should not happen (according to the gettext doc) @targets[k] = a @results << a end super() end |
#new_call(recv, meth, args = nil) ⇒ Object
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 |
# File 'lib/gettext_i18n_rails/ruby_gettext_extractor.rb', line 102 def new_call recv, meth, args = nil # we dont care if the method is called on a a object if recv.nil? if (meth == :_ || meth == :p_ || meth == :N_ || meth == :pgettext || meth == :s_) key = extract_key(args, "\004") elsif meth == :n_ key = extract_key(args, "\000") else # skip end if key res = @targets[key] unless res res = [key] @results << res @targets[key] = res end res << "#{@filename}:#{lexer.lineno}" end end super recv, meth, args end |
#run(content) ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/gettext_i18n_rails/ruby_gettext_extractor.rb', line 44 def run(content) # ruby parser has an ugly bug which causes that several \000's take # ages to parse. This avoids this probelm by stripping them away (they probably wont appear in keys anyway) # See bug report: http://rubyforge.org/tracker/index.php?func=detail&aid=26898&group_id=439&atid=1778 safe_content = content.gsub(/\\\d\d\d/, '') self.parse(safe_content) return @results end |