最近訪れたサイト
最近訪れたサイト

Orion API - ビルド

[確認済み] Last updated by Joe Schaefer on 金, 12 6月 2026    source
 

SunStarシステム

 

システム構築

このドキュメントでは、ビルド・システム APIについて説明します.

基本的に、ビルド・システムは2つのユーザー提供のPerlモジュールによって管理されます。lib/path.pm およびlib/view.pm.

前者の仕事は三つのことをすることである。

  1. ロードlib/facts.yml およびlib/acl.yml,
  2. 構成@path::patternsおよび
  3. 便宜的に歩くcontent/ シードするツリー%path::dependencies および@path::acls Markdown/yamlファイル・ヘッダー・メタデータ。

後者の仕事は、invokableを提供することです。view- ベース$methods: 一致するエントリ@path::patterns (各arrayrefエントリの2番目のスロット内の文字列化されたメソッド名として) ビルドスクリプト:

    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/ 関連するディレクトリ”.en” 言語拡張は、そのテンプレートのアドレス可能な引数に組み込まれます$path 関係なくpreprocess 引数の設定— trueの場合、ページのコンテンツ自体がその資料にアクセスできるようにします。

Mandatory Arguments:

  • template
  • path
  • lang

Optional Argmuents:

  • deps — 通常のオーバーライドfetch_deps 処理中

  • quick_deps — 内部deps-processing最適化設定; 最もよく残された未設定

  • 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要素arrayrefsのタイムスタンプ順のarrayrefとして指定します。

各2要素arrayrefの最初のエントリはファイルpath-nameで、2番目の要素は結果ですread_text_file そのパス名のhashref。

結果の新しいソース・ファイルのリストを返します。$quick > 2.

Mandatory Arguments:

  • path
  • data - 入力をhashrefとして; 戻り時にdepの結果のarrayrefを格納する
  • 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の汎用テキスト・ファイル・プロセッサ

UTF-8でエンコードされたファイルのheaders+contentを解析します$file 結果をhashrefに格納します。$out. $content_lines は、読み取るコンテンツ行の最大数です(オプション)。

実際に読み取られた行数(ヘッダーを含む)を返します。

$file ファイルの完全な内容を表すraw文字列への参照である可能性があります。結果$out UTF-8がエンコードされます。

copy_if_newer($src, $dest)

コピー数$src から$dest 前者の変更タイムスタンプが後者の変更タイムスタンプより新しい場合。

コピー時に、さらにgzip-compress $dest file (テキストファイルの場合) “.gz” 名前の拡張。GZIP 設定することで圧縮を無効にできます。$ENV{NO_COPY_COMPRESS}=1.

get_lock($lockfile)

排他(f)ロック(現在のUNIXプロセスの場合)をオンにします。$lockfile.

shuffle(\@deck)

インプレイスランダム(Fisher-Yates)シャッフル@deck.

sort_tables($content)

マークダウン表をソート$content 各テーブルの列スペックに従って。

表ごとに正確に1つの列をソートできます(オプション)。n降順v または昇順^ オーダー

fixup_code($prefix, $type, @_)

ストリップ$prefix 全てにおいて、@_.

の目的$type 引数は実装固有ですが、主にシードに使用されます。editor.md "mode" このコンテンツの処理対象@_.

unload_package($pkg)

積極的なアンロードPerl (リーフ)パッケージ$pkg Symbol Table(シンボルテーブル)STASH).

purge_from_inc(@paths)

削除@paths 場所@INC.

touch(@_)

すべてのファイルを@_。引数が渡されない場合、$_.

normalize_svn_path(@_)

すべてのパスを正規化します。@_ RAW引数として安全に使用できます。SVN::Client コマンド

sanitize_relative_path(@_)

パスを保護する@_ 純粋な相対パスとして使用Dotiac::DTL (Djangoテンプレート)パス固有のコマンド。

parse_filename($path)

ラッパー周りFile::Basename::fileparse。引数を指定しない場合、$_ 解析するファイル名を指定します。

walk_content_tree($code)

条件付きで歩く./content ビルドシステムチェックアウトのツリー。最初の正規化$_ 正式なコンテンツ・ルート・サブパスとして、$code->() ツリーウォークの各項目について

ほとんどのビルドでは、ウォークは発生しません— かわりに、ビルドは以前のビルドからキャッシュされたデータに依存します。

歩行を強制する唯一の方法は、設定することです$path::use_cache ユーザー提供のモジュールのfalse値。それ以外の場合、この動作は、増分ビルド技術.

ウォークが実際に処理された場合は、キャッシュされたデータに依存するのではなく、1を返します。それ以外の場合は、false値を返します。

archived($path)

各フラグStatus: archived $path (自然言語による) 使用$_ 引数が渡されない場合。

Markdownファイルをアーカイブすることは、Orionに伝える自然な方法です。”このファイルのパーマリンクされた場所に注意を払うのをやめる”再度更新されない限り、アーカイブの場所がリフレッシュされます。特に、アーカイブされたファイルは、Orion CMS自体内のディレクトリリストには表示されません。オンラインでの再編集を可能にするには、ライブページ自体に移動する必要があります。

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.