]> pere.pagekite.me Git - text-madewithcc.git/blobdiff - fixup-docbook.rb
Termino de corregir "procomún" por "bienes comunes"
[text-madewithcc.git] / fixup-docbook.rb
index 8fc325b1a0022e83b3dc97146ad3fea3c9832ff8..d568f216e8f40af8db2d53a688c5d1233f2b65e1 100755 (executable)
@@ -21,26 +21,27 @@ def log(level,what)
 end
 
 def partreplace(xml, partid, tag)
 end
 
 def partreplace(xml, partid, tag)
-  xml.css('part[id=' + partid + ']').each do |part|
+  xml.css('part').select {|p| p.attributes['id'].value == partid}.each do |part|
     part.name = tag
   end
 end
 
 
 log 0, 'replace article* with book*'
     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')
+xml.children[0].name = 'book'
+xml.children[1].name = 'book'
+xml.css('info').each do |node|
+  node.last_element_child.after(<<'XML')
 <copyright>
     <year>2017</year>
     <holder>Creative Commons</holder>
 </copyright>
 <copyright>
     <year>2017</year>
     <holder>Creative Commons</holder>
 </copyright>
+XML
+  node.last_element_child.after(<<'XML')
+<publisher>
+    <publishername>Gunnar Wolf</publishername>
+    <address><city>Mexico City</city></address>
+</publisher>
 XML
 end
 xml.css('article').each do |node|
 XML
 end
 xml.css('article').each do |node|
@@ -51,22 +52,163 @@ 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')
 
 log 0, 'place part introduction into <partintro>'
 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]
+s = xml.search('part title').select {|tit| tit.content =~ /The Case Studies/}[0]
+
 if s
   s.after('<partintro>')
   p = xml.css('part partintro')[0]
 if s
   s.after('<partintro>')
   p = xml.css('part partintro')[0]
-  s.parent.xpath("//part/para").each do |node|
+  s.parent.children.select{|c| c.name == 'para'}.each do |node|
     node.parent = p
   end
     node.parent = p
   end
+else
+  log 0, 'Adding <partintro> failed!'
+end
+
+
+log 0, 'remove empty notes/web links sections'
+[
+  'Notes',
+  'Web links',
+  'Web link',
+].each do |title|
+  xml.search('title').select  {|t| t.content == 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'
+xml.css('dedication title')[0].content = ""
+
+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('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.search('colophon para').map {|p| p.remove}
+s = xml.search('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.</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
+
+# 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
 
 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)}
+log 0, 'Writing processed file (%s)' % dstfile
+File.open(dstfile, 'w') {|f| f.write(xml.to_xml())}