![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Block Level ElementsBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 47. Quickbook 1.6
|
![]() |
Note |
---|---|
Это записка |
![]() |
Tip |
---|---|
Это совет |
![]() |
Important |
---|---|
Это важно |
![]() |
Caution |
---|---|
Это предупреждение |
![]() |
Warning |
---|---|
Это - предупреждение |
Это единственные напоминания, поддерживаемые DocBook. Так, например, [информация] Это некоторая информация]
вряд ли даст желаемый эффект.
[h1 Heading 1] [h2 Heading 2] [h3 Heading 3] [h4 Heading 4] [h5 Heading 5] [h6 Heading 6]
Вы можете указать id для заголовка:
[h1:heading_id A heading to link to]
Чтобы связать его, вам нужно будет включить id раздела обложки:
[link document_id.section_id.heading_id The link text]
Хотя вы можете предшествовать заголовку anchor, если хотите использовать независимое местоположение.
Если заголовок не имеет id, то он будет автоматически генерироваться с нормальным именем с name="document_id.section_id.нормализованным_header_text"
(т.е. действительные символы a-z
, A-Z
, 0-9
и _
. Все невалидные символы преобразуются в подчеркивание, и все верхняя часть преобразуются в нижнюю. Например: Заголовок 1 в разделе 2 будет нормализован до section_2.heading_1
. Вы можете использовать:
[link document_id.section_id.normalized_header_text The link text]
чтобы связать их. Дополнительные сведения см. в разделе Ссылки на сервер и Раздел.
![]() |
Note |
---|---|
Указание заголовка ids - это функция с быстрой книгой 1.6, более ранние версии не поддерживают их. |
В случаях, когда вы не хотите заботиться об уровне заголовка (от 1 до 6), вы можете использовать Generic Heading:
[heading Heading]
Generic Heading предполагает уровень, плюс один, самого внутреннего участка, где он размещен. Например, если он помещен в крайнюю часть, то он предполагает h2.
Заголовки часто используются в качестве альтернативы разделам. Он используется, особенно если вы не хотите начинать новый раздел. Однако во многих случаях заголовки в конкретном разделе просто плоские. Пример:
[section A] [h2 X] [h2:link_id Y] [h2 Z] [endsect]
Здесь мы используем h2, предполагая, что раздел А является самым внешним уровнем. Если он помещен на внутреннем уровне, вам придется использовать h3, h4 и т.д. в зависимости от того, где находится раздел. В целом это уровень секции плюс один. Однако довольно утомительно сканировать уровень секции каждый раз. Если переписать пример выше, как показано ниже, это будет автоматически:
[section A] [heading X] [heading Y] [heading Z] [endsect]
Они работают хорошо, независимо от того, где вы их размещаете. Вы можете изменить разделы по желанию без какой-либо дополнительной работы, чтобы обеспечить правильный уровень заголовка. На самом деле, с секцией и руководство у вас есть все, что вам нужно. h1.h6 становится избыточным. h1.h6 может быть обесценено в будущем.
[def macro_identifier some text]
Когда определяется макрос, идентификатор заменяет текст где угодно в файле, в пунктах, в разметках и т. д. макро_идентификатор является строкой небелых символов пространства, за исключением '. Макро не может следовать алфавитному характеру или акценту. сменный текст может быть любой фразой (даже отмеченной). Пример:
[def sf_logo [$http://sourceforge.net/sflogo.php?group_id=28447&type=1]] sf_logo
Теперь везде помещается sf_logo, картина будет встроена.
![]() |
Tip |
---|---|
Это хорошая идея, чтобы использовать макроидентификаторы, которые различимы. Например, в этом документе макроидентификаторы имеют два ведущих и следящих значения (например, |
Ссылки (URLS) и изображения являются хорошими кандидатами на макросы. 1 Они имеют тенденцию сильно меняться. Это хорошая идея, чтобы разместить все ссылки и изображения в одном месте рядом с вершиной, чтобы сделать изменения легко. 2 Синтакс не очень хорош. Проще читать и писать, например, __spirit__
, чем [@http://spirit.sourceforge.net Spirit]
.
Еще несколько примеров:
[def :-) [$theme/smiley.png]] [def __spirit__ [@http://spirit.sourceforge.net Spirit]]
Ссылка на эти макросы:
Hi __spirit__ :-)
будет генерировать это:
Привет Спирит
Quickbook имеет некоторые предопределенные макросы, которые вы уже можете использовать.
Table 47.3. Predefined Macros
Macro |
Значение |
Пример |
---|---|---|
|
Дата |
2016-Sep-21 |
|
Текущее время |
02:37:38 PM |
|
Имя источника Quickbook |
block.qbk |
Шаблоны обеспечивают более универсальный механизм замены текста. Шаблоны пригодятся, когда вам нужно создать параметризируемый, многолинейный, котелый текст, который вы указываете один раз и много раз расширять. Шаблоны принимают один или несколько аргументов. Эти аргументы действуют как держатели места для замены текста. В отличие от простых макросов, которые ограничиваются разметкой уровня фразы, шаблоны могут содержать разметку уровня блока (например, пункты, блоки кода и таблицы).
Пример шаблона:
[template person[name age what] Hi, my name is [name]. I am [age] years old. I am a [what]. ]
Идентификаторы шаблонов могут состоять из:
Формальные аргументы шаблона - это идентификаторы, состоящие из начального алфавитного характера или подчеркивания, за которыми следуют нулевые или более буквенно-цифровые символы или подчеркивание. Это похоже на ваш типичный идентификатор C/C++.
Формальный аргумент шаблона временно скрывает шаблон того же имени в точке, где шаблон расширяется. Обратите внимание, что тело лица
шаблона выше относится к имя
age
и what
как [имя]
[возраст]
и [что]
. имя
age
и what
являются шаблонами, которые существуют в течение времени вызова шаблона.
Тело шаблона может быть практически любым блоком QuickBook или фразой. На самом деле есть две формы. Шаблоны могут быть фразой или уровнем блока. Шаблоны Фразы имеют форму:
[template sample[arg1 arg2...argN] replacement text... ]
Шаблоны блоков имеют форму:
[template sample[arg1 arg2...argN] replacement text... ]
Основное правило заключается в следующем: если новая линия сразу же следует за списком аргументов, то это шаблон блока, иначе это шаблон фразы. Шаблоны фраз обычно расширяются как часть фраз. Как и макросы, элементы уровня блоков не допускаются в шаблонах фраз.
Вы расширяете шаблон таким образом:
[template_identifier arg1..arg2..arg3]
При расширении шаблона вы предоставляете реальные аргументы. Шаблон будет расширен с вашими аргументами. Пример:
[person James Bond..39..Spy] [person Santa Clause..87..Big Red Fatso]
Что расширится до:
Привет, меня зовут Джеймс Бонд. Мне 39 лет. Я шпион.
Привет, меня зовут Санта Клаус. Мне 87 лет. Я Большой Красный Фатсо.
![]() |
Caution |
---|---|
Предостережение: шаблоны рекурсивны. Шаблон может назвать другой шаблон или даже сам по себе, прямо или косвенно. В QuickBook (пока) нет контрольных структур, поэтому это всегда будет означать бесконечное восстановление. QuickBook может обнаружить эту ситуацию и сообщить об ошибке, если рекурсия превышает определенный предел. |
Каждый фактический аргумент может быть словом, фрагментом текста или почти любой фразой QuickBook. Аргументы разделены двойной точкой .
и прекращены близким родительским тезисом.
Обратите внимание, что шаблоны и параметры шаблонов не могут быть расширены везде, только там, где текст интерпретируется как фраза. Таким образом, они не могут быть расширены в таких местах, как заголовки таблиц и URL ссылки. Если вы хотите использовать шаблон для создания ссылки на основе параметра шаблона, вы не можете использовать нормальную ссылку и вместо этого должны использовать сбежавший docbook. Пример:
[template boost_ticket[key] '''<ulink url="https://svn.boost.org/trac/boost/ticket/'''[key]'''">#'''[key]'''</ulink>'''] [boost_ticket 2035]
расширится до:
![]() |
Caution |
---|---|
Поскольку Fastbook не понимает контекста, в котором используется параметр, он будет интерпретировать его как разметку быстрой книги, поэтому при написании такого шаблона вам нужно будет избежать любой значимой пунктуации. |
Нуллярные шаблоны выглядят и действуют как простые макросы. Пример:
[template alpha[]'''&#945;'''] [template beta[]'''&#946;''']
Расширение:
Some squigles...[*[alpha][beta]]
У нас есть:
αβ
Различие с макросами есть
Пустые скобки после идентификатора шаблона (alpha []
) не указывают никаких аргументов. Если тело шаблона не выглядит как список аргументов шаблона, мы можем опустить пустые скобки. Пример:
[template aristotle_quote Aristotle: [*['Education is the best provision for the journey to old age.]]]
Расширение:
Here's a quote from [aristotle_quote].
У нас есть:
Вот цитата Аристотеля: Образование - лучшее положение для путешествия в старость..
Недостатком является то, что вы не можете избежать пространства между идентификатором шаблона, aristotle_quote
, и шаблонным кузовом "Aristotle...". Это пространство будет частью тела шаблона. Если это пространство является нежелательным, используйте пустые скобки или используйте космический выход: «\
». Пример:
[template tag\ _tag]
Затем расширяется:
`struct` x[tag];
У нас есть:
struct
x_tag;
У тебя есть несколько способов сделать это. Хотя я предпочитаю прямые пустые скобки.
Как уже упоминалось, аргументы разделены двойной точкой ".
. В качестве альтернативы, если двойная точка не используется и ожидается более одного аргумента, QuickBook использует белое пространство для разделения аргументов, следуя этой логике:
", "n", "t" или "r"
).Например:
[template simple[a b c d] [a][b][c][d]] [simple w x y z]
будет производить:
wxyz
«w x y z» изначально рассматривается как один аргумент, потому что мы не поставляли ».
сепараторы. Однако, поскольку простая
ожидает 4 аргумента, «w x y z» разрушается итеративно (применяя логику выше), пока у нас нет «w», «x», «y» и «z».
Быстрее! Книга только пытается получить аргументы, которые ей нужны. Например:
[simple w x y z trail]
будет производить:
след wxyz
Аргументы: "w", "x", "y" и "z" след.
![]() |
Caution |
---|---|
Описанное здесь поведение для QuickBook 1.5. В более старых версиях вы можете использовать как двойную точку, так и белое пространство в качестве сепараторов в одном и том же вызове шаблона. Если ваш документ отмечен как более старая версия, он будет использовать старое поведение, которое описано в документации QuickBook 1.4. |
С шаблонами одна из наших целей - позволить нам переписать QuickBook в QuickBook (как библиотека qbk). Для того, чтобы это произошло, нам нужно разместить шаблоны пунктуации одного персонажа, которые довольно распространены в QuickBook. Вы, возможно, заметили, что однозначные пунктуации символов разрешены как шаблонные идентификаторы. Пример:
[template ![bar] <hey>[bar]</hey>]
Теперь, расширяя это:
[!baz]
Мы будем:
<hey>baz</hey>
[blurb :-) [*An eye catching advertisement or note...] Spirit is an object-oriented recursive-descent parser generator framework implemented using template meta-programming techniques. Expression templates allow us to approximate the syntax of Extended Backus-Normal Form (EBNF) completely in C++. ]
будет генерировать это:
![]() |
Note |
---|---|
Предпочтение призывы, где это уместно. |
[table:id A Simple Table [[Heading 1] [Heading 2] [Heading 3]] [[R0-C0] [R0-C1] [R0-C2]] [[R1-C0] [R1-C1] [R1-C2]] [[R2-C0] [R2-C1] [R2-C2]] ]
будет генерировать:
Table 47.4. A Simple Table
Головка 1 |
Головка 2 |
Головка 3 |
---|---|---|
R0-C0 |
R0-C1 |
R0-C2 |
R1-C0 |
R1-C1 |
R1-C2 |
R2-C0 |
R2-C1 |
R2-C2 |
Название таблицы является факультативным. Первая строка таблицы автоматически рассматривается как заголовок таблицы; то есть она завернута в теги ...
XML. Обратите внимание, что в отличие от оригинального QuickDoc колонны вложены в [клетки...].
Предоставление таблиц id - новая функция для быстрой книги 1.5. Как и в случае с разделами, id является факультативным. Если таблица имеет заголовок, но без id, id будет создан из заголовка. Таблица выше может быть связана с использованием:
[link quickbook.syntax.block.tables.id link to table]
которые будут генерировать:
Синтакс является свободным и позволяет хорошо отформатировать большие клетки. Пример:
[table Table with fat cells [[Heading 1] [Heading 2]] [ [Row 0, Col 0: a small cell] [ Row 0, Col 1: a big fat cell with paragraphs Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work well with the C++ Standard Library. Boost libraries are intended to be widely useful, and usable across a broad spectrum of applications. The Boost license encourages both commercial and non-commercial use. ] ] [ [Row 1, Col 0: a small cell] [Row 1, Col 1: a small cell] ] ]
и таким образом:
Table 47.5. Table with fat cells
Головка 1 |
Головка 2 |
---|---|
Row 0, Col 0: небольшая клетка |
Row 0, Col 1: большая жировая клетка с пунктами Boost предоставляет бесплатные рецензируемые портативные библиотеки C++. Мы подчеркиваем библиотеки, которые хорошо работают с C++ Standard Library. Библиотеки, предназначенные для широкого использования и использования в широком спектре приложений. Лицензия Boost поощряет как коммерческое, так и некоммерческое использование. |
Row 1, Col 0: небольшая клетка |
Row 1, Col 1: небольшая клетка |
Вот как иметь предопределенные блоки кода в таблице:
[table Table with code [[Comment] [Code]] [ [My first program] [`` #include <iostream> int main() { std::cout << "Hello, World!" << std::endl; return 0; } ``] ] ]
Table 47.6. Table with code
Комментарий |
Код |
---|---|
Моя первая программа |
#include |
[variablelist A Variable List [[term 1] [The definition of term 1]] [[term 2] [The definition of term 2]] [[term 3] [ The definition of term 3. Definitions may contain paragraphs. ]] ]
будет генерировать:
A Variable List
Определение термина 1
Определение термина 2
Определение термина 3.
Определения могут содержать пункты.
Правила для переменных списков такие же, как и для таблиц, за исключением того, что допускается только 2 "колонки". Первая колонка содержит термины, а вторая колонка содержит определения. Те, кто знаком с HTML, признают это как «список определений».
Вы можете включить один файл QuickBook из другого. Синтакс просто:
[include someother.qbk]
В быстрой книге 1.6 и позже, если включенный файл имеет блок docinfo тогда он создаст вложенный документ. Это будет обработано в качестве отдельного документа, хотя любые макросы или шаблоны из архивного файла все еще будут определены.
В противном случае включенный файл будет обрабатываться так, как будто он был вырезан и вставлен в текущий документ, за следующими исключениями:
![]() |
Note |
---|---|
В Fastbook 1.5 и более ранних шаблонах не были включены в включенные файлы. Если вы хотите использовать шаблоны или макросы из файла в быстрой книге 1.6, вместо этого используйте импорт. |
Директива [включает]
позволяет указать документ id для использования в включенном файле. Вы можете указать id следующим образом:
[include:someid someother.qbk]
Все автогенерированные якори будут использовать документ id в качестве уникального префикса. Так что, например, если есть топ-секции в какой-то другой. qbk названный «Intro», названный якорь для этого раздела будет «someid.intro», и вы можете связать его с [ссылка someid.intro] Intro]
.
Если включенный файл имеет блок docinfo, id, указанный в директиве [include]
, перепишет его.
Вы также можете включить файлы C, C++ и python. Это будет включать любые блоки быстрой книги в файл, которые не находятся внутри названных фрагментов кода. См. раздел Import для синтаксических деталей. Например, скажите, что вы включили этот файл:
/** * Hello world example */ // In this comment, the backtick indicates that this is a // quickbook source block that will be included. /*` First include the appropriate header: [hello_includes] Then write your main function: [hello_main] */ // This defines a code snippet, the syntax is // described in the import section. It's available // in the whole of this source file, not just after // its definition. //[hello_includes #include <iostream> //] //[hello_main int main() { std::cout << "Hello, trivial example" << std::endl; } //]
Она будет генерировать:
First include the appropriate header: #include <iostream> Then write your main function: int main() { std::cout << "Hello, trivial example" << std::endl; }
В быстрой книге 1.6 и позже, если вы хотите использовать шаблон, макро или фрагмент кода из файла, вам нужно импортировать его. Это не будет включать какой-либо контент из этого файла, но будет включать шаблоны, макросы и фрагменты кода в область текущего файла.
С файлами с быстрой книгой это позволяет создавать шаблоны и макробиблиотеки. Для python (упоминается расширением .py
), C или C++, это позволяет включать фрагменты кода из исходных файлов, так что ваши примеры кода могут быть сохранены до даты и полностью протестированы.
Вы можете легко импортировать фрагменты кода из исходного кода в свой QuickBook. Ниже показано, как это делается:
[import ../test/stub.cpp] [foo] [bar]
Первая строка:
[import ../test/stub.cpp]
собирает специально отмеченные фрагменты кода из stub.cpp и помещает их в ваш файл QuickBook в качестве виртуальных шаблонов. Каждый из специально обозначенных фрагментов кода имеет имя (например, foo
и bar
в приведенном выше примере). Это должен быть идентификатор шаблона для этого конкретного фрагмента кода. Вторая и третья строки выше делают фактическое расширение шаблона:
[foo] [bar]
И результат:
Это функция foo.
Это описание может иметь пункты...
И любой быстрый блок-разметка.
std::string foo() { // return 'em, foo man! return "foo"; }
Это бар функция
std::string bar() { // return 'em, bar man! return "bar"; }
Небольшой текст здесь
Обратите внимание на то, как фрагменты кода в stub.cpp замечаются. Мы используем отличительные комментарии после формы:
//[id some code here //]
Первая линия комментариев выше инициирует названный код-сниппет. Этот префикс не будет виден в быстрой книге. Весь код-сниппет между /[id
и //]
будет добавлен в виде шаблона в быстрой книге с именем id. Комментарий /]
завершает код-сниппет Это тоже не будет видно в быстрой книге.
Специальные комментарии формы:
//` some [*quickbook] markup here
и:
/*` some [*quickbook] markup here */
quickBook. Это может содержать быструю книгу блоки (например, разделы, пункты, таблицы и т.д.). В первом случае первичный удар, клещ и белое пространство игнорируются. Во-вторых, первоначальный удар звездой и последний удар звезды должны быть проигнорированы.
Специальные комментарии формы:
/*<- this C++ comment will be ignored ->*/
или
/*<-*/ "this c++ code will be ignored" /*->*/
или
//<- private: int some_member; //->
может быть использован для ингибирования кода от прохождения до быстрой книги. Весь текст между делиметрами будет просто игнорироваться.
Комментарии этой формы:
//=int main() {}
или
/*=foo()*/
будет отображаться как код, который не в комментариях. Это позволяет включить какой-то код в фрагмент, но не использовать его при составлении вашего примера.
Специальные комментарии формы:
/*< some [*quickbook] markup here >*/
будут считаться призывами. Они будут собраны, пронумерованы и выведены в виде «кричащего клопа» (малая иконка с номером). После того, как весь фрагмент будет парсирован, список вызовов генерируется. Подробнее см. Callouts. Пример:
std::string foo_bar(){ return "foo-bar";
}
Это фактический код:
//[ foo_bar std::string foo_bar() /*< The /Mythical/ FooBar. See [@http://en.wikipedia.org/wiki/Foobar Foobar for details] >*/ { return "foo-bar"; /*< return 'em, foo-bar man! >*/ } //]
Клопы вызова расположены именно там, где находится специальный комментарий вызова. Это может быть где угодно в коде. Однако клопы могут быть довольно навязчивыми. Они мешают ясности кода. Еще один особый стиль комментирования вызовов доступен:
/*<< some [*quickbook] markup here >>*/
Это линейная версия призыва. При этом «жучок» помещается слева от блока кода, вдали от фактического кода. Размещая его на дальнем левом углу, код становится неисследованным. Пример:
class x { public:x() : n(0) { }
~x() { }
int get() const { return n; }
void set(int n_) { n = n_; } };
Смотрите реальный код здесь: tools/quickbook/test/stub.cpp
block
является простым блок-элементом, который не обертывает его содержимое ни в docbook, ни в бустерах. Это может быть полезно при использовании сбежавших блок-тегов docbook, таких как:
[template chapter[title] [block'''<chapter><title>'''[title]'''</title>'''] ] [template chapterend [block'''</chapter>'''] ] [chapter An example chapter] Content [chapterend]
Без элемента block
шаблоны chapter
и chapterend
будут обернуты в теги абзацев.
![]() |
Note |
---|---|
В этом примере тело шаблона должно начинаться с новой строки, чтобы шаблон был интерпретирован в блок-режиме. |
Статья Block Level Elements раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 47. Quickbook 1.6 может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 47. Quickbook 1.6 ::
реклама |