]> pere.pagekite.me Git - text-madewithcc.git/blobdiff - fixup-docbook.rb
Translated using Weblate (Norwegian Bokmål)
[text-madewithcc.git] / fixup-docbook.rb
index 884450f0e1363312706a67a486e3cbaddfc554d5..329d59935e27d4fa403682f0578c2d2519e1590f 100755 (executable)
@@ -30,16 +30,16 @@ end
 log 0, 'replace article* with book*'
 xml.css('articleinfo').each do |node|
   node.name = 'bookinfo'
 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')
+  node.last_element_child.after(<<'XML')
 <copyright>
     <year>2017</year>
     <holder>Creative Commons</holder>
 <copyright>
     <year>2017</year>
     <holder>Creative Commons</holder>
+</copyright>
+XML
+  node.last_element_child.after(<<'XML')
+<publisher>
+    <publishername>Instituto de Investigaciones Económicas</publishername>
+    <address><city>Universidad Nacional Autónoma de México</city></address>
 </publisher>
 XML
 end
 </publisher>
 XML
 end
@@ -51,8 +51,8 @@ end
 log 0, 'change parts to colophon, dedication and chapter'
 partreplace(xml, 'colophon', 'colophon')
 partreplace(xml, 'dedication', 'dedication')
 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, 'foreword', 'preface')
+partreplace(xml, 'introduction', 'preface')
 partreplace(xml, 'bibliography', 'chapter')
 partreplace(xml, 'acknowledgments', 'chapter')
 
 partreplace(xml, 'bibliography', 'chapter')
 partreplace(xml, 'acknowledgments', 'chapter')
 
@@ -66,6 +66,196 @@ if s
   end
 end
 
   end
 end
 
+
+log 0, 'remove empty notes/web links sections'
+[
+  'Notes',
+  'Web links',
+  'Web link',
+].each do |title|
+  xml.xpath("//title[text()='%s']" % title).each do |node|
+    p = node.parent
+    node.remove
+    if p.content =~ /^\s*$/
+      p.remove
+    else
+      raise RuntimeError, 'Non-empty «%s» found' % title
+    end
+  end
+end
+
+log 0, 'remove title from dedication'
+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 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'
+    para.parent = ln
+    break
+  end
+end
+
+log 0, 'replace colophon page with one for this edition'
+ xml.xpath('//colophon/para').remove
+s = xml.xpath('//colophon')[0]
+s.first_element_child.after(<<'XML')
+<para>Made with Creative Commons</para>
+
+<para>by Paul Stacey & Sarah Hinchliff Pearson</para>
+
+<para>© 2017 by the Creative Commons Foundation.</para>
+
+<para>Published under a Creative Commons Attribution-ShareAlike
+license (CC BY-SA), version 4.0.</para>
+
+<para>ISBN: YET-TO-BE-DECIDED (PDF), YET-TO-BE-DECIDED (ePub),
+YET-TO-BE-DECIDED (Paperback) </para>
+
+<para>Illustrations by Bryan Mathers,
+<ulink url="https://bryanmmathers.com/"/>.</para>
+
+<para>Publisher: Gunnar Wolf.</para>
+
+<para>
+<!--space for information about translators-->
+&nbsp;
+</para>
+
+<para>Downloadable e-book available at
+<ulink url="https://madewith.cc/"/>.</para>
+
+<para>This book is published under a CC BY-SA license, which means that you
+can copy, redistribute, remix, transform, and build upon the content for
+any purpose, even commercially, as long as you give appropriate credit,
+provide a link to the license, and indicate if changes were made. If you
+remix, transform, or build upon the material, you must distribute your
+contributions under the same license as the original. License details:
+<ulink url="http://creativecommons.org/licenses/by-sa/4.0/"/></para>
+
+<para>Made With Creative Commons is published with the kind support of
+Creative Commons and backers of our crowdfunding-campaign on the
+Kickstarter.com platform.</para>
+
+<para>This edition of the book is maintained on
+<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 or Weblate.</para>
+
+<para>
+Classifications:
+</para>
+
+<para>
+(Dewey) 346.048, 347.78
+</para>
+
+<para>
+(UDK) ?
+</para>
+
+<para>
+(US Library of Congress) Z286 O63 S73 2017
+</para>
+
+<para>
+(Melvil) 025.523
+</para>
+
+<para>
+(ACM CRCS) ?
+</para>
+
+XML
+
+log 0, 'remove title from colophon'
+xml.css('colophon title')[0].content = ""
+
+log 0, 'change CC logo images to informalfigure'
+xml.css('figure mediaobject imageobject imagedata[width="40.0%"]').each do |id|
+  f = id.parent.parent.parent
+  f.name = 'informalfigure'
+end
+
+log 0, 'assigning IDs to formal figures'
+seq = 1
+xml.css('figure').each do |fig|
+  fig['id'] = 'fig-%d' % seq
+  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
+log 0, 'migrate chapter author into <chapterinfo> where relevant'
+xml.css('chapter para').each do |para|
+  if para.content =~ /^\s*((Paul|Sarah Hinchliff) (Stacey|Pearson))\s*$/
+    log 1, 'migrated %s %s' % [$2, $3]
+    para.parent.css('title')[0].before(<<'XML' % [$2, $3])
+      <chapterinfo>
+       <author>
+         <firstname>%s</firstname><surname>%s</surname>
+       </author>
+      </chapterinfo>
+XML
+    para.remove
+  end
+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')
 log 0, 'Writing processed file'
 # Unable to figure out API way to replace DOCTYPE
 data = xml.to_xml().gsub!(/DOCTYPE article/, 'DOCTYPE book')