Oh snap! I haven’t posted here in a long time. My day job and my night jobs have been keeping me too busy! Hopefully I’ll have more time to blog in the future. I have a bunch of ideas, I just need to find the time to write!
Anyway, let’s talk RDoc, iPad, and epub! I like documentation. I especially like consuming documentation. I thought it would be neat if I could read documentation on my iPad. As it turns out, getting RDoc documentation on your iPad isn’t that hard!
According to Wikipedia, iBooks is an EPUB reader. EPUB is a standard format for making books. The EPUB format is basically a zip file that contains a bunch of XHTML and XML documents. The XHTML documents are the “meat” of your book, where the XML documents tell the reader where to find everything, and the order in which to put things. RDoc already emits HTML, so our job is to make sure it emits XHTML along with the special XML files. How do we do that?
RDoc supports a plugin system where we can hook in and emit anything we want. To hook in to RDoc, we just add a special file to our gem (“lib/rdoc/discover.rb”), and register with the RDoc plugin system. So I wrote a gem called paddle that plugs in to RDoc, emits the documentation as XHTML along with the supporting XML files. It even comes with a nice Ruby logo! I encourage you to take a look at the source. The code is quite short, but could be refactored even smaller!
Using the Paddle
Creating your own books with Paddle is really easy. First, install paddle:
$ sudo gem install paddle
Then find a project for which you want to create a book. For this example, I’ll generate a book for one of my gems called texticle. From the project root, use the rdoc command. Make sure to tell rdoc to use the “paddle” formatter, and supply a title (very important to supply a title!):
$ cd git/texticle $ rdoc -f paddle -t 'Texticle Documentation' -o epub lib
Now there should be an “epub” directory that contains your book. But we’re not quite done yet. There is one more step. The book must be in a zipfile, and the zipfile requires a particular format. Let’s create the zipfile now using the “zip” command:
$ cd epub $ zip -Xr9D texticle.epub mimetype *
You should end up with a file named “texticle.epub”. Just drag that file to iTunes, sync up your iPad, and boom!
I hacked this out in an evening, so there are a few problems. I’ll mention them here, just so you’re not surprised, and to give you ideas for patches to submit! ;-)
- Right now, the links don't work: I haven't figured out why, but they don't. That will come soon.
- The author field isn't filled out in the book: I need to teach RDoc to take more command line options so we can tell Paddle what to use for the book's author field
- Only classes, modules, and the things they contain are documented: Right now, your README file won't show up in the book. That is just missing right now. It should be easy to add, I just haven't done it.
A couple books to get you started
Thanks for reading! Have fun making books for your iPad, and don’t forget to send patches back to me! :-D