#!/usr/bin/env ruby
# coding: utf-8
load 'pandoc.rb'
class Translator
def initialize(file)
@file = file
@line = ''
end
def getline
@line = @file.readline
end
def is_md
@line.start_with? "#"
end
def section_md
section = ""
while @line.start_with? "#"
section += @line.sub(/^# ?/, '')
getline
end
puts "\n\n#{Pandoc::load('markdown', section).to('mediawiki')}\n\n"
end
def is_hd
not /(.*)[^<]<<\s*([^<]\S+)/.match(@line).nil?
end
def section_hd
m = /(.*)[^<]<<\s*([^<]\S+)/.match(@line)
return if m.nil?
prefix = m[1]
eot = m[2]
getline
body = ""
while @line != "#{eot}\n"
body += @line
getline
end
getline
puts "\n\n{{hc|#{prefix}|#{body.chomp}}}\n\n"
end
def section_sh
section = ""
while true
if is_md
puts "\n\n{{bc|#{section.chomp}}}\n\n" unless section.gsub("\n", '') == ""
section_md
section = ""
elsif is_hd
puts "\n\n{{bc|#{section.chomp}}}\n\n" unless section.gsub("\n", '') == ""
section_hd
section = ""
elsif @line == "}\n"
puts "\n\n{{bc|#{section.chomp}}}\n\n" unless section.gsub("\n", '') == ""
return
else
if @line.start_with? 'add-unit '
puts "\n\n{{bc|#{section.chomp}}}\n\n" unless section.gsub("\n", '') == ""
puts "f* {{ic|/#{@line.sub('add-unit ', '').chomp}}}"
section = ""
getline
next
end
m = /^ln -s (.*) (\S*)$/.match(@line)
if not m.nil?
puts "\n\n{{bc|#{section.chomp}}}\n\n" unless section.gsub("\n", '') == ""
puts "f* {{ic|/#{m[2]}}}: {{ic|-> #{m[1]}}}"
section = ""
getline
next
end
if @line == "preamble\n" or @line == "postamble" or @line.start_with? 'install -d'
getline
next
end
if @line.start_with? 'netctl-enable '
puts "\n\n{{bc|#{section.chomp}}}\n\n" unless section.gsub("\n", '') == ""
unit="netctl@#{`systemd-escape -- #{@line.sub(/^netctl-enable /, '')}`.chomp}.service"
puts "f* {{ic|/etc/systemd/system/#{unit}}}"
puts "f* {{ic|/etc/systemd/system/multi-user.target.wants/#{unit}}}"
getline
next
end
m = /^depends\+?=\((.*)\)/.match(@line)
if not m.nil?
m[1].split(/\s+/).each do |pkg|
puts "p* {{ic|#{pkg}}"
end
getline
next
end
m = /^conflicts\+?=\((.*)\)/.match(@line)
if not m.nil?
puts "p* group:{{ic|base}} except for {{ic|#{m[1]}}}"
getline
next
end
section += @line
getline
end
end
end
def run
while @line != "package() {\n"
getline
end
getline
section_sh
end
end
Translator.new(STDIN).run()