Orion API - Erstellen
System erstellen
Dieses Dokument behandelt die Build-System-APIs.
Grundsätzlich wird das Build-System von zwei vom Benutzer bereitgestellten Perl-Modulen gesteuert: lib/path.pm und lib/view.pm.
Die erste Aufgabe besteht darin, drei Dinge zu tun:
- laden
lib/facts.ymlundlib/acl.yml, - erstellen
@path::patternsund - opportunistisch gehen
content/Baum für Seed%path::dependenciesund@path::aclsaus Headermetadaten der Markup-/YAML-Datei.
Letzterer hat die Aufgabe, unlösbar zu sein. view-basiert $methods für die übereinstimmenden Einträge in @path::patterns (als String-Methodenname im zweiten Slot jedes arrayref-Eintrags), der vom Skripting erstellen:
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;
Viele Ansichten sollen gestapelt werden als “Filter” zur Vorverarbeitung (oder Nachbearbeitung) von Aspekten der Datei in $path Das ist neu, wie externer Code snippets oder asymptote-abgegrenzte Markdown-Blöcke. Sie können ein Beispiel dafür sehen hier.
SunStarSys::View — Basisklasse für lib/view.pm
Die beliebteste (und anspruchsvollste) Ansicht
Diese Ansicht beinhaltet die automatisierte Verarbeitung von Dateien, die sich innerhalb der $path‘s Anhangsverzeichnis. Mit anderen Worten, wenn $path = "/foo.md.en", dann die Dateien, die in der /foo.page/ Verzeichnis, das mit dem “.de” Die Spracherweiterung wird in die adressierbaren Argumente für die Vorlage integriert. $path unabhängig von der preprocess Argumenteinstellung — die, wenn wahr, das Material auch für den Inhalt der Seite selbst zugänglich machen würde.
Mandatory Arguments:
templatepathlang
Optional Argmuents:
deps— überschreibt normalfetch_depsVerarbeitungquick_deps— Einstellung zur Optimierung der internen deps-Verarbeitung; am besten links nicht gesetztpreprocess— ermöglicht die Vorlagenverarbeitung innerhalb der$pathInhalt selbst,archive_root— Dateien in “archiviert” Status sind “kopiert” und nach Jahr/Monat-Unterordnern zu diesem inhaltlich verwalteten Standort überssi,category_root— Elemente in der “Kategorien” Header sind “kopiert” in entsprechend benannte Kategorienordner an dieser inhaltsverwalteten Stelle überssi.
Zum Erstellen von Seiten index.html und sitemap.html
Gebietsschemaspezifischer, sortierter Abhängigkeitsindex.
Mandatory Arguments:
pathlang
Optional Arguments:
quick_depsnestedpreprocess
Builds und Caches Asymptote Triple-Backquoted-Codeblöcke für HTML5-WebGL-canvas-fähige Vektorgrafiken
Mandatory Arguments:
viewlangpath
Bauen Sie diese überhaupt nicht.
Erstellen Sie stattdessen die zugehörigen generierten Quelldateien (z. .bib\$lang \$base.page/bibliography.yml\$lang) auf einer sekundären Build-Systemausführung basieren.
Konvertieren Sie YAML-Dateien, in der Regel in JSON.
Optional Arguments:
extStandard istjsonfilterStandard istjson_rawtemplateÜberschreibungenfilterStandardausdruck
Konvertieren Sie CSV-Dateien, in der Regel in JSON.
Optional Arguments:
extStandard istjsonfilterStandard istjson_rawtemplateÜberschreibungenfilterStandardausdruck
Refactors $data Argument hashref als zeitstempel geordneter arrayref von 2-element arrayrefs.
Der erste Eintrag in jedem 2-Element-Arrayref ist der Dateipfadname, das zweite Element ist das Ergebnis. read_text_file hashref für diesen Pfadnamen.
Gibt eine Liste der resultierenden neuen Quelldateien zurück, wenn $quick > 2.
Mandatory Arguments:
pathdata- Eingabe als Hashref; speichert resultierende Arrayref von deps bei Rückgabequick- Standard ist 2
Externen Code verarbeiten Snippet-Zeilen, in der Regel ihre Quellspeicherorte in GitHub in programmiersprachenspezifische abgegrenzte Markdown-Blöcke importiert. Beispiel hier.
Fügt Markdown-Links eine Titelzeichenfolge hinzu. Normalerweise sollte man unter offline Ansicht, um das Abrufen von Titeln von Remote-Sites zu vermeiden, was zu erheblichen Verzögerungen bei der Seitenerstellung führen kann.
SunStarSys::Util — Utilitybibliothek für lib/path.pm und lib/view.pm
Universeller Textdateiprozessor von Orion
Parst Header+Inhalt der UTF-8-codierten Datei $file und speichert Ergebnisse in hashref $out. $content_lines ist die (optionale) maximale Anzahl von Inhaltszeilen, die gelesen werden sollen.
Gibt die tatsächliche Anzahl der gelesenen Zeilen (einschließlich Kopfzeilen) zurück.
$file kann eine Referenz auf eine Raw-Zeichenfolge sein, die den vollständigen Inhalt einer Datei darstellt. Die Ergebnisse in $out wird weiterhin UTF-8-codiert sein.
Kopien $src bis $dest wenn der Änderungszeitstempel neuer ist als der des letzteren.
Auf Kopie, zusätzlich gzip-komprimiert die $dest Datei, wenn es sich um eine Textdatei handelt, und fügt “.gz” Erweiterung des Namens. GZIP Komprimierung kann durch Einstellung deaktiviert werden $ENV{NO_COPY_COMPRESS}=1.
Sortiert Preisabschrifttabellen in $content entsprechend der Spaltenspezifikation jeder Tabelle.
Pro Tabelle kann genau eine Spalte sortiert werden, optional numerisch nin absteigender Reihenfolge v oder aufsteigend ^ Bestellung.
fixup_code($prefix, $type, @_)
Streifen $prefix von jedem Argument in @_.
Der Zweck der $type Argument ist implementierungsspezifisch, wird aber hauptsächlich verwendet, um die editor.md "mode" für die Verarbeitung dieser Inhalte in @_.
normalize_svn_path(@_)
Normalisiert alle Pfade in @_ für die sichere Verwendung als RAW-Argumente SVN::Client Befehle.
sanitize_relative_path(@_)
Sichert Pfade in @_ zur Verwendung als reine relative Pfade in Dotiac::DTL Pfadspezifische Befehle (Django-Vorlage).
Wrapper um File::Basename::fileparse. Ohne Argumente, verwendet $_ als zu parsender Dateiname.
Bedingt geht die ./content Baum des Checkouts des Build-Systems; erste Normalisierung $_ als formaler inhaltlich ausgerichteter Unterpfad, und dann $code->() auf jedem Element im Baumlauf.
Für die meisten Gebäude passiert der Spaziergang nie — Stattdessen basiert der Build auf den zwischengespeicherten Daten aus früheren Builds.
Der einzige Weg, einen Spaziergang zu erzwingen, ist die Einstellung $path::use_cache auf einen falschen Wert in Ihren vom Benutzer bereitgestellten Modulen. Andernfalls wird dieses Verhalten fachmännisch von der Inkrementelle Build-Technologie.
Gibt 1 zurück, wenn die Prüfung tatsächlich ausgeführt wurde, anstatt sich auf gecachte Daten zu verlassen. Andernfalls wird ein falscher Wert zurückgegeben.
Markiert jede Status: archived $path (in natürlicher Sprache). Verwendungen $_ wenn keine Argumente übergeben werden.
Die Archivierung von Markdown-Dateien ist eine natürliche Möglichkeit, Orion mitzuteilen, “Achten Sie nicht mehr auf den Permalink-Speicherort dieser Datei”, es sei denn, es wird erneut aktualisiert. In diesem Fall wird der Archivspeicherort aktualisiert. Insbesondere werden archivierte Dateien nicht in Verzeichnislisten innerhalb des Orion CMS selbst angezeigt; Sie müssen zur Live-Seite selbst navigieren, um sie wieder online bearbeiten zu können.
Sichere Updates %path::dependencies für diese $path, basierend auf dependencies Kopfzeile glob(s).
Standard ist ‘verwenden’ $_ als Pfad, wenn keine Argumente übergeben werden.
Sichere Updates @path::acl für diese $path, basierend auf acl Headerspezifikation.
Standard ist ‘verwenden’ $_ als Pfad, wenn keine Argumente übergeben werden.
