Блоки Pod

Основной структурной единицей нового диалекта Pod является блок документации. Он может быть представлен в виде 3 равнозначных форм:

Разграниченные блоки / Delimited blocks

Разграниченные блоки имеют явно определенные границы. Для этого используются директивы =begin и =end, за каждой из которых следует имя типа блока (typename). Имена состоят из букв, цифр и символов подчеркивания, а начинаются с буквы или знака подчеркивания. Имена, состоящие целиком из символов нижнего (=begin head1) и верхнего =begin SYNOPSIS регистра, зарезервированы.

В строке с директивой =begin после имени блока следует конфигурация данного блока. Среди особенностей нового диалекта Pod - эта одна из самых замечательных. Конфигурация блока может использоваться в различных целях, в том числе и при создании расширений для Pod.

Конфигурационные параметры блока представлены в виде парной нотации в стиле Perl6 ( SYNOPSIS 02 ).

Таблица 12.1. Парная нотация конфигурации блоков Pod

значениеформат определениятакже...также ..(*)
Boolean(true):key:key(1)key=>1
Boolean(false):!key:key(0)key=>0
String:key<str>:key('str')key=>'str'
List:key<1 2 3>:key[1,2,3 ]key=>[1,2,3]
Hash:key{a=>1, b=>2}-key=>{a=>1, b=>2}

(*) - последняя форма не поддерживается в реализации Perl6::Pod.

Если параметры блока не помещаются в одну строку, конфигурационный блок можно продолжить со следующей. В этом случае в начале строки ставиться символ = и пробел, далее конфигурационные параметры продолжаются.

Между директивами =begin и =end располагается содержимое блока. Сроки внутри блока могут содержать отступы, но они интерпретируются как блоки кода только в блоках =pod, =item =code и семантических блоках (например: =METHOD). То есть содержимое блока =para может отстоять от начала строки и не интерпретироваться при этом как код ( verbitim paragraph в Perl5 POD).

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

  =begin BLOCK_TYPE  OPTIONAL CONFIG INFO
  =                  OPTIONAL EXTRA CONFIG INFO
  BLOCK CONTENTS
  =end BLOCK_TYPE

Например:

    =begin table  :caption<Table of Contents>
        Constants           1
        Variables           10
        Subroutines         33
        Everything else     57
    =end table
    =begin Name  :required
    =            :width(50)
    The applicant's full name
    =end Name
    =begin Contact  :optional
    The applicant's contact details
    =end Contact

Пустые строки между директивами, как это было в Perl5 POD не нужны; если они есть - то интерпретируются как часть содержимого блока. Кстати "пустыми" в Pod считаются также строки, содержащие только пробелы!

Блоки-параграфы / Paragraph blocks

Блоки параграфы начинаются с директивы =for и завершаются следующий директивой или пустой строкой ( она не считается частью блока ). После директивы =for следует имя блока и необязательные конфигурационные параметры.

Синтаксис этого типа блоков следующий:

    =for BLOCK_TYPE  OPTIONAL CONFIG INFO
    =                OPTIONAL EXTRA CONFIG INFO
    BLOCK DATA

Примеры:

    =for table  :caption<Table of Contents>
        Constants           1
        Variables           10
        Subroutines         33
        Everything else     57
    =for Name  :required
    =          :width(50)
    The applicant's full name
    =for Contact  :optional   
    The applicant's contact details

Сокращенные блоки / Abbreviated blocks

Сокращенные блоки начинаются с символа = за которым неразрывно следует имя блока. Продолжение строки интерпретируется как содержимое блока. Конфигурационных параметров в этой форме блока нет. Блок заканчивается перед следующей директивой Pod или пустой строкой ( которая не ситается частью данных блока).

Синтаксис блока следующий:

    =BLOCK_TYPE  BLOCK DATA
    MORE BLOCK DATA

Пример:

    =table
        Constants           1
        Variables           10
        Subroutines         33
        Everything else     57
    =Name     The applicant's full name
    =Contact  The applicant's contact details

Этот тип блока подходит для случаев, когда можно обойтись без конфигурирования блока. Иначе придется воспользоваться =for или =begin/=end директивами.

Блоки-деклараторы / Declarator blocks

Блоки-деклараторы особый тип блоков, который встроен в комментарии:

 my $declared_thing;   #= Pod here until end of line
 sub declared_thing () {   #=[ Pod here
                              until matching
                               closing bracket
                             ]
         ...
  }

Равнозначность стилевых блоков

Описанные выше типы блоков одинаково представлены во внутренней структуре документа. То есть если имя типа блока - параграф (=para), то он остается параграфом независимо от формы его описания.

Практически это означает, что приведенные ниже блоки:

 =begin para
 Text
 =end para
 =for para text
 =para text

при конвертации в html будут преобразованы в один и тот же текст:

    <p>text</p>

Если тип блока таблица, то она останется ею в любом случае.