summary refs log tree commit diff stats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/advopt.txt2
-rw-r--r--doc/lib.txt16
-rw-r--r--doc/manual.txt80
-rw-r--r--doc/nimrodc.txt2
-rw-r--r--doc/tut1.txt15
5 files changed, 83 insertions, 32 deletions
diff --git a/doc/advopt.txt b/doc/advopt.txt
index 38461244d..3b6fafd0f 100644
--- a/doc/advopt.txt
+++ b/doc/advopt.txt
@@ -12,6 +12,8 @@ Advanced commands:
   //check                   checks the project for syntax and semantic
   //idetools                compiler support for IDEs: possible options:
     --track:FILE,LINE,COL   track a file/cursor position
+    --trackDirty:DIRTY_FILE,ORIG_FILE,LINE,COL
+                            track a file, currently not saved to disk
     --suggest               suggest all possible symbols at position
     --def                   list all possible definitions at position
     --context               list possible invokation context
diff --git a/doc/lib.txt b/doc/lib.txt
index 2f781f375..1b004aa9d 100644
--- a/doc/lib.txt
+++ b/doc/lib.txt
@@ -255,6 +255,22 @@ Parsers
   This is a low level module that implements an extremely efficient buffering
   scheme for lexers and parsers. This is used by the diverse parsing modules.
 
+* `highlite <highlite.html>`_
+  Source highlighter for programming or markup languages.  Currently
+  only few languages are supported, other languages may be added.
+  The interface supports one language nested in another.
+
+* `rst <rst.html>`_
+  This module implements a reStructuredText parser. A large subset
+  is implemented. Some features of the markdown wiki syntax are
+  also supported.
+
+* `rstast <rstast.html>`_
+  This module implements an AST for the reStructuredText parser.
+
+* `rstgen <rstgen.html>`_
+  This module implements a generator of HTML/Latex from reStructuredText.
+
 
 XML Processing
 --------------
diff --git a/doc/manual.txt b/doc/manual.txt
index f163e0d5f..2c19911b4 100644
--- a/doc/manual.txt
+++ b/doc/manual.txt
@@ -327,36 +327,36 @@ Numerical constants
 
 `Numerical constants`:idx: are of a single type and have the form::
 
-  hexdigit ::= digit | 'A'..'F' | 'a'..'f'
-  octdigit ::= '0'..'7'
-  bindigit ::= '0'..'1'
-  HEX_LIT ::= '0' ('x' | 'X' ) hexdigit ( ['_'] hexdigit )*
-  DEC_LIT ::= digit ( ['_'] digit )*
-  OCT_LIT ::= '0o' octdigit ( ['_'] octdigit )*
-  BIN_LIT ::= '0' ('b' | 'B' ) bindigit ( ['_'] bindigit )*
+  hexdigit = digit | 'A'..'F' | 'a'..'f'
+  octdigit = '0'..'7'
+  bindigit = '0'..'1'
+  HEX_LIT = '0' ('x' | 'X' ) hexdigit ( ['_'] hexdigit )*
+  DEC_LIT = digit ( ['_'] digit )*
+  OCT_LIT = '0o' octdigit ( ['_'] octdigit )*
+  BIN_LIT = '0' ('b' | 'B' ) bindigit ( ['_'] bindigit )*
   
