perrotuerto.blog/config/build/pos2htmls

146 lines
4.7 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# encoding: UTF-8
# coding: UTF-8
require 'simple_po_parser'
require 'fileutils'
require 'time'
# Displays message when something goes wrong
def check condition, err_msg
if condition then puts err_msg + ' For help use -h or --help.'; abort end
end
# To the root directory
Dir.chdir(File.dirname(__FILE__) + '/../..')
# Variables
po_dir = 'content/po/'
po_path = ''
html_dir = 'content/html/'
html_name = ''
html_tmp = ''
md_name = ''
template_dir = 'config/template/site/'
template_lang = {
'en' => {
'links' => 'Links',
'about' => 'About',
'contact' => 'Contact',
'fork' => 'Fork',
'donate' => 'Donate',
'copyfarleft' => 'All content is under',
'license' => 'Open and Free Publishing License',
'build' => 'Last build of this page:',
},
'es' => {
'links' => 'Enlaces',
'about' => 'Acerca',
'contact' => 'Contacto',
'fork' => 'Bifurca',
'donate' => 'Dona',
'copyfarleft' => 'Todo el contenido está bajo',
'license' => 'Licencia Editorial Abierta y Libre',
'build' => 'Última modificación de esta página:',
}
}
# Displays help
if ARGV[0] =~ /-h/
puts "pos2htmls generates html files from pos files."
puts "\nUse:"
puts " pos2htmls [po file]"
puts "\nExamples:"
puts " pos2htmls file.po"
puts "\nAll locales are converted to HTML."
puts "\nThe po file has to be in '#{po_dir}*' and the html files are going to be stored in '#{html_dir}', where '*' are the locales folders."
abort
end
# Checks if the user gave the path to the file
check(ARGV[0] == nil, "ERROR: File is required.")
# Cleans path
po_path = po_dir + 'en/' + File.basename(ARGV[0])
html_name = File.basename(ARGV[0], '.*') + '.html'
# Checks if the file exists
check(File.exist?(po_path) == false, "ERROR: File doesn't exist.")
# Creates each HTML file
Dir.glob(po_dir + '*/*.po').each do |po|
if File.basename(po) == File.basename(po_path)
hash = {
'locale' => po.gsub(po_dir, '').split('/')[0],
'file' => html_name,
'title' => '',
'content' => []
}
# Extracts the translations
SimplePoParser.parse(po)[1..-1].each do |e|
translation = e[:msgstr]
if translation.class == Array
translation = translation.join('')
end
hash['content'].push(translation + "\n\n")
end
hash['content'].map!{|l| l.gsub('\\n', "\n")}
# Gets the title
hash['title'] = hash['content'][0].gsub(/^#\s+/, '').gsub(/\n\n/, '').strip
# Creates locale folder if it doesn't exists
if !File.directory?(html_dir + hash['locale'])
Dir.mkdir(html_dir + hash['locale'])
end
Dir.chdir(html_dir + hash['locale'])
# Creates a temporary MD file
md_name = File.basename(hash['file'], '.*') + '.md'
file = File.open(md_name, 'w:utf-8')
file.puts hash['content']
file.close
# Creates a temporary HTML file
puts "Creating #{html_dir + hash['locale'] + '/' + html_name}"
system("pc-pandog -i #{md_name} -o #{html_name}")
FileUtils.rm(md_name)
# Cleans headers and footers and adds new headers and footers
html_tmp = File.read(html_name).split(/\n/)[8..-3]
html_tmp = html_tmp.unshift(File.read('../../../' + template_dir + 'header.html'))
html_tmp = html_tmp.unshift(File.read('../../../' + template_dir + 'head.html'))
html_tmp = html_tmp.push(File.read('../../../' + template_dir + 'footer.html'))
# Some unnecessary cleaning
html_tmp = html_tmp.map{|l| l.gsub(/\s{8}/, ' ')}
html_tmp = html_tmp.join("\n").gsub(/\n\n/, "\n")
# Replaces string according the file, the date and the location
html_tmp = html_tmp.gsub('@locale', hash['locale'])
html_tmp = html_tmp.gsub('@title', hash['title'])
html_tmp = html_tmp.gsub('@file', hash['file'])
html_tmp = html_tmp.gsub('@links', template_lang[hash['locale']]['links'])
html_tmp = html_tmp.gsub('@about', template_lang[hash['locale']]['about'])
html_tmp = html_tmp.gsub('@contact', template_lang[hash['locale']]['contact'])
html_tmp = html_tmp.gsub('@fork', template_lang[hash['locale']]['fork'])
html_tmp = html_tmp.gsub('@donate', template_lang[hash['locale']]['donate'])
html_tmp = html_tmp.gsub('@copyfarleft', template_lang[hash['locale']]['copyfarleft'])
html_tmp = html_tmp.gsub('@license', template_lang[hash['locale']]['license'])
html_tmp = html_tmp.gsub('@build', template_lang[hash['locale']]['build'])
html_tmp = html_tmp.gsub('@date', Time.now.strftime('%Y/%m/%d, %H:%M'))
# Save the data
file = File.open(html_name, 'w:utf-8')
file.puts html_tmp
file.close
Dir.chdir('../../..')
end
end