#!/usr/bin/env ruby
require 'fileutils'
pwd = Dir.pwd
argv,texfiles_with_path,flags=[],[],[]
lngs = %{(am|bg|bn|br|ca|cs|cy|da|de|el|en|eo|es|et|eu|fi|fr|ga|gl|he|hi|hr|hy|ia|is|it|ja|ko|la|lo|lt|lv|ml|mr|nl|no|nn|oc|pl|pt|pt_BR|ro|ru|sa|se|sk|sl|sq|sr|sv|ta|te|th|tk|tr|uk|ur|vi|zh)}
Regexp.new(lngs, Regexp::IGNORECASE)
argv=$*
argv.sort.each{|y| (y =~/^--\S+$/i) ? (flags << y) : (texfiles_with_path << y) }
if flags.length==0 \
|| flags.inspect =~/"--help"/
  cmd=(/([^\/]+)$/).match($0)[1]
  puts <<WOK
#{cmd} --help
#{cmd} --out=[output path]
#{cmd} --paper-size=a5 --out=~/test
WOK
end
paper_size = (flags.inspect.match(/"--paper-size=(a4|a5|b5|letter|legal)"/)) ? $1 : "a4"
out_path = Dir.pwd
if (flags.inspect.match(/"--out=\S+"/))
  out_path = flags.inspect.match(/"--out=(\S+)"/)[1]
  unless (FileTest.directory?(out_path))
    puts "Creating output directory: --out=#{out_path}"
    FileUtils::mkdir_p(out_path)
    unless (FileTest.directory?(out_path))
      puts "FAILS unable to create directory: #{out_path}"
      exit
    end
  end
end
if texfiles_with_path.length == 0
  texfiles_with_path=Dir.glob('*.tex')
end
if texfiles_with_path.length > 0
  texfiles_with_path.each do |texfile_with_path|
    if texfile_with_path =~/.+\.tex/
      #puts texfile_with_path
      if FileTest.file?(texfile_with_path)
        file_basename_with_path = texfile_with_path.sub(/\.tex$/,'')
        file_basename = file_basename_with_path.sub(/.*?([^\/]+)$/,'\1')
        _out_path = out_path
        if file_basename =~ /\.#{lngs}$/
          lng = file_basename.match(/\.#{lngs}$/)[1]
          puts file_basename
          puts lng
          puts _out_path
          unless _out_path.match(/\/#{lng}\/pdf$/)
            _out_path = "#{out_path}/#{lng}/pdf"
            FileUtils::mkdir_p(_out_path)
          end
        end
        texpdf_cmd = %{xetex -interaction=batchmode -fmt=xelatex -papersize=#{paper_size} #{texfile_with_path}\n}
        puts texpdf_cmd
        2.times { |i| system(texpdf_cmd) }
        if (FileTest.file?(%{#{pwd}/#{file_basename}.pdf})) && (FileTest.directory?(_out_path))
          FileUtils::Verbose::mv(%{#{pwd}/#{file_basename}.pdf}, %{#{_out_path}/#{file_basename}.pdf})
          puts (%{#{_out_path}/#{file_basename}.pdf})
        else
          puts "issue with pdf file or output directory"
          puts "pdf file:   #{pwd}/#{file_basename}.pdf}"
          puts "output dir: #{_out_path}/"
        end
        suffix = ['log', 'out', 'toc', 'aux']
        suffix.each { |s| FileUtils::rm_f(%{#{pwd}/#{file_basename}.#{s}})}
      end
    end
  end
end
Dir.chdir(pwd)
__END__