WMarkDown/WMD/es/doc/settings.w.md

350 lines
14 KiB
Markdown
Raw Normal View History

[[post_data {
"author" : "KyMAN",
"since" : 20210502,
"version" : 20210505
}]]
# Configuración
Todo esto que hemos comentado se llevará a cabo a partir de una configuración la cual reside en
múltiples partes del proyecto, y las mismas tendrán diferente prioridad a la hora de ser trabajadas,
pudiendo opacar parámetros o valores sobre otros. Esto está diseñado así para flexibilizar la
alteración de la configuración y que la configuración original persista.
## Parámetros de configuración
La configuración se dividirá en parámetros los cuales responden como un diccionario donde se les
pone un nombre como llave y luego con valor o conjunto de valores dependiendo del caso. Dichos
parámetros los vamos a ir trabajando a continuación.
### default_value
El valor por defecto hace alusión a un valor el cual no ha sido facilitado por nadie y que el propio
programa no es capaz de sacar, por lo que se le establece este valor por defecto. Es usado sobretodo
cara la configuración, entre otros aspectos, para valores que no se encontraron y no se les dio un
valor por defecto.
> Dicho valor puede ser cualquier cosa y se aconseja que se implemente por un
administrador o desarrollador, en caso de no ser ninguno de ellos se aconseja no cambiar.
Su valor por defecto es *null*.
### nulls
Este valor es de tipo Booleano y verifica si se admite, por defecto, respuestas nulas a la hora de
intentar acceder a un parámetro de la configuración. El permitir o no permitir valores nulos como
valor a una llamada de la configuración puede conllevar a variar el resultado. El no permitir nulos
no implica que no pueda responder un valor nulo puesto que es para gestionar el orden de priodidad
cara una posible respuesta.
> Para información acerca de los niveles de la configuración ir a [#Niveles-de-prioridad-1 Niveles
de prioridad].
Pongamos un ejemplo, supongamos que tenemos un parámetro de configuración que no existe, y tenemos
la configuración por defecto, y lo llamamos. Si le ponemos un valor por defecto éste retornará dicho
valor por defecto, en caso contrario, retornará null aún a pesar de no tenerlo permitido, por no
haber otra opción de valor, cogiendo el valor por defecto establecido con el parámetro anterior.
```php
// Este ejemplo retornará "por_defecto".
echo "Con valor por defect: " . $wmarkdown->settings("no_existo", null, "por_defecto", false) . "<br />\n";
// Mientras que éste otro retornará null.
echo "Sin valor por defect: " . $wmarkdown->settings("no_existo", null, null, false) . "<br />\n";
```
### wmarkdown_root
Nos indica la ruta absoluta a nuestro proyecto WMarkDown.
### root
Nos indica la ruta absoluta a nuestro proyecto donde queremos implementar el WMarkDown.
### documentation_path
Nos indica la ruta relativa desde la dirección establecida en el parámetro "root" de la
configuración donde se encuentran los ficheros de documentación WMarkDown.
### html_files
Indica la ruta relativa desde la dirección establecida en el parámetro "root" donde se encontrará la
pequeña base de datos JSON que almacena el Path de los ficheros HTML generados a partir de la
documentación. Dicho fichero será usado por el WMarkDown para identificar los ficheros HTML creados,
los cuales serán eliminados para su actualización cada vez que se ejecute el WMarkDown para generar
los HTML de la documentación.
### public_path
Indica la ruta relativa desde la dirección establecida en el parámetro "root" del directorio público
del proyecto donde establecer los archivos HTML que dan forma a los ficheros WMarkDown.
### html_base
Indica la ruta relativa desde la dirección establecida en el parámetro "root" donde se encuentra el
archivo HTML que se usará de base para generar todos los documentos HTML de la documentación.
### default_modules
Este parámetro implementa los diferentes módulos que se quieran aplicar al WMarkDown y los ordena a
partir de un diccionario. Su valor por defecto es el siguiente:
```json
{
"lists" : "\\WMarkDown\\Modules\\Lists",
"headers" : "\\WMarkDown\\Modules\\Headers",
"code_blocks" : "\\WMarkDown\\Modules\\CodeBlocks",
"paragraphs" : "\\WMarkDown\\Modules\\Paragraphs",
"font_formats" : "\\WMarkDown\\Modules\\FontFormats",
"checks" : "\\WMarkDown\\Modules\\Checks"
}
```
> Cambiar el orden de estos elementos puede conllevar a que se solapen por el patrón de búsqueda con
el que se gestionan, como por ejemplo los párrafos, que buscan todo conjunto de líneas juntas para
unificarlas en un único párrafo, pueden solapar cabeceras, listas, etc.
### hash_alphabet
Alfabeto a usar para generar los Hashes Random para generar identificadores automáticos no visibles
directamente sobre los usuarios finales. Este parámetro simplemente almacena caracteres con los que
trabajar para generar dichas cadenas aleatorias. El valor puede ser un String o un Array de
caracteres.
Hay que tener en cuenta que al ser usado para determinar identificadores únicos entre diferentes
entornos y lenguajes, los resultados nunca podrán iniciarse como un caracter numérico y por lo
tanto, obliga a que exista por lo menos un caracter no numérico dentro de la cadena.
> Se le puso la cadena de Base58 de Bitcoin con la idea de que los caracteres sean identificables a
simple vista, eliminando los caracteres que puedan dar lugar a confusión como la O mayúscula contra
el 0.
> **IMPORTANTE**: Es importante destacar que ha de haber por lo menos dos caracteres diferentes, y
que repetir caracteres dentro de una misma cadena simplemente les dará a los caracteres repetidos
mayor probabilidad contra los no repetidos, así como a más repeticiones más probabilidad de que
salgan en las cadenas finales. El hacer uso de cadenas vacías o con un solo caracteres implicará la
creación de bucles infinitos por el hecho de no conseguir una cadena única. También cabe destacar
que solo permitirá caracteres comprendidos en el alfabeto inglés de la A a la Z tanto mayúsculas
como minúsculas, distinguiendolos como caracteres diferentes; dígitos y guiones bajos, el resto de
caracteres serán descartados de su uso.
Ejemplos de implementación pueden ser los siguientes:
```php
// Aquí lo dejaríamos por defecto.
$wmarkdown = new WMarkDown();
// Aquí implementamos una cadena de caracteres reducida basada en una palabra.
$wmarkdown = new WMarkDown([
"hash_alphabet" => "Hola_a_todos"
]);
// Aquí cambiamos la cadena de Base58 por defecto a una Base64.
$wmarkdown = new WMarkDown([
"hash_alphabet" => "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
]);
// Aquí cambiamos la cadena de Base58 por defecto a una Base64 pero como Array.
$wmarkdown = new WMarkDown([
"hash_alphabet" => [
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1",
"2", "3", "4", "5", "6", "7", "8", "9", "+", "/"
]
]);
```
Todas las opciones anteriores son válidas para funcionar. Ahora veamos ejemplos de resultados según
metamos unas cadenas u otras.
```php
$wmarkdown = new WMarkDown();
$wmarkdown_b = new WMarkDown([
"hash_alphabet" => "Haha"
]);
$wmarkdown_c = new WMarkDown([
"hash_alphabet" => "¡Hola a todos!"
]);
$wmarkdown_d = new WMarkDown([
"hash_alphabet" => [
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1",
"2", "3", "4", "5", "6", "7", "8", "9", "+", "/"
]
]);
$hashes = [];
while(count($hashes) < 10)
$hashes[] = implode(", ", [
$wmarkdown->get_hash(),
$wmarkdown_b->get_hash(),
$wmarkdown_c->get_hash(),
$wmarkdown_d->get_hash()
]);
print_r($hashes);
/*
Un ejemplo de resultado podría ser:
Array
(
[0] => Z6VqHQSjVai, HhHHaaHHhHH, saHloHoloot, H9CkFZsRRWi
[1] => aXGoD1FKsDf, aaHahahHaah, aoasoodooll, Ju3AT2FMolq
[2] => oiUAFV1yxts, ahaaaaaaaHa, taHtadaHsHs, kGYZhPE8jRj
[3] => xBiyMXuTcZ4, aahaHHHaaaH, soHoasdtolt, LniSyRb2Gib
[4] => cv5wY5rVRAH, hHhhaahhHaa, ddstoaolHod, bNDoLasg8WZ
[5] => ZnHW61uyJJQ, aHHHhaaHaah, atHltdltoto, OhFmtywPlge
[6] => bi5TNw5vc4p, HaHaHaHhaaa, HtloaaHtaHt, ZieE4Jj6gx6
[7] => vNCPVpwm1YM, HHaaHaaaHHH, aodtsttHoda, NSrEx8mBZ8X
[8] => zYd5FJXkYK5, aaaaaaHahHa, dadoodootda, O4uZBdZB5U4
[9] => rz4k1ydc9YR, aaaahaahaHa, oodaldatsao, eIFFpkdpmM4
)
*/
```
Es importante mencionar que a menos caracteres distintos, mayor es la probabilidad de que se repitan
los Hashes Random y por tanto, mayor consumo relativo, además de correr el riesgo de entrar en un
bucle infinito por haber consumido todas las posibilidades aleatorias según le haga falta al
WMarkDown.
Su valor por defecto es la cadena Base58 de Bitcoin, la cual es
*123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz*
### hash_length
Este parámetro indica la longitud de cada Hash Random que se vaya a crear, siendo mínimo 1 y máximo
los que se deseen. Hay que tener en cuenta que a menos caracteres más probabilidad de repetición,
además de mayor facilidad para acabar con todas las posibilidades dadas, y es importante tener en
cuenta dicho valor, sobretodo cuando trabajemos un número pequeño de caracteres para la creación de
los Hash Random. Un ejemplo de éste puede ser el siguiente:
```php
$wmarkdown = new WMarkDown();
$wmarkdown_b = new WMarkDown([
"hash_length" => 3
]);
$wmarkdown_c = new WMarkDown([
"hash_length" => 20
]);
$wmarkdown_d = new WMarkDown([
"hash_length" => 7
]);
$hashes = [];
while(count($hashes) < 10)
$hashes[] = implode(", ", [
$wmarkdown->get_hash(),
$wmarkdown_b->get_hash(),
$wmarkdown_c->get_hash(),
$wmarkdown_d->get_hash()
]);
print_r($hashes);
/*
Un ejemplo de resultado puede ser el siguiente:
Array
(
[0] => aQEVtJ8Zmee, Ddd, w369wRfC7gcaik7c5SEP, u3thce2
[1] => DPMWqquJvYm, m2h, CDFMWW2VoHdsK776p4Hq, p5NqBFt
[2] => VSmhZo8eFbs, jwz, rfTw2p8U5tUZGPDK6vVC, f4oybwX
[3] => itKA4e4Zo5a, mqg, AMLDJQW8CdHp7XwXWNnj, G2cQtuY
[4] => dMHcTSD8VH2, Uo9, X8ZLvrKdVUHr1ZDJnyCA, JJgW288
[5] => hQBa83ER9yH, ZFN, EVwD2drQiy8akniWpuba, dYgaH5c
[6] => rqj9T3d3zXB, C9L, AuRPTjfp3usxLtAm3Q3N, Djy2RYm
[7] => siYZXPYEkHT, sCT, TiBjCAKGwNrP6vMqXdA6, MV62dUa
[8] => Ze3HBZFruaG, Lvk, YVMcpxFjZVcvrMz6JPwD, N2pwQFk
[9] => paoSrYYacZx, FB3, VVje5rZgQQTfxsuTFTa7, Zy4YVaT
)
*/
```
Su valor por defecto es *11*.
### special\_code\_blocks
Este parámetro determina en un Array los bloques de código especiales, es decir, aquellos que pueden
ser usados sobre un entorno cliente para resolver o crear cosas, como puede ser una extensión JS
como por ejemplo MermaidJS para la creación de diagramas. Estos bloques se ignorarán para su
tratamiento profundo como el Syntax Highlighting entre otros procesos que puedan llevar.
Su valor por defecto es *["mermaid"]*.
### default_title
Título por defecto para archivos que no contienen ninguna cabecera de referencia para ser nombrados.
El valor por defecto es *"Unknown"*, por el hecho de desconocer el contenido del mismo.
### title
El título de una página Web que se presenta en la pestaña o barra de título por lo general viene el
nombre del sitio o concepto a mirar, acompañado en muchas ocasiones del contenido que se quiere
mostrar. En este caso se especifica el nombre del sitio, que por defecto es WMarkDown pero debe ser
cambiado por el nombre del proyecto donde se integre éste.
## Fichero original
El archivo de configuración original se encuentra en el directorio JSON que se encuentra en el
directorio raíz del proyecto, y viene siendo un fichero llamado
*[[ignore WMarkDown.settings.json]]*. Aquí se encontrará toda la configuración por defecto de la
aplicación. Si falta alguno de los parámetros de configuración la aplicación puede dar errores.
Por defecto, dicho fichero es tal que así:
```json
{
"default_value" : null,
"nulls" : true,
"wmarkdown_root" : "/mnt/d/Projects/WMarkDown",
"root" : "/mnt/d/Projects/WMarkDown",
"documentation_path" : "/WMD",
"html_files" : "/JSON/html.files.json",
"public_path" : "/Public",
"html_base" : "/HTML/WMarkDown.base.html",
"default_modules" : {
"lists" : "\\WMarkDown\\Modules\\Lists",
"headers" : "\\WMarkDown\\Modules\\Headers",
"code_blocks" : "\\WMarkDown\\Modules\\CodeBlocks",
"paragraphs" : "\\WMarkDown\\Modules\\Paragraphs",
"font_formats" : "\\WMarkDown\\Modules\\FontFormats",
"checks" : "\\WMarkDown\\Modules\\Checks"
},
"hash_alphabet" : "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",
"hash_length" : 11,
"special_code_blocks" : ["mermaid"],
"default_title" : "Unknown",
"title" : "WMarkDown"
}
```
## Niveles de prioridad
# Configuración dada en el *input*
# Creando un archivo JSON.
# Archivo JSON original.
[[html_data {
"title" : "WMarkDown - Configuración",
"url" : "https://wmarkdown.k3y.pw/es/doc/settings.html",
"author" : "Tarsier, KyMAN",
"since" : 20210502,
"version" : 20210505,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,configuración,parámetros",
"description" : "Documentación y guía para gestionar la configuración de un WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]