class QuickML::GetText::MessageValidator

Public Class Methods

main(argv) click to toggle source
# File vendor/qwik/lib/qwik/ml-msg-validator.rb, line 17
def self.main(argv)
  if argv.length < 2
    puts "Usage: ruby ml-msg-validator.rb <catalog> <source...>"
    exit
  end

  catalog_file = argv.shift
  catalog = Catalog.new(catalog_file)

  ok = true
  argv.each {|source_file|
    validator = MessageValidator.new(catalog, source_file)
    validator.validate
    ok = (ok and validator.ok?)
  }
  if ok then exit else exit(1) end
end
new(catalog, source_filename) click to toggle source
# File vendor/qwik/lib/qwik/ml-msg-validator.rb, line 35
def initialize (catalog, source_filename)
  @catalog = catalog
  @source_filename  = source_filename
  @has_error = false
end

Public Instance Methods

collect_messages(content) click to toggle source
# File vendor/qwik/lib/qwik/ml-msg-validator.rb, line 50
def collect_messages (content)
  messages = []
  while content.sub!(/\b_\[(\d+)\]\((".*?").*?\)/m, "")
    lineno  = $1.to_i
    message = eval($2)
    messages.push([lineno, message]) 
  end
  messages
end
ok?() click to toggle source
# File vendor/qwik/lib/qwik/ml-msg-validator.rb, line 77
def ok?
  not @has_error
end
read_file_with_numbering(filename) click to toggle source
# File vendor/qwik/lib/qwik/ml-msg-validator.rb, line 41
def read_file_with_numbering (filename)
  content = ''
  File.open(filename).each_with_index {|line, idx|
    lineno = idx + 1
    content << line.gsub(/\b_\(/, "_[#{lineno}](")
  }
  content
end
validate() click to toggle source
# File vendor/qwik/lib/qwik/ml-msg-validator.rb, line 60
def validate
  @catalog or return
  content = read_file_with_numbering(@source_filename)
  messages = collect_messages(content)
  messages.each {|lineno, message|
    translated_message = @catalog.messages[message]
    if not translated_message
      printf "%s:%d: %s\n", @source_filename, lineno, message.inspect
      @has_error = true
    elsif message.count('%') != translated_message.count('%')
      printf "%s:%d: %s => # of %% mismatch.\n", 
        @source_filename, lineno, message.inspect, translated_message
      @has_error = true
    end
  }
end