<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html xmlns:fn="http://www.w3.org/2005/02/xpath-functions"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="../../../../doc/otp_doc.css" type="text/css"> <title>Erlang -- How to Build OTP like documentation</title> </head> <body bgcolor="white" text="#000000" link="#0000ff" vlink="#ff00ff" alink="#ff0000"><div id="container"> <script id="js" type="text/javascript" language="JavaScript" src="../../../../doc/js/flipmenu/flipmenu.js"></script><script id="js2" type="text/javascript" src="../../../../doc/js/erlresolvelinks.js"></script><script language="JavaScript" type="text/javascript"> <!-- function getWinHeight() { var myHeight = 0; if( typeof( window.innerHeight ) == 'number' ) { //Non-IE myHeight = window.innerHeight; } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { //IE 6+ in 'standards compliant mode' myHeight = document.documentElement.clientHeight; } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { //IE 4 compatible myHeight = document.body.clientHeight; } return myHeight; } function setscrollpos() { var objf=document.getElementById('loadscrollpos'); document.getElementById("leftnav").scrollTop = objf.offsetTop - getWinHeight()/2; } function addEvent(obj, evType, fn){ if (obj.addEventListener){ obj.addEventListener(evType, fn, true); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } } addEvent(window, 'load', setscrollpos); //--></script><div id="leftnav"><div class="innertube"> <img alt="Erlang logo" src="../../../../doc/erlang-logo.png"><br><small><a href="users_guide.html">User's Guide</a><br><a href="index.html">Reference Manual</a><br><a href="release_notes.html">Release Notes</a><br><a href="../pdf/erl_docgen-0.3.3.pdf">PDF</a><br><a href="../../../../doc/index.html">Top</a></small><p><strong>Erl_Docgen</strong><br><strong>User's Guide</strong><br><small>Version 0.3.3</small></p> <br><a href="javascript:openAllFlips()">Expand All</a><br><a href="javascript:closeAllFlips()">Contract All</a><p><small><strong>Chapters</strong></small></p> <ul class="flipMenu" imagepath="../../../../doc/js/flipmenu"> <li id="loadscrollpos" title="How to Build OTP like documentation" expanded="true">How to Build OTP like documentation<ul> <li><a href="doc-build.html"> Top of chapter </a></li> <li title="Utilities to prepare XML files"><a href="doc-build.html#idp1349632">Utilities to prepare XML files</a></li> <li title="Use xsltproc to generate different output formats"><a href="doc-build.html#idp1338800">Use xsltproc to generate different output formats</a></li> </ul> </li> <li id="no" title="Overview OTP DTDs" expanded="false">Overview OTP DTDs<ul> <li><a href="overview.html"> Top of chapter </a></li> <li title="DTD Suite"><a href="overview.html#idp1305648">DTD Suite</a></li> <li title="Basic Tags"><a href="overview.html#idp1288176">Basic Tags</a></li> </ul> </li> <li id="no" title="User's Guide DTDs" expanded="false">User's Guide DTDs<ul> <li><a href="user_guide_dtds.html"> Top of chapter </a></li> <li title="The part DTD"><a href="user_guide_dtds.html#idp1276816">The part DTD</a></li> <li title="<part>"><a href="user_guide_dtds.html#idp1274016"><part></a></li> <li title="<description>"><a href="user_guide_dtds.html#idp1266192"><description></a></li> <li title="<include>"><a href="user_guide_dtds.html#idp1261696"><include></a></li> <li title="The chapter DTD"><a href="user_guide_dtds.html#idp1257584">The chapter DTD</a></li> <li title="<chapter>"><a href="user_guide_dtds.html#idp1252496"><chapter></a></li> <li title="<section>"><a href="user_guide_dtds.html#idp1247456"><section></a></li> <li title="<title>"><a href="user_guide_dtds.html#idp1243392"><title></a></li> </ul> </li> <li id="no" title="Reference Manual DTDs" expanded="false">Reference Manual DTDs<ul> <li><a href="refman_dtds.html"> Top of chapter </a></li> <li title="The application DTD"><a href="refman_dtds.html#idp1226960">The application DTD</a></li> <li title="<application>"><a href="refman_dtds.html#idp1218192"><application></a></li> <li title="The appref DTD"><a href="refman_dtds.html#idp1213504">The appref DTD</a></li> <li title="The comref DTD"><a href="refman_dtds.html#idp1195744">The comref DTD</a></li> <li title="The cref DTD"><a href="refman_dtds.html#idp1178768">The cref DTD</a></li> <li title="The erlref DTD"><a href="refman_dtds.html#idp1158768">The erlref DTD</a></li> <li title="The fileref DTD"><a href="refman_dtds.html#idp440720">The fileref DTD</a></li> <li title="<description>"><a href="refman_dtds.html#idp1304608"><description></a></li> <li title="<section>"><a href="refman_dtds.html#idp563072"><section></a></li> <li title="<funcs>"><a href="refman_dtds.html#idp1121264"><funcs></a></li> <li title="<func>"><a href="refman_dtds.html#idp1132640"><func></a></li> <li title="<name>"><a href="refman_dtds.html#idp1133648"><name></a></li> <li title="<fsummary>"><a href="refman_dtds.html#idp1141904"><fsummary></a></li> <li title="<type>"><a href="refman_dtds.html#idp768368"><type></a></li> <li title="<v>"><a href="refman_dtds.html#idp1131424"><v></a></li> <li title="<d>"><a href="refman_dtds.html#idp498000"><d></a></li> <li title="<desc>"><a href="refman_dtds.html#idp548768"><desc></a></li> <li title="<authors>"><a href="refman_dtds.html#idm21120"><authors></a></li> <li title="<aname>"><a href="refman_dtds.html#idp310736"><aname></a></li> <li title="<email>"><a href="refman_dtds.html#idp549776"><email></a></li> </ul> </li> <li id="no" title="Header Tags" expanded="false">Header Tags<ul> <li><a href="header_tags.html"> Top of chapter </a></li> <li title="<header>"><a href="header_tags.html#idp132352"><header></a></li> <li title="<copyright>"><a href="header_tags.html#idp322944"><copyright></a></li> <li title="<legalnotice>"><a href="header_tags.html#idp1111808"><legalnotice></a></li> <li title="<title>"><a href="header_tags.html#idp560016"><title></a></li> <li title="<shorttitle>"><a href="header_tags.html#idp766576"><shorttitle></a></li> <li title="<prepared>"><a href="header_tags.html#idp502496"><prepared></a></li> <li title="<responsible>"><a href="header_tags.html#idp719344"><responsible></a></li> <li title="<docno>"><a href="header_tags.html#idp439152"><docno></a></li> <li title="<approved>"><a href="header_tags.html#idp314976"><approved></a></li> <li title="<checked>"><a href="header_tags.html#idp119568"><checked></a></li> <li title="<date>"><a href="header_tags.html#idp443760"><date></a></li> <li title="<rev>"><a href="header_tags.html#idp436864"><rev></a></li> <li title="<file>"><a href="header_tags.html#idp713440"><file></a></li> </ul> </li> <li id="no" title="Block Tags" expanded="false">Block Tags<ul> <li><a href="block_tags.html"> Top of chapter </a></li> <li title="<br> - Line Break"><a href="block_tags.html#idp717616"><br> - Line Break</a></li> <li title="<code> - Code Example"><a href="block_tags.html#idp804480"><code> - Code Example</a></li> <li title="<codeinclude> - Code Inclusion"><a href="block_tags.html#idp1028912"><codeinclude> - Code Inclusion</a></li> <li title="<erleval> - Erlang Evaluation"><a href="block_tags.html#idp1052384"><erleval> - Erlang Evaluation</a></li> <li title="<list> - List"><a href="block_tags.html#idp1056176"><list> - List</a></li> <li title="<marker> - Marker"><a href="block_tags.html#idp1097152"><marker> - Marker</a></li> <li title="<p> - Paragraph"><a href="block_tags.html#idp1100000"><p> - Paragraph</a></li> <li title="<note> - Note"><a href="block_tags.html#idp1017376"><note> - Note</a></li> <li title="<pre> - Pre-formatted Text"><a href="block_tags.html#idp1022784"><pre> - Pre-formatted Text</a></li> <li title="<quote> - Quotation"><a href="block_tags.html#idp1146976"><quote> - Quotation</a></li> <li title="<taglist> - Definition List"><a href="block_tags.html#idp1152480"><taglist> - Definition List</a></li> <li title="<warning> - Warning"><a href="block_tags.html#idp861168"><warning> - Warning</a></li> <li title="<image> - Image"><a href="block_tags.html#idp867024"><image> - Image</a></li> <li title="<table> - Table"><a href="block_tags.html#idp999568"><table> - Table</a></li> </ul> </li> <li id="no" title="Inline Tags" expanded="false">Inline Tags<ul> <li><a href="inline_tags.html"> Top of chapter </a></li> <li title="<br> - Line Break"><a href="inline_tags.html#idp1041104"><br> - Line Break</a></li> <li title="<c> - Code"><a href="inline_tags.html#idp1043920"><c> - Code</a></li> <li title="<em> - Emphasis"><a href="inline_tags.html#idp1049280"><em> - Emphasis</a></li> <li title="<marker> - Marker"><a href="inline_tags.html#idp1060032"><marker> - Marker</a></li> <li title="<seealso> - Local Cross Reference"><a href="inline_tags.html#idp1066528"><seealso> - Local Cross Reference</a></li> <li title="<url> - Non-Local Cross Reference"><a href="inline_tags.html#idp1075168"><url> - Non-Local Cross Reference</a></li> <li title="<term>, <termdef> - Glossary"><a href="inline_tags.html#idp1079344"><term>, <termdef> - Glossary</a></li> <li title="<cite>, <citedef> - Bibliography"><a href="inline_tags.html#idp1086176"><cite>, <citedef> - Bibliography</a></li> </ul> </li> <li id="no" title="Character Entities" expanded="false">Character Entities<ul> <li><a href="character_entities.html"> Top of chapter </a></li> <li title="Added Latin 1"><a href="character_entities.html#idp1592736">Added Latin 1</a></li> </ul> </li> </ul> </div></div> <div id="content"> <div class="innertube"> <h1>1 How to Build OTP like documentation</h1> <h3><a name="idp1349632">1.1 Utilities to prepare XML files</a></h3> <h4>Create XML files from code</h4> <p> If there are EDoc comments in a module, the escript <span class="code">xml_from_edoc.escript</span> can be used to generate an XML file according to the <span class="code">erlref</span> DTD for this module. </p> <p> Example: </p> <div class="example"><pre> 1> escript $(ERL_TOP)/lib/erl_docgen/priv/bin/xml_from_edoc.escript ex1.erl </pre></div> <h4>Include code in XML</h4> <p>If there are OTP DTD codeinclude tags in the source XML file, the escript <span class="code">codeline_preprocessing.escript</span> can be used to include the code and produce an XML file according to the OTP DTDs. </p> <p> Example: </p> <div class="example"><pre> 1> escript $(ERL_TOP)/lib/erl_docgen/priv/bin/codeline_preprocessing.escript ex1.xmlsrc ex1.xml </pre></div> <h3><a name="idp1338800">1.2 Use xsltproc to generate different output formats</a></h3> <h4>Parameters used in all the the XSL transformations</h4> <p> These parameters to <span class="code">xsltproc</span> are used for all the supported output formats. </p> <dl> <dt><strong><span class="code">docgen</span></strong></dt> <dd> Path to erl_docgen's top directory. </dd> <dt><strong><span class="code">gendate</span></strong></dt> <dd> The date string that will be used in the documentation. </dd> <dt><strong><span class="code">appname</span></strong></dt> <dd> The name of the application.> </dd> <dt><strong><span class="code">appver</span></strong></dt> <dd> The version of the application. </dd> </dl> <h4>Generate HTML output</h4> <p> When generating HTML one also needs these three pramaters to <span class="code">xsltproc</span>. </p> <dl> <dt><strong><span class="code">outdir</span></strong></dt> <dd> Output directory for the produced html files. </dd> <dt><strong><span class="code">topdocdir</span></strong></dt> <dd> If one builds a standalone documentation for an application this should be set to ".". </dd> <dt><strong><span class="code">pdfdir</span></strong></dt> <dd> Relative path from the html directory to where the pdf file are placed. </dd> </dl> <p> Example: </p> <div class="example"><pre> 1> xsltproc --noout --stringparam outdir /tmp/myhtmldoc \ --stringparam docgen $(ERL_TOP)/lib/erl_docgen \ --stringparam topdocdir . \ --stringparam pdfdir "$(PDFDIR)" \ --xinclude \ --stringparam gendate "December 5 2011" \ --stringparam appname MyApp \ --stringparam appver 0.1 \ -path $ERL_TOP/lib/erl_docgen/priv/dtd \ -path $ERL_TOP/lib/erl_docgen/priv/dtd_html_entities \ $ERL_TOP/lib/erl_docgen/priv/xsl/db_html.xsl mybook.xml </pre></div> <h4>Generate PDF</h4> <p> The generation of the PDF file is done in two steps. First is <span class="code">xsltproc</span> used to generate a <span class="code">.fo</span> file which is used as input to the <span class="code">fop</span> command to produce th PDF file. </p> <p> Example: </p> <div class="example"><pre> 1> xsltproc --output MyApp.fo \ --stringparam docgen $ERL_TOP/lib/erl_docgen \ --stringparam gendate "December 5 2011" \ --stringparam appname MyApp \ --stringparam appver 0.1 \ --xinclude \ -path $ERL_TOP/lib/erl_docgen/priv/dtd \ -path $ERL_TOP/lib/erl_docgen/priv/dtd_html_entities \ $ERL_TOP/lib/erl_docgen/priv/xsl/db_pdf.xsl mybook.xml 2> fop -fo MyApp.fo -pdf MyApp.pdf </pre></div> <h4>Generate man pages</h4> <p> Unix man pages can be generated with <span class="code">xsltproc</span> from XML files written according to the different OTP ref type DTDs. </p> <p> Example: </p> <div class="example"><pre> 1> xsltproc --output my_module.3\ --stringparam docgen $ERL_TOP/lib/erl_docgen \ --stringparam gendate "December 5 2011" \ --stringparam appname MyApp \ --stringparam appver 0.1 \ --xinclude -path $ERL_TOP/lib/erl_docgen/priv/dtd \ -path $ERL_TOP/lib/erl_docgen/priv/dtd_man_entities \ $ERL_TOP/lib/erl_docgen/priv/xsl/db_man.xsl my_refpage.xml </pre></div> <h4>Upcomming changes</h4> <p> The output from the <span class="code">erl_docgen</span> documentation build process is now just the OTP style. But in a near future we will for example add the possibility to change logo, color in the PDF and style sheet for the HTML. </p> </div> <div class="footer"> <hr> <p>Copyright © 2004-2013 Ericsson AB. All Rights Reserved.</p> </div> </div> </div></body> </html>