"SfR Fresh" - the SfR Freeware/Shareware Archive

Member "docutils-0.5/docs/ref/rst/introduction.txt" of archive docutils-0.5.tar.gz:


As a special service "SfR Fresh" has tried to format the requested source page into HTML format using source code syntax highlighting with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
    1 =====================================
    2  An Introduction to reStructuredText
    3 =====================================
    4 :Author: David Goodger
    5 :Contact: goodger@python.org
    6 :Revision: $Revision: 4564 $
    7 :Date: $Date: 2006-05-21 22:44:42 +0200 (Son, 21 Mai 2006) $
    8 :Copyright: This document has been placed in the public domain.
    9 
   10 reStructuredText_ is an easy-to-read, what-you-see-is-what-you-get
   11 plaintext markup syntax and parser system.  It is useful for inline
   12 program documentation (such as Python docstrings), for quickly
   13 creating simple web pages, and for standalone documents.
   14 reStructuredText_ is a proposed revision and reinterpretation of the
   15 StructuredText_ and Setext_ lightweight markup systems.
   16 
   17 reStructuredText is designed for extensibility for specific
   18 application domains.  Its parser is a component of Docutils_.
   19 
   20 This document defines the goals_ of reStructuredText and provides a
   21 history_ of the project.  It is written using the reStructuredText
   22 markup, and therefore serves as an example of its use.  For a gentle
   23 introduction to using reStructuredText, please read `A
   24 ReStructuredText Primer`_.  The `Quick reStructuredText`_ user
   25 reference is also useful.  The `reStructuredText Markup
   26 Specification`_ is the definitive reference.  There is also an
   27 analysis of the `Problems With StructuredText`_.
   28 
   29 ReStructuredText's web page is
   30 http://docutils.sourceforge.net/rst.html.
   31 
   32 .. _reStructuredText: http://docutils.sourceforge.net/rst.html
   33 .. _StructuredText:
   34     http://www.zope.org/DevHome/Members/jim/StructuredTextWiki/FrontPage
   35 .. _Setext: http://docutils.sourceforge.net/mirror/setext.html
   36 .. _Docutils: http://docutils.sourceforge.net/
   37 .. _A ReStructuredText Primer: ../../user/rst/quickstart.html
   38 .. _Quick reStructuredText: ../../user/rst/quickref.html
   39 .. _reStructuredText Markup Specification: restructuredtext.html
   40 .. _Problems with StructuredText: ../../dev/rst/problems.html
   41 
   42 
   43 Goals
   44 =====
   45 
   46 The primary goal of reStructuredText_ is to define a markup syntax for
   47 use in Python docstrings and other documentation domains, that is
   48 readable and simple, yet powerful enough for non-trivial use.  The
   49 intended purpose of the reStructuredText markup is twofold:
   50 
   51 - the establishment of a set of standard conventions allowing the
   52   expression of structure within plaintext, and
   53 
   54 - the conversion of such documents into useful structured data
   55   formats.
   56 
   57 The secondary goal of reStructuredText is to be accepted by the Python
   58 community (by way of being blessed by PythonLabs and the BDFL [#]_) as
   59 a standard for Python inline documentation (possibly one of several
   60 standards, to account for taste).
   61 
   62 .. [#] Python's creator and "Benevolent Dictator For Life",
   63    Guido van Rossum.
   64 
   65 To clarify the primary goal, here are specific design goals, in order,
   66 beginning with the most important:
   67 
   68 1. Readable.  The marked-up text must be easy to read without any
   69    prior knowledge of the markup language.  It should be as easily
   70    read in raw form as in processed form.
   71 
   72 2. Unobtrusive.  The markup that is used should be as simple and
   73    unobtrusive as possible.  The simplicity of markup constructs
   74    should be roughly proportional to their frequency of use.  The most
   75    common constructs, with natural and obvious markup, should be the
   76    simplest and most unobtrusive.  Less common constructs, for which
   77    there is no natural or obvious markup, should be distinctive.
   78 
   79 3. Unambiguous.  The rules for markup must not be open for
   80    interpretation.  For any given input, there should be one and only
   81    one possible output (including error output).
   82 
   83 4. Unsurprising.  Markup constructs should not cause unexpected output
   84    upon processing.  As a fallback, there must be a way to prevent
   85    unwanted markup processing when a markup construct is used in a
   86    non-markup context (for example, when documenting the markup syntax
   87    itself).
   88 
   89 5. Intuitive.  Markup should be as obvious and easily remembered as
   90    possible, for the author as well as for the reader.  Constructs
   91    should take their cues from such naturally occurring sources as
   92    plaintext email messages, newsgroup postings, and text
   93    documentation such as README.txt files.
   94 
   95 6. Easy.  It should be easy to mark up text using any ordinary text
   96    editor.
   97 
   98 7. Scalable.  The markup should be applicable regardless of the length
   99    of the text.
  100 
  101 8. Powerful.  The markup should provide enough constructs to produce a
  102    reasonably rich structured document.
  103 
  104 9. Language-neutral.  The markup should apply to multiple natural (as
  105    well as artificial) languages, not only English.
  106 
  107 10. Extensible.  The markup should provide a simple syntax and
  108     interface for adding more complex general markup, and custom
  109     markup.
  110 
  111 11. Output-format-neutral.  The markup will be appropriate for
  112     processing to multiple output formats, and will not be biased
  113     toward any particular format.
  114 
  115 The design goals above were used as criteria for accepting or
  116 rejecting syntax, or selecting between alternatives.
  117 
  118 It is emphatically *not* the goal of reStructuredText to define
  119 docstring semantics, such as docstring contents or docstring length.
  120 These issues are orthogonal to the markup syntax and beyond the scope
  121 of this specification.
  122 
  123 Also, it is not the goal of reStructuredText to maintain compatibility
  124 with StructuredText_ or Setext_.  reStructuredText shamelessly steals
  125 their great ideas and ignores the not-so-great.
  126 
  127 Author's note:
  128 
  129     Due to the nature of the problem we're trying to solve (or,
  130     perhaps, due to the nature of the proposed solution), the above
  131     goals unavoidably conflict.  I have tried to extract and distill
  132     the wisdom accumulated over the years in the Python Doc-SIG_
  133     mailing list and elsewhere, to come up with a coherent and
  134     consistent set of syntax rules, and the above goals by which to
  135     measure them.
  136 
  137     There will inevitably be people who disagree with my particular
  138     choices.  Some desire finer control over their markup, others
  139     prefer less.  Some are concerned with very short docstrings,
  140     others with full-length documents.  This specification is an
  141     effort to provide a reasonably rich set of markup constructs in a
  142     reasonably simple form, that should satisfy a reasonably large
  143     group of reasonable people.
  144 
  145     David Goodger (goodger@python.org), 2001-04-20
  146 
  147 .. _Doc-SIG: http://www.python.org/sigs/doc-sig/
  148 
  149 
  150 History
  151 =======
  152 
  153 reStructuredText_, the specification, is based on StructuredText_ and
  154 Setext_.  StructuredText was developed by Jim Fulton of `Zope
  155 Corporation`_ (formerly Digital Creations) and first released in 1996.
  156 It is now released as a part of the open-source "Z Object Publishing
  157 Environment" (ZOPE_).  Ian Feldman's and Tony Sanders' earlier Setext_
  158 specification was either an influence on StructuredText or, by their
  159 similarities, at least evidence of the correctness of this approach.
  160 
  161 I discovered StructuredText_ in late 1999 while searching for a way to
  162 document the Python modules in one of my projects.  Version 1.1 of
  163 StructuredText was included in Daniel Larsson's pythondoc_.  Although
  164 I was not able to get pythondoc to work for me, I found StructuredText
  165 to be almost ideal for my needs.  I joined the Python Doc-SIG_
  166 (Documentation Special Interest Group) mailing list and found an
  167 ongoing discussion of the shortcomings of the StructuredText
  168 "standard".  This discussion has been going on since the inception of
  169 the mailing list in 1996, and possibly predates it.
  170 
  171 I decided to modify the original module with my own extensions and
  172 some suggested by the Doc-SIG members.  I soon realized that the
  173 module was not written with extension in mind, so I embarked upon a
  174 general reworking, including adapting it to the "re" regular
  175 expression module (the original inspiration for the name of this
  176 project).  Soon after I completed the modifications, I discovered that
  177 StructuredText.py was up to version 1.23 in the ZOPE distribution.
  178 Implementing the new syntax extensions from version 1.23 proved to be
  179 an exercise in frustration, as the complexity of the module had become
  180 overwhelming.
  181 
  182 In 2000, development on StructuredTextNG_ ("Next Generation") began at
  183 `Zope Corporation`_ (then Digital Creations).  It seems to have many
  184 improvements, but still suffers from many of the problems of classic
  185 StructuredText.
  186 
  187 I decided that a complete rewrite was in order, and even started a
  188 `reStructuredText SourceForge project`_ (now inactive).  My
  189 motivations (the "itches" I aim to "scratch") are as follows:
  190 
  191 - I need a standard format for inline documentation of the programs I
  192   write.  This inline documentation has to be convertible to other
  193   useful formats, such as HTML.  I believe many others have the same
  194   need.
  195 
  196 - I believe in the Setext/StructuredText idea and want to help
  197   formalize the standard.  However, I feel the current specifications
  198   and implementations have flaws that desperately need fixing.
  199 
  200 - reStructuredText could form part of the foundation for a
  201   documentation extraction and processing system, greatly benefitting
  202   Python.  But it is only a part, not the whole.  reStructuredText is
  203   a markup language specification and a reference parser
  204   implementation, but it does not aspire to be the entire system.  I
  205   don't want reStructuredText or a hypothetical Python documentation
  206   processor to die stillborn because of over-ambition.
  207 
  208 - Most of all, I want to help ease the documentation chore, the bane
  209   of many a programmer.
  210 
  211 Unfortunately I was sidetracked and stopped working on this project.
  212 In November 2000 I made the time to enumerate the problems of
  213 StructuredText and possible solutions, and complete the first draft of
  214 a specification.  This first draft was posted to the Doc-SIG in three
  215 parts:
  216 
  217 - `A Plan for Structured Text`__
  218 - `Problems With StructuredText`__
  219 - `reStructuredText: Revised Structured Text Specification`__
  220 
  221 __ http://mail.python.org/pipermail/doc-sig/2000-November/001239.html
  222 __ http://mail.python.org/pipermail/doc-sig/2000-November/001240.html
  223 __ http://mail.python.org/pipermail/doc-sig/2000-November/001241.html
  224 
  225 In March 2001 a flurry of activity on the Doc-SIG spurred me to
  226 further revise and refine my specification, the result of which you
  227 are now reading.  An offshoot of the reStructuredText project has been
  228 the realization that a single markup scheme, no matter how well
  229 thought out, may not be enough.  In order to tame the endless debates
  230 on Doc-SIG, a flexible `Docstring Processing System framework`_ needed
  231 to be constructed.  This framework has become the more important of
  232 the two projects; reStructuredText_ has found its place as one
  233 possible choice for a single component of the larger framework.
  234 
  235 The project web site and the first project release were rolled out in
  236 June 2001, including posting the second draft of the spec [#spec-2]_
  237 and the first draft of PEPs 256, 257, and 258 [#peps-1]_ to the
  238 Doc-SIG.  These documents and the project implementation proceeded to
  239 evolve at a rapid pace.  Implementation history details can be found
  240 in the `project history file`_.
  241 
  242 In November 2001, the reStructuredText parser was nearing completion.
  243 Development of the parser continued with the addition of small
  244 convenience features, improvements to the syntax, the filling in of
  245 gaps, and bug fixes.  After a long holiday break, in early 2002 most
  246 development moved over to the other Docutils components, the
  247 "Readers", "Writers", and "Transforms".  A "standalone" reader
  248 (processes standalone text file documents) was completed in February,
  249 and a basic HTML writer (producing HTML 4.01, using CSS-1) was
  250 completed in early March.
  251 
  252 `PEP 287`_, "reStructuredText Standard Docstring Format", was created
  253 to formally propose reStructuredText as a standard format for Python
  254 docstrings, PEPs, and other files.  It was first posted to
  255 comp.lang.python_ and the Python-dev_ mailing list on 2002-04-02.
  256 
  257 Version 0.4 of the reStructuredText__ and `Docstring Processing
  258 System`_ projects were released in April 2002.  The two projects were
  259 immediately merged, renamed to "Docutils_", and a 0.1 release soon
  260 followed.
  261 
  262 .. __: `reStructuredText SourceForge project`_
  263 
  264 .. [#spec-2] The second draft of the spec:
  265 
  266    - `An Introduction to reStructuredText`__
  267    - `Problems With StructuredText`__
  268    - `reStructuredText Markup Specification`__
  269    - `Python Extensions to the reStructuredText Markup
  270      Specification`__
  271 
  272    __ http://mail.python.org/pipermail/doc-sig/2001-June/001858.html
  273    __ http://mail.python.org/pipermail/doc-sig/2001-June/001859.html
  274    __ http://mail.python.org/pipermail/doc-sig/2001-June/001860.html
  275    __ http://mail.python.org/pipermail/doc-sig/2001-June/001861.html
  276 
  277 .. [#peps-1] First drafts of the PEPs:
  278 
  279    - `PEP 256: Docstring Processing System Framework`__
  280    - `PEP 258: DPS Generic Implementation Details`__
  281    - `PEP 257: Docstring Conventions`__
  282 
  283    Current working versions of the PEPs can be found in
  284    http://docutils.sourceforge.net/docs/peps/, and official versions
  285    can be found in the `master PEP repository`_.
  286 
  287    __ http://mail.python.org/pipermail/doc-sig/2001-June/001855.html
  288    __ http://mail.python.org/pipermail/doc-sig/2001-June/001856.html
  289    __ http://mail.python.org/pipermail/doc-sig/2001-June/001857.html
  290 
  291 
  292 .. _Zope Corporation: http://www.zope.com
  293 .. _ZOPE: http://www.zope.org
  294 .. _reStructuredText SourceForge project:
  295    http://structuredtext.sourceforge.net/
  296 .. _pythondoc: http://starship.python.net/crew/danilo/pythondoc/
  297 .. _StructuredTextNG:
  298    http://www.zope.org/DevHome/Members/jim/StructuredTextWiki/StructuredTextNG
  299 .. _project history file: ../../../HISTORY.html
  300 .. _PEP 287: ../../peps/pep-0287.html
  301 .. _Docstring Processing System framework: ../../peps/pep-0256.html
  302 .. _comp.lang.python: news:comp.lang.python
  303 .. _Python-dev: http://mail.python.org/pipermail/python-dev/
  304 .. _Docstring Processing System: http://docstring.sourceforge.net/
  305 .. _master PEP repository: http://www.python.org/peps/
  306 
  307 
  308 ..
  309    Local Variables:
  310    mode: indented-text
  311    indent-tabs-mode: nil
  312    sentence-end-double-space: t
  313    fill-column: 70
  314    End: