Perl 6 Pod: Списки

Списки в Pod представлены в виде групп, следующих друг за другом блоков =item. Каких либо специальных директив-"контейнеров" или разделителей для определения границ списков нет. Например:

     The seven suspects are:

     =item  Happy
     =item  Dopey
     =item  Sleepy
     =item  Bashful
     =item  Sneezy
     =item  Grumpy
     =item  Keyser Soze

Элементы списка имеют неявный уровень вложенности:

The seven suspects are:

  • Happy

  • Dopey

  • Sleepy

  • Bashful

  • Sneezy

  • Grumpy

  • Keyser Soze

Списки могут быть многоуровневыми. Каждый уровень указывается с помощью блоков =item1, =item2, =item3 и т.д. В этом смысле блок =item является синонимом =item1. Например:

     =item1  Animal
     =item2     Vertebrate
     =item2     Invertebrate

     =item1  Phase
     =item2     Solid
     =item2     Liquid
     =item2     Gas
     =item2     Chocolate

Результат следующий:

Animal

Vertebrate

Invertebrate

Phase

Solid

Liquid

Gas

Chocolate

Обработчики Pod должны выдавать предупреждающее сообщение в случаях, когда разность между уровнями вложенности соседствующих блоков больше 1. Например, если за блоком =item1 следует блок =item3.

Блоки =item не могут содержать вложенные списки. Это значит, что даже элементы с более низким уровнем вложенности не могут присутствовать внутри =item более высокого уровня.

    =comment НЕВЕРНО...
    =begin item1          --------------
    The choices are:                    |
    =item2 Liberty        ==< Level 2   |==<  Level 1
    =item2 Death          ==< Level 2   |
    =item2 Beer           ==< Level 2   |
    =end item1            --------------
    =comment ПРАВИЛЬНО...
    =begin item1          ---------------
    The choices are:                     |==< Level 1
    =end item1            ---------------
    =item2 Liberty        ==================< Level 2
    =item2 Death          ==================< Level 2
    =item2 Beer           ==================< Level 2

Нумерованные списки

Нумерованный список состоит из элементов, имеющих конфигурационный параметр :numbered.

     =for item1 :numbered
     Visito

     =for item2 :numbered
     Veni

     =for item2 :numbered
     Vidi

     =for item2 :numbered
     Vici

Приведенный код преобразуется в следующего вида текст:

1. Visito

1.1. Veni

1.2. Vidi

1.3. Vici

Схема нумерации целиком определяется средствами подготовки того или иного формата вывода. Поэтому возможен следующий вид нумерации:

1. Visito

1a. Veni

1b. Vidi

1c. Vici

или даже :

A: Visito

(i) Veni

(ii) Vidi

(iii) Vici

Эквивалентным свойству :numbered в свойствах элемента, является указание # первым символом в тексте элемента списка.

     =item1  # Visito
     =item2     # Veni
     =item2     # Vidi
     =item2     # Vici

В случаях, когда требуется использовать символ # первым без интерпретации его как признака нумерованного списка, используется код форматирования V<>:

    =item V<#> introduces a comment

или явное отрицание нумерации:

    =for item :!numbered
    # introduces a comment

Следующие друг за другом элементы первого уровня =item1 нумеруются последовательно. Их нумерация начинается заново, если их последовательность прерывается каким либо блоком Pod. В следующем примере, список прерывается параграфом:

    The options are:

    =item1 # Liberty
    =item1 # Death
    =item1 # Beer

    The tools are:

    =item1 # Revolution
    =item1 # Deep-fried peanut butter sandwich
    =item1 # Keg

Результат будет следующим:

The options are:

1. Liberty

2. Death

3. Beer

The tools are:

1. Revolution

2. Deep-fried peanut butter sandwich

3. Keg

Нумерация вложенных элементов ( =item2, =item3, =item4 ) сбрасывается каждый раз, когда встречается элемент более высокого уровня вложенности.

Чтобы продолжить нумерацию =item1, после разрыва списка блоком Pod, достаточно указать свойство :continued:

     =for item1
     # Retreat to remote Himalayan monastery

     =for item1
     # Learn the hidden mysteries of space and time

     I<????>

     =for item1 :continued
     # Prophet!

Указанный код будет преобразован в следующий текст:

1. Retreat to remote Himalayan monastery

2. Learn the hidden mysteries of space and time

????

3. Prophet!

Маркированные списки

Список элементов без указанного свойства :numbered интерпретируется как маркированный (unordered) список. Элементы таких списков отмечаются маркерами, так называемыми буллитами (bullit)[1].

Так к примеру текст

    =item1 Reading
    =item2 Writing
    =item3 'Rithmetic

может выглядеть следующим образом:

Reading

Writing

'Rithmetic

Как и в случае нумерованных списков, стиль маркеров различных уровней вложенности возлагается на программу преобразования в формат вывода.

Параграфы в элементах списков

Чтобы в составе элемента списка использовать несколько параграфов, используется разграниченная (delimited) форма блока =item.

     Let's consider two common proverbs:

     =begin item :numbered
     I<The rain in Spain falls mainly on the plain.>

     This is a common myth and an unconscionable slur on the Spanish
     people, the majority of whom are extremely attractive.
     =end item

     =begin item :numbered
     I<The early bird gets the worm.>

     In deciding whether to become an early riser, it is worth
     considering whether you would actually enjoy annelids
     for breakfast.
     =end item

     As you can see, folk wisdom is often of dubious value.

Результат будет следующий:

Let's consider two common proverbs:

  • The rain in Spain falls mainly on the plain.

    This is a common myth and an unconscionable slur on the Spanish people, the majority of whom are extremely attractive.

  • The early bird gets the worm.

    In deciding whether to become an early riser, it is worth considering whether you would actually enjoy annelids for breakfast.

As you can see, folk wisdom is often of dubious value.

Списки определений

Для создания списка определений используется блок =defn. Данный блок идентичен блоку =item в том, что серия последовательных блоков =defn явно определяет список. Отличие заключается в том, что при преобразовании в HTML используются тэги < <DL>...</DL> > вместо < <UL>...</UL> >.

Первая непустая строка содержимого блока интерпретируется как термин, а оставшееся содержимое - как определение термина.

    =defn  MAD
    Affected with a high degree of intellectual independence.

    =defn  MEEKNESS
    Uncommon patience in planning a revenge that is worth while.

    =defn
    MORAL
    Conforming to a local and mutable standard of right.
    Having the quality of general expediency.

Как и другие, элементы списков определений могут быть пронумерованы. Для этого используется свойство :numbered или символ # в начале строки:

    =for defn :numbered
    SELFISH
    Devoid of consideration for the selfishness of others.

    =defn # SUCCESS
    The one unpardonable sin against one's fellows.

[1]Маркер списка (буллит) - типографский знак, используемый для выделения элементов списка. Маркер списка