Zuletzt besucht
Zuletzt besucht

Orion API - Erstellen

[ÜBERPRÜFT] Last updated by Joe Schaefer on Fr., 12 Juni 2026    source
 

SunStar Systeme

 

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:

  1. laden lib/facts.yml und lib/acl.yml,
  2. erstellen @path::patternsund
  3. opportunistisch gehen content/ Baum für Seed %path::dependencies und @path::acls aus 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

 

single_narrative(%args)

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:

  • template
  • path
  • lang

Optional Argmuents:

  • deps — überschreibt normal fetch_deps Verarbeitung

  • quick_deps — Einstellung zur Optimierung der internen deps-Verarbeitung; am besten links nicht gesetzt

  • preprocess — ermöglicht die Vorlagenverarbeitung innerhalb der $path Inhalt selbst,

  • archive_root — Dateien in “archiviert” Status sind “kopiert” und nach Jahr/Monat-Unterordnern zu diesem inhaltlich verwalteten Standort über ssi,

  • category_root — Elemente in der “Kategorien” Header sind “kopiert” in entsprechend benannte Kategorienordner an dieser inhaltsverwalteten Stelle über ssi.

news_page(%args)

Für (mehrere) Aggregatseiten

sitemap(%args)

Zum Erstellen von Seiten index.html und sitemap.html

Gebietsschemaspezifischer, sortierter Abhängigkeitsindex.

Mandatory Arguments:

  • path
  • lang

Optional Arguments:

  • quick_deps
  • nested
  • preprocess

asymptote(%args)

Builds und Caches Asymptote Triple-Backquoted-Codeblöcke für HTML5-WebGL-canvas-fähige Vektorgrafiken

Mandatory Arguments:

  • view
  • lang
  • path

skip(%args)

Bauen Sie diese überhaupt nicht.

Erstellen Sie stattdessen die zugehörigen generierten Quelldateien (z. .bib\$lang ↦\mapsto \$base.page/bibliography.yml\$lang) auf einer sekundären Build-Systemausführung basieren.

yml2ext(%args)

Konvertieren Sie YAML-Dateien, in der Regel in JSON.

Optional Arguments:

  • ext Standard ist json
  • filter Standard ist json_raw
  • template Überschreibungen filter Standardausdruck

csv2ext(%args)

Konvertieren Sie CSV-Dateien, in der Regel in JSON.

Optional Arguments:

  • ext Standard ist json
  • filter Standard ist json_raw
  • template Überschreibungen filter Standardausdruck

fetch_deps($path, $data, $quick)

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:

  • path
  • data - Eingabe als Hashref; speichert resultierende Arrayref von deps bei Rückgabe
  • quick - Standard ist 2

breadcrumbs($path)

Gibt die HTML-Navigationsleiste zurück für $path.

memoize(%args)

Speichert den Build; hauptsächlich verwendet mit fetch_deps und quick_deps > 2.

comment(%args)

Generiert SSI-einschließbar HTML5 Fragment für einen Seitenkommentar.

next_view(%args)

Dienstprogramm zur sequenziellen Verarbeitung $args{view}.

ssi(%args)

Rekursiv bewertet ssi Tags.

offline(%args)

Führt die next_view im Offlinemodus.

snippet(%args)

Externen Code verarbeiten Snippet-Zeilen, in der Regel ihre Quellspeicherorte in GitHub in programmiersprachenspezifische abgegrenzte Markdown-Blöcke importiert. Beispiel hier.

reconstruct(%args)

Erneut verarbeiten Template Anweisungen in erstellten Inhalten aus next_view.

Entfernt Dateierweiterungen von lokalen Links.

Normalisiert lokale Links (./ und ../).

langify_template(%args)

Anhänge $args{lang} bis $args{template}.

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

 

read_text_file($file, $out, $content_lines)

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.

copy_if_newer($src, $dest)

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.

get_lock($lockfile)

Aktiviert ein exklusives (f)Lock (für den aktuellen UNIX-Prozess) $lockfile.

shuffle(\@deck)

In-Place Zufalls-Shuffle (Fisher-Yates) von @deck.

sort_tables($content)

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 @_.

unload_package($pkg)

Aggressive Entladung Perl (Blatt) Paket $pkg aus der Symboltabelle (STASH).

purge_from_inc(@paths)

Entfernt @paths von @INC.

touch(@_)

Entfernt alle Dateien in @_. Wenn keine Argumente übergeben werden, verwendet $_.

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).

parse_filename($path)

Wrapper um File::Basename::fileparse. Ohne Argumente, verwendet $_ als zu parsender Dateiname.

walk_content_tree($code)

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.

archived($path)

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.

seed_file_deps($path)

Sichere Updates %path::dependencies für diese $path, basierend auf dependencies Kopfzeile glob(s).

Standard ist ‘verwenden’ $_ als Pfad, wenn keine Argumente übergeben werden.

seed_file_acl($path)

Sichere Updates @path::acl für diese $path, basierend auf acl Headerspezifikation.

Standard ist ‘verwenden’ $_ als Pfad, wenn keine Argumente übergeben werden.

Load

Gleich wie YAML::XS::Load.

Dump

Gleich wie YAML::XS::Dump.