#!/usr/bin/env ruby
#encoding: UTF-8

# Adds the creation date, section number, version and a category to a man-page
# or updates these data, as Docutils do not provide these values.

#require 'filemagic'
require 'date'

# find the file-type for a given file name
def file_type(file)
  fm = FileMagic.fm
  file_magic = fm.file(file)
  fm.flags = [:mime_type]
  file_mime = fm.file(file)
  return file_magic, file_mime
end

section = version = category = ''

if ARGV.empty?
  puts "No man-page file given!"
  exit false
elsif !File.exist?(ARGV[0] )
  puts "File %s does not exist" %ARGV[0]
  exit false
elsif !File.writable?(ARGV[0] )
  puts "File %s cannot be modified" %ARGV[0]
  exit false
else
  fname = ARGV[0]
  if ARGV.length > 1
    section = ARGV[1]
  end
  if ARGV.length > 2
    version = ARGV[2]
  end
  if ARGV.length > 3
    category = ARGV[3]
  end
  file = File.new(fname, 'r+')
  # ftype = file_type(fname)
  # if (ftype[0].include?('troff'))
  line = ''
  out = ''
  begin
    # backup of the original man-page
    File.new("/tmp/bak_" << File.basename(fname), 'w+' ).write(file.read)
    file.rewind
    # read file line by line
    while file.gets
      line = $_
      # anything but the sought header
      if '.' != line && !line.empty? && !line.start_with?('.TH')
        out << line
      else
        if line && !line.empty?
          # cut off every field.
          # ### disabled: too much white space
          # h1 = line.match(/(^.TH "\S+\s*[^"]*")/)[0]
          # puts 'header is ' << h1
          h1 = File.basename(fname).split('.')[0]
          out << ".TH " << h1
          out << " \"%s\" \"%s\" \"%s\" \"%s\"\n" %[section, Date.today.strftime('%a %d %b %Y'), version, category]
        end
      end
    end
  rescue EOFError => ex
    puts "No header found!"
    exit 0
  rescue StandardError => ex
    # --- disabled --->
    # puts '(' << $0 << ") The file '%s' does not look like a man-page (%s)!\nDoing nothing!" %[fname, ftype[0]]
    # <--
    exit 0
  end

  file.pos = 0
  file << out
  file.close
  #  end
end