Ayudante de Hugo para realizar el preprocesamiento de archivos.
Proporcionar un preprocesador flexible para Hugo, ya que, como comunidad, parece que no podemos lograr que ciertos tipos de archivos sean compatibles con controladores/procesadores externos en el código central de Hugo.
Diseñado para ayudar con cualquier tipo de preprocesamiento deseado para publicar archivos, como:
Se utiliza un archivo de configuración para definir el procesamiento. De forma predeterminada, el nombre del archivo de configuración es .hugo-preproc.yaml
(o .toml
o .json
).
Puede especificar un archivo de configuración en la línea de comando con la opción -c
/ --config
.
Ejecute el comando y el procesamiento se producirá según la configuración.
El archivo tiene dos claves principales: git
y processors
, como este ejemplo:
git :
- path : path/to/repo
processors :
- mode : head | each | all
file : path/to/output/{{ .Commit.Hash }}
template : Entry {{ .<field> }}
exec :
- path : path/to/top/directory
pattern : " *.md "
command : echo {{ . }}
La clave git
es un objeto de matriz, con cada elemento de la matriz definido de la siguiente manera:
path
: define la ruta al repositorio de git (predeterminado: ".")processors
: conjunto de controladores de registros de git.mode
: valores de head
(solo la confirmación principal), each
(cada entrada de registro pasada por el procesador, consecutivamente) o all
(todas las entradas pasadas por el procesador).file
: el archivo a generar; procesado como plantilla.template
: la plantilla a través de la cual se procesarán las entradas del registro de git y luego se escribirán en file
. La clave exec
es un objeto de matriz, con cada elemento de la matriz definido de la siguiente manera:
path
: la ruta de nivel superior que se recorrerá y escaneará en busca de nombres de archivos coincidentes.pattern
: el patrón utilizado para hacer coincidir los nombres de archivos mientras se recorre el contenido path
de forma recursiva.command
: el comando que se ejecutará en archivos coincidentes; este valor se procesa como una plantilla Go.Las entradas de la matriz se ejecutarán en serie, en el orden en que están definidas.
Estamos utilizando Go Templates para procesar las claves file
y template
en cada controlador git
, así como la clave command
en cada objeto processors
.
Además de las funciones estándar de Go Template, también agregamos:
fields
- structs.Names
replace
- strings.Replace
{{replace <input> <search> <replace> <n>}}
example.drawio
command
: draw.io --export --output {{replace . ".md" ".svg" -1}} --format svg {{.}}
exec
: draw.io --export --output example.svg --format svg example.drawio
split
- strings.Split
{{split <input> <separator>}}
trimsuffix
- strings.TrimSuffix
{{trimsuffix <input> <trim_string>}}
Además, ahora hemos mapeado la biblioteca completa de funciones de plantilla Masterminds/sprig. Para las versiones 1.x
de hugo-preproc
dejaremos nuestras funciones de plantilla personalizadas en su lugar. Cuando pasemos a las versiones 2.x
, dejaremos de utilizar las funciones personalizadas anteriores en favor de sprig
.
Proporcionamos la siguiente entrada para los controladores configurados.
controladores git
head
y each
. {
Commit {
Hash string // Hash of the commit object.
Author { // Author is the original author of the commit.
Name string // Name of the Author.
Email string // Email address of the Author.
When time . Time // Date/time of the commit.
}
Committer { // Committer is the one performing the commit,
// might be different from Author.
Name string // Name of the Committer.
Email string // Email address of the Committer.
When time . Time // Date/time of the commit.
}
Message string // Message is the commit message, contains arbitrary text.
TreeHash string // TreeHash is the hash of the root tree of the commit.
ParentHashes [] string // ParentHashes are the hashes of the parent commits of the commit.
PGPSignature string // PGPSignature is the PGP signature of the commit.
}
Stats [] string // Array of strings for files changed and their stats.
}
all
. {
// Array of Commits
Commits []{
Commit {
Hash string // Hash of the commit object.
Author string // Author is the original author of the commit.
Name string // Name of the Author.
Email string // Email address of the Author.
When time . Time // Date/time of the commit.
}
Committer { // Committer is the one performing the commit,
// might be different from Author.
Name string // Name of the Committer.
Email string // Email address of the Committer.
When time . Time // Date/time of the commit.
}
Message string // Message is the commit message, contains arbitrary text.
TreeHash string // TreeHash is the hash of the root tree of the commit.
ParentHashes [] string // ParentHashes are the hashes of the parent commits of the commit.
PGPSignature string // PGPSignature is the PGP signature of the commit.
}
Stats [] string // Array of strings for files changed and their stats.
}
// Head Commit
Head {
Commit {
Hash string // Hash of the commit object.
Author string // Author is the original author of the commit.
Name string // Name of the Author.
Email string // Email address of the Author.
When time. Time // Date/time of the commit.
}
Committer { // Committer is the one performing the commit,
// might be different from Author.
Name string // Name of the Committer.
Email string // Email address of the Committer.
When time. Time // Date/time of the commit.
}
Message string // Message is the commit message, contains arbitrary text.
TreeHash string // TreeHash is the hash of the root tree of the commit.
ParentHashes [] string // ParentHashes are the hashes of the parent commits of the commit.
PGPSignature string // PGPSignature is the PGP signature of the commit.
}
Stats [] string // Array of strings for files changed and their stats.
}
}
manejadores exec
. string // String representing the matched filename,
// including its full path (handler top search path + sub-path to file).