Orion API - ビルド
システム構築
このドキュメントでは、ビルド・システム APIについて説明します.
基本的に、ビルド・システムは2つのユーザー提供のPerlモジュールによって管理されます。lib/path.pm およびlib/view.pm.
前者の仕事は三つのことをすることである。
- ロード
lib/facts.ymlおよびlib/acl.yml, - 構成
@path::patternsおよび - 便宜的に歩く
content/シードするツリー%path::dependenciesおよび@path::aclsMarkdown/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
最も人気のある(洗練された)ビュー
このビューには、内部にあるファイルの自動処理が組み込まれています。$pathの添付ディレクトリ。言い換えれば、$path = "/foo.md.en"に保存されたファイル/foo.page/ 関連するディレクトリ”.en” 言語拡張は、そのテンプレートのアドレス可能な引数に組み込まれます$path 関係なくpreprocess 引数の設定— trueの場合、ページのコンテンツ自体がその資料にアクセスできるようにします。
Mandatory Arguments:
templatepathlang
Optional Argmuents:
deps— 通常のオーバーライドfetch_deps処理中quick_deps— 内部deps-processing最適化設定; 最もよく残された未設定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要素arrayrefsのタイムスタンプ順のarrayrefとして指定します。
各2要素arrayrefの最初のエントリはファイルpath-nameで、2番目の要素は結果ですread_text_file そのパス名のhashref。
結果の新しいソース・ファイルのリストを返します。$quick > 2.
Mandatory Arguments:
pathdata- 入力をhashrefとして; 戻り時にdepの結果のarrayrefを格納するquick- デフォルト値は2
マークダウン・リンクにタイトル文字列を追加します。通常は、offline ページ構築時間を大幅に短縮できるリモート・サイトからのタイトルのプルを回避するためのビュー。
SunStarSys::Util — ユーティリティライブラリlib/path.pm およびlib/view.pm
Orionの汎用テキスト・ファイル・プロセッサ
UTF-8でエンコードされたファイルのheaders+contentを解析します$file 結果をhashrefに格納します。$out. $content_lines は、読み取るコンテンツ行の最大数です(オプション)。
実際に読み取られた行数(ヘッダーを含む)を返します。
$file ファイルの完全な内容を表すraw文字列への参照である可能性があります。結果$out UTF-8がエンコードされます。
コピー数$src から$dest 前者の変更タイムスタンプが後者の変更タイムスタンプより新しい場合。
コピー時に、さらにgzip-compress $dest file (テキストファイルの場合) “.gz” 名前の拡張。GZIP 設定することで圧縮を無効にできます。$ENV{NO_COPY_COMPRESS}=1.
マークダウン表をソート$content 各テーブルの列スペックに従って。
表ごとに正確に1つの列をソートできます(オプション)。n降順v または昇順^ オーダー
fixup_code($prefix, $type, @_)
ストリップ$prefix 全てにおいて、@_.
の目的$type 引数は実装固有ですが、主にシードに使用されます。editor.md "mode" このコンテンツの処理対象@_.
条件付きで歩く./content ビルドシステムチェックアウトのツリー。最初の正規化$_ 正式なコンテンツ・ルート・サブパスとして、$code->() ツリーウォークの各項目について
ほとんどのビルドでは、ウォークは発生しません— かわりに、ビルドは以前のビルドからキャッシュされたデータに依存します。
歩行を強制する唯一の方法は、設定することです$path::use_cache ユーザー提供のモジュールのfalse値。それ以外の場合、この動作は、増分ビルド技術.
ウォークが実際に処理された場合は、キャッシュされたデータに依存するのではなく、1を返します。それ以外の場合は、false値を返します。
各フラグStatus: archived $path (自然言語による) 使用$_ 引数が渡されない場合。
Markdownファイルをアーカイブすることは、Orionに伝える自然な方法です。”このファイルのパーマリンクされた場所に注意を払うのをやめる”再度更新されない限り、アーカイブの場所がリフレッシュされます。特に、アーカイブされたファイルは、Orion CMS自体内のディレクトリリストには表示されません。オンラインでの再編集を可能にするには、ライブページ自体に移動する必要があります。
安全な更新%path::dependencies この$pathに基づいて、dependencies ヘッダーglob(s).
使用するデフォルト$_ 引数が渡されない場合のパス。
