class Qwik::CatalogValidator

Attributes

error_messages[R]

Public Class Methods

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

  catalog_file = argv.shift
  catalog = load_catalog(catalog_file)
  set_catalog(catalog)

  ok = true
  argv.each {|source_file|
    validator = self.new(source_file, catalog)
    validator.validate
    validator.error_messages.each {|message|
      puts message
    }
    ok = (ok and validator.ok?)
  }
  if ok then exit else exit(1) end
end
new(source_file_name, messages) click to toggle source
# File vendor/qwik/lib/qwik/qwikweb-catalog-validator.rb, line 34
def initialize (source_file_name, messages)
  @source_file_name  = source_file_name
  @gettext_catalog = messages
  @error_messages = []
end

Public Instance Methods

collect_messages(content) click to toggle source
# File vendor/qwik/lib/qwik/qwikweb-catalog-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/qwikweb-catalog-validator.rb, line 79
def ok?
  @error_messages.empty?
end
read_file_with_numbering(file_name) click to toggle source
# File vendor/qwik/lib/qwik/qwikweb-catalog-validator.rb, line 41
def read_file_with_numbering (file_name)
  content = ''
  File.open(file_name).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/qwikweb-catalog-validator.rb, line 60
def validate
  @gettext_catalog or return
  content = read_file_with_numbering(@source_file_name)
  messages = collect_messages(content)
  messages.each {|lineno, message|
    translated_message = @gettext_catalog[message]
    if not translated_message
      message = 
        sprintf('%s:%d: %s', @source_file_name, lineno, message.inspect)
      @error_messages.push(message)
    elsif message.count('%') != translated_message.count('%')
      message = sprintf("%s:%d: %s => # of %% mismatch.",
                        @source_file_name, 
                        lineno, message.inspect, translated_message)
      @error_messages.push(message)
    end
  }
end