[[post_data { "author" : "Tarsier y KyMAN", "since" : 20210623, "version" : 20210624 }]] # ¿Cómo montar un diccionario? Los diccionarios no son más que meros ficheros JSON con una estructura muy concreta, la cual es la siguiente: - **pattern** *(required)*: Patrón o patrones regulares por los cuales buscar la o las palabras concretas. - **result** *(required)*: Resultado o resultados formatados de los patrones. - **words** *(optional)*: Palabras con las que aparecer en el buscador de palabras del diccionario. - **description** *(required)*: Descripción de la palabra o palabras. - **links** *(optional)*: Links a las fuentes que se consideren para corroborar o ampliar información al respecto. El campo *pattern* puede ser un campo de tipo String para un único patrón, o de tipo Array para uno o más patrones regulares. Las Expresiones Regulares están encapsuladas entre Backslashes y pueden ir acompañadas de modificadores por el estándar de JavaScript. > **IMPORTANTE**: Las Expresiones Regulares están en un String, por lo que el uso del caracter Slash, tanto para su uso como para sus escapes, requiere de ser autoescapado, y hay que contar que éste también requiere de escape para las RE. Acerca del campo *result*, éste puede ser un String o un Array, siguiendo el tipado del campo *pattern*, y en el caso de ser un Array, ha de tener un resultado por cada patrón que tenga. Los resultados pueden trabajar las variables de las Expresiones Regulares del campo *pattern*, entendiendo las variables por el estándar de las Expresiones Regulares de JavaScript, aquellas encapsulaciones entre paréntesis que no vengan precedidas por un operador "?", siendo éstas un Array el cual, cada posición representacada una de las variables, y donde su posición 0 el recurso completo. Para poder identificar dentro del String de resultado una variable acorde a su Expresión Regular se usará el caracter "$" seguido del número al que se quiera hacer referencia, de esta forma podemos incluso hacer correcciones sintácticas o de escritura de un concepto concreto. > **IMPORTANTE**: El trabajo con las variables solo se puede hacer con las primeras 10 variables entendiendo que vas desde la variable 0 hasta la 9. El campo de *words* solo es necesario cuando el campo *result* trabaje alguna variable del campo *pattern* pues si no se especifica el campo *words*, por defecto saldrán como palabras en el buscador de conceptos del campo *result*, pero si se establece el campo *words* sólo saldrán las de este último campo. El campo *description* permite establecer un texto que describe y define el concepto. Se puede hacer uso de HTML, y para estructurar correctamente un JSON, éste puede ser un Array de Strings, un String vacío dictamina un cambio de párrafo. En sí, el texto se engloba automáticamente en párrafos siguiendo el concepto del String vacío en un Array. Finalmente, el campo *links* provee de enlaces con información y fuentes acerca del concepto que se esté trabajando. Puede que un concepto no tenga Links por el hecho de ser un concepto propio o no haberse encontrado una fuente acorde al mismo. ## Ejemplo Un ejemplo sencillo de cómo crear un diccionario podría ser el siguiente: ```json [{ "pattern" : "/\\btarsi(er)?s?\\b/gi", "result" : "Tarsier", "description" : "Algo de todo", "links" : "https://git.k3y.pw/Tarsier/" }, { "pattern" : "/\\b[kcq](y|ai)man\\b/gi", "result" : "KyMAN", "description" : "Desarrollador.", "links" : [ "https://kyman.k3y.pw/", "https://git.k3y.pw/KyMAN/", "https://git.a3do.net/KyMAN/", "https://www.youtube.com/channel/UCCAWOt-AxTyAiFWBgyb3X9Q", "https://github.com/0KyMAN0" ] }, { "pattern" : "/\\b(c)osa(s)? ?inventadas?\\b/gi", "result" : "$1osa$2 inventada$2", "words" : "Cosas inventadas", "description" : "Pues vamos, que tenemos mucha imaginación..." }, { "pattern" : ["/\\bw(halers)?[ \\-_\\.]?markdown\\b/gi", "/\\bw(\\. ?)?m(\\. ?)?d(\\. ?)?\\b/gi"], "result" : ["WMarkDown", "WMD"], "description" : [ "Conjunto de librerías que mezclan lenguajes de marcas de MediaWiki y MarkDown con ", "algunas correcciones y customizaciones.", "", "Simplifica mucho a la hora de documentar cosas." ], "links" : [ "https://wmarkdown.k3y.pw/", "https://git.k3y.pw/Whalers/WMarkDown" ] }] ``` En este ejemplo hemos descrito 4 conceptos: _Tarsier_, _KyMAN_, _algo incentado_ y _WMarkDown_. En el caso de _Tarsier_, que también es llamado _Tarsi_, y como puede ser un animal pues podría darse el caso de tener plural, se le corrige la letra capital de nombre propio, se completa el diminutivo _[[ignore Tarsi]]_ y se le elimina el plural por tratarse en este caso de un nombre propio y no de más de un [[ignore tarsier]]; Continuando con _KyMAN_, nos encontramos que aquí se entiende que el sonido _caiman_ o _quiman_ es referido a _KyMAN_ mientras que el sonido _caimán_ será el animal, y corrige todas las posibilidades ocurridas en el momento sobre el sonido _caiman_ o _quiman_ sobre el nombre _KyMAN_ (No admite plurales, excluyendo éstos), y el cual tiene más de un Link; el concepto de _cosa inventada_ corrige su letra capital y considera la opción de que pueda ser plural o singular a partir de la "S" de plural de "cosas", y especifica las palabras nativas para su muestreo en la tabla de búsqueda de conceptos del diccionario, y donde podemos ver que no tiene ningún Link por el hecho de ser algo inventado; y finalmente tenemos el concepto de _WMarkDown_ donde tenemos dos formas de llamarlo y por tanto de resultados, con una descripción más extensa, con dos párrafos definidos por un separador de un String vacío. > **NOTA**: En el caso de _WMarkDown_ se corrige también la posibilidad de incluir el origen de la "W", que viene siendo el proyecto _Whalers_. También quitiamos la posibilidad de siglas. > **IMPORTANTE**: Es importante saber que el fichero solo constará del texto que se le dé, no pudiendo poner textos alternativos como pudiera ser en un gestor de idiomas. Para dichos casos se requerirá la creación de tantos ficheros como idiomas. También permite la división del contenido como pudimos ver en el apartado de como llamar a los diccionarios. ## ¿Cómo iconificar un enlace? Si te haces esta pregunta es porque estarás en un entorno de WMarkDown donde los enlaces son unos círculos blancos vacíos donde algunos tienen un icono del sitio concreto como puede ser GitLab, Wikipedia u otros. Si este es el caso decir que se hace en el propio WMarkDown o añadiendo un CSS tal como se muestra a continuación:
SASS (SCSS) | CSS |
---|---|
```scss .wmarkdown{ [data-site=wikipedia_org],[data-site=es_wikipedia_org],[data-site=en_wikipedia_org]{background-image : url("https://wikipedia.org/static/apple-touch/wikipedia.png");} [data-site=git_a3do_net],[data-site=git_k3y_pw]{background-image : url("https://about.gitlab.com/ico/favicon-192x192.png");} [data-site=youtube_com],[data-site=www_youtube_com]{background-image : url("https://www.youtube.com/s/desktop/c20c1e6c/img/favicon_144.png");} [data-site=www_mediawiki_org]{background-image : url("https://www.mediawiki.org/static/apple-touch/mediawiki.png");} [data-site=github_com]{background-image : url("https://github.com/fluidicon.png");} } ``` | ```css .wmarkdown [data-site=wikipedia_org],.wmarkdown [data-site=es_wikipedia_org],.wmarkdown [data-site=en_wikipedia_org]{background-image : url("https://wikipedia.org/static/apple-touch/wikipedia.png");} .wmarkdown [data-site=git_a3do_net],.wmarkdown [data-site=git_k3y_pw]{background-image : url("https://about.gitlab.com/ico/favicon-192x192.png");} .wmarkdown [data-site=youtube_com],.wmarkdown [data-site=www_youtube_com]{background-image : url("https://www.youtube.com/s/desktop/c20c1e6c/img/favicon_144.png");} .wmarkdown [data-site=www_mediawiki_org]{background-image : url("https://www.mediawiki.org/static/apple-touch/mediawiki.png");} .wmarkdown [data-site=github_com]{background-image : url("https://github.com/fluidicon.png");} ``` |