summaryrefslogtreecommitdiff
path: root/pkgbuild2mw.0
blob: 78efcf5dbe78bab493dee09dacce32f4889e2d1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/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}|<nowiki>#{body.chomp}</nowiki>}}\n\n"
	end

	def section_sh
		section = ""
		while true
			if is_md
				puts "\n\n{{bc|<nowiki>#{section.chomp}</nowiki>}}\n\n" unless section.gsub("\n", '') == ""
				section_md
				section = ""
			elsif is_hd
				puts "\n\n{{bc|<nowiki>#{section.chomp}</nowiki>}}\n\n" unless section.gsub("\n", '') == ""
				section_hd
				section = ""
			elsif @line == "}\n"
				puts "\n\n{{bc|<nowiki>#{section.chomp}</nowiki>}}\n\n" unless section.gsub("\n", '') == ""
				return
			else
				if @line.start_with? 'add-unit '
					puts "\n\n{{bc|<nowiki>#{section.chomp}</nowiki>}}\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|<nowiki>#{section.chomp}</nowiki>}}\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|<nowiki>#{section.chomp}</nowiki>}}\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()