summaryrefslogtreecommitdiffstats
path: root/en_US/docs-module-struct.xml
blob: a751f2bb1541a4ec889b20c87039d0d7c8fba3bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
<!-- $Id: -->
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
 "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [

<!-- *************** Bring in Fedora entities *************** -->
<!ENTITY % FEDORA-ENTITIES-EN SYSTEM "fdp-entities.ent">
%FEDORA-ENTITIES-EN;

]>

<chapter id="ch-how-modules-work">
  <title>How Modules Work</title>
  <para>Documentation modules have a specific structure that enables the
    preconfigured tools to work correctly.  Follow this structure exactly or you
    may have problems building your module.  The &FDP; build tools locate
    resources in the module and use them to build new output such as HTML or RPM
    packages.</para>
  <section id="sn-module-struct">
    <title>Structure of a Module</title>
    <para>The following listing shows a directory tree of an example module,
      excluding any <filename class="directory">CVS</filename> folders:</para>

    <screen><computeroutput><![CDATA[example-doc/
    |-- en_US/
            |-- example-doc.xml
            |-- para.xml
            |-- doc-entities.xml
            |-- rpm-info.xml
    |-- figs/
            |-- fedora-logo-sprite.eps
            |-- fedora-logo-sprite.png
    |-- po/
            |-- de.po
            |-- example-doc.pot
            |-- pt.po
    |-- Makefile]]></computeroutput></screen>
    
    <formalpara>
      <title>Primary language directory (required)</title>
      <para>This is the only directory absolutely required. It is named for the
	original language of the document, such as <filename
	  class="directory">en_US</filename> (US English).  The primary language
	does not have to be US English; all languages are supported.  This
	directory contains all the XML source for the actual document, as well
	as XML source for document-specific
	<firstterm>entities</firstterm><footnote>
	  <para>Think of an XML entity as a predefined snippet of information.
	    It can represent a chunk of XML source, or simply a word or
	    character. If the information changes, it need be replaced only
	    once, in the definition, to fix all usage.</para>
	</footnote>.
      </para>
    </formalpara>
    <formalpara>
      <title>Graphics directory (optional)</title>
      <para>The <filename class="directory">figs/</filename> directory is an
	optional directory where graphics for the document should be stored. If
	graphics are screenshots that are particular to a language, the
	<filename class="directory">figs/</filename> directory can and should be
	stored in a language directory.</para>
    </formalpara>
    <formalpara>
      <title>Translation (PO) directory (optional)</title> 
      <para>The <filename class="directory">po/</filename> directory contains
	specially formatted files created and used by translators. The &FDP;
	build tools use these files to create translated versions of documents.
	The translated documents are not stored in CVS; they are created as
	needed from these PO files.</para>
    </formalpara>
    <formalpara>
      <title>Makefile (required)</title>
      <para>The <filename>Makefile</filename> controls the build process. Its
	content is discussed below. <!-- include xref here --></para>
    </formalpara>
  </section>
  <section id="ch-getting-files-build-system">
    <title>The Document Build System</title>
    <para>
      Common tasks such as rendering the document into either
      <abbrev>HTML</abbrev> or <abbrev>PDF</abbrev> can be performed
      easily using the document building system. The building system
      heavily leverages the <application>make(1)</application> tool and
      shell scripts to automate these activities, but authors need
      <emphasis>no</emphasis> prior experience with either shell scripts
      or a <filename>Makefile</filename>. While individual documents do
      have their own <filename>Makefile</filename>, it is only a few
      lines long and very simple. The document
      <filename>Makefile</filename> content is designed for cut and
      paste operations.
    </para>
    <para>
      <xref
	linkend="ch-getting-files-build-system-makefile"/> below shows the
      whole <filename>Makefile</filename> for a simple document having
      only two files and one language.
    </para>
    <example id="ch-getting-files-build-system-makefile">
      <title>Sample Document Makefile</title>
      <programlisting>
