Недавно посещённые
Недавно посещённые

API Orion – сборка

[ПРОВЕРЕНО] Last updated by Joe Schaefer on пт, 12 июн. 2026    source
 

SunStar Системы

 

Система сборки

Этот документ охватывает API Build System.

В основном, система сборки управляется двумя модулями Perl, поставляемыми пользователем: lib/path.pm и lib/view.pm.

Первая задача состоит в том, чтобы сделать три вещи:

  1. тяжесть lib/facts.yml и lib/acl.yml,
  2. изготавливать @path::patterns, и
  3. условно ходить 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

 

single_narrative(%args)

Самый популярный (и сложный) вид

Это представление включает автоматическую обработку файлов, расположенных внутри $pathкаталог вложений. Другими словами, если $path = "/foo.md.en", затем файлы, хранящиеся в /foo.page/ каталог, связанный с “.ru” расширение языка будет включено в шаблон адресных аргументов для этого $path независимо от preprocess параметр аргумента — который, если это правда, также сделает этот материал доступным по самому содержанию страницы.

Mandatory Arguments:

  • template
  • path
  • lang

Optional Argmuents:

  • deps — переопределяет обычный fetch_deps переработка

  • quick_deps — внутренняя настройка оптимизации обработки депс; наилучшее левое неустановка

  • preprocess — включает обработку шаблонов внутри $path самого контента,

  • archive_root — файлы в “архивированный” статус: “скопировано” и отслеживаются по подпапкам года/месяца в этом расположении с корнем контента через ssi,

  • category_root — элементы в “категории” заголовок является “скопировано” в соответствующие имена папок категорий в этом расположении с корнем содержимого через ssi.

news_page(%args)

Для (многоописательных) агрегированных страниц

sitemap(%args)

Для создания страниц index.html и sitemap.html

Индекс зависимостей, зависящий от локали.

Mandatory Arguments:

  • path
  • lang

Optional Arguments:

  • quick_deps
  • nested
  • preprocess

asymptote(%args)

Сборки и кэширование Asymptote трехкодовые блоки для векторной графики с поддержкой HTML5-WebGL

Mandatory Arguments:

  • view
  • lang
  • path

skip(%args)

Не стройте их вообще.

Вместо этого создайте связанные сгенерированные исходные файлы (например, .bib\$lang ↦\mapsto \$base.page/bibliography.yml\$lang), который должен быть построен на вторичном запуске системы сборки.

yml2ext(%args)

Преобразование файлов YAML, как правило, в JSON.

Optional Arguments:

  • ext по умолчанию json
  • filter по умолчанию json_raw
  • template переопределения filter выражение по умолчанию

csv2ext(%args)

Преобразование файлов CSV, как правило, в JSON.

Optional Arguments:

  • ext по умолчанию json
  • filter по умолчанию json_raw
  • template переопределения filter выражение по умолчанию

fetch_deps($path, $data, $quick)

Рефакторы $data hashref аргумента как упорядоченная по метке времени ссылка массива 2-элементных ссылок массива.

Первая запись в каждой 2-элементной ссылке массива – это имя пути к файлу, второй элемент – результирующий read_text_file hashref для этого имени пути.

Возвращает список полученных новых исходных файлов, если $quick > 2.

Mandatory Arguments:

  • path
  • data - вход в виде хэшрефа; хранит результирующий массив значений по возврату
  • quick - по умолчанию 2

breadcrumbs($path)

Возвращает список навигационных цепочек HTML для $path.

memoize(%args)

Кэширование сборки; в основном используется с fetch_deps и quick_deps > 2.

comment(%args)

Создание SSI-включаемый HTML5 фрагмент для комментария к странице.

next_view(%args)

Утилита для последовательной обработки $args{view}.

ssi(%args)

Рекурсивные оценки ssi теги.

offline(%args)

Выполняет next_view в автономном режиме.

snippet(%args)

Обработка внешнего кода линии фрагментов, обычно импортируя их исходные местоположения на GitHub в блоки разметки, зависящие от языка программирования. Пример здесь.

reconstruct(%args)

Повторные обработки Template директивы в построенном контенте от next_view.

Удаляет расширения файлов из локальных ссылок.

Нормализует локальные ссылки (./ и ../).

