end
def partreplace(xml, partid, tag)
- xml.css('part').select {|p| p.attributes['id'].value == partid}.each do |part|
+ xml.css('part[id=' + partid + ']').each do |part|
part.name = tag
end
end
log 0, 'replace article* with book*'
-xml.children[0].name = 'book'
-xml.children[1].name = 'book'
-xml.css('info').each do |node|
+xml.css('articleinfo').each do |node|
+ node.name = 'bookinfo'
node.last_element_child.after(<<'XML')
<copyright>
<year>2017</year>
XML
node.last_element_child.after(<<'XML')
<publisher>
- <publishername>Gunnar Wolf</publishername>
- <address><city>Mexico City</city></address>
+ <publishername>Instituto de Investigaciones Económicas</publishername>
+ <address><city>Universidad Nacional Autónoma de México</city></address>
</publisher>
XML
end
partreplace(xml, 'acknowledgments', 'chapter')
log 0, 'place part introduction into <partintro>'
-s = xml.search('part title').select {|tit| tit.content =~ /The Case Studies/}[0]
-
+s = xml.xpath("//part/title[text()='The Case Studies']")[0]
if s
s.after('<partintro>')
p = xml.css('part partintro')[0]
- s.parent.children.select{|c| c.name == 'para'}.each do |node|
+ s.parent.xpath("//part/para").each do |node|
node.parent = p
end
-else
- log 0, 'Adding <partintro> failed!'
end
'Web links',
'Web link',
].each do |title|
- xml.search('title').select {|t| t.content == title}.each do |node|
+ xml.xpath("//title[text()='%s']" % title).each do |node|
p = node.parent
node.remove
if p.content =~ /^\s*$/
end
log 0, 'remove title from dedication'
-xml.css('dedication title')[0].content = ""
+if ! xml.css('dedication title').empty?
+ xml.css('dedication title')[0].content = ""
+end
+
+log 0, 're-styling dedication, preface and introduction authors'
+xml.css('dedication').each do |ded|
+# Take content out of the quote marks, and into the blockquote
+ quote = ded.css('quote').first
+ auth = ded.css('itemizedlist').first
+ quote_c = quote.content
+ auth_c = auth.content
+ # Styling the attribution (including the introducing hyphen) should
+ # be left to the following layers
+ auth_c.gsub!(/\s+/, ' ')
+ c = ded.css('quote').first.content
+ quote.parent.remove # remove the '<para>' containing the quote
+ auth.remove
+ ded.last_element_child.after('<blockquote><para>%s</para><attribution>%s</attribution></blockquote>' %
+ [quote_c, auth_c])
+end
+
+%w(preface#foreword preface#introduction).each do |spec|
+ sect = xml.css(spec)[0]
+ paras = sect.css('para emphasis')
+ auth = '<blockquote><para><attribution>'
+ auth += paras.map{|p| p.content}.join('</attribution></para><para><attribution>')
+ auth += '</attribution></para></blockquote>'
+ sect.last_element_child.after(auth)
+ paras.each {|i| i.parent.remove} # Remove both the 'emphasis' and its parent 'para'
+end
+
+auth = xml.css('chapter')[0].css('para')[0]
+auth.content =~ /^\s*Paul Stacey\s*$/ or
+ raise RuntimeError, 'Error finding author name in chapter 1 -- ' + auth.content
+auth.before('<blockquote><attribution>Paul Stacey</attribution></blockquote>')
+auth.remove
+
+auth = xml.css('chapter')[1].css('para')[0]
+auth.content =~ /^\s*Sarah Hinchliff Pearson.*$/ or
+ raise RuntimeError, 'Error finding author name in chapter 2 -- ' + auth.content
+auth.before('<blockquote><attribution>Sarah Hinchliff Pearson</attribution></blockquote>')
+auth.remove
log 0, 'move legal notice to bookinfo'
-xml.css('book info')[0].last_element_child.after('<legalnotice>')
-ln = xml.css('book info legalnotice')[0]
+xml.css('book bookinfo')[0].last_element_child.after('<legalnotice>')
+ln = xml.css('book bookinfo legalnotice')[0]
xml.css('para').each do |para|
if para.content =~ /This book is published under a/
log 0, 'found legal'
end
log 0, 'replace colophon page with one for this edition'
- xml.search('colophon para').map {|p| p.remove}
-s = xml.search('colophon')[0]
+ xml.xpath('//colophon/para').remove
+s = xml.xpath('//colophon')[0]
s.first_element_child.after(<<'XML')
<para>Made with Creative Commons</para>
<ulink url="https://gitlab.com/gunnarwolf/madewithcc-es/"/>, and the
translations are maintained on
<ulink url="https://hosted.weblate.org/projects/madewithcc/"/>. If
-you find any error in the book, please let us know via gitlab.</para>
+you find any error in the book, please let us know via Gitlab or Weblate.</para>
<para>
Classifications:
seq = seq + 1
end
+log 0, 'Set epigraph line in each case study'
+xml.css('blockquote para').select {|p| p.inner_text =~ /Profile written by/}.each do |epi|
+ p = epi.parent
+ by = epi.inner_text
+ epi.remove
+ p.last_element_child.after('<attribution>%s</attribution>' % by)
+end
+
+
# Disabled as dblatex do not understand chapter/chapterinfo/author,
# see <URL: https://bugs.debian.org/891183 >.
if false
end
end
-log 0, 'Writing processed file (%s)' % dstfile
-File.open(dstfile, 'w') {|f| f.write(xml.to_xml())}
+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)}