-  INT_LIT ::= HEX_LIT
-            | DEC_LIT
-            | OCT_LIT
-            | BIN_LIT
-
-  INT8_LIT ::= INT_LIT ['\''] ('i' | 'I') '8'
-  INT16_LIT ::= INT_LIT ['\''] ('i' | 'I') '16'
-  INT32_LIT ::= INT_LIT ['\''] ('i' | 'I') '32'
-  INT64_LIT ::= INT_LIT ['\''] ('i' | 'I') '64'
-
-  UINT8_LIT ::= INT_LIT ['\''] ('u' | 'U')
-  UINT8_LIT ::= INT_LIT ['\''] ('u' | 'U') '8'
-  UINT16_LIT ::= INT_LIT ['\''] ('u' | 'U') '16'
-  UINT32_LIT ::= INT_LIT ['\''] ('u' | 'U') '32'
-  UINT64_LIT ::= INT_LIT ['\''] ('u' | 'U') '64'
-
-  exponent ::= ('e' | 'E' ) ['+' | '-'] digit ( ['_'] digit )*
-  FLOAT_LIT ::= digit (['_'] digit)*  ('.' (['_'] digit)* [exponent] |exponent)
-  FLOAT32_LIT ::= HEX_LIT '\'' ('f'|'F') '32'
-             | (FLOAT_LIT | DEC_LIT | OCT_LIT | BIN_LIT) ['\''] ('f'|'F') '32'
-  FLOAT64_LIT ::= HEX_LIT '\'' ('f'|'F') '64'
-             | (FLOAT_LIT | DEC_LIT | OCT_LIT | BIN_LIT) ['\''] ('f'|'F') '64'
+  INT_LIT = HEX_LIT
+          | DEC_LIT
+          | OCT_LIT
+          | BIN_LIT
+
+  INT8_LIT = INT_LIT ['\''] ('i' | 'I') '8'
+  INT16_LIT = INT_LIT ['\''] ('i' | 'I') '16'
+  INT32_LIT = INT_LIT ['\''] ('i' | 'I') '32'
+  INT64_LIT = INT_LIT ['\''] ('i' | 'I') '64'
+
+  UINT8_LIT = INT_LIT ['\''] ('u' | 'U')
+  UINT8_LIT = INT_LIT ['\''] ('u' | 'U') '8'
+  UINT16_LIT = INT_LIT ['\''] ('u' | 'U') '16'
+  UINT32_LIT = INT_LIT ['\''] ('u' | 'U') '32'
+  UINT64_LIT = INT_LIT ['\''] ('u' | 'U') '64'
+
+  exponent = ('e' | 'E' ) ['+' | '-'] digit ( ['_'] digit )*
+  FLOAT_LIT = digit (['_'] digit)*  ('.' (['_'] digit)* [exponent] |exponent)
+  FLOAT32_LIT = HEX_LIT '\'' ('f'|'F') '32'
+              | (FLOAT_LIT | DEC_LIT | OCT_LIT | BIN_LIT) ['\''] ('f'|'F') '32'
+  FLOAT64_LIT = HEX_LIT '\'' ('f'|'F') '64'
+              | (FLOAT_LIT | DEC_LIT | OCT_LIT | BIN_LIT) ['\''] ('f'|'F') '64'
 
 
 As can be seen in the productions, numerical constants can contain underscores
@@ -1388,7 +1388,7 @@ accesses its environment. If it does so, it has the calling convention
 Distinct type
 -------------
 
-A distinct type is new type derived from a `base type`:idx: that is
+A `distinct type`:idx: is new type derived from a `base type`:idx: that is
 incompatible with its base type. In particular, it is an essential property
 of a distinct type that it **does not** imply a subtype relation between it
 and its base type. Explicit type conversions from a distinct type to its
@@ -1435,7 +1435,7 @@ number without unit; and the same holds for division:
 This quickly gets tedious. The implementations are trivial and the compiler
 should not generate all this code only to optimize it away later - after all
 ``+`` for dollars should produce the same binary code as ``+`` for ints.
-The pragma ``borrow`` has been designed to solve this problem; in principle
+The pragma `borrow`:idx: has been designed to solve this problem; in principle
 it generates the above trivial implementations:
 
 .. code-block:: nimrod
@@ -1818,6 +1818,24 @@ If a proc is annotated with the ``noinit`` pragma this refers to its implicit
   proc returnUndefinedValue: int {.noinit.} = nil
 
 
+The implicit initialization can be also prevented by the `requiresInit`:idx:
+type pragma. The compiler requires an explicit initialization then. However
+it does a `control flow analysis`:idx: to prove the variable has been 
+initialized and does not rely on syntactic properties:
+
+.. code-block:: nimrod
+  type
+    TMyObject = object {.requiresInit.}
+    
+  proc p() =
+    # the following is valid:
+    var x: TMyObject
+    if someCondition():
+      x = a()
+    else:
+      x = a()
+    use x
+
 let statement
 -------------
 
diff --git a/doc/nimrodc.txt b/doc/nimrodc.txt
index 7f77a50d2..339cee382 100644
--- a/doc/nimrodc.txt
+++ b/doc/nimrodc.txt
@@ -20,7 +20,7 @@ on the different supported platforms. It is not a definition of the Nimrod
 programming language (therefore is the `manual <manual.html>`_).

 

 Nimrod is free software; it is licensed under the

-`GNU General Public License <gpl.html>`_.

+`MIT License <http://www.opensource.org/licenses/mit-license.php>`_.

 

 

 Compiler Usage

diff --git a/doc/tut1.txt b/doc/tut1.txt
index 28e23b0f0..0cc9b05c1 100644
--- a/doc/tut1.txt
+++ b/doc/tut1.txt
@@ -1182,6 +1182,21 @@ type and instead write it embedded directly as the type of the first dimension:
   type
     TLightTower = array[1..10, array[north..west, TBlinkLights]]
 
+It is quite frequent to have arrays start at zero, so there's a shortcut syntax
+to specify a range from zero to the specified index minus one:
+
+.. code-block:: nimrod
+  type
+    TIntArray = array[0..5, int] # an array that is indexed with 0..5
+    TQuickArray = array[6, int]  # an array that is indexed with 0..5
+  var
+    x: TIntArray
+    y: TQuickArray
+  x = [1, 2, 3, 4, 5, 6]
+  y = x
+  for i in low(x)..high(x):
+    echo(x[i], y[i])
+
 
 Sequences
 ---------