|  | @@ -79,6 +79,10 @@ A CMake Language source file consists of zero or more
 | 
	
		
			
				|  |  |  `Command Invocations`_ separated by newlines and optionally
 | 
	
		
			
				|  |  |  spaces and `Comments`_:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \begin{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. productionlist::
 | 
	
		
			
				|  |  |   file: `file_element`*
 | 
	
		
			
				|  |  |   file_element: `command_invocation` `line_ending` |
 | 
	
	
		
			
				|  | @@ -87,6 +91,10 @@ spaces and `Comments`_:
 | 
	
		
			
				|  |  |   space: <match '[ \t]+'>
 | 
	
		
			
				|  |  |   newline: <match '\n'>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \end{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  Note that any source file line not inside `Command Arguments`_ or
 | 
	
		
			
				|  |  |  a `Bracket Comment`_ can end in a `Line Comment`_.
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -98,6 +106,10 @@ Command Invocations
 | 
	
		
			
				|  |  |  A *command invocation* is a name followed by paren-enclosed arguments
 | 
	
		
			
				|  |  |  separated by whitespace:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \begin{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. productionlist::
 | 
	
		
			
				|  |  |   command_invocation: `space`* `identifier` `space`* '(' `arguments` ')'
 | 
	
		
			
				|  |  |   identifier: <match '[A-Za-z_][A-Za-z0-9_]*'>
 | 
	
	
		
			
				|  | @@ -106,6 +118,10 @@ separated by whitespace:
 | 
	
		
			
				|  |  |                      : `separation`* '(' `arguments` ')'
 | 
	
		
			
				|  |  |   separation: `space` | `line_ending`
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \end{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  For example:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  .. code-block:: cmake
 | 
	
	
		
			
				|  | @@ -137,9 +153,17 @@ Command Arguments
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  There are three types of arguments within `Command Invocations`_:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \begin{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. productionlist::
 | 
	
		
			
				|  |  |   argument: `bracket_argument` | `quoted_argument` | `unquoted_argument`
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \end{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. _`Bracket Argument`:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  Bracket Argument
 | 
	
	
		
			
				|  | @@ -149,6 +173,10 @@ A *bracket argument*, inspired by `Lua`_ long bracket syntax,
 | 
	
		
			
				|  |  |  encloses content between opening and closing "brackets" of the
 | 
	
		
			
				|  |  |  same length:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \begin{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. productionlist::
 | 
	
		
			
				|  |  |   bracket_argument: `bracket_open` `bracket_content` `bracket_close`
 | 
	
		
			
				|  |  |   bracket_open: '[' '='{len} '['
 | 
	
	
		
			
				|  | @@ -156,6 +184,10 @@ same length:
 | 
	
		
			
				|  |  |                  :  of the same {len} as the `bracket_open`>
 | 
	
		
			
				|  |  |   bracket_close: ']' '='{len} ']'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \end{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  An opening bracket of length *len >= 0* is written ``[`` followed
 | 
	
		
			
				|  |  |  by *len* ``=`` followed by ``[`` and the corresponding closing
 | 
	
		
			
				|  |  |  bracket is written ``]`` followed by *len* ``=`` followed by ``]``.
 | 
	
	
		
			
				|  | @@ -197,6 +229,10 @@ Quoted Argument
 | 
	
		
			
				|  |  |  A *quoted argument* encloses content between opening and closing
 | 
	
		
			
				|  |  |  double-quote characters:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \begin{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. productionlist::
 | 
	
		
			
				|  |  |   quoted_argument: '"' `quoted_element`* '"'
 | 
	
		
			
				|  |  |   quoted_element: <any character except '\' or '"'> |
 | 
	
	
		
			
				|  | @@ -204,6 +240,10 @@ double-quote characters:
 | 
	
		
			
				|  |  |                   : `quoted_continuation`
 | 
	
		
			
				|  |  |   quoted_continuation: '\' `newline`
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \end{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  Quoted argument content consists of all text between opening and
 | 
	
		
			
				|  |  |  closing quotes.  Both `Escape Sequences`_ and `Variable References`_
 | 
	
		
			
				|  |  |  are evaluated.  A quoted argument is always given to the command
 | 
	
	
		
			
				|  | @@ -246,12 +286,20 @@ An *unquoted argument* is not enclosed by any quoting syntax.
 | 
	
		
			
				|  |  |  It may not contain any whitespace, ``(``, ``)``, ``#``, ``"``, or ``\``
 | 
	
		
			
				|  |  |  except when escaped by a backslash:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \begin{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. productionlist::
 | 
	
		
			
				|  |  |   unquoted_argument: `unquoted_element`+ | `unquoted_legacy`
 | 
	
		
			
				|  |  |   unquoted_element: <any character except whitespace or one of '()#"\'> |
 | 
	
		
			
				|  |  |                   : `escape_sequence`
 | 
	
		
			
				|  |  |   unquoted_legacy: <see note in text>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \end{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  Unquoted argument content consists of all text in a contiguous block
 | 
	
		
			
				|  |  |  of allowed or escaped characters.  Both `Escape Sequences`_ and
 | 
	
		
			
				|  |  |  `Variable References`_ are evaluated.  The resulting value is divided
 | 
	
	
		
			
				|  | @@ -294,12 +342,20 @@ Escape Sequences
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  An *escape sequence* is a ``\`` followed by one character:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \begin{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. productionlist::
 | 
	
		
			
				|  |  |   escape_sequence: `escape_identity` | `escape_encoded` | `escape_semicolon`
 | 
	
		
			
				|  |  |   escape_identity: '\' <match '[^A-Za-z0-9;]'>
 | 
	
		
			
				|  |  |   escape_encoded: '\t' | '\r' | '\n'
 | 
	
		
			
				|  |  |   escape_semicolon: '\;'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \end{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  A ``\`` followed by a non-alphanumeric character simply encodes the literal
 | 
	
		
			
				|  |  |  character without interpreting it as syntax.  A ``\t``, ``\r``, or ``\n``
 | 
	
		
			
				|  |  |  encodes a tab, carriage return, or newline character, respectively. A ``\;``
 | 
	
	
		
			
				|  | @@ -348,9 +404,17 @@ Bracket Comment
 | 
	
		
			
				|  |  |  A ``#`` immediately followed by a `Bracket Argument`_ forms a
 | 
	
		
			
				|  |  |  *bracket comment* consisting of the entire bracket enclosure:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \begin{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. productionlist::
 | 
	
		
			
				|  |  |   bracket_comment: '#' `bracket_argument`
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \end{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  For example:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  .. code-block:: cmake
 | 
	
	
		
			
				|  | @@ -371,10 +435,18 @@ Line Comment
 | 
	
		
			
				|  |  |  A ``#`` not immediately followed by a `Bracket Argument`_ forms a
 | 
	
		
			
				|  |  |  *line comment* that runs until the end of the line:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \begin{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  .. productionlist::
 | 
	
		
			
				|  |  |   line_comment: '#' <any text not starting in a `bracket_argument`
 | 
	
		
			
				|  |  |               :      and not containing a `newline`>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. raw:: latex
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +   \end{small}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  For example:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  .. code-block:: cmake
 |