feat: Updated for new file system and dependences from AnP.

This commit is contained in:
KyMAN 2024-10-11 13:47:10 +02:00
parent bb4504e7e5
commit 2fee5fa5d1
85 changed files with 6531 additions and 5299 deletions

9
.gitignore vendored
View File

@ -1,10 +1,13 @@
Data Data
TMP TMP
PHP/WMarkDown.Secrets.php
Public/data Public/data
Public/es Public/es
Public/index.html Public/index.html
Public/dev Public/dev
JSON/html.files.json JSON/html.files.json
WMarkDown.apache2.conf *.apache2.conf
.sass-cache
__pycache__
*[Ss]ecrets?*
/Python/Abstracts/AnPMap.py
/Python/Abstracts/Applications.py

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="200mm"
height="200mm"
viewBox="0 0 200 200"
version="1.1"
id="svg1"
inkscape:version="1.3.1 (9b9bdc1480, 2023-11-25, custom)"
sodipodi:docname="WMarkDown.logo.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.73584456"
inkscape:cx="396.82294"
inkscape:cy="379.15616"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="32"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#880044;stroke-width:6.07164;stroke-linecap:round;fill-opacity:1"
id="rect1"
width="41.960438"
height="183.00716"
x="44.875092"
y="10.167063"
transform="matrix(1,0,-0.18053701,0.98356819,0,0)" />
<path
id="rect1-5"
style="fill:#008844;stroke-width:5.96378;stroke-linecap:round;fill-opacity:1"
d="M 142.01134,9.9999064 115,59.999955 h 15.43485 L 153.84112,189.99977 H 195 L 171.59373,59.999955 h 15.43485 z" />
<path
id="rect2"
style="display:none;fill:#000000;stroke-width:5.07494;stroke-linecap:round"
d="M 75.315816,90.000191 56.960347,189.99977 H 86.740442 L 100.0001,117.38095 V 90.000191 Z m 29.683974,0 v 27.383339 l 13.25914,72.61624 h 30.58211 L 130.83646,90.000191 Z"
sodipodi:insensitive="true" />
<path
style="fill:#880044;stroke-width:8.10996;stroke-linecap:round;fill-opacity:1"
d="m 53.28657,121.54941 -20.597053,48.41236 -5.5e-5,39.98694 h 26.828853 l 16.159198,-61.55614 -6.2e-5,-26.84316 z"
transform="matrix(1,0,0.42545023,0.90498183,0,0)"
id="path4" />
<path
style="fill:#008844;stroke-width:8.10996;stroke-linecap:round;fill-opacity:1"
d="M 25.89651,121.54941 6.3246241,144.55073 -32.362382,209.94871 H -6.3345129 L 27.689336,169.96292 48.286875,121.54941 Z"
transform="matrix(1,0,0.42545023,0.90498183,0,0)"
id="rect3" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
ArtBook/WMarkDown.logo.xcf Normal file

Binary file not shown.

127
HTML/WMarkDown.base.html Normal file
View File

@ -0,0 +1,127 @@
<!DOCTYPE html>
<html lang="{language}">
<head>
<title data-i18n="{title_i18n}">{title_text}</title>
<meta http-equiv="content-type" content="text/html;charset={charset}" />
<meta charset="{charset}" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="xdoc:project" content="WMarkDown" />
<meta name="xdoc:link" content="https://wmarkdown.k3y.pw/" />
<meta name="xdoc:git" content="https://git.k3y.pw/Whalers/WMarkDown" />
<meta name="xdoc:author" content="Tarsier,KyMAN" />
<meta name="xdoc:since" content="20240626" />
<meta name="xdoc:version" content="20240626" />
<meta name="xdoc:access" content="public" />
<meta name="xdoc:donate:btc" content="" />
<meta name="xdoc:donate:ltc" content="" />
<meta name="xdoc:donate:doge" content="" />
<meta name="xdoc:donate:dash" content="" />
<style data-type="text/css;charset=utf-8" data-language="CSS1.2" data-rel="stylesheet" charset="utf-8">
html,body{
height : 100%;
margin : 0em;
}
</style>
<script data-type="text/javascript;charset=utf-8" data-language="ECMAScript 2015" src="https://anp.local/ecma/AnPScriptsLoader.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript;charset=utf-8" data-language="ECMAScript 2015" charset="utf-8">
const domain = /^https?\:\/{2}[^\/]+\.((anprm\.)?local|anprm)/i.test(window.location) ? "local" : "k3y.pw";
new AnPScriptsLoader({
styles : [
// "https://cdn." + domain + "/css/Cantarell.v17.remote.css",
// "https://cdn." + domain + "/css/Roboto.v30.remote.css",
// "https://cdn." + domain + "/css/RobotoMono.v23.remote.css",
// "https://cdn." + domain + "/css/FA6F.v6.5.2.remote.css",
"https://cdn." + domain + "/css/Roboto.v30.local.css",
"https://cdn." + domain + "/css/RobotoMono.v23.local.css",
"https://cdn." + domain + "/css/FA6F.v6.5.2.local.css",
"/scss/WMarkDown.web.scss",
"/css/WMarkDown.icons.FontAwesome.css",
"/css/WMarkDown.web.icons.css",
"/scss/WMarkDown.scss",
"https://cdn." + domain + "/data/styles/Highlight.v11.10.0.min.css"
],
scripts : [[
"https://errorsmanager." + domain + "/ecma/ErrorsManager.ecma.js",
"https://cdn." + domain + "/data/scripts/Highlight.v11.10.0.min.js",
"https://cdn." + domain + "/data/scripts/tex-mml-chtml.v3.2.2.js",
// "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js",
"https://cdn." + domain + "/data/scripts/mermaid.v10.9.1.min.js"
], [
"https://anp." + domain + "/ecma/Application/AnP.ecma.js",
"/ecma/WMarkDown.ecma.js"
], [
"https://anp." + domain + "/ecma/Managers/Settings.ecma.js",
"https://anp." + domain + "/ecma/Application/URI.ecma.js",
"https://anp." + domain + "/ecma/Managers/Globals.ecma.js",
"https://anp." + domain + "/ecma/Managers/I18N.ecma.js",
"https://anp." + domain + "/ecma/Managers/PrintTypes.ecma.js",
"https://anp." + domain + "/ecma/Managers/Threads.ecma.js",
"https://anp." + domain + "/ecma/Application/Attributes.ecma.js",
"https://anp." + domain + "/ecma/Application/HTMLPreload.ecma.js"
], [
"https://anp." + domain + "/ecma/Components/Base.ecma.js"
]]
}, () => {
wmarkdown = new WMarkDown({dictionary : "/json/WMarkDown.dict.es.kyman.json"});
anp = new AnP({
globals : {
anp_root : "https://anp." + domain,
wmarkdown_root : ""
},
callback : () => anp.base.set(".wmarkdown-web")
});
});
</script>
</head>
<body class="anp wmarkdown-web">
<header>
<h1 data-i18n="wmarkdown" data-i18n-without="true" title="{{wmarkdown}}">
<a href="{link}" target="_blank">
<span class="image">
<img src="{logo}" />
<span style="background-image:url('{logo}');"></span>
</span>
<span data-i18n="wmarkdown">{{wmarkdown}}</span>
</a>
</h1>
<nav class="main-menu">
<ul>
<li data-i18n="web" data-i18n-without="true" title="{{web}}">
<a href="/" target="_self">
<span data-icon="web"></span>
<span data-i18n="web">{{web}}</span>
</a>
</li>
<li data-i18n="git" data-i18n-without="true" title="{{git}}">
<a href="https://git.k3y.pw/KyMAN/WMarkDown" target="_self">
<span data-icon="git"></span>
<span data-i18n="git">{{git}}</span>
</a>
</li>
</ul>
</nav>
</header>
<main>{contents}</main>
<footer>
<span class="license">
<a class="license-image" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" data-i18n="license_cc_by_nc_sa_4" data-i18n-without="true" title="{{license_cc_by_nc_sa_4}}">
<span data-i18n="license_cc_by_nc_sa_4">{{license_cc_by_nc_sa_4}}</span>
<img src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" data-i18n="license_cc_by_nc_sa_4" data-i18n-without="true" alt="{{license_cc_by_nc_sa_4}}">
</a>
</span>
</footer>
</body>
</html>

View File

@ -0,0 +1,83 @@
<!DOCTYPE html>
<html lang="{language}">
<head>
<title data-i18n="{title_i18n}">{title_text}</title>
<meta http-equiv="content-type" content="text/html;charset={charset}" />
<meta charset="{charset}" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="xdoc:project" content="{project}" />
<meta name="xdoc:link" content="{web}" />
<meta name="xdoc:git" content="{git}" />
<meta name="xdoc:author" content="{authors}" />
<meta name="xdoc:since" content="{since}" />
<meta name="xdoc:version" content="{version}" />
<meta name="xdoc:access" content="public" /><!-- [[metas]] -->
<style data-type="text/css;charset=utf-8" data-language="CSS1.2" data-rel="stylesheet" charset="utf-8">
html,body{
height : 100%;
margin : 0em;
}
</style>
<script data-type="text/javascript;charset=utf-8" data-language="ECMAScript 2015" charset="utf-8">
"use strict";
/** @type {string} */
const domain = /^https?\:\/{2}[^\/]+\.(local|anprm)/i.test(window.location) ? "local" : "k3y.pw",
/** @type {HTMLScriptElement} */
script = document.querySelector("head").appendChild(document.createElement("script"));
[
["data-type", "text/javascript;charset=utf-8"],
["data-language", "ECMAScript 2015"],
["src", "https://anp." + domain + "/ecma/AnPScriptsLoader.ecma.js"],
["data-crossorigin", "anonymous"],
["charset", "utf-8"]
].forEach(([key, value]) => script.setAttribute(key, value));
script.onload = () => new AnPScriptsLoader({
domain : domain,
mode : "wmarkdown",
styles : [{styles}],
scripts : [{scripts}]
}, () => {
/** @type {WMarkDown} */
const wmarkdown = new WMarkDown({dictionary : [{dictionary}]});
/** @type {AnP} */
const anp = new AnP({
globals : {anp_root : "https://anp." + domain},
callback : () => {
anp.base.set(".{class}");
}
});
});
</script>
</head>
<body class="anp {class}">
<header>
<h1 data-i18n="{snake}" data-i18n-without="true" title="{{{snake}}}">
<a href="{link}" target="_blank">
<span class="image">
<img src="{logo}" />
<span style="background-image:url('{logo}');"></span>
</span>
<span data-i18n="{snake}">{{{snake}}}</span>
</a>
</h1>
<nav class="main-menu">
<ul><!-- [[menu]] -->></ul>
</nav>
</header>
<main>{contents}</main>
<footer>
<span class="license"><!-- [[licenses]] --></span>
</footer>
</body>
</html>

View File

@ -0,0 +1,6 @@
{
"espanol" : {
"wmarkdown" : "WMarkDown",
"wmd" : "WMarkDown"
}
}

View File

@ -0,0 +1,3 @@
[
"get:/ /WMarkDown/Public"
]

View File

@ -0,0 +1,49 @@
{
"wmarkdown_host_name" : "/^(https?\\:\\/{2})?wm(arkdown|d)\\.(k3y\\.pw|(anprm\\.)?local|anprm)/",
"wmarkdown_default_settings_files" : [
"/JSON/WMarkDown.py.settings.json"
],
"wmarkdown_default_secrets_files" : [
"/JSON/WMarkDown.py.settings.secrets.json"
],
"wmarkdown_default_i18n_files" : [
"/JSON/I18N/Python/WMarkDown.py.i18n.espanol.json"
],
"wmarkdown_default_routes_files" : [
"/JSON/WMarkDown.py.routes.json",
"/JSON/WMarkDown.py.routes.secrets.json"
],
"wmarkdown_resources" : {
"charset" : "utf-8",
"logo" : "/images/WMarkDown.png",
"link" : "https://wmarkdown.k3y.pw/",
"git" : "https://git.k3y.pw/Whalers/WMarkDown",
"project" : "WMarkDown",
"web" : "https://wmarkdown.k3y.pw",
"authors" : ["Tarsier", "KyMAN"],
"class" : "wmarkdown-web",
"snake" : "wmarkdown",
"metas" : {},
"styles" : ["/scss/WMarkDown.web.scss"],
"menu" : [
["web", "_self", "/"],
["git", "_blank", "https://git.k3y.pw/Whalers/WMarkDown"]
],
"licenses" : [
["copyright", null, null, {
"year" : "2019-2025",
"entity" : "Tarsier & KyMAN"
}],
["cc_by_nc_sa_4"]
],
"dictionary" : "https://wmarkdown.{domain}/json/WMarkDown.dict.es.kyman.json"
},
"__COMMENTS__" : {
"wmarkdown_default_views_files" : [],
"wmarkdown_charset" : "utf-8",
"wmarkdown_logo" : "/images/WMarkDown.png",
"wmarkdown_link" : "https://wmarkdown.k3y.pw/",
"wmarkdown_git" : "https://git.k3y.pw/Whalers/WMarkDown",
"wmarkdown_base_html" : "/HTML/WMarkDown.base.html"
}
}

View File

@ -1 +0,0 @@
Header set Access-Control-Allow-Origin "*"

View File

@ -0,0 +1,25 @@
.wmd-icon.checkbox>input+span::before{content : "\f0c8"; font-family : "FA6FR";}
.wmd-icon.checkbox>input:disabled+span::before{content : "\f0c8"; font-family : "FA6FS"; opacity : .5;}
.wmd-icon.checkbox>input:checked+span::before{content : "\f14a"; font-family : "FA6FR";}
.wmd-icon.radio-button>input+span::before{content : "\f111"; font-family : "FA6FR";}
.wmd-icon.radio-button>input:disabled+span::before{content : "\f111"; font-family : "FA6FS"; opacity : .5;}
.wmd-icon.radio-button>input:checked+span::before{content : "\f192"; font-family : "FA6FR";}
.wmd-icon.tick>input+span::before{content : "\f00d"; font-family : "FA6FS";}
.wmd-icon.tick>input:disabled+span::before{content : "\f560"; font-family : "FA6FS";}
.wmd-icon.tick>input:checked+span::before{content : "\f00c"; font-family : "FA6FS";}
.wmarkdown [data-icon=warning]::before,.wmarkdown [data-icon=warn]::before{content : "\f071"; font-family : "FA6FS";}
.wmarkdown [data-icon=ask]::before,.wmarkdown [data-icon=question]::before{content : "\f059"; font-family : "FA6FS";}
.wmarkdown [data-icon=answer]::before{content : "\f138"; font-family : "FA6FS";}
.wmarkdown [data-icon=comment]::before{content : "\f075"; font-family : "FA6FR";}
.wmarkdown [data-icon=note]::before{content : "\f249"; font-family : "FA6FR";}
.wmarkdown [data-icon=characters]::before{content : "\f031"; font-family : "FA6FS";}
.wmarkdown [data-icon=lines]::before{content : "\f039"; font-family : "FA6FS";}
.wmd-code-block [data-icon=type]::before{content : "\f15b"; font-family : "FA6FR";}
.wmd-code-block[data-type=html] [data-icon]::before{content : "\f1c9"; font-family : "FA6FR";}
.wmarkdown [data-icon=link]::before{content : "\f0c1"; font-family : "FA6FS";}
.wmarkdown [data-deployed=true]>[data-icon=deploy]::before,
.wmd-main-menu [data-deployed=true]>[data-icon=deploy]::before{content : "\f146"; font-family : "FA6FR";}
.wmarkdown [data-deployed=false]>[data-icon=deploy]::before,
.wmd-main-menu [data-deployed=false]>[data-icon=deploy]::before{content : "\f0fe"; font-family : "FA6FR";}
.wmd-main-menu-button [data-icon=menu]::before{content : "\f0c9"; font-family : "FA6FS";}
.wmarkdown [data-icon=view_switch]::before{content : "\f074"; font-family : "FA6FS";}

44
Public/css/WMarkDown.icons.css Executable file → Normal file
View File

@ -1,35 +1,9 @@
.wmarkdown [data-icon=show]::before{content : "\f06e"; font-family : "FA5FS";} .wmd-icon.checkbox>input+span::before{content : "\2610";}
.wmarkdown [data-icon=hide]::before{content : "\f070"; font-family : "FA5FS";} .wmd-icon.checkbox>input:disabled+span::before{content : "\25A3"; opacity : .5;}
.wmarkdown [type=checkbox]+[data-icon=checkbox]::before{content : "\f0c8";} .wmd-icon.checkbox>input:checked+span::before{content : "\2612";}
.wmarkdown [type=checkbox]:checked+[data-icon=checkbox]::before{content : "\f14a";} .wmd-icon.radio-button>input+span::before{content : "\25CB";}
.wmarkdown [type=checkbox]:disabled+[data-icon=checkbox]::before{content : "\f0c8"; font-family : "FA5FS"; opacity : .5;} .wmd-icon.radio-button>input:disabled+span::before{content : "\25CE"; opacity : .5;}
.wmarkdown [type=radio]+[data-icon=radio]::before{content : "\f111";} .wmd-icon.radio-button>input:checked+span::before{content : "\25C9";}
.wmarkdown [type=radio]:checked+[data-icon=radio]::before{content : "\f192";} .wmd-icon.tick>input+span::before{content : "\2714";}
.wmarkdown [type=radio]:disabled+[data-icon=radio]::before{content : "\f111"; font-family : "FA5FS"; opacity : .5;} .wmd-icon.tick>input:disabled+span::before{content : "\25CB";}
.wmarkdown [type=checkbox]+[data-icon=tick]::before{content : "\f00d"; font-family : "FA5FS";} .wmd-icon.tick>input:checked+span::before{content : "\2718";}
.wmarkdown [type=checkbox]:checked+[data-icon=tick]::before{content : "\f00c"; font-family : "FA5FS";}
.wmarkdown [data-icon=language]::before{content : "\f1c9";}
.wmarkdown [data-icon=characters]::before{content : "\f031"; font-family : "FA5FS";}
.wmarkdown [data-icon=lines]::before{content : "\f036"; font-family : "FA5FS";}
.wmarkdown [data-icon=link]::before{content : "\f0c1"; font-family : "FA5FS";}
.wmarkdown [data-deployed=false]>[data-icon=deploy]::before{content : "\f054"; font-family : "FA5FS";}
.wmarkdown [data-deployed=true]>[data-icon=deploy]::before{content : "\f078"; font-family : "FA5FS";}
.wmarkdown [data-levels='0']>[data-icon=deploy]::before{content : " ";}
.wmarkdown [data-icon=likes]::before{content : "\f164"; font-family : "FA5FS";}
.wmarkdown [data-icon=dislikes]::before{content : "\f165"; font-family : "FA5FS";}
.wmarkdown [data-icon=views]::before{content : "\f06e";}
.wmarkdown [data-icon=comments]::before{content : "\f086";}
.wmarkdown [data-icon=note]::before{content : "\f27a";}
.wmarkdown [data-icon=alert]::before{content : "\f0f3";}
.wmarkdown [data-icon=important]::before{content : "\f0a1"; font-family : "FA5FS";}
.wmarkdown [data-icon=warning]::before,.wmarkdown [data-icon=warn]::before{content : "\f12a"; font-family : "FA5FS";}
.wmarkdown [data-icon=danger]::before{content : "\f071"; font-family : "FA5FS";}
.wmarkdown [data-icon=ask]::before{content : "\f128"; font-family : "FA5FS";}
.wmarkdown [data-icon=home]::before{content : "\f015"; font-family : "FA5FS";}
.wmarkdown [data-icon=developt]::before{content : "\f121"; font-family : "FA5FS";}
.wmarkdown [data-icon=git]::before{content : "\f841"; font-family : "FA5FB";}
.wmarkdown [data-icon=game]::before{content : "\f11b";font-family : "FA5FS";}
.wmarkdown [data-icon=documentation]::before{content : "\f02d";font-family : "FA5FS";}
.wmarkdown [data-icon=menu]::before{content : "\f0c9";font-family : "FA5FS";}
.wmarkdown [data-icon=content]::before{content : "\f570";font-family : "FA5FS";}
.wmarkdown [data-icon=files]::before{content : "\f0c5";font-family : "FA5FS";}

View File

@ -0,0 +1,5 @@
.main-menu [data-icon=web]::before{content : "\f0ac"; font-family : "FA6FS";}
.main-menu [data-icon=git]::before{content : "\f841"; font-family : "FA6FB";}
.main-menu [data-icon=home]::before{content : "\f015"; font-family : "FA6FS";}
.main-menu [data-icon=game]::before{content : "\f11b"; font-family : "FA6FS";}
.main-menu [data-icon=blog]::before{content : "\f27a"; font-family : "FA6FR";}

48
Public/doc/es/bugs.w.md Normal file
View File

@ -0,0 +1,48 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_bugs
title_text = Bugs y errores - WMarkDown
```
<!-- [[wmd]] -->
## Bugs y errores
Esta sección va orientada a exponer los posibles errores que se puedan encontrar dentro del proyecto y el estado al cual se atañen.
### Párrafos incompletos
Se aprecia que los párrafos creados con saltos de línea los fracciona en Python.
* [X] Localizar el error.
* [X] Arreglo del error.
> [!@Srx00] El problema estaba en que cuando se llamaba de forma recursiva al método "analyse" éste no llevaba si era un subelemento o no pues omití sin querer en el desarrollo ese factor y sólo enviaba en su lugar el lenguaje con el que tenía que trabajar. Afectaba a todo el lenguaje. Esto vislumbró otro fallo con el orden de los patrones que también fue corregido.
### Modulo Cursivas en bucle
Cuando hay un único asterisco suelto, el patrón de este módulo entra en bucle infinito con un consumo de procesador elevado.
* [X] Localizar el error.
* [X] Arreglo del error.
> [!@Srx00] Con la ayuda de ChatGPT se llegó a una conclusión pues dicho error sólo sucede con el caso de los asteriscos simples en Python, mientras que en JavaScript y otros no pasa. El problema radica en el motor de interpretación del patrón regular, siendo diferente, siguiendo el ejemplo, la librería "re" de Python y el motor de interpretación V8. El cambio fue con respecto a como formular el patrón regular. No encontré más información que ésta.
> [!@Srx00] Aún así, no funciona en todos los casos, dando errores cuando existen 2 asterisco y luego otro sin que éste contenga final. Insisto que sólo pasa con los asteriscos pues con el uso del resto de marcas no sucede pese a ser la misma casuística.
### Negrillas y Cursivas
Cuando se juntan ambos elementos en un único elemento, éste reacciona de forma inoportuna, por ejemplo, en el siguiente caso:
```md
Esto es un ejemplo del error, donde el ***elemento1*** y el ***elemento2*** tendrían que estar en negrilla y cursiva simultáneamente.
```
* [X] Localizar el error.
* [X] Arreglo del error.
> [!Srx00] El problema radica, en el ejemplo aquí expuesto, en que la cursiva sólo afectaría por posición de los atributos de WMarkDown por defecto, al fragmento de texto " y el ", dejando el resto en negrilla y con dos asteriscos sin procesar. Para arreglar dicho error hay que crear un subelemento que monte negrilla y cursiva de golpe, aunque lo ideal es que lo procese directamente tal como está. Es un poco chapuzas el arreglo pero inicialmente, y en base a la filosofía de funcionamiento, esta es la solución más plausible.
<!-- [[wmd]] -->

View File

@ -0,0 +1,11 @@
El WMarkDown es un pequeño lenguaje de marcas orientado a formatear un texto en un esquema más complejo con formato. Está basado principalmente en MarkDown y el lenguaje de marcas de MediaWiki, motivo por el cual existe éste. Tiene numerosos elementos personalizados por lo que tampoco podemos encajarlo dentro de estos dos entornos.
Actualmente cuenta con soporte para Python y formatea el texto contra HTML y SASS/CSS.
Esta versión del proyecto es la segunda que hay, siendo la primera desarrollada por 2020 entre Srx01 y Srx00, con influencia de Srx02. Hubo testeos por parte de Srx03 y Srx04.
> Esta Web ya puede servir como ejemplo de resultado HTML sobre el fichero "index.w.md" pues está integrado como fichero Index de la Web y está procesado en caliente con la petición. El servidor de trabajo sobre que el se soporta la Web es un servidor AnP, desarrollado en Python por el propio desarrollador de este proyecto, Srx00.
Es importante mencionar que tanto el lenguaje como el diseño tuvo una evolución, siendo el logo original creado por Srx01, así como el segundo logo que se tuvo. Este tercer logo está basado en el segundo logo de Srx01 pero fue creado por Srx00. También se cambiaron los colores originales establecidos por Srx01 por los actuales establecidos por Srx00. También es importante destacar que cambia la filosofía de trabajo e interpretación de las marcas, basado en un proyecto privado creado para una entidad por parte de Srx00, cogiendo dicha parte que no era privada y fue plenamente desarrollada por él mismo.
> Para ir a la página de pruebas sería [aquí](/doc/tests.w.md Página de pruebas).

51
Public/doc/es/design.w.md Normal file
View File

@ -0,0 +1,51 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_design
title_text = Estilo y diseño - WMarkDown
```
<!-- [[wmd]] -->
## Estilo y diseño
El estilo y el diseño del proyecto WMarkDown está basado a su vez tanto en el proyecto original así como se construyeron visualmente otros proyectos como AnP. A nivel de colores, éste tiene los siguientes:
[|
|= Tipo | Hexadecimal | RGBA | Muestra
| Fondo | #EFEFEF | rgba\(239, 239, 239, 1) | [[#EFEFEF]]
| Frontal | #222 | rgba\(34, 34, 34, 1) | [[#222]]
| Primario | #008844 | rgba\(0, 136, 68, 1) | [[#008844]]
| Secundario | #880044 | rgba\(136, 0, 68, 1) | [[#880044]]
| Gris | #888 | rgba\(136, 136, 136, 1) | [[#888]]
| Tabla título | #19888888 | rgba\(136, 136, 136, 0.1) | [[color rgba(136, 136, 136, 0.1)]]
| Tabla Select | #19888888 | rgba\(136, 136, 136, 0.1) | [[color rgba(136, 136, 136, 0.1)]]
| Tabla impar | #38888888 | rgba\(136, 136, 136, 0.2) | [[color rgba(136, 136, 136, 0.2)]]
| Tabla par | #00FFFFFF | rgba\(255, 255, 255, 0) | [[color rgba(255, 255, 255, 0)]]
| Borde interno | #19888888 | rgba\(136, 136, 136, 0.5) | [[color rgba(136, 136, 136, 0.5)]]
| Diccionario | #115533 | rgba\(17, 85, 51, 1) | [[#115533]]
| Diccionario en | #551133 | rgba\(85, 17, 51, 1) | [[#551133]]
| Code impar | #38C8C8C8 | rgba\(200, 200, 200, 0.2) | [[color rgba(200, 200, 200, 0.2)]]
|]
> [!!] Es importante entender que el diseño se basa en el resultado de la Web como diseño general pues el uso del WMarkDown se condicionará a como lo diseñe el usuario que lo implemente en su proyecto. Inicialmente está diseñado para ser independiente con un diseño monocromático en escala de grises, pero éste puede ser alterado según características del usuario. En el caso de la Web del propio proyecto se basa en el estilo de AnP pero con los códigos de color que le fueron asignados en la tabla anterior.
Se utilizaron 3 fuentes distintas para visualizar el proyecto, las cuales son:
* **Roboto**. Para el texto en general.
* https://fonts.google.com/specimen/Roboto?query=roboto
* **Roboto Mono**. Para los bloques de código.
* https://fonts.google.com/specimen/Roboto+Mono?query=roboto
* **Font Awesome**. Para la iconificación general de la Web.
* https://fontawesome.com/
El tamaño general del proyecto se basa en un sistema porcentual que imita parcialmente el sistema de DPI existente en los dispositivos móviles o aplicaciones orientadas a la densidad de puntos por pulgada de la pantalla donde se ejecutan. En este caso, la filosofía se basa en unificar la visualización general en todos los dispositivos independientemente del tamaño y resolución de la pantalla, y que permita, de alguna forma, ampliar o disminuir los objetos según permisos por parte de los desarrolladores y, si así lo permiten los desarrolladores, por necesidades del propio usuario. El sistema se basa en buscar, dentro del rectángulo que contiene la aplicación (Pantalla), el lado más estrecho y trabajar sobre éste, dividiéndolo en celdas, en este caso, 40 celdas, así pues, se cambie el tamaño de la pantalla, o navegador en este caso, la aplicación seguirá viéndose exactamente igual.
La cabecera consta de 4 celdas de alto; mientras que el pie de página consta de 2. Ambos elementos están entablados mediante un Flex que permite posicionar los elementos internamente de una forma ágil, flexible y visual, permitiendo añadir nuevos elementos y condicionándolos a éstos.
El logo, partiendo de los colores primario y secundario, consta de 3 rectángulos alterados a formas específicas y separadas con angulos de entre 10 para los externos, y 20 para los internos. La intención es generar una W que parta de la idea de Srx01 de hacer, mediante una M, como respresentación de MarkDown, y la flecha integrada dentro del final de la misma, haciendo una simulación de vela gráfica. De esta forma nos desmarcamos de MarkDown. El resultado de éste es los siguiente.
((!image /images/WMarkDown.svg))
> [!!] En PNG tiene un borde de color blanco para destacar sobre ciertos fondos que puedan coincidir en colores con los del propio logo SVG.
<!-- [[wmd]] -->

View File

@ -0,0 +1,55 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_donates
title_text = Donaciones - WMarkDown
```
<!-- [[wmd]] -->
## Donaciones
Este proyecto es plenamente gratuito pues es un proyecto orientado a complementar otros proyectos de los mismos desarrolladores. No tiene ningún plan de ingresos ni pasivos ni activos más allá de lo que se expone en este título. Si alguien quisiere colaborar en que este proyecto no sólo esté abierto por requisitos de los autores, sino también cara un mantenimiento hacia terceros, a continuación presentamos unas direcciones de Cryptoactivos donde se podrá donar sin ninguna cuantía mínima establecida.
- **Bitcoin** o *BTC*: [bitcoin:bc1qu82ravz56qt9j44wza6p9tcqn5gyyhqyufpnu2?label=WMarkDownDonation bc1qu82ravz56qt9j44wza6p9tcqn5gyyhqyufpnu2]
- **Litecoin** o *LTC*: [litecoin:ltc1qqj93dxr7kyas3resnws4mr5hudlvqm4c7xf3x6?label=WMarkDownDonation ltc1qqj93dxr7kyas3resnws4mr5hudlvqm4c7xf3x6]
- **Dogecoin** o *DOGE*: [dogecoin:DEXrwydRVE5HrAnwogoUe9UxVQbRWSRetQ?label=WMarkDownDonation DEXrwydRVE5HrAnwogoUe9UxVQbRWSRetQ]
- **Dash**: [dash:XpzAZSHGXDwzYFSNhgxLiayY7WJTgAsnus?label=WMarkDownDonation XpzAZSHGXDwzYFSNhgxLiayY7WJTgAsnus]
- **Faircoin** o *FAIR*: [faircoin:fLJfTuSt3MYwbgt7E4KtUprbkmadiaN5xq?label=WMarkDownDonation fLJfTuSt3MYwbgt7E4KtUprbkmadiaN5xq]
> [!!] Mientras no halla ninguna condición de recursos que impida el mantenimiento gratuito de este servicio, éste permanecerá mantenido y público independientemente de los ingresos obtenidos a partir de los donativos.
> [!#] Los usuarios que colaboren y quieran ser referenciados, éstos serán referenciados en este apartado mediante un Quote de comentario de usuario con el Nick y avatar correspondiente, pero sólo en caso de que ellos quieran aparecer aquí.
> [!#] Se mantendrá informados a los usuarios de todo aquel donativo dado y la cantidad económica adquirida, y será publicado su uso y tenencia para que halla constancia pública del uso que se le dé a dichos recursos.
> [!@Srx00] Quería agredecer de forma persona aquellas aportaciones que serán bien recibidas y valoradas para este proyecto, ya sea como valor simbólico como de mantenimiento. Así, que desde el desarrollo y como desarrollador de este proyecto, muchas gracias a todos aquellos que ponen su granito de arena para este proyecto y por lo tanto, en pro de todos. Muchas gracias, de verdad.
### Balance
A continuación se mostrará una tabla de balance con respecto a las cantidades y usos dados.
[|
|= Activo | Cantidad | Motivo | Usuario | Cantidad total actual
| **BTC** | 0 BTC | Inicio del contador de unidades de BTC. | | 0 BTC
| **LTC** | 0 LTC | Inicio del contador de unidades de LTC. | | 0 LTC
| **DOGE** | 0 DOGE | Inicio del contador de unidades de DOGE. | | 0 DOGE
| **DASH** | 0 DASH | Inicio del contador de unidades de DASH. | | 0 DASH
| **FAIR** | 0 FAIR | Inicio del contador de unidades de FAIR. | | 0 FAIR
|]
Cómputo total actual en tenencia.
[|
|= Activo | Cantidad | Número de Operaciones
| **BTC** | 0 BTC | 0
| **LTC** | 0 LTC | 0
| **DOGE** | 0 DOGE | 0
| **DASH** | 0 DASH | 0
| **FAIR** | 0 FAIR | 0
|]
### Donantes
A continuación, los comentarios de los donantes.
<!-- [[wmd]] -->

25
Public/doc/es/faq.w.md Normal file
View File

@ -0,0 +1,25 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_faq
title_text = F.A.Q. - WMarkDown
```
<!-- [[wmd]] -->
## F.A.Q.
En este apartado se irán haciendo preguntas y respuestas acorde a motivos sobre las decisiones que se tomaron para llevar a cabo dicho proyecto.
> [!?] **¿Por qué utilizas el Syntax Highlighter para MarkDown para representar en código el propio lenguaje de marcas del WMarkDown?** Pues al no existir oficialmente el propio lenguaje WMarkDown, éste no tiene asignado un lenguaje oficial y menos, un desarrollo ajeno a este proyecto que pueda ayudar y complementar dicho proyecto de momento. Al ser el lenguaje más parecido, éste es el que se quedará inicialmente.
> [!?] **¿Por qué usas guiones bajos para marcar fragmentos de texto subrayados pues es una de las marcas de MarkDown para representar la negrilla y la cursiva?** Los guiones bajos son una alternativa en MarkDown para representar ambos formatos, pero el principal es el uso de los asteriscos. Al no existir una manera eficiente de representar textos tachados o subrayados se decidió cambiar estas marcas para los fragmentos de texto subrayados.
> [!?] **¿Cómo distingue WMarkDown de un título una lista ordenada numerada mediante la marca almuadilla o "#"?** Pues básicamente los títulos requieren de al menos dos saltos de línea por debajo de ellos, mientras que en una lista, en cuanto halla más de un elemento tras de él se sabe que es una lista ordenada numerada.
> [!?] **¿Puede dar problemas el WMarkDown?** Como toda tecnología digital compleja, ésta puede responder de forma inesperada no contemplada por los desarrolladores de la misma, además, actualmente sólo hay un único desarrollador, por lo que posiblemente dé resultados inesperados pues sólo se contempla el propósito de acción de dicho desarrollador. A medida que se haga uso de éste se irán reportando problemas y se irán haciendo las correcciones pertinentes según el tiempo que se le pueda dedicar pues este proyecto es un proyecto Free Open Source que mientras no genere un dinero que permita mantenimiento sobre otros proyectos, éste irá limitado a dicho contexto, en conjunto con el número de desarrolladores que puedan ser partícipes.
> [!?] **¿Por qué se decidió poner la licencia general de Creative Commons para Atribución, No Comercial y que se permite el Compartir o *CC-BY-NC-SA*?** Pues por el hecho de que se quiere dejar el proyecto para uso libre en Internet para cualquiera que quiera implementarlo dentro de su proyecto, sin embargo, licencias como el MIT o GPL no obliga a reconocer la autoría, cosa que creo que es de vital importancia para ayudar a los autores originales tanto a su visibilización como mostrar su trabajo y de una forma indirecta, favorecer su currículum profesional, de ahí que tenga el **BY de Atribución o By en inlgés**; tampoco nos interesa que dicho proyecto se venda a terceros cuando éste es totalmente gratuito, sin embargo, no nos importa que este proyecto sea usado en un proyecto comercial siempre que la fuente de ingresos no sea el servicio que se ofrece con este proyecto, de ahí que sea **NC de No Comercial**; y finalmente, como dijimos hasta ahora, que éste pueda ser compartido, manipulado y trabajado libremente con las dos condiciones anteriores, de ahí que sea **SA de Compartir o Shared Alike**. Un ejemplo de uso comercial puede ser la creación de un Blog o Foro donde la gente escriba a partir de WMarkDown, donde el producto no es el propio WMarkDown, sino el servicio del Blog o foro.
> [!?] **¿Por qué se seleccionó el nombre WMarkDown pese a que el logo sea una W con la flecha alzada pudiendo encajar mejor __WMarkUp__?** El problema es que la base principal del lenguaje se basa plenamente en MarkDown, donde la lógica me dice que Down viene a simplificar la forma de escribir en un formato de estilos mediante marcas de texto. Poner Up sería ir a la contra, y creemos desde WMarkDown, que no es éste el propósito.
<!-- [[wmd]] -->

View File

@ -0,0 +1,33 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_integration
title_text = Integración - WMarkDown
```
<!-- [[wmd]] -->
## Integración
El WMarkDown puede ser integrado directamente en un proyecto si éste tiene el lenguaje de ejecución del mismo. Actualmente contamos con los siguientes lenguajes, los cuales irán acompañados de su sistema de adjunción.
### HTML
Para poder integrar WMarkDown sobre HTML se requiere de agregar las siguientes etiquetas en la cabecera para que éstas recreen las condiciones de funcionamiento del mismo.
```html
<link type="text/css;charset=utf-8" data-language="SASS/CSS3" href="https://wmarkdown.k3y.pw/scss/WMarkDown.css" data-scss="https://wmarkdown.k3y.pw/scss/WMarkDown.scss" data-css-map="https://wmarkdown.k3y.pw/scss/WMarkDown.css.map" data-crossorigin="anonymous" charset="utf-8" />
```
> [!! Importante] Es importante tener en cuenta que el código HTML no sigue el estándar puro de HTML5 por motivos de filosofía del desarrollador. Ésto se puede percibir con el autocierre de la etiqueta LINK, así como los atributos "data-" expuestos.
También es importante mencionar que si se usa un servidor que permita la interpretación directa de archivos
### Python
Para poder integrar el lado de Python es necesario la tenencia local del archivo que se referencia contra el Git:
- https://git.k3y.pw/Whalers/WMarkDown/src/branch/main/Python/WMarkDown.py
Con dicho fichero nosotros seríamos libres de integrarlo como librería cara el usuario de ejecución o dentro de nuestro proyecto en cuestión.
<!-- [[wmd]] -->

47
Public/doc/es/manual.w.md Normal file
View File

@ -0,0 +1,47 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_manual
title_text = Manual - WMarkDown
```
<!-- [[wmd]] -->
## Manual
Cara el modo de uso de esta tecnología contamos que parte de la idea de ser implementado en entornos Web, por lo que es totalmente compatible con HTML, es decir, que a parte de las propias funcionalidades del HTML que se le puedan dar de forma nativa, éste contará con otros elementos específicos del mismo basado en tecnologías como MarkDown o el lenguaje de marcas utilizado para el proyecto MediaWiki.
> [!!] El resultado del proceso del WMarkDown, inicialmente será completamente HTML por lo que puede ser alterado mediante JavaScript, ECMAScript, SASS y CSS para personalizarlo al usuario.
A continuación iremos detallando las diferentes marcas para dar lugar a cada uno de los elementos.
[[include manual/paragraphs.w.md]]
[[include manual/text_formats.w.md]]
[[include manual/checks.w.md]]
[[include manual/titles.w.md]]
[[include manual/links.w.md]]
[[include manual/color_sample.w.md]]
[[include manual/tables.w.md]]
[[include manual/lists.w.md]]
[[include manual/quotes.w.md]]
[[include manual/code_block.w.md]]
[[include manual/presentation_links.w.md]]
[[include manual/exclude.w.md]]
[[include manual/includes.w.md]]
[[include manual/dictionaries.w.md]]
[[include manual/code_doc.w.md]]
<!-- [[wmd]] -->

View File

@ -0,0 +1,38 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_checks
title_text = Ticks, Checks y Radios - WMarkDown
```
<!-- [[wmd]] -->
### Ticks, Checks y Radios
Los Ticks, Checkboxes y los Radio Buttons son elementos bastante básicos con los que trabajar en un apartado documental pues pueden ser indicativos de selección o marcas que determinan elementos seleccionados. A continuación se deja una tabla con las marcas y valor que representan.
[[!<style data-type="text/css;charset=utf-8" data-language="CSS1.2" data-rel="stylesheet" charset="utf-8">
.wmd-checks-viewer td:first-child,
.wmd-checks-viewer td:nth-child(2){
font-family : "Roboto Mono", monospace;
}
</style>]]
[| class="wmd-checks-viewer"
|=| Marca |
|= Upper | Lower | Valor
| \[ ] | \[ ] | [ ]
| \[X] | \[x] | [x]
| \[-] | \[-] | [-]
| \( ) | \( ) | ( )
| \(X) | \(x) | (x)
| \(-) | \(-) | (-)
| \{V} | \{v} | {v}
| \{W} | \{w} | {w}
| \{X} | \{x} | {x}
|]
> [!#] Estas marcas no están condicionadas entre sí como puede ser cuando se trabajan en formularios los Radio Buttons, lo que significa que son de libre uso.
> [!!] Estas marcas ignoran si son en mayúsculas o minúsculas, es decir, que funcionarán independientemente de cómo se escriban.
<!-- [[wmd]] -->

View File

@ -0,0 +1,131 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_checks
title_text = Bloques de código - WMarkDown
```
<!-- [[wmd]] -->
### Bloques de código
Los bloques de código están diseñados para poder mostrar códigos, Scripts, etc. De forma que el texto esté monoespaciado, con conteo de líneas y caracteres, así como visualización del número de línea donde te encuentras y con la posibilidad de ir visiblemente ayudado de un Syntax Highlighter. Básicamente viene siendo un bloque que se generará a nivel visual, a modo de caja donde se incluirá el código dado y formateado de la forma anteriormente descrita.
> [!#] Los bloques de código siguen la filosofía de MarkDown por simplicidad a la hora de se implementados. Los bloques de código de MediaWiki son ignorados aquí por el hecho de que acaban siendo bloques HTML, cosa que ya se pueden integrar manualmente.
'''wmd-examples
A continuación se expone un bloque de HTML.
```html
<h3>Ejemplo</h3>
<p>Esto es un ejemplo de <b>HTML</b>.</p>
```
'''
Estos bloques también pueden ser usados para módulos que requieran de un bloque con las órdenes, parámetros o descripciones necesarias. Dichos módulos son los siguientes:
- **math**, **maths** o **[[!mathjax]]**: El módulo "maths" o de matemáticas nos permite visualizar funciones y operaciones matemáticas a partir de código MathJax a partir de la librería "mathjax.js".
- **mermaid** o **[[!mermaidjs]]**: Este módulo se utiliza para representar gráficos, flujos, esquemas, etc. A partir de la librería "mermaid.js".
- **[[!wmd-examples]]**: Este módulo es específico para WMarkDown y nos permite hacer ejemplos dinámicos contra el cliente de textos formateados en WMarkDown.
- **[[!wmd-options]]**: Este módulo nos permite especificar las opciones cara un documento WMarkDown, por lo general el título y el código de idioma utilizado.
- **[[!wmd]]** o **[[!wmarkdown]]**: Vienen siendo bloques especiales que se ponen fuera de lo que son textos WMarkDown que identifican en un texto plano, bloques que han de ser procesados como WMarkDown.
> [!!] Estos bloques se procesarán en el cliente pues no afecta inicialmente al SEO para su salida directa en HTML, por lo tanto, éstos aparecerán reflejados en HTML como bloques de código convencionales.
'''wmd-examples
A continuación tenemos un Script JS.
```js
console.log("Esto es un ejemplo de impresión por consola en JavaScript.");
```
Ahora mostramos un ejemplo de un flujo.
```mermaid
flowchart TD
A["Elemento A"]
B["Elemento B"]
C["Elemento C"]
A --> B
B --> C
```
Finalmente, mostramos un ejemplo de función matemática.
```maths
# Ejemplo hallando el siguiente punto.
(x_3, y_3) = (x_1, y_1) - (x_2, y_2)
```
'''
También puede ser usado simplemente para representar texto plano.
'''wmd-examples
```txt
Esto es un texto plano.
```
```
Esto es otro texto plano sin nombre de formato.
```
```lenguaje-desconocido
Al ser un lenguaje desconocido, éste saldrá también como texto plano.
```
'''
Para poder representar los bloques de código tenemos varias marcas las cuales son las siguientes:
[[!<style data-type="text/css;charset=utf-8" data-language="CSS1.2" data-rel="stylesheet" charset="utf-8">
.wmd-blocks-marks-viewer td{font-family : "Roboto Mono", monospace;}
</style>]]
[| class="wmd-blocks-marks-viewer"
|=| Marca
|= Compactado | Espaciado
| &grave;&grave;&grave; | &grave; &grave; &grave;
| &apos;&apos;&apos; | &apos; &apos; &apos;
| &quot;&quot;&quot; | &quot; &quot; &quot;
|]
> [!?] **¿Por qué existen varias formas de llamar a los bloques de código?** Básicamente por versatilidad pues habrá lenguajes o fragmentos de código que se quieran representar y éstos contengan conjuntos de caracteres que puedan hacer conflicto con el propio bloque de código, por tanto, hay estas opciones para que el usuario pueda elegir entre ellas. Este es el motivo por el cual se pudo ejemplificar los bloques de código en el propio WMarkDown.
Por otro lado, y terminando con los bloques de código, también hay un tipo de bloques de código especiales que son los *[[!wmd]]* o *[[!wmarkdown]]*, que nos sirven para identificar bloques de código WMarkDown para ser procesados dentro de un bloque de texto plano, como se explicó anteriormente. Normalmente se suelen poner en documentos directos como HTML para que éstos sean procesados parcialmente y ahorrar proceso y recursos, así como posibles errores y complicaciones.
'''html
<h1>Ejemplo de incrustación</h1>
<p>Esto es un bloque de código HTML normal.</p>
" " "wmd
## Ejemplo
Aquí empieza un bloque de código WMarkDown el cual será procesado en HTML, pero se ignorará lo que esté fuera de este bloque.
```txt
Ejemplo de bloque dentro de otro bloque, pero éste será procesado como bloque de código WMarkDown.
```
" " "
<p>Esto ya está fuera del dominio anterior.</p>
'''
Los bloques de código incrustados, como el que vemos en este ejemplo también pueden ir encapsulados entre dos comentarios XML.
<span style="font-family:'Roboto Mono',monospace;">&lt;!-- \[\[[[!WMD]]]] --&gt;</span>
Esto nos permite no salir del formato HTML ni XML en el IDE.
<!-- [[wmd]] -->

View File

@ -0,0 +1,62 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_code_doc
title_text = Documentación de Código - WMarkDown
```
<!-- [[wmd]] -->
### Documentación de Código
El módulo de Documentación de Código o Code Doc es un módulo que sirve para identificar elementos concretos dentro del código fuente del proyecto de forma genérica. Está basado en documentar funciones y métodos principalmente aunque permite más funciones que éstas. Las funciones y los métodos, en base a la filosofía de este módulo, están diseñadas en base a un entorno fuertemente tipado con estructuras de sobrecargas y argumentos opciones. Su estructura se basa en marcas que identifican las diferentes partes.
```wmd-examples
[[@ [String] WMarkDown.process(!String data, Integer lanuage = 1, ?String path = null)]]
[[@ [String] WMarkdown.analyse(!String data, Integer language = 1, Integer mode = 0, ?String path = null)]]
```
El módulo crearía una capa adaptada al espacio del párrafo el cual tendría el bloque de llamada explicado a nivel de código y una tabla con los argumentos definidos de una forma simplificada para ayudar en su comprensión.
La sintaxis es sencilla, parte de lo siguiente:
* **Tipado de respuesta**: Es un elemento opcional comprendido entre corchetes que determina el tipado de respuesta. Si no se especifica, por defecto será **void** (Vacío).
* **Acceso**: Es un elemento opcional que determina el acceso a dicho elemento, donde si no se nombra se entenderá como elemento público, pero sino, indicaría lo siguiente:
* **Privado**: Determina que el elemento del que se habla tiene acceso únicamente privado y se representa mediante el caracter "**!**".
* **Protegido**: Determina que el elemento del que se habla tiene acceso protegido por su herencia y se representa mediante el caracter "**?**".
* **Espacio de nombres**: Es un elemento opcional que determina el espacio de nombres para llegar hasta éste, ya sea por nombre de Clase, por el propio espacio de nombres, o ambos juntos como puede suceder en PHP.
* **Ámbito**: Es un elemento opcional que determina el la separación entre el espacio de nombres y el nombre del elemento se separan por un caracter el cual indica uno de estos dos casos.
* **Objeto**: Se indica con un punto ("**.**") e indica que parte de la creación de un objeto a partir de la clase que lo nombra. En caso de no haber nombre
* **Estático**: Se indica con dos puntos ("**:**") e indica que parte de la clase que lo nombra.
* **Método** o **Elemento**: Nombre del método o elemento al que se hace referencia.
* **Argumentos**: Bloque opcional que se especifica únicamente en caso de ser un método o una función, entre paréntesis tendrá los argumentos de entrada. Cada argumento tendría lo siguiente:
* **Obligatorio**: El primer elemento es opcional e indica si es opcional u obligatorio donde si hay al inicio del argumento un cierre de exclamación ("**!**") indica que es obligatorio, sino nos indica que es opcional.
* **Nulleable**: El segundo elemento es opcional e indica si es nulleable o no donde si hay al inicio del argumento un cierre de interrogación ("**?**") indica que es nulleable, sino, no admite valores nulos.
* **Tipado**: El tercer elemento es obligatorio e indica el tipado del argumento.
* **Nombre**: El cuarto elemento es obligatorio e indica el nombre del argumento.
* **Valor por defecto**: El quinto elemento es opcional y especifica el valor por defecto que tiene ese argumento. Sólo se especifica para argumentos opcionales cuando éstos tienen un valor por defecto. Se identifica por ir separado con el signo igual ("**=**") del nombre hasta la coma que lo separa. En caso de ser un String, diccionario o Array se identifica su final con el cierre del mismo.
* **Valor por defecto**: Bloque opcional diseñado para valores de variables y constantes que representa su valor por defecto. Se distingue de los argumentos mediante la separación con el nombre del método con el caracter iguale ("**=**").
> [!!] El Espacio de nombres y el Ámbito van juntos, es decir, si se especifican han de existir los dos, si no, no se ha de especificar ninguno de los dos.
> [!!] Puede haber más de un tipado alternativo. Éstos se separan con el caracter tubería ("**|**").
Cara los tipados, el nombre que se le dé dependerá del desarrollador y del propio nombre de las clases de los que parten los posibles objetos, sin embargo, hay que destacar que se espera encapsulados entre diamantes en casos de ser Vectores o definición de diccionarios y/o objetos.
```wmd-examples
<!--
Definidión de una variable que viene siendo un vector de Objetos cuyos
elementos pueden ser de cualquier tipado.
-->
[[@ [Array<Object<String, Any>>] ejemplo]]
```
> [!#] Cuando hablamos de variables o métodos y funciones que no tienen argumentos, la tabla de definición de argumentos no aparecerá, o en caso de ser alterado el CSS original del WMarkDown, saldrá vacía.
> [!#] Para especificar valores nulos o cualquier valor aconsejamos, por mantener un estándar basado en JSDoc \(No se sigue plenamente la filosofía de JSDoc, pero si se basa bastante en ésta) el uso de **Null** y **Any** consecutivamente. También destacar que Any no representa entre sus valores ni a Null ni a "undefined" en el caso de JavaScript.
<!-- [[wmd]] -->

View File

@ -0,0 +1,33 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_color_sample
title_text = Muestra de color - WMarkDown
```
<!-- [[wmd]] -->
### Muestra de color
Las muestras de color no son más que unas cajitas para mostrar un color concreto de una forma rápida y ágil.
```wmd-examples
Esta muestra [[#F00]] es el color rojo.
Esta muestra [[#FF0000]] es el color rojo.
Esta muestra [[#f00]] es el color rojo.
Esta muestra [[color rgb(255, 0, 0)]] es el color rojo.
Esta muestra [[color red]] es el color rojo.
Esta muestra [[color #F00]] es el color rojo.
```
> [!!] Es cierto que tenemos la capacidad de poner bloques de color vía HTML, ya sea con la etiqueta SPAN o DIV, pero esta forma es más eficiente y permite que sin tener conocimientos de HTML poder aplicar colores sólo a su nombre en inglés, código hexadecimal o RGB y RGBA.
Las muestras de color se pueden poner simplemente entre dobles corchetes si éstas son hexadecimal; o bien, entre corchetes se nombra "color" y luego, separado por espacio o tabulación, el código de color, independientemente de ser hexadecima, RGB, RGBA, HLS o HLSA; así como con el nombre del color en inglés.
<!-- [[wmd]] -->

View File

@ -0,0 +1,69 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_dictionaries
title_text = Diccionarios - WMarkDown
```
<!-- [[wmd]] -->
### Diccionarios
Los diccionarios en WMarkDown son una herramienta para ayudar a escribir sin preocuparse en definir elementos que puedan resultar complejos, profesionales o simples interpretaciones. La idea simplemente es la creación de un diccionar JSON el cual será cargado y en base a los patrones establecidos éste los implementará en los textos del propio WMarkDown para que el usuario, al Clickar en dichos elementos les salga qué es para ti, además de permitir el muestreo de definiciones de forma anidada.
La implementación de los diccionarios es automática siempre que se le halla dado algún archivo de diccionario. Si éste no fue dado, los diccionarios no se post-procesarán.
El formato JSON de los diccionarios viene siendo un Array donde se implementará en cada elemento del mismo un término, y los términos tendrían un formato también de Array donde:
1. **Patrón y corrección**: Éste puede ser un único Array con un patrón regular y el texto corregido que quieres que se tenga uniformemente; o bien, un Array de elementos los cuales, como antes, sería un Array con un patrón y el texto corregido que quieres que se tenga uniformemente.
2. **Definición**: Viene siendo la definición, el cual puede ser un simple String o un Array para poder hacer saltos de línea.
3. **Links**: Links de interés tanto para más información como Webs oficiales y proyectos.
Un ejemplo de ésto puede ser el siguiente:
```json
[[
[
["/\\bwmarkdown\\b/ig", "WMarkDown"],
["/\\b(wmd\\b|w\\.m\\.d\\.|w\\. +m\\. +d\\. +)/ig", "WMD"]
], [
"El WMarkDown es un proyecto que nos permite hacer documentación y textos ",
"formateados desde un lenguaje de marcas sencillo que parte como idea de ",
"lenguajes de marcas como MarkDown y MediaWiki, personalizado a usos más ",
"extensos, flexibles y fáciles."
], [
"https://wmarkdown.k3y.pw/",
"https://git.k3y.pw/Whalers/WMarkDown"
]
], [
["/\\bmedia *wiki\\b/gi", "MediaWiki"], [
"MediaWiki es un proyecto Free Open Source que viene siendo la base de Webs ",
"como Wikipedia entre otros, el cual permite gestionar publicaciones y ",
"documentación en un entorno flexible, abierto y extendido con una gran ",
"comunidad que lo sustenta."
], [
"https://www.mediawiki.org/",
"https://es.wikipedia.org/wiki/MediaWiki",
"https://github.com/wikimedia/mediawiki"
]
], [
[
["/\\bmarkdown\\b/gi", "Markdown"],
["/(?<!\\.)\\bmd\\b|\\b(m\\.d\\.|m\\. +d\\. +)/ig", "MD"]
], [
"Markdown es un estándar de lenguaje de marcas que se desarrolló para facilitar ",
"la documentación con texto formateado en los proyectos, tanto a un nivel visual ",
"mediante texto plano como una vez formateado."
], [
"https://daringfireball.net/projects/markdown",
"https://daringfireball.net/projects/markdown/syntax",
"https://es.wikipedia.org/wiki/Markdown",
"https://www.markdownguide.org/"
]
]]
```
> [!!] Si nos fijamos en el ejemplo, los patrones utilizados se basan en patrones regulares de JavaScript. El propio WMarkDown se encargará de adaptarlo al entorno correspondiente, pero es importante seguir este sistema.
Este ejemplo busca patrones que tengan que ver con WMarkDown, MediaWiki y Markdown, marcando en el texto procesado como elementos consultables y los cuales desplegarán un elemento flotante a su altura con la información requerida.
<!-- [[wmd]] -->

View File

@ -0,0 +1,27 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_exclude
title_text = Módulo de exclusión - WMarkDown
```
<!-- [[wmd]] -->
### Módulo de exclusión
El módulo de exclusión está diseñado para ignorar fragmentos de texto para que éstos no se representen con marcas. Esto es muy importante para poder representar bloques de HTML, ejemplos o simplemente, exponer fragmentos de texto con caracteres que pertenecen a las marcas. Hay dos formas de excluir estos elementos.
```wmd-examples
Exclusión completa de un texto.
[[!Esto es un bloque de texto excluído, y esto [x] no es un Checkbox seleccioando. Tampoco funcionará el diccionario.]]
Exclusión de caracteres.
Esto es un texto no excluído y esto [x] sí es un Checkbox seleccionado, pero \[x] esto ya no lo es. Aquí sí funcionaría el diccionario.
```
> [!!] Es importante mencionar que los Slashes escapan sólo una serie de caracteres pues en la anterior versión escapaban todo tipo de caracteres y podía llegar a complicar ciertas cosas. Actualmente está la filosofía de que si hay algo que requiere de escaparse constantemente implica que está mal, por lo que la limitación de caracteres escapados ha de ser mínima.
<!-- [[wmd]] -->

View File

@ -0,0 +1,35 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_includes
title_text = Inclusiones - WMarkDown
```
<!-- [[wmd]] -->
### Inclusiones
Una de las características principales de WMarkDown es la capacidad de éste para poder integrar dentro de sí mismo otros recursos externos, por ejemplo, otro archivo HTML, MarkDown o WMarkDown, permitiendo así poder gestionar una documentación ordenada a partir de directorios y ficheros y a la par, poder crear OnePages donde visualizar dicho contenido. Para poder llevar a cabo dicha tarea podemos seguir el siguiente ejemplo:
```wmd-examples
## Ejemplo inclusión
Esto es un párrafo de presentación del título donde nos encontramos.
[[include otro.fichero.w.md]]
Ahora podemos continuar con nuestro fichero habiendo incluído el contenido del fichero "otro.fichero.w.md".
```
De esta forma podemos integrar dentro de nuestro documento diferentes ficheros con el fin de tenerlos ordenados para su trabajo así como generar documentación OnePage para facilitar la accesibilidad a los usuarios a ésta.
Las inclusiones crean secciones o bloques donde se meterá todo su contenido a modo de capa, y las inclusiones de primer nivel tendrán un link que permita ir al documento en cuestión. Con esto se entiende que se permite el anidamiento de inclusiones de archivos.
> [!!] Es importante destacar que se pueden producir **bucles infinitos** cuando un fichero llama a otro el cual llama al primero de forma directa o indirecta. Es muy importante controlar este proceso de forma adecuada y correcta.
> [!!] También es importante destacar que los **títulos anidados** tendrán su valor de origen pudiendo dar lugar a problemas si no se gestionan de una forma adecuada.
> [!!] Por otro lado, decir que los Links que genera para ir a la página o documento a la que hace referencia sólo se mostrará en las de primer nivel porque dichos **Links** son **dinámicos a su punto de origen** donde si el origen es un elemento incluído anidadamente éste podría alojar un Path erróneo.
<!-- [[wmd]] -->

View File

@ -0,0 +1,77 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_links
title_text = Links o enlaces - WMarkDown
```
<!-- [[wmd]] -->
### Links o enlaces
Para identificar o marcar un Link o enlace en WMarkDown, tenemos varias opciones según nos convenga en su momento, ya sea por comodidad o necesidad. En nuestro caso tenemos los estándares de MarkDown y MediaWiki, así como un sistema propio y detección automática de enlaces mediante búsqueda de protocolos de red con su división al Path, URL o código que lo sigan "://", de esta forma podemos identificar protocolos como:
- FILE.
- HTTP y HTTPS.
- FTP y FTPS.
- SFTP, SSH, etc.
- Etcétera.
Así pues, contando con los distintos métodos que tenemos para generar Links nos encontramos con los siguientes modos.
> [!!] Para poder ignorar un Link el cual no se quiere que aparezca o que posiblemente se haga uso de un texto el cual no sea un Link hemos de usar las marcas para ignorar el formato de fragmentos de texto que se relata en el [/doc/es/exclude.w.md Módulo de Exclusión] o "[/doc/es/exclude.w.md Ignore]". También se puede hacer uso de los escapes o de código Ampersand para impedir que dichos contenidos se vean afectados.
> [!!] Es importante mencionar que los Links, teóricamente no deben de contener espacios, motivo por el cual, si éstos poseen espacios, como pueden ser los casos de los números de teléfono, en el propio enlace éstos se compactarán, aunque se mostrará íntegramente como se hallan escrito por el usuario.
#### Link directo
Al escribir un Link identificable mediante protocolo o por si es un elemento como una dirección E-Mail, éste puede ser escrito de forma directa.
```wmd-examples
Aquí te pongo un Link directo: https://wmarkdown.k3y.pw/
También se puede hacer un Link directo de una dirección de E-Mail tal como kyman-ficticio@wmarkdown.k3y.pw
```
> [!!] Es importante destacar que este modo de trabajo no permite definirle un texto directo al enlace quedando únicamente el propio texto del enlace como texto tanto de título como de muestreo.
> [!! ¡OJO!] En este caso, por ejemplo, en un párrafo el cual acabe en un signo como el punto o la coma, si éste va pegado al Link éste lo entenderá como parte del mismo.
#### Link MediaWiki
El Link de MediaWiki se integra a partir de apertura y cierre de corchetes de forma directa, y todo lo que se comprenda ahí dentro se entenderá como Link. También hay que destacar que si hay un espacio éste se entenderá como separador del texto que se quiere que represente el Link. Este modo también distingue ciertos protocolos como el de los teléfonos.
```wmd-examples
Web de [https://wmarkdown.k3y.pw/].
Para ver más información, por favor, presione [https://wmarkdown.k3y.pw/ aquí].
Esto es un número de teléfono [+65 9127 92 35 533] y este es otro [723 564 123] y este el mismo de antes pero más obfuscado [723564123].
Y esto es una dirección E-Mail [kyman-ficticio@wmarkdown.k3y.pw].
También puedes poner direcciones como Cryptomonedas como [bitcoin:tb1qujswuek3mefsm3m84g94ek40drysxe9z09yfnc tb1qujswuek3mefsm3m84g94ek40drysxe9z09yfnc] o [litecoin:tltc1q4xy8sg2hf6nqqrhp69aukn6md3rx8v6jlqc67s tltc1q4xy8sg2hf6nqqrhp69aukn6md3rx8v6jlqc67s] entre otras.
```
#### Link MarkDown
El Link MarkDown es el Link más complejo. Por su versatilidad fue integrado pero por la complejidad hubo dudas a la hora de integrarlo. Éste se basa en un bloque opcional comprendido entre corchetes que contempla el texto que se quiere que aparezca; luego el Link entre paréntesis el cual, dentro del paréntesis puede ir acompañado de tras un espacio o tabulación, de forma opcional, ya sea entre comillas simples dobles o nada, un texto que sea el título que se presente con el puntero.
```wmd-examples
Web de (https://wmarkdown.k3y.pw/).
Para ver más información, por favor, presione [aquí](https://wmarkdown.k3y.pw/ Link a WMarkDown.).
Esto es un número de teléfono [+65 9127 92 35 533](tel:+6591279235533 Un teléfono inventado xD) y este es otro [723 564 123](723 564 123 También admite espacios.) y este el mismo de antes pero más obfuscado [723564123](723564123).
Y esto es una dirección E-Mail [kyman-ficticio@wmarkdown.k3y.pw].
También puedes poner direcciones como Cryptomonedas como [tb1qujswuek3mefsm3m84g94ek40drysxe9z09yfnc](bitcoin:tb1qujswuek3mefsm3m84g94ek40drysxe9z09yfnc Dirección Bitcoin TestNet) o [tltc1q4xy8sg2hf6nqqrhp69aukn6md3rx8v6jlqc67s](litecoin:tltc1q4xy8sg2hf6nqqrhp69aukn6md3rx8v6jlqc67s Dirección Litecoin TestNet) entre otras.
```
<!-- [[wmd]] -->

View File

@ -0,0 +1,186 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_lists
title_text = Listas - WMarkDown
```
<!-- [[wmd]] -->
### Listas
Los listas en WMarkDown se basan en una mezcla entre lo que son las listas crudas de MarkDown así como en las listas de MediaWiki, con un concepto de personalización para determinar si un elemento está contraído o no, permitiendo así controlar la visualización inicial de la lista.
> [!!] Es importante mencionar que la visualización de los elementos compactados depende plenamente de que JavaScript esté habilitado en el navegador pues por defecto no se mostrarán y las acciones dinámicas dependerán plenamente de que éste esté habilitado.
Partiendo de la idea de MarkDown para la gestión de Listas y sus marcas alternativas se creó un subprotocolo que condiciona qué marca se usar'para qué fin pues no todas las marcas funcionan igual, además, éste sistema altera la guía de buenas prácticas de MarkDown pues éste dice de usar siempre la misma marca en la misma lista o nivel de la misma, mientras que aquí se podrá ir alternando según intereses. Las marcas con sus significados son los siguientes:
- **&ast;**: El asterisco nos indica una lista desordenada estándar, sin posibilidad de desplegar o compactar.
- **&plus;**: El signo más nos dice que será una lista desordenada y que ésta estará desplegada por defecto con opción a compactar.
- **&minus;**: El signo menos nos dice que será una lista desordenada y que ésta estará compactada por defecto con opción a desplegar.
- **&num;**: El signo comodín, o sostenido o numérico indica que será una lista ordenada mediante números que parten del valor "1".
- **1.**: Cualquier número seguido de un punto nos indica una lista ordenada numérica cuyo valor inicial será el del primer elemento puesto.
- **a.**: Cualquier letra, a excepción de la letra **i** latina, seguida de un punto nos indica que será una lista ordenada alfabéticamente. Éste puede ser en mayúsculas para indicar que las letras sean mayúsculas, o minúsculas para lo contrario.
- **i.**: Un número romano seguido de un punto nos indica que la lista será ordenada con números romanos. Si éstos están en mayúsculas aparecerán en mayúsculas, y si son en minúsculas, éstos aparecerán en minúsculas.
> [!!] En el caso de los elementos ordenados, éstos seguirán las pautas única y exclusivamente del primer elemento dado. Si por el medio se hacen saltos, se repiten o se mantienen valores, así como si se integran marcas de listas desordenadas, éstas continuarán su orden interpretando corrección del usuario.
Los tipos de listas que hay se pueden ver reflejadas en los siguientes ejemplos:
```wmd-examples
Ejemplo de lista desordenada:
* Elemento 1.
* Elemento 2.
* Elemento 3.
* Elemento 4.
* Elemento N.
Ejemplo de lista ordenada numérica:
# Elemento 1.
# Elemento 2.
# Elemento 3.
# Elemento 4.
# Elemento N.
Ejemplo de lista ordenada con inicio en otro valor que no sea uno.
4. Elemento 1.
5. Elemento 2.
6. Elemento 3.
7. Elemento 4.
8. Elemento N.
La lista anterior sería igual que hacer lo siguiente:
4. Elemento 1.
4. Elemento 2.
4. Elemento 3.
4. Elemento 4.
4. Elemento N.
O incluso lo siguiente:
4. Elemento 1.
# Elemento 2.
# Elemento 3.
# Elemento 4.
# Elemento N.
```
Las listas se pueden anidar, lo que hacen que crezcan en árbol. Para ello tenemos tanto la filosofía base de MarkDown mediante espacios y/o tabulaciones; como la filosofía de MediaWiki mediante el conjunto de marcas que determinan el nivel del elemento dentro de la lista.
```wmd-examples
Listas anidadas por el método de MarkDown.
* Elemento 1.
* Elemento 2.
* Elemento 2-1.
* Elemento 2-2.
* Elemento 2-2-1.
* Elemento 2-3.
* Elemento 3.
* Elemento 4.
* Elemento 4-1.
* Elemento N.
Listas anidadas por el método de MediaWiki.
* Elemento 1.
* Elemento 2.
** Elemento 2-1.
** Elemento 2-2.
*** Elemento 2-2-1.
** Elemento 2-3.
* Elemento 3.
* Elemento 4.
** Elemento 4-1.
* Elemento N.
Ambas darán el mismo resultado.
```
Dentro de las listas anidadas hay dos marcas que permiten controlar si salen compactadas o desplegadas, lo que determina también que serían compactables o desplegables por el usuario final.
```wmd-examples
* Elemento 1. Elemento desplegado pero no desplegable o compactable.
* Elemento 1-1.
* Elemento 1-2.
* Elemento 1-3.
- Elemento 2. Elemento desplegable que por defecto está plegado.
* Elemento 2-1.
+ Elemento 2-2. Elemento desplegable, desplegado por defecto.
* Elemento 2-2-1.
- Elemento 2-3. Elemento desplegable que por defecto está plegado.
* Elemento 2-3-1.
* Elemento 3.
+ Elemento 4. Elemento desplegable que por defecto está desplegado.
* Elemento 4-1.
* Elemento N.
```
> [!!] Como podemos observar, la guía de las buenas prácticas de MarkDown cara las listas, con este concepto se rompe.
También se pueden anidar listas ordenadas y desordenadas entre sí.
```wmd-examples
Ejemplo en filosofía MarkDown.
* Elemento 1.
* Elemento 2.
# Elemento 2-1.
# Elemento 2-2.
* Elemento 2-2-1.
# Elemento 2-3.
* Elemento 3.
* Elemento 4.
# Elemento 4-1.
* Elemento N.
Ejemplo en filosofía MediaWiki.
* Elemento 1.
* Elemento 2.
*# Elemento 2-1.
*# Elemento 2-2.
*#* Elemento 2-2-1.
*# Elemento 2-3.
* Elemento 3.
* Elemento 4.
*# Elemento 4-1.
* Elemento N.
```
Mediante la filosofía de poder cambiar la marca tanto en una lista ordenada como desordenada, a excepción del primer valor de las listas ordenadas, en una lista ordenada se pueden establecer elementos plegados y desplegados.
```wmd-examples
4. Elemento 1.
+ Elemento 2.
# Elemento 2-1.
# Elemento 2-2.
# Elemento 2-3.
* Elemento 3.
# Elemento 3-1.
# Elemento 3-2.
# Elemento 3-3.
- Elemento 4.
# Elemento 4-1.
# Elemento 4-2.
# Elemento 4-3.
* Elemento N.
# Elemento N-1.
# Elemento N-2.
# Elemento N-3.
```
<!-- [[wmd]] -->

View File

@ -0,0 +1,22 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_paragraphs
title_text = Párrafos - WMarkDown
```
<!-- [[wmd]] -->
### Párrafos
Para poder crear párrafos, simplemente hemos de crear textos separados por doble salto de línea al menos. Un único salto entre líneas se considerará parte del mismo párrafo.
```wmd-examples
Esto es un párrafo.
Esto es otro párrafo.
Esto sigue siendo parte de éste segundo párrafo.
Este es un tercer párrafo.
```
<!-- [[wmd]] -->

View File

@ -0,0 +1,64 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_presentation_links
title_text = Módulo de Links de presentación - WMarkDown
```
<!-- [[wmd]] -->
### Módulo de Links de presentación
Este módulo está orientado a facilitar una presentación visual y estética de elementos.
> [!#] Este módulo nació con la idea de presentar proyectos externos de los que depende el proyecto actual que se documenta mediante WMarkDown; lenguajes de programación y tecnologías usadas; o bien, para mostrar proyectos que hacen uso público de la tecnología que se presenta. Es un poco a modo de créditos pero se puede usar para otras muchas cosas, como presentación de usuarios, personas, miembros, etc.
Este elemento consta de 3 partes:
* **Título**: Viene siendo un texto de presentación o nombre del elemento en cuestión.
* **Avatares**: Links a imágenes que representen dicho elemento. Éste permite más de una imagen pues, en orden vertical irá cogiendo el primero que le salga sin error. Al ser normalmente un recurso externo, éste puede fallar, por lo que teniendo más de una opción, éste tendrá más dificultades a que falle.
* **Links**: Los Links son enlaces a Webs, ya sean oficiales, de información o de proyectos, entre otros, que se le pueden vincular. Por defecto, el icono del Link será el favicon del sitio Web al que se hace referencia.
Para definir cada uno de los elementos, basándose en la estructura sintáctica de Python, se usarán líneas, las cuales determinan que si no tienen espacios de inicio es el título; si empieza con un asterísco es una opción para avatar; y si no, sería un Link de referencia.
```wmd-examples
El siguiente bloque sería un ejemplo de este módulo:
[["""
AnP
*https://anp.k3y.pw/images/AnP.png
*https://anp.k3y.pw/images/AnP-512.png
*https://anp.k3y.pw/favicon.ico
https://anp.k3y.pw/
https://git.k3y.pw/AnP/AnP
CDN de KyMAN
*https://cdn.k3y.pw/images/CDN.png
*https://cdn.k3y.pw/images/CDN-512.png
*https://cdn.k3y.pw/favicon.ico
https://cdn.k3y.pw/
https://git.k3y.pw/KyMAN/CDN
ErrorsManager
*https://errorsmanager.k3y.pw/images/ErrorsManager.png
*https://errorsmanager.k3y.pw/images/ErrorsManager-512.png
*https://errorsmanager.k3y.pw/favicon.ico
https://errorsmanager.k3y.pw/
https://git.k3y.pw/KyMAN/ErrorsManager
Kanvas
*https://kanvas.k3y.pw/images/Kanvas.png
*https://kanvas.k3y.pw/images/Kanvas-512.png
*https://kanvas.k3y.pw/favicon.ico
https://kanvas.k3y.pw/
https://git.k3y.pw/KyMAN/Kanvas
MuWeb
*https://muweb.k3y.pw/images/MuWeb.png
*https://muweb.k3y.pw/images/MuWeb-512.png
*https://muweb.k3y.pw/favicon.ico
https://muweb.k3y.pw/
https://git.k3y.pw/KyMAN/MuWeb
"""]]
```
> [!!] Para describir alguna cosa concreta de alguno de estos elementos ha de hacerse fuera del módulo.
<!-- [[wmd]] -->

View File

@ -0,0 +1,55 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_quotes
title_text = Quotes y comentarios - WMarkDown
```
<!-- [[wmd]] -->
### Quotes o comentarios
Los Quotes o comentarios vienen siendo fragmentos de texto que se usan generalmente para matizar cosas dentro de lo que se quiera decir, remarcar información o simplemente añadir notas adicionales.
Para referenciar el bloque Quote hemos de encabezar el párrafo mediante el caracter "&gt;", lo que determinará que es un comentario o fragmento de texto explicativo.
```wmd-examples
Esto es un párrafo normal.
> Esto es un Quote o comentario.
Esto es otro párrafo normal.
> Esto es otro Quote.
Esto pertenece al mismo Quote.
> Esto es otro Quote distinto.
```
Los Quotes tienen 3 modos: los comentarios comunes añadidos o notas; lo mismo pero con iconificación de contenido para advertencias, preguntas, respuestas, etc., el cual puede ser personalizado a la Web en cuestión; y como comentario de usuarios específicos, que requiere de registrar a los usuarios en el propio gestor WMarkDown.
```wmd-examples
> Esto es un comentario común o nota.
> [!comment] Esto es lo mismo que lo anterior pero iconificado.
> [!#] Esto es exactamente lo mismo que lo anterior pero simplificado.
> [!# Comentario] Esto es lo mismo que lo anterior pero aclarando que es un comentario. El resultado se verá visualmente.
> [!!] Esto es una advertencia o nota importante.
> [!Q] Esto es un comentario directo.
> [!?] Esto es para realizar preguntas dentro del texto.
> [!>] Esto es para responder preguntas.
> [!icono_personalizado Personalizado] Esto es un Quote con icono personalizado y con texto que advierte de que es un contenido personalizado.
> [!@Usuario] Esto es un Quote a modo de comentario específico a una persona registrada.
```
Todos los los elementos pueden ser personalizables y nombrables.
<!-- [[wmd]] -->

View File

@ -0,0 +1,73 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_tables
title_text = Tablas - WMarkDown
```
<!-- [[wmd]] -->
### Tablas
Las tablas en WMarkDown no siguen ningún estandar concreto pues desde WMarkDown las consideramos altamente ineficientes, muy posiblemente por desconocimiento pero hemos hecho algunos cambios que tiran más hacia MediaWiki que a Markdown, aun así, el parecido y la funcionalidad son similares.
Teniendo en cuenta que tanto a nivel de texto plano sobre WMarkDown como a nivel gráfico proceso han de ser altamente visibles, así cmo simplificar en la medida de lo posible la composición de una de éstas, se hizo de la siguiente forma.
```wmd-examples
A continuación montaremos una tabla.
[| class="jojo"
|^ Cabecera 1 | Cabecera 2 | Cabecera 3 | Cabecera N
|= Título 1 | Título 2 | Título 3 | Título N
| Elemento 1 | Elemento 2 | Elemento 3 | Elemento N
| Elemento 1 | Elemento 2 | Elemento 3 | Elemento N
| Elemento 1 | Elemento 2 | Elemento 3 | Elemento N
|_ Pie 1 | Pie 2 | Pie 3 | Pie N
|]
```
Como podemos observar, las tablas se abren mediante corchete y exclamación, donde la primera línea nos permite poner atributos a la misma, pero a nivel de la etiqueta TABLE en HTML. Por otro lado, tenemos los títulos, que se hacen a partir de acento circunflejo ("^") para indicar que será para la cabecera; el guión bajo ("_") para indicar que es para el pie de página; y el igual ("=") que indica que es para ambos. Las cabecerás se irán creando verticalmente según aparezcan en la tabla y no tienen que ir en ninguna posición específica.
Por otro lado, decir que se puede hacer Span de las columnas, es decir, unir dos o más columnas de una forma visual y sencilla. Para ello se unirán tuberías, caracter que divide cada columna. Si no hay espacios ni nada que las separe, éstas se unirán en una única celda en esa tupla concreta.
```wmd-examples
[|
|= Columna 1 | Columna 2 | Columna 3 | Columna 4 | Columna 5
| Columna 1 | Columna 2 | Columna 3 | Columna 4 | Columna 5
||| Columna 1-3 | Columna 4 | Columna 5
| Columna 1 | *Columna* 2 ||| Columna 3-5
| Columna 1 || Columna 2-3 | [https://wmarkdown.k3y.pw/#tablas Columna 4] | Columna 5
|]
```
> [!#] Los Span o uniones de columnas en una celda se pueden realizar tanto en los títulos como en el cuerpo.
> [!!] También hay que destacar que hay que controlar bien el número de columnas por fila para que éstas sean igual y comunes en todas.
> [!!] Es importante destacar también que las celdas también serán formateadas según los parámetros de WMarkDown, como las negrillas u otras marcas que pueda haber en éstas.
Finalmente, también decir que se pueden hacer celdas que pueden tener saltos de línea. Ésto se puede llevar a cabo mediante comillas tanto dobres como simples.
```wmd-examples
[|
|= Columna 1 | Columna 2 | Columna 3
| Celda 1-A | Celda 2-A | Celda 3-A
| Celda 1-B | "Celda 2-B
Esto es más contenido de la celda 2-B." | Celda 3-B
| Celda 1-C | 'Celda 2-C
Esto es más contenido de la celda 2-C.' | Celda 3-C
|]
```
> [!!] Es importante destacar que las celdas se consideran subelementos, es decir, no son considerados elementos de bloque como párrafos o similares y quedan plenamente condicionadas a subelementos de bloque, por eso, en el ejemplo aquí mostrad, pese a haber doble salto de línea, éste permanece como una única línea.
> [!!] Es importante mencionar también que si un texto empieza y acaba por comillas dobles o comillas simples, éstas se omitirán en el resultado final pues se entenderá que son conjuntos para gestionar en multilínea.
<!-- [[wmd]] -->

View File

@ -0,0 +1,44 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_text_formats
title_text = Formatos de texto - WMarkDown
```
<!-- [[wmd]] -->
### Formatos de texto
Los formatos de texto en WMarkDown se pueden generar de una forma muy básica a partir de marcas. Los más habituales son los que se representan en el siguiente ejemplo:
```wmd-examples
- *Esto es un texto en cursiva.*
- **Esto es un texto en negrilla.**
- ~~Esto es un texto tachado.~~
- __Esto es un texto subrayado.__
- ``Esto es un bloque de código o texto monospaciado como tal.``
- ***Esto es un texto negrilla y cursiva.***
- ~~*Esto es un texto tachado y en cursiva.*~~
- ~~**Esto es un texto tachado y en negrilla.**~~
- ~~***Esto es un texto tachado, en negrilla y cursva.***~~
- __*Esto es un texto subrayado y en cursiva.*__
- __**Esto es un texto subrayado y en negrilla.**__
- __***Esto es un texto subrayado, en negrilla y cursva.***__
- __***Esto es un texto subrayado, en negrilla y cursiva.***__
- __~~*Esto es un texto subrayado, tachado y en cursiva.*~~__
- __~~**Esto es un texto subrayado, tachado y en negrilla.**~~__
- __~~***Esto es un texto subrayado, tachado, en negrilla y cursva.***~~__
```
> [!!] Todas estas marcas se pueden entremezclar, pero es muy importante tener encuenta que las aperturas y los cierres de estos elementos han de corresponder de dentro a fuera siempre. Si se abre, por ejemplo, una cursiva y luego una negrilla, y se cierra primero negrilla y luego cursiva, el resultado no será el esperado, siendo ejecutado sólo el primero de la lista y pudiendo ser afectado tras éste en el resto del documento.
Como resumen o conclusión final tenemos los siguientes formatos:
- **&#42;**: Cursiva mediante un único asterisco.
- **&#42;&#42;**: Negrilla mediante doble asterisco.
- **&tilde;&tilde;**: Texto tachado mediante doble virgulilla.
- **&#95;&#95;**: Texto subrayado mediante doble guión bajo.
- **&#96;&#96;**: Texto monoespaciado o para código mediante doble comilla o acento agudo.
<!-- [[wmd]] -->

View File

@ -0,0 +1,49 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_titles
title_text = Títulos - WMarkDown
```
<!-- [[wmd]] -->
### Títulos
Los títulos en WMarkDown no sólo son un formato, sino también una referencia dentro de página. Es muy importante su buen uso dentro del documento para evitar no sólo conflictos con los estándares, sino también dentro del propio WMarkDown. Los títulos serían los siguientes:
```wmd-examples
## Esto sería un H2.
### Esto sería un H3.
#### Esto sería un H4.
##### Esto sería un H5.
###### Esto sería un H6.
```
> [!!] Hay que tener en cuenta que el WMarkDown permite **incluir** contenido entre distintos **ficheros**, y éstos pueden ir gestionados con títulos. Éstos no cambiarán tras la carga por lo que si se adjunta un archivo con títulos a la altura o superiores al actual pueden romper la dinámica del documento resultante.
> [!!] También es importante destacar que el **tamaño de los títulos** va porcentuado al texto actual según formato del WMarkDown.
> [!!] También es importante mencionar que **no hay títulos por encima de H6**, y **se desaconseja**, por estándar de HTML, el uso de **H1**, salvo de forma manual en la cabecera de la Web para representar el logo y/o nombre del sitio o documento.
Como alternativa para seguir los estándares de MarkDown y MediaWiki, tenemos la opción de hacer los títulos de la siguiente manera:
```wmd-examples
== Esto sería un H2 ==
=== Esto sería un H3 ===
==== Esto sería un H4 ====
===== Esto sería un H5 =====
====== Esto sería un H6 ======
```
> [!!] Existe una alternativa en MarkDown oficial que sería para los H1 y los H2 con respecto a subrayar una línea con caracteres de igual ("=") para los H1; y con guines medios ("-") para los H2. Al trabajar H1 y H2, pese a poderlos adaptar a H2 y H3 por la filosofía de trabajo de WMarkDown, éstos no se implementaron, tanto por la complejidad a la hora de ser interpretados como por el poco uso que se vio tras un análisis inicial.
<!-- [[wmd]] -->

View File

@ -0,0 +1,17 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_opinions
title_text = Opiniones y comentarios - WMarkDown
```
<!-- [[wmd]] -->
## Opiniones y comentarios
Esta sección va dedicada a publicar las opiniones y comentarios de usuarios cercanos a los desarrolladores del proyecto para que halla una visión externa a éste, aprobechando la confianza en éstos tanto para lo bueno como para lo malo.
> [!@Srx00] Quería agradecer personalmente a todos aquellos que me han dado una opinión y/o comentario acerca de este proyecto. Lo valor mucho pues sea como crítica para aprender como apoyo a continuar con este tipo de trabajos, me son realmente importantes. ¡Muchas gracias!
> [!@Srx00] Como opinión personal, es un proyecto raro, que le da mayor complejidad a la aplicación en desarrollo como cuando le metes cualquier librería que añade una nueva funcionalidad, sin embargo, es cierto que si lo vemos desde el punto de vista de la gestión de errores, creo, a nivel personal, por mi experiencia, que éste puede ser una herramienta fuerte para gestionar los errores tanto a nivel local como entre plataformas o diferentes entornos del lenguaje dentro de un mismo proyecto, sin embargo, creo de vital importancia destacar que si se puede omitir el uso de dichas funciones, por ejemplo, para aquellos errores que contengan menos de 28 verificaciones, ahorraría tanto coste de dificultad como coste de proceso. Al ser una herramienta compatible directamente con enteros, es una forma de darle eficiencia a tu proyecto y no rompería mucho la estructura de funcionamiento con esta librería en la medida de lo posible.
<!-- [[wmd]] -->

View File

@ -0,0 +1,86 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_projects
title_text = Proyectos - WMarkDown
```
<!-- [[wmd]] -->
## Proyectos
El propio proyecto WMarkDown se nutre de otros proyectos para ganar propiedades y/o características. La mayoría de estos proyectos tienen licencia MIT, pero por filosofía interna creemos que es importante mencionar las tecnologías y herramientas externas que hallan sido usadas para el desarrollo de este proyecto, ayudando a la visualización de estos proyectos, tecnologías, etc. Así como ayudando a sus creadores y mantenedores dentro de un nivel profesional a nivel curricular como personal por visualización de su trabajo y habilidades compartidas con la comunidad. Es por esto que a continuación se hace una lista de las tecnologías usadas, datos básicos de las mismas, motivos de uso y los Links pertientes.
[["""
Mermaid JS
*https://mermaid.js.org/favicon.ico
*https://mermaid.js.org/mermaid-logo.svg
https://mermaid.js.org/
https://mermaid.live/
https://github.com/mermaid-js/mermaid
https://www.mediawiki.org/wiki/Extension:Mermaid
MathJax
*https://www.mathjax.org/favicon.ico
https://www.mathjax.org/
https://github.com/mathjax/MathJax
https://es.wikipedia.org/wiki/MathJax
highlight.js
*https://highlightjs.org/icon.png
*https://highlightjs.org/favicon.ico
https://highlightjs.org/
https://github.com/highlightjs/highlight.js
AnP
*https://anp.k3y.pw/images/AnP.png
*https://anp.k3y.pw/images/AnP-512.png
*https://anp.k3y.pw/favicon.ico
https://anp.k3y.pw/
https://git.k3y.pw/AnP/AnP
CDN de KyMAN
*https://cdn.k3y.pw/images/CDN.png
*https://cdn.k3y.pw/images/CDN-512.png
*https://cdn.k3y.pw/favicon.ico
https://cdn.k3y.pw/
https://git.k3y.pw/KyMAN/CDN
"""]]
Por otro lado, también tenemos tecnologías que de una forma pública hacen uso de esta tecnología, el WMarkDown para diversos fines según intereses de los autores de dichos proyectos. A continuación dejamos la lista con dichas tecnologías para visibilizar el uso de WMarkDown.
[["""
AnP
*https://anp.k3y.pw/images/AnP.png
*https://anp.k3y.pw/images/AnP-512.png
*https://anp.k3y.pw/favicon.ico
https://anp.k3y.pw/
https://git.k3y.pw/AnP/AnP
CDN de KyMAN
*https://cdn.k3y.pw/images/CDN.png
*https://cdn.k3y.pw/images/CDN-512.png
*https://cdn.k3y.pw/favicon.ico
https://cdn.k3y.pw/
https://git.k3y.pw/KyMAN/CDN
ErrorsManager
*https://errorsmanager.k3y.pw/images/ErrorsManager.png
*https://errorsmanager.k3y.pw/images/ErrorsManager-512.png
*https://errorsmanager.k3y.pw/favicon.ico
https://errorsmanager.k3y.pw/
https://git.k3y.pw/KyMAN/ErrorsManager
PythonMapper
*https://pythonmapper.k3y.pw/images/PythonMapper.png
*https://pythonmapper.k3y.pw/images/PythonMapper-512.png
*https://pythonmapper.k3y.pw/favicon.ico
https://pythonmapper.k3y.pw/
https://git.k3y.pw/KyMAN/PythonMapper
Kanvas
*https://kanvas.k3y.pw/images/Kanvas.png
*https://kanvas.k3y.pw/images/Kanvas-512.png
*https://kanvas.k3y.pw/favicon.ico
https://kanvas.k3y.pw/
https://git.k3y.pw/KyMAN/Kanvas
MuWeb
*https://muweb.k3y.pw/images/MuWeb.png
*https://muweb.k3y.pw/images/MuWeb-512.png
*https://muweb.k3y.pw/favicon.ico
https://muweb.k3y.pw/
https://git.k3y.pw/KyMAN/MuWeb
"""]]
<!-- [[wmd]] -->

View File

@ -0,0 +1,82 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_targets
title_text = Objetivos - WMarkDown
```
<!-- [[wmd]] -->
## Objetivos
Los objetivos para poder llevar a cabo este proyecto son los siguientes:
+ [X] Actualizar base del proyecto.
+ [X] Montar la aplicación AnP sobre Python y agregarlo a los servidores.
+ [X] Preparar el HTML para las páginas WMarkDown.
+ [X] Reestablecer el dominio local de pruebas contra AnP en vez de Apache.
+ [X] Montar estilos genéricos.
+ [X] Adjuntar el SASS de configuración y de elementos comunes de AnP.
+ [X] Establecer colores primarios y secundarios.
+ [X] Rehacer el logo del WMarkDown.
+ [-] CSS.
+ [X] Visualización general.
+ [X] Checkboxes y Radio Buttons.
+ [-] Visualización de los bloques de código.
+ [X] Estilos del menú dinámico.
+ [-] ECMAScript/JavaScript.
+ [ ] Gestión de la visuazalición de bloques de código y condición de bloques especiales.
+ [X] Crear menú dinámico sobre entorno cliente a partir de los ID de los Headers o títulos.
+ [X] Integrar los diccionarios del WDictionaries para unificar proyectos y actualizar formato.
+ [X] Formatear los archivos de diccionario JSON.
+ [X] Carga asíncrona de los diccionarios.
+ [X] Identificación de los elementos de los diccionarios en los textos al nivel establecido.
+ [X] Generar las cajas de muestreo de información del elemento de diccionario.
+ [-] Python.
+ [X] Crear base independiente para que pueda ser adjuntado en cualquier proyecto.
+ [X] Crear gestión de módulos dinámicos de forma simplificada sobre diccionarios y sistemas de Callbacks sobre patrones regulares.
+ [X] Crear módulo de análisis directo.
+ [X] Crear módulo de análisis vía bloque.
+ [X] Módulo para los párrafos.
+ [X] Módulo para los títulos y subtítulos.
+ [X] Módulo para las listas ordenadas y desordenadas.
+ [X] Módulo para la gestión de las tablas.
+ [X] Módulo para fragmentos de texto en negrita.
+ [X] Módulo para fragmentos de texto en itálica.
+ [X] Módulo para fragmentos de texto tachado.
+ [X] Módulo para fragmentos de texto subrayado.
+ [X] Módulo para fragmentos de texto monoespaciado o de código.
+ [X] Módulo para la visualización de Links.
+ [X] Links marcados.
+ [X] Links y Paths directos.
+ [X] Módulo para la visualización de imagen.
+ [-] Módulo para la visualización de vídeo.
+ [-] Vídeo nativo.
+ [ ] Vídeo de Youtube.
+ [ ] Vídeo de Vimeo.
+ [-] Módulo para la reproducción de audio.
+ [ ] Audio nativo.
+ [ ] Audio de Soundcloud.
+ [ ] Reproductor de múltiples audios.
+ [ ] Slider de imágenes y vídeos.
+ [X] Módulo de bloques de código.
+ [-] Quotes o comentarios.
+ [X] Bloques crudos.
+ [X] Bloques iconificados.
+ [X] Bloques de comentario de usuario.
+ [ ] Bloques anidados.
+ [X] Inclusiones de archivos externos.
+ [X] Integrar el WDictionaries en el proyecto WMarkDown para unificar gestión documental.
+ [ ] Aplicar un sistema de tabulaciones adecuada para facilitar acceso al código fuente HTML.
+ [ ] Implementar sistema de comentarios para ignorar fragmentos de texto y que no salgan como resultado futuro.
+ [X] Implementar módulo de definición de método y/o función para documentación.
+ [X] Módulo para visualizar muestra de color.
+ [X] Módulo para visibilizar proyectos y recursos.
+ [ ] Módulo para visualizar direcciones de monedas o de pago mediante String y QR con Link integrado.
+ [ ] Módulo para comentar fragmentos que no resulten en el String de salida.
+ [X] Implementar SyntaxHightlighter para el módulo de bloque de código.
+ [X] Implementar MathJax.
+ [X] Implementar MermaidJS.
+ [ ] Implementar ejemplificación de uso del lenguaje WMarkDown "[[!wmd-examples]]".
+ [ ] Gestionar cacheados automáticos de los ficheros contra HTML para precompilaciones.
<!-- [[wmd]] -->

159
Public/doc/tests.w.md Normal file
View File

@ -0,0 +1,159 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_tests
title_text = Tests - WMarkDown
```
<!-- [[wmd]] -->
## Tests
Esto es una prueba de ***Italic-Bold***. ¿Funca? ¿Y si *ponemos esto **con negrilla**, funcionaría*?
Bloque de Flowcharts de Mermaid JS:
```mermaid
flowchart TD
A --> B
B --> C
```
Bloque de funciones matemáticas:
```maths
f(x) = a + bc + c
```
Este elemento [[#F00]], que es lo mismo que [[color #F00]] y [[color red]], es una prueba de muestra de color rojo.
[[@ [Integer|String|Array<Integer,String>] ErrorsManager.bitwise(!Integer | String | Array<Integer,String> code = "jojo", !Integer bits)]]
Imagen:
((!image https://images.unsplash.com/photo-1597852074816-d933c7d2b988 Esto es una prueba xD))
((!picture https://images.unsplash.com/photo-1597852074816-d933c7d2b988 Esto es una prueba xD))
Y esto sería un icono ((!icon https://images.unsplash.com/photo-1597852074816-d933c7d2b988 Esto es una prueba xD)) xD
* Elemento A
* Elemento B
* Elemento C
- Elemento A
- Elemento B
- JoJo
- Elemento C
+ Elemento A
+ Elemento B
- jojo
+ Elemento C
# Elemento A
# Elemento B
#* Elemento BA
#* Elemento BB
#*# Elemento BBA
# Elemento C
1. Elemento A
2. Elemento B
3. Elemento C
a. Elemento A
b. Elemento B
c. Elemento C
A. Elemento A
B. Elemento B
C. Elemento C
i. Elemento A
i. Elemento B
i. Elemento C
i. Elemento A
ii. Elemento B
iii. Elemento C
I. Elemento A
I. Elemento B
I. Elemento C
4. Elemento 1.
+ Elemento 2.
# Elemento 2-1.
# Elemento 2-2.
# Elemento 2-3.
* Elemento 3.
# Elemento 3-1.
# Elemento 3-2.
# Elemento 3-3.
- Elemento 4.
# Elemento 4-1.
# Elemento 4-2.
# Elemento 4-3.
* Elemento N.
# Elemento N-1.
# Elemento N-2.
# Elemento N-3.
> [!@Srx00] jojo xDDD
Esto es un texto ~~-tachado-~~ xDDD.
Y esto es un texto __subrayado__ xDD.
##### Esto sería un H5.
###### Esto sería un H6.
https://wmarkdown.k3y.pw/
kyman@wmarkdown.k3y.pw
[+94 683 43 12 441]
===== Esto sería un H5. =====
====== Esto sería un H6. ======
También puedes poner direcciones como Cryptomonedas como [bitcoin:tb1qujswuek3mefsm3m84g94ek40drysxe9z09yfnc tb1qujswuek3mefsm3m84g94ek40drysxe9z09yfnc] o [litecoin:tltc1q4xy8sg2hf6nqqrhp69aukn6md3rx8v6jlqc67s tltc1q4xy8sg2hf6nqqrhp69aukn6md3rx8v6jlqc67s] entre otras.
También puedes poner direcciones como Cryptomonedas como [tb1qujswuek3mefsm3m84g94ek40drysxe9z09yfnc](bitcoin:tb1qujswuek3mefsm3m84g94ek40drysxe9z09yfnc Dirección Bitcoin TestNet) o [tltc1q4xy8sg2hf6nqqrhp69aukn6md3rx8v6jlqc67s](litecoin:tltc1q4xy8sg2hf6nqqrhp69aukn6md3rx8v6jlqc67s Dirección Litecoin TestNet) entre otras.
A continuación montaremos una tabla.
[| class="jojo"
|^ Cabecera 1 | Cabecera 2 | Cabecera 3 | Cabecera N
|= Título 1 | Título 2 | Título 3 | Título N
| Elemento 1 | Elemento 2 | Elemento 3 | Elemento N
| Elemento 1 | Elemento 2 | Elemento 3 | Elemento N
| Elemento 1 | Elemento 2 | Elemento 3 | Elemento N
|_ Pie 1 | Pie 2 | Pie 3 | Pie N
|]
[|
|= Columna 1 | Columna 2 | Columna 3 | Columna 4 | Columna 5
| Columna 1 | Columna 2 | Columna 3 | Columna 4 | Columna 5
||| Columna 1-3 | Columna 4 | Columna 5
| Columna 1 | *Columna* 2 ||| Columna 3-5
| Columna 1 || Columna 2-3 | [https://wmarkdown.k3y.pw/#tablas Columna 4] | Columna 5
|]
[|
|= Columna 1 | Columna 2 | Columna 3
| Celda 1-A | Celda 2-A | Celda 3-A
| Celda 1-B | "Celda 2-B
Esto es más contenido de la celda 2-B." | Celda 3-B
| Celda 1-C | 'Celda 2-C
Esto es más contenido de la celda 2-C.' | Celda 3-C
|]
<!-- [[wmd]] -->

View File

@ -1,338 +0,0 @@
WMarkDown.Dictionary = function(wmarkdown){
const self = this;
let started = false,
scroll_event = null,
z_index = 5,
thread = null,
cache = "";
const construct = () => {};
const scroll_event_function = event => {
const content_box = wmarkdown.item_self.querySelector(".content"),
half_width = content_box.offsetWidth / 2,
half_height = content_box.offsetHeight / 2,
font_size = window.getComputedStyle(wmarkdown.item_self, null).getPropertyValue("font-size");
content_box.querySelectorAll(".content .data-dictionary-item").forEach(item => {
const properties = item.getBoundingClientRect();
item.setAttribute("data-left", properties.x - content_box.offsetLeft > half_width);
item.setAttribute("data-top", properties.y - content_box.offsetTop < half_height);
item.querySelector(".box").style.fontSize = font_size;
});
};
const autosearch = () => wmarkdown.item_self.querySelectorAll(".data-dictionary-table").forEach(searcher => searcher.querySelector("[name=autosearch]").checked && self.search(searcher, null));
this.start = () => {
if(started)
return;
started = true;
const dictionary_links = wmarkdown.settings("dictionary_links");
dictionary_title = wmarkdown.settings("dictionary_title") || "Dictionary";
scroll_event = wmarkdown.item_self.querySelector(".content").addEventListener("scroll", scroll_event_function);
self.build();
thread = wmarkdown.threads_add(autosearch);
if(dictionary_links)
load_links(dictionary_links.push ? dictionary_links : [dictionary_links], dictionary => {
const content_box = wmarkdown.item_self.querySelector(".content-box");
let hash = dictionary_title.toLowerCase().replace(/[^a-z\d]+/g, "-");
if(!/^(.+\-)(\d+)$/.test(hash))
hash += "-0";
while(document.getElementById(hash))
hash = hash.replace(/^(.+\-)(\d+)$/, (...arguments) => arguments[1] + (Number(arguments[2]) + 1));
with(content_box.appendChild(document.createElement("h1"))){
setAttribute("id", hash);
innerText = dictionary_title;
};
with(wmarkdown.item_self.querySelector(".headers-menu>nav>ul").appendChild(document.createElement("li"))){
setAttribute("data-level", 1);
setAttribute("data-deployed", false);
setAttribute("data-levels", 0);
setAttribute("data-parent-deployed", true);
setAttribute("data-id", wmarkdown.hash());
innerHTML = (`
<span data-icon="deploy" onlick="` + wmarkdown.object_name + `.deploy(this, event);"></span>
<a href="#` + hash + `" title="` + dictionary_title + `" target="_self" onclick="` + wmarkdown.object_name + `.deploy(this, event);` + wmarkdown.object_name + `.go_to_item(this, event);">` + dictionary_title + `</a>
`);
};
build(dictionary, content_box.appendChild(document.createElement("form")));
});
};
const process_description = description => {
if(!description)
return "";
if(description.substr)
return description;
if(typeof description != "object")
return "" + description;
let html = `<span class="paragraph">`;
description.forEach(line => html += " " + (line || `</span><span class="paragraph">`));
html += `</span>`;
return html;
}
const mount = (dictionary, item) => item.childNodes.forEach(node => {
if(node.hasAttribute && node.hasAttribute("data-ignore") && node.getAttribute("data-ignore") == "true")
return;
if(node.nodeType != Node.TEXT_NODE){
!(node.tagName && ["noscript", "a"].includes(node.tagName.toLowerCase())) && !(node.classList && node.classList.contains("code-block")) && mount(dictionary, node);
return;
};
let html = node.textContent;
if(!node.textContent || !/[^\r\n\s\t]/.test(html))
return;
const nodes = [];
dictionary.forEach(item => item.patterns.forEach((pattern, i) => pattern && (html = html.replace(pattern, (...values) => {
let html = ``;
const result = (item.results[i] || item.results[0]).replace(/\$(\d)/g, (all, i) => values[Number(i)] || "");
(item.links ? item.links.push ? item.links : [item.links] : []).forEach(link => html += `<a href="` + link + `" title="` + link + `" target="_blank" data-site="` + link.replace(/^[^\:]+\:\/{2}([^\/]+)(\/(.+)?)?$/, "$1").replace(/[^a-z\d]+/g, "_") + `"></a>`);
nodes.push((`
<span
class="data-dictionary-item"
onmouseover="` + wmarkdown.object_name + `.dictionary.show(this, event);"
onmouseout="` + wmarkdown.object_name + `.dictionary.hide(this, event);"
data-show="false"
><span class="box">
<span class="result">` + result + `</span>
<span class="description">` + process_description(item.description) + `</span>
<span class="links">` + html + `</span>
</span><span class="text">` + result + `</span></span>
`).trim());
return '###' + (nodes.length - 1) + "###";
}))));
html = html.replace(/\#{3}(\d+)\#{3}/g, (...arguments) => nodes[Number(arguments[1])]);
if(html == node.textContent)
return;
const span = node.parentNode.insertBefore(document.createElement("span"), node);
span.setAttribute("class", "data-dictionary-block");
span.innerHTML = html;
node.remove();
});
const load = (files, i, callback, dictionary, patterns_used) => {
if(i >= files.length){
callback(dictionary);
return;
};
wmarkdown.load_file(files[i], data => {
if(data){
try{
JSON.parse(data).forEach(item => {
const json = item.pattern.substr ? item.pattern : JSON.stringify(item.pattern);
if(patterns_used.includes(json))
return;
patterns_used.push(json);
let pattern;
const patterns = [];
if(!item.pattern)
return;
(item.pattern.push ? item.pattern : [item.pattern]).forEach(pattern => {
const pattern_closed = pattern.lastIndexOf("/");
try{
pattern_closed && (pattern = new RegExp(pattern.substr(1, pattern_closed - 1), pattern.substr(pattern_closed + 1)));
}catch(exception){};
patterns.push(pattern || null);
});
patterns && dictionary.push(Object.assign({}, item, {
patterns : patterns,
results : item.result.push ? item.result : [item.result]
}));
});
}catch(exception){console.error(exception);};
};
load(files, i + 1, callback, dictionary, patterns_used);
});
};
const build = (dictionary, item) => {
const header = (`
<tr>
<th data-field="i" data-i18n="i">i</th>
<th data-field="patterns" data-i18n="patterns">Patterns</th>
<th data-field="results" data-i18n="results">Results</th>
<th data-field="words" data-i18n="words">Words</th>
<th data-field="meanings" data-i18n="meanings">Meanings</th>
<th data-field="urls" data-i18n="urls">URLs</th>
</tr>
`),
hashes = {};
let body = ``;
["search", "autosearch", "meanings", "case_sensitive"].forEach(key => hashes[key] = wmarkdown.hash());
dictionary.forEach((item, i) => {
let urls = ``,
words = '';
const results = item.words || item.results;
(item.links ? item.links.push ? item.links : [item.links] : []).forEach(link => urls += `<li><a href="` + link + `" target="_blank" title="` + link + `">` + link + `</a></li>`);
(results.push ? results : [results]).forEach(word => words += '<li>' + word + '</li>');
body += (`
<tr data-i="` + i + `" data-visible="true">
<td data-field="i">` + i + `</td>
<td data-field="patterns"><ul><li>` + item.patterns.join(`</li><li>`) + `</li></ul></td>
<td data-field="results"><ul><li>` + item.results.join(`</li><li>`) + `</li></ul></td>
<td data-field="words"><ul>` + words + `</ul></td>
<td data-field="description">` + (item.description.push ? item.description.join(" ") : item.description) + `</td>
<td data-field="urls"><ul>` + urls + `</ul></td>
</tr>
`);
});
item.setAttribute("class", "data-dictionary-table");
item.setAttribute("action", window.location.hash);
item.setAttribute("method", "get");
item.setAttribute("onsubmit", "return false;");
item.innerHTML = (`
<fieldset>
<legend data-i18n="search">Search</legend>
<div class="search" data-i18n="search" data-i18n-without="true" title="search">
<label for="` + hashes.search + `" data-i18n="search">Search</label>
<span class="field"><input type="text" id="` + hashes.search + `" name="search" data-i18n="search" data-i18n-without="true" placeholder="Search..." /></span>
<span class="items">
<label class="checkbox" for="` + hashes.meanings + `" data-i18n="meanings" data-i18n-without="true" title="Meanings">
<input type="checkbox" id="` + hashes.meanings + `" name="meanings"` + (wmarkdown.settings("meanings") ? `checked` : ``) + ` />
<span data-icon="checkbox"></span>
<span data-i18n="meanings">Meanings</span>
</label>
<label class="checkbox" for="` + hashes.case_sensitive + `" data-i18n="case_sensitive" data-i18n-without="true" title="Case sensitive">
<input type="checkbox" id="` + hashes.case_sensitive + `" name="case_sensitive"` + (wmarkdown.settings("case_sensitive") ? `checked` : ``) + ` />
<span data-icon="checkbox"></span>
<span data-i18n="case_sensitive">Case sensitive</span>
</label>
<label class="checkbox" for="` + hashes.autosearch + `" data-i18n="autosearch" data-i18n-without="true" title="Autosearch">
<input type="checkbox" id="` + hashes.autosearch + `" name="autosearch"` + (wmarkdown.settings("autosearch") ? `checked` : ``) + ` />
<span data-icon="checkbox"></span>
<span data-i18n="autosearch">Autosearch</span>
</label>
<button type="button" data-i18n="search" data-without="true" title="Search" onclick="` + wmarkdown.object_name + `.dictionary.search(this, event);">
<span data-icon="search"></span>
<span data-i18n="search">Search</span>
</button>
</span>
</div>
<div class="table">
<table>
<thead>` + header + `</thead>
<tbody>` + body + `</tbody>
<tfoot>` + header + `</tfoot>
</table>
</div>
</fieldset>
`);
}
const load_links = (links, callback) => load(links, 0, dictionary => {
mount(dictionary, wmarkdown.item_self.querySelector(".content>.content-box"));
setTimeout(scroll_event_function, 10);
typeof callback == "function" && callback(dictionary);
}, [], []);
this.build = () => wmarkdown.item_self.querySelectorAll(".wdictionary[data-status=unloaded]").forEach(items => {
items.setAttribute("data-status", "loading");
load_links(JSON.parse(wmarkdown.utf8_decode(atob(items.getAttribute("data-json")))), dictionary => {
build(dictionary, items.parentNode.insertBefore(document.createElement("form"), items));
});
});
this.show = (element, event) => {
element.style.zIndex = ++ z_index;
element.setAttribute("data-show", true);
};
this.hide = (element, event) => element.setAttribute("data-show", false);
this.search = (element, event) => {
if(!element)
return;
while((!element.classList || !element.classList.contains("data-dictionary-table")) && (element = element.parentNode));
let text = element.querySelector("[name=search]").value;
if(text == cache)
return;
cache = text;
const meanings = element.querySelector("[name=meanings]").checked,
case_sensitive = element.querySelector("[name=case_sensitive]").checked;
!case_sensitive && (text = text.toLowerCase());
element.querySelectorAll("tbody>tr").forEach(word => {
let words = word.querySelector("[data-field=words]").innerText,
description = word.querySelector("[data-field=description]").innerText;
if(!case_sensitive){
words = words.toLowerCase(),
description = description.toLowerCase();
};
word.setAttribute("data-visible", (
!text ||
words.indexOf(text) != -1 ||
(meanings && description.indexOf(text) != -1)
));
});
};
construct();
};

View File

@ -1,299 +0,0 @@
WMarkDown.Dictionary = function(wmarkdown){
const self = this;
let started = false,
scroll_event = null,
z_index = 5,
thread = null,
cache = "";
const construct = () => {};
const scroll_event_function = event => {
const content_box = wmarkdown.item_self.querySelector(".content"),
half_width = content_box.offsetWidth / 2,
half_height = content_box.offsetHeight / 2,
font_size = window.getComputedStyle(wmarkdown.item_self, null).getPropertyValue("font-size");
content_box.querySelectorAll(".content .data-dictionary-item").forEach(item => {
const properties = item.getBoundingClientRect();
item.setAttribute("data-left", properties.x - content_box.offsetLeft > half_width);
item.setAttribute("data-top", properties.y - content_box.offsetTop < half_height);
item.querySelector(".box").style.fontSize = font_size;
});
};
const autosearch = () => wmarkdown.item_self.querySelectorAll(".data-dictionary-table").forEach(searcher => {if(searcher.querySelector("[name=autosearch]").checked)self.search(searcher, null)});
this.start = () => {
if(started)
return;
started = true;
scroll_event = wmarkdown.item_self.querySelector(".content").addEventListener("scroll", scroll_event_function);
self.build();
thread = wmarkdown.threads_add(autosearch);
};
const process_description = description => {
if(!description)
return "";
if(description.substr)
return description;
if(typeof description != "object")
return "" + description;
let html = `<span class="paragraph">`;
description.forEach(line => html += " " + (line || `</span><span class="paragraph">`));
html += `</span>`;
return html;
}
const mount = (dictionary, item) => item.childNodes.forEach(node => {
if(node.nodeType != Node.TEXT_NODE){
if(!(node.tagName && node.tagName.toLowerCase() == "a") && !(node.classList && node.classList.contains("code-block")))
mount(dictionary, node);
return;
};
let html = node.textContent;
if(!node.textContent || !/[^\r\n\s\t]/.test(html))
return;
const nodes = [];
dictionary.forEach(item => item.patterns.forEach((pattern, i) => {if(pattern)html = html.replace(pattern, (...values) => {
let html = ``;
const result = item.results[i].replace(/\$(\d)/g, (all, i) => values[Number(i)] || "");
(item.links ? item.links.push ? item.links : [item.links] : []).forEach(link => html += `<a href="` + link + `" title="` + link + `" target="_blank" data-site="` + link.replace(/^[^\:]+\:\/{2}([^\/]+)(\/(.+)?)?$/, "$1").replace(/[^a-z\d]+/g, "_") + `"></a>`);
nodes.push(`
<span
class="data-dictionary-item"
onmouseover="` + wmarkdown.object_name + `.dictionary.show(this, event);"
onmouseout="` + wmarkdown.object_name + `.dictionary.hide(this, event);"
data-show="false"
>
<span class="box">
<span class="result">` + result + `</span>
<span class="description">` + process_description(item.description) + `</span>
<span class="links">` + html + `</span>
</span>
<span class="text">` + result + `</span>
</span>
`);
return '###' + (nodes.length - 1) + "###";
})}));
html = html.replace(/\#{3}(\d+)\#{3}/g, (...arguments) => nodes[Number(arguments[1])]);
if(html == node.textContent)
return;
const span = node.parentNode.insertBefore(document.createElement("span"), node);
span.setAttribute("class", "data-dictionary-block");
span.innerHTML = html;
node.remove();
});
this.build = () => {
const dictionary = [],
patterns_used = [];
wmarkdown.item_self.querySelectorAll(".data-dictionary[data-json]").forEach(items => {
const data = JSON.parse(wmarkdown.utf8_decode(atob(items.getAttribute("data-json"))));
if(typeof data != "object")
return;
if(data.dictionary)
data.dictionary.forEach(item => {
const json = item.pattern.substr ? item.pattern : JSON.stringify(item.pattern);
if(patterns_used.includes(json))
return;
patterns_used.push(json);
let pattern;
const patterns = [];
if(!item.pattern)
return;
(item.pattern.push ? item.pattern : [item.pattern]).forEach(pattern => {
const pattern_closed = pattern.lastIndexOf("/");
try{
if(pattern_closed)
pattern = new RegExp(pattern.substr(1, pattern_closed - 1), pattern.substr(pattern_closed + 1));
}catch(exception){};
patterns.push(pattern || null);
});
if(patterns)
dictionary.push(Object.assign({}, item, {
patterns : patterns,
results : item.result.push ? item.result : [item.result]
}));
});
});
mount(dictionary, wmarkdown.item_self.querySelector(".content>.content-box"));
setTimeout(scroll_event_function, 10);
const dictionary_input = wmarkdown.item_self.querySelector(".data-dictionary");
if(!dictionary_input)
return;
const item = dictionary_input.parentNode.insertBefore(document.createElement("form"), dictionary_input),
header = (`
<tr>
<th data-field="i" data-i18n="i">i</th>
<th data-field="patterns" data-i18n="patterns">Patterns</th>
<th data-field="results" data-i18n="results">Results</th>
<th data-field="words" data-i18n="words">Words</th>
<th data-field="meanings" data-i18n="meanings">Meanings</th>
<th data-field="urls" data-i18n="urls">URLs</th>
</tr>
`),
hashes = {};
let body = ``;
["search", "autosearch", "meanings", "case_sensitive"].forEach(key => hashes[key] = wmarkdown.hash());
dictionary.forEach((item, i) => {
let urls = ``,
words = '';
const results = item.words || item.results;
(item.links ? item.links.push ? item.links : [item.links] : []).forEach(link => urls += `<li><a href="` + link + `" target="_blank" title="` + link + `">` + link + `</a></li>`);
(results.push ? results : [results]).forEach(word => words += '<li>' + word + '</li>');
body += (`
<tr data-i="` + i + `" data-visible="true">
<td data-field="i">` + i + `</td>
<td data-field="patterns"><ul><li>` + item.patterns.join(`</li><li>`) + `</li></ul></td>
<td data-field="results"><ul><li>` + item.results.join(`</li><li>`) + `</li></ul></td>
<td data-field="words"><ul>` + words + `</ul></td>
<td data-field="description">` + (item.description.push ? item.description.join(" ") : item.description) + `</td>
<td data-field="urls"><ul>` + urls + `</ul></td>
</tr>
`);
});
item.setAttribute("class", "data-dictionary-table");
item.setAttribute("action", window.location.hash);
item.setAttribute("method", "get");
item.setAttribute("onsubmit", "return false;");
item.innerHTML = (`
<fieldset>
<legend data-i18n="search">Search</legend>
<div class="search" data-i18n="search" data-i18n-without="true" title="search">
<label for="` + hashes.search + `" data-i18n="search">Search</label>
<span class="field"><input type="text" id="` + hashes.search + `" name="search" data-i18n="search" data-i18n-without="true" placeholder="Search..." /></span>
<span class="items">
<label class="checkbox" for="` + hashes.meanings + `" data-i18n="meanings" data-i18n-without="true" title="Meanings">
<input type="checkbox" id="` + hashes.meanings + `" name="meanings"` + (wmarkdown.settings("meanings") ? `checked` : ``) + ` />
<span data-icon="checkbox"></span>
<span data-i18n="meanings">Meanings</span>
</label>
<label class="checkbox" for="` + hashes.case_sensitive + `" data-i18n="case_sensitive" data-i18n-without="true" title="Case sensitive">
<input type="checkbox" id="` + hashes.case_sensitive + `" name="case_sensitive"` + (wmarkdown.settings("case_sensitive") ? `checked` : ``) + ` />
<span data-icon="checkbox"></span>
<span data-i18n="case_sensitive">Case sensitive</span>
</label>
<label class="checkbox" for="` + hashes.autosearch + `" data-i18n="autosearch" data-i18n-without="true" title="Autosearch">
<input type="checkbox" id="` + hashes.autosearch + `" name="autosearch"` + (wmarkdown.settings("autosearch") ? `checked` : ``) + ` />
<span data-icon="checkbox"></span>
<span data-i18n="autosearch">Autosearch</span>
</label>
<button type="button" data-i18n="search" data-without="true" title="Search" onclick="` + wmarkdown.object_name + `.dictionary.search(this, event);">
<span data-icon="search"></span>
<span data-i18n="search">Search</span>
</button>
</span>
</div>
<div class="table">
<table>
<thead>` + header + `</thead>
<tbody>` + body + `</tbody>
<tfoot>` + header + `</tfoot>
</table>
</div>
</fieldset>
`);
};
this.show = (element, event) => {
element.style.zIndex = ++ z_index;
element.setAttribute("data-show", true);
};
this.hide = (element, event) => element.setAttribute("data-show", false);
this.search = (element, event) => {
if(!element)
return;
while((!element.classList || !element.classList.contains("data-dictionary-table")) && (element = element.parentNode));
let text = element.querySelector("[name=search]").value;
if(text == cache)
return;
cache = text;
const meanings = element.querySelector("[name=meanings]").checked,
case_sensitive = element.querySelector("[name=case_sensitive]").checked;
if(!case_sensitive)
text = text.toLowerCase();
element.querySelectorAll("tbody>tr").forEach(word => {
let words = word.querySelector("[data-field=words]").innerText,
description = word.querySelector("[data-field=description]").innerText;
if(!case_sensitive){
words = words.toLowerCase(),
description = description.toLowerCase();
};
word.setAttribute("data-visible", (
!text ||
words.indexOf(text) != -1 ||
(meanings && description.indexOf(text) != -1)
));
});
};
construct();
};

View File

@ -1,241 +0,0 @@
WMarkDown.Multimedia = function(wmarkdown){
const self = this;
let started = false;
const construct = () => {};
const error = (element, type) => {
element.parentNode.setAttribute("data-status", "error");
element.parentNode.setAttribute("data-error-type", type);
return null;
};
this.image_try_next = (element, event) => {
if(!element.hasAttribute("data-i") || !element.hasAttribute("data-src"))
return error(element, "no_data");
let images;
try{
if(!(images = JSON.parse(atob(element.getAttribute("data-src")))))
return error(element, "no_json");
}catch(exception){
console.error(exception);
return error(element, "exception");
};
const i = Number(element.getAttribute("data-i"));
if(isNaN(i))
return error(element, "i_is_nan");
if(i >= images.length)
return error(element, "ended")
const image = new Image();
image.src = images[i];
image.onload = () => {
const anchor = element.parentNode.querySelector("a");
element.setAttribute("src", images[i]);
element.parentNode.setAttribute("data-status", "loaded");
element.parentNode.querySelector(".image-style").style.backgroundImage = "url('" + images[i] + "')";
if(anchor){
anchor.setAttribute("href", images[i]);
anchor.innerText = images[i];
};
};
image.onerror = () => {
element.setAttribute("data-i", i + 1);
self.image_try_next(element, event);
};
};
this.video_try_next = (element, event) => {
if(!element.hasAttribute("data-i") || !element.hasAttribute("data-src"))
return error(element, "no_data");
let videos;
try{
if(!(videos = JSON.parse(atob(element.getAttribute("data-src")))))
return error(element, "no_json");
}catch(exception){
console.error(exception);
return error(element, "exception");
};
const i = Number(element.getAttribute("data-i"));
if(isNaN(i))
return error(element, "i_is_nan");
if(i >= videos.length)
return error(element, "ended")
const video = document.createElement("video");
video.src = videos[i];
video.onloadstart = () => {
element.setAttribute("src", videos[i]);
wmarkdown.get_mime(videos[i], mime => element.setAttribute("type", mime));
with(element.parentNode.querySelector("a")){
setAttribute("href", videos[i]);
innerText = videos[i];
};
element.parentNode.setAttribute("data-status", "loaded");
video.remove();
};
video.onerror = () => {
element.setAttribute("data-i", i + 1);
self.image_try_next(element, event);
video.remove();
};
};
this.audio_try_next = (element, event) => {
if(!element.hasAttribute("data-i") || !element.hasAttribute("data-src"))
return error(element, "no_data");
let audios;
try{
if(!(audios = JSON.parse(atob(element.getAttribute("data-src")))))
return error(element, "no_json");
}catch(exception){
console.error(exception);
return error(element, "exception");
};
const i = Number(element.getAttribute("data-i"));
if(isNaN(i))
return error(element, "i_is_nan");
if(i >= audios.length)
return error(element, "ended")
const audio = new Audio();
audio.src = audios[i];
audio.onloadstart = () => {
element.setAttribute("src", audios[i]);
wmarkdown.get_mime(audios[i], mime => element.setAttribute("type", mime));
with(element.parentNode.querySelector("a")){
setAttribute("href", audios[i]);
innerText = audios[i];
};
element.parentNode.setAttribute("data-status", "loaded");
};
audio.onerror = () => {
element.setAttribute("data-i", i + 1);
self.image_try_next(element, event);
};
};
const embed_try = embed => {
if(!embed.hasAttribute("data-platform") || !embed.hasAttribute("data-id"))
return;
embed.setAttribute("data-status", "mounted");
switch(embed.getAttribute("data-platform")){
case "youtube":
with(embed.appendChild(document.createElement("iframe"))){
setAttribute("src", "https://www.youtube.com/embed/" + embed.getAttribute("data-id"));
setAttribute("title", "YouTube video player");
setAttribute("frameborder", 0);
setAttribute("style", "position:absolute;top:0em;left:0em;width:100%;height:100%;");
setAttribute("allow", "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture");
setAttribute("allowfullscreen", true);
};
break;
case "vimeo":
with(embed.appendChild(document.createElement("iframe"))){
setAttribute("src", "https://player.vimeo.com/video/" + embed.getAttribute("data-id"));
setAttribute("frameborder", 0);
setAttribute("style", "position:absolute;top:0em;left:0em;width:100%;height:100%;");
setAttribute("allow", "autoplay; fullscreen; picture-in-picture");
setAttribute("allowfullscreen", true);
};
break;
case "facebook":
// <iframe src="https://www.facebook.com/plugins/video.php?height=314&830479191217676%2F&show_text=false&width=560" allowFullScreen="true"></iframe>
// <iframe src="https://www.facebook.com/plugins/video.php?height=314&href=https%3A%2F%2Fwww.facebook.com%2Fzorman.videos.7%2Fvideos%2F830479191217676%2F&show_text=false&width=560" width="560" height="314" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe>
// https://www.facebook.com/gaming/497870250231404/videos/830479191217676/
with(embed.appendChild(document.createElement("iframe"))){
setAttribute("src", "https://www.facebook.com/video.php?v=" + embed.getAttribute("data-id"));
setAttribute("style", "position:absolute;top:0em;left:0em;width:100%;height:100%;border:none;overflow:hidden;");
setAttribute("scrolling", "no");
setAttribute("frameborder", 0);
setAttribute("allow", "autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share");
setAttribute("allowfullscreen", true);
};
break;
case "twitch":
// <iframe src="https://player.twitch.tv/?video=1025807282&parent=www.example.com" scrolling="no" height="378" width="620"></iframe>
// https://www.twitch.tv/videos/1025807282
with(embed.appendChild(document.createElement("iframe"))){
setAttribute("src", "https://player.twitch.tv/?video=" + embed.getAttribute("data-id") + "&parent=wmarkdown.k3y.pw");
setAttribute("style", "position:absolute;top:0em;left:0em;width:100%;height:100%;");
setAttribute("scrolling", "no");
setAttribute("frameborder", 0);
setAttribute("allow", "autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share");
setAttribute("allowfullscreen", true);
};
break;
};
};
const execute_in_range = (item, range, callback) => {
const y = item.getBoundingClientRect().y;
if(y < range && y > -range){
item.setAttribute("data-status", "loading");
callback();
};
};
this.on_scroll = (event) => {
const range = wmarkdown.item_self.querySelector(".content").offsetHeight * wmarkdown.settings("onload_media_range");
wmarkdown.item_self.querySelectorAll(".multimedia-box>[data-status=unloaded]").forEach(item => execute_in_range(item, range, () => {
const media = item.querySelector("audio[onerror]") || item.querySelector("[onerror]");
media.onerror(media);
}));
wmarkdown.item_self.querySelectorAll(".multimedia-box>[data-type=embed]>[data-status=unmounted]").forEach(item => execute_in_range(item, range, () => embed_try(item)));
};
this.start = () => {
if(started)
return;
started = true;
const content = wmarkdown.item_self.querySelector(".content");
self.on_scroll(null);
wmarkdown.item_self.querySelector(".content").addEventListener("scroll", self.on_scroll);
};
this.go = (element, event) => window.open(element.querySelector("[src]").getAttribute("src"), "_blank");
construct();
};

View File

@ -1,78 +0,0 @@
WMarkDown.WMonitor = function(wmarkdown){
const self = this;
let started = false;
const construct = () => {};
this.start = () => {
if(started)
return;
started = true;
self.build();
};
this.build = () => {
const blocks = [];
wmarkdown.item_self.querySelectorAll("[data-wmonitor][data-status=unloaded]").forEach(item => {
item.setAttribute("data-status", "loading");
item.innerHTML = (`
<form method="post" action="#" onsubmit="return false">
<fieldset>
<legend data-i18n="monitor">Monitor</legend>
<ul>
<li class="likes" data-value="0" data-i18n="likes" data-i18n-without="true" title="Likes" onclick="` + wmarkdown.object_name + `.wmonitor.set_like(this, event);">
<span data-icon="likes"></span>
<span class="value">0</span>
</li>
<li class="dislikes" data-value="0" data-i18n="dislikes" data-i18n-without="true" title="Dislikes" onclick="` + wmarkdown.object_name + `.wmonitor.set_dislike(this, event);">
<span data-icon="dislikes"></span>
<span class="value">0</span>
</li>
<li class="views" data-value="0" data-i18n="views" data-i18n-without="true" title="Views">
<span data-icon="views"></span>
<span class="full">0</span>
</li>
<li class="comments" data-value="0" data-i18n="comments" data-i18n-without="true" title="Comments" onclick="` + wmarkdown.object_name + `.wmonitor.view_comments(this, event);">
<span data-icon="comments"></span>
<span class="value">0</span>
</li>
</ul>
</fieldset>
</form>
`);
blocks.push(item.getAttribute("data-wmonitor"));
});
console.log(blocks);
};
this.set_like = (item, event) => {
console.log("like");
};
this.set_dislike = (item, event) => {
console.log("dislike");
};
this.view_comments = (item, event) => {
console.log("comments");
};
construct();
};

1343
Public/ecma/WMarkDown.ecma.js Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,63 +0,0 @@
WMarkDown.converter = function(wmd, input){
const self = this,
cache = [];
let started = false;
let modules = this.modules;
const construct = () => {
WMarkDown.Converter.Modules && (modules = self.modules = new WMarkDown.Converter.Modules(wmd, input));
};
this.start = callback => {
const end = status => typeof callback == "function" && callback(status)
if(started){
end(false);
return false;
};
started = true;
end(true);
return true;
};
this.process = wmd_script => {
let i = 0,
html = ``;
const l = cache.length,
indexes = {},
modules_keys = modules.get_keys();
for(; i < l; i ++)
if(cache[i] === null)
break;
cache[i] = {};
while(modules_keys.length){
const clean_i = [];
modules_keys.forEach((key, i) => {
if(!indexes[key] || indexes[key].index < 0){
};
});
clean_i.reverse().forEach(i => {
delete indexes[modules_keys[i]];
modules_keys.splice(i, 1);
});
};
};
construct();
};

View File

@ -1,37 +0,0 @@
WMarkDown = function(input){
const self = this;
let started = false;
let converter = this.converter;
const construct = () => {
WMarkDown.Converter && (converter = self.converter = new WMarkDown.Converter(self, input));
};
this.start = callback => {
const end = status => typeof callback == "function" && callback(status)
if(started){
end(false);
return false;
};
started = true;
end(true);
self.launch(["converter"], () => end(true));
return true;
};
this.launch = (blocks, callback, i) => self[blocks[i || (i = 0)]] && self[blocks[i]].start ? self[blocks[i]].start(() => launch(blocks, callback, i + 1)) : launch(blocks, callback, i + 1);
this.convert = wmd_code => self.converter ? self.converter.process(wmd_code) : null
construct();
};

View File

@ -1,49 +0,0 @@
WMarkDown.Converter.Modules = function(wmd, input){
const self = this,
excluded_keys = ["start", "get_keys"],
modules_keys = [];
let started = false;
const construct = () => {
const to_snake_fragment = string => string ? " " + string.toLowerCase() : "";
Object.keys(WMarkDown.Converter.Modules).forEach(key => {
if(!excluded_keys.includes(key)){
const key = key.replace(/([A-Z]+)?([A-Z])/g, (...matches) => (" " +
to_snake_fragment(matches[1]) +
to_snake_fragment(matches[2])
));
self[key] = new WMarkDown.Converter.Modules[key](wmd);
!(self[key].pattern instanceof Array) && (self[key].pattern = [self[key].pattern]);
modules_keys.push(key);
};
});
};
this.start = callback => {
const end = status => typeof callback == "function" && callback(status)
if(started){
end(false);
return false;
};
started = true;
end(true);
return true;
};
this.get_keys = () => [].concat(modules_keys);
construct();
};

View File

@ -1,10 +0,0 @@
WMarkDown.converter.Modules.Headers = function(wmd){
this.pattern = [
/^(\#{1,6})([^\r\n\#]+)(\#{1,6})?$/m,
/^(\={1,6})([^\r\n\=]+)(\={1,6})?$/m
];
this.process = matches => `<h` + matches[1].length + `>` + matches[2].trim() + `</h` + matches[1].length + `>`;
};

BIN
Public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -1,18 +0,0 @@
<?php
header("content-type: text/plain");
echo shell_exec("git pull 2>&1");
// header("content-type: text/plain");
//
// $fetch = trim(shell_exec("git fetch 2>&1"));
//
// if(!preg_match('/(From|Desde) https:\/\//', $fetch)){
// echo "There are not any updates.";
// // echo "There is no update.";
// exit(0);
// };
//
// $pull = shell_exec("git pull 2>&1");
//
// echo $fetch . "\n\n" . $pull . "\n\nIt is already updated successfully.";

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
Public/images/WMarkDown.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="200mm"
height="200mm"
viewBox="0 0 200 200"
version="1.1"
id="svg1"
inkscape:version="1.3.1 (9b9bdc1480, 2023-11-25, custom)"
sodipodi:docname="WMarkDown.logo.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="0.73584456"
inkscape:cx="396.82294"
inkscape:cy="379.15616"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="32"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#880044;stroke-width:6.07164;stroke-linecap:round;fill-opacity:1"
id="rect1"
width="41.960438"
height="183.00716"
x="44.875092"
y="10.167063"
transform="matrix(1,0,-0.18053701,0.98356819,0,0)" />
<path
id="rect1-5"
style="fill:#008844;stroke-width:5.96378;stroke-linecap:round;fill-opacity:1"
d="M 142.01134,9.9999064 115,59.999955 h 15.43485 L 153.84112,189.99977 H 195 L 171.59373,59.999955 h 15.43485 z" />
<path
id="rect2"
style="display:none;fill:#000000;stroke-width:5.07494;stroke-linecap:round"
d="M 75.315816,90.000191 56.960347,189.99977 H 86.740442 L 100.0001,117.38095 V 90.000191 Z m 29.683974,0 v 27.383339 l 13.25914,72.61624 h 30.58211 L 130.83646,90.000191 Z"
sodipodi:insensitive="true" />
<path
style="fill:#880044;stroke-width:8.10996;stroke-linecap:round;fill-opacity:1"
d="m 53.28657,121.54941 -20.597053,48.41236 -5.5e-5,39.98694 h 26.828853 l 16.159198,-61.55614 -6.2e-5,-26.84316 z"
transform="matrix(1,0,0.42545023,0.90498183,0,0)"
id="path4" />
<path
style="fill:#008844;stroke-width:8.10996;stroke-linecap:round;fill-opacity:1"
d="M 25.89651,121.54941 6.3246241,144.55073 -32.362382,209.94871 H -6.3345129 L 27.689336,169.96292 48.286875,121.54941 Z"
transform="matrix(1,0,0.42545023,0.90498183,0,0)"
id="rect3" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

29
Public/index.w.md Normal file
View File

@ -0,0 +1,29 @@
```wmd-options
language = es
title_i18n = wmarkdown_title_documentation
title_text = Documentación - WMarkDown
```
<!-- [[wmd]] -->
[[include doc/es/description.md]]
[[include doc/es/projects.w.md]]
[[include doc/es/design.w.md]]
[[include doc/es/integration.w.md]]
[[include doc/es/manual.w.md]]
[[include doc/es/faq.w.md]]
[[include doc/es/bugs.w.md]]
[[include doc/es/targets.w.md]]
[[include doc/es/opinions.w.md]]
[[include doc/es/donates.w.md]]
<!-- [[wmd]] -->

View File

@ -0,0 +1,660 @@
[[
[
["/\\bwmarkdown\\b/ig", "WMarkDown"],
["/\\b(wmd\\b|w\\.m\\.d\\.|w\\. +m\\. +d\\. +)/ig", "WMD"]
], [
"El WMarkDown es un proyecto que nos permite hacer documentación y textos ",
"formateados desde un lenguaje de marcas sencillo que parte como idea de ",
"lenguajes de marcas como MarkDown y MediaWiki, personalizado a usos más ",
"extensos, flexibles y fáciles."
], [
"https://wmarkdown.k3y.pw/",
"https://git.k3y.pw/Whalers/WMarkDown"
]
], [
["/\\bmedia *wiki\\b/gi", "MediaWiki"], [
"MediaWiki es un proyecto Free Open Source que viene siendo la base de Webs ",
"como Wikipedia entre otros, el cual permite gestionar publicaciones y ",
"documentación en un entorno flexible, abierto y extendido con una gran ",
"comunidad que lo sustenta."
], [
"https://www.mediawiki.org/",
"https://es.wikipedia.org/wiki/MediaWiki",
"https://github.com/wikimedia/mediawiki"
]
], [
[
["/\\bmarkdown\\b/gi", "Markdown"],
["/(?<!\\.)\\b\\bmd\\b|\\b(m\\.d\\.|m\\. +d\\. +)/ig", "MD"]
], [
"Markdown es un estándar de lenguaje de marcas que se desarrolló para facilitar ",
"la documentación con texto formateado en los proyectos, tanto a un nivel visual ",
"mediante texto plano como una vez formateado."
], [
"https://daringfireball.net/projects/markdown",
"https://daringfireball.net/projects/markdown/syntax",
"https://es.wikipedia.org/wiki/Markdown",
"https://www.markdownguide.org/"
]
], [
[
["/\\bpython\\b/ig", "Python"],
["/(?<!\\.)\\bpy\\b/ig", "Py"],
["/(?<!\\.)\\bpyc\\b/ig", "PyC"]
], [
"Python es un lenguaje de programación muy extendido de uso general precompilado ",
"con alta versatilidad muy usado en cómputo. La extensión de sus archivos de Script ",
"es '.py' y la de los compilados por defecto '.pyc', aunque éstos últimos dependen ",
"del compilador."
], [
"https://www.python.org/",
"https://es.wikipedia.org/wiki/Python",
"https://es.wikibooks.org/wiki/Python"
]
], [
[
["/(?<!\\.)\\b(html(5)?\\b|h\\.t\\.m\\.l\\.|h\\. +t\\. +m\\. +l\\. +)/ig", "HTML$2"]
], [
"HTML es un lenguaje de marcas basado en XML pero con una estructura predefinida ",
"que condiciona como han de exponerse los datos, entendiendo cada elemento como una ",
"estructura de formato para la presentación de la información, normalmente, ",
"orientado a entornos Web."
], [
"https://www.w3.org/html/",
"https://html.spec.whatwg.org/multipage/",
"https://es.wikipedia.org/wiki/HTML",
"https://developer.mozilla.org/es/docs/Web/HTML",
"https://www.w3schools.com/html/",
"https://lenguajehtml.com/",
"https://desarrolloweb.com/home/html"
]
], [
["/(?<!\\.)\\b(css\\b|c\\.(s\\.){2}|c\\. +(s\\. +){2})/ig", "CSS"], [
"CSS es un lenguaje de marcas que sirve para separar lo que son los estilos de la ",
"estructura de la información que se quiere presentar. Normalmente va orientado a ",
"entornos Web sobre HTML así como para estructurar y darle diseño y formato a ",
"contenidos XML, de ahí su sistema de selectores."
], [
"https://www.w3.org/Style/CSS/",
"https://drafts.csswg.org/",
"https://es.wikipedia.org/wiki/CSS",
"https://developer.mozilla.org/es/docs/Web/CSS",
"https://www.w3schools.com/css/",
"https://lenguajecss.com/css/introduccion/que-es-css/"
]
], [
[
["/\\b(sass\\b|s\\.a\\.(s\\.){2}|s\\. +a\\. +(s\\. +){2})/ig", "Sass"],
["/(?<!\\.)\\b(scss\\b|s\\.c\\.(s\\.){2}|s\\. +c\\. +(s\\. +){2})/ig", "SCSS"]
], [
"SASS es un lenguaje de marcas que extiende el propio lenguaje CSS para facilitar el ",
"desarrollo de estilos de tal forma que una vez se procese el SASS, éste retorne un ",
"archivo CSS mapeado contra el propio archivo SCSS en el que se desarrolla SASS."
], [
"https://sass-lang.com/",
"https://es.wikipedia.org/wiki/Sass",
"https://github.com/sass/sass"
]
], [
["/\\b(srx01|tars[yi](er(isco)?)?)\\b/ig", "Tarsier"], [
"Un Tarsierisco de pura cepa."
], [
"https://git.k3y.pw/Tarsier"
]
], [
["/\\b(srx00|ky *man)\\b/ig", "KyMAN"], [
"KyMAN es el desarrollador de AnP y de los desarroladores originales de WMarkDown, ",
"entre otros. Sus lenguajes principales son JavaScript/ECMAScript, Python, PHP, Java, C#, ",
"MySQL, SQL Server, SQLite, HTML y SASS/CSS."
], [
"https://kyman.k3y.pw/",
"https://git.k3y.pw/KyMAN",
"https://github.com/0KyMAN0/"
]
], [
["/\\b(srx02|angelus)\\b/ig", "Angelus"], [
"Cine; Running, aunque ahora ya no corro; y Chocolate xD."
], [
"https://git.k3y.pw/Angelus"
]
], [
["/\\b(srx03|[1i]noro)\\b/ig", "1noro"], [
"Entusiasta das redes, da programación e administración se sistemas. Centrandome sempre no software libre."
], [
"https://github.com/1noro",
"https://rats.land/",
"https://git.k3y.pw/1noro"
]
], [
["/\\bsrx04\\b/ig", "Srx04"], [
"Srx04 es un@ divulgador@, Gamer y desarrollador@ que participó en ciertos proyectos ",
"como MuWeb, AnP, WMarkDown, etc."
], []
], [
[
["/\\b(a[n&]p\\b|a\\.n\\.p\\.|a\\. +n\\. +p\\. +)/ig", "AnP"],
["/\\battach +and +play\\b/gi", "Attach and Play"]
], [
"AnP (Attach and Play) es un proyecto a modo Framework para desarrollar aplicaciones, ",
"principalmente aplicaciones Web aunque se puede extender a juegos, aplicaciones de ",
"escritorio o de terminal/consola de comandos, desarrollado por KyMAN."
], [
"https://anp.k3y.pw/",
"https://git.k3y.pw/AnP/AnP"
]
], [
["/\\b((?<!\\.)xml\\b|x\\.m\\.l\\.|x\\. +m\\. +l\\. +)/ig", "XML"], [
"XML es un formato de almacenamiento de datos en texto plano basado en marcas para la ",
"encapsulación por etiquetas, las cuales se identifican mediante aperturas y cierres de ",
"diamantes, es decir, '&lt;' y '&gt;'."
], [
"https://www.w3.org/XML/",
"https://es.wikipedia.org/wiki/Extensible_Markup_Language",
"https://developer.mozilla.org/es/docs/Web/XML/XML_introduction",
"https://support.microsoft.com/es-es/office/xml-para-no-iniciados-a87d234d-4c2e-4409-9cbc-45e4eb857d44"
]
], [
[
["/\\b(dpis?\\b|d\\.p\\.i\\.|d\\. +p\\. +i\\. +)/ig", "DPI"],
["/\\b(p{3}s?\\b|(p\\.){3}|(p\\. +){3})/ig", "PPP"],
["/\\bpuntos +(x|por) +pulgada\\b/gi", "Puntos Por Pulgada"],
["/\\bdots +per +inch\\b/gi", "Dots Per Inch"]
], [
"Los DPI o Puntos por Pulgada, es una unidad de medida para relativizar a la densidad ",
"del número de píxels por pulgada en la pantalla o imagen."
], [
"https://es.wikipedia.org/wiki/Puntos_por_pulgada",
"https://www.pccomponentes.com/dpi-que-son-para-que-sirven-cual-es-su-funcion-en-raton-gaminge",
"https://www.sony.es/electronics/support/articles/00027623"
]
], [
["/\\blicencia +(mit\\b|m\\.i\\.t\\.|m\\. +i\\. +t\\. +)/ig", "Licencia MIT"], [
"La Licencia MIT es una licencia Open Source del MIT para compartir abiertamente sin ",
"necesidad de nombrar al o los autores, y que permite la modificación y comercialización ",
"del Software."
], [
"https://es.wikipedia.org/wiki/Licencia_MIT",
"https://opensource.org/license/mit",
"https://www.licen.cc/es/licencias/mit/",
"https://www.youtube.com/watch?v=5oMm0MBPK6g"
]
], [
[
["/\\b(mit\\b|m\\.i\\.t\\.|m\\. +i\\. +t\\. +)/ig", "MIT"],
["/\\bmas{1,2}achuset{1,2}s? +institute +of +technology\\b/gi", "Massachusetts Institute of Technology"],
["/\\binstituto +(de +tecnolog[ií]a|tecnol[óo]gico) +de +mas{1,2}achuset{1,2}s?\\b/gi", "Instituto de Tecnología de Massachusetts"]
], [
"El MIT, o Instituto Tecnológico de Massachusetts, es la Universidad Americana de ",
"Tecnología por excelencia, donde está el desarrollo de los Robots como Atlas; o la ",
"famosa licencia de Software Libre MIT."
], [
"https://www.mit.edu/",
"https://es.wikipedia.org/wiki/Instituto_de_Tecnolog%C3%ADa_de_Massachusetts"
]
], [
[
["/\\bopen *source\\b/ig", "Open Source"],
["/\\bsoftware +libre\\b/ig", "Software Libre"],
["/\\bsoftware +de +c[óo]digo +abierto\\b/gi", "Software de Código Abierto"]
], [
"El Open Source es un concepto de dejar público el código fuente de un proyecto para ",
"poder ser compartido y/o analizado por la comunidad. El Free Open Source sería ",
"Software Libre y gratuito."
], [
"https://opensource.org/",
"https://es.wikipedia.org/wiki/Software_de_c%C3%B3digo_abierto"
]
], [
["/\\bgit *hub\\b/ig", "GitHub"], [
"GitHub es la plataforma principal pública para proyectos Git en Internet. Actualmente, ",
"GitHub.com es la opción para gestionar repositorios para proyectos mientras que GitHub.io ",
"es para la creación de páginas Web basadas en el mismo concepto de Git."
], [
"https://github.com/",
"https://github.io/",
"https://es.wikipedia.org/wiki/GitHub"
]
], [
["/\\bgit *lab\\b/ig", "GitLab"], [
"GitLab es el proyecto original público con soporte para Self Hosting para gestión de ",
"proyectos Git. Pero además tiene la opción de hacer uso como herramienta externa como GitHub ",
"sin que éste pertenezca a Microsoft."
], [
"https://gitlab.com/",
"https://es.wikipedia.org/wiki/GitLab",
"https://git-scm.com/book/es/v2/Git-en-el-Servidor-GitLab"
]
], [
["/\\bgitea\\b/ig", "Gitea"], [
"Gitea es una alternativa ultraligera y portable para tener un servidor local Git alternativo ",
"de bajos recursos y gran versatilidad."
], [
"https://gitea.com/",
"https://github.com/go-gitea/gitea",
"https://es.wikipedia.org/wiki/Gitea"
]
], [
["/\\b(?<!\\.)git\\b/ig", "Git"], [
"Git es un Software para hacer control de sistemas de distribución de versiones de un proyecto. ",
"Éste también permite control entre los participantes en grupos y permisos y gestión de la ",
"publicación del código."
], [
"https://git-scm.com/",
"https://github.com/git/git",
"https://es.wikipedia.org/wiki/Git",
"https://learn.microsoft.com/es-es/devops/develop/git/what-is-git",
"https://www.atlassian.com/es/git/tutorials/what-is-git"
]
], [
["/\\berrors *manager\\b/ig", "ErrorsManager"], [
"ErrorsManager es un proyecto multiplataforma desarrollado por KyMAN orientado gestionar códigos ",
"de error con valores Booleanos dentro de bloques String o enteros para simplificar de forma ",
"binaria cada uno de ellos."
], [
"https://errorsmanager.k3y.pw/",
"https://git.k3y.pw/KyMAN/ErrorsManager"
]
], [
[
["/\\bbits? *wise\\b/ig", "Bitwise"],
["/\\bdesplazamientos? *de *bits?\\b/ig", "Desplazamiento de Bit"]
], [
"Bitwise o Desplazamiento de Bit es una práctica de trabajo en binarios que se trata de desaplazar ",
"bits a la derecha o a la izquierda en un valor para operar con ellos. Es una práctica muy utilizada ",
"en informática y realizan operaciones que suelen venir integrados en los procesadores físicos, lo ",
"que hace de estas operaciones un trabajo muy rápido, global y ágil. También se suelen englobar los ",
"operadores de Bits habituales como AND, NOT, OR, etc."
], [
"https://es.wikipedia.org/wiki/Operador_a_nivel_de_bits",
"https://www.w3schools.com/js/js_bitwise.asp",
"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_OR",
"https://ellibrodepython.com/operadores-bitwise",
"https://manual.gamemaker.io/monthly/es/Additional_Information/Bitwise_Operators.htm"
]
], [
[
["/\\bjava *script\\b/ig", "JavaScript"],
["/\\b(?<!\\.)js\\b/ig", "JS"],
["/\\b(?<!\\.)ecma( *script)?\\b/ig", "ECMAScript"],
["/\\btype *script\\b/ig", "TypeScript"],
["/\\b(?<!\\.)ts\\b/gi", "TS"]
], [
"JavaScript, o JS es un lenguaje de programación débilmente tipado y muy flexible sintácticamente, interpretado ",
"y precompilado, conocido principalmente por NodeJS y JavaScript en los navegadores cara programación Web ",
"Front End. Por otro lado, tenemos ECMAScript, que deriva de JavaScript cara un estándar usado en Node ",
"principalmente. También tenemos derivaciones compiladas como TypeScript, TS, que permite definir mejor los ",
"elementos."
], [
"https://ecma-international.org/",
"https://es.wikipedia.org/wiki/JavaScript",
"https://es.wikipedia.org/wiki/ECMAScript",
"https://www.w3schools.com/js/",
"https://developer.mozilla.org/es/docs/Learn/JavaScript/First_steps/What_is_JavaScript",
"https://developer.mozilla.org/es/docs/Glossary/ECMAScript",
"https://es.javascript.info/",
"https://lenguajejs.com/javascript/"
]
], [
["/\\bstring(s)?\\b/ig", "String$1"], [
"Un String es un tipado de valor para referirse a un texto. Básicamente viene siendo una cadena o vector de ",
"caracteres que mediante funciones o estructuras internas del lenguaje permite ser trabajado como un tipado ",
"nativo."
], [
"https://es.wikipedia.org/wiki/Cadena_de_caracteres",
"https://developer.mozilla.org/es/docs/Glossary/String",
"https://docs.python.org/es/3/library/string.html",
"https://learn.microsoft.com/es-es/dotnet/api/system.string?view=net-8.0",
"https://www.php.net/manual/es/language.types.string.php",
"https://www.w3schools.com/js/js_string_methods.asp"
]
], [
[
["/\\b(acl|a\\.c\\.l\\.|a\\. +c\\. +l\\. +)\\b/ig", "ACL"],
["/\\blistas? +de +control +de +acceso\\b/gi", "Lista de Control de Acceso"],
["/\\baccess +control +lists?\\b/gi", "Access Control List"]
], [
"Las ACL o Listas de Control de Acceso son una serie de normas que extienden los permisos de un ",
"entorno UNIX, LDAP o de Red."
], [
"https://es.wikipedia.org/wiki/Lista_de_control_de_acceso",
"https://datatracker.ietf.org/doc/html/rfc4949",
"https://launchpad.net/ubuntu/+source/acl",
"https://packages.debian.org/search?keywords=acl"
]
], [
[
["/\\b(cdn|c\\.d\\.n\\.|c\\. +d\\. +n\\. +)\\b/ig", "CDN"],
["/\\bred +de +distri[bv]uci[oó]n +de +contenidos?\\b/gi", "Red de Distribución de Contenidos"],
["/\\bcontents? +delivery +network\\b/gi", "Content Delivery Network"]
], [
"Una Red de Distribución de Contenidos o CDN viene siendo una red de servidores para distruir y ",
"mantener contenidos en Red de forma centralizada para especializar contenidos de uso común."
], [
"https://es.wikipedia.org/wiki/Red_de_distribuci%C3%B3n_de_contenidos",
"https://www.cloudflare.com/es-es/learning/cdn/what-is-a-cdn/",
"https://aws.amazon.com/es/what-is/cdn/",
"https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc754435(v=ws.11)?redirectedfrom=MSDN"
]
], [
[
["/\\bsql *server\\b/ig", "SQL Server"],
["/\\btransact *sql\\b/gi", "Transact SQL"]
], [
"SQL Server es el motor de Base de Datos relacional de Microsoft, con lenguaje Transact SQL."
], [
"https://www.microsoft.com/es-es/sql-server",
"https://www.tsql.info/",
"https://learn.microsoft.com/es-es/training/modules/get-started-transact-sql-programming/",
"https://es.wikipedia.org/wiki/Transact-SQL",
"https://es.wikipedia.org/wiki/Microsoft_SQL_Server",
"https://www.arsys.es/blog/ms-sql-server"
]
], [
[
["/\\bmy *sql\\b/ig", "MySQL"],
["/\\bmaria *(db|bd)\\b/gi", "MariaDB"]
], [
"MySQL es un motor Free Open Source para Bases de Datos relacionales con lenguaje SQL, actualmente ",
"propiedad de Oracle. Por éste último motivo y para preserver la filosofía anterior a Oracle, existe ",
"el Fork MariaDB como alternativa fuera de Oracle."
], [
"https://www.mysql.com/",
"https://mariadb.org/",
"https://mariadb.com/",
"https://github.com/mysql/mysql-server",
"https://github.com/MariaDB",
"https://es.wikipedia.org/wiki/MySQL",
"https://es.wikibooks.org/wiki/MySQL",
"https://es.wikipedia.org/wiki/MariaDB",
"https://en.wikibooks.org/wiki/MariaDB",
"https://www.arsys.es/blog/mysql"
]
], [
["/\\bsql *l?ite\\b/ig", "SQLite"], [
"SQLite es un pequeño motor para Dases de Datos relacionales, muy simplificado con ausencia de ",
"ciertos elementos como Procedimientos Almacenados aunque con la capacidad de integrar compilados ",
"de C, muy extendido para usos locales."
], [
"https://www.sqlite.org/",
"https://es.wikipedia.org/wiki/SQLite",
"https://github.com/sqlite/sqlite",
"https://docs.python.org/es/3/library/sqlite3.html",
"https://codigofacilito.com/articulos/configurando-sqlite"
]
], [
[
["/\\b((?<!\\.)sql\\b|s\\.q\\.l\\.|(?<! )s\\. +q\\. +l\\. +)/ig", "SQL"],
["/\\bstructured +query +language\\b/gi", "Structured Query Language"],
["/\\blengua[jg]e +de +consulta +estructurada\\b/gi", "Lenguaje de Consulta Estructurada)"]
], [
"SQL es un lenguaje que parte de Pascal para gestión de datos."
], [
"https://www.iso.org/standard/76583.html",
"https://es.wikipedia.org/wiki/SQL",
"https://datademia.es/blog/que-es-sql"
]
], [
[
["/\\b(?<!\\.)(was[mt]|w\\.a\\.s\\.[mt]\\.|(?<! )w\\. +a\\. +s\\. +[mt]\\. +)\\b/gi", "WASM"],
["/\\bweb *assembly\\b/gi", "WebAssembly"]
], [
"WebAssembly, o WASM, es un API de navegador para ejecución de binarios compilados de una forma ",
"específica con el objetivo de agilizar y profundizar en el entorno cliente Web. Actualmente ",
"se pueden desarrollar WASM desde C, Rust, C++, etc."
], [
"https://webassembly.org/",
"https://es.wikipedia.org/wiki/WebAssembly",
"https://developer.mozilla.org/es/docs/WebAssembly"
]
], [
[
["/\\b(gui|(?<!\\.)(g\\.u\\.i\\.|(?<! )g\\. +u\\. +i\\. +))(?![a-zÀ-ÖØ-öø-ÿ])\\b/gi", "GUI"],
["/\\b(ui|(?<!\\.)(u\\.i\\.|(?<! )u\\. +i\\. +))\\b/gi", "UI"],
["/\\bgraphic(al)? +user +interface\\b/gi", "Graphical User Interface"],
["/\\buser +interface\\b/gi", "User Interface"],
["/\\binterfa(z|ce) +gr[aá]fica +del? +usuario\\b/gi", "Interfaz Gráfica de Usuario"],
["/\\binterfa(z|ce) +del? +usuario\\b/gi", "Interfaz de Usuario"]
], [
"El UI, o Interfaz Gráfica por sus siglas en Inglés, es un entorno donde el usuario puede ",
"interactuar o ver una información; y el GUI, o Interfaz Gráfica del Usuario por sus siglas ",
"en inglés, sería un entorno gráfico, no sólo Core en modo texto, donde el usuario puede ",
"ver y/o interactuar con una información."
], [
"https://es.wikipedia.org/wiki/Interfaz_gr%C3%A1fica_de_usuario"
]
], [
["/\\bweb\\b/gi", "Web"], [
"La Web es lo que conocemos como aquella parte de Internet regida por la normativa de la W3 ",
"donde nos podemos encontrar sitios Web, páginas Web y protocolos y versiones Web."
], [
"https://www.w3.org/",
"https://es.wikipedia.org/wiki/Web"
]
], [
["/\\bi18n\\b/gi", "I18N"], [
"La I18N, o Intenacionalización, viene siendo la gestión de textos en distintos idiomas dentro ",
"de una aplicación. Puede haber numerosos métodos para dicho fin, ya sea dependiendo del lenguaje, ",
"así como la filosofía de desarrollo escogida."
], [
"https://es.wikipedia.org/wiki/Internacionalizaci%C3%B3n_y_localizaci%C3%B3n",
"https://www.w3.org/International/questions/qa-i18n.en.html#i18n",
"https://developer.mozilla.org/es/docs/Mozilla/Add-ons/WebExtensions/API/i18n"
]
], [
["/\\bsingletons?\\b/gi", "Singleton"], [
"Un Singleton es una instancia única de un clase, es decir, la instancia de una clase que sólo ",
"puede ser creada como objeto una única vez. Este término de uso único también es aplicado por ",
"KyMAN para ejecuciones de funciones que sólo pueden ser ejecutadas una única vez por estructura ",
"de código."
], [
"https://es.wikipedia.org/wiki/Singleton",
"http://design-patterns-with-uml.blogspot.com/2013/02/singleton-pattern.html",
"https://medium.com/dise%C3%B1o-de-software/singleton-el-patr%C3%B3n-del-mal-f3fdab0e16a2"
]
], [
["/\\bcallback(s)?\\b/gi", "Callback$1"], [
"Función que se envía para ser llamada por alguna acción, ya sea de forma síncrona (Para definir ",
"cómo hacer algo a algún método, como sucede con los métodos 'sort', 'reduce', etc.) o asíncrona ",
"(como sucede cuando se quiere continuar un proceso de forma asíncrona, como una carga de algo, ",
"etc. Sin hacer uso de elementos de gestión de hilos de proceso de tipo 'wait')."
], [
"https://es.wikipedia.org/wiki/Retrollamada_(inform%C3%A1tica)",
"https://developer.mozilla.org/es/docs/Glossary/Callback_function",
"https://www.freecodecamp.org/espanol/news/que-es-una-funcion-callback-javascript/",
"https://lenguajejs.com/javascript/asincronia/callbacks/"
]
], [
["/\\bbool(ean(o)?)?\\b/gi", "Boolean$2"], [
"Un valor Booleano es aquel cuyo tipado que sólo puede tener dos valores lógicos: verdadero o falso, ",
"equivalentes a 1 y a 0 consecutivamente a nivel de Bit. Ésto parte del álgebra de Bool."
], [
"https://es.wikipedia.org/wiki/Tipo_de_dato_l%C3%B3gico",
"https://es.wikipedia.org/wiki/%C3%81lgebra_booleana",
"https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
"https://learn.microsoft.com/es-es/dotnet/csharp/language-reference/builtin-types/bool"
]
], [
["/\\bbit(s)?\\b/gi", "Bit$1"], [
"Un Bit es la unidad mínima de memoria e información, y representaría un 0 o un 1, que como valor Booleano ",
"sería 'false' y 'true' consecutivamente."
], [
"https://es.wikipedia.org/wiki/Bit",
"https://es.wiktionary.org/wiki/bit",
"https://www.rae.es/dpd/bit"
]
], [
["/\\b(?<!\\.)js *doc\\b/gi", "JSDoc"], [
"JSDoc es un sistema estándar para documentar código JavaScript y equivalentes a partir de comentarios ",
"dentro de código. Esto no sólo nos facilita la interpretación del código sino que también ayuda al IDE ",
"a guiarnos por el mismo si éste posee las herramientas adecuadas."
], [
"https://jsdoc.app/",
"https://github.com/jsdoc/jsdoc",
"https://es.wikipedia.org/wiki/JSDoc",
"https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html"
]
], [
["/\\bframe *work(s)?\\b/gi", "Framework$1"], [
"Conjunto de herramientas y librerías con un fin o propósito diseñado para ayuda al desarrollo de un tipo ",
"de Software con una filosofía, lenguajes y estructuras concretas."
], [
"https://es.wikipedia.org/wiki/Framework",
"https://unirfp.unir.net/revista/ingenieria-y-tecnologia/framework/"
]
], [
[
["/\\b(?<![\\.a-zÀ-ÖØ-öø-ÿ])as( *[23](\\.0)?)?(?![a-zÀ-ÖØ-öø-ÿ])\\b/gi", "AS$1"],
["/\\baction *script( *[23](\\.0)?)?\\b/gi", "ActionScript$1"]
], [
"ActionScript es un lenguaje de programación el cual fue usado para desarrollar en Flash. Actualmente, ",
"JavaScript en entorno navegador, aparentemente heredó muchos conceptos de éste pues antes de que ",
"JavaScript en entorno navegador haga lo que hace hoy, lo hacía Action Script. La extensión de los archivos ",
"ActionScript es AS."
], [
"https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/index.html",
"https://help.adobe.com/en_US/as3/dev/index.html",
"https://web.archive.org/web/20130131044759/http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=Part2_AS2_LangRef_1.html",
"https://en.wikipedia.org/wiki/ActionScript"
]
], [
[
["/\\b(?<!\\.)swf\\b/gi", "SWF"],
["/\\bmacromedia *flash *player\\b/gi", "Macromedia Flash Player"],
["/\\bmacromedia *flash\\b/gi", "Macromedia Flash"],
["/\\badobe *flash *player\\b/gi", "Adobe Flash Player"],
["/\\badobe *flash\\b/gi", "Adobe Flash"],
["/\\bflash *player\\b/gi", "Flash Player"],
["/\\bruf+le\\b/gi", "Ruffle"],
["/\\bflash\\b/gi", "Flash"]
], [
"Flash fue una tecnología para crear animaciones principalmente, aunque en su momento dio tal versatilidad ",
"que muchos lo usaron no sólo como recurso Web sino para crear páginas Web o juegos y/o aplicaciones Web. ",
"El lenguaje de programación sobre el que se sostenía era Action Script. Actualmente, Flash ya no existe de ",
"forma oficial y fue sustituído por Adobe Air entre otras tecnologías de la misma compañía. La extensión de ",
"los compilados de Flash era SWF. Existen emuladores para dichos archivos como lo es el Ruffle."
], [
"https://www.adobe.com/es/products/flashplayer/end-of-life-alternative.html",
"https://es.wikipedia.org/wiki/Adobe_Flash_Player",
"https://ruffle.rs/"
]
], [
["/\\bscript(s)?\\b/gi", "Script$1"], [
"Un Script no es más que un conjunto de órdenes para automatización de tareas o para designar acciones o ",
"conjuntos de acciones bajo una orden."
], [
"https://es.wikipedia.org/wiki/Script"
]
], [
[
["/\\bx[ \\-]*gravity\\b/gi", "XGravity"],
["/\\balienado\\b/gi", "Alienado"]
], [
"Alienado, antiguamente XGravity, es un juego basado en XQuest desarrollado plenamente por KyMAN tipo Asteroids ",
"de MSDOS pero orientado a navegador. La primera versión fue un SWF desarrollado en ActionScript 2.0, pero el ",
"resto de versiones ya fueron en JavaScript. La idea de cambiarle a Alienado fue en pensar en Aliens y la ",
"película Sharknado."
], [
"https://xgravity.k3y.pw",
"https://git.k3y.pw/KyMAN/XGravity"
]
], [
["/\\bx[ \\-]*qu?est\\b/gi", "XQuest"], [
"XQuest es un juego para MSDOS del tipo Asteroids pero con unos gráficos más avanzados, con Scroll y Parallax."
], [
"http://www.swallowtail.org/xquest/",
"http://www.abandonia.com/es/games/28643/XQuest.html"
]
], [
[
["/\\bDOS\\b/g", "DOS"],
["/\\b(microsoft|ms) *dos\\b/gi", "MSDOS"],
["/\\bcomandos\\b/gi", "COMANDOS"],
["/\\b((?<!\\.)cmd|c\\.m\\.d\\.|c\\. +m\\. +d\\. +)\\b/gi", "CMD"],
["/\\bconsola *de *comandos *de *windows\\b/gi", "Consola de Comandos de Windows"],
["/\\bs[ií]mbolo *de *sistema\\b/gi", "Símbolo de Sistema"],
["/\\b(?<!\\.)batch\\b/gi", "Batch"]
], [
"DOS es el sistema Core base de Microsoft cuyo primer Sistema Operativo fue MSDOS, utilizado como base Core de ",
"Windows hasta Windows XP donde apareció COMANDOS, una evolución de MSDOS. Los archivos de Script nativos de DOS ",
"son los Batch. Actualmente se puede acceder a COMANDOS desde Símbolo de Sistema de Windows."
], [
"https://github.com/microsoft/MS-DOS",
"https://es.wikipedia.org/wiki/DOS",
"https://es.wikipedia.org/wiki/MS-DOS",
"https://es.wikipedia.org/wiki/S%C3%ADmbolo_del_sistema_de_Windows",
"https://es.wikipedia.org/wiki/Archivo_batch",
"https://web.archive.org/web/20160309064627/https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/windows_dos_overview.mspx?mfr=true"
]
], [
["/\\bscrolls?\\b/gi", "Scroll"], [
"Los Scroll son la capacidad gráfica de poder desplazar internamente un marco en una pantalla sobre un contenido ",
"que ocupa más que el mismo, y éste puede ser horizontal o vertical."
], [
"https://es.wikipedia.org/wiki/Scroll"
]
], [
[
["/\\bp[áa]ral+ax\\b/gi", "Parallax"],
["/\\bparalaje\\b/gi", "Paralaje"]
], [
"El Parallax, o Paralaje, es una sincronización de movimientos 2D para distintos elementos a diferentes velocidades, ",
"reconocíblemente usado en los fondos de los videojuegos 2D donde los las distintas profundidades se distinguen por ",
"ese movimiento distintivo."
], [
"https://es.wikipedia.org/wiki/Paralaje"
]
], [
[
["/\\bcr[yi]pto *activo(s)?\\b/gi", "Cryptoactivo$1"],
["/\\bcr[yi]pto *moneda(s)?\\b/gi", "Cryptomoneda$1"],
["/\\bcr[yi]pto *coin(s)?\\b/gi", "Cryptocoin$1"],
["/\\bcr[yi]pto *divisa(s)?\\b/gi", "Cryptodivisa$1"]
], [
"Un Cryptoactivo o Cryptodivisa o Cryptomoneda no es más que un recurso económico digital el cual puede ser no físico. ",
"El más conocido es el Bitcoin, pero hay muchos más y más tipos como los NFT y otro tipo de recursos."
], [
"https://es.wikipedia.org/wiki/Criptomoneda",
"https://www.cnmv.es/Cursos/Educacion-Financiera/Criptoactivos/index.html",
"https://www.imf.org/es/Publications/fandd/issues/2022/09/Regulating-crypto-Narain-Moretti"
]
], [
[
["/\\bbitcoin\\b/gi", "Bitcoin"],
["/\\b((?<!\\.)btc|b\\.t\\.c\\.|b\\. +t\\. +c\\. +)\\b/gi", "BTC"]
], [
"El Bitcoin es la Cryptomoneda más conocida y más usada, siendo de las primeras Cryptodivisas que se hicieron ",
"específicamente para su uso en Internet. Su símbolo es BTC. Su funcionamiento, garantías, etc. Se basa en una base de ",
"datos pública basada en Block Chain. Fue diseñada por un desconocido Satoshi Nakamoto, del cual se sacó el nombre a la ",
"unidad mínima que puede trabajar, el Satoshi, que viene siendo una diezmillonésima parte de un Bitcoin entero."
], [
"https://bitcoin.org/es/",
"https://bitcoin.org/files/bitcoin-paper/bitcoin_es_latam.pdf",
"https://github.com/bitcoin/bitcoin",
"https://es.wikipedia.org/wiki/Bitcoin",
"https://www.blockchain.com/explorer/assets/btc"
]
], [
["/\\bsatoshi *nakamoto\\b/gi", "Satoshi Nakamoto"], [
"Satoshi Nakamoto es el pseudónimo por el cual se conoce al creador del White Paper del Bitcoin, aunque actualmente no ",
"se sabe a ciencia cierta quién es."
], [
"https://es.wikipedia.org/wiki/Satoshi_Nakamoto",
"https://www.mail-archive.com/search?l=cryptography@metzdowd.com&q=from:%22Satoshi+Nakamoto%22"
]
], [
[
["/\\blitecoin\\b/gi", "Litecoin"],
["/\\b((?<!\\.)ltc|b\\.l\\.c\\.|b\\. +l\\. +c\\. +)\\b/gi", "LTC"]
], [
"Litecoin es una Cryptodivisa inspirada plenamente en Bitcoin con una filosofía de seguridad y agilidad ",
"transaccional, así como menor peso y consumo por parte del Core tanto en RAM como por procesador. Su ",
"símbolo es el LTC."
], [
"https://litecoin.org/",
"https://litecoin.com/en/",
"https://github.com/litecoin-project/litecoin",
"https://es.wikipedia.org/wiki/Litecoin",
"https://x.com/litecoin",
"https://www.reddit.com/r/litecoin/"
]
]]

View File

@ -1,986 +0,0 @@
{
"ez" : "application/andrew-inset",
"aw" : "application/applixware",
"atom" : "application/atom+xml",
"atomcat" : "application/atomcat+xml",
"atomsvc" : "application/atomsvc+xml",
"ccxml" : "application/ccxml+xml",
"cdmia" : "application/cdmi-capability",
"cdmic" : "application/cdmi-container",
"cdmid" : "application/cdmi-domain",
"cdmio" : "application/cdmi-object",
"cdmiq" : "application/cdmi-queue",
"cu" : "application/cu-seeme",
"davmount" : "application/davmount+xml",
"dbk" : "application/docbook+xml",
"dssc" : "application/dssc+der",
"xdssc" : "application/dssc+xml",
"ecma" : "application/ecmascript",
"emma" : "application/emma+xml",
"epub" : "application/epub+zip",
"exi" : "application/exi",
"pfr" : "application/font-tdpfr",
"gml" : "application/gml+xml",
"gpx" : "application/gpx+xml",
"gxf" : "application/gxf",
"stk" : "application/hyperstudio",
"ink" : "application/inkml+xml",
"inkml" : "application/inkml+xml",
"ipfix" : "application/ipfix",
"jar" : "application/java-archive",
"ser" : "application/java-serialized-object",
"class" : "application/java-vm",
"js" : "application/javascript",
"json" : "application/json",
"jsonml" : "application/jsonml+json",
"lostxml" : "application/lost+xml",
"hqx" : "application/mac-binhex40",
"cpt" : "application/mac-compactpro",
"mads" : "application/mads+xml",
"mrc" : "application/marc",
"mrcx" : "application/marcxml+xml",
"ma" : "application/mathematica",
"nb" : "application/mathematica",
"mb" : "application/mathematica",
"mathml" : "application/mathml+xml",
"mbox" : "application/mbox",
"mscml" : "application/mediaservercontrol+xml",
"metalink" : "application/metalink+xml",
"meta4" : "application/metalink4+xml",
"mets" : "application/mets+xml",
"mods" : "application/mods+xml",
"m21" : "application/mp21",
"mp21" : "application/mp21",
"mp4s" : "application/mp4",
"doc" : "application/msword",
"dot" : "application/msword",
"mxf" : "application/mxf",
"bin" : "application/octet-stream",
"dms" : "application/octet-stream",
"lrf" : "application/octet-stream",
"mar" : "application/octet-stream",
"so" : "application/octet-stream",
"dist" : "application/octet-stream",
"distz" : "application/octet-stream",
"pkg" : "application/octet-stream",
"bpk" : "application/octet-stream",
"dump" : "application/octet-stream",
"elc" : "application/octet-stream",
"deploy" : "application/octet-stream",
"oda" : "application/oda",
"opf" : "application/oebps-package+xml",
"ogx" : "application/ogg",
"omdoc" : "application/omdoc+xml",
"onetoc" : "application/onenote",
"onetoc2" : "application/onenote",
"onetmp" : "application/onenote",
"onepkg" : "application/onenote",
"oxps" : "application/oxps",
"xer" : "application/patch-ops-error+xml",
"pdf" : "application/pdf",
"pgp" : "application/pgp-encrypted",
"asc" : "application/pgp-signature",
"sig" : "application/pgp-signature",
"prf" : "application/pics-rules",
"p10" : "application/pkcs10",
"p7m" : "application/pkcs7-mime",
"p7c" : "application/pkcs7-mime",
"p7s" : "application/pkcs7-signature",
"p8" : "application/pkcs8",
"ac" : "application/pkix-attr-cert",
"cer" : "application/pkix-cert",
"crl" : "application/pkix-crl",
"pkipath" : "application/pkix-pkipath",
"pki" : "application/pkixcmp",
"pls" : "application/pls+xml",
"ai" : "application/postscript",
"eps" : "application/postscript",
"ps" : "application/postscript",
"cww" : "application/prs.cww",
"pskcxml" : "application/pskc+xml",
"rdf" : "application/rdf+xml",
"rif" : "application/reginfo+xml",
"rnc" : "application/relax-ng-compact-syntax",
"rl" : "application/resource-lists+xml",
"rld" : "application/resource-lists-diff+xml",
"rs" : "application/rls-services+xml",
"gbr" : "application/rpki-ghostbusters",
"mft" : "application/rpki-manifest",
"roa" : "application/rpki-roa",
"rsd" : "application/rsd+xml",
"rss" : "application/rss+xml",
"rtf" : "application/rtf",
"sbml" : "application/sbml+xml",
"scq" : "application/scvp-cv-request",
"scs" : "application/scvp-cv-response",
"spq" : "application/scvp-vp-request",
"spp" : "application/scvp-vp-response",
"sdp" : "application/sdp",
"setpay" : "application/set-payment-initiation",
"setreg" : "application/set-registration-initiation",
"shf" : "application/shf+xml",
"smi" : "application/smil+xml",
"smil" : "application/smil+xml",
"rq" : "application/sparql-query",
"srx" : "application/sparql-results+xml",
"gram" : "application/srgs",
"grxml" : "application/srgs+xml",
"sru" : "application/sru+xml",
"ssdl" : "application/ssdl+xml",
"ssml" : "application/ssml+xml",
"tei" : "application/tei+xml",
"teicorpus" : "application/tei+xml",
"tfi" : "application/thraud+xml",
"tsd" : "application/timestamped-data",
"plb" : "application/vnd.3gpp.pic-bw-large",
"psb" : "application/vnd.3gpp.pic-bw-small",
"pvb" : "application/vnd.3gpp.pic-bw-var",
"tcap" : "application/vnd.3gpp2.tcap",
"pwn" : "application/vnd.3m.post-it-notes",
"aso" : "application/vnd.accpac.simply.aso",
"imp" : "application/vnd.accpac.simply.imp",
"acu" : "application/vnd.acucobol",
"atc" : "application/vnd.acucorp",
"acutc" : "application/vnd.acucorp",
"air" : "application/vnd.adobe.air-application-installer-package+zip",
"fcdt" : "application/vnd.adobe.formscentral.fcdt",
"fxp" : "application/vnd.adobe.fxp",
"fxpl" : "application/vnd.adobe.fxp",
"xdp" : "application/vnd.adobe.xdp+xml",
"xfdf" : "application/vnd.adobe.xfdf",
"ahead" : "application/vnd.ahead.space",
"azf" : "application/vnd.airzip.filesecure.azf",
"azs" : "application/vnd.airzip.filesecure.azs",
"azw" : "application/vnd.amazon.ebook",
"acc" : "application/vnd.americandynamics.acc",
"ami" : "application/vnd.amiga.ami",
"apk" : "application/vnd.android.package-archive",
"cii" : "application/vnd.anser-web-certificate-issue-initiation",
"fti" : "application/vnd.anser-web-funds-transfer-initiation",
"atx" : "application/vnd.antix.game-component",
"mpkg" : "application/vnd.apple.installer+xml",
"m3u8" : "application/vnd.apple.mpegurl",
"swi" : "application/vnd.aristanetworks.swi",
"iota" : "application/vnd.astraea-software.iota",
"aep" : "application/vnd.audiograph",
"mpm" : "application/vnd.blueice.multipass",
"bmi" : "application/vnd.bmi",
"rep" : "application/vnd.businessobjects",
"cdxml" : "application/vnd.chemdraw+xml",
"mmd" : "application/vnd.chipnuts.karaoke-mmd",
"cdy" : "application/vnd.cinderella",
"cla" : "application/vnd.claymore",
"rp9" : "application/vnd.cloanto.rp9",
"c4g" : "application/vnd.clonk.c4group",
"c4d" : "application/vnd.clonk.c4group",
"c4f" : "application/vnd.clonk.c4group",
"c4p" : "application/vnd.clonk.c4group",
"c4u" : "application/vnd.clonk.c4group",
"c11amc" : "application/vnd.cluetrust.cartomobile-config",
"c11amz" : "application/vnd.cluetrust.cartomobile-config-pkg",
"csp" : "application/vnd.commonspace",
"cdbcmsg" : "application/vnd.contact.cmsg",
"cmc" : "application/vnd.cosmocaller",
"clkx" : "application/vnd.crick.clicker",
"clkk" : "application/vnd.crick.clicker.keyboard",
"clkp" : "application/vnd.crick.clicker.palette",
"clkt" : "application/vnd.crick.clicker.template",
"clkw" : "application/vnd.crick.clicker.wordbank",
"wbs" : "application/vnd.criticaltools.wbs+xml",
"pml" : "application/vnd.ctc-posml",
"ppd" : "application/vnd.cups-ppd",
"car" : "application/vnd.curl.car",
"pcurl" : "application/vnd.curl.pcurl",
"dart" : "application/vnd.dart",
"rdz" : "application/vnd.data-vision.rdz",
"uvf" : "application/vnd.dece.data",
"uvvf" : "application/vnd.dece.data",
"uvd" : "application/vnd.dece.data",
"uvvd" : "application/vnd.dece.data",
"uvt" : "application/vnd.dece.ttml+xml",
"uvvt" : "application/vnd.dece.ttml+xml",
"uvx" : "application/vnd.dece.unspecified",
"uvvx" : "application/vnd.dece.unspecified",
"uvz" : "application/vnd.dece.zip",
"uvvz" : "application/vnd.dece.zip",
"fe_launch" : "application/vnd.denovo.fcselayout-link",
"dna" : "application/vnd.dna",
"mlp" : "application/vnd.dolby.mlp",
"dpg" : "application/vnd.dpgraph",
"dfac" : "application/vnd.dreamfactory",
"kpxx" : "application/vnd.ds-keypoint",
"ait" : "application/vnd.dvb.ait",
"svc" : "application/vnd.dvb.service",
"geo" : "application/vnd.dynageo",
"mag" : "application/vnd.ecowin.chart",
"nml" : "application/vnd.enliven",
"esf" : "application/vnd.epson.esf",
"msf" : "application/vnd.epson.msf",
"qam" : "application/vnd.epson.quickanime",
"slt" : "application/vnd.epson.salt",
"ssf" : "application/vnd.epson.ssf",
"es3" : "application/vnd.eszigno3+xml",
"et3" : "application/vnd.eszigno3+xml",
"ez2" : "application/vnd.ezpix-album",
"ez3" : "application/vnd.ezpix-package",
"fdf" : "application/vnd.fdf",
"mseed" : "application/vnd.fdsn.mseed",
"seed" : "application/vnd.fdsn.seed",
"dataless" : "application/vnd.fdsn.seed",
"gph" : "application/vnd.flographit",
"ftc" : "application/vnd.fluxtime.clip",
"fm" : "application/vnd.framemaker",
"frame" : "application/vnd.framemaker",
"maker" : "application/vnd.framemaker",
"book" : "application/vnd.framemaker",
"fnc" : "application/vnd.frogans.fnc",
"ltf" : "application/vnd.frogans.ltf",
"fsc" : "application/vnd.fsc.weblaunch",
"oas" : "application/vnd.fujitsu.oasys",
"oa2" : "application/vnd.fujitsu.oasys2",
"oa3" : "application/vnd.fujitsu.oasys3",
"fg5" : "application/vnd.fujitsu.oasysgp",
"bh2" : "application/vnd.fujitsu.oasysprs",
"ddd" : "application/vnd.fujixerox.ddd",
"xdw" : "application/vnd.fujixerox.docuworks",
"xbd" : "application/vnd.fujixerox.docuworks.binder",
"fzs" : "application/vnd.fuzzysheet",
"txd" : "application/vnd.genomatix.tuxedo",
"ggb" : "application/vnd.geogebra.file",
"ggt" : "application/vnd.geogebra.tool",
"gex" : "application/vnd.geometry-explorer",
"gre" : "application/vnd.geometry-explorer",
"gxt" : "application/vnd.geonext",
"g2w" : "application/vnd.geoplan",
"g3w" : "application/vnd.geospace",
"gmx" : "application/vnd.gmx",
"kml" : "application/vnd.google-earth.kml+xml",
"kmz" : "application/vnd.google-earth.kmz",
"gqf" : "application/vnd.grafeq",
"gqs" : "application/vnd.grafeq",
"gac" : "application/vnd.groove-account",
"ghf" : "application/vnd.groove-help",
"gim" : "application/vnd.groove-identity-message",
"grv" : "application/vnd.groove-injector",
"gtm" : "application/vnd.groove-tool-message",
"tpl" : "application/vnd.groove-tool-template",
"vcg" : "application/vnd.groove-vcard",
"hal" : "application/vnd.hal+xml",
"zmm" : "application/vnd.handheld-entertainment+xml",
"hbci" : "application/vnd.hbci",
"les" : "application/vnd.hhe.lesson-player",
"hpgl" : "application/vnd.hp-hpgl",
"hpid" : "application/vnd.hp-hpid",
"hps" : "application/vnd.hp-hps",
"jlt" : "application/vnd.hp-jlyt",
"pcl" : "application/vnd.hp-pcl",
"pclxl" : "application/vnd.hp-pclxl",
"sfd-hdstx" : "application/vnd.hydrostatix.sof-data",
"mpy" : "application/vnd.ibm.minipay",
"afp" : "application/vnd.ibm.modcap",
"listafp" : "application/vnd.ibm.modcap",
"list3820" : "application/vnd.ibm.modcap",
"irm" : "application/vnd.ibm.rights-management",
"sc" : "application/vnd.ibm.secure-container",
"icc" : "application/vnd.iccprofile",
"icm" : "application/vnd.iccprofile",
"igl" : "application/vnd.igloader",
"ivp" : "application/vnd.immervision-ivp",
"ivu" : "application/vnd.immervision-ivu",
"igm" : "application/vnd.insors.igm",
"xpw" : "application/vnd.intercon.formnet",
"xpx" : "application/vnd.intercon.formnet",
"i2g" : "application/vnd.intergeo",
"qbo" : "application/vnd.intu.qbo",
"qfx" : "application/vnd.intu.qfx",
"rcprofile" : "application/vnd.ipunplugged.rcprofile",
"irp" : "application/vnd.irepository.package+xml",
"xpr" : "application/vnd.is-xpr",
"fcs" : "application/vnd.isac.fcs",
"jam" : "application/vnd.jam",
"rms" : "application/vnd.jcp.javame.midlet-rms",
"jisp" : "application/vnd.jisp",
"joda" : "application/vnd.joost.joda-archive",
"ktz" : "application/vnd.kahootz",
"ktr" : "application/vnd.kahootz",
"karbon" : "application/vnd.kde.karbon",
"chrt" : "application/vnd.kde.kchart",
"kfo" : "application/vnd.kde.kformula",
"flw" : "application/vnd.kde.kivio",
"kon" : "application/vnd.kde.kontour",
"kpr" : "application/vnd.kde.kpresenter",
"kpt" : "application/vnd.kde.kpresenter",
"ksp" : "application/vnd.kde.kspread",
"kwd" : "application/vnd.kde.kword",
"kwt" : "application/vnd.kde.kword",
"htke" : "application/vnd.kenameaapp",
"kia" : "application/vnd.kidspiration",
"kne" : "application/vnd.kinar",
"knp" : "application/vnd.kinar",
"skp" : "application/vnd.koan",
"skd" : "application/vnd.koan",
"skt" : "application/vnd.koan",
"skm" : "application/vnd.koan",
"sse" : "application/vnd.kodak-descriptor",
"lasxml" : "application/vnd.las.las+xml",
"lbd" : "application/vnd.llamagraphics.life-balance.desktop",
"lbe" : "application/vnd.llamagraphics.life-balance.exchange+xml",
"123" : "application/vnd.lotus-1-2-3",
"apr" : "application/vnd.lotus-approach",
"pre" : "application/vnd.lotus-freelance",
"nsf" : "application/vnd.lotus-notes",
"org" : "application/vnd.lotus-organizer",
"scm" : "application/vnd.lotus-screencam",
"lwp" : "application/vnd.lotus-wordpro",
"portpkg" : "application/vnd.macports.portpkg",
"mcd" : "application/vnd.mcd",
"mc1" : "application/vnd.medcalcdata",
"cdkey" : "application/vnd.mediastation.cdkey",
"mwf" : "application/vnd.mfer",
"mfm" : "application/vnd.mfmp",
"flo" : "application/vnd.micrografx.flo",
"igx" : "application/vnd.micrografx.igx",
"mif" : "application/vnd.mif",
"daf" : "application/vnd.mobius.daf",
"dis" : "application/vnd.mobius.dis",
"mbk" : "application/vnd.mobius.mbk",
"mqy" : "application/vnd.mobius.mqy",
"msl" : "application/vnd.mobius.msl",
"plc" : "application/vnd.mobius.plc",
"txf" : "application/vnd.mobius.txf",
"mpn" : "application/vnd.mophun.application",
"mpc" : "application/vnd.mophun.certificate",
"xul" : "application/vnd.mozilla.xul+xml",
"cil" : "application/vnd.ms-artgalry",
"cab" : "application/vnd.ms-cab-compressed",
"xls" : "application/vnd.ms-excel",
"xlm" : "application/vnd.ms-excel",
"xla" : "application/vnd.ms-excel",
"xlc" : "application/vnd.ms-excel",
"xlt" : "application/vnd.ms-excel",
"xlw" : "application/vnd.ms-excel",
"xlam" : "application/vnd.ms-excel.addin.macroenabled.12",
"xlsb" : "application/vnd.ms-excel.sheet.binary.macroenabled.12",
"xlsm" : "application/vnd.ms-excel.sheet.macroenabled.12",
"xltm" : "application/vnd.ms-excel.template.macroenabled.12",
"eot" : "application/vnd.ms-fontobject",
"chm" : "application/vnd.ms-htmlhelp",
"ims" : "application/vnd.ms-ims",
"lrm" : "application/vnd.ms-lrm",
"thmx" : "application/vnd.ms-officetheme",
"cat" : "application/vnd.ms-pki.seccat",
"stl" : "application/vnd.ms-pki.stl",
"ppt" : "application/vnd.ms-powerpoint",
"pps" : "application/vnd.ms-powerpoint",
"pot" : "application/vnd.ms-powerpoint",
"ppam" : "application/vnd.ms-powerpoint.addin.macroenabled.12",
"pptm" : "application/vnd.ms-powerpoint.presentation.macroenabled.12",
"sldm" : "application/vnd.ms-powerpoint.slide.macroenabled.12",
"ppsm" : "application/vnd.ms-powerpoint.slideshow.macroenabled.12",
"potm" : "application/vnd.ms-powerpoint.template.macroenabled.12",
"mpp" : "application/vnd.ms-project",
"mpt" : "application/vnd.ms-project",
"docm" : "application/vnd.ms-word.document.macroenabled.12",
"dotm" : "application/vnd.ms-word.template.macroenabled.12",
"wps" : "application/vnd.ms-works",
"wks" : "application/vnd.ms-works",
"wcm" : "application/vnd.ms-works",
"wdb" : "application/vnd.ms-works",
"wpl" : "application/vnd.ms-wpl",
"xps" : "application/vnd.ms-xpsdocument",
"mseq" : "application/vnd.mseq",
"mus" : "application/vnd.musician",
"msty" : "application/vnd.muvee.style",
"taglet" : "application/vnd.mynfc",
"nlu" : "application/vnd.neurolanguage.nlu",
"ntf" : "application/vnd.nitf",
"nitf" : "application/vnd.nitf",
"nnd" : "application/vnd.noblenet-directory",
"nns" : "application/vnd.noblenet-sealer",
"nnw" : "application/vnd.noblenet-web",
"ngdat" : "application/vnd.nokia.n-gage.data",
"n-gage" : "application/vnd.nokia.n-gage.symbian.install",
"rpst" : "application/vnd.nokia.radio-preset",
"rpss" : "application/vnd.nokia.radio-presets",
"edm" : "application/vnd.novadigm.edm",
"edx" : "application/vnd.novadigm.edx",
"ext" : "application/vnd.novadigm.ext",
"odc" : "application/vnd.oasis.opendocument.chart",
"otc" : "application/vnd.oasis.opendocument.chart-template",
"odb" : "application/vnd.oasis.opendocument.database",
"odf" : "application/vnd.oasis.opendocument.formula",
"odft" : "application/vnd.oasis.opendocument.formula-template",
"odg" : "application/vnd.oasis.opendocument.graphics",
"otg" : "application/vnd.oasis.opendocument.graphics-template",
"odi" : "application/vnd.oasis.opendocument.image",
"oti" : "application/vnd.oasis.opendocument.image-template",
"odp" : "application/vnd.oasis.opendocument.presentation",
"otp" : "application/vnd.oasis.opendocument.presentation-template",
"ods" : "application/vnd.oasis.opendocument.spreadsheet",
"ots" : "application/vnd.oasis.opendocument.spreadsheet-template",
"odt" : "application/vnd.oasis.opendocument.text",
"odm" : "application/vnd.oasis.opendocument.text-master",
"ott" : "application/vnd.oasis.opendocument.text-template",
"oth" : "application/vnd.oasis.opendocument.text-web",
"xo" : "application/vnd.olpc-sugar",
"dd2" : "application/vnd.oma.dd2+xml",
"oxt" : "application/vnd.openofficeorg.extension",
"pptx" : "application/vnd.openxmlformats-officedocument.presentationml.presentation",
"sldx" : "application/vnd.openxmlformats-officedocument.presentationml.slide",
"ppsx" : "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
"potx" : "application/vnd.openxmlformats-officedocument.presentationml.template",
"xlsx" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"xltx" : "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
"docx" : "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"dotx" : "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
"mgp" : "application/vnd.osgeo.mapguide.package",
"dp" : "application/vnd.osgi.dp",
"esa" : "application/vnd.osgi.subsystem",
"pdb" : "application/vnd.palm",
"pqa" : "application/vnd.palm",
"oprc" : "application/vnd.palm",
"paw" : "application/vnd.pawaafile",
"str" : "application/vnd.pg.format",
"ei6" : "application/vnd.pg.osasli",
"efif" : "application/vnd.picsel",
"wg" : "application/vnd.pmi.widget",
"plf" : "application/vnd.pocketlearn",
"pbd" : "application/vnd.powerbuilder6",
"box" : "application/vnd.previewsystems.box",
"mgz" : "application/vnd.proteus.magazine",
"qps" : "application/vnd.publishare-delta-tree",
"ptid" : "application/vnd.pvi.ptid1",
"qxd" : "application/vnd.quark.quarkxpress",
"qxt" : "application/vnd.quark.quarkxpress",
"qwd" : "application/vnd.quark.quarkxpress",
"qwt" : "application/vnd.quark.quarkxpress",
"qxl" : "application/vnd.quark.quarkxpress",
"qxb" : "application/vnd.quark.quarkxpress",
"bed" : "application/vnd.realvnc.bed",
"mxl" : "application/vnd.recordare.musicxml",
"musicxml" : "application/vnd.recordare.musicxml+xml",
"cryptonote" : "application/vnd.rig.cryptonote",
"cod" : "application/vnd.rim.cod",
"rm" : "application/vnd.rn-realmedia",
"rmvb" : "application/vnd.rn-realmedia-vbr",
"link66" : "application/vnd.route66.link66+xml",
"st" : "application/vnd.sailingtracker.track",
"see" : "application/vnd.seemail",
"sema" : "application/vnd.sema",
"semd" : "application/vnd.semd",
"semf" : "application/vnd.semf",
"ifm" : "application/vnd.shana.informed.formdata",
"itp" : "application/vnd.shana.informed.formtemplate",
"iif" : "application/vnd.shana.informed.interchange",
"ipk" : "application/vnd.shana.informed.package",
"twd" : "application/vnd.simtech-mindmapper",
"twds" : "application/vnd.simtech-mindmapper",
"mmf" : "application/vnd.smaf",
"teacher" : "application/vnd.smart.teacher",
"sdkm" : "application/vnd.solent.sdkm+xml",
"sdkd" : "application/vnd.solent.sdkm+xml",
"dxp" : "application/vnd.spotfire.dxp",
"sfs" : "application/vnd.spotfire.sfs",
"sdc" : "application/vnd.stardivision.calc",
"sda" : "application/vnd.stardivision.draw",
"sdd" : "application/vnd.stardivision.impress",
"smf" : "application/vnd.stardivision.math",
"sdw" : "application/vnd.stardivision.writer",
"vor" : "application/vnd.stardivision.writer",
"sgl" : "application/vnd.stardivision.writer-global",
"smzip" : "application/vnd.stepmania.package",
"sm" : "application/vnd.stepmania.stepchart",
"sxc" : "application/vnd.sun.xml.calc",
"stc" : "application/vnd.sun.xml.calc.template",
"sxd" : "application/vnd.sun.xml.draw",
"std" : "application/vnd.sun.xml.draw.template",
"sxi" : "application/vnd.sun.xml.impress",
"sti" : "application/vnd.sun.xml.impress.template",
"sxm" : "application/vnd.sun.xml.math",
"sxw" : "application/vnd.sun.xml.writer",
"sxg" : "application/vnd.sun.xml.writer.global",
"stw" : "application/vnd.sun.xml.writer.template",
"sus" : "application/vnd.sus-calendar",
"susp" : "application/vnd.sus-calendar",
"svd" : "application/vnd.svd",
"sis" : "application/vnd.symbian.install",
"sisx" : "application/vnd.symbian.install",
"xsm" : "application/vnd.syncml+xml",
"bdm" : "application/vnd.syncml.dm+wbxml",
"xdm" : "application/vnd.syncml.dm+xml",
"tao" : "application/vnd.tao.intent-module-archive",
"pcap" : "application/vnd.tcpdump.pcap",
"cap" : "application/vnd.tcpdump.pcap",
"dmp" : "application/vnd.tcpdump.pcap",
"tmo" : "application/vnd.tmobile-livetv",
"tpt" : "application/vnd.trid.tpt",
"mxs" : "application/vnd.triscape.mxs",
"tra" : "application/vnd.trueapp",
"ufd" : "application/vnd.ufdl",
"ufdl" : "application/vnd.ufdl",
"utz" : "application/vnd.uiq.theme",
"umj" : "application/vnd.umajin",
"unityweb" : "application/vnd.unity",
"uoml" : "application/vnd.uoml+xml",
"vcx" : "application/vnd.vcx",
"vsd" : "application/vnd.visio",
"vst" : "application/vnd.visio",
"vss" : "application/vnd.visio",
"vsw" : "application/vnd.visio",
"vis" : "application/vnd.visionary",
"vsf" : "application/vnd.vsf",
"wbxml" : "application/vnd.wap.wbxml",
"wmlc" : "application/vnd.wap.wmlc",
"wmlsc" : "application/vnd.wap.wmlscriptc",
"wtb" : "application/vnd.webturbo",
"nbp" : "application/vnd.wolfram.player",
"wpd" : "application/vnd.wordperfect",
"wqd" : "application/vnd.wqd",
"stf" : "application/vnd.wt.stf",
"xar" : "application/vnd.xara",
"xfdl" : "application/vnd.xfdl",
"hvd" : "application/vnd.yamaha.hv-dic",
"hvs" : "application/vnd.yamaha.hv-script",
"hvp" : "application/vnd.yamaha.hv-voice",
"osf" : "application/vnd.yamaha.openscoreformat",
"osfpvg" : "application/vnd.yamaha.openscoreformat.osfpvg+xml",
"saf" : "application/vnd.yamaha.smaf-audio",
"spf" : "application/vnd.yamaha.smaf-phrase",
"cmp" : "application/vnd.yellowriver-custom-menu",
"zir" : "application/vnd.zul",
"zirz" : "application/vnd.zul",
"zaz" : "application/vnd.zzazz.deck+xml",
"vxml" : "application/voicexml+xml",
"wgt" : "application/widget",
"hlp" : "application/winhlp",
"wsdl" : "application/wsdl+xml",
"wspolicy" : "application/wspolicy+xml",
"7z" : "application/x-7z-compressed",
"abw" : "application/x-abiword",
"ace" : "application/x-ace-compressed",
"dmg" : "application/x-apple-diskimage",
"aab" : "application/x-authorware-bin",
"x32" : "application/x-authorware-bin",
"u32" : "application/x-authorware-bin",
"vox" : "application/x-authorware-bin",
"aam" : "application/x-authorware-map",
"aas" : "application/x-authorware-seg",
"bcpio" : "application/x-bcpio",
"torrent" : "application/x-bittorrent",
"blb" : "application/x-blorb",
"blorb" : "application/x-blorb",
"bz" : "application/x-bzip",
"bz2" : "application/x-bzip2",
"boz" : "application/x-bzip2",
"cbr" : "application/x-cbr",
"cba" : "application/x-cbr",
"cbt" : "application/x-cbr",
"cbz" : "application/x-cbr",
"cb7" : "application/x-cbr",
"vcd" : "application/x-cdlink",
"cfs" : "application/x-cfs-compressed",
"chat" : "application/x-chat",
"pgn" : "application/x-chess-pgn",
"nsc" : "application/x-conference",
"cpio" : "application/x-cpio",
"csh" : "application/x-csh",
"deb" : "application/x-debian-package",
"udeb" : "application/x-debian-package",
"dgc" : "application/x-dgc-compressed",
"dir" : "application/x-director",
"dcr" : "application/x-director",
"dxr" : "application/x-director",
"cst" : "application/x-director",
"cct" : "application/x-director",
"cxt" : "application/x-director",
"w3d" : "application/x-director",
"fgd" : "application/x-director",
"swa" : "application/x-director",
"wad" : "application/x-doom",
"ncx" : "application/x-dtbncx+xml",
"dtb" : "application/x-dtbook+xml",
"res" : "application/x-dtbresource+xml",
"dvi" : "application/x-dvi",
"evy" : "application/x-envoy",
"eva" : "application/x-eva",
"bdf" : "application/x-font-bdf",
"gsf" : "application/x-font-ghostscript",
"psf" : "application/x-font-linux-psf",
"otf" : "application/x-font-otf",
"pcf" : "application/x-font-pcf",
"snf" : "application/x-font-snf",
"ttf" : "application/x-font-ttf",
"ttc" : "application/x-font-ttf",
"pfa" : "application/x-font-type1",
"pfb" : "application/x-font-type1",
"pfm" : "application/x-font-type1",
"afm" : "application/x-font-type1",
"woff" : "application/x-font-woff",
"arc" : "application/x-freearc",
"spl" : "application/x-futuresplash",
"gca" : "application/x-gca-compressed",
"ulx" : "application/x-glulx",
"gnumeric" : "application/x-gnumeric",
"gramps" : "application/x-gramps-xml",
"gtar" : "application/x-gtar",
"hdf" : "application/x-hdf",
"install" : "application/x-install-instructions",
"iso" : "application/x-iso9660-image",
"jnlp" : "application/x-java-jnlp-file",
"latex" : "application/x-latex",
"lzh" : "application/x-lzh-compressed",
"lha" : "application/x-lzh-compressed",
"mie" : "application/x-mie",
"prc" : "application/x-mobipocket-ebook",
"mobi" : "application/x-mobipocket-ebook",
"application" : "application/x-ms-application",
"lnk" : "application/x-ms-shortcut",
"wmd" : "application/x-ms-wmd",
"wmz" : "application/x-ms-wmz",
"xbap" : "application/x-ms-xbap",
"mdb" : "application/x-msaccess",
"obd" : "application/x-msbinder",
"crd" : "application/x-mscardfile",
"clp" : "application/x-msclip",
"exe" : "application/x-msdownload",
"dll" : "application/x-msdownload",
"com" : "application/x-msdownload",
"bat" : "application/x-msdownload",
"msi" : "application/x-msdownload",
"mvb" : "application/x-msmediaview",
"m13" : "application/x-msmediaview",
"m14" : "application/x-msmediaview",
"wmf" : "application/x-msmetafile",
"wmz" : "application/x-msmetafile",
"emf" : "application/x-msmetafile",
"emz" : "application/x-msmetafile",
"mny" : "application/x-msmoney",
"pub" : "application/x-mspublisher",
"scd" : "application/x-msschedule",
"trm" : "application/x-msterminal",
"wri" : "application/x-mswrite",
"nc" : "application/x-netcdf",
"cdf" : "application/x-netcdf",
"nzb" : "application/x-nzb",
"p12" : "application/x-pkcs12",
"pfx" : "application/x-pkcs12",
"p7b" : "application/x-pkcs7-certificates",
"spc" : "application/x-pkcs7-certificates",
"p7r" : "application/x-pkcs7-certreqresp",
"rar" : "application/x-rar-compressed",
"ris" : "application/x-research-info-systems",
"sh" : "application/x-sh",
"shar" : "application/x-shar",
"swf" : "application/x-shockwave-flash",
"xap" : "application/x-silverlight-app",
"sql" : "application/x-sql",
"sit" : "application/x-stuffit",
"sitx" : "application/x-stuffitx",
"srt" : "application/x-subrip",
"sv4cpio" : "application/x-sv4cpio",
"sv4crc" : "application/x-sv4crc",
"t3" : "application/x-t3vm-image",
"gam" : "application/x-tads",
"tar" : "application/x-tar",
"tcl" : "application/x-tcl",
"tex" : "application/x-tex",
"tfm" : "application/x-tex-tfm",
"texinfo" : "application/x-texinfo",
"texi" : "application/x-texinfo",
"obj" : "application/x-tgif",
"ustar" : "application/x-ustar",
"src" : "application/x-wais-source",
"der" : "application/x-x509-ca-cert",
"crt" : "application/x-x509-ca-cert",
"fig" : "application/x-xfig",
"xlf" : "application/x-xliff+xml",
"xpi" : "application/x-xpinstall",
"xz" : "application/x-xz",
"z1" : "application/x-zmachine",
"z2" : "application/x-zmachine",
"z3" : "application/x-zmachine",
"z4" : "application/x-zmachine",
"z5" : "application/x-zmachine",
"z6" : "application/x-zmachine",
"z7" : "application/x-zmachine",
"z8" : "application/x-zmachine",
"xaml" : "application/xaml+xml",
"xdf" : "application/xcap-diff+xml",
"xenc" : "application/xenc+xml",
"xhtml" : "application/xhtml+xml",
"xht" : "application/xhtml+xml",
"xml" : "application/xml",
"xsl" : "application/xml",
"dtd" : "application/xml-dtd",
"xop" : "application/xop+xml",
"xpl" : "application/xproc+xml",
"xslt" : "application/xslt+xml",
"xspf" : "application/xspf+xml",
"mxml" : "application/xv+xml",
"xhvml" : "application/xv+xml",
"xvml" : "application/xv+xml",
"xvm" : "application/xv+xml",
"yang" : "application/yang",
"yin" : "application/yin+xml",
"zip" : "application/zip",
"adp" : "audio/adpcm",
"au" : "audio/basic",
"snd" : "audio/basic",
"mid" : "audio/midi",
"midi" : "audio/midi",
"kar" : "audio/midi",
"rmi" : "audio/midi",
"m4a" : "audio/mp4",
"mp4a" : "audio/mp4",
"mpga" : "audio/mpeg",
"mp2" : "audio/mpeg",
"mp2a" : "audio/mpeg",
"mp3" : "audio/mpeg",
"m2a" : "audio/mpeg",
"m3a" : "audio/mpeg",
"oga" : "audio/ogg",
"ogg" : "audio/ogg",
"spx" : "audio/ogg",
"s3m" : "audio/s3m",
"sil" : "audio/silk",
"uva" : "audio/vnd.dece.audio",
"uvva" : "audio/vnd.dece.audio",
"eol" : "audio/vnd.digital-winds",
"dra" : "audio/vnd.dra",
"dts" : "audio/vnd.dts",
"dtshd" : "audio/vnd.dts.hd",
"lvp" : "audio/vnd.lucent.voice",
"pya" : "audio/vnd.ms-playready.media.pya",
"ecelp4800" : "audio/vnd.nuera.ecelp4800",
"ecelp7470" : "audio/vnd.nuera.ecelp7470",
"ecelp9600" : "audio/vnd.nuera.ecelp9600",
"rip" : "audio/vnd.rip",
"weba" : "audio/webm",
"aac" : "audio/x-aac",
"aif" : "audio/x-aiff",
"aiff" : "audio/x-aiff",
"aifc" : "audio/x-aiff",
"caf" : "audio/x-caf",
"flac" : "audio/x-flac",
"mka" : "audio/x-matroska",
"m3u" : "audio/x-mpegurl",
"wax" : "audio/x-ms-wax",
"wma" : "audio/x-ms-wma",
"ram" : "audio/x-pn-realaudio",
"ra" : "audio/x-pn-realaudio",
"rmp" : "audio/x-pn-realaudio-plugin",
"wav" : "audio/x-wav",
"xm" : "audio/xm",
"cdx" : "chemical/x-cdx",
"cif" : "chemical/x-cif",
"cmdf" : "chemical/x-cmdf",
"cml" : "chemical/x-cml",
"csml" : "chemical/x-csml",
"xyz" : "chemical/x-xyz",
"bmp" : "image/bmp",
"cgm" : "image/cgm",
"g3" : "image/g3fax",
"gif" : "image/gif",
"ief" : "image/ief",
"jpeg" : "image/jpeg",
"jpg" : "image/jpeg",
"jpe" : "image/jpeg",
"ktx" : "image/ktx",
"png" : "image/png",
"btif" : "image/prs.btif",
"sgi" : "image/sgi",
"svg" : "image/svg+xml",
"svgz" : "image/svg+xml",
"tiff" : "image/tiff",
"tif" : "image/tiff",
"psd" : "image/vnd.adobe.photoshop",
"uvi" : "image/vnd.dece.graphic",
"uvvi" : "image/vnd.dece.graphic",
"uvg" : "image/vnd.dece.graphic",
"uvvg" : "image/vnd.dece.graphic",
"sub" : "image/vnd.dvb.subtitle",
"djvu" : "image/vnd.djvu",
"djv" : "image/vnd.djvu",
"dwg" : "image/vnd.dwg",
"dxf" : "image/vnd.dxf",
"fbs" : "image/vnd.fastbidsheet",
"fpx" : "image/vnd.fpx",
"fst" : "image/vnd.fst",
"mmr" : "image/vnd.fujixerox.edmics-mmr",
"rlc" : "image/vnd.fujixerox.edmics-rlc",
"mdi" : "image/vnd.ms-modi",
"wdp" : "image/vnd.ms-photo",
"npx" : "image/vnd.net-fpx",
"wbmp" : "image/vnd.wap.wbmp",
"xif" : "image/vnd.xiff",
"webp" : "image/webp",
"3ds" : "image/x-3ds",
"ras" : "image/x-cmu-raster",
"cmx" : "image/x-cmx",
"fh" : "image/x-freehand",
"fhc" : "image/x-freehand",
"fh4" : "image/x-freehand",
"fh5" : "image/x-freehand",
"fh7" : "image/x-freehand",
"ico" : "image/x-icon",
"sid" : "image/x-mrsid-image",
"pcx" : "image/x-pcx",
"pic" : "image/x-pict",
"pct" : "image/x-pict",
"pnm" : "image/x-portable-anymap",
"pbm" : "image/x-portable-bitmap",
"pgm" : "image/x-portable-graymap",
"ppm" : "image/x-portable-pixmap",
"rgb" : "image/x-rgb",
"tga" : "image/x-tga",
"xbm" : "image/x-xbitmap",
"xpm" : "image/x-xpixmap",
"xwd" : "image/x-xwindowdump",
"eml" : "message/rfc822",
"mime" : "message/rfc822",
"igs" : "model/iges",
"iges" : "model/iges",
"msh" : "model/mesh",
"mesh" : "model/mesh",
"silo" : "model/mesh",
"dae" : "model/vnd.collada+xml",
"dwf" : "model/vnd.dwf",
"gdl" : "model/vnd.gdl",
"gtw" : "model/vnd.gtw",
"mts" : "model/vnd.mts",
"vtu" : "model/vnd.vtu",
"wrl" : "model/vrml",
"vrml" : "model/vrml",
"x3db" : "model/x3d+binary",
"x3dbz" : "model/x3d+binary",
"x3dv" : "model/x3d+vrml",
"x3dvz" : "model/x3d+vrml",
"x3d" : "model/x3d+xml",
"x3dz" : "model/x3d+xml",
"appcache" : "text/cache-manifest",
"ics" : "text/calendar",
"ifb" : "text/calendar",
"css" : "text/css",
"csv" : "text/csv",
"html" : "text/html",
"htm" : "text/html",
"n3" : "text/n3",
"txt" : "text/plain",
"text" : "text/plain",
"conf" : "text/plain",
"def" : "text/plain",
"list" : "text/plain",
"log" : "text/plain",
"in" : "text/plain",
"dsc" : "text/prs.lines.tag",
"rtx" : "text/richtext",
"sgml" : "text/sgml",
"sgm" : "text/sgml",
"tsv" : "text/tab-separated-values",
"t" : "text/troff",
"tr" : "text/troff",
"roff" : "text/troff",
"man" : "text/troff",
"me" : "text/troff",
"ms" : "text/troff",
"ttl" : "text/turtle",
"uri" : "text/uri-list",
"uris" : "text/uri-list",
"urls" : "text/uri-list",
"vcard" : "text/vcard",
"curl" : "text/vnd.curl",
"dcurl" : "text/vnd.curl.dcurl",
"scurl" : "text/vnd.curl.scurl",
"mcurl" : "text/vnd.curl.mcurl",
"sub" : "text/vnd.dvb.subtitle",
"fly" : "text/vnd.fly",
"flx" : "text/vnd.fmi.flexstor",
"gv" : "text/vnd.graphviz",
"3dml" : "text/vnd.in3d.3dml",
"spot" : "text/vnd.in3d.spot",
"jad" : "text/vnd.sun.j2me.app-descriptor",
"wml" : "text/vnd.wap.wml",
"wmls" : "text/vnd.wap.wmlscript",
"s" : "text/x-asm",
"asm" : "text/x-asm",
"c" : "text/x-c",
"cc" : "text/x-c",
"cxx" : "text/x-c",
"cpp" : "text/x-c",
"h" : "text/x-c",
"hh" : "text/x-c",
"dic" : "text/x-c",
"f" : "text/x-fortran",
"for" : "text/x-fortran",
"f77" : "text/x-fortran",
"f90" : "text/x-fortran",
"java" : "text/x-java-source",
"opml" : "text/x-opml",
"p" : "text/x-pascal",
"pas" : "text/x-pascal",
"nfo" : "text/x-nfo",
"etx" : "text/x-setext",
"sfv" : "text/x-sfv",
"uu" : "text/x-uuencode",
"vcs" : "text/x-vcalendar",
"vcf" : "text/x-vcard",
"3gp" : "video/3gpp",
"3g2" : "video/3gpp2",
"h261" : "video/h261",
"h263" : "video/h263",
"h264" : "video/h264",
"jpgv" : "video/jpeg",
"jpm" : "video/jpm",
"jpgm" : "video/jpm",
"mj2" : "video/mj2",
"mjp2" : "video/mj2",
"mp4" : "video/mp4",
"mp4v" : "video/mp4",
"mpg4" : "video/mp4",
"mpeg" : "video/mpeg",
"mpg" : "video/mpeg",
"mpe" : "video/mpeg",
"m1v" : "video/mpeg",
"m2v" : "video/mpeg",
"ogv" : "video/ogg",
"qt" : "video/quicktime",
"mov" : "video/quicktime",
"uvh" : "video/vnd.dece.hd",
"uvvh" : "video/vnd.dece.hd",
"uvm" : "video/vnd.dece.mobile",
"uvvm" : "video/vnd.dece.mobile",
"uvp" : "video/vnd.dece.pd",
"uvvp" : "video/vnd.dece.pd",
"uvs" : "video/vnd.dece.sd",
"uvvs" : "video/vnd.dece.sd",
"uvv" : "video/vnd.dece.video",
"uvvv" : "video/vnd.dece.video",
"dvb" : "video/vnd.dvb.file",
"fvt" : "video/vnd.fvt",
"mxu" : "video/vnd.mpegurl",
"m4u" : "video/vnd.mpegurl",
"pyv" : "video/vnd.ms-playready.media.pyv",
"uvu" : "video/vnd.uvvu.mp4",
"uvvu" : "video/vnd.uvvu.mp4",
"viv" : "video/vnd.vivo",
"webm" : "video/webm",
"f4v" : "video/x-f4v",
"fli" : "video/x-fli",
"flv" : "video/x-flv",
"m4v" : "video/x-m4v",
"mkv" : "video/x-matroska",
"mk3d" : "video/x-matroska",
"mks" : "video/x-matroska",
"mng" : "video/x-mng",
"asf" : "video/x-ms-asf",
"asx" : "video/x-ms-asf",
"vob" : "video/x-ms-vob",
"wm" : "video/x-ms-wm",
"wmv" : "video/x-ms-wmv",
"wmx" : "video/x-ms-wmx",
"wvx" : "video/x-ms-wvx",
"avi" : "video/x-msvideo",
"movie" : "video/x-sgi-movie",
"smv" : "video/x-smv",
"ice" : "x-conference/x-cooltalk"
}

View File

@ -1,767 +0,0 @@
{
"application/andrew-inset" : ["ez"],
"application/applixware" : ["aw"],
"application/atom+xml" : ["atom"],
"application/atomcat+xml" : ["atomcat"],
"application/atomsvc+xml" : ["atomsvc"],
"application/ccxml+xml" : ["ccxml"],
"application/cdmi-capability" : ["cdmia"],
"application/cdmi-container" : ["cdmic"],
"application/cdmi-domain" : ["cdmid"],
"application/cdmi-object" : ["cdmio"],
"application/cdmi-queue" : ["cdmiq"],
"application/cu-seeme" : ["cu"],
"application/davmount+xml" : ["davmount"],
"application/docbook+xml" : ["dbk"],
"application/dssc+der" : ["dssc"],
"application/dssc+xml" : ["xdssc"],
"application/ecmascript" : ["ecma"],
"application/emma+xml" : ["emma"],
"application/epub+zip" : ["epub"],
"application/exi" : ["exi"],
"application/font-tdpfr" : ["pfr"],
"application/gml+xml" : ["gml"],
"application/gpx+xml" : ["gpx"],
"application/gxf" : ["gxf"],
"application/hyperstudio" : ["stk"],
"application/inkml+xml" : ["ink", "inkml"],
"application/ipfix" : ["ipfix"],
"application/java-archive" : ["jar"],
"application/java-serialized-object" : ["ser"],
"application/java-vm" : ["class"],
"application/javascript" : ["js"],
"application/json" : ["json"],
"application/jsonml+json" : ["jsonml"],
"application/lost+xml" : ["lostxml"],
"application/mac-binhex40" : ["hqx"],
"application/mac-compactpro" : ["cpt"],
"application/mads+xml" : ["mads"],
"application/marc" : ["mrc"],
"application/marcxml+xml" : ["mrcx"],
"application/mathematica" : ["ma", "nb", "mb"],
"application/mathml+xml" : ["mathml"],
"application/mbox" : ["mbox"],
"application/mediaservercontrol+xml" : ["mscml"],
"application/metalink+xml" : ["metalink"],
"application/metalink4+xml" : ["meta4"],
"application/mets+xml" : ["mets"],
"application/mods+xml" : ["mods"],
"application/mp21" : ["m21", "mp21"],
"application/mp4" : ["mp4s"],
"application/msword" : ["doc", "dot"],
"application/mxf" : ["mxf"],
"application/octet-stream" : ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy"],
"application/oda" : ["oda"],
"application/oebps-package+xml" : ["opf"],
"application/ogg" : ["ogx"],
"application/omdoc+xml" : ["omdoc"],
"application/onenote" : ["onetoc", "onetoc2", "onetmp", "onepkg"],
"application/oxps" : ["oxps"],
"application/patch-ops-error+xml" : ["xer"],
"application/pdf" : ["pdf"],
"application/pgp-encrypted" : ["pgp"],
"application/pgp-signature" : ["asc", "sig"],
"application/pics-rules" : ["prf"],
"application/pkcs10" : ["p10"],
"application/pkcs7-mime" : ["p7m", "p7c"],
"application/pkcs7-signature" : ["p7s"],
"application/pkcs8" : ["p8"],
"application/pkix-attr-cert" : ["ac"],
"application/pkix-cert" : ["cer"],
"application/pkix-crl" : ["crl"],
"application/pkix-pkipath" : ["pkipath"],
"application/pkixcmp" : ["pki"],
"application/pls+xml" : ["pls"],
"application/postscript" : ["ai", "eps", "ps"],
"application/prs.cww" : ["cww"],
"application/pskc+xml" : ["pskcxml"],
"application/rdf+xml" : ["rdf"],
"application/reginfo+xml" : ["rif"],
"application/relax-ng-compact-syntax" : ["rnc"],
"application/resource-lists+xml" : ["rl"],
"application/resource-lists-diff+xml" : ["rld"],
"application/rls-services+xml" : ["rs"],
"application/rpki-ghostbusters" : ["gbr"],
"application/rpki-manifest" : ["mft"],
"application/rpki-roa" : ["roa"],
"application/rsd+xml" : ["rsd"],
"application/rss+xml" : ["rss"],
"application/rtf" : ["rtf"],
"application/sbml+xml" : ["sbml"],
"application/scvp-cv-request" : ["scq"],
"application/scvp-cv-response" : ["scs"],
"application/scvp-vp-request" : ["spq"],
"application/scvp-vp-response" : ["spp"],
"application/sdp" : ["sdp"],
"application/set-payment-initiation" : ["setpay"],
"application/set-registration-initiation" : ["setreg"],
"application/shf+xml" : ["shf"],
"application/smil+xml" : ["smi", "smil"],
"application/sparql-query" : ["rq"],
"application/sparql-results+xml" : ["srx"],
"application/srgs" : ["gram"],
"application/srgs+xml" : ["grxml"],
"application/sru+xml" : ["sru"],
"application/ssdl+xml" : ["ssdl"],
"application/ssml+xml" : ["ssml"],
"application/tei+xml" : ["tei", "teicorpus"],
"application/thraud+xml" : ["tfi"],
"application/timestamped-data" : ["tsd"],
"application/vnd.3gpp.pic-bw-large" : ["plb"],
"application/vnd.3gpp.pic-bw-small" : ["psb"],
"application/vnd.3gpp.pic-bw-var" : ["pvb"],
"application/vnd.3gpp2.tcap" : ["tcap"],
"application/vnd.3m.post-it-notes" : ["pwn"],
"application/vnd.accpac.simply.aso" : ["aso"],
"application/vnd.accpac.simply.imp" : ["imp"],
"application/vnd.acucobol" : ["acu"],
"application/vnd.acucorp" : ["atc", "acutc"],
"application/vnd.adobe.air-application-installer-package+zip" : ["air"],
"application/vnd.adobe.formscentral.fcdt" : ["fcdt"],
"application/vnd.adobe.fxp" : ["fxp", "fxpl"],
"application/vnd.adobe.xdp+xml" : ["xdp"],
"application/vnd.adobe.xfdf" : ["xfdf"],
"application/vnd.ahead.space" : ["ahead"],
"application/vnd.airzip.filesecure.azf" : ["azf"],
"application/vnd.airzip.filesecure.azs" : ["azs"],
"application/vnd.amazon.ebook" : ["azw"],
"application/vnd.americandynamics.acc" : ["acc"],
"application/vnd.amiga.ami" : ["ami"],
"application/vnd.android.package-archive" : ["apk"],
"application/vnd.anser-web-certificate-issue-initiation" : ["cii"],
"application/vnd.anser-web-funds-transfer-initiation" : ["fti"],
"application/vnd.antix.game-component" : ["atx"],
"application/vnd.apple.installer+xml" : ["mpkg"],
"application/vnd.apple.mpegurl" : ["m3u8"],
"application/vnd.aristanetworks.swi" : ["swi"],
"application/vnd.astraea-software.iota" : ["iota"],
"application/vnd.audiograph" : ["aep"],
"application/vnd.blueice.multipass" : ["mpm"],
"application/vnd.bmi" : ["bmi"],
"application/vnd.businessobjects" : ["rep"],
"application/vnd.chemdraw+xml" : ["cdxml"],
"application/vnd.chipnuts.karaoke-mmd" : ["mmd"],
"application/vnd.cinderella" : ["cdy"],
"application/vnd.claymore" : ["cla"],
"application/vnd.cloanto.rp9" : ["rp9"],
"application/vnd.clonk.c4group" : ["c4g", "c4d", "c4f", "c4p", "c4u"],
"application/vnd.cluetrust.cartomobile-config" : ["c11amc"],
"application/vnd.cluetrust.cartomobile-config-pkg" : ["c11amz"],
"application/vnd.commonspace" : ["csp"],
"application/vnd.contact.cmsg" : ["cdbcmsg"],
"application/vnd.cosmocaller" : ["cmc"],
"application/vnd.crick.clicker" : ["clkx"],
"application/vnd.crick.clicker.keyboard" : ["clkk"],
"application/vnd.crick.clicker.palette" : ["clkp"],
"application/vnd.crick.clicker.template" : ["clkt"],
"application/vnd.crick.clicker.wordbank" : ["clkw"],
"application/vnd.criticaltools.wbs+xml" : ["wbs"],
"application/vnd.ctc-posml" : ["pml"],
"application/vnd.cups-ppd" : ["ppd"],
"application/vnd.curl.car" : ["car"],
"application/vnd.curl.pcurl" : ["pcurl"],
"application/vnd.dart" : ["dart"],
"application/vnd.data-vision.rdz" : ["rdz"],
"application/vnd.dece.data" : ["uvf", "uvvf", "uvd", "uvvd"],
"application/vnd.dece.ttml+xml" : ["uvt", "uvvt"],
"application/vnd.dece.unspecified" : ["uvx", "uvvx"],
"application/vnd.dece.zip" : ["uvz", "uvvz"],
"application/vnd.denovo.fcselayout-link" : ["fe_launch"],
"application/vnd.dna" : ["dna"],
"application/vnd.dolby.mlp" : ["mlp"],
"application/vnd.dpgraph" : ["dpg"],
"application/vnd.dreamfactory" : ["dfac"],
"application/vnd.ds-keypoint" : ["kpxx"],
"application/vnd.dvb.ait" : ["ait"],
"application/vnd.dvb.service" : ["svc"],
"application/vnd.dynageo" : ["geo"],
"application/vnd.ecowin.chart" : ["mag"],
"application/vnd.enliven" : ["nml"],
"application/vnd.epson.esf" : ["esf"],
"application/vnd.epson.msf" : ["msf"],
"application/vnd.epson.quickanime" : ["qam"],
"application/vnd.epson.salt" : ["slt"],
"application/vnd.epson.ssf" : ["ssf"],
"application/vnd.eszigno3+xml" : ["es3", "et3"],
"application/vnd.ezpix-album" : ["ez2"],
"application/vnd.ezpix-package" : ["ez3"],
"application/vnd.fdf" : ["fdf"],
"application/vnd.fdsn.mseed" : ["mseed"],
"application/vnd.fdsn.seed" : ["seed", "dataless"],
"application/vnd.flographit" : ["gph"],
"application/vnd.fluxtime.clip" : ["ftc"],
"application/vnd.framemaker" : ["fm", "frame", "maker", "book"],
"application/vnd.frogans.fnc" : ["fnc"],
"application/vnd.frogans.ltf" : ["ltf"],
"application/vnd.fsc.weblaunch" : ["fsc"],
"application/vnd.fujitsu.oasys" : ["oas"],
"application/vnd.fujitsu.oasys2" : ["oa2"],
"application/vnd.fujitsu.oasys3" : ["oa3"],
"application/vnd.fujitsu.oasysgp" : ["fg5"],
"application/vnd.fujitsu.oasysprs" : ["bh2"],
"application/vnd.fujixerox.ddd" : ["ddd"],
"application/vnd.fujixerox.docuworks" : ["xdw"],
"application/vnd.fujixerox.docuworks.binder" : ["xbd"],
"application/vnd.fuzzysheet" : ["fzs"],
"application/vnd.genomatix.tuxedo" : ["txd"],
"application/vnd.geogebra.file" : ["ggb"],
"application/vnd.geogebra.tool" : ["ggt"],
"application/vnd.geometry-explorer" : ["gex", "gre"],
"application/vnd.geonext" : ["gxt"],
"application/vnd.geoplan" : ["g2w"],
"application/vnd.geospace" : ["g3w"],
"application/vnd.gmx" : ["gmx"],
"application/vnd.google-earth.kml+xml" : ["kml"],
"application/vnd.google-earth.kmz" : ["kmz"],
"application/vnd.grafeq" : ["gqf", "gqs"],
"application/vnd.groove-account" : ["gac"],
"application/vnd.groove-help" : ["ghf"],
"application/vnd.groove-identity-message" : ["gim"],
"application/vnd.groove-injector" : ["grv"],
"application/vnd.groove-tool-message" : ["gtm"],
"application/vnd.groove-tool-template" : ["tpl"],
"application/vnd.groove-vcard" : ["vcg"],
"application/vnd.hal+xml" : ["hal"],
"application/vnd.handheld-entertainment+xml" : ["zmm"],
"application/vnd.hbci" : ["hbci"],
"application/vnd.hhe.lesson-player" : ["les"],
"application/vnd.hp-hpgl" : ["hpgl"],
"application/vnd.hp-hpid" : ["hpid"],
"application/vnd.hp-hps" : ["hps"],
"application/vnd.hp-jlyt" : ["jlt"],
"application/vnd.hp-pcl" : ["pcl"],
"application/vnd.hp-pclxl" : ["pclxl"],
"application/vnd.hydrostatix.sof-data" : ["sfd-hdstx"],
"application/vnd.ibm.minipay" : ["mpy"],
"application/vnd.ibm.modcap" : ["afp", "listafp", "list3820"],
"application/vnd.ibm.rights-management" : ["irm"],
"application/vnd.ibm.secure-container" : ["sc"],
"application/vnd.iccprofile" : ["icc", "icm"],
"application/vnd.igloader" : ["igl"],
"application/vnd.immervision-ivp" : ["ivp"],
"application/vnd.immervision-ivu" : ["ivu"],
"application/vnd.insors.igm" : ["igm"],
"application/vnd.intercon.formnet" : ["xpw", "xpx"],
"application/vnd.intergeo" : ["i2g"],
"application/vnd.intu.qbo" : ["qbo"],
"application/vnd.intu.qfx" : ["qfx"],
"application/vnd.ipunplugged.rcprofile" : ["rcprofile"],
"application/vnd.irepository.package+xml" : ["irp"],
"application/vnd.is-xpr" : ["xpr"],
"application/vnd.isac.fcs" : ["fcs"],
"application/vnd.jam" : ["jam"],
"application/vnd.jcp.javame.midlet-rms" : ["rms"],
"application/vnd.jisp" : ["jisp"],
"application/vnd.joost.joda-archive" : ["joda"],
"application/vnd.kahootz" : ["ktz", "ktr"],
"application/vnd.kde.karbon" : ["karbon"],
"application/vnd.kde.kchart" : ["chrt"],
"application/vnd.kde.kformula" : ["kfo"],
"application/vnd.kde.kivio" : ["flw"],
"application/vnd.kde.kontour" : ["kon"],
"application/vnd.kde.kpresenter" : ["kpr", "kpt"],
"application/vnd.kde.kspread" : ["ksp"],
"application/vnd.kde.kword" : ["kwd", "kwt"],
"application/vnd.kenameaapp" : ["htke"],
"application/vnd.kidspiration" : ["kia"],
"application/vnd.kinar" : ["kne", "knp"],
"application/vnd.koan" : ["skp", "skd", "skt", "skm"],
"application/vnd.kodak-descriptor" : ["sse"],
"application/vnd.las.las+xml" : ["lasxml"],
"application/vnd.llamagraphics.life-balance.desktop" : ["lbd"],
"application/vnd.llamagraphics.life-balance.exchange+xml" : ["lbe"],
"application/vnd.lotus-1-2-3" : ["123"],
"application/vnd.lotus-approach" : ["apr"],
"application/vnd.lotus-freelance" : ["pre"],
"application/vnd.lotus-notes" : ["nsf"],
"application/vnd.lotus-organizer" : ["org"],
"application/vnd.lotus-screencam" : ["scm"],
"application/vnd.lotus-wordpro" : ["lwp"],
"application/vnd.macports.portpkg" : ["portpkg"],
"application/vnd.mcd" : ["mcd"],
"application/vnd.medcalcdata" : ["mc1"],
"application/vnd.mediastation.cdkey" : ["cdkey"],
"application/vnd.mfer" : ["mwf"],
"application/vnd.mfmp" : ["mfm"],
"application/vnd.micrografx.flo" : ["flo"],
"application/vnd.micrografx.igx" : ["igx"],
"application/vnd.mif" : ["mif"],
"application/vnd.mobius.daf" : ["daf"],
"application/vnd.mobius.dis" : ["dis"],
"application/vnd.mobius.mbk" : ["mbk"],
"application/vnd.mobius.mqy" : ["mqy"],
"application/vnd.mobius.msl" : ["msl"],
"application/vnd.mobius.plc" : ["plc"],
"application/vnd.mobius.txf" : ["txf"],
"application/vnd.mophun.application" : ["mpn"],
"application/vnd.mophun.certificate" : ["mpc"],
"application/vnd.mozilla.xul+xml" : ["xul"],
"application/vnd.ms-artgalry" : ["cil"],
"application/vnd.ms-cab-compressed" : ["cab"],
"application/vnd.ms-excel" : ["xls", "xlm", "xla", "xlc", "xlt", "xlw"],
"application/vnd.ms-excel.addin.macroenabled.12" : ["xlam"],
"application/vnd.ms-excel.sheet.binary.macroenabled.12" : ["xlsb"],
"application/vnd.ms-excel.sheet.macroenabled.12" : ["xlsm"],
"application/vnd.ms-excel.template.macroenabled.12" : ["xltm"],
"application/vnd.ms-fontobject" : ["eot"],
"application/vnd.ms-htmlhelp" : ["chm"],
"application/vnd.ms-ims" : ["ims"],
"application/vnd.ms-lrm" : ["lrm"],
"application/vnd.ms-officetheme" : ["thmx"],
"application/vnd.ms-pki.seccat" : ["cat"],
"application/vnd.ms-pki.stl" : ["stl"],
"application/vnd.ms-powerpoint" : ["ppt", "pps", "pot"],
"application/vnd.ms-powerpoint.addin.macroenabled.12" : ["ppam"],
"application/vnd.ms-powerpoint.presentation.macroenabled.12" : ["pptm"],
"application/vnd.ms-powerpoint.slide.macroenabled.12" : ["sldm"],
"application/vnd.ms-powerpoint.slideshow.macroenabled.12" : ["ppsm"],
"application/vnd.ms-powerpoint.template.macroenabled.12" : ["potm"],
"application/vnd.ms-project" : ["mpp", "mpt"],
"application/vnd.ms-word.document.macroenabled.12" : ["docm"],
"application/vnd.ms-word.template.macroenabled.12" : ["dotm"],
"application/vnd.ms-works" : ["wps", "wks", "wcm", "wdb"],
"application/vnd.ms-wpl" : ["wpl"],
"application/vnd.ms-xpsdocument" : ["xps"],
"application/vnd.mseq" : ["mseq"],
"application/vnd.musician" : ["mus"],
"application/vnd.muvee.style" : ["msty"],
"application/vnd.mynfc" : ["taglet"],
"application/vnd.neurolanguage.nlu" : ["nlu"],
"application/vnd.nitf" : ["ntf", "nitf"],
"application/vnd.noblenet-directory" : ["nnd"],
"application/vnd.noblenet-sealer" : ["nns"],
"application/vnd.noblenet-web" : ["nnw"],
"application/vnd.nokia.n-gage.data" : ["ngdat"],
"application/vnd.nokia.n-gage.symbian.install" : ["n-gage"],
"application/vnd.nokia.radio-preset" : ["rpst"],
"application/vnd.nokia.radio-presets" : ["rpss"],
"application/vnd.novadigm.edm" : ["edm"],
"application/vnd.novadigm.edx" : ["edx"],
"application/vnd.novadigm.ext" : ["ext"],
"application/vnd.oasis.opendocument.chart" : ["odc"],
"application/vnd.oasis.opendocument.chart-template" : ["otc"],
"application/vnd.oasis.opendocument.database" : ["odb"],
"application/vnd.oasis.opendocument.formula" : ["odf"],
"application/vnd.oasis.opendocument.formula-template" : ["odft"],
"application/vnd.oasis.opendocument.graphics" : ["odg"],
"application/vnd.oasis.opendocument.graphics-template" : ["otg"],
"application/vnd.oasis.opendocument.image" : ["odi"],
"application/vnd.oasis.opendocument.image-template" : ["oti"],
"application/vnd.oasis.opendocument.presentation" : ["odp"],
"application/vnd.oasis.opendocument.presentation-template" : ["otp"],
"application/vnd.oasis.opendocument.spreadsheet" : ["ods"],
"application/vnd.oasis.opendocument.spreadsheet-template" : ["ots"],
"application/vnd.oasis.opendocument.text" : ["odt"],
"application/vnd.oasis.opendocument.text-master" : ["odm"],
"application/vnd.oasis.opendocument.text-template" : ["ott"],
"application/vnd.oasis.opendocument.text-web" : ["oth"],
"application/vnd.olpc-sugar" : ["xo"],
"application/vnd.oma.dd2+xml" : ["dd2"],
"application/vnd.openofficeorg.extension" : ["oxt"],
"application/vnd.openxmlformats-officedocument.presentationml.presentation" : ["pptx"],
"application/vnd.openxmlformats-officedocument.presentationml.slide" : ["sldx"],
"application/vnd.openxmlformats-officedocument.presentationml.slideshow" : ["ppsx"],
"application/vnd.openxmlformats-officedocument.presentationml.template" : ["potx"],
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" : ["xlsx"],
"application/vnd.openxmlformats-officedocument.spreadsheetml.template" : ["xltx"],
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" : ["docx"],
"application/vnd.openxmlformats-officedocument.wordprocessingml.template" : ["dotx"],
"application/vnd.osgeo.mapguide.package" : ["mgp"],
"application/vnd.osgi.dp" : ["dp"],
"application/vnd.osgi.subsystem" : ["esa"],
"application/vnd.palm" : ["pdb", "pqa", "oprc"],
"application/vnd.pawaafile" : ["paw"],
"application/vnd.pg.format" : ["str"],
"application/vnd.pg.osasli" : ["ei6"],
"application/vnd.picsel" : ["efif"],
"application/vnd.pmi.widget" : ["wg"],
"application/vnd.pocketlearn" : ["plf"],
"application/vnd.powerbuilder6" : ["pbd"],
"application/vnd.previewsystems.box" : ["box"],
"application/vnd.proteus.magazine" : ["mgz"],
"application/vnd.publishare-delta-tree" : ["qps"],
"application/vnd.pvi.ptid1" : ["ptid"],
"application/vnd.quark.quarkxpress" : ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"],
"application/vnd.realvnc.bed" : ["bed"],
"application/vnd.recordare.musicxml" : ["mxl"],
"application/vnd.recordare.musicxml+xml" : ["musicxml"],
"application/vnd.rig.cryptonote" : ["cryptonote"],
"application/vnd.rim.cod" : ["cod"],
"application/vnd.rn-realmedia" : ["rm"],
"application/vnd.rn-realmedia-vbr" : ["rmvb"],
"application/vnd.route66.link66+xml" : ["link66"],
"application/vnd.sailingtracker.track" : ["st"],
"application/vnd.seemail" : ["see"],
"application/vnd.sema" : ["sema"],
"application/vnd.semd" : ["semd"],
"application/vnd.semf" : ["semf"],
"application/vnd.shana.informed.formdata" : ["ifm"],
"application/vnd.shana.informed.formtemplate" : ["itp"],
"application/vnd.shana.informed.interchange" : ["iif"],
"application/vnd.shana.informed.package" : ["ipk"],
"application/vnd.simtech-mindmapper" : ["twd", "twds"],
"application/vnd.smaf" : ["mmf"],
"application/vnd.smart.teacher" : ["teacher"],
"application/vnd.solent.sdkm+xml" : ["sdkm", "sdkd"],
"application/vnd.spotfire.dxp" : ["dxp"],
"application/vnd.spotfire.sfs" : ["sfs"],
"application/vnd.stardivision.calc" : ["sdc"],
"application/vnd.stardivision.draw" : ["sda"],
"application/vnd.stardivision.impress" : ["sdd"],
"application/vnd.stardivision.math" : ["smf"],
"application/vnd.stardivision.writer" : ["sdw", "vor"],
"application/vnd.stardivision.writer-global" : ["sgl"],
"application/vnd.stepmania.package" : ["smzip"],
"application/vnd.stepmania.stepchart" : ["sm"],
"application/vnd.sun.xml.calc" : ["sxc"],
"application/vnd.sun.xml.calc.template" : ["stc"],
"application/vnd.sun.xml.draw" : ["sxd"],
"application/vnd.sun.xml.draw.template" : ["std"],
"application/vnd.sun.xml.impress" : ["sxi"],
"application/vnd.sun.xml.impress.template" : ["sti"],
"application/vnd.sun.xml.math" : ["sxm"],
"application/vnd.sun.xml.writer" : ["sxw"],
"application/vnd.sun.xml.writer.global" : ["sxg"],
"application/vnd.sun.xml.writer.template" : ["stw"],
"application/vnd.sus-calendar" : ["sus", "susp"],
"application/vnd.svd" : ["svd"],
"application/vnd.symbian.install" : ["sis", "sisx"],
"application/vnd.syncml+xml" : ["xsm"],
"application/vnd.syncml.dm+wbxml" : ["bdm"],
"application/vnd.syncml.dm+xml" : ["xdm"],
"application/vnd.tao.intent-module-archive" : ["tao"],
"application/vnd.tcpdump.pcap" : ["pcap", "cap", "dmp"],
"application/vnd.tmobile-livetv" : ["tmo"],
"application/vnd.trid.tpt" : ["tpt"],
"application/vnd.triscape.mxs" : ["mxs"],
"application/vnd.trueapp" : ["tra"],
"application/vnd.ufdl" : ["ufd", "ufdl"],
"application/vnd.uiq.theme" : ["utz"],
"application/vnd.umajin" : ["umj"],
"application/vnd.unity" : ["unityweb"],
"application/vnd.uoml+xml" : ["uoml"],
"application/vnd.vcx" : ["vcx"],
"application/vnd.visio" : ["vsd", "vst", "vss", "vsw"],
"application/vnd.visionary" : ["vis"],
"application/vnd.vsf" : ["vsf"],
"application/vnd.wap.wbxml" : ["wbxml"],
"application/vnd.wap.wmlc" : ["wmlc"],
"application/vnd.wap.wmlscriptc" : ["wmlsc"],
"application/vnd.webturbo" : ["wtb"],
"application/vnd.wolfram.player" : ["nbp"],
"application/vnd.wordperfect" : ["wpd"],
"application/vnd.wqd" : ["wqd"],
"application/vnd.wt.stf" : ["stf"],
"application/vnd.xara" : ["xar"],
"application/vnd.xfdl" : ["xfdl"],
"application/vnd.yamaha.hv-dic" : ["hvd"],
"application/vnd.yamaha.hv-script" : ["hvs"],
"application/vnd.yamaha.hv-voice" : ["hvp"],
"application/vnd.yamaha.openscoreformat" : ["osf"],
"application/vnd.yamaha.openscoreformat.osfpvg+xml" : ["osfpvg"],
"application/vnd.yamaha.smaf-audio" : ["saf"],
"application/vnd.yamaha.smaf-phrase" : ["spf"],
"application/vnd.yellowriver-custom-menu" : ["cmp"],
"application/vnd.zul" : ["zir", "zirz"],
"application/vnd.zzazz.deck+xml" : ["zaz"],
"application/voicexml+xml" : ["vxml"],
"application/widget" : ["wgt"],
"application/winhlp" : ["hlp"],
"application/wsdl+xml" : ["wsdl"],
"application/wspolicy+xml" : ["wspolicy"],
"application/x-7z-compressed" : ["7z"],
"application/x-abiword" : ["abw"],
"application/x-ace-compressed" : ["ace"],
"application/x-apple-diskimage" : ["dmg"],
"application/x-authorware-bin" : ["aab", "x32", "u32", "vox"],
"application/x-authorware-map" : ["aam"],
"application/x-authorware-seg" : ["aas"],
"application/x-bcpio" : ["bcpio"],
"application/x-bittorrent" : ["torrent"],
"application/x-blorb" : ["blb", "blorb"],
"application/x-bzip" : ["bz"],
"application/x-bzip2" : ["bz2", "boz"],
"application/x-cbr" : ["cbr", "cba", "cbt", "cbz", "cb7"],
"application/x-cdlink" : ["vcd"],
"application/x-cfs-compressed" : ["cfs"],
"application/x-chat" : ["chat"],
"application/x-chess-pgn" : ["pgn"],
"application/x-conference" : ["nsc"],
"application/x-cpio" : ["cpio"],
"application/x-csh" : ["csh"],
"application/x-debian-package" : ["deb", "udeb"],
"application/x-dgc-compressed" : ["dgc"],
"application/x-director" : ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"],
"application/x-doom" : ["wad"],
"application/x-dtbncx+xml" : ["ncx"],
"application/x-dtbook+xml" : ["dtb"],
"application/x-dtbresource+xml" : ["res"],
"application/x-dvi" : ["dvi"],
"application/x-envoy" : ["evy"],
"application/x-eva" : ["eva"],
"application/x-font-bdf" : ["bdf"],
"application/x-font-ghostscript" : ["gsf"],
"application/x-font-linux-psf" : ["psf"],
"application/x-font-otf" : ["otf"],
"application/x-font-pcf" : ["pcf"],
"application/x-font-snf" : ["snf"],
"application/x-font-ttf" : ["ttf", "ttc"],
"application/x-font-type1" : ["pfa", "pfb", "pfm", "afm"],
"application/x-font-woff" : ["woff"],
"application/x-freearc" : ["arc"],
"application/x-futuresplash" : ["spl"],
"application/x-gca-compressed" : ["gca"],
"application/x-glulx" : ["ulx"],
"application/x-gnumeric" : ["gnumeric"],
"application/x-gramps-xml" : ["gramps"],
"application/x-gtar" : ["gtar"],
"application/x-hdf" : ["hdf"],
"application/x-install-instructions" : ["install"],
"application/x-iso9660-image" : ["iso"],
"application/x-java-jnlp-file" : ["jnlp"],
"application/x-latex" : ["latex"],
"application/x-lzh-compressed" : ["lzh", "lha"],
"application/x-mie" : ["mie"],
"application/x-mobipocket-ebook" : ["prc", "mobi"],
"application/x-ms-application" : ["application"],
"application/x-ms-shortcut" : ["lnk"],
"application/x-ms-wmd" : ["wmd"],
"application/x-ms-wmz" : ["wmz"],
"application/x-ms-xbap" : ["xbap"],
"application/x-msaccess" : ["mdb"],
"application/x-msbinder" : ["obd"],
"application/x-mscardfile" : ["crd"],
"application/x-msclip" : ["clp"],
"application/x-msdownload" : ["exe", "dll", "com", "bat", "msi"],
"application/x-msmediaview" : ["mvb", "m13", "m14"],
"application/x-msmetafile" : ["wmf", "wmz", "emf", "emz"],
"application/x-msmoney" : ["mny"],
"application/x-mspublisher" : ["pub"],
"application/x-msschedule" : ["scd"],
"application/x-msterminal" : ["trm"],
"application/x-mswrite" : ["wri"],
"application/x-netcdf" : ["nc", "cdf"],
"application/x-nzb" : ["nzb"],
"application/x-pkcs12" : ["p12", "pfx"],
"application/x-pkcs7-certificates" : ["p7b", "spc"],
"application/x-pkcs7-certreqresp" : ["p7r"],
"application/x-rar-compressed" : ["rar"],
"application/x-research-info-systems" : ["ris"],
"application/x-sh" : ["sh"],
"application/x-shar" : ["shar"],
"application/x-shockwave-flash" : ["swf"],
"application/x-silverlight-app" : ["xap"],
"application/x-sql" : ["sql"],
"application/x-stuffit" : ["sit"],
"application/x-stuffitx" : ["sitx"],
"application/x-subrip" : ["srt"],
"application/x-sv4cpio" : ["sv4cpio"],
"application/x-sv4crc" : ["sv4crc"],
"application/x-t3vm-image" : ["t3"],
"application/x-tads" : ["gam"],
"application/x-tar" : ["tar"],
"application/x-tcl" : ["tcl"],
"application/x-tex" : ["tex"],
"application/x-tex-tfm" : ["tfm"],
"application/x-texinfo" : ["texinfo", "texi"],
"application/x-tgif" : ["obj"],
"application/x-ustar" : ["ustar"],
"application/x-wais-source" : ["src"],
"application/x-x509-ca-cert" : ["der", "crt"],
"application/x-xfig" : ["fig"],
"application/x-xliff+xml" : ["xlf"],
"application/x-xpinstall" : ["xpi"],
"application/x-xz" : ["xz"],
"application/x-zmachine" : ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"],
"application/xaml+xml" : ["xaml"],
"application/xcap-diff+xml" : ["xdf"],
"application/xenc+xml" : ["xenc"],
"application/xhtml+xml" : ["xhtml", "xht"],
"application/xml" : ["xml", "xsl"],
"application/xml-dtd" : ["dtd"],
"application/xop+xml" : ["xop"],
"application/xproc+xml" : ["xpl"],
"application/xslt+xml" : ["xslt"],
"application/xspf+xml" : ["xspf"],
"application/xv+xml" : ["mxml", "xhvml", "xvml", "xvm"],
"application/yang" : ["yang"],
"application/yin+xml" : ["yin"],
"application/zip" : ["zip"],
"audio/adpcm" : ["adp"],
"audio/basic" : ["au", "snd"],
"audio/midi" : ["mid", "midi", "kar", "rmi"],
"audio/mp4" : ["m4a", "mp4a"],
"audio/mpeg" : ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"],
"audio/ogg" : ["oga", "ogg", "spx"],
"audio/s3m" : ["s3m"],
"audio/silk" : ["sil"],
"audio/vnd.dece.audio" : ["uva", "uvva"],
"audio/vnd.digital-winds" : ["eol"],
"audio/vnd.dra" : ["dra"],
"audio/vnd.dts" : ["dts"],
"audio/vnd.dts.hd" : ["dtshd"],
"audio/vnd.lucent.voice" : ["lvp"],
"audio/vnd.ms-playready.media.pya" : ["pya"],
"audio/vnd.nuera.ecelp4800" : ["ecelp4800"],
"audio/vnd.nuera.ecelp7470" : ["ecelp7470"],
"audio/vnd.nuera.ecelp9600" : ["ecelp9600"],
"audio/vnd.rip" : ["rip"],
"audio/webm" : ["weba"],
"audio/x-aac" : ["aac"],
"audio/x-aiff" : ["aif", "aiff", "aifc"],
"audio/x-caf" : ["caf"],
"audio/x-flac" : ["flac"],
"audio/x-matroska" : ["mka"],
"audio/x-mpegurl" : ["m3u"],
"audio/x-ms-wax" : ["wax"],
"audio/x-ms-wma" : ["wma"],
"audio/x-pn-realaudio" : ["ram", "ra"],
"audio/x-pn-realaudio-plugin" : ["rmp"],
"audio/x-wav" : ["wav"],
"audio/xm" : ["xm"],
"chemical/x-cdx" : ["cdx"],
"chemical/x-cif" : ["cif"],
"chemical/x-cmdf" : ["cmdf"],
"chemical/x-cml" : ["cml"],
"chemical/x-csml" : ["csml"],
"chemical/x-xyz" : ["xyz"],
"image/bmp" : ["bmp"],
"image/cgm" : ["cgm"],
"image/g3fax" : ["g3"],
"image/gif" : ["gif"],
"image/ief" : ["ief"],
"image/jpeg" : ["jpeg", "jpg", "jpe"],
"image/ktx" : ["ktx"],
"image/png" : ["png"],
"image/prs.btif" : ["btif"],
"image/sgi" : ["sgi"],
"image/svg+xml" : ["svg", "svgz"],
"image/tiff" : ["tiff", "tif"],
"image/vnd.adobe.photoshop" : ["psd"],
"image/vnd.dece.graphic" : ["uvi", "uvvi", "uvg", "uvvg"],
"image/vnd.dvb.subtitle" : ["sub"],
"image/vnd.djvu" : ["djvu", "djv"],
"image/vnd.dwg" : ["dwg"],
"image/vnd.dxf" : ["dxf"],
"image/vnd.fastbidsheet" : ["fbs"],
"image/vnd.fpx" : ["fpx"],
"image/vnd.fst" : ["fst"],
"image/vnd.fujixerox.edmics-mmr" : ["mmr"],
"image/vnd.fujixerox.edmics-rlc" : ["rlc"],
"image/vnd.ms-modi" : ["mdi"],
"image/vnd.ms-photo" : ["wdp"],
"image/vnd.net-fpx" : ["npx"],
"image/vnd.wap.wbmp" : ["wbmp"],
"image/vnd.xiff" : ["xif"],
"image/webp" : ["webp"],
"image/x-3ds" : ["3ds"],
"image/x-cmu-raster" : ["ras"],
"image/x-cmx" : ["cmx"],
"image/x-freehand" : ["fh", "fhc", "fh4", "fh5", "fh7"],
"image/x-icon" : ["ico"],
"image/x-mrsid-image" : ["sid"],
"image/x-pcx" : ["pcx"],
"image/x-pict" : ["pic", "pct"],
"image/x-portable-anymap" : ["pnm"],
"image/x-portable-bitmap" : ["pbm"],
"image/x-portable-graymap" : ["pgm"],
"image/x-portable-pixmap" : ["ppm"],
"image/x-rgb" : ["rgb"],
"image/x-tga" : ["tga"],
"image/x-xbitmap" : ["xbm"],
"image/x-xpixmap" : ["xpm"],
"image/x-xwindowdump" : ["xwd"],
"message/rfc822" : ["eml", "mime"],
"model/iges" : ["igs", "iges"],
"model/mesh" : ["msh", "mesh", "silo"],
"model/vnd.collada+xml" : ["dae"],
"model/vnd.dwf" : ["dwf"],
"model/vnd.gdl" : ["gdl"],
"model/vnd.gtw" : ["gtw"],
"model/vnd.mts" : ["mts"],
"model/vnd.vtu" : ["vtu"],
"model/vrml" : ["wrl", "vrml"],
"model/x3d+binary" : ["x3db", "x3dbz"],
"model/x3d+vrml" : ["x3dv", "x3dvz"],
"model/x3d+xml" : ["x3d", "x3dz"],
"text/cache-manifest" : ["appcache"],
"text/calendar" : ["ics", "ifb"],
"text/css" : ["css"],
"text/csv" : ["csv"],
"text/html" : ["html", "htm"],
"text/n3" : ["n3"],
"text/plain" : ["txt", "text", "conf", "def", "list", "log", "in"],
"text/prs.lines.tag" : ["dsc"],
"text/richtext" : ["rtx"],
"text/sgml" : ["sgml", "sgm"],
"text/tab-separated-values" : ["tsv"],
"text/troff" : ["t", "tr", "roff", "man", "me", "ms"],
"text/turtle" : ["ttl"],
"text/uri-list" : ["uri", "uris", "urls"],
"text/vcard" : ["vcard"],
"text/vnd.curl" : ["curl"],
"text/vnd.curl.dcurl" : ["dcurl"],
"text/vnd.curl.scurl" : ["scurl"],
"text/vnd.curl.mcurl" : ["mcurl"],
"text/vnd.dvb.subtitle" : ["sub"],
"text/vnd.fly" : ["fly"],
"text/vnd.fmi.flexstor" : ["flx"],
"text/vnd.graphviz" : ["gv"],
"text/vnd.in3d.3dml" : ["3dml"],
"text/vnd.in3d.spot" : ["spot"],
"text/vnd.sun.j2me.app-descriptor" : ["jad"],
"text/vnd.wap.wml" : ["wml"],
"text/vnd.wap.wmlscript" : ["wmls"],
"text/x-asm" : ["s", "asm"],
"text/x-c" : ["c", "cc", "cxx", "cpp", "h", "hh", "dic"],
"text/x-fortran" : ["f", "for", "f77", "f90"],
"text/x-java-source" : ["java"],
"text/x-opml" : ["opml"],
"text/x-pascal" : ["p", "pas"],
"text/x-nfo" : ["nfo"],
"text/x-setext" : ["etx"],
"text/x-sfv" : ["sfv"],
"text/x-uuencode" : ["uu"],
"text/x-vcalendar" : ["vcs"],
"text/x-vcard" : ["vcf"],
"video/3gpp" : ["3gp"],
"video/3gpp2" : ["3g2"],
"video/h261" : ["h261"],
"video/h263" : ["h263"],
"video/h264" : ["h264"],
"video/jpeg" : ["jpgv"],
"video/jpm" : ["jpm", "jpgm"],
"video/mj2" : ["mj2", "mjp2"],
"video/mp4" : ["mp4", "mp4v", "mpg4"],
"video/mpeg" : ["mpeg", "mpg", "mpe", "m1v", "m2v"],
"video/ogg" : ["ogv"],
"video/quicktime" : ["qt", "mov"],
"video/vnd.dece.hd" : ["uvh", "uvvh"],
"video/vnd.dece.mobile" : ["uvm", "uvvm"],
"video/vnd.dece.pd" : ["uvp", "uvvp"],
"video/vnd.dece.sd" : ["uvs", "uvvs"],
"video/vnd.dece.video" : ["uvv", "uvvv"],
"video/vnd.dvb.file" : ["dvb"],
"video/vnd.fvt" : ["fvt"],
"video/vnd.mpegurl" : ["mxu", "m4u"],
"video/vnd.ms-playready.media.pyv" : ["pyv"],
"video/vnd.uvvu.mp4" : ["uvu", "uvvu"],
"video/vnd.vivo" : ["viv"],
"video/webm" : ["webm"],
"video/x-f4v" : ["f4v"],
"video/x-fli" : ["fli"],
"video/x-flv" : ["flv"],
"video/x-m4v" : ["m4v"],
"video/x-matroska" : ["mkv", "mk3d", "mks"],
"video/x-mng" : ["mng"],
"video/x-ms-asf" : ["asf", "asx"],
"video/x-ms-vob" : ["vob"],
"video/x-ms-wm" : ["wm"],
"video/x-ms-wmv" : ["wmv"],
"video/x-ms-wmx" : ["wmx"],
"video/x-ms-wvx" : ["wvx"],
"video/x-msvideo" : ["avi"],
"video/x-sgi-movie" : ["movie"],
"video/x-smv" : ["smv"],
"x-conference/x-cooltalk" : ["ice"]
}

View File

@ -1,2 +0,0 @@
User-agent: *
Allow: /

View File

@ -1,329 +0,0 @@
.wmarkdown{
display : block;
position : relative;
top : 0em;
left : 0em;
width : 100%;
height : 100%;
overflow : hidden;
&,& *{font-family : $font-family;};
[data-visible=false]{display : none;}
a[href],button,[type=button],[type=submit],[type=reset],[onclick]{
color : $color-primary;
cursor : pointer;
text-decoration : none;
transition-duration : $transition-out;
&:hover{
color : $color-secondary;
transition-duration : $transition-in;
}
}
a[href],[onclick]{transition-property : color;}
button,[type=button],[type=submit],[type=reset]{
background-color : mix($color-back, $color-primary, 90%);
border : $border-size solid $color-primary;
border-radius : $border-radius;
transition-property : color,background-color,border-color;
&:hover{
background-color : mix($color-back, $color-secondary, 90%);
border-color : $color-secondary;
}
}
[data-icon]::before{
margin-right : .4em;
font-family : $font-icon;
}
[data-deployed]>[data-icon]::before{
display : inline-block;
width : 1em;
text-align : center;
}
.groups,.buttons{
display : block;
&>*{
float : left;
border-radius : 0em;
}
&>:first-child{border-radius : $border-radius 0em 0em $border-radius;}
&>:last-child{border-radius : 0em $border-radius $border-radius 0em;}
}
header,&>.body,footer,main{
position : absolute;
left : 0em;
width : 100%;
overflow : hidden;
box-sizing : border-box;
}
header,footer{
color : $color-back;
background-color : $color-fore;
}
header{
top : 0em;
height : $header-height;
z-index : 30;
.logo{
height : $header-height * .4;
margin : .1em .5em;
font-weight : 900;
a{
display : inline-block;
height : 100%;
&>span{vertical-align : middle;}
}
// .image{display : none;}
.text{
display : inline-block;
margin : .3em 0em;
}
span[style]{display : none;}
.image{
display : inline-block;
height : 100%;
&[data-status=loading],&[data-status=error]{display : none;}
}
img{
width : auto;
height : 100%;
}
}
.main-menu{
position : absolute;
top : 2em;
left : 50%;
width : 40em;
margin-left : -20em;
text-align : center;
ul{
margin : 0em;
padding : 0em;
list-style-type : none;
}
li{
display : inline-block;
margin : 0em 1em;
white-space : nowrap;
}
}
.wmd-options{
display : none;
position : absolute;
top : 0em;
right : 0em;
margin : .2em .8em;
.multiplier{
display : inline-block;
width : 100px;
height : 20px;
background-color : #88F;
}
}
.view-menu{
button{
transition-property : color border-color background-color opacity;
[data-icon]::before{margin : 0em;}
[data-i18n]{display : none;}
}
}
}
&>.body,main{
top : $header-height;
bottom : $footer-height;
color : $color-fore;
background-color : $color-back;
z-index : 10;
&>.headers-menu,&>.content,&>.files{
position : absolute;
top : $margin-boxes;
bottom : $margin-boxes;
box-sizing : border-box;
}
&>.content>div{padding : 0em $content-internal-margin;}
&>.headers-menu,&>.files{
nav{
position : absolute;
top : 0em;
left : 0em;
width : 100%;
height : 100%;
padding : 1em;
overflow : auto;
box-sizing : border-box;
}
ul{
margin : 0em;
padding : 0em;
list-style-type : none;
@for $level from 0 through 6 {[data-level='#{$level + 1}']{margin-left : $menu-margin-level * $level;}}
}
li{white-space : nowrap;}
.menu-buttons{
position : absolute;
top : 0em;
margin : .2em;
margin-top : -1.8em;
[data-icon]::before{margin : 0em;}
span[data-i18n]{display : none;}
}
}
&>.headers-menu{
left : $margin-boxes;
width : $menu-headers-width;
.menu-buttons{left : $margin-boxes;}
}
&[data-headers-menu-deployed=false]{
&>.content{left : $content-margin;}
.headers-menu{
width : auto;
padding-left : 3em;
nav{display : none;}
button{
&[data-i18n=show]{display : inline-block;}
&[data-i18n=hide]{display : none;}
}
}
}
&[data-files-menu-deployed=false]{
&>.content{right : $content-margin;}
.files{
width : auto;
padding-right : 3em;
nav{display : none;}
button{
&[data-i18n=show]{display : inline-block;}
&[data-i18n=hide]{display : none;}
}
}
}
&[data-headers-menu-deployed=true] .headers-menu button{
&[data-i18n=show]{display : none;}
&[data-i18n=hide]{display : inline-block;}
}
&[data-files-menu-deployed=true] .files button{
&[data-i18n=show]{display : none;}
&[data-i18n=hide]{display : inline-block;}
}
&>.content{
top : 0em;
left : $menu-headers-width + $content-margin;
right : $menu-files-width + $content-margin;
bottom : 0em;
margin : 0em (2 * $margin-boxes);
padding : 1em 0em;
overflow : auto;
legend{display : none;}
.padding-bottom{height : 1em;}
}
&>.files{
right : $margin-boxes;
width : $menu-files-width;
.menu-buttons{right : $margin-boxes;}
}
&>fieldset{
border : none;
&>legend{
display : block;
width : 100%;
border-bottom : (1.4 * $border-size) dotted $color-grey;
color : $color-fore;
font-weight : 900;
font-size : 1.2em;
text-align : center;
box-sizing : border-box;
}
}
[data-parent-deployed=false]{display : none;}
}
footer{
bottom : 0em;
height : $footer-height;
z-index : 20;
.license{
display : block;
width : 100%;
text-align : center;
font-size : .75em;
font-weight : 900;
img{
height : 1.1em;
margin-left : .4em;
}
&>*{vertical-align : middle;}
}
}
&[data-view=menu] .view-menu{
button[data-i18n=menu]{opacity : 1;}
button[data-i18n=content]{opacity : .5;}
button[data-i18n=files]{opacity : .5;}
}
&[data-view=content] .view-menu{
button[data-i18n=menu]{opacity : .5;}
button[data-i18n=content]{opacity : 1;}
button[data-i18n=files]{opacity : .5;}
}
&[data-view=files] .view-menu{
button[data-i18n=menu]{opacity : .5;}
button[data-i18n=content]{opacity : .5;}
button[data-i18n=files]{opacity : 1;}
}
// Responsive.
&[data-display-view=pc]{
.view-menu{display : none;}
}
&[data-display-view=mobile]{
.view-menu{
display : block;
position : absolute;
bottom : 0em;
right : 0em;
margin : .3em 1em;
}
.headers-menu,.files{.menu-buttons{display : none;}}
fieldset{&.headers-menu,&.content,&.files{
top : 0em;
left : 0em;
right : auto;
bottom : auto;
margin : 0em;
padding : 0em;
width : 100%;
height : 100%;
}}
&[data-view=menu]{
fieldset.headers-menu{display : block;}
fieldset.content{display : none;}
fieldset.files{display : none;}
}
&[data-view=content]{
fieldset.headers-menu{display : none;}
fieldset.content{display : block;}
fieldset.files{display : none;}
}
&[data-view=files]{
fieldset.headers-menu{display : none;}
fieldset.content{display : none;}
fieldset.files{display : block;}
}
}
&[data-screen-size~="3"]{
.main-menu a [data-i18n]{display : none;}
header .logo .text{font-size : .6em;}
}
&[data-screen-size~="4"]{
header .logo .text{display : none;}
.main-menu li{margin : 0em .3em;}
}
}

View File

@ -1,487 +0,0 @@
.wmarkdown{
// Checkbox y Radio Buttons.
label{&.checkbox,&.radio,&.tick{
display : inline-block;
cursor : pointer;
input{display : none;}
[data-icon]::before{margin : 0em;}
}}
// CodeBlocks.
.code-block{
display : block;
position : relative;
width : 80%;
height : auto;
margin-left : 10%;
font-size : .8em;
overflow : hidden;
box-sizing : border-box;
&[data-special=false]{max-height : 35em;}
&>ul{
position : absolute;
top : 0em;
left : 0em;
margin : 0em;
padding : 0em;
white-space : normal;
li{
display : inline-block;
margin : 0em .2em;
padding : .2em .8em;
background-color : mix($color-grey, $color-back, 20%);
vertical-align : middle;
border : $border-size solid $color-grey;
border-radius : .4em;
[data-i18n]{
display : none;
font-weight : 900;
&::after{
content : ":";
margin-right : .4em;
}
}
}
}
.lines{
position : relative;
top : 0em;
left : 0em;
overflow : hidden;
ol{
width : 100%;
margin : 0em;
margin-top : -.3em;
margin-left : 4em;
padding : 0em;
box-sizing : border-box;
li{
&:nth-child(2n){background-color : mix(#FFF, $color-back, 50%);}
&:nth-child(2n + 1){background-color : mix(#FFF, $color-back, 20%);}
}
}
}
.code-box{
position : absolute;
top : 3.2em;
left : 4em;
right : 0em;
max-height : 31em;
overflow : auto;
}
&>div{&,& *{font-family: $font-mono;}}
}
.header-file-note{
margin-top : 2em;
font-size : .85em;
color : $color-grey;
@for $i from 1 through 6{&+h#{$i}{margin-top : 0em;}}
}
.data-dictionary-item{
display : inline-block;
position : relative;
border-bottom : $border-size dotted;
cursor : help;
&[data-left=true]>.box{
left : auto;
right : 0em;
}
&[data-left=false]>.box{
left : 0em;
right : auto;
}
&[data-top=false]>.box{
top : auto;
bottom : 1em;
}
&[data-top=true]>.box{
top : 1em;
bottom : auto;
}
&[data-show=false]>.box{display : none;}
.box{
display : block;
position : absolute;
width : $dictionary-item-width;
height : auto;
max-height : $dictionary-item-height;
padding : .5em;
color : $color-fore;
font-weight : 400;
border : $border-size solid $color-fore;
background-color : mix(rgba(0, 0, 0, 0), $color-back, 5%);
overflow : hidden;
box-sizing : border-box;
border-radius : 1em;
box-shadow : .1em .1em .2em $color-fore;
&>span+span{display : block;}
}
.result{display : none;}
.description{
height : $dictionary-item-height - $dictionary-link-size - 2em;
text-align : center;
overflow : auto;
.paragraph{
display : block;
&+span{margin-top : 1em;}
}
}
.links{
height : $dictionary-link-size + 1.1em;
margin : .5em 0em;
text-align : center;
white-space : nowrap;
overflow-x : auto;
overflow-y : hidden;
&>a{
display : inline-block;
width : $dictionary-link-size;
height : $dictionary-link-size;
margin : 0em .5em;
border : $border-size solid $color-fore;
background-color : #FFF;
background-position : center center;
background-size : cover;
box-sizing : border-box;
border-radius : $dictionary-link-size * .5;
}
}
[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');}
}
.data-dictionary-table{
display : block;
position : relative;
fieldset{border : none;}
legend,tfoot,[data-field=i],[data-field=patterns],[data-field=results],.checkbox>[data-i18n]{display : none;}
[data-field=urls] li{
word-break : break-all;
word-wrap : break-word;
}
.search{
display : table;
width : 100%;
box-sizing : border-box;
&>*{
display : table-cell;
white-space : nowrap;
}
.field{&,input{
width : 100%;
box-sizing : border-box;
}}
&>label{
font-weight : 900;
&::after{
content : ":";
margin-right : .4em;
}
}
}
th,td{
width : 40%;
&[data-field=words]{width : 20%;}
}
td{padding : 1em .4em;}
thead,tbody{
display : block;
tr:not([data-visible=false]){display : table;}
&,tr{width : 100%;}
}
tbody{
max-height : 30em;
overflow : auto;
&>tr{
&:nth-child(2n + 1)>td{background-color : mix(#FFF, $color-back, 50%);}
&:nth-child(2n)>td{background-color : mix(#FFF, $color-back, 20%);}
&:hover>td{background-color : mix(#FFF, $color-back, 75%);}
}
}
}
.multimedia-box{
display : inline-block;
position : relative;
width : 100%;
text-align : center;
// [data-type]>a,.image-style{display : none;}
[data-type=image],[data-type=images]{
img,a{display : none;}
.image-style{
display : inline-block;
width : 100%;
height : 100%;
background-position : center center;
background-repeat : no-repeat;
background-size : contain;
}
}
video{
width : auto;
width : 100%;
}
[data-type=audio]{
min-width : 10em;
&>.multimedia-box[data-multiple=false]>span{
left : 0em;
width : 100%;
}
a{display : none;}
}
audio{
position : absolute;
top : 100%;
left : 10%;
width : 80%;
margin-top : -6em;
box-sizing : border-box;
z-index : 20;
opacity : .7;
}
.text{
position : absolute;
bottom : 0em;
left : 0em;
width : 100%;
margin : .5em;
text-align : center;
text-shadow :
0em 0em .1em $color-fore,
0em 0em .075em $color-fore,
0em 0em .05em $color-back,
0em 0em .025em $color-back;
}
[data-type]{
display : inline-block;
position : relative;
margin : 1em;
}
&[data-multiple=true]{
&>span{
width : 25%;
height : 10em;
}
}
&[data-multiple=false]{
&>span{
width : 80%;
height : 25em;
text-align : center;
}
}
&[data-multiple]>[data-links-count]{height : auto;}
&[data-multiple] [data-platform]{
display : inline-block;
position : relative;
width : 20em;
height : 10em;
margin : .5em;
}
.multimedia-box{[data-type]{
position : absolute;
top : 0em;
left : 0em;
width : 100%;
height : 100%;
margin : 0em;
}}
[data-platform],&[data-multiple=true]>[data-type=audio]>.multimedia-box,[data-platform]{
width : 20em;
height : 10em;
}
[data-links-count='1']>[data-platform],&[data-multiple=false]>[data-type=audio]>.multimedia-box{
width : 80%;
height : 25em;
}
}
.links-group{
text-align : center;
a{
display : inline-block;
position : relative;
width : 6em;
height : 7.5em;
margin : 1em;
overflow : hidden;
opacity : .7;
transition-duration : $transition-out;
transition-property : color,opacity;
img{display : none;}
&:hover{
opacity : 1;
transition-duration : $transition-in;
}
[data-status]{
display : block;
position : absolute;
top : 0em;
left : 0em;
width : 6em;
height : 6em;
}
.text{
display : block;
position : absolute;
left : 0em;
bottom : 0em;
width : 100%;
margin : 0em;
text-align : center;
}
.image-style{
display : inline-block;
width : 100%;
height : 100%;
background-position : center center;
background-repeat : no-repeat;
background-size : contain;
}
}
}
.special-text-i .text{font-weight : 900;}
.quote{
padding : 1em;
border : .1em dotted $color-grey;
}
.wdoc{
position : relative;
border : .1.5em solid $color-grey;
background-color : mix(#FFF, $color-back, 50%);
border-radius : .4em;
&[data-language]>legend{
display : block;
padding : 0em .4em;
.name{font-weight : 900;}
.language{
margin-left : .4em;
&::before{content : "[";}
&::after{content : "]";}
}
}
.structure{
.return-type{
margin-right : .4em;
&::before{content : "[";}
&::after{content : "]";}
}
.attributes{
display : inline-block;
margin : 0em;
padding : 0em;
list-style-type : none;
&::before{content : "(";}
&::after{content : ")";}
.attribute-status,.attribute-description,.return{display : none;}
.attribute-type{
margin-left : .4em;
span{font-style : italic;}
&::before{
content : "[";
margin-right : .2em;
}
&::after{
content : "]";
margin-left : .2em;
}
}
}
.attribute+span::before{
content : ",";
margin-right : .4em;
}
.attribute[data-status=optional]::after{content : "?";}
}
.attribute-type>span+span::before{
content : ",";
margin-right : .4em;
}
.attributes-data{
display : table;
width : 100%;
margin-top : 1em;
box-sizing : border-box;
&>span{
display : table-row;
&>span{display : table-cell;}
}
&>.return{font-style : italic;}
}
&>.data{
margin : 0em;
margin-top : 1em;
padding : 0em;
list-style-type : none;
li{
padding-bottom : .1em;
&:hover{
padding-bottom : 0em;
border-bottom : .1em dotted $color-grey;
}
&>:first-child{
display : inline-block;
width : 10em;
height : 1.2em;
overflow : hidden;
&::before{content : "@";}
}
&>:last-child{margin-left : .4em;}
}
}
div.attributes-data>*{
&>*{padding-bottom : .1em;}
&:hover>*{
padding-bottom : 0em;
border-bottom : .1em dotted $color-grey;
}
}
[data-with-value=false]{display : none;}
.deprecated{
font-weight : 900;
&::before{content : "(";}
&::after{
content : ")";
margin-right : .4em;
}
}
&[data-deprecated=true]{
opacity : .6;
transition-duration : $transition-out;
transition-property : opacity;
&:hover{
opacity : 1;
transition-duration : $transition-in;
}
}
&+.wdoc{margin-top : 1em;}
}
.wmd-table{
width : 80%;
margin-left : 10%;
border-collapse : collapse;
&{border : .1em solid $color-fore;}
td,th{border : .1em solid $color-grey;}
tr td{
transition-duration : $transition-out;
transition-property : background-color;
}
tr:hover td{transition-duration : $transition-in;}
tbody>tr:nth-child(2n)>td{background-color : mix($color-back, #FFF, 80%);}
tbody>tr:nth-child(2n + 1)>td{background-color : mix($color-back, #000, 95%);}
tbody>tr:hover>td{background-color : mix($color-back, #FFF, 30%);}
}
}

2122
Public/scss/WMarkDown.css Executable file → Normal file

File diff suppressed because it is too large Load Diff

4
Public/scss/WMarkDown.css.map Executable file → Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,5 +0,0 @@
.wmarkdown{
.MathJax{font-size : 1.3em;}
}

429
Public/scss/WMarkDown.scss Executable file → Normal file
View File

@ -1 +1,428 @@
@import "WMarkDown.settings.scss", "WMarkDown.base.scss", "WMarkDown.components.scss", "WMarkDown.external.scss"; // Settings
$transition-in : .25s;
$transition-out : 1s;
// Settings
.wmd-icon>input{display : none;}
.wmd-code-block{
display : block;
position : relative;
margin : 2em 4%;
margin-bottom : 4em;
font-size : .9em;
.code{
position : relative;
top : 2.5em;
width : 100%;
height : auto;
max-height : 30em;
overflow-x : hidden;
overflow-y : auto;
}
.data{
position : absolute;
list-style-type : none;
margin : 0em 2em;
padding : 0em;
li{
display : inline-block;
margin : 0em;
padding : .1em .4em;
height : 1.2em;
border : .1em solid #BBB;
box-shadow : 0em 0em .8em inset #BBB;
&::before{font-family : monospace;}
&>[data-i18n]{display : none;}
}
[data-icon]{margin-right : .3em;}
&>:first-child{display : none;}
&>:nth-child(2){border-radius : .6em 0em 0em .6em;}
&>:last-child{border-radius : 0em .6em .6em 0em;}
}
ol{
width : 100%;
margin : 0em;
padding : 0em;
padding-bottom : 1.5em;
font-family : monospace;
li{
margin-left : 4em;
&::marker{font-size : .85em;}
&:nth-child(2n + 1){background-color : rgba(200, 200, 200, .2);}
}
}
.content{
position : absolute;
top : 0em;
left : 4.3em;
right : 0em;
margin : 0em;
font-family : monospace;
background : transparent;
overflow-y : hidden;
overflow-x : auto;
&>div,&>pre{
padding : .1em;
white-space : nowrap;
box-sizing : border-box;
}
}
}
.wmd-quote{
display : flex;
margin : 1em 2em;
padding-left : .5em;
font-size : .9em;
border-left : .5em solid #AAA;
border-radius : .5em 0em 0em .5em;
flex-direction : row;
&>div{
flex : auto;
align-self : start;
&+div{
width : 100%;
padding-left : 1em;
}
}
.quote-type{
text-align : center;
span{
display : block;
&+span{font-weight : 900;}
}
}
[data-avatar]{
width : 4em;
height : 4em;
border-radius : 1em;
background-color : #888;
background-position : center center;
background-size : cover;
}
[data-icon]{font-size : 3em;}
[data-avatar=srx00],[data-avatar=kyman]{
background-color : transparent;
background-image :
url("https://cdn.k3y.pw/data/KyMAN-water-mark.png"),
url("https://cdn.local/data/KyMAN-water-mark.png");
}
}
[data-include]{
&>.link{
margin-top : 2em;
font-size : .9em;
opacity : .8;
}
&+h1,&+h2,&+h3,&+h4,&+h5,&+h6{margin-top : 0em;}
&>.wmarkdown{&>h1,&>h2,&>h3,&>h4,&>h5,&>h6{&:first-child{margin-top : 0em;}}}
[data-include]>.link>a{display : none;}
}
.wmd-title{
&>:last-child{
margin-left : .3em;
font-size : .6em;
span{
opacity : .3;
transition-duration : $transition-out;
transition-property : opacity;
&::before{margin : 0em;}
&:hover{
opacity : 1;
transition-duration : $transition-in;
}
}
}
}
// .wmd-dictionary-item{
// // text-decoration : underline dotted;
// opacity : .8;
// cursor : pointer;
// transition-duration : $transition-out;
// transition-property : opacity;
// &:hover{
// opacity : 1;
// transition-duration : $transition-in;
// }
// }
.wmd-table{
padding : 1em 0em;
margin-left : 5%;
margin-right : 5%;
text-align : center;
font-size : .9em;
table{
max-width : 100%;
margin-left : auto;
margin-right : auto;
border-collapse : separate;
border-spacing : 0;
border : .1em solid #888;
box-sizing : border-box;
border-radius : .3em;
td,th{
padding : .2em .5em;
border : .05em solid mix(#888, rgba(255, 255, 255, 0), 50%);
}
&>:first-child>:first-child>:first-child{border-top-left-radius : .3em;}
&>:first-child>:first-child>:last-child{border-top-right-radius : .3em;}
&>:last-child>:last-child>:first-child{border-bottom-left-radius : .3em;}
&>:last-child>:last-child>:last-child{border-bottom-right-radius : .3em;}
}
thead,tfoot{th,td{background-color : mix(#888, rgba(255, 255, 255, 0), 10%);}}
tbody>tr{
td,th{
background-color : rgba(255, 255, 255, 0);
transition-duration : $transition-out;
transition-property : background-color;
}
&:nth-child(n):hover{td,th{
background-color : mix(#888, rgba(255, 255, 255, 0), 10%);
transition-duration : $transition-in;
}}
&:nth-child(2n + 1){&>td,&>th{
background-color : mix(#888, rgba(255, 255, 255, 0), 20%);
}}
}
}
.wmd-list,.wmd-main-menu{
[data-deployed=false]{&~ul,&~ol{display : none;}}
[data-icon=deploy]{
user-select : none;
&+[data-i18n]{display : none;}
}
}
.wmd-dictionary-item[onclick]{cursor : help;}
.wmd-dictionary-box{
position : absolute;
max-width : 15em;
max-height : 15em;
padding : .3em;
border : .1em solid #888;
background-color : #EFEFEF;
overflow : auto;
box-sizing : border-box;
box-shadow : .1em .1em .2em #000;
border-radius : .5em;
.links{text-align : center;}
a[href]{
display : inline-block;
width : 2em;
height : 2em;
margin : .3em;
background-color : rgba(0, 0, 0, .1);
border : .1em solid #888;
background-position : center center;
background-size : cover;
box-sizing : border-box;
border-radius : 1em;
}
}
.wmd-main-menu-button{
padding : 0em 1em;
text-align : right;
[data-icon]{
&::before{
margin : 0em;
font-size : 2em;
}
&+span{display : none;}
}
}
.wmd-main-menu{
position : absolute;
top : 0em;
right : 0em;
margin-top : 4em;
margin-right : 1em;
padding : .3em;
border : .1em solid #888;
background-color : #EFEFEF;
overflow : hidden;
z-index : 100;
border-radius : .5em;
box-shadow :
// 0em 0em 1em inset #888,
.1em .1em .2em #000;
&>ul{
max-width : 25em;
max-height : 25em;
margin : 0em;
padding : 0em;
overflow : auto;
}
ul{
list-style-type : none;
padding-right : 0em;
}
a:first-child{
margin-left : 1.1em;
}
li{
padding : .2em .3em;
background-color : rgba(0, 0, 0, 0);
transition-property : background-color;
transition-duration : $transition-in;
&:hover{
background-color : rgba(0, 0, 0, .1);
transition-duration : $transition-in;
}
}
}
.wmd-media{
&:not([data-type=icon]){
display : block;
position : relative;
left : 50%;
width : 30em;
margin-left : -15em;
text-align : center;
box-sizing : border-box;
img{
width : 100%;
height : auto;
max-width : 30em;
max-height : 30em;
&+span{
// display : none;
background-position : center center;
background-size : cover;
}
}
&[data-type=image] .text{display : none;}
&[data-type=picture] .text{
display : block;
width : 100%;
margin-top : -.2em;
text-align : right;
font-size : .85em;
}
}
&[data-type=icon]{
display : inline-block;
height : 1em;
// vertical-align : middle;
img{
width : auto;
height : 100%;
}
.text{display : none;}
}
}
.wmd-code-doc{
font-size : .85em;
border : none;
// border-radius : .5em;
legend{display : none;}
.description{
font-family : monospace;
white-space : pre;
}
.return-type{margin-right : 1em;}
.return-type,.typed{
&:before{content : "[";}
&:after{content : "]";}
}
.environment,.access{
display : inline-block;
margin-right : 1em;
text-transform : capitalize;
}
.arguments{
&:before{content : "(";}
&:after{content : ")";}
}
.argument{
display : block;
width : 100%;
padding-left : 4em;
box-sizing : border-box;
&>span+span{margin-left : 1em;}
&>:nth-child(5):before{
content : "=";
margin-right : 1em;
// margin : 0em 1em;
}
}
.default-value::before{content : "= ";}
&[data-arguments-l='0']>.definition{display : none;}
}
.wmd-color-sample{
display : inline-block;
width : 1em;
height : 1em;
border : .1em solid #222;
vertical-align : middle;
border-radius : .3em;
box-shadow : 0em 0em .2em #EFEFEF;
&>*{display : none;}
}
.wmd-avatars{
$size : 7em;
$half : $size * .5;
$favicon : 1.8em;
display : block;
list-style-type : none;
text-align : center;
&>*{
display : inline-block;
position : relative;
width : $size;
height : $size;
margin : 1em;
.wmd-media{
left : auto;
margin : 0em;
width : 100%;
height : 100%;
}
a+a{
display : block;
position : absolute;
width : $favicon;
height : $favicon;
border : .1em solid #888;
background-color : #EFEFEF;
background-position : center center;
background-size : cover;
border-radius : 50%;
box-sizing : border-box;
}
}
@for $i from 1 through 20{
[data-links='#{$i}']{
@for $j from 1 through $i{
&>:nth-child(#{$j + 1}){
top : ($size / 2) - ($favicon / 2);
left : ($size / 2) - ($favicon / 2);
margin-top : calc(sin(#{$j * (360deg / $i) + 45deg}) * #{$size / 2});
margin-left : calc(cos(#{$j * (360deg / $i)} + 45deg) * #{$size / 2});
}
}
}
}
img{display : none;}
.image{
display : block;
position : absolute;
top : 0em;
left : 0em;
width : 100%;
height : 100%;
border : .1em solid #888;
border-radius : 50%;
box-sizing : border-box;
}
}

View File

@ -1,31 +0,0 @@
// Colors.
$color-primary : #2272D4;
$color-secondary : #D47222;
$color-fore : #222;
$color-back : #EFEFEF;
$color-grey : mix($color-back, $color-fore, 50%);
// Fonts.
$font-family : "Roboto";
$font-mono : "Roboto Mono";
$font-icon : "FA5FR";
// Sizes.
$header-height : 4em;
$footer-height : 1em;
$menu-headers-width : 20%;
$menu-files-width : 10%;
$content-margin : 5%;
$margin-boxes : .5em;
$border-size : .1em;
$menu-margin-level : 2em;
$content-internal-margin : 3em;
$dictionary-item-width : 10em;
$dictionary-item-height : 10em;
$dictionary-link-size : 2em;
$border-radius : .3em;
// Transitions.
$transition-in : .2s;
$transition-out : 1s;
$transition : .5s;

View File

@ -0,0 +1,160 @@
html, body {
height: 100%;
margin: 0em;
overflow: hidden; }
.wmarkdown-web {
position: relative;
top: 0em;
left: 0em;
width: 100%;
height: 100%;
overflow: hidden;
background-color: #EFEFEF;
color: #222; }
.wmarkdown-web, .wmarkdown-web input, .wmarkdown-web button, .wmarkdown-web select {
font-family: "Roboto"; }
.wmarkdown-web pre, .wmarkdown-web textarea,
.wmarkdown-web .wmd-code-block,
.wmarkdown-web .wmd-code-block ol > li::marker,
.wmarkdown-web .wmd-code-doc > .description {
font-family: "Roboto Mono"; }
.wmarkdown-web [data-icon]::before {
font-family: "FA6FR"; }
.wmarkdown-web input, .wmarkdown-web button, .wmarkdown-web select, .wmarkdown-web textarea {
font-size: 1em; }
.wmarkdown-web [data-visible=false], .wmarkdown-web [data-hidden=true] {
display: none; }
.wmarkdown-web a[href] {
text-decoration: none;
word-break: break-word; }
.wmarkdown-web a[href], .wmarkdown-web [onclick], .wmarkdown-web [onmouseover], .wmarkdown-web [onmousedown], .wmarkdown-web button, .wmarkdown-web [type=button], .wmarkdown-web [type=reset], .wmarkdown-web [type=submit] {
cursor: pointer;
transition-duration: 1s; }
.wmarkdown-web a[href]:hover, .wmarkdown-web [onclick]:hover, .wmarkdown-web [onmouseover]:hover, .wmarkdown-web [onmousedown]:hover, .wmarkdown-web button:hover, .wmarkdown-web [type=button]:hover, .wmarkdown-web [type=reset]:hover, .wmarkdown-web [type=submit]:hover {
transition-duration: 0.2s; }
.wmarkdown-web a[href], .wmarkdown-web [onclick], .wmarkdown-web [onmouseover], .wmarkdown-web [onmousedown], .wmarkdown-web button, .wmarkdown-web [type=button], .wmarkdown-web [type=reset], .wmarkdown-web [type=submit] {
color: #008844;
transition-property: color; }
.wmarkdown-web a[href]:hover, .wmarkdown-web [onclick]:hover, .wmarkdown-web [onmouseover]:hover, .wmarkdown-web [onmousedown]:hover, .wmarkdown-web button:hover, .wmarkdown-web [type=button]:hover, .wmarkdown-web [type=reset]:hover, .wmarkdown-web [type=submit]:hover {
color: #880044; }
.wmarkdown-web [onmouseover], .wmarkdown-web [onmousedown] {
color: #115533;
transition-property: color; }
.wmarkdown-web [onmouseover]:hover, .wmarkdown-web [onmousedown]:hover {
color: #551133; }
.wmarkdown-web a[href], .wmarkdown-web [onclick] {
transition-property: color; }
.wmarkdown-web button, .wmarkdown-web [type=button], .wmarkdown-web [type=reset], .wmarkdown-web [type=submit] {
border-color: 0.1em solid #008844;
box-shadow: 0em 0em 0.4em #008844;
transition-property: color,border-color,box-shadow; }
.wmarkdown-web button:hover, .wmarkdown-web [type=button]:hover, .wmarkdown-web [type=reset]:hover, .wmarkdown-web [type=submit]:hover {
border-color: 0.1em solid #880044;
box-shadow: 0em 0em 0.4em #880044; }
.wmarkdown-web .wmd-dictionary-item {
color: #115533; }
.wmarkdown-web .wmd-dictionary-item:hover {
color: #551133; }
.wmarkdown-web h2 {
font-size: 2.6em; }
.wmarkdown-web h3 {
font-size: 2.2em; }
.wmarkdown-web h4 {
font-size: 1.8em; }
.wmarkdown-web h5 {
font-size: 1.4em; }
.wmarkdown-web h6 {
font-size: 1em; }
.wmarkdown-web ul, .wmarkdown-web ol {
padding: 0em 2em; }
.wmarkdown-web header, .wmarkdown-web main, .wmarkdown-web footer {
position: absolute;
left: 0em;
width: 100%; }
.wmarkdown-web header, .wmarkdown-web footer {
overflow: hidden;
display: flex;
flex-direction: row;
box-shadow: 0em 0em 0.125em #EFEFEF, 0em 0em 0.25em #EFEFEF, 0em 0em 0.5em #EFEFEF, 0em 0em 1em #EFEFEF, 0em 0em 2em #EFEFEF; }
.wmarkdown-web header > *, .wmarkdown-web footer > * {
flex: auto;
align-self: center; }
.wmarkdown-web header {
top: 0em;
height: 4em;
z-index: 20; }
.wmarkdown-web header h1 {
margin: .2em 1em;
padding: 0em;
font-size: 1em;
text-wrap: nowrap; }
.wmarkdown-web header h1 .image {
height: 3.6em; }
.wmarkdown-web header h1 img {
width: auto;
height: 3.6em; }
.wmarkdown-web header h1 img + span {
display: none; }
.wmarkdown-web header h1 span + span {
font-size: 3.4em;
height: 0.9444444444em; }
.wmarkdown-web header h1 a > span {
display: inline-block;
vertical-align: top; }
.wmarkdown-web main {
top: 4em;
bottom: 2.5em;
padding: 1% 2%;
z-index: 10;
overflow: auto;
box-sizing: border-box; }
.wmarkdown-web footer {
bottom: 0em;
height: 2.5em;
z-index: 30; }
.wmarkdown-web .main-menu {
width: 25em;
text-align: center; }
.wmarkdown-web .main-menu ul {
list-style-type: none;
margin: 0em;
padding: 0em; }
.wmarkdown-web .main-menu li {
display: inline-block;
margin: 0em .6em; }
.wmarkdown-web .licenses {
display: flex;
flex-direction: row;
justify-content: center;
position: absolute;
left: 0em;
bottom: 0em;
width: 100%;
text-align: center;
padding: .1em .2em;
font-weight: 900;
font-size: .85em;
box-sizing: border-box; }
.wmarkdown-web .license {
display: flex;
flex-direction: row;
align-self: center;
margin: 0em .2em;
text-align: center;
box-sizing: border-box; }
.wmarkdown-web .license span {
flex: auto;
align-self: center; }
.wmarkdown-web .license > * {
vertical-align: middle; }
.wmarkdown-web .license img {
width: auto;
height: 2.5em;
margin: .2em .2em; }
.wmarkdown-web main {
overflow: auto; }
.wmarkdown-web footer > .licenses {
font-size: .8em; }
/*# sourceMappingURL=WMarkDown.web.css.map */

View File

@ -0,0 +1,7 @@
{
"version": 3,
"mappings": "AAAA,UAAS;EACL,MAAM,EAAG,IAAI;EACb,MAAM,EAAG,GAAG;EACZ,QAAQ,EAAG,MAAM;;AAQrB,cAAc;ECiBV,QAAQ,EAAG,QAAQ;EACnB,GAAG,EAAG,GAAG;EACT,IAAI,EAAG,GAAG;EACV,KAAK,EAAG,IAAI;EACZ,MAAM,EAAG,IAAI;EACb,QAAQ,EAAG,MAAM;EA4Hb,gBAAgB,ECzJV,OAAO;ED0Jb,KAAK,EC3JC,IAAI;EDgCd,kFAAqB;IAAC,WAAW,ECtBtB,QAAQ;EDuBnB;;;6CAG0B;IAAC,WAAW,ECxB7B,aAAa;EDyBtB,kCAAmB;IAAC,WAAW,ECvBtB,OAAO;EDwBhB,2FAA4B;IAAC,SAAS,EAAG,GAAG;EAE5C,sEAAuC;IAAC,OAAO,EAAG,IAAI;EAEtD,sBAAO;IACH,eAAe,EAAG,IAAI;IACtB,UAAU,EAAG,UAAU;EAE3B,4NAA6F;IACzF,MAAM,EAAG,OAAO;IAChB,mBAAmB,ECpBT,EAAE;IDqBZ,4QAAO;MAAC,mBAAmB,ECtBlB,IAAG;EDwBhB,4NAA6F;IACzF,KAAK,EDhDI,OAAO;ICiDhB,mBAAmB,EAAG,KAAK;IAC3B,4QAAO;MAAC,KAAK,EDjDF,OAAO;ECmDtB,0DAA2B;IACvB,KAAK,EAAG,OAAqC;IAC7C,mBAAmB,EAAG,KAAK;IAC3B,sEAAO;MAAC,KAAK,EAAG,OAAuC;EAO3D,gDAAiB;IAAC,mBAAmB,EAAG,KAAK;EAC7C,8GAA+C;IAC3C,YAAY,EAAG,mBAAyB;IACxC,UAAU,EAAG,qBAA2B;IACxC,mBAAmB,EAAG,6BAA6B;IACnD,sIAAO;MACH,YAAY,EAAG,mBAA2B;MAC1C,UAAU,EAAG,qBAA6B;EAIlD,mCAAoB;IAChB,KAAK,EAAG,OAAqC;IAC7C,yCAAO;MAAC,KAAK,EAAG,OAAuC;EAIvD,iBAAM;IAAC,SAAS,EAAG,KAAmB;EAAtC,iBAAM;IAAC,SAAS,EAAG,KAAmB;EAAtC,iBAAM;IAAC,SAAS,EAAG,KAAmB;EAAtC,iBAAM;IAAC,SAAS,EAAG,KAAmB;EAAtC,iBAAM;IAAC,SAAS,EAAG,GAAmB;EAG1C,oCAAK;IACD,OAAO,EAAG,OAAO;EAGrB,iEAAkB;IACd,QAAQ,EAAG,QAAQ;IACnB,IAAI,EAAG,GAAG;IACV,KAAK,EAAG,IAAI;EAEhB,4CAAa;IACT,QAAQ,EAAG,MAAM;IACjB,OAAO,EAAG,IAAI;IACd,cAAc,EAAG,GAAG;IAxFxB,UAAU,EACN,gHAIuB;IAqFvB,oDAAG;MACC,IAAI,EAAG,IAAI;MACX,UAAU,EAAG,MAAM;EAG3B,qBAAM;IACF,GAAG,EAAG,GAAG;IACT,MAAM,EC1FG,GAAG;ID2FZ,OAAO,EAAG,EAAE;IACZ,wBAAE;MACE,MAAM,EAAG,QAAQ;MACjB,OAAO,EAAG,GAAG;MACb,SAAS,EAAG,GAAG;MACf,SAAS,EAAG,MAAM;MAClB,+BAAM;QAAC,MAAM,EAAG,KAAyB;MACzC,4BAAG;QACC,KAAK,EAAG,IAAI;QACZ,MAAM,EAAG,KAAyB;QAClC,mCAAM;UAAC,OAAO,EAAG,IAAI;MAEzB,oCAAS;QACL,SAAS,EAAG,KAAyB;QACrC,MAAM,EAAG,cAAiE;MAE9E,iCAAM;QACF,OAAO,EAAG,YAAY;QACtB,cAAc,EAAG,GAAG;EAIhC,mBAAI;IACA,GAAG,EClHM,GAAG;IDmHZ,MAAM,EClHG,KAAK;IDmHd,OAAO,EAAG,KAAK;IACf,OAAO,EAAG,EAAE;IACZ,QAAQ,EAAG,IAAI;IACf,UAAU,EAAG,UAAU;EAE3B,qBAAM;IACF,MAAM,EAAG,GAAG;IACZ,MAAM,EC1HG,KAAK;ID2Hd,OAAO,EAAG,EAAE;EAiBhB,yBAAU;IACN,KAAK,EAAG,IAAI;IACZ,UAAU,EAAG,MAAM;IACnB,4BAAE;MACE,eAAe,EAAG,IAAI;MACtB,MAAM,EAAG,GAAG;MACZ,OAAO,EAAG,GAAG;IAEjB,4BAAE;MACE,OAAO,EAAG,YAAY;MACtB,MAAM,EAAG,QAAQ;EAIzB,wBAAS;IACL,OAAO,EAAG,IAAI;IACd,cAAc,EAAG,GAAG;IACpB,eAAe,EAAG,MAAM;IACxB,QAAQ,EAAG,QAAQ;IACnB,IAAI,EAAG,GAAG;IACV,MAAM,EAAG,GAAG;IACZ,KAAK,EAAG,IAAI;IACZ,UAAU,EAAG,MAAM;IACnB,OAAO,EAAG,SAAS;IACnB,WAAW,EAAG,GAAG;IACjB,SAAS,EAAG,KAAK;IACjB,UAAU,EAAG,UAAU;EAG3B,uBAAQ;IACJ,OAAO,EAAG,IAAI;IACd,cAAc,EAAG,GAAG;IACpB,UAAU,EAAG,MAAM;IACnB,MAAM,EAAG,QAAQ;IACjB,UAAU,EAAG,MAAM;IACnB,UAAU,EAAG,UAAU;IACvB,4BAAI;MACA,IAAI,EAAG,IAAI;MACX,UAAU,EAAG,MAAM;IAEvB,2BAAG;MAAC,cAAc,EAAG,MAAM;IAC3B,2BAAG;MACC,KAAK,EAAG,IAAI;MACZ,MAAM,EAAG,KAAK;MACd,MAAM,EAAG,SAAS;EDhM1B,mBAAI;IAAC,QAAQ,EAAG,IAAI;EACpB,iCAAgB;IAAC,SAAS,EAAG,IAAI",
"sources": ["WMarkDown.web.scss","../../../AnP/Public/scss/AnP.common.scss","../../../AnP/Public/scss/AnP.settings.scss"],
"names": [],
"file": "WMarkDown.web.css"
}

View File

@ -0,0 +1,16 @@
html,body{
height : 100%;
margin : 0em;
overflow : hidden;
}
@import "../../../AnP/Public/scss/AnP.settings.scss";
$color-primary : #008844;
$color-secondary : #880044;
@import "../../../AnP/Public/scss/AnP.common.scss";
.wmarkdown-web{
@include main_web();
main{overflow : auto;}
footer>.licenses{font-size : .8em;}
}

View File

@ -1,7 +0,0 @@
<script>
console.log(/(\#{1,6})([^\r\n\#]+)(\#{1,6})?/.source);
console.log("Hola. ¿Qué tal? Esto es una prueba".match(/tal/));
</script>

View File

@ -1 +0,0 @@
<?php trim(shell_exec("git fetch")) && shell_exec("git pull");

View File

@ -1,6 +0,0 @@
<?php
include __DIR__ . "/../PHP/include.php";
include __DIR__ . "/../PHP/WMarkDown.Secrets.php";
$wmd = new WMarkDown(WMarkDown\Secrets::wmarkdown);

View File

@ -1,34 +0,0 @@
<?php
include __DIR__ . "/../PHP/include.php";
include __DIR__ . "/../PHP/WMarkDown.Secrets.php";
$wmd = new WMarkDown(array_merge([
"action" => "update_scripts",
"author" => "KyMAN",
"project" => "WMarkDown",
"class" => "WMarkDown",
"object" => "wmarkdown",
"url" => "https://wmarkdown.k3y.pw",
"project_author" => "Tarsier,KyMAN",
"key_words" => "Whalers,MarkDown,MediaWiki,WMarkDown,documentación",
"logo" => "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" => "es",
"ignore_script_paths" => [
"/.git",
"/.gitignore",
"/ArtBook",
"/Data",
"/HTML",
"/JSON",
"/Public/css",
"/Public/index.html",
"/Public/.htaccess",
"/Public/es",
"/Public/images",
"/Public/json",
"/Public/scss",
"/README.md",
"/WMD"
]
], WMarkDown\Secrets::wmarkdown));

View File

@ -0,0 +1,16 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Abstracts.AnPMap import AnP
from Abstracts.Applications import ApplicationsAbstract
from typing import Any, Optional
from os.path import abspath as path_absolute
from os.path import dirname as directory_name
class WMarkDown(ApplicationsAbstract):
def __init__(self, anp:AnP, inputs:Optional[dict[str, Any|None]|tuple|list] = None) -> None:
super().__init__(anp, "wmarkdown", anp.path.get_parent(path_absolute(directory_name(__file__))), {
**anp.get_dictionary(inputs),
"wmarkdown_default_settings_files" : "/JSON/WMarkDown.py.settings.json"
})

958
Python/WMarkDown.py Normal file
View File

@ -0,0 +1,958 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from re import compile as RECompile
from re import Pattern as REPattern
from re import Match as REMatch
from re import MULTILINE as RE_MULTILINE
from re import IGNORECASE as RE_IGNORE_CASE
from typing import Callable, Optional
from os.path import exists as path_exists
from os.path import dirname as directory_name
from base64 import b64encode as base64_encode
from json import dumps as json_encode
class WMarkDown:
# Languages
HTML:int = 1 << 0
# Analyse modes
RAW:int = 0
SUBITEM:int = 1 << 0
LINKED:int = 1 << 1
html_special_characters:dict[str, str] = {
"<" : "lt",
">" : "gt",
"&" : "amp"
}
quote_special:dict[str, str] = {
"?" : "ask",
"!" : "warning",
">" : "answer",
"Q" : "comment",
"#" : "note"
}
item_mark:tuple[str, str, REPattern] = ("###@&&_", "_&&@###", RECompile(r'\#{3}\@\&{2}_([0-9]+)_\&{2}\@\#{3}'))
re_block_html_pattern:str = r'^[ \t]*<\!\-{2}[ \t]*\[{2}[\t ]*(wmd|wmarkdown)[ \t]*\]{2}[\t ]*\-{2}>'
re_block_html:REPattern = RECompile(re_block_html_pattern, RE_MULTILINE)
re_block_mark:REPattern = RECompile(r'^[ \t]*((" ?){3}|(\' ?){3}|(` ?){3})[ \t]*(wmd|wmarkdown)|' + re_block_html_pattern, RE_MULTILINE)
re_new_lines:REPattern = RECompile(r'[\r\n]+')
re_new_line:REPattern = RECompile(r'\n|\r\n|\r')
re_started_white_spaces:REPattern = RECompile(r'^[ \t]*')
re_lines:REPattern = RECompile(r'^[^\r\n]+', RE_MULTILINE)
re_list_line:REPattern = RECompile(r'^([ \t]*)(([\-\*#\+]+)|([0-9]+|[a-z]+)\.)?(.*)$', RE_IGNORE_CASE | RE_MULTILINE)
re_table_line:REPattern = RECompile(r'^\|([^\r\n"\']+|"([^"\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*"|\'([^\'\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*\')*[\r\n]*', RE_MULTILINE)
re_table_item:REPattern = RECompile(r'(\|+)(([^\|\'\"]+|"([^"\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*"|\'([^\'\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*\')*)')
re_options:REPattern = RECompile(r'`{3}[ \t]*(wmd|wmarkdown)\-options[ \t]*(\n|\r\n|\r)(([^\r\n`]+|[\r\n]+|`{1,2}[^`])*)`{3}')
re_option:REPattern = RECompile(r'^([^=\r\n]+)=([^\r\n]*)$', RE_MULTILINE)
re_extension:REPattern = RECompile(r'(([^\.\/\\\\]+)\.)?([^\.\/\\\\]+)$')
re_characters_no_id:REPattern = RECompile(r'[^a-z0-9]+', RE_IGNORE_CASE)
re_phone_number:REPattern = RECompile(r'^\+?[0-9 ]{5,22}$')
re_email_address:REPattern = RECompile(r'^[a-z\.0-9_\-]+@[a-z\.0-9_\-]+\.[a-z0-9]+$')
re_class_attribute:REPattern = RECompile(r'(?<![a-z0-9_\-])(class=")([^"]+)(")')
re_white_spaces:REPattern = RECompile(r'[ \t]+')
re_line_marks:REPattern = RECompile(r'[\*#~\-_]+|\[[ \-x]\]|\([ \-x]\)', RE_IGNORE_CASE)
re_integer:REPattern = RECompile(r'^[0-9]+$')
re_code_doc:REPattern = RECompile(r'^(\[([^\]]+)\][ \t]+)?([\!\?])?(([^\(\[\]\?\!]+)([\:\.]))?([^\(\.\:\[\]\=]+)(\(((.+|[\r\n]+)*)\)|[ \t]*=[ \t]*((.+|[\r\n]+)*))?')
re_code_doc_arguments:REPattern = RECompile(r'([\!\?]{0,2})([^=]+)[ \t]+([^=]+)(=(.+))?')
re_code_doc_subarguments:REPattern = RECompile(r'<([^<>]+)>|("[^"]*"|\'[^\']*\')')
re_start_with_white_spaces:REPattern = RECompile(r'^[ \t]', RE_MULTILINE)
re_domain:REPattern = RECompile(r'^[^\:]+\:\/{2}[^\/]+')
re_protocol:REPattern = RECompile(r'^([a-z0-9_\-]+)\:', RE_IGNORE_CASE)
def __init__(self) -> None:
self.modules:dict[str, tuple[int, REPattern]] = {
"special_characters" : (self.SUBITEM, RECompile(r'\\([\(\{\[\*\\])')),
"title" : (self.RAW, RECompile(r'^((#{1,6})[\t ]*([^\r\n]+)|(={1,6})[\t ]*([^\r\n=]+)={1,6})(\n|\r\n|\r){2,}', RE_MULTILINE)),
"list" : (self.RAW, RECompile(r'^([\-\*#\+]+|([0-9]+|[a-z]+)\.)[^\r\n]*(\n|\r\n|\r)([\t ]*(([\-\*#\+]+|([0-9]+|[a-z]+)\.)[^\r\n]*)(\n|\r\n|\r)?)*', RE_IGNORE_CASE | RE_MULTILINE)),
"code_block" : (self.RAW, RECompile(r'^("{3}([^\r\n]*)(((?!"{3})(.|[\r\n]))+)"{3}|" " "([^\r\n]*)(((?!" " ")(.|[\r\n]))+)" " "|\'{3}([^\r\n]*)(((?!\'{3})(.|[\r\n]))+)\'{3}|\' \' \'([^\r\n]*)(((?!\' \' \')(.|[\r\n]))+)\' \' \'|`{3}([^\r\n]*)(((?!`{3})(.|[\r\n]))+)`{3}|` ` `([^\r\n]*)(((?!` ` `)(.|[\r\n]))+)` ` `)', RE_MULTILINE)),
"table" : (self.RAW, RECompile(r'^\[\|([^\r\n]*)[\r\n]+((^\|([^\]]([^\r\n"\']|"([^"\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*"|\'([^\'\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*\')*)?[\r\n]+)*)^\|\]', RE_MULTILINE)),
"quote" : (self.RAW, RECompile(r'^>[ \t]*(\[\![\t ]*([^\] \t]+)([ \t]+([^\]]+))?\])?(([^\r\n]+(\r\n|[\r\n])?)*)', RE_MULTILINE)),
"include" : (self.RAW, RECompile(r'^\[{2}include[ \t]+([^\]]+)\]{2}', RE_MULTILINE)),
"media" : (self.SUBITEM | self.LINKED, RECompile(r'\({2}\!(image|icon|video|audio|sound|picture)[ \t]+("(([^"]+|[\r\n]+))"|\'(([^\']+|[\r\n]+))\'|([^ \t\)]+))([ \t]*|[ \t]+("(([^\\\\"]+|\\\\.|[\r\n]+)*)"|\'(([^\\\\\']+|\\\\.|[\r\n]+)*)\'|([^\)]+)))\){2}', RE_IGNORE_CASE)),
"code_doc" : (self.RAW, RECompile(r'^\[{2}@(([^\]]+|\][^\]])+)\]{2}', RE_MULTILINE)),
"presentation_links" : (self.RAW, RECompile(r'^\[{2}"{3}(([^"]+|[\r\n]+|"{1,2}[^"])*)"{3}\]{2}', RE_MULTILINE)),
"paragraph" : (self.RAW, RECompile(r'^(([^\r\n]+(\n|\r\n|\r)?)+)', RE_MULTILINE)),
# "bold_italic" : (self.SUBITEM | self.LINKED, RECompile(r'\*{3}(([^\*]+|\*{1,2}[^\*]|[\r\n]+|\\\*)*)\*{3}')),
# "bold_italic" : (self.SUBITEM | self.LINKED, RECompile(r'(?<!\\)\*{3}((?:\\\*|\*{1,2}[^\*]|[^*\r\n]|[\r\n])*)\*{3}')),
# "bold" : (self.SUBITEM | self.LINKED, RECompile(r'\*{2}(([^\*]+|\*[^\*]|[\r\n]+|\\\*)*)\*{2}')),
"bold" : (self.SUBITEM | self.LINKED, RECompile(r'(?<!\\)\*{2}((?:\\\*|\*[^\*]|[^*\r\n]|[\r\n]|(?!\*{2}[^\*])\*)*)\*{2}')),
# "italic" : (self.SUBITEM | self.LINKED, RECompile(r'(?<!\\)\*(([^\*]+|[\r\n]+|\\\*)*)\*')),
"italic" : (self.SUBITEM | self.LINKED, RECompile(r'(?<!\\)\*((?:\\\*|[^*\r\n]|[\r\n]|\*{2})*)\*')),
"underline" : (self.SUBITEM | self.LINKED, RECompile(r'_{2}(([^_]+|_[^_])+)_{2}')),
"strike" : (self.SUBITEM | self.LINKED, RECompile(r'~{2}(([^~]+|~[^~])+)~{2}')),
"code_item" : (self.SUBITEM | self.LINKED, RECompile(r'`{2}(([^`]+|`[^`])+)`{2}')),
"checkbox" : (self.SUBITEM | self.LINKED, RECompile(r'\[((\-)|(x)|( ))\]', RE_IGNORE_CASE)),
"radio" : (self.SUBITEM | self.LINKED, RECompile(r'\(((\-)|(x)|( ))\)', RE_IGNORE_CASE)),
"tick" : (self.SUBITEM | self.LINKED, RECompile(r'\{((w)|(v)|(x))\}', RE_IGNORE_CASE)),
"color_sample" : (self.SUBITEM | self.LINKED, RECompile(r'\[{2}((\#[a-f0-9]{3,8})|color[ \t]+([^\[\]\t\r\n]+))\]{2}', RE_IGNORE_CASE)),
"exclude" : (self.SUBITEM, RECompile(r'\[{2}\!(([^\]]+|\][^\]]|[\r\n])*)\]{2}')),
"link" : (self.SUBITEM, RECompile(r'(\[([^\[\]]+)\])?\((([^\(\) \t]+)[ \t]+("(([^\\\\"]+|\\\\.|[\r\n]+)*)"|\'(([^\\\\\']+|\\\\.|[\r\n]+)*)\'|([^\(\)]+)?))[ \t]*\)|\[(\+?[0-9 ]{5,22}|[^ \]]+)([\t ]+([^\]]*))?\]|([a-z0-9]{3,8}\:\/{2}[^ \(\[\)\]>]+|[a-z\.0-9_\-]+@[a-z\.0-9_\-]+\.[a-z0-9]+)', RE_IGNORE_CASE))
}
self.__ids_cache:tuple[str] = tuple()
def __id(self, string:str) -> str:
id:str = self.re_characters_no_id.sub(r'-', string).lower()
if id[0] == '-':
id = id[1:]
if id[-1] == '-':
id = id[:-1]
if id in self.__ids_cache:
i:int = 2
while id + "-" + str(i) in self.__ids_cache:
i += 1
id += "-" + str(i)
self.__ids_cache += (id,)
return id
def reset_ids(self):
self.__ids_cache = tuple()
def module_title(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
level:str = str(len(matches.group(2) or matches.group(4)))
content:str = (matches.group(3) or matches.group(5)).strip()
id:str = self.__id(content)
return ('<h' + level + ' class="wmd-title" id="' + id + '" title="' + content + '">' +
'<span>' + self.analyse(content, language, self.SUBITEM, path) + '</span>' +
'<a href="#' + id + '" target="_blank">' +
'<span data-icon="link"></span>' +
'</a>' +
'</h' + level + '>')
return None
def module_paragraph(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return '<p>' + self.analyse(matches.group(0).strip(), language, self.SUBITEM, path) + '</p>'
return None
def module_bold_italic(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return '<b><i>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</i></b>'
return None
def module_bold(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return '<b>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</b>'
return None
def module_italic(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return '<i>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</i>'
return None
def module_strike(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return '<del>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</del>'
return None
def module_underline(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return '<u>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</u>'
return None
def module_code_item(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return '<code>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</code>'
return None
@staticmethod
def __check_html_module(_type:str, matches:REMatch) -> str:
is_radio:bool = _type == "radio"
return ('<label class="wmd-icon ' + ("radio-button" if is_radio else _type) + '">' +
'<input type="' + ("checkbox" if _type == "tick" else _type) + '" readonly onclick="return false;"' + (
' disabled' if matches.group(2) else
' checked' if matches.group(3) else
'') + ' />' +
'<span data-icon="' + ("radio_button" if is_radio else _type) + '"></span>' +
'</label>')
@classmethod
def module_checkbox(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return self.__check_html_module("checkbox", matches)
return None
@classmethod
def module_radio(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return self.__check_html_module("radio", matches)
return None
@classmethod
def module_tick(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return self.__check_html_module("tick", matches)
return None
@staticmethod
def __list_deployed(level:list[int, str, str|None], last_mark:str|None, l:int) -> str:
_type:str = last_mark if l and last_mark else level[2]
deployable:bool = l and _type and _type in "+-"
deployed:str = (
"null" if not deployable else
"false" if _type == '-' else
"true")
return ' data-deployed="' + deployed + '"' + (' data-list-unprocessed="true"' if deployable else '')
@classmethod
def __list_start(self, unordered:bool, _type:str) -> str:
if not unordered:
_type = _type[:-1]
if self.re_integer.search(_type):
return ' start="' + _type + '"'
return ''
def module_list(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
html:str = ''
lines:list[str] = self.re_new_line.split(matches.group(0))
levels:list[list[int, str, str|None]] = [[0, 'u', None]]
l:int = 0
line:str
last_mark:str|None = None
for line in lines:
matches:REMatch = self.re_list_line.search(line)
if not matches:
continue
separator_by_marks:str = len(matches.group(3) or "")
separator:str = separator_by_marks if separator_by_marks > 1 else len(matches.group(1))
_type:str = matches.group(2)
key:str = matches.group(4)
string:str = self.analyse(matches.group(5), language, self.SUBITEM, path).strip()
unordered:bool = _type and _type[-1] in ('-', '*', '+')
subtype:str = _type[-1] if _type else None
if _type:
if levels[l][0] == separator:
levels[l][1] = 'u' if unordered else 'o'
levels[l][2] = subtype
html += ('</li>' if html else '<' + str(levels[l][1]) + 'l class="wmd-list"' + self.__list_start(unordered, _type) + self.__list_deployed(levels[l - 1], last_mark, l) + (
' type="' + key[0] + '"' if key and not unordered and key[0] in ('a', 'A', 'i', 'I') else
'') + '>') + '<li>' + string
elif levels[l][0] < separator:
l += 1
levels += [[separator, "u" if unordered else "o", subtype]]
html += '<' + levels[l][1] + 'l class="wmd-list"' + self.__list_start(unordered, _type) + self.__list_deployed(levels[l - 1], last_mark, l) + (
' type="' + key[0] + '"' if key and not unordered and key[0] in ('a', 'A', 'i', 'I') else
'') + '><li>' + string
else:
while levels[l][0] > separator:
html += '</li></' + levels.pop(l)[1] + 'l>'
l -= 1
if not l:
break
html += '</li><li>' + string
else:
html += ' ' + string
last_mark = subtype
while len(levels):
html += '</li></' + levels.pop(len(levels) - 1)[1] + 'l>'
return html
return None
@classmethod
def set_class(self, html:str, _class:str|list|tuple) -> str:
if not isinstance(_class, (list, tuple)):
_class = (_class,)
if 'class="' not in html:
html = (' ' if html else '') + 'class="' + " ".join(_class) + '"'
def callback(matches:REMatch):
attribute:str
classes_str:str
closer:str
classes:list[str]
class_key:str
attribute, classes_str, closer = matches.groups()
classes = self.re_white_spaces.split(classes_str)
return attribute + classes_str + (' ' if classes_str else '') + " ".join([
class_key for class_key in _class if class_key not in classes
]) + closer
return self.re_class_attribute.sub(callback, html)
def module_table(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
html:dict[str, str] = {
"thead" : '',
"tbody" : '',
"tfoot" : ''
}
attributes:str = (matches.group(1) or "").strip()
data:str = matches.group(2).strip()
while True:
line_matches:REMatch = self.re_table_line.search(data)
if not line_matches:
break
line:str = line_matches.group(0)
cell_type:str = 'h' if line[1] in ('^', '_', '=') else 'd'
tags:tuple[str] = (
("thead",) if line[1] == '^' else
("tfoot",) if line[1] == '_' else
("thead", "tfoot") if line[1] == '=' else
("tbody",))
tag:str
row:str = '<tr>'
if cell_type == 'h':
line = line[0] + line[2:]
while True:
cell_matches:REMatch = self.re_table_item.search(line)
if not cell_matches:
break
column_span_i:int = len(cell_matches.group(1))
column_span:str = ' colspan="' + str(column_span_i) + '"' if column_span_i > 1 else ''
content:str = (cell_matches.group(2) or "").strip()
row += '<t' + cell_type + column_span + '>' + self.analyse(
content[1:-1] if content and content[0] + content[-1] in ("''", '""') else content,
self.HTML,
self.SUBITEM,
path
) + '</t' + cell_type + '>'
line = line[cell_matches.span()[1]:]
row += '</tr>'
for i, tag in enumerate(tags):
if i:
html[tag] = row + html[tag]
else:
html[tag] += row
data = data[line_matches.span()[1]:]
return ('<div class="wmd-table">' +
'<table ' + attributes + '>' + "".join([
'<' + tag + '>' + content + '</' + tag + '>' if content else '' for tag, content in html.items()
]) + '</table>' +
'</div>')
return None
@classmethod
def module_exclude(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return '<span class="wmd-excluded">' + (matches.group(1) or "") + '</span>'
return None
def module_link(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
raw_url:str = (matches.group(4) or matches.group(11) or matches.group(14) or "").strip()
url = (
"tel:" + raw_url.replace(" ", "") if self.re_phone_number.search(raw_url) else
"mailto:" + raw_url if self.re_email_address.search(raw_url) else
raw_url)
text:str|None = matches.group(2) or matches.group(13) or raw_url
protocol_matches:REMatch|None = WMarkDown.re_protocol.search(url)
return '<a href="' + url + '" target="_' + ("blank" if "://" in url else "self") + '" title="' + self.re_line_marks.sub(r'', (
matches.group(6) or matches.group(8) or matches.group(10) or text
).strip()) + '" data-protocol="' + (
(protocol_matches.group(1) if protocol_matches else "http").lower()
) + '">' + self.analyse(text.strip(), language, self.SUBITEM | self.LINKED, path) + '</a>'
return None
def module_quote(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
_type:str|None = matches.group(2)
type_text:str|None = matches.group(4)
if _type in self.quote_special:
_type = self.quote_special[_type]
return ('<blockquote class="wmd-quote"' + (' data-quote-type="' + _type + '"' if _type else '') + '>' +
(('<div class="quote-type">' + ((
'<span data-avatar="' + _type[1:].lower() + '"></span>' +
'<span class="user">' + _type[1:] + '</span>'
) if _type[0] == "@" else (
'<span data-icon="' + _type + '"></span>' +
('<span class="quote-type-name">' + type_text + '</span>' if type_text else '')
)) + '</div>') if _type else '') +
'<div class="text">' + self.analyse(matches.group(5), language, self.SUBITEM, path) + '</div>' +
'</blockquote>')
return None
@classmethod
def code_block_data(self, key:str, value:str|int, language:Optional[int] = HTML, path:Optional[str] = None) -> str:
if language & self.HTML:
return ('<li data-i18n="' + key + '" data-i18n-without="true" title="' + key + '">' +
'<span data-icon="' + key + '"></span>' +
'<span data-i18n="' + key + '">' + key + '</span>' +
'<span class="value">' + str(value) + '</span>' +
'</li>')
return None
@classmethod
def filter_html_special_characters(self, string:str) -> str:
l:int = len(self.html_special_characters)
_:int
index:list[int] = [-1 for _ in range(l)]
response:str = ''
characters:tuple[str] = tuple(self.html_special_characters.keys())
while True:
j:int
character:str
i:int|None = None
for j, character in enumerate(characters):
if index[j] == None:
continue
if index[j] < 0:
try:
index[j] = string.index(character)
except:
index[j] = None
continue
if i == None or index[i] > index[j]:
i = j
if i == None:
response += string
break
length:int = index[i]
response += string[:length] + '&' + self.html_special_characters[characters[i]] + ';'
string = string[length + 1:]
for j in range(l):
if index[j] != None:
index[j] -= length + 1
return response
@classmethod
def module_code_block(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
_type:str
content:str
i:int
for i in range(6):
j:int = 2 + i * 4
_type = matches.group(j)
content = matches.group(j + 1)
if _type or content:
_type = (_type or "unamed").strip().lower()
content = (content or "")
break
if _type:
lines:list[str] = self.re_new_line.split(content)[2:]
_:str
return ('<div class="wmd-code-block" data-type="' + _type + '" data-processed="false">'
'<ul class="data">' +
'<li><span data-icon="' + _type + '"></span></li>' +
self.code_block_data("type", _type, language) +
self.code_block_data("characters", len(content), language) +
self.code_block_data("lines", len(lines), language) +
'</ul>' +
'<div class="code">' +
'<ol class="lines">' + ''.join(['<li></li>' for _ in lines]) + '</ol>' +
'<pre class="content">' + self.filter_html_special_characters(content) + '</pre>' +
'</div>' +
'</div>')
return 'UNKNOWN_BLOCK'
return None
def module_special_characters(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
return matches.group(1)
return None
@staticmethod
def load_file(path:str) -> str|None:
if path_exists(path):
try:
with open(path, "r") as opened:
return opened.read()
except:
pass
return None
def module_include(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
relative_path:str = matches.group(1)
new_path:str = path + relative_path
extension:str = self.re_extension.search(new_path).groups()[1:]
content:str|None = self.load_file(new_path)
directory:str = directory_name(new_path) + "/"
results:str|None = (
None if content == None else
self.process(content, language, directory)[0] if ".".join(extension) == "w.md" else
self.analyse(content, language, self.RAW, directory) if extension[-1] == "md" else
content)
return ('<section data-path="' + relative_path + '" data-include="' + ("false" if results == None else "true") + '">' +
'<div class="link"><a href="' + relative_path + '" target="_self" title="' + relative_path + '">' + relative_path + '</a></div>' +
(results or "") +
'</section>')
return None
@staticmethod
def build_html_image(links:list[str]|tuple[str], _type:Optional[str] = "image", title:Optional[str] = None) -> str:
attributes:str = ' title="' + title + '" alt="' + title + '"' if title else ''
return ('<span class="wmd-media wmd-image" data-type="' + _type + '" data-status="unprocessed">' +
'<noscript>' +
''.join(['<img src="' + link + '"' + attributes + ' />' for link in links]) +
'</noscript>' +
'<img src="/images/WMarkDown.png"' + attributes + ' data-sources="' + base64_encode(json_encode(links).encode("utf-8")).decode("utf-8") + '" data-i="0" />' +
'<span class="image"></span>' +
('<span class="text">' + title + '</span>' if title else '') +
'</span>')
def module_media(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
_type:str = matches.group(1).lower()
links:list[str] = self.re_white_spaces.split(matches.group(3) or matches.group(5) or matches.group(7))
text:str = (matches.group(10) or matches.group(12) or matches.group(14) or '').strip()
if _type in ("image", "picture", "icon"):
return self.build_html_image(links, _type, text)
if _type in ("video",):
if "youtube.com" in links[0] or "youtu.be" in links[0]:
_type = "youtube"
elif "vimeo.com" in links[0]:
_type = "vimeo"
return ('<span class="wmd-media wmd-video" data-type="' + _type + '" data-status="unprocessed">' +
'<noscript></noscript>' +
(
"<b>YOUTUBE</b>" if _type == "youtube" else
"<b>VIMEO</b>" if _type == "vimeo" else
'<video src="' + links[0] + '"' + (' poster="' + links[1] + '"' if len(links) > 1 else '') + '></video>') +
'</span>')
if _type in ("sound", "audio"):
if "soundcloud.com" in links[0]:
_type = "soundcloud"
return ('<span class="wmd-media wmd-video" data-type="' + _type + '" data-status="unprocessed">' +
'<noscript></noscript>' +
(
"<b>SOUNDCLOUD</b>" if _type == "soundcloud" else
'<audio src="' + links[0] + '" controls></audio>') +
'</span>')
return None
return None
@classmethod
def mark_replace(self, string:str, matches:REMatch, fragments:list[str]) -> str:
if matches:
start:int
end:int
i:int = len(fragments)
start, end = matches.span()
string = string[:start] + self.item_mark[0] + str(len(fragments)) + self.item_mark[1] + string[end:]
fragments += [matches.group(0)]
return string
@classmethod
def restore_marks(self, string:str, fragments:list[str]) -> str:
while True:
matches:REMatch = self.item_mark[2].search(string)
if not matches:
break
i:int = int(matches.group(1))
_from:int
_to:int
_from, _to = matches.span()
string = string[:_from] + (fragments[i] if i >= 0 and i < len(fragments) else "") + string[_to:]
return string
@classmethod
def __doc_typed_format(self, typed:str) -> str:
return self.filter_html_special_characters(typed.replace(' ', "").replace(',', ", "))
def module_code_doc(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
# print(matches.groups())
data:str = matches.group(1).strip()
base:REMatch = self.re_code_doc.search(data)
return_type:str = self.__doc_typed_format(base.group(2) or "void")
access:str = base.group(3) or "public"
name_space:str|None = base.group(5)
environment:str = base.group(6) or "global"
method:str = base.group(7)
parameters:str|None = base.group(9)
has_parameters:bool = parameters != None
default_value:str|None = base.group(11)
full_method:str = (name_space + "." if name_space else "") + method.strip()
arguments:str = ''
arguments_definition:str = ''
header:str = ('<tr>' +
'<th data-i18n="name" title="Name">Name</th>' +
'<th data-i18n="required" title="Required">Required</th>' +
'<th data-i18n="nullable" title="Nullable">Nullable</th>' +
'<th data-i18n="typed" title="Typed">Typed</th>' +
'<th data-i18n="default_value" title="Default Value">Default Value</th>' +
'</tr>')
fragments:list[str] = []
matches:REMatch
arguments_l:int = 0
if access == "?":
access = "protected"
elif access == "!":
access = "private"
if environment == ":":
environment = "static"
elif environment == ".":
environment = "object"
if parameters:
while True:
matches = self.re_code_doc_subarguments.search(parameters)
if matches:
parameters = self.mark_replace(parameters, matches, fragments)
else:
break
else:
parameters = ""
for parameter in parameters.split(","):
matches = self.re_code_doc_arguments.search(parameter.strip())
if matches:
scopes:str = matches.group(1) or ""
required:bool = "!" in scopes
nullish:bool = "?" in scopes
typed:str = self.__doc_typed_format(self.restore_marks(matches.group(2), fragments))
name:str = matches.group(3).strip()
default_value:str = self.filter_html_special_characters(self.restore_marks((matches.group(5) or "").strip(), fragments))
arguments += ('<span class="argument">' +
('<span class="required" data-i18n="required" title="Required">Required</span>' if required else '') +
('<span class="nullish" data-i18n="nullish" title="Nullish">Nullish</span>' if nullish else '') +
'<span class="typed" data-i18n="typed" data-i18n-without="true" title="Typed">' + typed + '</span>' +
'<span class="name" data-i18n="name" data-i18n-without="true" title="Name">' + name + '</span>' +
('<span class="default_value" data-i18n="default_value" title="Default value">' + default_value + '</span>' if default_value else '') +
'</span>')
arguments_definition += ('<tr>' +
'<td data-i18n="name" data-i18n-without="true" title="Name">' + name + '</td>' +
'<td data-i18n="required" data-i18n-without="true" title="Required">' + ('True' if required else 'False') + '</td>' +
'<td data-i18n="nullish" data-i18n-without="true" title="Nullish">' + ('True' if nullish else 'False') + '</td>' +
'<td data-i18n="typed" data-i18n-without="true" title="Typed">' + typed + '</td>' +
'<td data-i18n="default_value" data-i18n-without="true" title="Default value">' + default_value + '</td>' +
'</tr>')
arguments_l += 1
return ('<fieldset class="wmd-code-doc" data-arguments-l="' + str(arguments_l) + '">' +
'<legend>' + full_method + '</legend>' +
'<div class="description">' +
'<span class="return-type" data-i18n="return" data-i18n-without="true" title="Return">' + return_type + '</span>' +
'<span class="environment" data-i18n="environment" data-i18n-without="true" title="Environment">' + environment + '</span>' +
'<span class="access" data-i18n="access" data-i18n-without="true" title="Access">' + access + '</span>' +
'<span class="full-method" data-i18n="method" data-i18n-without="true" title="Method">' + full_method + '</span>' +
('<span class="arguments" data-i18n="arguments" data-i18n-without="true" title="Arguments">' + arguments + '</span>' if has_parameters else '') +
('<span class="default-value" data-i18n="default_value" data-i18n-without="true" title="Default value">' + default_value + '</span>' if default_value else '') +
'</div>' +
'<div class="wmd-table definition">' +
'<table>' +
'<thead>' + header + '</thead>' +
'<tbody>' + arguments_definition + '</tbody>' +
'<tfoot>' + header + '</tfoot>' +
'</table>' +
'</div>' +
'</fieldset>')
return None
def module_color_sample(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
color:str = matches.group(2) or matches.group(3)
return ('<span class="wmd-color-sample" style="background-color:' + color + '" title="' + color + '">' +
'<span data-sample="' + color + '"></span>' +
'<span class="color">' + color + '</span>' +
'</span>')
return None
def module_presentation_links(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
if language & self.HTML:
items:list = []
i:int = -1
title:str
avatars:list[str]
links:list[str]
html_avatars:str = ''
html_list:str = ''
for line in self.re_new_lines.split(matches.group(1)):
has_spaces:bool = self.re_start_with_white_spaces.search(line) != None
data:str = line.strip()
if not data:
continue
if has_spaces:
if i == -1:
continue
if data[0] == "*":
items[i][1] += [data[1:]]
if ".k3y.pw/" in data:
items[i][1] += [data[1:].replace(".k3y.pw/", ".local/")]
else:
items[i][2] += [data]
else:
i += 1
items += [[line.strip(), [], []]]
continue
for i, (title, avatars, links) in enumerate(items):
link:str
avatar:str
html_avatars += ('<li title="' + title + '" data-i="' + str(i) + '" data-links="' + str(len(links)) + '">' +
('<a href="' + links[0] + '" target="_blank">' +
self.build_html_image(avatars) +
'</a>' if len(links) else self.build_html_image(avatars)) +
''.join(['<a href="' + link + '" target="_blank" class="wmd-favicon" style="background-image:' + (
'url(\'' + self.re_domain.search(link).group(0) + '/favicon.ico\')' +
(',url(\'' + self.re_domain.search(link.replace(".k3y.pw/", ".local/")).group(0) + '/favicon.ico\')' if ".k3y.pw/" in link else '')
) + ';"></a>' for link in links]) +
'</li>')
html_list += ('<li class="name">' +
'<span>' + title + '</span>' +
'<ul class="links">' +
''.join(['<li class="link"><a href="' + link + '" target="_blank" title="' + link + '">' + link + '</a></li>' for link in links]) +
'</ul>' +
'</li>')
return ('<div class="wmd-presentation-links">' +
'<ul class="wmd-avatars">' + html_avatars + '</ul>' +
'<ul class="wmd-list">' + html_list + '</ul>' +
'</div>')
return None
@classmethod
def remove_default_tabulations(self, data:str) -> str:
line:str
lines:list[str] = self.re_new_lines.split(data)
spaces:int = len(data)
def callback(matches:REMatch):
return matches.group(0)[spaces:]
for line in lines:
if not line:
continue
white_spaces:int = len(self.re_started_white_spaces.search(line).group(0))
if white_spaces < spaces:
spaces = white_spaces
return self.re_lines.sub(callback, data)
def __build(self, data:str, language:int, path:str|None) -> str:
return ('<div class="wmd wmarkdown" data-dictionary-processed="false" data-menu-processed="false">' +
self.analyse(self.remove_default_tabulations(data), language, self.RAW, path) +
'<div class="wmd-process-and-loaded"></div>' +
'</div>')
def process(self, data:str, language:Optional[int] = HTML, path:Optional[str] = None) -> str:
results:str = ""
variables:dict[str, str] = {}
options:REMatch = self.re_options.search(data)
if options:
_from:int
_to:int
options_data:str = options.group(3)
_from, _to = options.span()
while True:
option:REMatch = self.re_option.search(options_data)
if not option:
break
variables[option.group(1).strip()] = option.group(2).strip()
options_data = options_data[option.span()[1]:]
data = data[:_from] + data[_to:]
while True:
matches:REMatch = self.re_block_mark.search(data)
if not matches:
results += data
break
open_from:int
open_to:int
mark:str = matches.group(1)
re_close:REPattern = RECompile(r'^\s*' + mark, RE_MULTILINE) if mark else self.re_block_html
open_from, open_to = matches.span()
results += data[:open_from]
data = data[open_to:]
close_matches:REMatch = re_close.search(data)
if close_matches:
close_from:int
close_to:int
close_from, close_to = close_matches.span()
results += self.__build(data[:close_from], language, path)
data = data[close_to:]
else:
results += self.__build(data, language, path)
break
return results, variables
def analyse(self, data:str, language:Optional[int] = HTML, mode:Optional[int] = RAW, path:Optional[str] = None) -> str:
response:str = ""
pattern:REPattern
item_mode:int
items:dict[str, list[bool, int, int, REMatch]] = {key : [True, -1, -1, None] for key, (item_mode, pattern) in self.modules.items() if mode == self.RAW or mode | item_mode == item_mode}
# j:int = 0
# m:int = 10
while len(items):
key:str
exists:bool
_from:int
_to:int
matches:REMatch
l:int = len(data)
selected:str|None = None
for key, (exists, _from, _to, matches) in items.items():
if not exists:
continue
pattern = self.modules[key][1]
if _from < 0:
items[key][3] = matches = pattern.search(data)
if matches:
_from, _to = items[key][1], items[key][2] = matches.span()
else:
items[key][0] = False
continue
if _from < l:
l = _from
selected = key
if selected == None:
response += data
break
_from, _to, matches = items[selected][1:]
response += data[:_from] + getattr(self, "module_" + selected)(matches, language, path)
data = data[_to:]
for key in items.keys():
if items[key][3]:
items[key][1] -= _to
items[key][2] -= _to
# j += 1
# if j >= m:
# break
return response
def to_html(self, data:str, path:Optional[str] = None) -> str:
return self.analyse(data, self.HTML, self.RAW, path)

4
Tools/sass.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
directory=`dirname $(readlink -f "$0")`
sass $directory/../Public/scss/WMarkDown.scss ../Public/scss/WMarkDown.css;
sass $directory/../Public/scss/WMarkDown.web.scss ../Public/scss/WMarkDown.web.css;

1
version Normal file
View File

@ -0,0 +1 @@
0.0.2.0