langify_template(%args)

Добавление $args{lang} по $args{template}.

Добавляет строку заголовка для ссылок разметки. Обычно используется при offline просмотр, чтобы избежать получения заголовков с удаленных сайтов, что может значительно перетащить время сборки страницы.

 


SunStarSys::Util — библиотека служебных программ для lib/path.pm и lib/view.pm

 

read_text_file($file, $out, $content_lines)

Универсальный текстовый процессор Orion

Синтаксический анализ headers+content файла в кодировке UTF-8 $file и хранит результаты в хэшрефе $out. $content_lines (необязательно) максимальное число строк контента для чтения.

Возвращает фактическое число прочитанных строк (включая заголовки).

$file может быть ссылкой на необработанную строку, представляющую полное содержимое файла. Результаты в $out Все равно будет кодироваться UTF-8.

copy_if_newer($src, $dest)

Копии $src по $dest если отметка времени первого изменения является более новой, чем отметка последнего.

При копировании дополнительно gzip-сжатие $dest файл, если это текстовый файл, и добавляет “.gz” Расширение имени. GZIP сжатие можно отключить, установив $ENV{NO_COPY_COMPRESS}=1.

get_lock($lockfile)

Обеспечивает исключительную (f) блокировку (для текущего процесса UNIX) $lockfile.

shuffle(\@deck)

На месте случайный (Рыбак-Йейтс) перетасовки @deck.

sort_tables($content)

Сортировка таблиц снижения цен в $content согласно спецификации столбца каждой таблицы.

Для каждой таблицы можно отсортировать только один столбец (необязательно) по числам n, по убыванию v или по возрастанию ^ заказ.

fixup_code($prefix, $type, @_)

Полосы $prefix из каждого спора в @_.

Цель $type аргумент специфичен для реализации, но в основном используется для editor.md "mode" для обработки этого контента в @_.

unload_package($pkg)

Агрессивные выгрузки Perl пакет (листьев) $pkg из таблицы символов (STASH).

purge_from_inc(@paths)

Удаляет @paths из @INC.

touch(@_)

Связывает все файлы в @_. Если аргументы не переданы, используется $_.

normalize_svn_path(@_)

Нормализация всех путей в @_ для безопасного использования в качестве необработанных аргументов SVN::Client Команды.

sanitize_relative_path(@_)

Защищает пути в @_ для использования в качестве чистых относительных путей Dotiac::DTL Команды, относящиеся к пути (шаблон Django).

parse_filename($path)

Оболочка вокруг File::Basename::fileparse. Без аргументов, использует $_ как имя файла для разбора.

walk_content_tree($code)

Условные прогулки ./content древо системы сборки; сначала нормализация $_ как формальный субпуть с корнем содержимого, а затем вызов $code->() на каждом предмете в лесу.

Для большинства зданий прогулка никогда не бывает — вместо этого сборка опирается на кэшированные данные из предыдущих сборок.

Единственный способ заставить прогулку – это установить $path::use_cache для ложного значения в пользовательских модулях. В противном случае это поведение квалифицированно управляется технология инкрементальной сборки.

Возвращает 1, если прогулка действительно продолжалась, вместо того, чтобы полагаться на кэшированные данные. В противном случае возвращается значение false.

archived($path)

Флаги каждый Status: archived $path (в зависимости от языка). Использование $_ если не переданы аргументы.

Архивирование файлов Markdown – это естественный способ рассказать Orion “перестать обращать внимание на постоянное расположение этого файла”, если он не будет обновлен повторно, в этом случае местоположение архива будет обновлено. В частности, архивные файлы не появляются в списках каталогов в самой CMS Orion; вам нужно перейти к самой активной странице, чтобы снова редактировать ее в Интернете.

seed_file_deps($path)

Безопасные обновления %path::dependencies для этого $path, исходя из его dependencies верхний колонтитул glob(s).

По умолчанию используется $_ как путь, если не пройдены аргументы.

seed_file_acl($path)

Безопасные обновления @path::acl для этого $path, исходя из его acl спецификация заголовка.

По умолчанию используется $_ как путь, если не пройдены аргументы.

Load

Совпадает с YAML::XS::Load.

Dump

Совпадает с YAML::XS::Dump.