po4a-translate -f text -m $(SOURCE).md -p po/nb/mwcc.po -l $@ -l $@ -L utf-8 -M utf-8 -k 0
%.xml: %.md
- pandoc -s -o $@ $(PANDOC_OPTS) $^
- perl -p -i -e 's/!DOCTYPE article/!DOCTYPE book/ ; \
- s!<(/?)article(info|)?>!<$$1book$$2>!' $@
+ TEMP=`tempfile -p mwcc` && \
+ pandoc -s -o $$TEMP $(PANDOC_OPTS) $(SOURCE).md && \
+ ruby fixup-docbook.rb $$TEMP $@ && \
+ rm $$TEMP
pdf: $(SOURCE).pdf
%.pdf: %.tex
--- /dev/null
+#!/usr/bin/ruby
+# coding: utf-8
+
+require 'nokogiri'
+
+LogLevel=1
+raise ArgumentError, 'Source/destination files not specified' if ARGV.size != 2
+srcfile = ARGV[0]
+dstfile = ARGV[1]
+
+f=File.open(srcfile)
+xml = Nokogiri::XML(f)
+
+def log(level,what)
+ indicators = %w(! • # -)
+ if level >= LogLevel
+ print indicators[level]
+ else
+ print "\n%s %s\n" % ['*' * (level+1), what]
+ end
+end
+
+def partreplace(xml, partid, tag)
+ xml.css('part[id=' + partid + ']').each do |part|
+ part.name = tag
+ end
+end
+
+
+log 0, 'replace article* with book*'
+xml.css('articleinfo').each do |node|
+ node.name = 'bookinfo'
+ node.first_element_child.before(<<'XML')
+<publisher>
+ <publishername>Gunnar Wolf</publishername>
+ <address><city>Mexico City</city></address>
+</publisher>
+XML
+ node.first_element_child.before(<<'XML')
+<copyright>
+ <year>2017</year>
+ <holder>Creative Commons</holder>
+</publisher>
+XML
+end
+xml.css('article').each do |node|
+ node.name = 'book'
+ node['lang'] = 'en'
+end
+
+log 0, 'change parts to colophon, dedication and chapter'
+partreplace(xml, 'colophon', 'colophon')
+partreplace(xml, 'dedication', 'dedication')
+partreplace(xml, 'foreword', 'chapter')
+partreplace(xml, 'introduction', 'chapter')
+partreplace(xml, 'bibliography', 'chapter')
+partreplace(xml, 'acknowledgments', 'chapter')
+
+log 0, 'place part introduction into <partintro>'
+s = xml.xpath("//part/title[text()='The Case Studies']")[0]
+if s
+ s.after('<partintro>')
+ p = xml.css('part partintro')[0]
+ s.parent.xpath("//part/para").each do |node|
+ node.parent = p
+ end
+end
+
+log 0, 'Writing processed file'
+# Unable to figure out API way to replace DOCTYPE
+data = xml.to_xml().gsub!(/DOCTYPE article/, 'DOCTYPE book')
+File.open(dstfile, 'w') {|f| f.write(data)}