최근에 방문함
최근에 방문함

Orion API - 빌드

[확인] Last updated by Joe Schaefer on 금, 12 6월 2026    source
 

SunStar 시스템

 

빌드 시스템

이 문서에서는 시스템 구축 API에 대해 다룹니다..

기본적으로 빌드 시스템은 사용자가 제공한 두 개의 Perl 모듈로 제어됩니다. lib/path.pm 및 lib/view.pm.

이전 작업은 다음 세 가지를 수행하는 것입니다.

  1. 로드 lib/facts.yml 및 lib/acl.yml,
  2. 생성 @path::patterns및
  3. 기회주의적으로 걷다 content/ 시드할 트리 %path::dependencies 및 @path::acls 마크다운/yaml 파일 헤더 메타데이터에서

후자의 임무는 호출을 제공하는 것입니다 view- 기반 $methods - 일치하는 항목의 경우 @path::patterns (각 arrayref 항목의 두번째 슬롯에 있는 문자열화된 메소드 이름으로), 스크립트 작성:

    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-fenced 마크다운 블록. 예를 들면 다음과 같습니다. 여기.

 


 

SunStarSys::View — 기본 클래스 lib/view.pm

 

single_narrative(%args)

가장 인기있는 (그리고 정교한)보기

이 뷰에는 내부에 있는 파일의 자동 처리 기능이 포함되어 있습니다. $path첨부 디렉토리입니다. 즉, $path = "/foo.md.en"에 저장된 파일이 /foo.page/ 디렉토리: “한국어” 언어 확장이 템플리트 주소 지정 가능 인수에 통합됩니다. $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의 첫 번째 항목은 파일 경로 이름입니다, 두 번째 요소는 결과입니다 read_text_file 해당 경로 이름에 대한 해시 참조입니다.

다음과 같은 경우 결과 새 소스 파일 목록을 반환합니다. $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의 범용 텍스트 파일 프로세서

UTF-8 인코딩 파일의 헤더+내용을 구문 분석합니다. $file 결과를 해시 참조에 저장합니다. $out. $content_lines 읽을 콘텐츠 라인의 최대 개수(선택 사항)입니다.

읽은 실제 행 수(머리글 포함)를 반환합니다.

$file 파일의 전체 내용을 나타내는 원시 문자열에 대한 참조일 수 있습니다. 결과는 $out UTF-8이 인코딩됩니다.

copy_if_newer($src, $dest)

매수 $src 종료 $dest 이전 수정 타임스탬프가 후자의 수정 타임스탬프보다 최신인 경우.

복사본에서 gzip-compresses의 $dest 파일(텍스트 파일인 경우) “.gz” 이름을 확장합니다. GZIP 압축은 다음 설정을 통해 비활성화할 수 있습니다. $ENV{NO_COPY_COMPRESS}=1.

get_lock($lockfile)

현재 UNIX 프로세스의 경우 배타적(f)잠금을 $lockfile.

shuffle(\@deck)

내장 무작위(어류) 셔플 @deck.

sort_tables($content)

마크다운 테이블 정렬 위치 $content 각 테이블의 열 사양에 따라 다릅니다.

테이블당 정확히 하나의 열을 정렬할 수 있습니다(선택 사항). n, 내림차순 v 또는 오름차순 ^ 주문.

fixup_code($prefix, $type, @_)

스트립 $prefix 모든 인수에서 @_.

의 목적 The purpose of the $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 (장고 템플릿) 경로별 명령.

parse_filename($path)

주변 래퍼 File::Basename::fileparse. 인수가 없으면 $_ 구문 분석할 파일 이름입니다.

walk_content_tree($code)

조건부로 걷기 ./content 빌드 시스템 체크아웃의 트리; 먼저 정규화 $_ 형식 컨텐트 루트 하위 경로로 변경한 다음 $code->() 트리워크의 각 항목에 대해 설명합니다.

대부분의 빌드에서는 걷기가 발생하지 않습니다. — 대신 빌드는 이전 빌드의 캐시에 저장된 데이터를 사용합니다.

강제로 걷는 유일한 방법은 $path::use_cache 사용자가 제공한 모듈의 false 값 그렇지 않으면 이 동작은 증분 빌드 기술.

캐시에 저장된 데이터에 의존하지 않고 실제로 보행시선이 진행된 경우 1을 반환합니다. 그렇지 않으면 false 값을 반환합니다.

archived($path)

각 플래그 Status: archived $path (자연어 특정 방식으로). 사용 $_ 인수가 전달되지 않은 경우

마크다운 파일을 아카이브하는 것은 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.