<![CDATA[
DOCBASE         = example-doc
PRI_LANG      	= en_US
OTHERS          = de pt
DOC_ENTITIES    = doc-entities

define XMLFILES_template
XMLFILES-${1}   = ${1}/example-doc.xml \
                  ${1}/para.xml
endef

include ../docs-common/Makefile.common
]]>
      </programlisting>
    </example>
    <para>
      Do not be concerned with some of the more complicated syntax (in
      particular, the <command>XMLFILES_template</command> stanza).  An
      explanation for this template appears a few paragraphs
      below.</para>
    <formalpara>
      <title><varname>DOCBASE</varname></title>
      <para>This variable contains the name for the main (parent) XML document.
	Follow convention by naming your document after the module name.</para>
    </formalpara>
    <formalpara>
      <title><varname>PRI_LANG</varname></title>
      <para>This variable contains the ISO code for the original version of the
	document, such as <systemitem>en_US</systemitem>.</para>
    </formalpara>
    <formalpara>
      <title><varname>OTHERS</varname></title>
      <para>This variable contains a listing of ISO codes for any other versions
	into which the document has been translated.  The module must contain a
	<filename class="directory">po/</filename> directory and a PO file for
	any indicated additional languages.</para>
    </formalpara>
    <formalpara>
      <title><varname>DOC_ENTITIES</varname></title>
      <para>This variable contains a listing of any files containing entity
	definitions.  The &FDP; uses a special XML format to record
	document-specific entities, so they can be translated and built on the
	fly like any other XML document.  An example is shown later in this
	guide. <!-- need xref here --></para>
    </formalpara>
    <formalpara>
      <title><varname>XMLFILES_template</varname></title>
      <para>This template allows the build tools to work with the
	document in multiple languages once it is translated.  The
	<varname>${1}</varname> marking is a variable used to substitute
	the appropriate language.  This template is not terribly
	complicated.  For a new module, duplicate this section exactly
	except for the actual filenames.  Prepend the text
	<varname>${1}/</varname>, in place of the language code
	directory name, to each filename in your document.
      </para>
    </formalpara>
    <important>
      <title>Files Exempt From Listing</title>
      <para>Do not include the document-specific entities XML file or the
	<filename>rpm-info.xml</filename> file, which will be discussed later in
	this guide.<!-- include xref --></para>
    </important>
    <!-- TEMP MARKER - PWF finished here Nov 28 2006 -->
    <para>
      The final line, beginning with <literal>include</literal>, references the
      main <filename>Makefile</filename> for the build system. This
      <filename>Makefile.common</filename> file contains all the
      <application>make(1)</application> targets and rules to actually build the
      document and the various archives.
    </para>
    <para>
      Add new document translations by:
    </para>
    <orderedlist>
      <listitem>
        <para>
          Add the translated document files to the document directory.
          Be sure to use the proper <systemitem class="macro">${LANG}</systemitem> filename component to keep the filenames similar, but unique.
        </para>
      </listitem>
      <listitem>
        <para>
          Edit the <filename>Makefile</filename> to append the new <systemitem class="macro">${LANG}</systemitem> to the <systemitem class="macro">LANGUAGES</systemitem> definition.
        </para>
      </listitem>
      <listitem>
        <para>
          Create a new <systemitem class="macro">XMLEXTRAFILES-${LANG}</systemitem> definition that references any document files other than the base file.
        </para>
      </listitem>
    </orderedlist>
    <section id="ch-getting-files-build-system-targets">
      <title>Build System Actions</title>
      <para>
        To render the <abbrev>XML</abbrev> document into <abbrev>HTML</abbrev> or <abbrev>PDF</abbrev> the command: <userinput>make html</userinput>,
        <userinput>make html-nochunk</userinput>, or <userinput>make pdf</userinput> may be used.
      </para>
      <para>
        <xref linkend="ch-getting-files-build-system-targets-table"/> lists the defined build system targets.
      </para>
      <table id="ch-getting-files-build-system-targets-table">
        <title>Document Building Targets</title>
        <tgroup cols="2">
          <colspec align="right" colnum="1" colwidth="*1"/>
          <colspec colnum="2" colwidth="*5"/>
          <thead>
            <row>
              <entry><phrase>Target</phrase></entry>
              <entry><phrase>Description</phrase></entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry><phrase><filename>all</filename></phrase></entry>
              <entry>
                <para>
                  Builds the <abbrev>HTML</abbrev>, and the <abbrev>PDF</abbrev> forms of the document in all its defined translations.
                </para>
                <para>
                  Also builds the archives, such as <application>tar(1)</application> and <application>rpm(8)</application>.
                </para>
              </entry>
            </row>
            <row>
              <entry><phrase><filename>tarball</filename></phrase></entry>
              <entry>
                <para>
                  Builds only the <application>tar(1)</application> archive for all document languages.
                </para>
              </entry>
            </row>
            <row>
              <entry><phrase><filename>pdf</filename></phrase></entry>
              <entry>
                <para>
                  Builds only the <abbrev>PDF</abbrev> document for all document languages.
                </para>
                <para>
                  Currently, <abbrev>PDF</abbrev> production is problematic and probably will not work for your document.
                </para>
              </entry>
            </row>
            <row>
              <entry><phrase><filename>html</filename></phrase></entry>
              <entry>
                <para>
                  Builds only the <abbrev>HTML</abbrev> document for each defined translation.
                  Output is placed in a separate directory:
                  <systemitem class="macro">${DOCBASE}</systemitem><filename>-</filename><systemitem class="macro">${LANG}</systemitem><filename>/</filename>; each document section is given its own file within that directory.
                </para>
              </entry>
            </row>
            <row>
              <entry><phrase><filename>html-nochunks</filename></phrase></entry>
              <entry>
                <para>
                  Builds only the <abbrev>HTML</abbrev> document for each defined translation.
                  Output is placed in a single file:
                  <systemitem class="macro">${DOCBASE}</systemitem><filename>-</filename><systemitem class="macro">${LANG}</systemitem><filename>.html</filename>; no other files are created.
                </para>
              </entry>
            </row>
            <row>
              <entry><phrase><filename>clean</filename></phrase></entry>
              <entry>
                <para>
                  Deletes any temporary, or generated files.
                  Does <emphasis>not</emphasis> erase any <abbrev>HTML</abbrev>, <abbrev>PDF</abbrev>, or archive files.
                </para>
              </entry>
            </row>
            <row>
              <entry><phrase><filename>distclean</filename></phrase></entry>
              <entry>
                <para>
                  Erases all <abbrev>HTML</abbrev>, <abbrev>PDF</abbrev>, and archive files.
                  Automatically invokes the <filename>clean</filename> target as well.
                </para>
              </entry>
            </row>
          </tbody>
        </tgroup>
      </table>
      <para>
        You can add your own special targets and rules by placing them at the bottom of the document <filename>Makefile</filename>, below the <literal>include</literal> line.
      </para>
      <para>
        Be sure to follow your target definitions with a double colon, not just one.
        This will allow you to supply extra steps for the defined targets.
      </para>
    </section>
    <section id="ch-getting-files-build-system-images">
      <title>Using Document Image Files</title>
      <para>
        Image files, such as <filename>.PNG</filename>, are often used in documents.
        While your image files may be placed anywhere you like, we recommend that you store your image files in a <filename>figs/</filename> subdirectory within your document directory.
        In other words, place your image <filename>picture.png</filename> in the <filename>mydoc/figs/picture.png</filename> file.
      </para>
      <note>
      <title>Use PNG Images, Not JPG</title>
        <para>
            Depending on the output media, sometimes images may be scaled,
            streteched, or squashed.
            To minimize any distortions, we recommend that you use only
            <wordasword>PDF</wordasword> images and avoid <wordasword>JPG</wordasword> files.
        </para>
        <para>
          You may find the <systemitem class="filesystem">convert(1)</systemitem> program, from the <application>ImageMagick</application> <abbrev>RPM</abbrev> package, provides a convenient way to reformat any <wordasword>JPG</wordasword> images you already have.
        </para>
      </note>
      <para>
        You may organize your image files into as many subdirectories under <filename>figs/</filename> as you choose.
        The document building system will recreate your image subdirectory structure in the output documents.
      </para>
      <para>
        In addition, we recommend that you follow our convention on naming the image.
        For example, an image often contains a caption or other text.
        This text should be translated along with the document content, so keeping <filename>words-en.png</filename> separate from <filename>words-ru.png</filename> is a good practice.
        An image file with no text can be named just <filename>picture.png</filename>, for example.
      </para>
      <para>
        Sometimes, a document may require images that do not follow the naming convention.
        You may still use these images with the document building system, but it requires that you create an ordinary text file containing the image filenames you want to use.
        This file must be named <filename>figs/Manifest-</filename><systemitem class="macro">${LANG}</systemitem> so that the build system can find it as the search for image filenames begins.
      </para>
      <para>
        An easy way to create the <filename>figs/Manifest-</filename><systemitem class="macro">${LANG}</systemitem> file is shown in <xref linkend="ch-getting-files-build-system-manifest"/>.
      </para>
      <example id="ch-getting-files-build-system-manifest">
  <title>Building A Manifest</title>
<programlisting>
rm -f figs/Manifest-en
find figs -print >/tmp/manifest
mv /tmp/manifest figs/Manifest-en
vi figs/Manifest-en
</programlisting>
</example>

    </section>
  </section>
</chapter>

<!--
Local variables:
mode: xml
fill-column: 72
End:
-->