API Orion – сборка
Система сборки
Этот документ охватывает API Build System.
В основном, система сборки управляется двумя модулями Perl, поставляемыми пользователем: lib/path.pm и lib/view.pm.
Первая задача состоит в том, чтобы сделать три вещи:
- тяжесть
lib/facts.ymlиlib/acl.yml, - изготавливать
@path::patterns, и - условно ходить
content/дерево для семян%path::dependenciesи@path::aclsиз метаданных заголовка файла разметки/ямла.
Задача последнего состоит в том, чтобы обеспечить вызываемый viewна основе $methods для соответствующих записей в @path::patterns (в качестве строкового имени метода во втором слоте каждой записи ссылки массива), вызываемого создание сценариев:
for my $p (@$patterns) {
my ($re, $method, $args) = @$p;
next unless $path =~ $re;
if ($args->{headers}) {
my Data::Dumper $d;
$d = $d->new([$args->{headers}], ['$args->{headers}']);
$d->Deepcopy(1);
$d->Purity(1);
eval $d->Dump;
}
my $s = $method_cache{$method} //= view->can($method) or die "Can't locate method: $method\n";
my $start_call = [gettimeofday];
no warnings 'once';
$view::path = $path;
my ($content, $ext, undef, @new_sources) = $s->(nonce => $nonce, website => $ENV{WEBSITE}, repos => $ENV{REPOS}, path => $path, lang => $lang, %$args);
my $elapsed = tv_interval($start_call);
if ($$args{compress}) {
$lang .= ".gz";
if (defined $content) {
utf8::encode($content) if utf8::is_utf8 $content;
gzip \($content, my $compressed);
$content = $compressed;
}
}
if (defined $content) {
my $dest = "$target_base/$target_file.$ext$lang";
my $encoding = $$args{encoding} // ($$args{compress} ? "raw" : "utf8");
my $mtime;
#$mtime = $_->mtime for map stat $_, "content/$path";
open my $fh, ">:$encoding", $dest
or die "Can't open $dest: $!\n";
print $fh $content;
close $fh;
#utime $mtime, $mtime, $dest if $mtime;
}
syswrite_all "Built to $target_base/$target_file.$ext$lang in ${elapsed}s.\n";
return @new_sources;
}
COPY:
my ($dest, $copied) = copy_if_newer $file, "$target_base/$file";
syswrite_all "Copied to $dest.\n" if $copied;
Многие виды должны быть сложены как “фильтры” для предварительной обработки (или заключительной обработки) аспектов файла в $path Это новый, как внешний код. snippets или asymptote-огороженные блоки разметки. Вы можете увидеть пример этого здесь.
SunStarSys::View — базовый класс для lib/view.pm
Самый популярный (и сложный) вид
Это представление включает автоматическую обработку файлов, расположенных внутри $pathкаталог вложений. Другими словами, если $path = "/foo.md.en", затем файлы, хранящиеся в /foo.page/ каталог, связанный с “.ru” расширение языка будет включено в шаблон адресных аргументов для этого $path независимо от preprocess параметр аргумента — который, если это правда, также сделает этот материал доступным по самому содержанию страницы.
Mandatory Arguments:
templatepathlang
Optional Argmuents:
deps— переопределяет обычныйfetch_depsпереработкаquick_deps— внутренняя настройка оптимизации обработки депс; наилучшее левое неустановкаpreprocess— включает обработку шаблонов внутри$pathсамого контента,archive_root— файлы в “архивированный” статус: “скопировано” и отслеживаются по подпапкам года/месяца в этом расположении с корнем контента черезssi,category_root— элементы в “категории” заголовок является “скопировано” в соответствующие имена папок категорий в этом расположении с корнем содержимого черезssi.
Для создания страниц index.html и sitemap.html
Индекс зависимостей, зависящий от локали.
Mandatory Arguments:
pathlang
Optional Arguments:
quick_depsnestedpreprocess
Сборки и кэширование Asymptote трехкодовые блоки для векторной графики с поддержкой HTML5-WebGL
Mandatory Arguments:
viewlangpath
Не стройте их вообще.
Вместо этого создайте связанные сгенерированные исходные файлы (например, .bib\$lang \$base.page/bibliography.yml\$lang), который должен быть построен на вторичном запуске системы сборки.
Преобразование файлов YAML, как правило, в JSON.
Optional Arguments:
extпо умолчаниюjsonfilterпо умолчаниюjson_rawtemplateпереопределенияfilterвыражение по умолчанию
Преобразование файлов CSV, как правило, в JSON.
Optional Arguments:
extпо умолчаниюjsonfilterпо умолчаниюjson_rawtemplateпереопределенияfilterвыражение по умолчанию
Рефакторы $data hashref аргумента как упорядоченная по метке времени ссылка массива 2-элементных ссылок массива.
Первая запись в каждой 2-элементной ссылке массива – это имя пути к файлу, второй элемент – результирующий read_text_file hashref для этого имени пути.
Возвращает список полученных новых исходных файлов, если $quick > 2.
Mandatory Arguments:
pathdata- вход в виде хэшрефа; хранит результирующий массив значений по возвратуquick- по умолчанию 2
Обработка внешнего кода линии фрагментов, обычно импортируя их исходные местоположения на GitHub в блоки разметки, зависящие от языка программирования. Пример здесь.
Добавляет строку заголовка для ссылок разметки. Обычно используется при offline просмотр, чтобы избежать получения заголовков с удаленных сайтов, что может значительно перетащить время сборки страницы.
SunStarSys::Util — библиотека служебных программ для lib/path.pm и lib/view.pm
Универсальный текстовый процессор Orion
Синтаксический анализ headers+content файла в кодировке UTF-8 $file и хранит результаты в хэшрефе $out. $content_lines (необязательно) максимальное число строк контента для чтения.
Возвращает фактическое число прочитанных строк (включая заголовки).
$file может быть ссылкой на необработанную строку, представляющую полное содержимое файла. Результаты в $out Все равно будет кодироваться UTF-8.
Копии $src по $dest если отметка времени первого изменения является более новой, чем отметка последнего.
При копировании дополнительно gzip-сжатие $dest файл, если это текстовый файл, и добавляет “.gz” Расширение имени. GZIP сжатие можно отключить, установив $ENV{NO_COPY_COMPRESS}=1.
Обеспечивает исключительную (f) блокировку (для текущего процесса UNIX) $lockfile.
Сортировка таблиц снижения цен в $content согласно спецификации столбца каждой таблицы.
Для каждой таблицы можно отсортировать только один столбец (необязательно) по числам n, по убыванию v или по возрастанию ^ заказ.
fixup_code($prefix, $type, @_)
Полосы $prefix из каждого спора в @_.
Цель $type аргумент специфичен для реализации, но в основном используется для editor.md "mode" для обработки этого контента в @_.
normalize_svn_path(@_)
Нормализация всех путей в @_ для безопасного использования в качестве необработанных аргументов SVN::Client Команды.
sanitize_relative_path(@_)
Защищает пути в @_ для использования в качестве чистых относительных путей Dotiac::DTL Команды, относящиеся к пути (шаблон Django).
Оболочка вокруг File::Basename::fileparse. Без аргументов, использует $_ как имя файла для разбора.
Условные прогулки ./content древо системы сборки; сначала нормализация $_ как формальный субпуть с корнем содержимого, а затем вызов $code->() на каждом предмете в лесу.
Для большинства зданий прогулка никогда не бывает — вместо этого сборка опирается на кэшированные данные из предыдущих сборок.
Единственный способ заставить прогулку – это установить $path::use_cache для ложного значения в пользовательских модулях. В противном случае это поведение квалифицированно управляется технология инкрементальной сборки.
Возвращает 1, если прогулка действительно продолжалась, вместо того, чтобы полагаться на кэшированные данные. В противном случае возвращается значение false.
Флаги каждый Status: archived $path (в зависимости от языка). Использование $_ если не переданы аргументы.
Архивирование файлов Markdown – это естественный способ рассказать Orion “перестать обращать внимание на постоянное расположение этого файла”, если он не будет обновлен повторно, в этом случае местоположение архива будет обновлено. В частности, архивные файлы не появляются в списках каталогов в самой CMS Orion; вам нужно перейти к самой активной странице, чтобы снова редактировать ее в Интернете.
Безопасные обновления %path::dependencies для этого $path, исходя из его dependencies верхний колонтитул glob(s).
По умолчанию используется $_ как путь, если не пройдены аргументы.
Безопасные обновления @path::acl для этого $path, исходя из его acl спецификация заголовка.
По умолчанию используется $_ как путь, если не пройдены аргументы.
