- The (un)Book (draft!)
- Appendix A - The Reputation Framework
- Appendix B - Related Resources
- Meta
-
This book is being written in DocBook XML, which is the format that O'Reilly likes for cross publishing to paper, the web, and other forms. We're bringing that vision to the wiki as well. All the Chapters are being automatically translated via a scripted pipeline to Dokuwiki formatting and are posted here periodically.
I've hacked together something out of Saxon-B, PERL, tidy and sed all running on Cygwin on my PC. Don't look below if you have a weak stomach.
— Randy
rm -f $1.doku, temp*.doku cat $1 | sed 's/†/X/g' | sed 's/—/-/g' | sed 's/…/\.\.\./g' | tidy -xml -bare -w 3000 >temp.tidy.doku cat temp.tidy.doku | parafix.pl | sed -e 's/<entry>/<entry align="center">/g' >temp.parafix.doku cat temp.parafix.doku | sed -e 's|\/emphasis>|\/emphasis> |g'| sed -e 's|\/emphasis> |emphasis> |g' | sed -e 's|\/emphasis> \([^0-9a-zA-Z(]\)|\/emphasis>\1|g' >temp.emphasis.doku java -jar saxon9.jar -t -s:temp.emphasis.doku -xsl:docbook2dokuwiki.xsl -o:temp.xslt.doku sed -e 's/</</g' < temp.xslt.doku | sed -e 's/>/>/g' | sed -e 's|figs/incoming/||' | sed -e 's/amp\;//g' | sed -e 's|#Chapter_|/doku.php?id=chapter|g' | sed -e 's|\"#Chap_\([0-9]*\)\-|\"/doku.php?id=chapter\1#Chap_\1-|g' | tail +2 >$1.doku mv $1.doku .
Here's what it does
#!/usr/bin/perl $s = <STDIN>; $inpara = 0; while (chomp($s) > 0) { if (index($s,"<para>") > -1 ) {$inpara = 1;} if (index($s,"</para>") > -1 ) {$inpara = 0;} if ($inpara) { chop($s); print ($s); } else { print ($s . "\n"); } $s = <STDIN>; }
This perl script simply joins all the lines between para tags. It is very sensitive to input and output line ending conventions. If you shorten the .sh script above, you'll likely break the behavior, so watch out.
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="sect1|sect2|sect3|sect4|example|varlistentry"><xsl:if test="@id"><html><a name='<xsl:value-of select="@id"/>'></a></html></xsl:if><xsl:apply-templates/></xsl:template> <xsl:template match="sect1/title"> ==== <xsl:apply-templates/> ==== </xsl:template> <xsl:template match="sect2/title"> === <xsl:apply-templates/> === </xsl:template> <xsl:template match="sect3/title"> == <xsl:apply-templates/> == </xsl:template> <xsl:template match="chapter/title"> ===== <xsl:apply-templates/> ===== </xsl:template> <xsl:template match="title"> ** <xsl:apply-templates/><xsl:text> ** </xsl:text></xsl:template> <xsl:template match="para"> <xsl:apply-templates/><xsl:text> </xsl:text> </xsl:template> <xsl:template match="indexterm"></xsl:template> <xsl:template match="xref"><html><a href="#{@linkend}"><xsl:value-of select="@linkend"/></a>&nbsp;</html></xsl:template> <xsl:template match="emphasis">//<xsl:apply-templates/>//</xsl:template> <xsl:template match="code">''<xsl:apply-templates/>'' </xsl:template> <xsl:template match="citetitle">//<xsl:apply-templates/>//</xsl:template> <xsl:template match="citation">//<xsl:apply-templates/>//</xsl:template> <xsl:template match="itemizedlist/listitem"> * <xsl:apply-templates/></xsl:template> <xsl:template match="listitem/itemizedlist/listitem"> * <xsl:apply-templates/></xsl:template> <xsl:template match="orderedlist/listitem"> - <xsl:apply-templates/></xsl:template> <xsl:template match="listitem/para"><xsl:apply-templates/><xsl:text> </xsl:text></xsl:template> <xsl:template match="variablelist"><xsl:apply-templates/></xsl:template> <xsl:template match="varlistentry/term"> * **<xsl:apply-templates/>**</xsl:template> <xsl:template match="varlistentry/listitem"> * <xsl:apply-templates/></xsl:template> <xsl:template match="varlistentry/para"><xsl:apply-templates/></xsl:template> <xsl:template match="informalfigure"><xsl:apply-templates/></xsl:template> <xsl:template match="figure"> <html><a name="{@id}"><center></html>// <xsl:value-of select="@id"/>: <xsl:value-of select="title"/> //<html></center></a></html><xsl:text> </xsl:text> <xsl:apply-templates/></xsl:template> <xsl:template match="figure/title"></xsl:template> <xsl:template match="mediaobject"><xsl:apply-templates/></xsl:template> <xsl:template match="imageobject"><xsl:apply-templates/></xsl:template> <xsl:template match="imagedata"> <html><center><img width="{@srccredit}" src="http://buildingreputation.com/lib/exe/fetch.php?media={@fileref}"/><xsl:value-of select="."/></center></html><xsl:text> </xsl:text> </xsl:template> <xsl:template match="textobject"><xsl:text> </xsl:text></xsl:template> <xsl:template match="table|informaltable"> <html><xsl:if test="@id"><a name="{@id}"><center></html>// <xsl:value-of select="@id"/>: <xsl:value-of select="title"/> //<html></center></a></xsl:if> <table align="center" border="1"> <xsl:apply-templates/> </table> </html> </xsl:template> <xsl:template match="table/title"></xsl:template> <xsl:template match="tgroup"><xsl:apply-templates/></xsl:template> <xsl:template match="thead"> <thead> <xsl:apply-templates/> </thead> </xsl:template> <xsl:template match="tbody"> <tbody> <xsl:apply-templates/> </tbody> </xsl:template> <xsl:template match="row"> <tr> <xsl:apply-templates/> </tr> </xsl:template> <xsl:template match="ulink">[[<xsl:value-of select="@url"/>|<xsl:apply-templates/>]]</xsl:template> <xsl:template match="entry"><td align="{@align}"><xsl:apply-templates/></td></xsl:template> <xsl:template match="entry/itemizedlist"><ul><xsl:apply-templates/></ul></xsl:template> <xsl:template match="entry/itemizedlist/listitem"><li><xsl:apply-templates/></li></xsl:template> <xsl:template match="entry/itemizedlist/listitem/para"><xsl:apply-templates/></xsl:template> <xsl:template match="remark"><xsl:text> </xsl:text><html><!-- <xsl:apply-templates/> --></html><xsl:text> </xsl:text> </xsl:template> <xsl:template match="blockquote/attribution"><xsl:text><blockquote </xsl:text><xsl:apply-templates/><xsl:text>> </xsl:text></xsl:template> <xsl:template match="blockquote/para"><xsl:apply-templates/><xsl:text> </blockquote> </xsl:text></xsl:template> <xsl:template match="sidebar"> <xsl:text><note tip></xsl:text><xsl:apply-templates/><xsl:text></note> </xsl:text></xsl:template> <xsl:template match="caution"> <xsl:text><note caution></xsl:text><xsl:apply-templates/><xsl:text></note> </xsl:text></xsl:template> <xsl:template match="warning"> <xsl:text><note warning></xsl:text><xsl:apply-templates/><xsl:text></note> </xsl:text></xsl:template> <xsl:template match="tip"> <xsl:text><note tip></xsl:text><xsl:apply-templates/><xsl:text></note> </xsl:text></xsl:template> <xsl:template match="note"> <xsl:text><note></xsl:text><xsl:apply-templates/><xsl:text></note> </xsl:text></xsl:template> <xsl:template match="important"> <xsl:text><note important></xsl:text><xsl:apply-templates/><xsl:text></note> </xsl:text></xsl:template> </xsl:stylesheet>
This is oversimplified. Don't use it. Really. I can't believe I'm using it, but I am in a hurry at the moment. You'll need the box dokuwiki plugin and the art for the annotation such as Tip and Caution - I've got scalable versions of the O'Reilly animal traps and tracks - don't forget those…