Help: Improve formatting and wording of LIST generator expressions

This commit is contained in:
Craig Scott
2023-07-12 17:13:47 +10:00
committed by Brad King
parent d769c59d78
commit 326a73a328
+89 -57
View File
@@ -333,6 +333,15 @@ Most of the expressions in this section are closely associated with the
:command:`list` command, providing the same capabilities, but in :command:`list` command, providing the same capabilities, but in
the form of a generator expression. the form of a generator expression.
In each of the following list-related generator expressions, the ``list``
must not contain any commas if that generator expression expects something to
be provided after the ``list``. For example, the expression
``$<LIST:FIND,list,value>`` requires a ``value`` after the ``list``.
Since a comma is used to separate the ``list`` and the ``value``, the ``list``
cannot itself contain a comma. This restriction does not apply to the
:command:`list` command, it is specific to the list-handling generator
expressions only.
.. _GenEx List Comparisons: .. _GenEx List Comparisons:
List Comparisons List Comparisons
@@ -354,133 +363,151 @@ List Queries
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns the list's length. The number of items in the ``list``.
.. genex:: $<LIST:GET,list,index,...> .. genex:: $<LIST:GET,list,index,...>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns the list of elements specified by indices from the list. Expands to the list of items specified by indices from the ``list``.
.. genex:: $<LIST:SUBLIST,list,begin,length> .. genex:: $<LIST:SUBLIST,list,begin,length>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a sublist of the given list. If <length> is 0, an empty list will be A sublist of the given ``list``. If ``length`` is 0, an empty list
returned. If <length> is -1 or the list is smaller than <begin>+<length> then will be returned. If ``length`` is -1 or the list is smaller than
the remaining elements of the list starting at <begin> will be returned. ``begin + length``, the remaining items of the list starting at
``begin`` will be returned.
.. genex:: $<LIST:FIND,list,value> .. genex:: $<LIST:FIND,list,value>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns the index of the element specified in the list or -1 if it wasn't The index of the first item in ``list`` with the specified ``value``,
found. or -1 if ``value`` is not in the ``list``.
.. _GenEx List Transformations: .. _GenEx List Transformations:
List Transformations List Transformations
^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
.. _GenEx LIST-JOIN:
.. genex:: $<LIST:JOIN,list,glue> .. genex:: $<LIST:JOIN,list,glue>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a string which joins the list with the content of the ``glue`` string Converts ``list`` to a single string with the content of the ``glue`` string
inserted between each item. inserted between each item. This is conceptually the same operation as
:genex:`$<JOIN:list,glue>`, but the two have different behavior with regard
to empty items. ``$<LIST:JOIN,list,glue>`` preserves all empty items,
whereas :genex:`$<JOIN:list,glue>` drops all empty items from the list.
.. genex:: $<LIST:APPEND,list,element,...> .. genex:: $<LIST:APPEND,list,item,...>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a list with the elements appended. The ``list`` with each ``item`` appended. Multiple items should be
separated by commas.
.. genex:: $<LIST:PREPEND,list,element,...> .. genex:: $<LIST:PREPEND,list,item,...>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a list with the elements inserted at the beginning of the list. The ``list`` with each ``item`` inserted at the beginning. If there are
multiple items, they should be separated by commas, and the order of the
prepended items will be preserved.
.. genex:: $<LIST:INSERT,list,index,element,...> .. genex:: $<LIST:INSERT,list,index,item,...>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a list with the elements inserted at the specified index. It is an The ``list`` with the ``item`` (or multiple items) inserted at the specified
error to specify an out-of-range index. Valid indexes are 0 to N where N is ``index``. Multiple items should be separated by commas.
the length of the list, inclusive. An empty list has length 0.
It is an error to specify an out-of-range ``index``. Valid indexes are 0 to N,
where N is the length of the list, inclusive. An empty list has length 0.
.. genex:: $<LIST:POP_BACK,list> .. genex:: $<LIST:POP_BACK,list>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a list with the last element was removed. The ``list`` with the last item removed.
.. genex:: $<LIST:POP_FRONT,list> .. genex:: $<LIST:POP_FRONT,list>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a list with the first element was removed. The ``list`` with the first item removed.
.. genex:: $<LIST:REMOVE_ITEM,list,value,...> .. genex:: $<LIST:REMOVE_ITEM,list,value,...>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a list with all instances of the given values were removed. The ``list`` with all instances of the given ``value`` (or values) removed.
If multiple values are given, they should be separated by commas.
.. genex:: $<LIST:REMOVE_AT,list,index,...> .. genex:: $<LIST:REMOVE_AT,list,index,...>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a list with all values at given indices were removed. The ``list`` with the item at each given ``index`` removed.
.. _GenEx LIST-REMOVE_DUPLICATES:
.. genex:: $<LIST:REMOVE_DUPLICATES,list> .. genex:: $<LIST:REMOVE_DUPLICATES,list>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a list where duplicated items were removed. The relative order of The ``list`` with all duplicated items removed. The relative order of
items is preserved, but if duplicates are encountered, only the first items is preserved, but if duplicates are encountered, only the first
instance is preserved. instance is preserved. The result is the same as
:genex:`$<REMOVE_DUPLICATES:list>`.
.. _GenEx LIST-FILTER:
.. genex:: $<LIST:FILTER,list,INCLUDE|EXCLUDE,regex> .. genex:: $<LIST:FILTER,list,INCLUDE|EXCLUDE,regex>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns a list with the items that match the regular expression ``regex`` A list of items from the ``list`` which match (``INCLUDE``) or do not match
were included or removed. (``EXCLUDE``) the regular expression ``regex``. The result is the same as
:genex:`$<FILTER:list,INCLUDE|EXCLUDE,regex>`.
.. genex:: $<LIST:TRANSFORM,list,ACTION[,SELECTOR]> .. genex:: $<LIST:TRANSFORM,list,ACTION[,SELECTOR]>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns the list transformed by applying an ``ACTION`` to all or, by The ``list`` transformed by applying an ``ACTION`` to all or, by
specifying a ``SELECTOR``, to the selected elements of the list. specifying a ``SELECTOR``, to the selected list items.
.. note:: .. note::
The ``TRANSFORM`` sub-command does not change the number of elements in the The ``TRANSFORM`` sub-command does not change the number of items in the
list. If a ``SELECTOR`` is specified, only some elements will be changed, list. If a ``SELECTOR`` is specified, only some items will be changed,
the other ones will remain the same as before the transformation. the other ones will remain the same as before the transformation.
``ACTION`` specifies the action to apply to the elements of the list. ``ACTION`` specifies the action to apply to the items of the list.
The actions have exactly the same semantics as of the The actions have exactly the same semantics as for the
:command:`list(TRANSFORM)` command. ``ACTION`` must be one of the following: :command:`list(TRANSFORM)` command. ``ACTION`` must be one of the following:
:command:`APPEND <list(TRANSFORM_APPEND)>`, :command:`PREPEND <list(TRANSFORM_APPEND)>` :command:`APPEND <list(TRANSFORM_APPEND)>`, :command:`PREPEND <list(TRANSFORM_APPEND)>`
Append, prepend specified value to each element of the list. Append, prepend specified value to each item of the list.
.. code-block:: cmake .. code-block:: cmake
$<LIST:TRANSFORM,list,(APPEND|PREPEND),value[,SELECTOR]> $<LIST:TRANSFORM,list,(APPEND|PREPEND),value[,SELECTOR]>
:command:`TOLOWER <list(TRANSFORM_TOLOWER)>`, :command:`TOUPPER <list(TRANSFORM_TOLOWER)>` :command:`TOLOWER <list(TRANSFORM_TOLOWER)>`, :command:`TOUPPER <list(TRANSFORM_TOLOWER)>`
Convert each element of the list to lower, upper characters. Convert each item of the list to lower, upper characters.
.. code-block:: cmake .. code-block:: cmake
$<LIST:TRANSFORM,list,(TOLOWER|TOUPPER)[,SELECTOR]> $<LIST:TRANSFORM,list,(TOLOWER|TOUPPER)[,SELECTOR]>
:command:`STRIP <list(TRANSFORM_STRIP)>` :command:`STRIP <list(TRANSFORM_STRIP)>`
Remove leading and trailing spaces from each element of the list. Remove leading and trailing spaces from each item of the list.
.. code-block:: cmake .. code-block:: cmake
@@ -488,13 +515,13 @@ List Transformations
:command:`REPLACE <list(TRANSFORM_REPLACE)>`: :command:`REPLACE <list(TRANSFORM_REPLACE)>`:
Match the regular expression as many times as possible and substitute Match the regular expression as many times as possible and substitute
the replacement expression for the match for each element of the list. the replacement expression for the match for each item of the list.
.. code-block:: cmake .. code-block:: cmake
$<LIST:TRANSFORM,list,REPLACE,regular_expression,replace_expression[,SELECTOR]> $<LIST:TRANSFORM,list,REPLACE,regular_expression,replace_expression[,SELECTOR]>
``SELECTOR`` determines which elements of the list will be transformed. ``SELECTOR`` determines which items of the list will be transformed.
Only one type of selector can be specified at a time. When given, Only one type of selector can be specified at a time. When given,
``SELECTOR`` must be one of the following: ``SELECTOR`` must be one of the following:
@@ -515,7 +542,7 @@ List Transformations
``REGEX`` ``REGEX``
Specify a regular expression. Specify a regular expression.
Only elements matching the regular expression will be transformed. Only items matching the regular expression will be transformed.
.. code-block:: cmake .. code-block:: cmake
@@ -523,23 +550,29 @@ List Transformations
.. genex:: $<JOIN:list,glue> .. genex:: $<JOIN:list,glue>
Joins the list with the content of the ``glue`` string inserted between each Joins the ``list`` with the content of the ``glue`` string inserted between
item. each item. This is conceptually the same operation as
:ref:`$\<LIST:JOIN,list,glue\> <GenEx LIST-JOIN>`, but the two have
different behavior with regard to empty items.
:ref:`$\<LIST:JOIN,list,glue\> <GenEx LIST-JOIN>` preserves all empty items,
whereas ``$<JOIN,list,glue>`` drops all empty items from the list.
.. genex:: $<REMOVE_DUPLICATES:list> .. genex:: $<REMOVE_DUPLICATES:list>
.. versionadded:: 3.15 .. versionadded:: 3.15
Removes duplicated items in the given ``list``. The relative order of items Removes duplicated items in the given ``list``. The relative order of items
is preserved, but if duplicates are encountered, only the first instance is is preserved, and if duplicates are encountered, only the first instance is
preserved. retained. The result is the same as
:ref:`$\<LIST:REMOVE_DUPLICATES,list\> <GenEx LIST-REMOVE_DUPLICATES>`.
.. genex:: $<FILTER:list,INCLUDE|EXCLUDE,regex> .. genex:: $<FILTER:list,INCLUDE|EXCLUDE,regex>
.. versionadded:: 3.15 .. versionadded:: 3.15
Includes or removes items from ``list`` that match the regular expression Includes or removes items from ``list`` that match the regular expression
``regex``. ``regex``. The result is the same as
:ref:`$\<LIST:FILTER,list,INCLUDE|EXCLUDE,regex\> <GenEx LIST-FILTER>`.
.. _GenEx List Ordering: .. _GenEx List Ordering:
@@ -550,13 +583,13 @@ List Ordering
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns the list with the elements in reverse order. The ``list`` with the items in reverse order.
.. genex:: $<LIST:SORT,list[,(COMPARE:option|CASE:option|ORDER:option)]...> .. genex:: $<LIST:SORT,list[,(COMPARE:option|CASE:option|ORDER:option)]...>
.. versionadded:: 3.27 .. versionadded:: 3.27
Returns the list sorted according the specified options. The ``list`` sorted according to the specified options.
Use one of the ``COMPARE`` options to select the comparison method Use one of the ``COMPARE`` options to select the comparison method
for sorting: for sorting:
@@ -566,26 +599,25 @@ List Ordering
This is the default behavior if the ``COMPARE`` option is not given. This is the default behavior if the ``COMPARE`` option is not given.
``FILE_BASENAME`` ``FILE_BASENAME``
Sorts a list of pathnames of files by their basenames. Sorts a list of file paths by their basenames.
``NATURAL`` ``NATURAL``
Sorts a list of strings using natural order Sorts a list of strings using natural order (see the man page for
(see ``strverscmp(3)`` manual), i.e. such that contiguous digits ``strverscmp(3)``), such that contiguous digits are compared as whole
are compared as whole numbers. numbers. For example, the following list ``10.0 1.1 2.1 8.0 2.0 3.1``
For example: the following list `10.0 1.1 2.1 8.0 2.0 3.1` will be sorted as ``1.1 2.0 2.1 3.1 8.0 10.0`` if the ``NATURAL``
will be sorted as `1.1 2.0 2.1 3.1 8.0 10.0` if the ``NATURAL`` comparison is selected, whereas it will be sorted as
comparison is selected where it will be sorted as ``1.1 10.0 2.0 2.1 3.1 8.0`` with the ``STRING`` comparison.
`1.1 10.0 2.0 2.1 3.1 8.0` with the ``STRING`` comparison.
Use one of the ``CASE`` options to select a case sensitive or case Use one of the ``CASE`` options to select a case-sensitive or
insensitive sort mode: case-insensitive sort mode:
``SENSITIVE`` ``SENSITIVE``
List items are sorted in a case-sensitive manner. List items are sorted in a case-sensitive manner.
This is the default behavior if the ``CASE`` option is not given. This is the default behavior if the ``CASE`` option is not given.
``INSENSITIVE`` ``INSENSITIVE``
List items are sorted case insensitively. The order of List items are sorted in a case-insensitive manner. The order of
items which differ only by upper/lowercase is not specified. items which differ only by upper/lowercase is not specified.
To control the sort order, one of the ``ORDER`` options can be given: To control the sort order, one of the ``ORDER`` options can be given:
@@ -597,8 +629,8 @@ List Ordering
``DESCENDING`` ``DESCENDING``
Sorts the list in descending order. Sorts the list in descending order.
This is an error to specify multiple times the same option. Various options Options can be specified in any order, but it is an error to specify the
can be specified in any order: same option multiple times.
.. code-block:: cmake .. code-block:: cmake