Let "html-base" and "xhtml11" writers wrap SVG images in <img> tags.
[docutils.git] / docutils / FAQ.txt
blobdf1dadec987d3b8face71f37f742c61f59779b23
1 .. -*- coding: utf-8 -*-
4 .. NOTE TO MAINTAINERS: Please add new questions to the end of their
5    sections, so section/question numbers remain stable.
8 ===========================================
9  Docutils FAQ (Frequently Asked Questions)
10 ===========================================
12 :Date: $Date$
13 :Revision: $Revision$
14 :Web site: http://docutils.sourceforge.net/
15 :Copyright: This document has been placed in the public domain.
17 .. contents::
18 .. sectnum::
21 This is a work in progress.  If you are reading a local copy, the
22 `master copy`_ might be newer.  This document uses are relative links;
23 if they don't work, please use the `master copy`_.
25 Please feel free to ask questions and/or provide answers; send email
26 to the `Docutils-users`_ mailing list.  Project members should feel
27 free to edit the source text file directly.
29 .. _master copy: http://docutils.sourceforge.net/FAQ.html
30 .. _let us know:
31 .. _Docutils-users: docs/user/mailing-lists.html#docutils-users
35 Docutils
36 ========
38 What is Docutils?
39 -----------------
41 Docutils_ is a system for processing plaintext documentation into
42 useful formats, such as HTML, XML, and LaTeX.  It supports multiple
43 types of input, such as standalone files (implemented), inline
44 documentation from Python modules and packages (under development),
45 `PEPs (Python Enhancement Proposals)`_ (implemented), and others as
46 discovered.
48 The Docutils distribution consists of:
50 * a library (the "docutils" package), which `can be used by client
51   code`_;
52 * several `front-end tools`_ (such as ``rst2html.py``, which converts
53   reStructuredText input into HTML output);
54 * a `test suite`_; and
55 * extensive documentation_.
57 For an overview of the Docutils project implementation, see `PEP
58 258`_, "Docutils Design Specification".
60 Docutils is implemented in Python_.
62 .. _Docutils: http://docutils.sourceforge.net/
63 .. _PEPs (Python Enhancement Proposals):
64    http://www.python.org/peps/pep-0012.html
65 .. _can be used by client code: docs/api/publisher.html
66 .. _front-end tools: docs/user/tools.html
67 .. _test suite: docs/dev/testing.html
68 .. _documentation: docs/index.html
69 .. _PEP 258: http://www.python.org/peps/pep-0258.html
70 .. _Python: http://www.python.org/
73 Why is it called "Docutils"?
74 ----------------------------
76 Docutils is short for "Python Documentation Utilities".  The name
77 "Docutils" was inspired by "Distutils", the Python Distribution
78 Utilities architected by Greg Ward, a component of Python's standard
79 library.
81 The earliest known use of the term "docutils" in a Python context was
82 a `fleeting reference`__ in a message by Fred Drake on 1999-12-02 in
83 the Python Doc-SIG mailing list.  It was suggested `as a project
84 name`__ on 2000-11-27 on Doc-SIG, again by Fred Drake, in response to
85 a question from Tony "Tibs" Ibbs: "What do we want to *call* this
86 thing?".  This was shortly after David Goodger first `announced
87 reStructuredText`__ on Doc-SIG.
89 Tibs used the name "Docutils" for `his effort`__ "to document what the
90 Python docutils package should support, with a particular emphasis on
91 documentation strings".  Tibs joined the current project (and its
92 predecessors) and graciously donated the name.
94 For more history of reStructuredText and the Docutils project, see `An
95 Introduction to reStructuredText`_.
97 Please note that the name is "Docutils", not "DocUtils" or "Doc-Utils"
98 or any other variation.  It is pronounced as in "DOCumentation
99 UTILitieS", with emphasis on the first syllable.
101 .. _An Introduction to reStructuredText: docs/ref/rst/introduction.html
102 __ http://mail.python.org/pipermail/doc-sig/1999-December/000878.html
103 __ http://mail.python.org/pipermail/doc-sig/2000-November/001252.html
104 __ http://mail.python.org/pipermail/doc-sig/2000-November/001239.html
105 __ http://homepage.ntlworld.com/tibsnjoan/docutils/STpy.html
108 Is there a GUI authoring environment for Docutils?
109 --------------------------------------------------
111 DocFactory_ is under development.  It uses wxPython and looks very
112 promising.
114 .. _DocFactory:
115    http://docutils.sf.net/sandbox/gschwant/docfactory/doc/
118 What is the status of the Docutils project?
119 -------------------------------------------
121 Although useful and relatively stable, Docutils is experimental code,
122 with APIs and architecture subject to change.
124 Our highest priority is to fix bugs as they are reported.  So the
125 latest code from the repository_ (or the snapshots_) is almost always
126 the most stable (bug-free) as well as the most featureful.
129 What is the Docutils project release policy?
130 --------------------------------------------
132 It's "release early & often".  We also have automatically-generated
133 snapshots_ which always contain the latest code from the repository_.
134 As the project matures, we may formalize on a
135 stable/development-branch scheme, but we're not using anything like
136 that yet.
138 .. _repository: docs/dev/repository.html
139 .. _snapshots: http://docutils.sourceforge.net/#download
142 reStructuredText
143 ================
145 What is reStructuredText?
146 -------------------------
148 reStructuredText_ is an easy-to-read, what-you-see-is-what-you-get
149 plaintext markup syntax and parser system.  The reStructuredText
150 parser is a component of Docutils_.  reStructuredText is a revision
151 and reinterpretation of the StructuredText_ and Setext_ lightweight
152 markup systems.
154 If you are reading this on the web, you can see for yourself.  `The
155 source for this FAQ <FAQ.txt>`_ is written in reStructuredText; open
156 it in another window and compare them side by side.
158 `A ReStructuredText Primer`_ and the `Quick reStructuredText`_ user
159 reference are a good place to start.  The `reStructuredText Markup
160 Specification`_ is a detailed technical specification.
162 .. _A ReStructuredText Primer: docs/user/rst/quickstart.html
163 .. _Quick reStructuredText: docs/user/rst/quickref.html
164 .. _reStructuredText Markup Specification:
165    docs/ref/rst/restructuredtext.html
166 .. _reStructuredText: http://docutils.sourceforge.net/rst.html
167 .. _StructuredText:
168    http://dev.zope.org/Members/jim/StructuredTextWiki/FrontPage/
169 .. _Setext: http://docutils.sourceforge.net/mirror/setext.html
172 Why is it called "reStructuredText"?
173 ------------------------------------
175 The name came from a combination of "StructuredText", one of
176 reStructuredText's predecessors, with "re": "revised", "reworked", and
177 "reinterpreted", and as in the ``re.py`` regular expression module.
178 For a detailed history of reStructuredText and the Docutils project,
179 see `An Introduction to reStructuredText`_.
181 "reStructuredText" is **ONE** word, *not two!*
184 What's the standard abbreviation for "reStructuredText"?
185 --------------------------------------------------------
187 "RST" and "ReST" (or "reST") are both acceptable.  Care should be
188 taken with capitalization, to avoid confusion with "REST__", an
189 acronym for "Representational State Transfer".
191 The abbreviations "reSTX" and "rSTX"/"rstx" should **not** be used;
192 they overemphasize reStructuredText's precedessor, Zope's
193 StructuredText.
195 __ http://en.wikipedia.org/wiki/Representational_State_Transfer
198 What's the standard filename extension for a reStructuredText file?
199 -------------------------------------------------------------------
201 It's ".txt".  Some people would like to use ".rest" or ".rst" or
202 ".restx", but why bother?  ReStructuredText source files are meant to
203 be readable as plaintext, and most operating systems already associate
204 ".txt" with text files.  Using a specialized filename extension would
205 require that users alter their OS settings, which is something that
206 many users will not be willing or able to do.
208 Also see `What's the official MIME type for reStructuredText data?`_
211 Are there any reStructuredText editor extensions?
212 -------------------------------------------------
214 See `Editor Support for reStructuredText`__.
216 __ tools/editors/README.html
219 How can I indicate the document title?  Subtitle?
220 -------------------------------------------------
222 A uniquely-adorned section title at the beginning of a document is
223 treated specially, as the document title.  Similarly, a
224 uniquely-adorned section title immediately after the document title
225 becomes the document subtitle.  For example::
227     This is the Document Title
228     ==========================
230     This is the Document Subtitle
231     -----------------------------
233     Here's an ordinary paragraph.
235 Counterexample::
237     Here's an ordinary paragraph.
239     This is *not* a Document Title
240     ==============================
242     The "ordinary paragraph" above the section title
243     prevents it from becoming the document title.
245 Another counterexample::
247     This is not the Document Title,  because...
248     ===========================================
250     Here's an ordinary paragraph.
252     ... the title adornment is not unique
253     =====================================
255     Another ordinary paragraph.
258 How can I represent esoteric characters (e.g. character entities) in a document?
259 --------------------------------------------------------------------------------
261 For example, say you want an em-dash (XML character entity &mdash;,
262 Unicode character U+2014) in your document: use a real em-dash.
263 Insert concrete characters (e.g. type a *real* em-dash) into your
264 input file, using whatever encoding suits your application, and tell
265 Docutils the input encoding.  Docutils uses Unicode internally, so the
266 em-dash character is a real em-dash internally.
268 Emacs users should refer to the `Emacs Support for reStructuredText`__
269 document.  Tips for other editors are welcome.
271 __ tools/editors/emacs/README.html
273 ReStructuredText has no character entity subsystem; it doesn't know
274 anything about XML charents.  To Docutils, "&mdash;" in input text is
275 7 discrete characters; no interpretation happens.  When writing HTML,
276 the "&" is converted to "&amp;", so in the raw output you'd see
277 "&amp;mdash;".  There's no difference in interpretation for text
278 inside or outside inline literals or literal blocks -- there's no
279 character entity interpretation in either case.
281 If you can't use a Unicode-compatible encoding and must rely on 7-bit
282 ASCII, there is a workaround.  New in Docutils 0.3.10 is a set of
283 `Standard Substitution Definition Sets`_, which provide equivalents of
284 XML & HTML character entity sets as substitution definitions.  For
285 example, the Japanese yen currency symbol can be used as follows::
287     .. include:: <xhtml1-lat1.txt>
289     |yen| 600 for a complete meal?  That's cheap!
291 For earlier versions of Docutils, equivalent files containing
292 character entity set substitution definitions using the "unicode_"
293 directive `are available`_.  Please read the `description and
294 instructions`_ for use.  Thanks to David Priest for the original idea.
296 If you insist on using XML-style charents, you'll have to implement a
297 pre-processing system to convert to UTF-8 or something.  That
298 introduces complications though; you can no longer *write* about
299 charents naturally; instead of writing "&mdash;" you'd have to write
300 "&amp;mdash;".
302 For the common case of long dashes, you might also want to insert the
303 following substitution definitons into your document (both of them are
304 using the "unicode_" directive)::
306     .. |--| unicode:: U+2013   .. en dash
307     .. |---| unicode:: U+2014  .. em dash, trimming surrounding whitespace
308        :trim:
310 .. |--| unicode:: U+2013   .. en dash
311 .. |---| unicode:: U+2014  .. em dash, trimming surrounding whitespace
312    :trim:
314 Now you can write dashes using pure ASCII: "``foo |--| bar; foo |---|
315 bar``", rendered as "foo |--| bar; foo |---| bar".  (Note that Mozilla
316 and Firefox may render this incorrectly.)  The ``:trim:`` option for
317 the em dash is necessary because you cannot write "``foo|---|bar``";
318 thus you need to add spaces ("``foo |---| bar``") and advise the
319 reStructuredText parser to trim the spaces.
321 .. _Standard Substitution Definition Sets: docs/ref/rst/substitutions.html
322 .. _unicode: docs/ref/rst/directives.html#unicode-character-codes
323 .. _are available: http://docutils.sourceforge.net/tmp/charents/
324 .. _tarball: http://docutils.sourceforge.net/tmp/charents.tgz
325 .. _description and instructions:
326    http://docutils.sourceforge.net/tmp/charents/README.html
327 .. _to-do list: docs/dev/todo.html
330 How can I generate backticks using a Scandinavian keyboard?
331 -----------------------------------------------------------
333 The use of backticks in reStructuredText is a bit awkward with
334 Scandinavian keyboards, where the backtick is a "dead" key.  To get
335 one ` character one must press SHIFT-` + SPACE.
337 Unfortunately, with all the variations out there, there's no way to
338 please everyone.  For Scandinavian programmers and technical writers,
339 this is not limited to reStructuredText but affects many languages and
340 environments.
342 Possible solutions include
344 * If you have to input a lot of backticks, simply type one in the
345   normal/awkward way, select it, copy and then paste the rest (CTRL-V
346   is a lot faster than SHIFT-` + SPACE).
348 * Use keyboard macros.
350 * Remap the keyboard.  The Scandinavian keyboard layout is awkward for
351   other programming/technical characters too; for example, []{}
352   etc. are a bit awkward compared to US keyboards.
354   According to Axel Kollmorgen,
356       Under Windows, you can use the `Microsoft Keyboard Layout Creator
357       <http://www.microsoft.com/globaldev/tools/msklc.mspx>`__ to easily
358       map the backtick key to a real backtick (no dead key). took me
359       five minutes to load my default (german) keyboard layout, untick
360       "Dead Key?" from the backtick key properties ("in all shift
361       states"), "build dll and setup package", install the generated
362       .msi, and add my custom keyboard layout via Control Panel >
363       Regional and Language Options > Languages > Details > Add
364       Keyboard layout (and setting it as default "when you start your
365       computer").
367 * Use a virtual/screen keyboard or character palette, such as:
369   - `Web-based keyboards <http://keyboard.lab.co.il/>`__ (IE only
370     unfortunately).
371   - Windows: `Click-N-Type <http://www.lakefolks.org/cnt/>`__.
372   - Mac OS X: the Character Palette can store a set of favorite
373     characters for easy input.  Open System Preferences,
374     International, Input Menu tab, enable "Show input menu in menu
375     bar", and be sure that Character Palette is enabled in the list.
377 If anyone knows of other/better solutions, please `let us know`_.
380 Are there any tools for HTML/XML-to-reStructuredText?  (Round-tripping)
381 -----------------------------------------------------------------------
383 People have tossed the idea around, and some implementations of
384 reStructuredText-generating tools can be found in the `Docutils Link
385 List`_.
387 There's no reason why reStructuredText should not be round-trippable
388 to/from XML; any technicalities which prevent round-tripping would be
389 considered bugs.  Whitespace would not be identical, but paragraphs
390 shouldn't suffer.  The tricky parts would be the smaller details, like
391 links and IDs and other bookkeeping.
393 For HTML, true round-tripping may not be possible.  Even adding lots
394 of extra "class" attributes may not be enough.  A "simple HTML" to RST
395 filter is possible -- for some definition of "simple HTML" -- but HTML
396 is used as dumb formatting so much that such a filter may not be
397 particularly useful.  An 80/20 approach should work though: build a
398 tool that does 80% of the work automatically, leaving the other 20%
399 for manual tweaks.
401 .. _Docutils Link List: docs/user/links.html
404 Are there any Wikis that use reStructuredText syntax?
405 -----------------------------------------------------
407 There are several, with various degrees of completeness.  With no
408 implied endorsement or recommendation, and in no particular order:
410 * `Webware for Python wiki
411   <http://wiki.webwareforpython.org/thiswiki.html>`__
413 * `Ian Bicking's experimental code
414   <http://docutils.sf.net/sandbox/ianb/wiki/Wiki.py>`__
416 * `MoinMoin <http://moinmoin.wikiwikiweb.de/>`__ has some support;
417   `here's a sample <http://moinmoin.wikiwikiweb.de/RestSample>`__
419 * Zope-based `Zwiki <http://zwiki.org/>`__
421 * Zope3-based Zwiki (in the Zope 3 source tree as
422   ``zope.products.zwiki``)
424 * `StikiWiki <http://mithrandr.moria.org/code/stikiwiki/>`__
426 * `Trac <http://trac.edgewall.com//>`__ `supports using
427   reStructuredText
428   <http://trac.edgewall.com//wiki/WikiRestructuredText>`__ as
429   an alternative to wiki markup. This includes support for `TracLinks
430   <http://trac.edgewall.com//wiki/TracLinks>`__ from within
431   RST text via a custom RST reference-directive or, even easier, an
432   interpreted text role 'trac'
434 Please `let us know`_ of any other reStructuredText Wikis.
436 The example application for the `Web Framework Shootout
437 <http://colorstudy.com/docs/shootout.html>`__ article is a Wiki using
438 reStructuredText.
441 Are there any Weblog (Blog) projects that use reStructuredText syntax?
442 ----------------------------------------------------------------------
444 With no implied endorsement or recommendation, and in no particular
445 order:
447 * `Firedrop <http://www.voidspace.org.uk/python/firedrop2/>`__
448 * `PyBloxsom <http://pyblosxom.sourceforge.net/>`__
449 * `Lino WebMan <http://lino.sourceforge.net/webman.html>`__
450 * `Pelican <http://blog.getpelican.com/>`__
451   (also  listed `on PyPi <http://pypi.python.org/pypi/pelican>`__)
453 Please `let us know`_ of any other reStructuredText Blogs.
456 .. _Can lists be indented without generating block quotes?:
458 How should I mark up lists?
459 ---------------------------
461 Bullet_ & enumerated_ list markup is very intuitive but there are 2
462 points that must be noted:
464 .. _bullet: docs/ref/rst/restructuredtext.html#bullet-lists
465 .. _enumerated: docs/ref/rst/restructuredtext.html#enumerated-lists
467 1. Lists should **not** be indented.  This is correct::
469        paragraph
471        * list item 1
473          * nested item 1.1
474          * nested item 1.2
476        * list item 2
478    while this is probably incorrect::
480        paragraph
482          * list item 1
484              * nested item 1.1
485              * nested item 1.2
487          * list item 2
489    The extra indentation (of the list containing items 1.1 and 1.2) is
490    recognized as a block quote.  This is usually not what you mean and
491    it causes the list in the output to be indented too much.
493 2. There **must** be blank lines around list items, except between
494    items of the same level, where blank lines are optional.  The
495    example above shows this.
497 Note that formatting of the *output* is independent of the input, and
498 is decided by the writer and the stylesheet.  For instance, lists
499 *are* indented in HTML output by default.  See `How are lists
500 formatted in HTML?`_ for details.
503 Could lists be indented without generating block quotes?
504 --------------------------------------------------------
506 Some people like to write lists with indentation but don't intend a
507 blockquote context.  There has been a lot of discussion about allowing
508 this in reStructuredText, but there are some issues that would need to
509 be resolved before it could be implemented.  There is a summary of the
510 issues and pointers to the discussions in `the to-do list`__.
512 __ docs/dev/todo.html#indented-lists
515 Could the requirement for blank lines around lists be relaxed?
516 --------------------------------------------------------------
518 Short answer: no.
520 In reStructuredText, it would be impossible to unambigously mark up
521 and parse lists without blank lines before and after.  Deeply nested
522 lists may look ugly with so many blank lines, but it's a price we pay
523 for unambiguous markup.  Some other plaintext markup systems do not
524 require blank lines in nested lists, but they have to compromise
525 somehow, either accepting ambiguity or requiring extra complexity.
526 For example, `Epytext <http://epydoc.sf.net/epytext.html#list>`__ does
527 not require blank lines around lists, but it does require that lists
528 be indented and that ambiguous cases be escaped.
531 How can I include mathematical equations in documents?
532 ------------------------------------------------------
534 Use the `math directive`_ and `math role`_, available since Docutils 0.8.
536 .. _math directive: docs/ref/rst/directives.html#math
537 .. _math role: docs/ref/rst/roles.html#math
540 Is nested inline markup possible?
541 ---------------------------------
543 Not currently, no.  It's on the `to-do list`__ (`details here`__), and
544 hopefully will be part of the reStructuredText parser soon.  At that
545 time, markup like this will become possible::
547     Here is some *emphasized text containing a `hyperlink`_ and
548     ``inline literals``*.
550 __ docs/dev/todo.html#nested-inline-markup
551 __ docs/dev/rst/alternatives.html#nested-inline-markup
553 There are workarounds, but they are either convoluted or ugly or both.
554 They are not recommended.
556 * Inline markup can be combined with hyperlinks using `substitution
557   definitions`__ and references__ with the `"replace" directive`__.
558   For example::
560       Here is an |emphasized hyperlink|_.
562       .. |emphasized hyperlink| replace:: *emphasized hyperlink*
563       .. _emphasized hyperlink: http://example.org
565   It is not possible for just a portion of the replacement text to be
566   a hyperlink; it's the entire replacement text or nothing.
568   __ docs/ref/rst/restructuredtext.html#substitution-definitions
569   __ docs/ref/rst/restructuredtext.html#substitution-references
570   __ docs/ref/rst/directives.html#replace
572 * The `"raw" directive`__ can be used to insert raw HTML into HTML
573   output::
575       Here is some |stuff|.
577       .. |stuff| raw:: html
579          <em>emphasized text containing a
580          <a href="http://example.org">hyperlink</a> and
581          <tt>inline literals</tt></em>
583   Raw LaTeX is supported for LaTeX output, etc.
585   __ docs/ref/rst/directives.html#raw
588 How to indicate a line break or a significant newline?
589 ------------------------------------------------------
591 `Line blocks`__ are designed for address blocks, verse, and other
592 cases where line breaks are significant and must be preserved.  Unlike
593 literal blocks, the typeface is not changed, and inline markup is
594 recognized.  For example::
596     | A one, two, a one two three four
597     |
598     | Half a bee, philosophically,
599     |     must, *ipso facto*, half not be.
600     | But half the bee has got to be,
601     |     *vis a vis* its entity.  D'you see?
602     |
603     | But can a bee be said to be
604     |     or not to be an entire bee,
605     |         when half the bee is not a bee,
606     |             due to some ancient injury?
607     |
608     | Singing...
610 __ docs/ref/rst/restructuredtext.html#line-blocks
612 Here's a workaround for manually inserting explicit line breaks in
613 HTML output::
615     .. |br| raw:: html
617        <br />
619     I want to break this line here: |br| this is after the break.
621     If the extra whitespace bothers you, |br|\ backslash-escape it.
624 A URL containing asterisks doesn't work.  What to do?
625 -----------------------------------------------------
627 Asterisks are valid URL characters (see :RFC:`2396`), sometimes used
628 in URLs.  For example::
630     http://cvs.example.org/viewcvs.py/*checkout*/module/file
632 Unfortunately, the parser thinks the asterisks are indicating
633 emphasis.  The slashes serve as delineating punctuation, allowing the
634 asterisks to be recognized as markup.  The example above is separated
635 by the parser into a truncated URL, an emphasized word, and some
636 regular text::
638     http://cvs.example.org/viewcvs.py/
639     *checkout*
640     /module/file
642 To turn off markup recognition, use a backslash to escape at least the
643 first asterisk, like this::
645     http://cvs.example.org/viewcvs.py/\*checkout*/module/file
647 Escaping the second asterisk doesn't hurt, but it isn't necessary.
650 How can I make a literal block with *some* formatting?
651 ------------------------------------------------------
653 Use the `parsed-literal`_ directive.
655 .. _parsed-literal: docs/ref/rst/directives.html#parsed-literal
657 Scenario: a document contains some source code, which calls for a
658 literal block to preserve linebreaks and whitespace.  But part of the
659 source code should be formatted, for example as emphasis or as a
660 hyperlink.  This calls for a *parsed* literal block::
662     .. parsed-literal::
664        print "Hello world!"  # *tricky* code [1]_
666 The emphasis (``*tricky*``) and footnote reference (``[1]_``) will be
667 parsed.
670 Can reStructuredText be used for web or generic templating?
671 -----------------------------------------------------------
673 Docutils and reStructuredText can be used with or as a component of a
674 templating system, but they do not themselves include templating
675 functionality.  Templating should simply be left to dedicated
676 templating systems.  Users can choose a templating system to apply to
677 their reStructuredText documents as best serves their interests.
679 There are many good templating systems for Python (ht2html_, YAPTU_,
680 Quixote_'s PTL, Cheetah_, etc.; see this non-exhaustive list of `some
681 other templating systems`_), and many more for other languages, each
682 with different approaches.  We invite you to try several and find one
683 you like.  If you adapt it to use Docutils/reStructuredText, please
684 consider contributing the code to Docutils or `let us know`_ and we'll
685 keep a list here.
687 One reST-specific web templating system is `rest2web
688 <http://www.voidspace.org.uk/python/rest2web>`_, a tool for
689 automatically building websites, or parts of websites.
691 .. _ht2html: http://ht2html.sourceforge.net/
692 .. _YAPTU:
693    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52305
694 .. _Quixote: http://www.mems-exchange.org/software/quixote/
695 .. _Cheetah: http://www.cheetahtemplate.org/
696 .. _some other templating systems:
697    http://webware.sourceforge.net/Papers/Templates/
700 How can I mark up a FAQ or other list of questions & answers?
701 -------------------------------------------------------------
703 There is no specific syntax for FAQs and Q&A lists.  Here are two
704 options:
706 1. For a FAQ (Frequently Asked Questions, usually with answers), a
707    convenient way to mark up the questions is as section titles, with
708    the answer(s) as section content.  This document is marked up in
709    this way.
711    The advantages of using section titles for questions are: sections
712    can be numbered automatically, and a table of contents can be
713    generated automatically.  One limitation of this format is that
714    questions must fit on one line (section titles may not wrap, in the
715    source text).  For very long questions, the title may be a summary
716    of the question, with the full question in the section body.
718 2. Field lists work well as Q&A lists::
720        :Q: What kind of questions can we
721            put here?
723        :A: Any kind we like!
725    In order to separate questions, lists can be used:
727        1. :Q: What kind of question can we
728               put here?
729           :A: Any kind we like!
731        2. :Q: How many answers can a question have?
732           :A: It can have one,
733           :A: or more.
734           :A3: Answers can be numbered like this.
735           :A: 1. Or like this.
736               2. We're flexible!
738    If you don't want to number or otherwise mark questions, you can
739    use an empty comment between individual field lists to separate
740    them::
742        :Q: First question?
743        :A: Answer.
745        ..
747        :Q: Second question?
748        :A: Answer.
751 .. _bidi:
753 Can I produce documents in right-to-left languages?
754 ---------------------------------------------------
756 Languages written from right to left, such as Arabic and Hebrew, must
757 be reordered according to the `Unicode Bidi Algorithm`_.  This
758 requires support from the editor and special markup in the output
759 format.
761 The source format of reStructuredText is relatively bidi-friendly:
762 most constructs are denoted by punctuation without intrusion of
763 English and when you must write in English, it's usually on a separate
764 line.  So any editor that auto-detects direction per-line (like gedit
765 or geresh_) will suffice.
767 Moreover, it's possible to translate_ all reStructuredText keywords.
768 This was not yet done for any RTL language, but when it is, it will be
769 possible to write an RTL document with vitually no English.  This will
770 allow reasonable use of editors limited to a single base direction for
771 the whole document (like Notepad, Vim and text boxes in Firefox).
773 .. _Unicode Bidi Algorithm: http://www.unicode.org/reports/tr9/
774 .. _geresh: http://www.typo.co.il/~mooffie/geresh/
775 .. _translate: docs/howto/i18n.html
777 The second problem is bidi markup of the output.  There is an almost
778 transparent implicit solution for HTML:
780 * Grab http://cben-hacks.sourceforge.net/bidi/hibidi.py and
781   http://cben-hacks.sourceforge.net/bidi/rst2html_hibidi.py.
782   Put them both in the same directory and make them executable.
783   
784 * Use ``rst2html_hibidi.py`` instead of ``rst2html.py``.
786 * It infers dir attributes in the HTML from the text.  It does it
787   hierachically, giving much better results than usual.  You can still
788   use LRM/RLM and LRE/RLE/PDF control codes to help it.
790   * If you want the gory details: See the full theory_, and note the
791     incomplete practice_ (this is still a partial implementation - but
792     sufficient for most needs).
794     .. _theory: http://cben-hacks.sf.net/bidi/hibidi.html
795     .. _practice: http://cben-hacks.sf.net/bidi/hibidi.html#practice
797 There is also an explicit way to set directions through CSS and
798 classes in the HTML:
800 * Copy ``default.css`` to a new file and add relevant parts of the
801   following::
803       /* Use these two if the main document direction is RTL */
804       body { direction: rtl; }
805       div.sidebar { float: left !important; }
807       /* The next 3 rules are very useful in documents containing pieces
808       of code in english */
809       /* Use this if you all your literal blocks (::) are LTR */
810       pre {direction: ltr; unicode-bidi: embed; }
811       /* Use this if you all your inline literals (``) are LTR */
812       tt {direction: ltr; unicode-bidi: embed; }
813       /* Use this if you all your interpretted text (`) is LTR */
814       cite {direction: ltr; unicode-bidi: embed; }
816       /* Allow manual direction override by class directive and roles */
817       .rtl { direction: rtl; }
818       .ltr { direction: ltr; }
820 * Select this new stylesheet with ``--stylesheet=<file>`` or the
821   stylesheet_ setting.
822   
823 * Now if you need to override the direction of some element (from a
824   paragraph to a whole section), write::
826       .. class:: rtl
828   or::
830       .. class:: ltr
832   before it (see the class_ directive for details).
834 * To change the direction of some inline text fragment, you can use
835   RLE/LRE/PDF control characters, or write ``:rtl:`RTL text``` /
836   ``:ltr:`RTL text```.  To use the latter syntax, you must write this
837   once at the beginning of your document::
839       .. role:: ltr
840       .. role:: rtl
842 .. _stylesheet: docs/user/config.html#stylesheet
843 .. _class: docs/ref/rst/directives.txt#class
845 LaTeX is quite hard to implement (it doesn't support the bidi
846 algorithm, so all direction changes - even numbers in RTL text - must
847 be explicitly marked).  Other formats are more-or-less easy.
849 If you have any questions/problems/bugs related to bidi with docutils,
850 ask `Beni Cherniavsky`__ directly or the `Docutils-users`_ mailing
851 list.
853 __ mailto:cben@users.sf.net
856 What's the official MIME type for reStructuredText data?
857 --------------------------------------------------------
859 While there is no registered MIME type for reStructuredText, the
860 "official unofficial" standard MIME type is "text/x-rst".  This was
861 invented for the build system for PEPs (Python Enhancement Proposals),
862 and it's used by the python.org web site build system.
864 (The "x-" prefix means it's an unregistered MIME type.)
866 Also see `What's the standard filename extension for a
867 reStructuredText file?`_
870 HTML Writer
871 ===========
873 What is the status of the HTML Writer?
874 --------------------------------------
876 The HTML Writer module, ``docutils/writers/html4css1.py``, is a
877 proof-of-concept reference implementation.  While it is a complete
878 implementation, some aspects of the HTML it produces may be incompatible
879 with older browsers or specialized applications (such as web templating).
880 The sandbox has some alternative HTML writers, contributions are welcome.
883 What kind of HTML does it produce?
884 ----------------------------------
886 It produces XHTML compatible with the `XHTML 1.0`_ specification.  A
887 cascading stylesheet is required for proper viewing with a modern
888 graphical browser.  Correct rendering of the HTML produced depends on
889 the CSS support of the browser.  A general-purpose stylesheet,
890 ``html4css1.css`` is provided with the code, and is embedded by
891 default.  It is installed in the "writers/html4css1/" subdirectory
892 within the Docutils package.  Use the ``--help`` command-line option
893 to see the specific location on your machine.
895 .. _XHTML 1.0: http://www.w3.org/TR/xhtml1/
898 What browsers are supported?
899 ----------------------------
901 No specific browser is targeted; all modern graphical browsers should
902 work.  Some older browsers, text-only browsers, and browsers without
903 full CSS support are known to produce inferior results.  Firefox,
904 Safari, Mozilla (version 1.0 and up), Opera, and MS Internet Explorer
905 (version 5.0 and up) are known to give good results.  Reports of
906 experiences with other browsers are welcome.
909 Unexpected results from tools/rst2html.py: H1, H1 instead of H1, H2.  Why?
910 --------------------------------------------------------------------------
912 Here's the question in full:
914     I have this text::
916         Heading 1
917         =========
919         All my life, I wanted to be H1.
921         Heading 1.1
922         -----------
924         But along came H1, and so shouldn't I be H2?
925         No!  I'm H1!
927         Heading 1.1.1
928         *************
930         Yeah, imagine me, I'm stuck at H3!  No?!?
932     When I run it through tools/rst2html.py, I get unexpected results
933     (below).  I was expecting H1, H2, then H3; instead, I get H1, H1,
934     H2::
936         ...
937         <html lang="en">
938         <head>
939         ...
940         <title>Heading 1</title>
941         </head>
942         <body>
943         <div class="document" id="heading-1">
944         <h1 class="title">Heading 1</h1>                <-- first H1
945         <p>All my life, I wanted to be H1.</p>
946         <div class="section" id="heading-1-1">
947         <h1><a name="heading-1-1">Heading 1.1</a></h1>        <-- H1
948         <p>But along came H1, and so now I must be H2.</p>
949         <div class="section" id="heading-1-1-1">
950         <h2><a name="heading-1-1-1">Heading 1.1.1</a></h2>
951         <p>Yeah, imagine me, I'm stuck at H3!</p>
952         ...
954     What gives?
956 Check the "class" attribute on the H1 tags, and you will see a
957 difference.  The first H1 is actually ``<h1 class="title">``; this is
958 the document title, and the default stylesheet renders it centered.
959 There can also be an ``<h2 class="subtitle">`` for the document
960 subtitle.
962 If there's only one highest-level section title at the beginning of a
963 document, it is treated specially, as the document title.  (Similarly, a
964 lone second-highest-level section title may become the document
965 subtitle.)  See `How can I indicate the document title?  Subtitle?`_ for
966 details.  Rather than use a plain H1 for the document title, we use ``<h1
967 class="title">`` so that we can use H1 again within the document.  Why
968 do we do this?  HTML only has H1-H6, so by making H1 do double duty, we
969 effectively reserve these tags to provide 6 levels of heading beyond the
970 single document title.
972 HTML is being used for dumb formatting for nothing but final display.
973 A stylesheet *is required*, and one is provided; see `What kind of
974 HTML does it produce?`_ above.  Of course, you're welcome to roll your
975 own.  The default stylesheet provides rules to format ``<h1
976 class="title">`` and ``<h2 class="subtitle">`` differently from
977 ordinary ``<h1>`` and ``<h2>``::
979     h1.title {
980       text-align: center }
982     h2.subtitle {
983       text-align: center }
985 If you don't want the top section heading to be interpreted as a
986 title at all, disable the `doctitle_xform`_ setting
987 (``--no-doc-title`` option).  This will interpret your document
988 differently from the standard settings, which might not be a good
989 idea.  If you don't like the reuse of the H1 in the HTML output, you
990 can tweak the `initial_header_level`_ setting
991 (``--initial-header-level`` option) -- but unless you match its value
992 to your specific document, you might end up with bad HTML (e.g. H3
993 without H2).
995 .. _doctitle_xform: docs/user/config.html#doctitle-xform
996 .. _initial_header_level: docs/user/config.html#initial-header-level
998 (Thanks to Mark McEahern for the question and much of the answer.)
1001 How are lists formatted in HTML?
1002 --------------------------------
1004 If list formatting looks strange, first check that you understand
1005 `list markup`__.
1007 __ `How should I mark up lists?`_
1009 * By default, HTML browsers indent lists relative to their context.
1010   This follows a long tradition in browsers (but isn't so established
1011   in print).  If you don't like it, you should change the stylesheet.
1013   This is different from how lists look in reStructuredText source.
1014   Extra indentation in the source indicates a blockquote, resulting in
1015   too much indentation in the browser.
1017 * A list item can contain multiple paragraphs etc.  In complex cases
1018   list items are separated by vertical space.  By default this spacing
1019   is omitted in "simple" lists.  A list is simple if every item
1020   contains a simple paragraph and/or a "simple" nested list.  For
1021   example:
1023       * text
1025         * simple
1027           * simple
1028           * simple
1030         * simple
1032         text after a nested list
1034       * multiple
1036         paragraphs
1038   In this example the nested lists are simple (and should appear
1039   compacted) but the outer list is not.
1041   If you want all lists to have equal spacing, disable the
1042   `compact_lists`_ setting (``--no-compact-lists`` option).  The
1043   precise spacing can be controlled in the stylesheet.
1045   Note again that this is not exactly WYSIWYG: it partially resembles
1046   the rules about blank lines being optional between list items in
1047   reStructuredText -- but adding/removing optional blank lines does
1048   not affect spacing in the output!  It's a feature, not a bug: you
1049   write it as you like but the output is styled consistently.
1051   .. _compact_lists: docs/user/config.html#compact-lists
1054 Why do enumerated lists only use numbers (no letters or roman numerals)?
1055 ------------------------------------------------------------------------
1057 The rendering of enumerators (the numbers or letters acting as list
1058 markers) is completely governed by the stylesheet, so either the
1059 browser can't find the stylesheet (try enabling the
1060 `embed_stylesheet`_ setting [``--embed-stylesheet`` option]), or the
1061 browser can't understand it (try a recent Firefox, Mozilla, Konqueror,
1062 Opera, Safari, or even MSIE).
1064 .. _embed_stylesheet: docs/user/config.html#embed-stylesheet
1067 There appear to be garbage characters in the HTML.  What's up?
1068 --------------------------------------------------------------
1070 What you're seeing is most probably not garbage, but the result of a
1071 mismatch between the actual encoding of the HTML output and the
1072 encoding your browser is expecting.  Your browser is misinterpreting
1073 the HTML data, which is encoded text.  A discussion of text encodings
1074 is beyond the scope of this FAQ; see one or more of these documents
1075 for more info:
1077 * `UTF-8 and Unicode FAQ for Unix/Linux
1078   <http://www.cl.cam.ac.uk/~mgk25/unicode.html>`_
1080 * Chapters 3 and 4 of `Introduction to i18n [Internationalization]
1081   <http://www.debian.org/doc/manuals/intro-i18n/>`_
1083 * `Python Unicode Tutorial
1084   <http://www.reportlab.com/i18n/python_unicode_tutorial.html>`_
1086 * `Python Unicode Objects: Some Observations on Working With Non-ASCII
1087   Character Sets <http://effbot.org/zone/unicode-objects.htm>`_
1089 The common case is with the default output encoding (UTF-8), when
1090 either numbered sections are used (via the "sectnum_" directive) or
1091 symbol-footnotes.  3 non-breaking spaces are inserted in each numbered
1092 section title, between the generated number and the title text.  Most
1093 footnote symbols are not available in ASCII, nor are non-breaking
1094 spaces.  When encoded with UTF-8 and viewed with ordinary ASCII tools,
1095 these characters will appear to be multi-character garbage.
1097 You may have an decoding problem in your browser (or editor, etc.).
1098 The encoding of the output is set to "utf-8", but your browswer isn't
1099 recognizing that.  You can either try to fix your browser (enable
1100 "UTF-8 character set", sometimes called "Unicode"), or choose a
1101 different encoding for the HTML output.  You can also try
1102 ``--output-encoding=ascii:xmlcharrefreplace`` for HTML or XML, but not
1103 applicable to non-XMLish outputs (if using runtime
1104 settings/configuration files, use ``output_encoding=ascii`` and
1105 ``output_encoding_error_handler=xmlcharrefreplace``).
1107 If you're generating document fragments, the "Content-Type" metadata
1108 (between the HTML ``<head>`` and ``</head>`` tags) must agree with the
1109 encoding of the rest of the document.  For UTF-8, it should be::
1111     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1113 Also, Docutils normally generates an XML declaration as the first line
1114 of the output.  It must also match the document encoding.  For UTF-8::
1116     <?xml version="1.0" encoding="utf-8" ?>
1118 .. _sectnum: docs/ref/rst/directives.html#sectnum
1121 How can I retrieve the body of the HTML document?
1122 -------------------------------------------------
1124 (This is usually needed when using Docutils in conjunction with a
1125 templating system.)
1127 You can use the `docutils.core.publish_parts()`_ function, which
1128 returns a dictionary containing an 'html_body_' entry.
1130 .. _docutils.core.publish_parts(): docs/api/publisher.html#publish-parts
1131 .. _html_body: docs/api/publisher.html#html-body
1134 Why is the Docutils XHTML served as "Content-type: text/html"?
1135 --------------------------------------------------------------
1137 Full question:
1139     Docutils' HTML output looks like XHTML and is advertised as such::
1141       <?xml version="1.0" encoding="utf-8" ?>
1142       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
1143        "http://www.w3.org/TR/xht ml1/DTD/xhtml1-transitional.dtd">
1145     But this is followed by::
1147       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1149     Shouldn't this be "application/xhtml+xml" instead of "text/html"?
1151 In a perfect web, the Docutils XHTML output would be 100% strict
1152 XHTML.  But it's not a perfect web, and a major source of imperfection
1153 is Internet Explorer.  Despite it's drawbacks, IE still represents the
1154 majority of web browsers, and cannot be ignored.
1156 Short answer: if we didn't serve XHTML as "text/html" (which is a
1157 perfectly valid thing to do), it couldn't be viewed in Internet
1158 Explorer.
1160 Long answer: see the `"Criticisms of Internet Explorer" Wikipedia
1161 entry <http://en.wikipedia.org/wiki/Criticisms_of_Internet_Explorer#XHTML>`__.
1163 However, there's also `Sending XHTML as text/html Considered
1164 Harmful`__.  What to do, what to do?  We're damned no matter what we
1165 do.  So we'll continue to do the practical instead of the pure:
1166 support the browsers that are actually out there, and not fight for
1167 strict standards compliance.
1169 __ http://hixie.ch/advocacy/xhtml
1171 (Thanks to Martin F. Krafft, Robert Kern, Michael Foord, and Alan
1172 G. Isaac.)
1175 Python Source Reader
1176 ====================
1178 Can I use Docutils for Python auto-documentation?
1179 -------------------------------------------------
1181 Yes, in conjunction with other projects.
1183 The Sphinx_ documentation generator includes an autodoc module.
1185 .. _Sphinx: http://sphinx.pocoo.org/index.html
1187 Version 2.0 of Ed Loper's `Epydoc <http://epydoc.sourceforge.net/>`_
1188 supports reStructuredText-format docstrings for HTML output.  Docutils
1189 0.3 or newer is required.  Development of a Docutils-specific
1190 auto-documentation tool will continue.  Epydoc works by importing
1191 Python modules to be documented, whereas the Docutils-specific tool,
1192 described above, will parse modules without importing them (as with
1193 `HappyDoc <http://happydoc.sourceforge.net/>`_, which doesn't support
1194 reStructuredText).
1196 The advantages of parsing over importing are security and flexibility;
1197 the disadvantage is complexity/difficulty.
1199 * Security: untrusted code that shouldn't be executed can be parsed;
1200   importing a module executes its top-level code.
1201 * Flexibility: comments and unofficial docstrings (those not supported
1202   by Python syntax) can only be processed by parsing.
1203 * Complexity/difficulty: it's a lot harder to parse and analyze a
1204   module than it is to ``import`` and analyze one.
1206 For more details, please see "Docstring Extraction Rules" in `PEP
1207 258`_, item 3 ("How").
1210 Miscellaneous
1211 =============
1213 Is the Docutils document model based on any existing XML models?
1214 ----------------------------------------------------------------
1216 Not directly, no.  It borrows bits from DocBook, HTML, and others.  I
1217 (David Goodger) have designed several document models over the years,
1218 and have my own biases.  The Docutils document model is designed for
1219 simplicity and extensibility, and has been influenced by the needs of
1220 the reStructuredText markup.
1224    Local Variables:
1225    mode: indented-text
1226    indent-tabs-mode: nil
1227    sentence-end-double-space: t
1228    fill-column: 70
1229    End:
1231 .. Here's a code css to make a table colourful::
1233    /* Table: */
1234    
1235    th {
1236        background-color: #ede;
1237    }
1238    
1239    /* alternating colors in table rows */
1240    table.docutils tr:nth-child(even) {
1241        background-color: #F3F3FF;
1242    }
1243    table.docutils tr:nth-child(odd) {
1244        background-color: #FFFFEE;
1245    }
1246    
1247    table.docutils tr {
1248        border-style: solid none solid none;
1249        border-width: 1px 0 1px 0;
1250        border-color: #AAAAAA;
1251    }