API de Orion - Crear
Sistema de creación
En este documento se tratan las API Crear sistema.
Básicamente, el sistema de creación se rige por dos módulos Perl proporcionados por el usuario: lib/path.pm y lib/view.pm.
El trabajo del primero es hacer tres cosas:
- carga
lib/facts.ymlylib/acl.yml, - construcción
@path::patternsy - oportunista caminar
content/árbol para sembrar%path::dependenciesy@path::aclsde los metadatos de cabecera del archivo markdown/yaml.
El trabajo de este último es proporcionar invocable viewbasado en $methods para las entradas coincidentes en @path::patterns (como un nombre de método de cadena en la segunda ranura de cada entrada arrayref), invocado por el creación de scripts:
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;
Muchas vistas están destinadas a ser apiladas como “filtros” para preprocesar (o posprocesar) aspectos del archivo en $path que son novedosas, como el código externo snippets o asymptote-bloques de rebaja vallados. Se puede ver un ejemplo de ello aquí.
SunStarSys::View — clase base para lib/view.pm
La vista más popular (y sofisticada)
Esta vista incorpora el procesamiento automatizado de archivos ubicados dentro de la $pathdirectorio de anexos. Es decir, si $path = "/foo.md.en", a continuación, los archivos almacenados en el /foo.page/ directorio asociado con el “.en” extensión lingüística se incorporará en la plantilla de argumentos direccionables para que $path independientemente del preprocess configuración del argumento — que, si es cierto, también haría que ese material fuera accesible por el propio contenido de la página.
Mandatory Arguments:
templatepathlang
Optional Argmuents:
deps— sustituye a normalfetch_depsprocesoquick_deps— configuración de optimización interna de proceso de deps; mejor dejar sin configurarpreprocess— permite el procesamiento de plantillas en$pathcontenido en sí,archive_root— archivos en “archivado” estado son “copiado” y rastreado por subcarpetas de año/mes a esta ubicación de contenido a través dessi,category_root— elementos en la “categorías” cabecera son “copiado” en carpetas de categorías con nombre adecuado en esta ubicación con raíz de contenido mediantessi.
Para crear las páginas index.html y sitemap.html
Índice de dependencias ordenado y específico de la configuración regional.
Mandatory Arguments:
pathlang
Optional Arguments:
quick_depsnestedpreprocess
Compilaciones y cachés Asymptote bloques de código con comillas dobles para gráficos vectoriales activados para lienzo HTML5-WebGL
Mandatory Arguments:
viewlangpath
No los construyas en absoluto.
En su lugar, cree los archivos de origen generados asociados (por ejemplo, .bib\$lang \$base.page/bibliography.yml\$lang) que se va a crear en una ejecución de sistema de creación secundaria.
Convertir archivos YAML, normalmente en JSON.
Optional Arguments:
extvalores por defecto parajsonfiltervalores por defecto parajson_rawtemplatesustitucionesfilterexpresión predeterminada
Convierte archivos CSV, normalmente en JSON.
Optional Arguments:
extvalores por defecto parajsonfiltervalores por defecto parajson_rawtemplatesustitucionesfilterexpresión predeterminada
Refactores $data argumento hashref como una referencia de matriz ordenada de registro de hora de arrayrefs de 2 elementos.
La primera entrada en cada arrayref de 2 elementos es el nombre de ruta de archivo, el segundo elemento es el resultado read_text_file hashref para ese nombre de ruta.
Devuelve una lista de los nuevos archivos de origen resultantes si $quick > 2.
Mandatory Arguments:
pathdata- entrada como hashref; almacena arrayref resultante de deps al devolverquick- se define por defecto en 2
Procesa el código externo líneas de fragmento, normalmente importando sus ubicaciones de origen en GitHub en bloques de rebaja con aislamiento específicos del lenguaje de programación. Ejemplo aquí.
Agrega una cadena de título a los enlaces de rebaja. Normalmente se debe utilizar bajo el offline para evitar tirar de títulos de sitios remotos, lo que puede poner un arrastre significativo en los tiempos de creación de página.
SunStarSys::Util — biblioteca de utilidades para lib/path.pm y lib/view.pm
Procesador de archivos de texto universal de Orion
Analiza cabeceras+contenido de archivo codificado UTF-8 $file y almacena los resultados en hashref $out. $content_lines es el número máximo (opcional) de líneas de contenido que se van a leer.
Devuelve el número real de líneas leídas (incluidas las cabeceras).
$file puede ser una referencia a una cadena raw, que representa el contenido completo de un archivo. Los resultados en $out seguirá siendo UTF-8 codificado.
Copias $src a $dest si el registro de hora de modificación del primero es más reciente que el segundo.
Al copiar, además, gzip-comprime el $dest archivo si es un archivo de texto y agrega “.gz” extensión del nombre. GZIP la compresión se puede desactivar estableciendo $ENV{NO_COPY_COMPRESS}=1.
Ordena las tablas de rebaja en $content según la especificación de columna de cada tabla.
Se puede ordenar exactamente una columna por tabla, opcionalmente numéricamente n, ya sea descendente v o ascendente ^ orden.
fixup_code($prefix, $type, @_)
Tiras $prefix de cada arg en @_.
La finalidad del $type argumento es específico de la implementación, pero se utiliza principalmente para sembrar la editor.md "mode" para procesar este contenido en @_.
normalize_svn_path(@_)
Normaliza todas las rutas en @_ para un uso seguro como argumentos crudos para SVN::Client comandos.
sanitize_relative_path(@_)
Asegura rutas en @_ para su uso como caminos relativos puros en Dotiac::DTL (Django Template) comandos específicos de la ruta.
Envoltorio alrededor File::Basename::fileparse. Sin argumentos, utiliza $_ como nombre de archivo que se va a analizar.
Camina condicionalmente el ./content árbol de la salida del sistema de creación; primero normalizando $_ como la subruta raíz de contenido formal y, a continuación, invocando $code->() en cada elemento del árbol-camino.
Para la mayoría de las construcciones, el paseo nunca sucede — en su lugar, la compilación se basa en los datos almacenados en caché de compilaciones anteriores.
La única manera de forzar un paseo es estableciendo $path::use_cache a un valor falso en los módulos proporcionados por el usuario. De lo contrario, este comportamiento es gestionado por expertos por el tecnología de compilación incremental.
Devuelve 1 si el recorrido realmente se ha realizado, en lugar de depender de datos almacenados en caché. De lo contrario, devuelve un valor falso.
Marca cada Status: archived $path (de una manera específica del lenguaje natural). Usos $_ si no se transfieren argumentos.
Archivar archivos de Markdown es una forma natural de decirle a Orion “dejar de prestar atención a la ubicación de enlace permanente de este archivo”, a menos que se actualice de nuevo, en cuyo caso se actualizará la ubicación de archivado. En particular, los archivos archivados no aparecen en los listados de directorios dentro del propio CMS de Orion; tiene que navegar a la propia página activa para poder editarla nuevamente en línea.
Actualizaciones seguras %path::dependencies para ello $path, basándose en su dependencies cabecera glob(s).
Se utiliza de forma predeterminada $_ como ruta si no se transfieren argumentos.
Actualizaciones seguras @path::acl para ello $path, basándose en su acl especificación de cabecera.
Se utiliza de forma predeterminada $_ como ruta si no se transfieren argumentos.
