fix: Migrating project to the new Gitea Host.

main
KyMAN 3 months ago
parent ba825d573b
commit bb4504e7e5
  1. 10
      .gitignore
  2. 152
      ArtBook/capaswmarkdown.svg
  3. BIN
      ArtBook/wmarkdown.png
  4. 22
      ArtBook/wmarkdown.svg
  5. BIN
      ArtBook/wmarkdown.xcf
  6. BIN
      ArtBook/wmarkdown180.png
  7. BIN
      ArtBook/wmarkdown192.png
  8. BIN
      ArtBook/wmarkdown270.png
  9. BIN
      ArtBook/wmarkdown32.png
  10. BIN
      ArtBook/wmarkdown512.png
  11. 12
      ArtBook/wmarkdown_color.svg
  12. BIN
      ArtBook/wmarkdown_color.xcf
  13. BIN
      ArtBook/wmarkdown_color180.png
  14. BIN
      ArtBook/wmarkdown_color192.png
  15. BIN
      ArtBook/wmarkdown_color270.png
  16. BIN
      ArtBook/wmarkdown_color32.png
  17. BIN
      ArtBook/wmarkdown_color512.png
  18. 185
      HTML/base.wmarkdown.html
  19. 19
      HTML/file.w.md
  20. 23
      HTML/script.w.md
  21. 46
      JSON/WMarkDown.settings.json
  22. 51
      PHP/Abstracts/WMarkDown.Abstracts.Modules.php
  23. 42
      PHP/Abstracts/WMarkDown.Abstracts.ScriptsAnalyzer.php
  24. 155
      PHP/Drivers/WMarkDown.PDO.SQLite.php
  25. 10
      PHP/Interfaces/WMarkDown.Interfaces.Modules.php
  26. 9
      PHP/Interfaces/WMarkDown.Interfaces.ScriptsAnalyzer.php
  27. 79
      PHP/Modules/WMarkDown.Modules.Checks.php
  28. 98
      PHP/Modules/WMarkDown.Modules.CodeBlocks.php
  29. 298
      PHP/Modules/WMarkDown.Modules.CustomParameters.php
  30. 27
      PHP/Modules/WMarkDown.Modules.Escapes.php
  31. 52
      PHP/Modules/WMarkDown.Modules.FontFormats.php
  32. 56
      PHP/Modules/WMarkDown.Modules.Headers.php
  33. 42
      PHP/Modules/WMarkDown.Modules.Includes.php
  34. 75
      PHP/Modules/WMarkDown.Modules.Links.php
  35. 133
      PHP/Modules/WMarkDown.Modules.Lists.php
  36. 292
      PHP/Modules/WMarkDown.Modules.Multimedia.php
  37. 27
      PHP/Modules/WMarkDown.Modules.Paragraphs.php
  38. 27
      PHP/Modules/WMarkDown.Modules.Quotes.php
  39. 61
      PHP/Modules/WMarkDown.Modules.Tables.php
  40. 229
      PHP/ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.CSharp.php
  41. 142
      PHP/ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.JS.php
  42. 186
      PHP/ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.PHP.php
  43. 19
      PHP/ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.Python.php
  44. 17
      PHP/ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.SQL.php
  45. 137
      PHP/WMarkDown.Modules.php
  46. 127
      PHP/WMarkDown.SQLite.php
  47. 401
      PHP/WMarkDown.ScriptsAnalyzer.php
  48. 7
      PHP/WMarkDown.Sessions.php
  49. 267
      PHP/WMarkDown.php
  50. 32
      PHP/include.php
  51. 1
      Public/.htaccess
  52. 35
      Public/css/WMarkDown.icons.css
  53. 338
      Public/ecma/WMarkDown.Dictionary.ecma.js
  54. 299
      Public/ecma/WMarkDown.Dictionary.old.ecma.js
  55. 241
      Public/ecma/WMarkDown.Multimedia.ecma.js
  56. 78
      Public/ecma/WMarkDown.WMonitor.ecma.js
  57. 711
      Public/ecma/WMarkDown.ecma.js
  58. 63
      Public/ecma2/WMarkDown.Converter.ecma.js
  59. 37
      Public/ecma2/WMarkDown.ecma.js
  60. 49
      Public/ecma2/converter/WMarkDown.Converter.Modules.ecma.js
  61. 10
      Public/ecma2/converter/modules/WMarkDown.Converter.Modules.Headers.ecma.js
  62. 18
      Public/git_update.php
  63. BIN
      Public/images/wmarkdown.png
  64. 986
      Public/json/extension_to_mime.json
  65. 767
      Public/json/mime_to_extension.json
  66. 2
      Public/robots.txt
  67. BIN
      Public/scss/.sass-cache/309371c2e53e2e75d0f849591bc510afe499e4cf/WMarkDown.base.scssc
  68. BIN
      Public/scss/.sass-cache/309371c2e53e2e75d0f849591bc510afe499e4cf/WMarkDown.components.scssc
  69. BIN
      Public/scss/.sass-cache/309371c2e53e2e75d0f849591bc510afe499e4cf/WMarkDown.external.scssc
  70. BIN
      Public/scss/.sass-cache/309371c2e53e2e75d0f849591bc510afe499e4cf/WMarkDown.scssc
  71. BIN
      Public/scss/.sass-cache/309371c2e53e2e75d0f849591bc510afe499e4cf/WMarkDown.settings.scssc
  72. 329
      Public/scss/WMarkDown.base.scss
  73. 487
      Public/scss/WMarkDown.components.scss
  74. 753
      Public/scss/WMarkDown.css
  75. 7
      Public/scss/WMarkDown.css.map
  76. 5
      Public/scss/WMarkDown.external.scss
  77. 1
      Public/scss/WMarkDown.scss
  78. 31
      Public/scss/WMarkDown.settings.scss
  79. 7
      Public/tests/patterns.html
  80. 1
      Public/update.php
  81. 6
      Public/wmd.php
  82. 34
      Public/wmd_scripts.php
  83. 16
      SQL/KMarkDown.01.remover.lite.sql
  84. 120
      SQL/KMarkDown.02.generator.lite.sql
  85. 117
      SQL/KMarkDown.03.views.lite.sql
  86. 0
      SQL/KMarkDown.04.default_data.lite.sql
  87. 1
      WMD/JSON/html.files.json
  88. 36
      WMD/dev/ECMAScript/index.w.md
  89. 164
      WMD/dev/PHP/Abstracts/WMarkDown.Abstracts.Modules.php.w.md
  90. 55
      WMD/dev/PHP/Abstracts/WMarkDown.Abstracts.ScriptsAnalyzer.php.w.md
  91. 115
      WMD/dev/PHP/Drivers/WMarkDown.PDO.SQLite.php.w.md
  92. 37
      WMD/dev/PHP/Interfaces/WMarkDown.Interfaces.Modules.php.w.md
  93. 40
      WMD/dev/PHP/Interfaces/WMarkDown.Interfaces.ScriptsAnalyzer.php.w.md
  94. 54
      WMD/dev/PHP/Modules/WMarkDown.Modules.Checks.php.w.md
  95. 55
      WMD/dev/PHP/Modules/WMarkDown.Modules.CodeBlocks.php.w.md
  96. 97
      WMD/dev/PHP/Modules/WMarkDown.Modules.CustomParameters.php.w.md
  97. 53
      WMD/dev/PHP/Modules/WMarkDown.Modules.Escapes.php.w.md
  98. 54
      WMD/dev/PHP/Modules/WMarkDown.Modules.FontFormats.php.w.md
  99. 98
      WMD/dev/PHP/Modules/WMarkDown.Modules.Headers.php.w.md
  100. 83
      WMD/dev/PHP/Modules/WMarkDown.Modules.Includes.php.w.md
  101. Some files were not shown because too many files have changed in this diff Show More

10
.gitignore vendored

@ -0,0 +1,10 @@
Data
TMP
PHP/WMarkDown.Secrets.php
Public/data
Public/es
Public/index.html
Public/dev
JSON/html.files.json
WMarkDown.apache2.conf

@ -0,0 +1,152 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg8"
inkscape:version="1.0.2-2 (e86c870879, 2021-01-15)"
sodipodi:docname="dibujo-1.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="461.62639"
inkscape:cy="560"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
inkscape:window-width="1298"
inkscape:window-height="1040"
inkscape:window-x="208"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="negro"
inkscape:groupmode="layer"
id="layer1"
style="display:none"
sodipodi:insensitive="true">
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="flecha">
<path
d="M 1790,1225 V 440 h -97 -98 l 223,-222 222,-223 222,223 223,222 h -93 -92 v 785 785 h -255 -255 z"
id="path841"
transform="matrix(0.03527778,0,0,-0.03527778,88.459024,169.9255)" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="diagonal abajo">
<path
d="M 510,1768 V 1526 L 700,780 C 805,370 893,27 896,18 901,2 916,0 1021,0 h 119 v 382 c 0,375 0,384 -25,473 -55,203 -295,1137 -295,1150 0,3 -70,5 -155,5 H 510 Z"
id="path837"
transform="matrix(0.03527778,0,0,-0.03527778,88.459024,169.9255)" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="diagonal arriba">
<path
d="m 1462,1968 c -13,-53 -69,-269 -162,-628 -39,-151 -89,-346 -111,-433 L 1150,749 V 374 0 h 119 119 l 21,88 c 13,48 101,393 197,766 l 174,680 v 238 238 h -154 -154 z"
id="path839"
transform="matrix(0.03527778,0,0,-0.03527778,88.459024,169.9255)" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="vertical"
style="display:inline">
<path
d="M 0,1005 V 0 H 250 500 V 1005 2010 H 250 0 Z"
id="path835"
transform="matrix(0.03527778,0,0,-0.03527778,88.459024,169.9255)" />
</g>
<g
transform="matrix(0.03527778,0,0,-0.03527778,88.459025,169.9255)"
fill="#000000"
stroke="none"
id="g843" />
</g>
<g
inkscape:label="color"
inkscape:groupmode="layer"
id="g932"
style="display:inline"
sodipodi:insensitive="true">
<g
inkscape:groupmode="layer"
id="g902"
inkscape:label="flecha">
<path
d="M 1790,1225 V 440 h -97 -98 l 223,-222 222,-223 222,223 223,222 h -93 -92 v 785 785 h -255 -255 z"
id="path900"
transform="matrix(0.03527778,0,0,-0.03527778,88.459024,169.9255)"
style="fill:#db4a3d;fill-opacity:1" />
</g>
<g
inkscape:groupmode="layer"
id="g906"
inkscape:label="diagonal abajo">
<path
d="M 510,1768 V 1526 L 700,780 C 805,370 893,27 896,18 901,2 916,0 1021,0 h 119 v 382 c 0,375 0,384 -25,473 -55,203 -295,1137 -295,1150 0,3 -70,5 -155,5 H 510 Z"
id="path904"
transform="matrix(0.03527778,0,0,-0.03527778,88.459024,169.9255)"
style="fill:#db4a3d;fill-opacity:1" />
</g>
<g
inkscape:groupmode="layer"
id="g910"
inkscape:label="diagonal arriba">
<path
d="m 1462,1968 c -13,-53 -69,-269 -162,-628 -39,-151 -89,-346 -111,-433 L 1150,749 V 374 0 h 119 119 l 21,88 c 13,48 101,393 197,766 l 174,680 v 238 238 h -154 -154 z"
id="path908"
transform="matrix(0.03527778,0,0,-0.03527778,88.459024,169.9255)"
style="fill:#269b57;fill-opacity:1" />
</g>
<g
inkscape:groupmode="layer"
id="g914"
inkscape:label="vertical"
style="display:inline">
<path
d="M 0,1005 V 0 H 250 500 V 1005 2010 H 250 0 Z"
id="path912"
transform="matrix(0.03527778,0,0,-0.03527778,88.459024,169.9255)"
style="fill:#269b57;fill-opacity:1" />
</g>
<g
transform="matrix(0.03527778,0,0,-0.03527778,88.459025,169.9255)"
fill="#000000"
stroke="none"
id="g916" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

@ -0,0 +1,22 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="248.494382pt" height="201.494382pt" viewBox="0 0 248.494382 201.494382"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.12, written by Peter Selinger 2001-2015
</metadata>
<g transform="translate(0.000000,201.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M0 1005 l0 -1005 250 0 250 0 0 1005 0 1005 -250 0 -250 0 0 -1005z"/>
<path d="M510 1768 l0 -242 190 -746 c105 -410 193 -753 196 -762 5 -16 20
-18 125 -18 l119 0 0 382 c0 375 0 384 -25 473 -55 203 -295 1137 -295 1150 0
3 -70 5 -155 5 l-155 0 0 -242z"/>
<path d="M1462 1968 c-13 -53 -69 -269 -162 -628 -39 -151 -89 -346 -111 -433
l-39 -158 0 -375 0 -374 119 0 119 0 21 88 c13 48 101 393 197 766 l174 680 0
238 0 238 -154 0 -154 0 -10 -42z"/>
<path d="M1790 1225 l0 -785 -97 0 -98 0 223 -222 222 -223 222 223 223 222
-93 0 -92 0 0 785 0 785 -255 0 -255 0 0 -785z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="248px" height="201px" viewBox="0 0 248 201" preserveAspectRatio="xMidYMid meet">
<g fill="#269b57">
<path d="M0 100.5 l0 -100.5 25 0 25 0 0 100.5 0 100.5 -25 0 -25 0 0 -100.5z"/>
<path d="M115 163.6 l0 -37.5 3.9 -15.8 c2.2 -8.7 7.2 -28.2 11.1 -43.3 9.3 -35.9 14.9 -57.5 16.2 -62.8 l1 -4.2 15.4 0 15.4 0 0 23.8 0 23.8 -17.4 68 c-9.6 37.3 -18.4 71.8 -19.7 76.7 l-2.1 8.7 -11.9 0 -11.9 0 0 -37.4z"/>
</g>
<g fill="#db4a3d">
<path d="M89.6 199.3 c-0.3 -1 -9.1 -35.3 -19.6 -76.3 l-19 -74.6 0 -24.2 0 -24.2 15.5 0 c8.5 0 15.5 0.2 15.5 0.5 0 1.3 24 94.7 29.5 115 2.5 8.9 2.5 9.8 2.5 47.3 l0 38.2 -11.9 0 c-10.5 0 -12 -0.2 -12.5 -1.7z"/>
<path d="M181.5 179 l-22 -22 9.8 0 9.7 0 0 -78.5 0 -78.5 25.5 0 25.5 0 0 78.5 0 78.5 9.2 0 9.3 0 -22 22 c-12.1 12.1 -22.2 22 -22.5 22 -0.3 0 -10.4 -9.9 -22.5 -22z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@ -0,0 +1,185 @@
<!DOCTYPE html>
<html lang="{language}" dir="ltr">
<head>
<title>{title}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="icon" href="images/wmarkdown.png" sizes="368x369" />
<!--<link rel="icon" href="images/favicon-32x32.png" sizes="32x32" />
<link rel="icon" href="images/favicon-192x192.png" sizes="192x192" />
<link rel="icon" href="images/favicon-512x512.png" sizes="512x512" />
<link rel="apple-touch-icon-precomposed" href="images/favicon-180x180.png" />
<meta name="msapplication-TileImage" content="images/favicon-270x270.png" />-->
<meta name="licence:text" content="© 2020-2021 CopyLeft. GPLv3" />
<meta name="licence:link" content="https://www.gnu.org/licenses/gpl-3.0.txt" />
<meta name="licence:icon" content="https://www.gnu.org/graphics/gplv3-88x31.png" />
<meta name="xdoc:link" content="{url}" />
<meta name="xdoc:author" content="{author}" />
<meta name="xdoc:since" content="{since}" />
<meta name="xdoc:version" content="{version}" />
<meta name="xdoc:access" content="public" />
<meta name="description" data-i18n="wmarkdown_description" content="{description}" />
<meta name="keywords" data-i18n="wmarkdown_keywords" content="{key_words}" />
<meta name="author" content="{author}" />
<meta name="copyright" content="© 2020-2021 CopyLeft" />
<meta name="robots" content="index,follow" />
<meta name="googlebot" content="index,follow,max-snippet:-1,max-image-preview:large,max-video-preview:-1" />
<meta name="bingbot" content="index,follow,max-snippet:-1,max-image-preview:large,max-video-preview:-1" />
<!--<meta http-equiv="refresh" content="30" />-->
<!--<meta http-equiv="cache-control" content="no-cache" />-->
<!--<meta http-equiv="expires" content="0" />-->
<link rel="canonical" href="{url}" />
<link rel="alternate" href="{url}" hreflang="es" />
<meta property="og:locale:alternate" content="es_ES" />
<meta name="referrer" content="origin" />
<meta name="fragment" content="!" /><!-- Para uso AJAX -->
<meta name="language" content="es" />
<meta name="revisit-after" content="7 days" /><!-- Regreso de las arañas. Información Crawl. -->
<meta name="rating" content="general" /><!-- Tipo de contenido: general, mature, restricted, adult, 14 years, safe for kids. -->
<meta name="author" content="{author}" />
<meta name="owner" content="{author}" />
<meta property="og:locale" content="es_ES" />
<meta property="og:type" content="website" />
<meta property="og:title" data-i18n="wmarkdown_title" content="{title}" />
<meta property="og:description" data-i18n="wmarkdown_description" content="{description}" />
<meta property="og:url" content="{url}" />
<meta property="og:site_name" content="{project}" />
<meta property="og:image" content="{logo}" />
<!--<meta property="fb:admins" content="FB-AppID" />-->
<meta name="twitter:card" content="summary" />
<meta name="twitter:description" data-i18n="wmarkdown_description" content="{description}" />
<meta name="twitter:title" data-i18n="wmarkdown_title" content="{title}" />
<!--<meta name="twitter:site" content="@WMarkDown" />-->
<!--<meta name="twitter:creator" content="@Whalers" />-->
<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
<!--<meta name="google-site-verification" content="123456789" />--><!-- Verificación en el Google Search Console. -->
<meta name="google" content="nositelinkssearchbox" />
<link rel="dns-prefetch" href="{url}" />
<!--<link rel="amphtml" href="{url}index.amp.html" />--><!-- Indica si tiene página para móviles. Tecnología AMP. -->
<link type="text/css" rel="stylesheet" data-language="CSS3" href="https://cdn.k3y.pw/css/fonts/local/Roboto.css" data-crossorigin="anonymous" charset="utf-8" />
<link type="text/css" rel="stylesheet" data-language="CSS3" href="https://cdn.k3y.pw/css/fonts/local/RobotoMono.css" data-crossorigin="anonymous" charset="utf-8" />
<link type="text/css" rel="stylesheet" data-language="CSS3" href="https://cdn.k3y.pw/css/fonts/local/FontAwesome5Free.css" data-crossorigin="anonymous" charset="utf-8" />
<link type="text/css" rel="stylesheet" data-language="CSS3" href="https://unpkg.com/@highlightjs/cdn-assets@10.7.2/styles/default.min.css" data-crossorigin="anonymous" charset="utf-8" />
<script data-type="test/javascript" data-language="JavaScript 1.8.5" src="https://unpkg.com/mermaid@8.9.3/dist/mermaid.min.js" data-js-map="https://unpkg.com/mermaid@8.9.3/dist/mermaid.min.js.map" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="test/javascript" data-language="JavaScript 1.8.5" src="https://unpkg.com/@highlightjs/cdn-assets@10.7.2/highlight.min.js" data-crossorigin="anonymous" charset="utf-8"></script>
<!--<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>-->
<script data-type="test/javascript" data-language="ECMAScript 2015" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="https://kstats.k3y.pw/ecma/KStats.ecma.js"></script>
<script>
kstats = new KStats({url : "https://kstats.k3y.pw/api/LfJWdcC83r6xVca5dwoDdVcZyByLje5QonWCVtusfgSAUrrj8QcsY6rzM/{session}/json/set"});
</script>
<link type="text/css" rel="stylesheet" data-language="SASS/CSS3" href="/scss/WMarkDown.css" data-scss="/scss/WMarkDown.scss" data-css-map="/scss/WMarkDown.css.map" data-crossorigin="anonymous" charset="utf-8" />
<link type="text/css" rel="stylesheet" data-language="CSS3" href="/css/WMarkDown.icons.css" data-crossorigin="anonymous" charset="utf-8" />
<style data-type="text/css" data-rel="stylesheet" data-language="CSS3" charset="utf-8">
html,body{
height : 100%;
margin : 0px;
}
</style>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/WMarkDown.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/WMarkDown.Dictionary.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/WMarkDown.Multimedia.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" src="/ecma/WMarkDown.WMonitor.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
<script data-type="text/javascript" data-language="ECMAScript 2015" charset="utf-8">
wmarkdown = new WMarkDown({
dictionary_links : "https://wdictionaries.k3y.pw/?es/values,own_projects,projects,digital,common,files,kyman",
dictionary_title : "Diccionario"
});
</script>
</head>
<body class="wmarkdown">
<header>
<h1 class="logo">
<a href="https://kmarkdown.k3y.pw#">
<span class="image" data-status="loading">
<img src="/images/wmarkdown.png" alt="WMarkDown" onerror="this.parentNode.setAttribute('data-status', 'error')" onload="this.parentNode.setAttribute('data-status', 'ok')" />
<span style="background-image:url('/images/wmarkdown.png');"></span>
</span>
<span class="text">WMarkDown</span>
</a>
</h1>
<nav class="main-menu">
<ul>
<li><a href="/" data-i18n="home" data-i18n-without="true" title="Home" target="_self">
<span data-icon="home"></span>
<span data-i18n="home">Home</span>
</a></li>
<li><a href="/dev" data-i18n="developt" data-i18n-without="true" title="Desarrollo" target="_self">
<span data-icon="developt"></span>
<span data-i18n="developt">Desarrollo</span>
</a></li>
<li><a href="https://git.k3y.pw/Whalers/WMarkDown" data-i18n="git" data-i18n-without="true" title="Git" target="_blank">
<span data-icon="git"></span>
<span data-i18n="git">Git</span>
</a></li>
</ul>
</nav>
</header>
<div class="body" data-headers-menu-deployed="true" data-files-menu-deployed="true">
<fieldset class="headers-menu">
<legend data-i18n="headers_menu" title="Menu">Menu</legend>
<nav>
<ul>{menu}</ul>
</nav>
<div class="menu-buttons">
<button type="button" data-i18n="hide" data-i18n-without="true" title="Hide" onclick="wmarkdown.hide_menu(this, event);" data-visible="true">
<span data-icon="hide"></span>
<span data-i18n="hide">Hide</span>
</button>
<button type="button" data-i18n="show" data-i18n-without="true" title="Show" onclick="wmarkdown.show_menu(this, event);" data-visible="false">
<span data-icon="show"></span>
<span data-i18n="show">Show</span>
</button>
</div>
</fieldset>
<fieldset class="content">
<legend data-i18n="content" title="Content">Content</legend>
<div class="content-box">{content}</div>
</fieldset>
<fieldset class="files">
<legend data-i18n="files" title="Files">Files</legend>
<nav>
<ul>{files}</ul>
</nav>
<div class="menu-buttons">
<button type="button" data-i18n="hide" data-i18n-without="true" title="Hide" onclick="wmarkdown.hide_menu(this, event);" data-visible="true">
<span data-icon="hide"></span>
<span data-i18n="hide">Hide</span>
</button>
<button type="button" data-i18n="show" data-i18n-without="true" title="Show" onclick="wmarkdown.show_menu(this, event);" data-visible="false">
<span data-icon="show"></span>
<span data-i18n="show">Show</span>
</button>
</div>
</fieldset>
</div>
<footer>
<a href="https://www.gnu.org/licenses/gpl-3.0.txt" target="_blank" title="GPLv3" class="license">
<span data-i18n="license_text">© 2021-2022 CopyLeft.</span>
<img src="https://www.gnu.org/graphics/gplv3-127x51.png" alt="GPLv3" />
</a>
<div data-preload="wmarkdown-preloader"></div>
</footer>
</body>
</html>

@ -0,0 +1,19 @@
[[post_data {
"author" : "{author}",
"since" : {since},
"version" : {version}
}]]
{content}
[[html_data {
"title" : "{title} - {project}",
"url" : "{url}{subpath}.html",
"author" : "{project_author}",
"since" : {since},
"version" : {version},
"key_words" : "{key_words},developt,desarrollo,programación,{languages}",
"description" : "Parte {language_name} del {project}.",
"project" : "{project}",
"logo" : "{logo}",
"language" : "{language}"
}]]

@ -0,0 +1,23 @@
[[post_data {
"author" : "{author}",
"since" : {since},
"version" : {version}
}]]
# {file}
```txt
{subpath}
```
[[html_data {
"title" : "{file} - {project}",
"url" : "{url}{subpath}.html",
"author" : "{project_author}",
"since" : {since},
"version" : {version},
"key_words" : "{key_words},developt,desarrollo,programación,{subkey_words}",
"description" : "{file} del {project}.",
"project" : "{project}",
"logo" : "{logo}",
"language" : "{language}"
}]]

@ -0,0 +1,46 @@
{
"default_value" : null,
"nulls" : true,
"wmarkdown_root" : "/mnt/d/git/WMarkDown",
"root" : "/mnt/d/git/WMarkDown",
"documentation_path" : "/WMD",
"html_files" : "/JSON/html.files.json",
"public_path" : "/Public",
"html_base" : "/HTML/WMarkDown.base.html",
"default_modules" : {
"code_blocks" : "\\WMarkDown\\Modules\\CodeBlocks",
"lists" : "\\WMarkDown\\Modules\\Lists",
"headers" : "\\WMarkDown\\Modules\\Headers",
"includes" : "\\WMarkDown\\Modules\\Includes",
"multimedia" : "\\WMarkDown\\Modules\\Multimedia",
"custom_parameters" : "\\WMarkDown\\Modules\\CustomParameters",
"quotes" : "\\WMarkDown\\Modules\\Quotes",
"paragraphs" : "\\WMarkDown\\Modules\\Paragraphs",
"checks" : "\\WMarkDown\\Modules\\Checks",
"tables" : "\\WMarkDown\\Modules\\Tables",
"links" : "\\WMarkDown\\Modules\\Links",
"font_formats" : "\\WMarkDown\\Modules\\FontFormats",
"escapes" : "\\WMarkDown\\Modules\\Escapes"
},
"hash_alphabet" : "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",
"hash_length" : 11,
"special_code_blocks" : ["mermaid", "maths"],
"default_title" : "Unknown",
"title" : "WMarkDown",
"mime_extension_file" : "/Public/json/mime_to_extension.json",
"extension_mime_file" : "/Public/json/extension_to_mime.json",
"default_extension" : "dat",
"default_mime" : "application/octet-stream",
"db_user" : null,
"db_password" : null,
"db_autoconnect" : false,
"db_secrets_class" : "\\Secrets",
"db_secrets_settings" : "urfree_sqlite",
"db_engine" : "sqlite",
"db_charset" : "utf8",
"db_connection_string" : "{engine}:{memory}?cache={file}",
"db_parameters" : null,
"db_memory" : false,
"db_file" : "/mnt/d/git/Data/wmarkdown.sqlite",
"variable_name" : "wmd"
}

@ -0,0 +1,51 @@
<?php
namespace WMarkDown\Abstracts;
abstract class Modules implements \WMarkDown\Interfaces\Modules{
protected $wmarkdown;
protected $more = true;
protected $from = -1;
protected $length = 0;
protected $to = 0;
protected $content = '';
protected $html = '';
protected $matches = null;
public function __construct($wmarkdown){
$this->wmarkdown = $wmarkdown;
}
public function reset(){
$this->more = true;
$this->from = -1;
}
public function set_position($new_position){
$this->from -= $new_position;
$this->to -= $new_position;
}
public function get_position($string){
if($this->from < 0 && $this->more)
$this->get_next_position($string);
return $this->more ? $this->from : null;
}
public function has_more(){return !!$this->more;}
public function get_from(){return 0 | $this->from;}
public function get_length(){return 0 | $this->length;}
public function get_to(){return 0 | $this->to;}
public function get_content(){return "" . $this->content;}
public function get_html(){return "" . $this->html;}
}

@ -0,0 +1,42 @@
<?php
namespace WMarkDown\Abstracts;
abstract class ScriptsAnalyzer implements \WMarkDown\Interfaces\ScriptsAnalyzer{
protected $wmarkdown = null;
protected $parent = null;
protected $common = null;
protected $original_wmd = null;
protected $root = null;
protected $root_l = null;
protected $class = null;
protected $object = null;
public function __construct($wmarkdown, $parent, $input = null){
$this->wmarkdown = $wmarkdown;
$this->parent = $parent;
$this->common = $input["common"];
$this->original_wmd = $input["original_wmd"];
$this->root = $input["root"];
$this->root_l = $input["root_l"];
$this->class = $input["class"];
$this->object = $input["object"];
}
protected function get_data($extension, $wmd_path){
return \WMarkDown::string_variables(file_exists($wmd_path) ? file_get_contents($wmd_path) : $this->original_wmd, array_merge([
"subkey_words" => preg_match('/^.+' . $this->common["project"] . '\.([^\/]+)\.' . $extension . '\.w\.md$/', $wmd_path) ? preg_replace_callback('/^.+' . $this->common["project"] . '\.([^\/]+)\.php\.w\.md$/', function($values){
return substr(preg_replace('/[,\.]+/', ",", preg_replace_callback('/([A-Z]+)?([A-Z][a-z0-9]+)/', function($subvalues){
return ($subvalues[1] ? "," . $subvalues[1] : "") . "," . strtolower($subvalues[2]);
}, $values[1])), 1);
}, $wmd_path) : "main",
"path" => substr($wmd_path, $this->root_l + 8),
"subpath" => substr($wmd_path, $this->root_l + 8, -5),
"file" => preg_replace('/^.+\/([^\/]+)\.w\.md$/', "$1", $wmd_path)
], $this->common));
}
};

@ -0,0 +1,155 @@
<?php
namespace WMarkDown\PDO;
class SQLite{
private $wmarkdown = null;
private $input = null;
private $connection = null;
private $error = 0;
public $type = "mysql";
private function close(){
if($this->connection){
try{
$this->connection->commit();
}catch(\Exception $exception){
try{
$this->connection->rollback();
}catch(\Exception $exception){
$this->error |= 1 << 3;
};
$this->error |= 1 << 0;
};
}else
$this->error |= 1 << 6;
$this->connection = null;
}
private function connect(){
if($this->connection)
return;
try{
$this->connection = new \PDO(\WMarkDown::string_variables($this->wmarkdown->settings(["db_connection_string", "connection_string"], $this->input), [
"engine" => $this->wmarkdown->settings(["db_engine", "engine"], $this->input),
"file" => $this->wmarkdown->settings(["db_file", "file"], $this->input),
"memory" => $this->wmarkdown->settings(["db_memory", "memory"], $this->input) ? ":memory:" : ""
]), $this->wmarkdown->settings(["db_user", "user"], $this->input), $this->wmarkdown->settings(["db_password", "password"], $this->input), $this->wmarkdown->settings(["db_parameters", "parameters"], $this->input));
}catch(\Exception $exception){
$this->error |= 1 << 2;
$this->close();
return;
};
$this->connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$this->connection->beginTransaction();
}
public function __construct($wmarkdown, $input = null){
$this->wmarkdown = $wmarkdown;
$this->input = $input;
$secrets_class = $this->wmarkdown->settings(["db_secrets_class", "secrets_class"], $this->input);
$secrets_settings = $this->wmarkdown->settings(["db_secrets_settings", "secrets_settings"], $this->input);
foreach(class_exists($secrets_class) && property_exists($secrets_class, $secrets_settings) ? $secrets_class::$$secrets_settings : [] as $key => $value)
if(!isset($this->input[$key]))
$this->input[$key] = $value;
if($this->wmarkdown->settings(["db_autoconnect", "autoconnect"], $this->input))
$this->connect();
}
public function __destruct(){
if($this->connection)
try{
$this->close();
}catch(\Exception $exception){};
}
public static function query_variables($query, $variables){
return preg_replace_callback('/{([^\{\}]+)}/', function($values) use($variables){
if($variables && isset($variables[$values[1]])){
if($variables[$values[1]] === null)
return "null";
if(is_string($variables[$values[1]]))
return "'" . preg_replace('/\'/', '\\\'', $variables[$values[1]]) . "'";
if(is_bool($variables[$values[1]]))
return $variables[$values[1]] ? "true" : "false";
return $variables[$values[1]];
};
return "null";
}, $query);
}
public function query($query, $input = null){
$results = [
"tables" => [],
"variables" => [],
"error" => $this->error | 0
];
if($results["error"])
return $results;
if(!$query){
$results["error"] |= 1 << 4;
return $results;
};
if(!$this->connection){
$this->connect();
$results["error"] = $this->error;
if(!$this->connection)
$results["error"] |= 1 << 5;
if($results["error"])
return $results;
};
$query_completed = self::query_variables($query, $input);
print_r(["query_completed" => $query_completed]);
$statement = $this->connection->prepare($query_completed);
$statement->execute();
try{
$table = [];
foreach($statement->fetchAll(\PDO::FETCH_ASSOC) as $new_row){
$row = [];
foreach($new_row as $key => $value){
if(is_string($value)){
if($value[0] == "[" || $value[0] == "{"){
try{
$row[$key] = json_decode(utf8_encode($value), true);
if(!$row[$key])
$row[$key] = utf8_encode($value);
}catch(\Exception $exception){
$row[$key] = utf8_encode($value);
};
}else
$row[$key] = utf8_encode($value);
}else
$row[$key] = $value;
};
$table[] = $row;
};
$results["tables"][] = $table;
}catch(\Exception $exception){};
return $results;
}
};

@ -0,0 +1,10 @@
<?php
namespace WMarkDown\Interfaces;
interface Modules{
public function get_next_position($string);
public function process($string, $modules, $level);
};

@ -0,0 +1,9 @@
<?php
namespace WMarkDown\Interfaces;
interface ScriptsAnalyzer{
public function analyze($file, $path = null, &$languages = [], $level = 0);
};

@ -0,0 +1,79 @@
<?php
namespace WMarkDown\Modules;
class Checks extends \WMarkDown\Abstracts\Modules{
public function get_next_position($string){
if(!$this->more || $this->from >= 0)
return;
$pattern = '/';
foreach([
["(", ")"],
["[", "]"],
["{", "}"],
["<", ">"]
] as $delimiter)
$pattern .= ($pattern != '/' ? '|' : '') . '(\\' . $delimiter[0] . ')([\-\*\+x\\\\\/\=\#\|· v\?,yn])\\' . $delimiter[1];
$pattern .= '/i';
if($this->more = preg_match($pattern, $string, $this->matches, PREG_OFFSET_CAPTURE))
$this->from = $this->matches[0][1];
}
public function process($string, $modules, $level){
$character;
$value;
$hash = $this->wmarkdown->get_hash();
$type = "checkbox";
$icon = "checkbox";
$checked = false;
$disabled = false;
for($i = 1; $i < 8; $i += 2)
if(isset($this->matches[$i])){
$value = strtolower($this->content = $this->matches[$i + 1][0]);
$character = $this->matches[$i][0];
};
switch($value){
case "v":
$icon = "tick";
$checked = true;
break;
default:
$checked = strpos("x*#·vy", $value) !== false;
$disabled = strpos("-=?\\/|", $value) !== false;
switch($character){
case "(":
$type = "radio";
$icon = "radio";
break;
case "[":
$type = "checkbox";
$icon = "checkbox";
break;
case "{":
case "<":
$type = "checkbox";
$icon = "tick";
break;
};
break;
};
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->html = ('
<label class="' . $icon . '" for="' . $hash . '">
<input type="' . $type . '" id="' . $hash . '" readonly onclick="return false;"' . ($checked ? ' checked' : '') . ($disabled ? ' disabled' : '') . ' />
<span data-icon="' . $icon . '"></span>
</label>
');
}
};

@ -0,0 +1,98 @@
<?php
namespace WMarkDown\Modules;
class CodeBlocks extends \WMarkDown\Abstracts\Modules{
private $matches_start = null;
private $matches_end = null;
private $delimiter = null;
private $start_characters = null;
private static $ampersand_code = [
"<" => "lt",
">" => "gt",
"&" => "emp"
];
public function get_next_position($string){
if(!$this->more || $this->from >= 0)
return;
$this->more = false;
$lower = null;
foreach(["```", "'''", '"""', "---"] as $base)
foreach([$base, preg_replace('/(.)/', "$1 ", $base)] as $delimiter){
if(
preg_match('/^' . $delimiter . '([^\n\r]+)?/m', $string, $matches_start, PREG_OFFSET_CAPTURE) &&
preg_match('/^' . $delimiter . '/m', substr($string, $matches_start[0][1] + ($start_characters = strlen($matches_start[0][0]))), $matches_end, PREG_OFFSET_CAPTURE) &&
($lower === null || $lower > $matches_start[0][1])
){
$lower = $matches_start[0][1];
$this->more = true;
$this->from = $matches_start[0][1];
$this->matches_start = $matches_start;
$this->matches_end = $matches_end;
$this->delimiter = $delimiter;
$this->start_characters = $start_characters;
};
};
}
public function process($string, $modules, $level){
$lines = '';
$data_html = '';
$this->more = true;
$this->length = $this->matches_end[0][1] + strlen($this->delimiter) + $this->start_characters;
$this->to = $this->from + $this->length;
$this->content = preg_replace_callback('/[<>&]/', function($values){
if(isset(\WMarkDown\Modules\CodeBlocks::$ampersand_code[$values[0]]))
return "&" . \WMarkDown\Modules\CodeBlocks::$ampersand_code[$values[0]] . ";";
return $values[0];
}, preg_replace('/^(\r\n|[\r\n])|(\r\n|[\r\n])$/', "", substr($string, $this->from + $this->start_characters, $this->matches_end[0][1])));
$language = isset($this->matches_start[1]) ? $this->matches_start[1][0] : "text";
$is_special = in_array($language, $this->wmarkdown->settings("special_code_blocks"));
foreach(($lines_splitted = preg_split('/\r\n|[\r\n]/', $this->content)) as $line)
$lines .= '<li></li>';
foreach([[
"name" => "language",
"text" => "Language",
"data" => $language
], [
"name" => "lines",
"text" => "Lines",
"data" => count($lines_splitted)
], [
"name" => "characters",
"text" => "Characters",
"data" => strlen($this->content)
]] as $data)
$data_html .= $this->wmarkdown->string_variables(('
<li class="{name}" data-i18n="{name}" data-i18n-without="true" title="{text}">
<span data-icon="{name}"></span>
<span data-i18n="{name}">{text}</span>
<span class="data">{data}</span>
</li>
'), $data);
$this->html = ('
<pre class="code-block" data-lang="' . $language . '" data-special="' . ($is_special ? "true" : "false") . '">
<ul class="data">' . $data_html . '</ul>
' . ($is_special ? ('
<div class="' . $language . '">' . $this->content . '</div>
') : ('
<div class="lines"><ol>' . $lines . '</ol></div>
<div class="code-box" onscroll="wmarkdown.block_code_scroll(this, event);">' . $this->content . '</div>
')) . '
</pre>
');
}
};

@ -0,0 +1,298 @@
<?php
namespace WMarkDown\Modules;
class CustomParameters extends \WMarkDown\Abstracts\Modules{
private $menu = '';
private $title = '';
private $order = "";
public function get_next_position($string){
if(
$this->more &&
$this->from < 0 &&
$this->more = preg_match('/\[\[(header_level|html_data|post_data|data_dictionary|wdictionaries|wmonitor|ignore|links_groups?|i|icon|\!|wdoc|plain) ?(([^\]"\']+|[\r\n]+|"(([^\\\\"]+|\\\\(.|[\r\n]))*)"|\'(([^\\\\\']+|\\\\(.|[\r\n]))*)\'|\]([^\]]))+)\]\]/', $string, $this->matches, PREG_OFFSET_CAPTURE)
)
$this->from = $this->matches[0][1];
}
public function process($string, $modules, $level){
$this->order = $this->matches[1][0];
switch($key = strtolower($this->matches[1][0])){
case "header_level":
try{
$symbol = $this->matches[2][0][0];
$level = $this->matches[2][0];
if($string == "[[header_level 2]]")
print_r([$symbol, $level]);
$modules->menu_level = strpos("+-", $symbol) !== false ? $modules->menu_level + intval(substr($level, 1)) * ($symbol == "-" ? -1 : 1) : intval($level);
}catch(\Exception $exception){};
$this->html = '';
break;
case "html_data":
try{
$modules->html_data = json_decode(\WMarkDown::string_variables($this->matches[2][0], [
"now" => (new \DateTime())->format('Ymd')
]), true);
}catch(\Exception $exception){};
$this->html = '';
break;
case "post_data":
$this->html = '';
try{
$data = json_decode(\WMarkDown::string_variables($this->matches[2][0], [
"now" => (new \DateTime())->format('Ymd')
]), true);
if(!isset($data["since"]))
$data["since"] = (new \DateTime())->format('Ymd');
foreach(["since", "version"] as $key)
if(isset($data[$key]))
$data[$key] = preg_replace('/^(\d{4})(\d{2})(\d{2})$/', "$1/$2/$3", $data[$key]);
if(!isset($data["version"]))
$data["version"] = $data["since"];
if(!isset($data["author"]))
$data["author"] = "Anonymous";
$i18n_data = base64_encode(json_encode($data));
$this->html = \WMarkDown::string_variables(('
<div class="header-file-note" data-i18n="post_created_by" data-i18n-variables="' . $i18n_data . '">
Por {author}. Creado a fecha {since}. Última modificación a fecha {version}.
</div>
'), $data);
}catch(\Exception $exception){};
break;
case "data_dictionary":
try{
$this->html = json_decode($this->matches[2][0], true);
}catch(\Exception $exception){};
$this->html = $this->html ? '<input type="hidden" class="data-dictionary" data-json="' . base64_encode(preg_replace('/[\s\t]+|[\r\n]+|("(([^\\\\"]+|\\\\(.|[\r\n]))*)"|\'(([^\\\\\']+|\\\\(.|[\r\n]))*)\')/', "$1", $this->matches[2][0])) . '" />' : '';
break;
case "wdictionaries":
$this->html = '';
if(
$this->matches[2][0] &&
preg_match('/^([^"\' ]+|"(([^\\\\"]+|\\\\.)*)"|\'(([^\\\\\']+|\\\\.)*)\')((.+|[\r\n]+)+)?$/', $this->matches[2][0], $matches) &&
count($matches) >= 6 &&
!empty($files = preg_split('/([\s\t]+|[\r\n]+)+/', trim($matches[6])))
)
$this->html = $files ? ('
' . \WMarkDown\Modules::format($this->wmarkdown, '# ' . $matches[$matches[4] ? 4 : ($matches[2] ? 2 : 1)], ["wdictionaries", "paragraph"], $modules)["content"] . '
<input type="hidden" class="wdictionary" data-json="' . base64_encode(json_encode($files)) . '" data-status="unloaded" />
') : '';
break;
case "wmonitor":
$this->html = $this->matches[2][0] ? '<span data-wmonitor="' . $this->matches[2][0] . '" data-status="unloaded">WMonitor</span>' : '';
break;
case "ignore":
$this->html = '<span data-ignore="true">' . $this->matches[2][0] . '</span>';
break;
case "links_group":
case "links_groups":
$html = '<div class="links-group">';
try{
if($json = json_decode($this->matches[2][0], true)){
foreach($json as $link)
$html .= ('
<a href="' . $link["link"] . '" class="multimedia-box links-group" target="_' . (isset($link["self"]) && $link["self"] ? "self" : "blank") . '" class="links-group-item" title="' . ($text = isset($link["text"]) ? $link["text"] : "") . '">
<span data-status="unloaded">
<img data-src="' . base64_encode(json_encode($link["images"])) . '" data-i="0" onerror="wmarkdown.multimedia.image_try_next(this, event);" />
<span class="image-style"></span>
</span>
<span class="text">' . $text . '</span>
</a>
');
};
}catch(\Exception $exception){};
$this->html = $html . '</div>';
break;
case "i":
case "!":
case "icon":
$this->html = preg_match('/^([^ ]+)( ((.+|[\r\n]+)+)?)?/', $this->matches[2][0], $matches) ? (
'<span class="special-text-i" data-i18n="' . $matches[1] . '" data-i18n-without="true" title="' . $matches[1] . '">' .
'<span data-icon="' . $matches[1] . '"></span>' .
(empty($matches[3]) ? '' : '<span class="text">' . $matches[3] . '</span>') .
'</span>'
) : $this->matches[0][0];
break;
case "wdoc":
$html = '';
$name = 'UNKNOWN';
$description = '';
$attributes = [[]];
$return = [null];
$data = [];
$language = "unknown";
$deprecated = false;
preg_replace_callback('/([\@\#]([^\s\t\r\n]+)([ \t]+([^\s\t\r\n]+)([ \t]+([^\s\t\r\n]+)([ \t]+([^\r\n]*))?)?)?|[^\@\r\n][^\r\n]+)/', function($values) use(
&$name,
&$description,
&$attributes,
&$return,
&$language,
&$deprecated,
&$data
){
switch($values[0][0]){
case "@":
switch(strtolower($values[2])){
case "lang":
$language = $values[4];
$data[] = ["language", $values[4]];
break;
case "deprecated":
$deprecated = true;
$data[] = ["deprecated", true];
break;
case "name":
$name = $values[4];
$data[] = ["name", $values[4]];
break;
case "overload":
$attributes[] = [];
$return[] = null;
break;
case "see":
// Mirar porque algunos SEE salen mal.
count($values) >= 5 && ($data[] = [$values[2], '<a href="#' . $values[4] . '">' . $values[4] . '</a>']);
break;
default:
$data[] = [$values[2], count($values) > 3 ? $values[4] : null];
break;
};
break;
case "#":
switch(strtolower($values[2])){
case "return":
$return[count($attributes) - 1] = [$values[4], count($values) > 8 && $values[8] ? $values[8] : ''];
break;
default:
$l = count($values);
if($l > 5)
$attributes[count($attributes) - 1][] = [
$values[2],
$values[4],
$values[6],
$l > 8 && $values[8] ? $values[8] : ''
];
else
$data[] = [$values[2], $l > 3 ? $values[4] : null];
break;
};
break;
default:
$description .= $values[0] . " ";
break;
};
}, $this->matches[2][0]);
$l = count($attributes);
$data_html = '';
foreach($data as $value){
$is_bool = is_bool($value[1]) || $value[1] === null;
if(is_string($value[1]))
$value[1] = explode(",", $value[1]);
$data_html .= (
'<li data-name="' . $value[0] . '" data-hide="' . (!$is_bool || $value[1] ? "true" : "false") . '" data-ignore="true">' .
'<span class="name">' . $value[0] . '</span>' .
'<span class="value" data-with-value="' . ($is_bool ? "false" : "true") . '">' . (is_array($value[1]) ? '<span>' . implode('</span><span>', $value[1]) . '</span>' : $value[1]) . '</span>' .
'</li>'
);
};
for($i = 0; $i < $l; $i ++){
$overload = $attributes[$i];
$attributes_html = '';
$return_type = $return[$i] ? $return[$i][0] : 'void';
foreach($attributes[$i] as $attribute)
$attributes_html .= (
'<span class="attribute" data-status="' . strtolower($attribute[2]) . '">' .
'<span class="attribute-name" data-ignore="true">' . $attribute[0] . '</span>' .
'<span class="attribute-type"><span>' . preg_replace('/,/', '</span><span>', $attribute[1] == "-" ? "ANY" : $attribute[1]) . '</span></span>' .
'<span class="attribute-status">' . $attribute[2] . '</span>' .
'<span class="attribute-description">' . ($attribute[3] ? $attribute[3] : '') . '</span>' .
'</span>'
);
$attributes_html .= (
'<span class="return">' .
'<span class="return-text">return</span>' .
'<span class="return-type">' . ($return_type == "-" ? "ANY" : $return_type) . '</span>' .
'<span></span>' .
'<span class="return-description">' . ($return[$i] && $return[$i][1] ? $return[$i][1] : '') . '</span>' .
'</span>'
);
$html .= (
'<div class="overload">' .
'<div class="structure">' .
'<span class="return-type">' . ($return_type == "-" ? "ANY" : $return_type) . '</span>' .
'<span class="name" data-ignore="true">' . $name . '</span>' .
'<span class="attributes">' . $attributes_html . '</span>' .
'</div>' .
'<div class="attributes-data">' . $attributes_html . '</div>' .
'</div>'
);
};
$this->html = (
'<fieldset id="' . $name . '" class="wdoc" data-language="' . strtolower($language) . '" data-deprecated="' . ($deprecated ? 'true' : 'false') . '">' .
'<legend>' .
($deprecated ? (
'<span class="deprecated">' .
'<span data-icon="deprecated"></span>' .
'<span data-i18n="deprecated">Deprecated</span>' .
'</span>'
) : '') .
'<span class="name" data-ignore="true">' . $name . '</span>' .
'<span class="language">' . $language . '</span>' .
'</legend>' .
'<p class="description">' . $description . '</p>' .
$html .
'<ul class="data">' . $data_html . '</ul>' .
'</fieldset>'
);
break;
case "plain":
$this->html = $this->matches[2][0];
break;
default:
$this->html = $this->matches[0][0];
break;
};
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[2][0];
}
public function get_menu(){return "" . $this->menu;}
public function get_title(){return "" . $this->title;}
public function get_order(){return "" . $this->order;}
};

@ -0,0 +1,27 @@
<?php
namespace WMarkDown\Modules;
class Escapes extends \WMarkDown\Abstracts\Modules{
public function get_next_position($string){
if(
$this->more &&
$this->from < 0 &&
$this->more = preg_match('/\\\\(.)/m', $string, $this->matches, PREG_OFFSET_CAPTURE)
)
$this->from = $this->matches[0][1];
}
public function process($string, $modules, $level){
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[1][0];
$this->html = $this->matches[1][0];
}
};

@ -0,0 +1,52 @@
<?php
namespace WMarkDown\Modules;
class FontFormats extends \WMarkDown\Abstracts\Modules{
private $scape = false;
public function get_next_position($string){
if(!$this->more || $this->from >= 0)
return;
$this->more = false;
$last = null;
$item = null;
if(preg_match('/\\\\([_\*\'"\\\\])/', $string, $matches, PREG_OFFSET_CAPTURE)){
$this->more = true;
$this->scape = true;
$this->from = $matches[0][1];
$this->matches = $matches;
};
foreach([
'/(\*)([^\*\\\\]+|\\\\.)\*/', '/(_)([^_\\\\]+|\\\\.)_/',
'/(\*{2})(([^\*\\\\]+|\*[^\*]|\\\\.)+)\*{2}(\*)?/', '/(__)(([^_\\\\]+|_[^_]|\\\\.)+)__(_)?/',
'/(\'{3})(([^\'\\\\]+|\'{1,2}[^\']|\\\\.)+)\'{3}(\'{2})?/', '/(""")(([^"\\\\]+|"{1,2}[^"]|\\\\.)+)"""("")?/',
'/(\'{2})(([^\'\\\\]+|\'[^\']|\\\\.)+)\'{2}/', '/("")(([^"\\\\]+|"[^"]|\\\\.)+)""/'
] as $pattern)
if(preg_match($pattern, $string, $matches, PREG_OFFSET_CAPTURE) && ($last === null || $last > $matches[0][1])){
$this->more = true;
$this->scape = false;
$this->from = $matches[0][1];
$this->matches = $matches;
};
}
public function process($string, $modules, $level){
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[$this->scape ? 1 : 2][0];
$this->html = $this->scape ? $this->matches[1][0] : (
'<' . ($tag = strlen($this->matches[1][0]) == 2 ? "b" : "i") . '>' .
\WMarkDown\Modules::format($this->wmarkdown, $this->matches[2][0] . (isset($this->matches[4]) ? $this->matches[4][0] : ''), ["paragraphs"], $modules)["content"] .
'</' . $tag . '>'
);
}
};

@ -0,0 +1,56 @@
<?php
namespace WMarkDown\Modules;
class Headers extends \WMarkDown\Abstracts\Modules{
private static $ids = [];
private $id;
private $level;
public static function id($text){
$id = preg_replace('/[^a-z\d\-]+/i', "-", trim($text));
$test = "" . $id;
$i = 0;
while(in_array($test, self::$ids))
$test = $id . (++ $i == 1 ? "" : "-" . $i);
self::$ids[] = $id = preg_replace('/\-{2,}/', "-", $test);
return $id;
}
public function get_next_position($string){
if(!$this->more || $this->from >= 0)
return;
$last = null;
foreach(['/^(\={1,6})(.+)\={1,6}?$/m', '/^(\#{1,6})(.+)$/m'] as $pattern)
if(preg_match($pattern, $string, $matches, PREG_OFFSET_CAPTURE) && ($last === null || $last > $matches[0][1])){
$this->from = $matches[0][1];
$this->matches = $matches;
};
}
public function process($string, $modules, $level){
$html = trim(\WMarkDown\Modules::format($this->wmarkdown, $this->matches[2][0], ["paragraphs"], $modules)["content"]);
$i = $this->level + 1;
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $html;
$modules->menu_level = $this->level = strlen($this->matches[1][0]) + $level;
$this->id = self::id($html);
$this->html = '<h' . $i . ' id="' . $this->id . '">' . $html . '</h' . $i . '>';
}
public function get_id(){return "" . $this->id;}
public function get_level(){return 0 | $this->level;}
}

@ -0,0 +1,42 @@
<?php
namespace WMarkDown\Modules;
class Includes extends \WMarkDown\Abstracts\Modules{
private $menu = '';
private $title = '';
public function get_next_position($string){
if(
$this->more &&
$this->from < 0 &&
$this->more = preg_match('/\[\[include ([^\[\]]+)\]\]/', $string, $this->matches, PREG_OFFSET_CAPTURE)
)
$this->from = $this->matches[0][1];
}
public function process($string, $modules, $level){
$formatted = \WMarkDown\Modules::format($this->wmarkdown, $data = $this->wmarkdown->load_file($this->matches[1][0]), [], $modules, $modules->menu_level);
$this->html = (
'<article class="included" data-file="' . $this->matches[1][0] . '">' .
'<a name="' . preg_replace('/[^a-z\d]+/', "-", strtolower(substr($this->matches[1][0], 1))) . '"></a>' .
$formatted["content"] .
'</article>'
);
$this->menu = $formatted["menu"];
$this->title = $formatted["title"];
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[1][0];
}
public function get_menu(){return "" . $this->menu;}
public function get_title(){return "" . $this->title;}
};

@ -0,0 +1,75 @@
<?php
namespace WMarkDown\Modules;
class Links extends \WMarkDown\Abstracts\Modules{
public function get_next_position($string){
if(
$this->more &&
$this->from < 0 &&
$this->more = preg_match('/' .
'\\\\([\[\]])|' .
'(^|\\b)([a-z][a-z\d]{1,8}\:\/\/[^\/<\r\n]+(\/([^ <\r\n]+)?)?)|' . // 1, 2, 3, 4, 5
'\[(([^ \[\]]+)( (([^\[\]\r\n]+(\r\n|[\r\n])?)+))?)\](' . // 6, 7, 8, 9, 10, 11, 12
'\: ?([^\r\n]+)|' . // 13
'\((([^ \(\)]+)( (([^\'"\(\)]+)|\'(([^\'\\\\]+|\\\\.)*)\'|"(([^"\\\\]+|\\\\.)*)"))?)\)|' . // 14, 15, 16, 17, 18, 19, 20, 21, 22
'\[(([^ \[\]]+)( (([^\'"\(\)]+)|\'(([^\'\\\\]+|\\\\.)*)\'|"(([^"\\\\]+|\\\\.)*)"))?)\]' . // 23, 24, 25, 26, 27, 28, 29, 30, 31
')?' .
'/m', $string, $this->matches, PREG_OFFSET_CAPTURE)
)
$this->from = $this->matches[0][1];
}
public function process($string, $modules, $level){
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[0][0];
if($this->matches[1][1] != -1){
$this->html = $this->matches[1][0];
return;
};
$link = null;
$text = null;
$title = null;
$index = null;
$reference = null;
if($this->matches[3][1] != -1)
$link = $text = $title = $this->matches[3][0];
elseif($this->matches[6][1] != -1){
$link = $this->matches[7][0];
$text = $this->matches[isset($this->matches[9]) && $this->matches[9][1] != -1 ? 9 : 7][0];
if(isset($this->matches[12])){
if(isset($this->matches[13]) && $this->matches[13][1] != -1){
$reference = base64_encode($this->matches[6][0]);
$link = $this->matches[13][0];
}else{
$text = $this->matches[6][0];
if($i = isset($this->matches[15]) && $this->matches[15][1] != -1 ? 15 : (isset($this->matches[24]) ? 24 : 0)){
$link = $this->matches[$i][0];
$index = base64_encode($this->matches[$i - 1][0]);
if(isset($this->matches[$i + 2]))
$title = $this->matches[isset($this->matches[$i + 3]) ? $i + 3 : (isset($this->matches[$i + 4]) ? $i + 4 : (isset($this->matches[$i + 6]) ? $i + 6 : 0))][0];
};
};
}else
$title = $text;
};
$this->html = $reference !== null ? '<input type="hidden" data-index="' . $reference . '" data-link="' . $link . '" />' : '<a ' .
'href="' . $link . '" ' .
'target="' . ($link && $link[0] == "#" ? "_self" : "_blank") . '"' .
($title ? ' title="' . $title . '"' : '') .
($index ? ' data-index="' . $index . '"' : '') .
'>' . ($text && $text != $link ? \WMarkDown\Modules::format($this->wmarkdown, $text, ["paragraphs", "links"], $modules)["content"] : $link) . '</a>';
}
};

@ -0,0 +1,133 @@
<?php
namespace WMarkDown\Modules;
class Lists extends \WMarkDown\Abstracts\Modules{
private static function close(&$html, &$levels, &$l, $level){
$closed = false;
while($l && $levels[$l - 1]["level"] > $level){
$closed = true;
$l --;
for($i = 0; !$i || $i < $levels[$l]["levels"]; $i ++)
$html .= '</' . $levels[$l]["tag"] . '>';
if($levels[$l]["close"])
$html .= '</li>';
array_pop($levels);
};
return $closed;
}
private static function open(&$html, &$levels, &$l, $level, $header){
if(!$l || $levels[$l - 1]["level"] < $level){
$start = $header[empty($header[2]) ? 3 : 2];
$type = null;
$tag = "ul";
switch($start[0]){
case "a":
case "i":
case "A":
case "I":
case "1":
$type = $start;
$tag = "ol";
break;
case "#":
$type = "1";
$tag = "ol";
$start = "1";
break;
default:
$tag = "ol";
if(preg_match('/^[a-z]+$/', $start))
$type = "a";
elseif(preg_match('/^[A-Z]+$/', $start))
$type = "A";
elseif(preg_match('/^[0-9]+$/', $start))
$type = "1";
else
$tag = "ul";
break;
};
$levels[] = [
"levels" => $level - ($l ? $levels[$l - 1]["level"] : 0),
"level" => $level,
"tag" => $tag,
"start" => $start,
"type" => $type,
"close" => !!$l
];
for($i = 0; (!$l && !$i) || $i < $levels[$l]["levels"]; $i ++)
$html .= ('<' . $levels[$l]["tag"] .
($levels[$l]["type"] ? ' type="' . $levels[$l]["type"] . '"' : '') .
($levels[$l]["tag"] == "ol" ? ' start="' . $levels[$l]["start"] . '"' : '') .
'>');
$l ++;
};
}
public function get_next_position($string){
if(
$this->more &&
$this->from < 0 &&
$this->more = preg_match('/^(([ \t]*(\-+|\#+|\++|\*+|(\d+|[ia])\.) *[^\r\n]+(\r\n|[\r\n])([ \t]*([^\-\+\#\r\n\s\t]|(?!(\d+|[ia])\.).)[^\r\n]+(\r\n|[\r\n]))*){2,})/mi', $string, $this->matches, PREG_OFFSET_CAPTURE)
)
$this->from = $this->matches[0][1];
}
public function process($string, $modules, $level){
$html = '';
$content = '';
$levels = [];
$l = 0;
$first = true;
foreach(preg_split('/\r\n|[\r\n]/', preg_replace('/\t/', " ", $this->matches[0][0])) as $line){
preg_match('/^ +/', $line, $spaces);
$level = isset($spaces[0]) ? strlen($spaces[0]) / 4 >> 0 : 0;
if(($line = trim($line)) && preg_match('/^(([\-\+\#\+])|(\d+|[ai])\.) *(.+)/', $line, $header)){
if($started = !!$content){
if(!$l)
self::open($html, $levels, $l, 0, $header);
$html .= '<li>' . \WMarkDown\Modules::format($this->wmarkdown, $content, ["paragraphs"], $modules)["content"];
$content = "";
};
$level += strlen(preg_replace('/\.?$/', "", $header[1])) - 1;
self::close($html, $levels, $l, $level);
self::open($html, $levels, $l, $level, $header);
$content = $header[4];
}else
$content .= " " . $line;
};
if($content)
$html .= '<li>' . \WMarkDown\Modules::format($this->wmarkdown, $content, ["paragraphs"], $modules)["content"];
self::close($html, $levels, $l, 0);
preg_match('/^<([ou]l)(.+|[\r\n])+$/', $html, $tag);
$html .= '</' . $tag[1] . '>';
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[1][0];
$this->html = $html;
}
};

@ -0,0 +1,292 @@
<?php
namespace WMarkDown\Modules;
class Multimedia extends \WMarkDown\Abstracts\Modules{
public function get_next_position($string){
if(
$this->more &&
$this->from < 0 &&
$this->more = preg_match('/^\[\[(images?|slider|videos?|audios?|embed|thumbnails?) ?(([^\]"\'\n\r]+|[\r\n]+|"(([^\\\\"]+|\\\\(.|[\r\n]))*)"|\'(([^\\\\\']+|\\\\(.|[\r\n]))*)\'|\][^\]])+)\]\]/m', $string, $this->matches, PREG_OFFSET_CAPTURE)
)
$this->from = $this->matches[0][1];
}
private static function multimedia_box($html, $multiple){
return '<div class="multimedia-box" data-multiple="' . ($multiple ? "true" : "false") . '">' . $html . '</div>';
}
public function image($data){
if(!$data)
return '';
$images;
$text;
if(is_string($data)){
if(!preg_match('/^(\[(([^\\\\\]]+|\\\\(.|[\r\n]))*)\]|[^ ]+)( (.+))?$/', trim($data), $matches))
return '';
$images = $matches[1][0] == "[" ? json_decode($matches[1], true) : [$matches[1]];
$text = isset($matches[6]) ? $matches[6] : null;
}else{
if(isset($data[0]))
$data = ["images" => $data];
$images = $data["images"];
$text = isset($data["text"]) && $data["text"] ? $data["text"] : null;
};
$html = '';
$image_text = $text ? $text : "image";
foreach($images as $image)
$html .= '<img src="' . $image . '" alt="' . $image_text . '" />';
return ('
<span data-type="image"' . ($text !== null ? ' title="' . $text . '"' : '') . ' data-status="unloaded" data-error-type="ok" onclick="wmarkdown.multimedia.go(this, event);">
<img data-src="' . base64_encode(json_encode($images)) . '" data-i="0"' . ($text !== null ? ' alt="' . $text . '"' : '') . ' onerror="wmarkdown.multimedia.image_try_next(this, event);" />
<span class="image-style"></span>
<noscript>' . $html . '</noscript>
<a href="#" target="_blank"></a>
' . ($text !== null ? '<span class="text">' . $text . '</span>' : '') . '
</span>
');
}
public function images($data){
return preg_replace_callback('/^([\s\t]+)?(\[(([^\\\\\[\]"\'\r\n]+|"(([^\\\\"\r\n]+|\\\\(.|[\r\n]))*)"|\'(([^\\\\\'\r\n]+|\\\\(.|[\r\n]))*)\'|\\\\(.|[\n\r])|[\r\n])*)\]|[^\r\n]+)( ([^\r\n]+)?)?[\r\n]?$/m', function($values){
return ($string = trim($values[0])) ? $this->image($string) : "";
}, $data);
}
public function video($data){
if(!$data)
return '';
$videos;
$posters;
$text;
if(is_string($data)){
if(!preg_match('/^(\[(([^\\\\\]]+|\\\\(.|[\r\n]))*)\]|[^ ]+)( (\[(([^\\\\\[]+|\\\\(.|[\r\n]))*)\]|[a-z][a-z\d]{2,}\:\/{2}[^ ]+))?( (.+))?$/im', trim($data), $matches))
return '';
$videos = $matches[1][0] == "[" ? json_decode($matches[1], true) : [$matches[1]];
$posters = isset($matches[6]) && $matches[6] ? ($matches[6][0] == "[" ? json_decode($matches[6], true) : [$matches[6]]) : null;
$text = isset($matches[11]) && $matches[11] ? $matches[11] : null;
}else{
if(isset($data[0]))
$data = ["videos" => $data];
$videos = $data["videos"];
$posters = isset($data["posters"]) ? $data["posters"] : null;
$text = isset($data["text"]) ? $data["text"] : null;
};
$html = '';
$video_text = $text ? $text : "video";
foreach($videos as $video)
$html .= ('
<video title="' . $video_text . '">
<source src="' . $video . '" type="' . $this->wmarkdown->get_mime($video) . '" />
<span data-i18n="multimedia_no_recognized">Formato no reconocido por el navegador.</span>
</video>
');
return ('
<span data-type="video" data-status="unloaded" data-error-type="ok" onclick="wmarkdown.multimedia.go(this, event);">
<video controls data-src="' . base64_encode(json_encode($videos)) . '" data-i="0"' . ($posters ? ' data-posters="' . base64_encode(json_encode($posters)) . '" data-posters-i="0"' : '') . ' onerror="wmarkdown.multimedia.video_try_next(this, event);">
<span data-i18n="multimedia_no_recognized">Formato no reconocido por el navegador.</span>
</video>
<noscript>' . $html . '</noscript>
<a href="#" target="_blank"></a>
' . ($text !== null ? '<span class="text">' . $text . '</span>' : null) . '
</span>
');
}
public function videos($data){
return preg_replace_callback('/^([\s\t]+)?(\[(([^\\\\\[]+|\\\\(.|[\n\r]))*)\]|[^ ]+)( (\[(([^\\\\\[]+|\\\\(.|[\n\r]))*)\]|[a-z][a-z\d]{2,}\:\/{2}[^ ]+))?( (.+)?)?/im', function($values){
return $this->video($values[0]);
}, $data);
}
private function audio_poster($data){
return self::multimedia_box($this->image($data), false);
}
public function audio($data, $multiple = null){
if(!$data)
return '';
$audios;
$posters;
$text;
if(is_string($data)){
if(!preg_match('/^(\[(([^\\\\\]]+|\\\\(.|[\r\n]))*)\]|[^ ]+)( (\[(([^\\\\\[]+|\\\\(.|[\r\n]))*)\]|[a-z][a-z\d]{2,}\:\/{2}[^ ]+))?( (.+))?$/im', trim($data), $matches))
return '';
$audios = $matches[1][0] == "[" ? json_decode($matches[1], true) : [$matches[1]];
$posters = isset($matches[6]) && $matches[6] ? ($matches[6][0] == "[" ? json_decode($matches[6], true) : [$matches[6]]) : null;
$text = isset($matches[11]) && $matches[11] ? $matches[11] : null;
}else{
if(isset($data[0]))
$data = ["audios" => $data];
$audios = $data["audios"];
$posters = isset($data["posters"]) ? $data["posters"] : null;
$text = isset($data["text"]) ? $data["text"] : null;
};
$html = '';
$audio_text = $text ? $text : "audio";
foreach($audios as $audio)
$html .= ('
<audio title="' . $audio_text . '">
<source src="' . $audio . '" type="' . $this->wmarkdown->get_mime($audio) . '" />
<span data-i18n="multimedia_no_recognized">Formato no reconocido por el navegador.</span>
</audio>
');
return ('
<span data-type="audio" data-status="unloaded" data-error-type="ok" onclick="wmarkdown.multimedia.go(this, event);">
<audio controls data-src="' . base64_encode(json_encode($audios)) . '" data-i="0" onerror="wmarkdown.multimedia.audio_try_next(this, event);">
<span data-i18n="multimedia_no_recognized">Formato no reconocido por el navegador.</span>
</audio>
<noscript>' . $html . '</noscript>
<a href="#" target="_blank"></a>
' . (!empty($posters) ? $this->audio_poster([
"images" => $posters,
"text" => $text
], $multiple) : ($text !== null ? '<span class="text">' . $text . '</span>' : null)) . '
</span>
');
}
public function audios($data){
return preg_replace_callback('/^([\s\t]+)?(\[(([^\\\\\[]+|\\\\(.|[\n\r]))*)\]|[^ ]+)( (\[(([^\\\\\[]+|\\\\(.|[\n\r]))*)\]|[a-z][a-z\d]{2,}\:\/{2}[^ ]+))?( (.+)?)?/im', function($values){
return $this->audio($values[0], true);
}, $data);
}
private static function check($matches, $is){
if(!$matches || count($matches) < 2)
return null;
foreach(is_array($is) ? $is : [$is] as $i)
if(isset($matches[$i]) && $matches[$i])
return $i;
return null;
}
public function embed($links){
if(!$links)
return '';
if(!is_array($links))
$links = preg_split('/[\r\n]+/', "" . $links);
$html = '';
$j = 0;
foreach($links as $link){
if(!($link = trim($link)))
continue;
$j ++;
if(preg_match('/^https?\:\/{2}(www\.)?(youtube\.com\/(embed\/|(((?![\?\&]v\=).)+)?[\?\&]v\=)([^\/\&]+)|youtu\.be\/([^\/\&\?]+))/', $link, $matches) && ($i = self::check($matches, [6, 7])))
$html .= ('
<span data-platform="youtube" data-id="' . $matches[$i] . '" data-status="unmounted">
<noscript>
<iframe
src="https://www.youtube.com/embed/' . $matches[$i] . '"
style="position:absolute;top:0em;left:0em;width:100%;height:100%;"
title="YouTube video player"
frameborder="0"
allow="fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen="allowfullscreen"
mozallowfullscreen="mozallowfullscreen"
msallowfullscreen="msallowfullscreen"
oallowfullscreen="oallowfullscreen"
webkitallowfullscreen="webkitallowfullscreen"
allowfullscreen></iframe>
</noscript>
</span>
');
elseif(preg_match('/^https?\:\/{2}((www|player)\.)?vimeo\.com\/(video\/)?(\d+)/', $link, $matches) && ($i = self::check($matches, [4])))
$html .= ('
<span data-platform="vimeo" data-id="' . $matches[$i] . '" data-status="unmounted">
<noscript>
<iframe
src="https://player.vimeo.com/video/' . $matches[$i] . '"
style="position:absolute;top:0em;left:0em;width:100%;height:100%;"
frameborder="0"
allow="fullscreen; picture-in-picture"
allowfullscreen></iframe>
</noscript>
</span>
');
elseif(preg_match('/^https?\:\/{2}(www\.)?facebook\.com\/((?!\/videos\/).)+\/videos\/(\d+)/', $link, $matches) && ($i = self::check($matches, [3])))
$html .= ('
<span data-platform="facebook" data-id="' . $matches[$i] . '" data-status="unmounted">
<noscript>
<iframe
src="https://www.facebook.com/video.php?v=' . $matches[$i] . '"
style="position:absolute;top:0em;left:0em;width:100%;height:100%;border:none;overflow:hidden;"
scrolling="no"
frameborder="0"
allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share"
allowfullscreen></iframe>
</noscript>
</span>
');
elseif(preg_match('/^https?\:\/{2}((www|player)\.)?twitch\.(com|tv)\/(videos\/|\?video\=)(\d+)/', $link, $matches) && ($i = self::check($matches, [5])))
$html .= ('
<span data-platform="twitch" data-id="' . $matches[$i] . '" data-status="unmounted">
<noscript>
<iframe
src="https://player.twitch.tv/?video=' . $matches[$i] . '&parent=wmarkdown.k3y.pw"
style="position:absolute;top:0em;left:0em;width:100%;height:100%;"
scrolling="no"
frameborder="0"
allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share"
allowfullscreen></iframe>
</noscript>
</span>
');
else
$j --;
};
return '<span data-type="embed" data-links-count="' . count($links) . '">' . $html . '</span>';
}
/*public static function process($wmarkdown, $key, $data, $multiple = null){
return '<div class="multimedia-box" data-multiple="' . (($multiple !== null ? $multiple : $key[strlen($key) - 1] == "s") ? "true" : "false") . '">' . (
$data && method_exists('\WMarkDown\Modules\Multimedia', $key) ?
\call_user_func('\WMarkDown\Modules\Multimedia::' . $key, $wmarkdown, $data) :
''
) . '</div>';
}*/
public function thumbnails($data){
// print_r($data);
return "";
}
public function process($string, $modules, $level){
$method = $this->matches[1][0];
// if($method == "images")
// print_r($this->matches);
// $this->html = self::process($this->wmarkdown, $this->matches[1][0], $this->matches[2][0]);
$this->html = self::multimedia_box($this->matches[2][0] && method_exists($this, $method) ? $this->$method($this->matches[2][0]) : '', $method[strlen($method) - 1] == "s");
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[2][0];
}
};

@ -0,0 +1,27 @@
<?php
namespace WMarkDown\Modules;
class Paragraphs extends \WMarkDown\Abstracts\Modules{
public function get_next_position($string){
if(
$this->more &&
$this->from < 0 &&
$this->more = preg_match('/^((([^\r\n]+)(\r\n|[\r\n])?)+)/m', $string, $this->matches, PREG_OFFSET_CAPTURE)
)
$this->from = $this->matches[0][1];
}
public function process($string, $modules, $level){
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[1][0];
$this->html = '<p>' . \WMarkDown\Modules::format($this->wmarkdown, $this->matches[1][0], ["paragraphs"], $modules)["content"] . '</p>';
}
};

@ -0,0 +1,27 @@
<?php
namespace WMarkDown\Modules;
class Quotes extends \WMarkDown\Abstracts\Modules{
public function get_next_position($string){
if(
$this->more &&
$this->from < 0 &&
$this->more = preg_match('/^((^>+ ?)(([^\r\n]+)(\r\n|[\r\n])?)+)/m', $string, $this->matches, PREG_OFFSET_CAPTURE)
)
$this->from = $this->matches[0][1];
}
public function process($string, $modules, $level){
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[1][0];
$this->html = '<blockquote class="quote">' . \WMarkDown\Modules::format($this->wmarkdown, substr($this->matches[1][0], 1), ["paragraphs"], $modules)["content"] . '</blockquote>';
}
};

@ -0,0 +1,61 @@
<?php
namespace WMarkDown\Modules;
class Tables extends \WMarkDown\Abstracts\Modules{
public function get_next_position($string){
if(
$this->more &&
$this->from < 0 &&
$this->more = preg_match('/\[\!([^\r\n]+)?(([\r\n]+([^\!\n\r]+|\![^\]])*?)*)[\r\n]+\!\]/', $string, $this->matches, PREG_OFFSET_CAPTURE)
)
$this->from = $this->matches[0][1];
}
public function process($string, $modules, $level){
$formatted = \WMarkDown\Modules::format($this->wmarkdown, $data = $this->wmarkdown->load_file($this->matches[1][0]), [], $modules, $modules->menu_level);
$head = '';
$body = '';
$foot = '';
$wmarkdown = $this->wmarkdown;
preg_replace_callback('/^\|([\^_\-\#])?([^\r\n]+)/m', function($values) use(&$head, &$body, &$foot, $wmarkdown, $modules){
$html = '';
$block = in_array($values[1], ["^", "-"]) ? "head" : (in_array($values[1], ["_"]) ? "foot" : (in_array($values[1], ["#"]) ? "both" : "body"));
$tag = $block == "body" ? "d" : "h";
preg_replace_callback('/(\|(\|+)?)?([^\|]+)/', function($cell) use(&$html, $tag, $wmarkdown, $modules){
$html .= '<t' . $tag . ($cell[2] ? ' colspan="' . strlen($cell[1]) . '"' : '') . '>' . \WMarkDown\Modules::format($wmarkdown, trim($cell[3]), ["paragraphs"], $modules)["content"] . '</t' . $tag . '>';
}, $values[2]);
$html = '<tr>' . $html . '</tr>';
if($block == "head")
$head .= $html;
elseif($block == "foot")
$foot .= $html;
elseif($block == "both"){
$head .= $html;
$foot .= $html;
}else
$body .= $html;
}, trim($this->matches[2][0]));
$this->html = '<table' . (strpos($attributes = $this->matches[1][0] ?? '', " class=\"") !== false ? preg_replace('/( class=\"[^"]+)/', "$1 wmd-table", $attributes) : $attributes . ' class="wmd-table"') . '>' . (
($head ? '<thead>' . $head . '</thead>' : '') .
($body ? '<tbody>' . $body . '</tbody>' : '') .
($foot ? '<tfoot>' . $foot . '</tfoot>' : '')
) . '</table>';
$this->length = strlen($this->matches[0][0]);
$this->to = $this->from + $this->length;
$this->content = $this->matches[1][0];
}
};

@ -0,0 +1,229 @@
<?php
namespace WMarkDown\ScriptsAnalyzer;
class CSharp extends \WMarkDown\Abstracts\ScriptsAnalyzer{
private static function get_parameter(&$parameter, $value){
if(preg_match('/^(.+) ([^ ]+)$/', trim($value), $submatches, PREG_OFFSET_CAPTURE)){
$parameter["name"] = $submatches[2][0];
$parameter["type"] = $submatches[1][0];
};
}
private static function get_parameters(&$content, $i = 0){
$parameters = [];
$secure = true;
$security = 0;
$value = "";
$parameter = [];
$ended = false;
while(!$ended && ($secure && $security ++ < 100) && preg_match('/[=,\(\[\{\<>\}\]\)]|("([^\\\\"]+|\\\\.)*"|\'([^\\\\\']+|\\\\.)*\')/', $content, $matches, PREG_OFFSET_CAPTURE)){
switch($matches[0][0]){
case "{":
case "[":
case "(":
case "<":
$value .= substr($content, 0, $matches[0][1] + 1);
$i ++;
break;
case ">":
case ")":
case "]":
case "}":
$value .= substr($content, 0, $matches[0][1]);
if(-- $i < 1){
$ended = true;
if(trim($value)){
if(isset($parameter["name"]))
$parameter["default"] = $value;
else
self::get_parameter($parameter, $value);
$parameters[] = $parameter;
$parameter = [];
$value = "";
};
}else
$value .= $matches[0][0];
break;
case ",":
$value .= substr($content, 0, $matches[0][1]);
if($i > 1)
$value .= ",";
else{
if(isset($parameter["name"]))
$parameter["default"] = $value;
else
self::get_parameter($parameter, $value);
$parameters[] = $parameter;
$parameter = [];
$value = "";
};
break;
case "=":
$value .= substr($content, 0, $matches[0][1]);
if($i > 1)
$value .= "=";
else{
self::get_parameter($parameter, $value);
$value = "";
};
break;
default:
$value .= substr($content, 0, $matches[0][1]) . $matches[1][0];
break;
};
$content = substr($content, $matches[0][1] + strlen($matches[0][0]));
};
return $parameters;
}
private static function get_body(&$content){
$i = 0;
$secure = true;
$security = 0;
$has_body = trim($content)[0] == "{";
$body = "";
$ended = false;
while(!$ended && ($secure && $security ++ < 100) && preg_match('/[\{\}]|("([^\\\\"]+|\\\\.)*"|\'([^\\\\\']+|\\\\.)*\')/', $content, $matches, PREG_OFFSET_CAPTURE)){
switch($matches[0][0]){
case "{":
$i ++;
break;
case "}":
-- $i < 1 && ($ended = true);
break;
};
$body .= substr($content, 0, $matches[0][1]) . $matches[0][0];
$content = substr($content, $matches[0][1] + strlen($matches[0][0]));
};
return $body;
}
private static function remove_blocks(&$content, $i = 0){
while(preg_match('/[\(\[\{<>\}\]\)]/', $content, $matches, PREG_OFFSET_CAPTURE)){
$content = substr($content, $matches[0][1] + strlen($matches[0][0]));
if(in_array($matches[0][0], ["]", "}", ">", ")"])){
if(!-- $i)
break;
}else
$i ++;
};
}
public function analyze($file, $path = null, &$languages = [], $level = 0){
if(!($content = \WMarkDown\ScriptsAnalyzer::get_content($file, $path)))
return;
$wmd_path = $this->parent->get_wmd_path($file, $path);
!isset($languages["c_sharp"]) && ($languages["c_sharp"] = []);
$namespace = "";
$class_name = "";
$secure = true;
$security = [0];
$y = [2, 3, 8, 12];
$data = $this->get_data("cs", $wmd_path = $this->parent->get_wmd_path($file, $path));
$languages["c_sharp"][$i = count($languages["c_sharp"])] = ["path" => $wmd_path, "level" => $level, "methods" => []];
$last_method = null;
$content = preg_replace_callback('/("([^\\\\"]+|\\\\.)*"|\'([^\\\\\']+|\\\\.)*\')|(\/{2}[^\r\n]*|\/\*([^\*]+|[\r\n]+|\*[^\/])*\*\/)|([\r\n]|[\s\t])+/', function($values){
return $values[1] ? $values[1] : ($values[4] ? "" : " ");
}, $content);
while((!$secure || $security[0] ++ < 100) && preg_match('/\b(' .
'namespace ([a-zA-Z\d_]+) ?\{' .
'|((abstract|internal) ){0,2}class ([a-zA-Z0-9_]+)( ?\: ?([a-zA-Z\d_]+, ?)+)? ?[<\{]' .
'|((private|public|protected) )?(~)?([a-zA-Z0-9_]+ ?)\(' .
'|((private|public|protected) )?(static )?((?!(using|static|public|private|protected))[a-zA-Z\d_]+)( ?<|(\[[0-9]*\])? ([a-zA-Z0-9_]+) ?[<\(])' .
')/', $content, $matches, PREG_OFFSET_CAPTURE)){
$content = substr($content, $matches[0][1] + strlen($matches[0][0]));
$parameters = null;
$body = null;
$method = null;
$type = null;
$return = null;
$access = null;
if($matches[$y[0] + 0][0])
$class_name = $namespace = $matches[$y[0] + 0][0];
elseif($matches[$y[1] + 2][0])
$class_name = $namespace . "." . $matches[$y[1] + 2][0];
elseif($matches[$y[2] + 3][0]){
$parameters = self::get_parameters($content, 1);
$body = self::get_body($content);
$method = $class_name . "." . $matches[$y[2] + 3][0];
$access = $matches[$y[2] + 0][0] ? $matches[$y[2] + 0][0] : "public";
$type = $matches[$y[2] + 2][0] ? "destructor" : "constructor";
}elseif($matches[$y[3] + 3][0]){
$diamonds = false;
$return = $matches[$y[3] + 3][0];
$type = $matches[$y[3] + 2][0] ? "estático" : "objeto";
$method = $class_name . ".";
$access = $matches[$y[3] + 1][0] ? $matches[$y[3] + 1][0] : "public";
if(trim($matches[$y[3] + 5][0])[0] == "<"){ // Aún está terminando de procesar el tipado por diamantes.
self::remove_blocks($content, 1);
if(preg_match('/^(\[[0-9]*\])? ([a-zA-Z0-9_]+) ?[<\(]/', $content, $submatches, PREG_OFFSET_CAPTURE)){
$content = substr($content, $submatches[0][1] + strlen($submatches[0][0]));
$diamonds = substr($submatches[0][0], -1) == "<";
$submatches[1][0] && ($return .= $submatches[1][0]);
$method .= $submatches[2][0];
}else{ // Es una variable Ojeto o de clase u otro tipo de elemento no computable.
$content = preg_replace('/^ ?;/', "", $content);
continue; // Rompemos para buscar métodos, clases o constructores.
};
}else{
$diamonds = substr($matches[0][0], -1) == "<";
$matches[$y[3] + 6][0] && ($return .= $matches[$y[3] + 6][0]);
$method .= $matches[$y[3] + 7][0];
};
$diamonds && self::remove_blocks($content, 1);
$parameters = self::get_parameters($content, 1);
$body = self::get_body($content);
};
if($body){
$see = [];
!in_array($method, $languages["c_sharp"][$i]["methods"]) && ($languages["c_sharp"][$i]["methods"][] = $method);
$data = $this->parent->add_method($data, $last_method, [
"access" => $access,
"language_script" => "C#",
"name" => $method,
"type" => $type,
"see" => $see,
"parameters" => $parameters,
"return" => $return,
"hash" => md5($body)
]);
$last_method = $method;
};
};
\WMarkDown::save_file($wmd_path, $data);
}
};

@ -0,0 +1,142 @@
<?php
namespace WMarkDown\ScriptsAnalyzer;
class JS extends \WMarkDown\Abstracts\ScriptsAnalyzer{
private static $language_name = [
"js" => "JavaScript",
"ecma" => "ECMAScript"
];
private static function get_parameters($block){
$parameters = [];
foreach(explode(",", $block) as $parameter)
($parameter = trim($parameter)) && ($parameters[] = ["name" => $parameter]);
return $parameters;
}
public function analyze($file, $path = null, &$languages = [], $level = 0){
if(!($content = \WMarkDown\ScriptsAnalyzer::get_content($file, $path)))
return;
$security = [0];
$class_name = "";
$construct_parameters = [];
$last_method = null;
$class = $this->class;
$data = \WMarkDown::string_variables(file_exists($wmd_path = $this->parent->get_wmd_path($file, $path)) ? file_get_contents($wmd_path) : $this->original_wmd, array_merge([
"subkey_words" => preg_match('/^.+' . $this->common["project"] . '\.([^\/]+)\.(ecma\.)?js\.w\.md$/', $wmd_path) ? preg_replace_callback('/^.+' . $this->common["project"] . '\.([^\/]+)\.(ecma\.)?js\.w\.md$/', function($values){
return substr(preg_replace('/[,\.]+/', ",", preg_replace_callback('/([A-Z]+)?([A-Z][a-z0-9]+)/', function($subvalues){
return ($subvalues[1] ? "," . $subvalues[1] : "") . "," . strtolower($subvalues[2]);
}, $values[1])), 1);
}, $wmd_path) : "main",
"path" => substr($wmd_path, $this->root_l + 8),
"subpath" => substr($wmd_path, $this->root_l + 8, -5),
"file" => preg_replace('/^.+\/([^\/]+)\.w\.md$/', "$1", $wmd_path)
], $this->common));
$language = strpos($wmd_path, ".ecma.") !== false ? "ecma" : "js";
$private_methods = [];
$methods = [];
!isset($languages[$language]) && ($languages[$language] = []);
$languages[$language][$j = count($languages[$language])] = ["path" => $wmd_path, "level" => $level, "methods" => []];
// print_r([$file]);
$content = preg_replace_callback('/("(([^\\\\"]+|\\\\.)*)"|\'(([^\\\\\']+|\\\\.)*)\'|`(([^\\\\`]+|\\\\.)*)`)|([\r\n]|[\s\t]|\/\/[^\r\n]*|\/\*(([\r\n]+|[^\*]+|\*[^\/])*)\*\/)+/', function($values) use($file){
$file == "AnP.Components.Tables.ecma.js" && print_r($values);
return count($values) == 1 || $values[1] ? $values[0] : " ";
}, $content);
while((false || $security[0] ++ < 200) && preg_match('/^([a-zA-Z0-9_\.]+)\s*=\s*function\s*\(([^\(\)]*)\)|\b(this\.|(const|let|var)\s+)([a-zA-Z0-9_]+)\s*=\s*((\(([^\(\)]*)\)|[a-zA-Z0-9_]+)\s*=>|function\(([^\(\)]*)\))/', $content, $matches, PREG_OFFSET_CAPTURE)){
$content = substr($content, $matches[0][1] + strlen($matches[0][0]));
if($matches[1][0]){
$class_name = $matches[1][0];
$construct_parameters = self::get_parameters($matches[2][0]);
}else{
$l = count($matches);
$security[1] = 0;
$i = 0;
$method_access = $matches[4][0] ? "private" : "public";
$method_name = $class_name . "." . $matches[5][0];
$parameters = self::get_parameters($matches[$l > 8 ? 8 : ($l > 7 ? 7 : 6)][0]);
$method_content = "";
$return = null;
$see = [];
$matches[4][0] && ($private_methods[] = $matches[5][0]);
while((false || $security[1] ++ < 100) && preg_match('/("(([^\\\\"]+|\\\\.)*)"|\'(([^\\\\\']+|\\\\.)*)\'|`(([^\\\\`]+|\\\\.)*)`|\/[^\s]([^\\\\\n\r\/]+|\\\\[^\r\n])*\/[igm]{0,3})|[\[\]\{\}\(\),;]/', $content, $submatches, PREG_OFFSET_CAPTURE)){
$ended = false;
switch($submatches[0][0]){
case "(":
case "[":
case "{":
$i ++;
break;
case ")":
case "]":
case "}":
$ended = -- $i < 1;
break;
case ",":
case ";":
$ended = !$i;
break;
};
if($i >= 0){
$method_content .= substr($content, 0, $submatches[0][1]) . $submatches[0][0];
$content = substr($content, $submatches[0][1] + strlen($submatches[0][0]));
};
if($ended)
break;
};
$return = trim($method_content)[0] != "{" ? true : preg_match('/\breturn [^;]+[ ;]*[\};]$/', $method_content);
$methods[] = $method_name;
// Implementamos los métodos dependientes.
preg_replace_callback('/\b((this|' . $this->object . ')\.)?([a-zA-Z0-9_]+)\(/', function($values) use(&$see, $class, $class_name, $methods){
$method = (!$values[2] || $values[2] == "this" ? $class_name : $class) . "." . $values[3];
($values[2] || in_array($method, $methods)) && !in_array($method, $see) && ($see[] = $method);
}, $method_content);
// Métodos privados dependientes.
foreach($private_methods as $method)
preg_match('/\b' . $method . '\b/', $method_content) && !in_array($method = $class_name . "." . $method, $see) && ($see[] = $method);
$languages[$language][$j]["methods"][] = $method_name;
$data = $this->parent->add_method($data, $last_method, [
"access" => $method_access,
"language_script" => self::$language_name[$language],
"name" => $method_name,
"type" => "object",
"see" => $see,
"parameters" => $parameters,
"return" => $return,
"hash" => md5($method_content)
]);
$last_method = $method_name;
};
};
\WMarkDown::save_file($wmd_path, $data);
}
};

@ -0,0 +1,186 @@
<?php
namespace WMarkDown\ScriptsAnalyzer;
class PHP extends \WMarkDown\Abstracts\ScriptsAnalyzer{
private static $custom_types = [
"__construct" => "constructor",
"__destruct" => "destructor",
"__call" => "mágico"
];
public function analyze($file, $path = null, &$languages = [], $level = 0){
if(!($content = \WMarkDown\ScriptsAnalyzer::get_content($file, $path)))
return;
$namespace = "";
$class_name = "";
$class_type = "default";
$security = [0];
$p = [1, 2, 4]; // Cursor position.
$data = \WMarkDown::string_variables(file_exists($wmd_path = $this->parent->get_wmd_path($file, $path)) ? file_get_contents($wmd_path) : $this->original_wmd, array_merge([
"subkey_words" => preg_match('/^.+' . $this->common["project"] . '\.([^\/]+)\.php\.w\.md$/', $wmd_path) ? preg_replace_callback('/^.+' . $this->common["project"] . '\.([^\/]+)\.php\.w\.md$/', function($values){
return substr(preg_replace('/[,\.]+/', ",", preg_replace_callback('/([A-Z]+)?([A-Z][a-z0-9]+)/', function($subvalues){
return ($subvalues[1] ? "," . $subvalues[1] : "") . "," . strtolower($subvalues[2]);
}, $values[1])), 1);
}, $wmd_path) : "main",
"path" => substr($wmd_path, $this->root_l + 8),
"subpath" => substr($wmd_path, $this->root_l + 8, -5),
"file" => preg_replace('/^.+\/([^\/]+)\.w\.md$/', "$1", $wmd_path)
], $this->common));
$last_method = null;
!isset($languages["php"]) && ($languages["php"] = []);
$languages["php"][$x = count($languages["php"])] = ["path" => $wmd_path, "level" => $level, "methods" => []];
// Limpiamos el Script de saltos de línea y comentarios y unificamos los espaciados.
$content = preg_replace_callback('/("(([^\\\\"]+|\\\\.)*)"|\'(([^\\\\\']+|\\\\.)*)\')|([\t\s]|[\r\n]|\/\/[^\r\n]*|\/\*(([\r\n]+|[^\*]+|\*[^\/])*)\*\/)+/', function($values){
return $values[1] ? $values[0] : " ";
}, $content);
// Buscamos espacios de nombres, clases, interfaces, abstracciones y métodos.
while((true || $security[0] ++ < 100) && preg_match('/\b(' .
'namespace ([^; ]+);|' .
'(class|interface) ([a-zA-Z0-9_]+)|' .
'((public|protected|private) )?(static )?function ([a-zA-Z0-9_]+) ?\(' .
')/', $content, $matches, PREG_OFFSET_CAPTURE)){
$l = count($matches);
$content = substr($content, $matches[0][1] + strlen($matches[0][0]));
if($l > $p[2] + 1){ // Método.
$method_access = trim($matches[$p[2] + 1][0]);
$method_name = $matches[$p[2] + 4][0];
$languages["php"][$x]["methods"][] = $method_full_name = $class_name . ($matches[$p[2] + 3][0] ? "::" : "->") . $method_name;
$method_type = isset(self::$custom_types[$method_name]) ? self::$custom_types[$method_name] : ($matches[$p[2] + 3][0] ? "static" : "object");
$parameters = [];
$see = [];
$return = null;
$security[1] = 0;
$security[2] = 0;
if(trim($content)[0] != ")"){ // Verificamos que tiene parámetros.
$i = 1; // Si llega a 0 es que se cerró el bloque de los parámetros.
$default_value = "";
$parameter_name = null;
$parameter_type = null;
$parameter_reference = false;
// Analizamos los parámetros.
while((true || $security[1] ++ < 20) && preg_match('/' .
'(((?![\$\&])[a-zA-Z0-9_])+ )?(\&)?\$([a-zA-Z0-9_]+)|' .
' ?(=) ?(null|true|false|\d+|"(([\\\\"]+|\\\\.)*)"|\'(([\\\\\']+|\\\\.)*)\')?|' .
' ?(,) ?|' .
'([^,\(\)\[\]\{\}"\']+|"(([\\\\"]+|\\\\.)*)"|\'(([\\\\\']+|\\\\.)*)\')|' .
'([\(\[\{])|([\}\]\)])' .
'/', $content, $submatches, PREG_OFFSET_CAPTURE)){
$m = count($submatches);
$content = substr($content, $submatches[0][1] + strlen($submatches[0][0]));
if($m > 17 && $submatches[17][0]) // Apertura de bloque.
$i ++;
else if($m > 18 && $submatches[18][0]){ // Cierre de bloque.
if(!-- $i){
$parameters[] = [
"name" => $parameter_name,
"type" => $parameter_type,
"reference" => $parameter_reference,
"default" => $default_value
];
break;
};
}elseif($m > 11 && $submatches[11][0]){ // Se cierra un parámetro.
if($i > 1)
$default_value = $default_value . $submatches[0][0];
else{
$parameters[] = [
"name" => $parameter_name,
"type" => $parameter_type,
"reference" => $parameter_reference,
"default" => $default_value
];
$default_value = "";
$parameter_name = null;
$parameter_type = null;
$parameter_reference = false;
};
}elseif($submatches[4][0]){ // Se crea un nuevo parámetro.
$parameter_name = ($submatches[3][0] ? "&" : "") . "$" . $submatches[4][0];
$parameter_type = $submatches[1][0] ? $submatches : null;
$parameter_reference = !!$submatches[3][0];
}elseif($m > 6 && $submatches[6][0]) // Valor por defecto.
$default_value = $submatches[6][0];
};
}else // No tiene párametros de entrada.
$content = substr($content, 1);
$i = 0;
$body = "";
// Analizamos bloques de sentencias para analizar inicio y fin del método.
while((true || $security[2] ++ < 40) && preg_match('/[\{\}]/', $content, $submatches, PREG_OFFSET_CAPTURE)){
$end = false;
$body .= substr($content, 0, $submatches[0][1]) . $submatches[0][0];
$content = substr($content, $submatches[0][1] + strlen($submatches[0][0]));
switch($submatches[0][0]){
case "{":
$i ++;
break;
case "}":
$end = !-- $i;
break;
};
if($end)
break;
};
// Analizamos retorno.
$return = preg_match('/\breturn[^;]+[; ]*}$/', $body) ? true : null;
// Buscamos dependencias de sí mismo.
preg_replace_callback('/"(([^\\\\"]+|\\\\.)*)"|\'(([^\\\\\']+|\\\\.)*)\'|(\$this\->([a-zA-Z0-9_]+|\->)+|\\\\?([a-zA-Z0-9_\\\\]+|\\\\)::[a-zA-Z0-9_]+)\(/', function($values) use(&$see, $class_name){
if(count($values) < 6 || ($values[6] && !preg_match('/\$this\->([^\-\(]+\(|wmarkdown\->)/', $values[0])))
return;
!in_array($method = ($method = preg_replace('/^(\$this(\->)|self(\:{2}))/', $class_name . "$2$3", preg_replace('/^\$this\->wmarkdown/', "\\WMarkDown", substr($values[0], 0, -1))))[0] == '\\' ? substr($method, 1) : $method, $see) && ($see[] = $method);
}, $body);
// Añadimos el método al código WMD almacenado en $data tras el último método registrado.
$data = $this->parent->add_method($data, $last_method, [
"access" => $method_access,
"language_script" => "PHP",
"name" => $method_full_name,
"type" => $method_type,
"see" => $see,
"parameters" => $parameters,
"return" => $return,
"hash" => md5($content)
]);
$last_method = $method_full_name;
}elseif($l > $p[1] + 1){ // Clase
$class_type = $matches[$p[1] + 1][0];
$class_name = $namespace . '\\' . $matches[$p[1] + 2][0];
}else // Espacio de nombres.
$class_name = $namespace = $matches[$p[0] + 1][0];
};
// Creamos el fichero WMD del fichero PHP.
\WMarkDown::save_file($wmd_path, $data);
}
};

@ -0,0 +1,19 @@
<?php
namespace WMarkDown\ScriptsAnalyzer;
class Python extends \WMarkDown\Abstracts\ScriptsAnalyzer{
public function analyze($file, $path = null, &$languages = [], $level = 0){
if(!($content = \WMarkDown\ScriptsAnalyzer::get_content($file, $path)))
return;
$wmd_path = $this->parent->get_wmd_path($file, $path);
!isset($languages["python"]) && ($languages["python"] = []);
$languages["python"][$i = count($languages["python"])] = ["path" => $wmd_path, "level" => $level, "methods" => []];
}
};

@ -0,0 +1,17 @@
<?php
namespace WMarkDown\ScriptsAnalyzer;
class SQL extends \WMarkDown\Abstracts\ScriptsAnalyzer{
public function analyze($file, $path = null, &$languages = [], $level = 0){
$wmd_path = $this->parent->get_wmd_path($file, $path);
$language = strpos($wmd_path, ".transact.") ? "transact_sql" : (strpos($wmd_path, ".lite.") ? "sql_lite" : "mariadb");
!isset($languages[$language]) && ($languages[$language] = []);
$languages[$language][$i = count($languages[$language])] = ["path" => $wmd_path, "level" => $level, "methods" => []];
}
};

@ -0,0 +1,137 @@
<?php
namespace WMarkDown;
class Modules{
private $wmarkdown;
private $modules = [];
private $excludes = [];
public $menu_level = 0;
public $html_data = [];
private $documentation_root_length = 0;
public function add($modules, $overwrite = null){
if(!$modules)
return;
if(!is_bool($overwrite))
$overwrite = $this->wmarkdown->settings(["modules_overwrite", "module_overwrite", "overwrite"]);
foreach(is_string($modules) || (is_array($modules) && !isset($modules[0])) ? [$modules] : $modules as $items){
if(!$items)
continue;
if(is_string($items)){
$json = null;
try{
$json = @json_decode($items, true);
}catch(\Exception $exception){};
if(!$json && !($json = @json_decode(file_get_contents($this->wmarkdown->get_root() . $items))))
continue;
$items = $json;
};
if(is_array($items)){
if(isset($items[0]))
$this->add($items);
else
foreach($items as $name => $module)
if(!in_array($name, $this->excludes) && class_exists($module) && ($overwrite || !$this->modules[$name]))
$this->modules[$name] = new $module($this->wmarkdown);
};
};
}
private function __construct($wmarkdown, $excludes){
$this->wmarkdown = $wmarkdown;
$this->excludes = is_array($excludes) ? $excludes : [];
foreach(["default_modules", "modules"] as $modules)
$this->add($this->wmarkdown->settings($modules), true);
}
public function create_menu_item($level, $id, $content){
return ('
<li data-level="' . $level . '" data-deployed="false" data-levels="0" data-parent-deployed="' . ($level == 1 ? "true" : "false") . '" data-id="' . $this->wmarkdown->get_hash() . '">
<span data-icon="deploy" onclick="wmarkdown.deploy(this, event);"></span>
<a href="#' . $id . '" title="' . ($content = preg_replace('/\\\\(.)/', "$1", $content)) . '" target="_self" onclick="wmarkdown.deploy(this, event, true);">' . $content . '</a>
</li>
');
}
private static function create_file_item($url, $title, $file){
return ('
<li>
<a href="' . $url . '" data-icon="link"></a>
<a href="#' . preg_replace('/[^a-z\d]+/', "-", strtolower(substr($file, 1))) . '" title="' . $title . '" target="_self">' . $title . '</a>
</li>
');
}
private function prepare($string, $master, $level){
$results = '';
$menu = '';
$files = '';
$title = $this->wmarkdown->settings("default_title");
$title_root = $this->wmarkdown->settings("title");
if($master === null)
$master = $this;
if(preg_match('/^#+ ?([^\r\n]+)/m', $string, $matches))
$title = $matches[1];
if($title_root)
$title = $title_root . " - " . $title;
while(true && $string){
$first = null;
foreach($this->modules as $name => $module)
if(($position = $module->get_position($string)) !== null && $position >= 0 && ($first === null || $first["position"] > $position))
$first = [
"position" => $position,
"module" => $name
];
if(!$first)
break;
$module = $this->modules[$first["module"]];
$module->process($string, $master, $level);
if($first["module"] == "headers")
$menu .= $this->create_menu_item($this->menu_level = $module->get_level(), $module->get_id(), $module->get_content());
elseif($first["module"] == "includes"){
$menu .= $module->get_menu();
if(!$this->documentation_root_length)
$this->documentation_root_length = strlen($this->wmarkdown->get_documentation_path());
$files .= self::create_file_item(preg_replace('/(\.w)?\.md/', ".html", substr($module->get_content(), $this->documentation_root_length)), trim(preg_replace('/^([^\-]+\-)?(.+)$/', "$2", $module->get_title())), $module->get_content());
};
$results .= substr($string, 0, $module->get_from()) . $module->get_html();
$string = substr($string, $to = $module->get_to());
foreach($this->modules as $name => $block)
if($block->has_more())
$block->set_position($to);
};
$results .= $string;
return array_merge([
"menu" => $menu,
"content" => $results,
"files" => $files,
"title" => $title
], is_array($this->html_data) ? $this->html_data : []);
}
public static function format($wmarkdown, $string, $excludes = [], $master = null, $level = 0){
return (new \WMarkDown\Modules($wmarkdown, $excludes))->prepare($string, $master, $level);
}
};

@ -0,0 +1,127 @@
<?php
namespace WMarkDown;
class SQLite{
private $kmardown;
private $connection = null;
private $connected = false;
private $error = 0;
private function connect(){
if($this->connection)
return;
try{
$this->connection = new \PDO("sqlite:" . $this->wmarkdown->settings("database_file"));
$this->connected = true;
}catch(\Exception $exception){
$this->error |= 1 << 0;
$this->close();
return;
};
$this->connection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$this->connection->beginTransaction();
if(!$this->query("select * from sqlite_master")["tables"][0]){
$this->query(file_get_contents($this->wmarkdown->settings("sql_generator")));
$this->query(file_get_contents($this->wmarkdown->settings("sql_views")));
};
}
public function __construct($wmarkdown){
$this->wmarkdown = $wmarkdown;
$this->connect();
}
private function close(){
if($this->connection){
try{
$this->connection->commit();
}catch(\Exception $exception){
try{
$this->connection->rollback();
}catch(\Exception $exception){
$this->error |= 1 << 3;
};
$this->error |= 1 << 2;
};
}else
$this->error |= 1 << 1;
$this->connection = null;
}
public function __destruct(){
$this->close();
}
public function is_connected(){
return !!$this->connected;
}
public function reconnect(){
$this->close();
$this->connect();
}
public function query($query){
$results = [
"connection_error" => $this->error,
"tables" => [],
"query_error" => 0
];
if(!$this->is_connected()){
$results["query_error"] |= 1 << 1;
return $results;
};
preg_replace_callback('/(([^\;\'"]+|\'(([^\'\\\\]+|\\\\(.|[\r\n]))*)\'|"(([^"\\\\]+|\\\\(.|[\r\n]))*)")+);?/', function($values) use(&$results){
$statement = $this->connection->prepare($values[1]);
$statement->execute();
try{
$table = [];
foreach($statement->fetchAll(\PDO::FETCH_ASSOC) as $new_row){
$row = [];
foreach($new_row as $key => $value){
if(is_string($value)){
if($value[0] == "[" || $value[0] == "{"){
try{
$row[$key] = $this->ur3->json_decode(utf8_encode($value), true);
if(!$row[$key])
$row[$key] = utf8_encode($value);
}catch(\Exception $exception){
$row[$key] = utf8_encode($value);
};
}else
$row[$key] = utf8_encode($value);
}else
$row[$key] = $value;
};
$table[] = $row;
};
$results["tables"][] = $table;
}catch(\Exception $exception){};
}, $query);
return $results;
}
};

@ -0,0 +1,401 @@
<?php
namespace WMarkDown;
class ScriptsAnalyzer{
private $wmarkdown = null;
private $ignore = [];
private $root = null;
private $root_l = 0;
private $original_wmd = null;
private $file_wmd = null;
private $common = [];
private $class = null;
private $object = null;
private $only = null;
private static $types = [
"__construct" => "constructor",
"__init__" => "constructor",
"__destruct" => "destructor",
"__del__" => "destructor",
"object" => "objeto",
"static" => "estático",
"classmethod" => "de clase",
"staticmethod" => "estático"
];
private static $languages = [
"php" => "PHP",
"python" => "Python",
"js" => "JavaScript",
"ecma" => "ECMAScript",
"mariadb" => "MariaDB",
"transact_sql" => "Transact SQL",
"sql_lite" => "SQLite",
"c_sharp" => "C#"
];
private static $classes = [
"php" => "PHP",
"js" => "JS",
"cs" => "CSharp",
"py" => "Python",
"sql" => "SQL"
];
private static $languages_with_overloads = ["C#"];
private static $languages_typed = ["SQLite", "Transact SQL", "MariaDB", "C#"];
private static $languages_with_status = ["PHP", "Python", "SQLite", "Transact SQL", "MariaDB", "C#"];
public $php;
public $js;
public $sql;
public $py;
public $cs;
public function __construct($wmarkdown, $input = []){
$date = date("Ymd");
$this->wmarkdown = $wmarkdown;
$this->ignore = $this->wmarkdown->get_ignore_file_paths();
$this->root_l = strlen($this->root = $this->wmarkdown->get_root());
$this->original_wmd = file_exists($path = $this->wmarkdown->settings("wmd_file")) ? file_get_contents($path) : null;
$this->file_wmd = file_exists($path = $this->wmarkdown->settings("wmd_file_empty")) ? file_get_contents($path) : null;
$this->class = $this->wmarkdown->settings("class");
$this->object = $this->wmarkdown->settings("object");
$this->common = [
"author" => $this->wmarkdown->settings("author"),
"project" => $this->wmarkdown->settings("project"),
"url" => $this->wmarkdown->settings("url"),
"project_author" => $this->wmarkdown->settings("project_author"),
"key_words" => $this->wmarkdown->settings("key_words"),
"language" => $this->wmarkdown->settings("language"),
"logo" => $this->wmarkdown->settings("logo"),
"since" => $date,
"version" => $date
];
$this->only = $this->wmarkdown->settings("only");
}
public static function get_content($file, $path){
return file_exists($subpath = $path . "/" . $file) ? file_get_contents($subpath) : null;
}
public function get_wmd_path($file, $path){
return $this->root . "/WMD/dev" . substr($path . "/" . $file, $this->root_l) . ".w.md";
}
private function write($file, $path, $content){
file_put_contents($content, $this->get_wmd_path($file, $path));
}
private static function get_properties($value){
preg_match('/^\#([^\s\t\\\\]+)((\\\\t)+|[\s\t]+)+([^\s\t\\\\]+)((\\\\t)+|[\s\t]+)+([^\s\t\\\\]+)/', $value, $matches, PREG_OFFSET_CAPTURE);
return [$matches[1][0], $matches[4][0], $matches[7][0]];
}
private static function get_attributes($wdoc){
$see = [];
$language = null;
$access = null;
$parameters = [];
$return = null;
$parameters_full = [];
$hash = null;
preg_replace_callback('/^([\#\@])([^\s]+)\s+([^\r\n]+)/m', function($values) use(&$see, &$language, &$access, &$parameters, &$return, &$parameters_full, &$hash){
if($values[1] == "#"){
if($values[2] == "return")
$return = true;
else{
$parameters[] = $values[2];
$parameters_full[] = $values[0];
};
}else{
switch($values[2]){
case "lang":
$language = $values[3];
break;
case "see":
$see[] = $values[3];
break;
case "access":
$access = $values[3];
break;
case "hash":
$hash = $values[3];
break;
};
};
}, $wdoc);
return [
"see" => $see,
"language" => $language,
"access" => $access,
"parameters" => $parameters,
"return" => $return,
"parameters_full" => $parameters_full,
"hash" => $hash
];
}
private static function set_parameter($parameter){
return "#" . (is_string($parameter) ? $parameter = ["name" => $parameter] : $parameter)["name"] . "\t" . (empty($parameter["type"]) ? "-" : $parameter["type"]) . " " . (empty($parameter["default"]) ? "optional" : "required") . " Parámetro " . $parameter["name"] . "\n";
}
private static function set_return($return){
if(is_bool($return) || is_integer($return))
return $return ? "#return\t- - Retorno.\n" : "";
if(is_string($return))
return $return ? "#return\t" . $return . " - Retorno.\n" : "";
return "";
}
private function update_wdoc(&$wdoc, $current, $new){
$parameters = [];
$l = 0;
$last_parameter = null;
$return = null;
$parameters_final = [];
$m = count($current["parameters"]);
if(preg_match('/^(\#([^\r\n]+)[\r\n]+)+/m', $wdoc, $parameters, PREG_OFFSET_CAPTURE)){
$wdoc = substr($wdoc, 0, $parameters[0][1]) . substr($wdoc, $parameters[0][1] + strlen($parameters[0][0]), -3);
$parameters = preg_split('/(\r\n|[\r\n])/', trim($parameters[0][0]));
$l = count($parameters);
$last_parameter = $parameters[$l - 1];
}else
$wdoc = substr($wdoc, 0, -3);
if($last_parameter && preg_match('/^\#return[\\\\\s\t]/', $last_parameter, $matches, PREG_OFFSET_CAPTURE)){
$return = $last_parameter . "\n";
array_pop($parameters);
$l --;
}else if(isset($new["return"]))
$return = self::set_return($new["return"]);
$wdoc = preg_replace('/^(@see[^\r\n]+[\r\n]+)+/m', "@see\t" . implode("\n@see\t", $new["see"]) . "\n", $wdoc);
$wdoc = preg_replace('/^@access[^\r\n]+/m', "@access\t" . $new["access"], $wdoc);
$wdoc = preg_replace('/^@version[^\r\n]+/m', "@version\t" . $this->common["version"], $wdoc);
if($new["hash"])
$wdoc = preg_match('/^@hash/m', $wdoc) ? preg_replace('/^@hash[^\r\n]+/m', "@hash\t" . $new["hash"], $wdoc) : $wdoc . "\n@hash\t" . $new["hash"];
foreach($new["parameters"] as $i => $parameter)
$parameters_final[$i] = (
$i < $m && $current["parameters"][$i] == $parameter ? $parameters[$i] : (
($j = array_search($parameter, $current["parameters"])) !== false ? $current["parameters"][$j] :
$new["parameters_full"][$i]
));
$wdoc .= (substr($wdoc, -1) == "\n" ? "" : "\n") . (($parameters = implode("\n", $parameters_final)) ? $parameters . "\n" : "") . ($return ? $return : "") . "]]";
return $wdoc;
}
public function add_method($wmd, $last, $variables){
if(isset($variables["see"])){
if(is_array($variables["see"])){
$see = "";
foreach($variables["see"] as $item)
$see .= "@see " . $item . "\n";
$variables["see"] = $see;
};
}else
$variables["see"] = "";
if(isset($variables["parameters"])){
if(is_array($variables["parameters"])){
$parameters = "";
foreach($variables["parameters"] as $parameter)
$parameters .= self::set_parameter($parameter);
$variables["parameters"] = $parameters;
};
}else
$variables["parameters"] = $parameters;
$variables["return"] = isset($variables["return"]) ? self::set_return($variables["return"]) : "";
$method_variables = array_merge($variables, $this->common);
$new_method = \WMarkDown::string_variables("[[wdoc\n" .
"Método {type}.\n" .
"@name {name}\n" .
"{see}" .
"@lang {language_script}\n" .
"@author {author}\n" .
"@since {since}\n" .
"@version {version}\n" .
"@access {access}\n" .
"@hash {hash}\n" .
"{parameters}" .
"{return}" .
"]]", $method_variables);
$pattern = preg_replace('/\\\\{8}/', "\\\\\\\\\\\\\\\\", '/[\r\n]\#\# \[\[plain ' . preg_replace('/([\.\-\:\\\\])/', "\\\\$1", $variables["name"]) . '\]\]((?!(\#\# |\[\[html_data))(.|[\n\r]))+/');
$new = self::get_attributes($new_method);
$language = $new["language"];
if(preg_match($pattern, $wmd, $matches, PREG_OFFSET_CAPTURE)){
$content = "";
$temporary = $matches[0][0];
$done = false;
$overload = in_array($language, self::$languages_with_overloads);
while(preg_match('/([\r\n]\[\[wdoc((?!([\r\n]\]\]))(.|[\r\n]))+[\r\n]\]\])/', $temporary, $submatches, PREG_OFFSET_CAPTURE)){
$current = self::get_attributes($submatches[0][0]);
$wdoc = $submatches[0][0];
$content .= substr($temporary, 0, $submatches[0][1]);
$temporary = substr($temporary, $submatches[0][1] + strlen($submatches[0][0]));
if($overload){
if($done){
$content .= $wdoc;
continue;
};
$ok = true;
foreach($new as $key => $value)
if(!in_array($key, ["parameters_full", "hash"]) && !($ok = $value == $current[$key]))
break;
$content .= ($done = $ok) && $new["hash"] != $current["hash"] ? $this->update_wdoc($wdoc, $current, $new) : $wdoc;
}else{
$same = true;
foreach($new as $key => $value)
if(!in_array($key, ["parameters_full"]) && !($same = $value == $current[$key]))
break;
$content .= $same ? $wdoc : $this->update_wdoc($wdoc, $current, $new);
break;
};
};
$overload && !$done && ($content .= "\n\n" . $new_method);
return substr($wmd, 0, $matches[0][1]) . $content . "\n\n" . substr($wmd, $matches[0][1] + strlen($matches[0][0]));
};
$fragments = $last ? explode("## " . $last . "\n", $wmd) : [$wmd];
$new_method = \WmarkDown::string_variables("## [[plain {name}]]\n\n", $method_variables) . $new_method;
$results = null;
if(count($fragments) > 1)
$results = $fragments[0] . "## [[plain " . $last . "\n" . preg_replace('/^(\#{2} |\[{2}html_data)/m', $new_method . "]]\n\n$1", $fragments[1], 1);
else
$results = preg_replace('/^(\[{2}html_data)/m', $new_method . "\n\n$1", $fragments[0], 1);
return $results;
if(count($fragments) > 1)
return $fragments[0] . "## [[plain " . $last . "\n" . preg_replace('/^(\#{2} |\[{2}html_data)/m', $new_method . "]]\n\n$1", $fragments[1], 1);
return preg_replace('/^(\[{2}html_data)/m', $new_method . "\n\n$1", $fragments[0], 1);
}
private function get_commons(){
return [
"common" => $this->common,
"original_wmd" => $this->original_wmd,
"root" => $this->root,
"root_l" => $this->root_l,
"class" => $this->class,
"object" => $this->object
];
}
private function analyze($class, $object, $file, $path, &$languages, $i){
$class = '\WMarkDown\ScriptsAnalyzer\\' . $class;
!$this->$object && class_exists($class) && ($this->$object = new $class($this->wmarkdown, $this, $this->get_commons()));
$this->$object && $this->$object->analyze($file, $path, $languages, $i);
}
private function build($path, &$languages, $i = 0){
foreach(scandir($path) as $file){
if(preg_match('/^\.{1,2}$/', $file))
continue;
$subpath = $path . "/" . $file;
if(in_array(substr($subpath, $this->root_l), $this->ignore))
continue;
if(is_dir($subpath))
$this->build($subpath, $languages, $i + 1);
elseif(preg_match('/\.(py|php|js|sql|cs)$/', $file, $matches, PREG_OFFSET_CAPTURE) && isset(self::$classes[$matches[1][0]]))
$this->analyze(self::$classes[$matches[1][0]], $matches[1][0], $file, $path, $languages, $i);
};
}
private function write_wmd($path, $content, $variables){
\WMarkDown::save_file($path, \WMarkDown::string_variables($this->file_wmd, array_merge(["content" => $content], $this->common, $variables)));
}
public function update_files(){
$languages = [];
$wmd = "";
if($this->original_wmd){
if($this->only){
foreach(is_array($this->only) ? $this->only : [$this->only] as $path)
$this->build($this->root . $path, $languages);
}else
$this->build($this->root, $languages);
};
foreach($languages as $language => $files){
$index = "# " . self::$languages[$language] . "\n\n";
$wmd .= "\n# " . self::$languages[$language] . "\n";
foreach($files as $file){
$path = substr($file["path"], $this->root_l + 8);
$wmd .= "\n- [" . ($link = ($sublink = "/dev/" . self::$languages[$language]) . "#" . preg_replace('/[^a-z\d]+/i', "-", preg_replace('/^(.+?\/)?([^\/]+)\.w\.md$/', "$2-2", $path))) . " " . preg_replace('/\.w\.md$/', "", $path) . "]";
$index .= (
"[[header_level 0]]\n" .
"[[include /WMD/dev" . $path . "]]\n\n"
);
foreach($file["methods"] as $method)
$wmd .= "\n - [" . $sublink . "#" . preg_replace('/[^a-z\d]+/i', "-", $method) . "-2 " . preg_replace('/([_\\\\])/', "\\\\$1", $method) . "]";
};
$wmd .= "\n";
$this->write_wmd($this->root . "/WMD/dev/" . self::$languages[$language] . "/index.w.md", $index, [
"title" => self::$languages[$language],
"subpath" => "/dev/" . self::$languages[$language] . "/index",
"languages" => strtolower(self::$languages[$language]),
"language_name" => self::$languages[$language]
]);
};
$this->write_wmd($this->root . "/WMD/dev/index.w.md", $wmd, [
"title" => "Código",
"subpath" => "/dev/index",
"languages" => "todo,all",
"language_name" => "Todo"
]);
}
};

@ -0,0 +1,7 @@
<?php
namespace WMarkDown;
class Sessions{
}

@ -0,0 +1,267 @@
<?php
class WMarkDown{
private static $default_settings = [
"default_value" => null,
"nulls" => true,
"default_settings_files" => __DIR__ . "/../JSON/WMarkDown.settings.json"
];
private static $extension_mime = [];
private static $mime_extension = [];
private $custom_settings = [];
private $input;
private $wmarkdown_root = __DIR__ . "/..";
private $root = __DIR__ . "/..";
private $documentation_path = null;
private $html_files = [];
private $html_base = '';
private $public_path = __DIR__ . "/../Public";
private $hashes = [];
private $documentation_path_relative = null;
private $hash_alphabet = null;
private $data_created = [
"files" => [],
"directories" => []
];
private $ignore_script_paths = [];
public static $string_to_pattern_special = [
"\n" => "n",
"\r" => "r",
"\t" => "t"
];
private function get_value($name, $nulls){
foreach([$this->input, $this->custom_settings, self::$default_settings] as $input)
if($input && isset($input[$name]) && ($nulls || $input[$name] !== null))
return $input[$name];
return $this->get_value("default_value");
}
private function default_value($default, $nulls){
if($nulls || $default !== null)
return $default;
return $this->get_value("default_value");
}
public static function is_dictionary($value){
return is_array($value) && array_values($value) != $value;
}
public function settings($names = null, $inputs = null, $default = null, $nulls = null){
if(!is_bool($nulls))
$nulls = $this->get_value("nulls", false);
if(!$names)
return $this->default_value($default, $nulls);
if(!is_array($names))
$names = [$names];
foreach(array_merge($inputs ? (is_dictionary($inputs) ? [$inputs] : (is_array($inputs) ? $inputs : [])) : [], [$this->input, $this->custom_settings, self::$default_settings]) as $input)
if(self::is_dictionary($input))
foreach($names as $name)
if($name && isset($input[$name]) && ($nulls || $input[$name] !== null))
return $input[$name];
return $this->default_value($default, $nulls);
}
public static function string_variables($string, $variables = null, $default = null){
return preg_replace_callback('/\{([^\{\}]+)\}/', function($values) use($variables, $default){
if(!isset($values[1]) || !$values[1])
return $values[0];
if($variables && is_array($variables) && isset($variables[$values[1]]))
return $variables[$values[1]];
if($default !== null)
return $default;
return $values[0];
}, $string);
}
private static function remove_directory($path){
return;
if(file_exists($path)){
if(is_dir($path)){
foreach(scandir($path) as $item){
if(is_dir($file = $path . "/" . $item))
self::remove_directory($file);
else
unlink($file);
};
rmdir($path);
}else
unlink($path);
};
}
private function remove_current_html_files(){
if(!file_exists($files = $this->root . $this->settings("html_files")))
return;
$data = json_decode(file_get_contents($files), true);
foreach($data["files"] as $file)
if(file_exists($file))
unlink($file);
foreach($data["directories"] as $directory)
if(file_exists($directory))
self::remove_directory($directory);
}
public static function save_file($path, $content){
$directory = preg_replace('/^(\/?(([^\/]+\/)*))?\/?[^\/]+$/', "$1", $path);
if(!file_exists($directory))
mkdir($directory, 0777, true);
file_put_contents($path, $content);
}
private function create_html_files($path = ""){
if(file_exists($absolute = $this->documentation_path . $path))
foreach(scandir($absolute) as $file){
if(in_array($file, [".", ".."]))
continue;
if(is_dir($directory = $absolute . "/" . $file))
$this->create_html_files($this->data_created["directories"][] = $path . "/" . $file);
elseif(preg_match('/^(((?!\.w).)+)(\.w)?\.md$/', $file, $matches))
self::save_file(
$this->data_created["files"][] = $this->public_path . $path . "/" . $matches[1] . ".html",
self::string_variables($this->html_base, array_merge(WMarkDown\Modules::format($this, file_get_contents($absolute . "/" . $file))))
);
};
}
private function request($parameters){
header("content-type: application/json");
echo json_encode([
"ok" => true,
"code" => 200,
"content" => null
]);
}
public function get_ignore_file_paths(){return array_merge([], $this->ignore_script_paths);}
public function __construct($input = null){
if(is_array($input))
$this->input = $input;
foreach(["default_settings_files", "settings_files"] as $name)
if($files = $this->settings($name))
foreach(is_array($files) ? $files : [$files] as $path)
if($path && file_exists($path) && ($data = file_get_contents($path)) && ($json = @json_decode($data, true)))
foreach($json as $key => $value)
$this->custom_settings[$key] = $value;
$post_key = $this->settings("variable_name");
if(isset($_POST[$post_key])){
$this->request(json_decode(base64_decode($_POST[$post_key]), true));
return;
};
$this->wmarkdown_root = $this->settings("root");
$this->root = $this->settings("root");
$this->documentation_path_relative = $this->settings("documentation_path");
$this->documentation_path = $this->root . $this->documentation_path_relative;
$this->public_path = $this->root . $this->settings("public_path");
$this->hash_alphabet = $this->settings("hash_alphabet");
foreach($this->settings("ignore_script_paths") ?? [] as $path)
$this->ignore_script_paths[] = $path;
switch($this->settings("action")){
case "update_scripts":
(new \WMarkDown\ScriptsAnalyzer($this))->update_files();
break;
case "build_html":
default:
$this->hash_alphabet = str_split(preg_replace('/[^a-z\d_]/i', "", is_array($this->hash_alphabet) ? implode("", $this->hash_alphabet) : $this->hash_alphabet));
if(file_exists($html_base_path = $this->settings("html_base")))
$this->html_base = file_get_contents($html_base_path);
// $this->remove_current_html_files();
$this->create_html_files();
// print_r([$this->root . $this->settings("html_files"), $this->data_created]);
$this->save_file($this->root . $this->settings("html_files"), json_encode($this->data_created));
break;
};
}
public function get_root(){return "" . $this->root;}
public function get_wmarkdown_root(){return "" . $this->wmarkdown_root;}
public function get_hash(){
$hash;
$l = count($this->hash_alphabet) - 1;
$length = $this->settings("hash_length");
do{
$hash = "";
while(strlen($hash .= $this->hash_alphabet[rand(0, $l)]) < $length);
}while(
in_array($hash, $this->hashes) ||
preg_match('/^\d/', $hash)
);
$this->hashes[] = $hash;
return $hash;
}
public function load_file($path){
foreach(["", $this->root, $this->wmarkdown_root] as $root)
if(file_exists($file = $root . $path) && !is_dir($file))
return file_get_contents($file);
return null;
}
public function get_documentation_path(){return "" . $this->documentation_path_relative;}
public function get_mime($path){
if(!$path || !preg_match('/^.+\.([^\.\/]+)$/', $path, $matches))
return $this->settings("default_mime");
$extension = $matches[1];
if(empty(self::$extension_mime))
self::$extension_mime = json_decode($this->load_file($this->settings("extension_mime_file")), true);
if(isset(self::$extension_mime[$extension]))
return self::$extension_mime[$extension];
return $this->settings("default_mime");
}
public function get_extensions($mime){
if(!$mime)
return $this->settings("default_extension");
if(empty(self::$mime_extension))
self::$mime_extension = json_decode($this->load($this->settings("mime_extension_file")), true);
if(isset(self::$mime_extension[$mime]))
return self::$mime_extension[$mime];
return $this->settings("default_extension");
}
public static function string_to_pattern($string){
return preg_replace_callback('/[\r\n\t\.\-\:\{\[\(\)\]\}\#\@\|\!\?\*\+\^\\\\\/\&\%\~]/', function($values){
return "\\" . (isset(\WMarkDown::$string_to_pattern_special[$values[0]]) ? \WMarkDown::$string_to_pattern_special[$values[0]] : $values);
});
}
};

@ -0,0 +1,32 @@
<?php
foreach([
"WMarkDown",
"WMarkDown.Modules",
"Interfaces/WMarkDown.Interfaces.Modules",
"Interfaces/WMarkDown.Interfaces.ScriptsAnalyzer",
"Abstracts/WMarkDown.Abstracts.Modules",
"Abstracts/WMarkDown.Abstracts.ScriptsAnalyzer",
"Modules/WMarkDown.Modules.Headers",
"Modules/WMarkDown.Modules.Paragraphs",
"Modules/WMarkDown.Modules.FontFormats",
"Modules/WMarkDown.Modules.CodeBlocks",
"Modules/WMarkDown.Modules.Checks",
"Modules/WMarkDown.Modules.Lists",
"Modules/WMarkDown.Modules.Includes",
"Modules/WMarkDown.Modules.CustomParameters",
"Modules/WMarkDown.Modules.Quotes",
"Modules/WMarkDown.Modules.Links",
"Modules/WMarkDown.Modules.Multimedia",
"Modules/WMarkDown.Modules.Escapes",
"Modules/WMarkDown.Modules.Tables",
"WMarkDown.ScriptsAnalyzer",
"ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.PHP",
"ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.JS",
"ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.CSharp",
"ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.Python",
"ScriptsAnalyzer/WMarkDown.ScriptsAnalyzer.SQL",
"Drivers/WMarkDown.PDO.SQLite"
] as $file)
if(file_exists($path = __DIR__ . "/" . $file . ".php"))
include $path;

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

@ -0,0 +1,35 @@
.wmarkdown [data-icon=show]::before{content : "\f06e"; font-family : "FA5FS";}
.wmarkdown [data-icon=hide]::before{content : "\f070"; font-family : "FA5FS";}
.wmarkdown [type=checkbox]+[data-icon=checkbox]::before{content : "\f0c8";}
.wmarkdown [type=checkbox]:checked+[data-icon=checkbox]::before{content : "\f14a";}
.wmarkdown [type=checkbox]:disabled+[data-icon=checkbox]::before{content : "\f0c8"; font-family : "FA5FS"; opacity : .5;}
.wmarkdown [type=radio]+[data-icon=radio]::before{content : "\f111";}
.wmarkdown [type=radio]:checked+[data-icon=radio]::before{content : "\f192";}
.wmarkdown [type=radio]:disabled+[data-icon=radio]::before{content : "\f111"; font-family : "FA5FS"; opacity : .5;}
.wmarkdown [type=checkbox]+[data-icon=tick]::before{content : "\f00d"; font-family : "FA5FS";}
.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";}

@ -0,0 +1,338 @@
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();
};

@ -0,0 +1,299 @@
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();
};

@ -0,0 +1,241 @@
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();
};

@ -0,0 +1,78 @@
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();
};

@ -0,0 +1,711 @@
WMarkDown = function(input){
const self = this,
default_settings = {
nulls : true,
default_value : null,
autostart : true,
object_name : "wmarkdown",
frames_per_second : 24,
timeout : 2000,
preload_timeout : 2000,
preload_wmarkdown : true,
hash_alphabet : "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",
hash_length : 11,
meanings : true,
case_sensitive : false,
autosearch : true,
onload_media_range : 1.4,
ajax_timeout : 2000,
mime_extension_file : "/json/mime_to_extension.json",
extension_mime_file : "/json/extension_to_mime.json",
default_mime : "application/octet-stream",
default_extension : "txt",
variable_name : "wmd",
wmd_file : "wmd.php",
display_view : null,
cells : 40,
item : ".wmarkdown",
size_multiplier : 1,
automultiplier : 1,
default_font_size : 14,
size_range : [.5, 4],
wmd_options : "wmd-options",
wmd_options_position : "header",
screen_sizes : [2560, 1920, 1280, 960, 640],
default_view : "content",
nulls : false,
default_value : null
},
custom_settings = {},
threads = [],
hashes = [],
mime_extension = {},
extension_mime = {},
screen = {
x : 0,
y : 0,
multiplier : 0,
automultiplier : 0,
sizes : []
},
on_ready_events = [];
let started = false,
thread = null,
threads_l = 0,
screen_size_change_thread = null,
last_change = 0,
on_ready_ok = false;
let object_name = this.object_name;
let item_self = this.item_self = document;
let hash_self = this.hash_self;
let dictionary = this.dictionary;
let multimedia = this.multimedia;
let wmonitor = this.wmonitor;
const null_or_undefined = this.null_or_undefined = value => value === undefined || value === null;
const settings_priority = inputs => [].concat(!inputs ? [] : inputs.push ? inputs : [inputs], [input, custom_settings, default_settings]);
const default_value = this.default_value = (_default, nulls) => _default !== undefined && ((typeof nulls == "boolean" ? nulls : settings("nulls", null, false, false)) || _default !== null ? _default : settings("default_value"), null, null, true);
const settings = this.settings = (names, inputs, _default, nulls) => {
if(!names)
return default_value(_default, nulls);
const l = (names.push ? names : names = [names]).length,
m = (inputs = (inputs ? inputs.push ? inputs : [inputs] : []).concat([input, default_settings])).length;
typeof nulls != "boolean" && (nulls = settings("nulls", null, false, false));
for(let j = 0; j < m; j ++)
if(typeof inputs[j] == "object")
for(let i = 0; i < l; i ++)
if(names[i] && inputs[j][names[i]] !== undefined && (nulls || inputs[j][names[i]] !== null))
return inputs[j][names[i]];
return default_value(_default, nulls);
};
const threads_function = () => {
const date = Date.now();
threads.forEach(thread => thread && thread());
if(item_self && date - last_change > 2000){
last_change = date;
const mobile = self.is_mobile();
item_self.setAttribute("data-mobile", mobile);
item_self.setAttribute("data-display-view", mobile ? "mobile" : "pc");
};
};
const threads_add = this.threads_add = method => {
if(typeof method != "function")
return null;
let i = 0;
for(; i < threads_l; i ++)
if(!threads[i])
break;
threads[i] = method;
threads_l = threads.length;
return i;
};
const threads_remove = this.threads_remove = i => !isNaN(i) && threads[i] && (threads[i] = null);
const threads_start = this.threads_start = frames_per_second => thread === null && (thread = setInterval(threads_function, 1000 / (frames_per_second || settings("frames_per_second"))));
const threads_stop = this.threads_stop = () => {
if(thread === null)
return;
clearInterval(thread);
thread = null;
};
const is_dom_item = item => (
typeof HTMLElement == "object" ? item instanceof HTMLElement :
typeof Node == "object" ? item instanceof Node :
item && typeof item === "object" && !isNaN(item.nodeType) && item.nodeName == "string"
);
const preload = this.preload = (selector, callback) => {
if(typeof callback != "function")
return;
if(!selector){
callback(null, false, "NO_SELECTOR");
return;
};
if(is_dom_item(selector)){
callback(selector, false, "OK");
return;
};
if(!selector.substr){
callback(null, false, "NO_DOM_ITEM");
return;
};
let item;
try{
if(item = item_self.querySelector(selector)){
callback(item, false, "OK");
return;
};
}catch(error){
callback(null, false, "BAD_SELECTOR");
return;
};
const date = Date.now(),
timeout = settings(["preload_timeout", "timeout"]);
let preload = threads_add(() => {
if(item = item_self.querySelector(selector)){
threads_remove(preload);
callback(item, true, "OK");
}else if(Date.now() - date > timeout){
threads_remove(preload);
callback(null, true, "TIMEOUT");
};
});
};
const screen_size_change = () => {
if(!item_self)
return;
const multiplier = Number(item_self.getAttribute("data-size-multiplier")),
automultiplier = Number(item_self.getAttribute("data-size-automultiplier"));
if(screen.x == item_self.offsetWidth && screen.y == item_self.offsetHeight && screen.multiplier == multiplier && screen.automultiplier == automultiplier)
return;
screen.x = item_self.offsetWidth;
screen.y = item_self.offsetHeight;
screen.multiplier = multiplier;
screen.automultiplier = automultiplier;
const x_higher = screen.x > screen.y;
let size = "0";
!screen.sizes.some((value, i) => i && !(value > screen.x && (size += " " + i)));
item_self.setAttribute("data-direction", x_higher ? "horizontal" : "vertical");
item_self.style.fontSize = ((
item_self.getAttribute("data-mobile") == "true" ?
screen[x_higher ? "y" : "x"] / Number(item_self.getAttribute("data-cells")) :
item_self.getAttribute("data-font-size")
) * multiplier * automultiplier) + "px";
item_self.setAttribute("data-screen-size", size.trim());
};
const button = this.button = (name, action, default_text) => {
const text = default_text;
return (`
<button type="button" data-i18n="` + name + `" data-i18n-without="true" title="` + text + `" onclick="` + action + `">
<span data-icon="` + name + `"></span>
<span data-i18n="` + name + `">` + text + `</span>
</button>
`);
};
const preload_wmarkdown = this.preload_wmarkdown = callback => {
if(typeof callback != "function")
return;
if(item_self && item_self.classList && item_self.classList.contains("wmarkdown")){
callback(item_self, false, "OK");
return;
};
preload(".wmarkdown", wmarkdown => {
if(!wmarkdown){
callback(null, false, "NO_WMARKDOWN");
return;
};
const mobile = self.is_mobile(),
display_view = settings("display_view"),
multiplier = settings(["size_multiplier", "multiplier"]),
view_menu_items = {
menu : item_self.querySelector(".headers-menu [data-i18n=headers_menu]"),
content : item_self.querySelector("fieldset.content h1,h2,h3,h4,h5,h6"),
files : item_self.querySelector("fieldset.files [data-i18n=files]")
};
item_self = self.item_self = wmarkdown;
item_self.setAttribute("data-mobile", mobile);
item_self.setAttribute("data-display-view", display_view || (mobile ? "mobile" : "pc"));
item_self.setAttribute("data-cells", settings("cells"));
item_self.setAttribute("data-size-multiplier", multiplier);
item_self.setAttribute("data-size-automultiplier", settings(["size_automultiplier", "automultiplier"]));
item_self.setAttribute("data-font-size", settings(["default_font_size", "font_size"]));
item_self.setAttribute("data-view", settings(["default_view", "view"]));
screen_size_change_thread = threads_add(screen_size_change);
with(item_self.querySelector("header").appendChild(document.createElement("div"))){
setAttribute("class", "view-menu buttons group");
for(const key in view_menu_items)
view_menu_items[key] && (innerHTML += button(key, object_name + ".view_show(this, event, '" + key + "');", view_menu_items[key]));
};
preload(settings("item"), () => {
const menu_items = item_self.querySelectorAll(".headers-menu [data-levels]");
menu_items.forEach((item, i) => {
if(!i)
return;
const level = Number(item.getAttribute("data-level")),
j = i - 1;
if(level > Number(menu_items[j].getAttribute("data-level")))
menu_items[j].setAttribute("data-levels", Number(menu_items[j].getAttribute("data-levels")) + 1);
});
});
preload("[data-preload=wmarkdown-preloader]", preloader => {
if(!preloader){
callback(null, false, "NO_PRELOADER");
return;
};
preloader.remove();
setTimeout(() => callback(item_self, true, "OK"), 1000);
const options_class = settings(["wmd_options", "options"]);
let options = item_self.querySelector("." + options_class);
!options && (options = item_self.querySelector(settings(["wmd_options_position", "options_position"])).appendChild(document.createElement("div"))).setAttribute("class", options_class);
if(!options.querySelector("[name=multiplier]")){
const range = settings(["size_range", "multiplier_range"]);
with(options.appendChild(document.createElement("span"))){
setAttribute("class", "multiplier");
innerHTML = (`
<button type="button" data-i18n="less" data-i18n-without="true" title="Less" onclick="` + object_name + `.multiplier_less(this, event);">
<span data-icon="less"></span>
<span data-i18n="less">Less</span>
</button>
<span class="range-box"
onmousedown="` + object_name + `.multiplier_mouse_down(this, event);"
onmouseup="` + object_name + `.multiplier_mouse_up(this, event);"
onmouseout="` + object_name + `.multiplier_mouse_up(this, event);"
onmousemove="` + object_name + `.multiplier_change(this, event);"
>
<span class="range-position"></span>
</span>
</span>
<button type="button" data-i18n="more" data-i18n-without="true" title="More" onclick="` + object_name + `.multiplier_more(this, event);">
<span data-icon="more"></span>
<span data-i18n="more">More</span>
</button>
`);
// setAttribute("data-clicked", false);
// setAttribute("onmousedown", object_name + ".multiplier_mouse_down(this, event);");
// setAttribute("onmouseup", object_name + ".multiplier_mouse_up(this, event);");
// setAttribute("onmouseout", object_name + ".multiplier_mouse_up(this, event);");
// setAttribute("onmousemove", object_name + ".multiplier_change(this, event);");
// innerHTML = `<input type="range" data-i18n="multiplier" data-i18n-without="true" title="Multiplier" onchange="` + object_name + `.multiplier_change(this, event);" readonly name="multiplier" min="` + range[0] + `" max="` + range[1] +`" value="` + multiplier + `" step="any" onmousemove="` + object_name + `.multiplier_change(this, event);" />`;
};
};
});
});
};
this.start = () => {
if(started)
return;
started = true;
threads_start();
screen.sizes = settings("screen_sizes");
preload_wmarkdown(wmarkdown => {
if(!wmarkdown)
return;
const references = {},
logo = wmarkdown.querySelector(".logo img"),
temporary_image = new Image();
logo.setAttribute("data-status", "loading");
temporary_image.src = logo.getAttribute("src");
temporary_image.addEventListener("load", event => logo.parentNode.setAttribute("data-status", "ok"));
temporary_image.addEventListener("error", event => logo.parentNode.setAttribute("data-status", "error"));
try{
typeof mermaid !== undefined && mermaid.initialize({startOnLoad : true});
}catch(no_mermaid){console.error(["MERMAID_ERROR", no_mermaid])};
try{
typeof hljs !== undefined && item_self.querySelectorAll(".code-block:not([data-special=true])>.code-box").forEach(block => block.innerHTML = hljs.highlight(block.innerHTML.replace(/&(gt|lt|amp);/g, (...arguments) => {
return {
amp : "&",
gt : ">",
lt : "<"
}[arguments[1]] || arguments[0];
}), {language : block.parentNode.getAttribute("data-lang")}).value);
}catch(no_highlighter){console.error(["HIGHLIGHTER_ERROR", no_highlighter])};
item_self.querySelectorAll("[type=hidden][data-index]").forEach(reference => references[reference.getAttribute("data-index")] = reference.getAttribute("data-link"));
item_self.querySelectorAll("a[data-index]").forEach(link => link.setAttribute("href", references[link.getAttribute("data-index")] || link.getAttribute("href")));
item_self.querySelectorAll(".code-block[data-lang=maths]>div").forEach(item => {
try{
const formula = MathJax.tex2chtml(item.innerText);
item.innerHTML = '';
item.appendChild(formula);
}catch(no_maths){console.error(["MATHS_ERROR", no_maths])};
});
MathJax.startup.document.clear();
MathJax.startup.document.updateDocument();
item_self.querySelectorAll("fieldset.headers-menu nav a,fieldset.files nav a+a").forEach(anchor => anchor.setAttribute("onclick", (anchor.getAttribute("onclick") || "") + object_name + ".go_to_item(this, event);"))
dictionary && dictionary.start();
multimedia && multimedia.start();
wmonitor && wmonitor.start();
on_ready_ok = true;
on_ready_events.forEach(event => event && event());
});
};
const construct = () => {
object_name = self.object_name = settings("object_name");
WMarkDown.Dictionary && (dictionary = self.dictionary = new WMarkDown.Dictionary(self));
WMarkDown.Multimedia && (multimedia = self.multimedia = new WMarkDown.Multimedia(self));
WMarkDown.WMonitor && (wmonitor = self.wmonitor = new WMarkDown.WMonitor(self));
settings("autostart") && self.start();
};
const get_menu = menu => {
if(menu)
while(menu.tagName && menu.tagName.toLowerCase() != "fieldset" && (menu = menu.parentNode));
return menu || null;
};
const show_menu = (element, visible) => {
const menu = get_menu(element);
menu && document.querySelector(".wmarkdown>.body").setAttribute("data-" + menu.getAttribute("class").split("-")[0] + "-menu-deployed", visible);
};
this.hide_menu = (element, event) => show_menu(element, false);
this.show_menu = (element, event) => show_menu(element, true);
this.block_code_scroll = (element, event) => element.parentNode.querySelector("ol").style.marginTop = -element.scrollTop + "px";
this.deploy = (element, event, deployed) => {
if(!element)
return;
while(!element.hasAttribute("data-level") && (element = element.parentNode));
if(!element)
return;
const level = Number(element.getAttribute("data-level")) + 1,
items = element.parentNode.querySelectorAll("[data-id=" + element.getAttribute("data-id") + "]~li"),
l = items.length;
let parent_deployed = [];
element.setAttribute("data-deployed", typeof deployed == "boolean" ? deployed : deployed = element.getAttribute("data-deployed") == "false");
for(let i = 0; i < l; i ++){
const current_level = Number(items[i].getAttribute("data-level"));
if(current_level < level)
break;
if(deployed){
items[i].setAttribute("data-parent-deployed", current_level == level || parent_deployed[current_level - 1]);
parent_deployed[current_level] = items[i].getAttribute("data-deployed") == "true";
}else
items[i].setAttribute("data-parent-deployed", false);
};
};
this.hash = () => {
let hash,
alphabet = settings("hash_alphabet");
const length = settings("hash_length"),
l = (alphabet.push ? alphabet : alphabet = ("" + alphabet).split("")).length;
do{
hash = "";
while((hash += alphabet[Math.random() * l >> 0]).length < length);
}while(
hashes.includes(hash) ||
/^\d/.test(hash) ||
document.querySelector("." + hash + ",#" + hash + ",[name=" + hash + "]")
);
hashes.push(hash);
return hash;
};
this.utf8_encode = string => unescape(encodeURIComponent(string));
this.utf8_decode = string => decodeURIComponent(escape(string));
const load_file = this.load_file = (url, callback) => {
let ended = false;
const ajax = new XMLHttpRequest(),
timeout = settings(["ajax_timeout", "timeout"]),
end = error => {
if(ended)
return;
ended = true;
typeof callback == "function" && callback(ajax.responseText, ajax.status, ajax.readyState, error == "OK", error);
},
date = Date.now();
ajax.open("get", url, true);
ajax.timeout = timeout;
ajax.onreadystatechange = () => {
if(ended)
return;
if(ajax.readyState == 4)
end("OK");
else if(Date.now() - date > timeout)
end("FORCED_TIMEOUT");
};
ajax.send(null);
ajax.ontimeout = () => end("TIMEOUT");
ajax.onabort = () => end("ABORTED");
ajax.onerror = () => end("ERROR");
return ajax;
};
this.send = (variables, callback) => {
let ended = false;
const ajax = new XMLHttpRequest(),
timeout = settings(["ajax_timeout", "timeout"]),
end = error => {
if(ended)
return;
ended = true;
typeof callback == "function" && callback(ajax.responseText, ajax.status, ajax.readyState, error == "OK", error);
},
date = Date.now();
ajax.open("post", settings("wmd_file"), true);
ajax.timeout = timeout;
ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = () => {
if(ended)
return;
if(ajax.readyState == 4)
end("OK");
else if(Date.now() - date > timeout)
end("FORCED_TIMEOUT");
};
ajax.send(encodeURIComponent(settings("variable_name")) + "=" + btoa(JSON.stringify(variables)));
ajax.ontimeout = () => end("TIMEOUT");
ajax.onabort = () => end("ABORTED");
ajax.onerror = () => end("ERROR");
return ajax;
};
this.get_mime = (path, callback) => {
const extension = path.match(/^.+\.([^\.\/]+)$/);
if(!extension)
return callback(settings("default_mime"));
if(extension_mime.length){
callback(extension_mime[extension[1]] || settings("default_mime"));
return;
};
load_file(settings("extension_mime_file"), data => {
let json = null;
try{
if(json = JSON.parse(data))
for(const extension in json)
extension_mime[extension] = json[extension];
}catch(exception){};
callback(extension_mime[extension[1]] || settings("default_mime"));
});
};
this.get_extensions = (mime, callback) => {
if(!mime)
return callback(settings("default_extension"));
if(mime_extension.length){
callback(mime_extension[mime[1]] || settings("default_extension"));
return;
};
load_file(settings("mime_extension_file"), data => {
let json = null;
try{
if(json = JSON.parse(data))
for(const mime in json)
mime_extension[mime] = json[mime];
}catch(exception){};
callback(mime_extension[mime[1]] || settings("default_extension"));
});
};
// http://detectmobilebrowsers.com
this.is_mobile = () => {
const user_agent = (navigator.userAgent || navigator.vendor || window.opera);
return (
/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(user_agent) ||
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(user_agent.substr(0, 4))
);
};
// this.multiplier_change = (item, event) => item_self.setAttribute("data-size-multiplier", item.value);
this.multiplier_mouse_down = (item, event) => item.setAttribute("data-clicked", true);
this.multiplier_mouse_up = (item, event) => item.setAttribute("data-clicked", false);
const multiplier_delimiter = (position, total) => position < 0 ? 0 : position > total ? total : position;
const multiplier_resize = () => {
const mark = item_self.querySelector(".wmd-options .multiplier .range-position"),
total = item_self.querySelector(".wmd-options .multiplier .range-box").offsetWidth - mark.offsetWidth,
range = settings("size_range"),
position = ((range[1] - range[0]) * (mark.offsetLeft / total)) + range[0];
item_self.setAttribute("data-size-multiplier", ((range[1] - range[0]) * (position / total)) + range[0]);
};
this.multiplier_change = (item, event) => {
if(item.getAttribute("data-clicked") != "true")
return;
const mark = item.querySelector(".range-position"),
total = item.offsetWidth - mark.offsetWidth,
range = settings("size_range");
let position = multiplier_delimiter(event.clientX - event.target.getBoundingClientRect().left - (mark.offsetWidth / 2));
mark.style.left = position + "px";
multiplier_resize();
};
this.multiplier_less = (item, event) => {
const mark = item.parentNode.querySelector(".range-position"),
total = item.offsetWidth - mark.offsetWidth;
let position = multiplier_delimiter(mark.offsetLeft - (total / 10));
mark.style.left = position + "px";
// console.log([position, mark.offsetLeft, (total / 10), mark.style.left, mark.offsetLeft]);
multiplier_resize();
};
this.multiplier_more = (item, event) => {
const mark = item.parentNode.querySelector(".range-position"),
total = item.offsetWidth - mark.offsetWidth;
let position = multiplier_delimiter(mark.offsetLeft + (total / 10));
mark.style.left = position + "px";
// console.log([position, mark.offsetLeft, (total / 10), mark.style.left, mark.offsetLeft]);
multiplier_resize();
};
this.view_show = (item, event, key) => item_self.setAttribute("data-view", key);
this.go_to_item = (item, event) => item_self.setAttribute("data-view", "content");
this.on_ready = callback => {
if(typeof callback != "function")
return null;
if(on_ready_ok){
callback();
return null;
};
let i = 0;
const l = on_ready_events.length;
for(; i < l; i ++)
if(!on_ready_events[i])
break;
on_ready_events[i] = callback;
return i;
};
this.remove_on_ready = i => !isNaN(i) && on_ready_events[i] && (on_ready_events[i] = null);
construct();
};

@ -0,0 +1,63 @@
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();
};

@ -0,0 +1,37 @@
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();
};

@ -0,0 +1,49 @@
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();
};

@ -0,0 +1,10 @@
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 + `>`;
};

@ -0,0 +1,18 @@
<?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: 7.0 KiB

@ -0,0 +1,986 @@
{
"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"
}

@ -0,0 +1,767 @@
{
"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"]
}

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

@ -0,0 +1,329 @@
.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;}
}
}

@ -0,0 +1,487 @@
.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%);}
}
}

@ -0,0 +1,753 @@
.wmarkdown {
display: block;
position: relative;
top: 0em;
left: 0em;
width: 100%;
height: 100%;
overflow: hidden; }
.wmarkdown, .wmarkdown * {
font-family: "Roboto"; }
.wmarkdown [data-visible=false] {
display: none; }
.wmarkdown a[href], .wmarkdown button, .wmarkdown [type=button], .wmarkdown [type=submit], .wmarkdown [type=reset], .wmarkdown [onclick] {
color: #2272D4;
cursor: pointer;
text-decoration: none;
transition-duration: 1s; }
.wmarkdown a[href]:hover, .wmarkdown button:hover, .wmarkdown [type=button]:hover, .wmarkdown [type=submit]:hover, .wmarkdown [type=reset]:hover, .wmarkdown [onclick]:hover {
color: #D47222;
transition-duration: 0.2s; }
.wmarkdown a[href], .wmarkdown [onclick] {
transition-property: color; }
.wmarkdown button, .wmarkdown [type=button], .wmarkdown [type=submit], .wmarkdown [type=reset] {
background-color: #dbe3ec;
border: 0.1em solid #2272D4;
border-radius: 0.3em;
transition-property: color,background-color,border-color; }
.wmarkdown button:hover, .wmarkdown [type=button]:hover, .wmarkdown [type=submit]:hover, .wmarkdown [type=reset]:hover {
background-color: #ece3db;
border-color: #D47222; }
.wmarkdown [data-icon]::before {
margin-right: .4em;
font-family: "FA5FR"; }
.wmarkdown [data-deployed] > [data-icon]::before {
display: inline-block;
width: 1em;
text-align: center; }
.wmarkdown .groups, .wmarkdown .buttons {
display: block; }
.wmarkdown .groups > *, .wmarkdown .buttons > * {
float: left;
border-radius: 0em; }
.wmarkdown .groups > :first-child, .wmarkdown .buttons > :first-child {
border-radius: 0.3em 0em 0em 0.3em; }
.wmarkdown .groups > :last-child, .wmarkdown .buttons > :last-child {
border-radius: 0em 0.3em 0.3em 0em; }
.wmarkdown header, .wmarkdown > .body, .wmarkdown footer, .wmarkdown main {
position: absolute;
left: 0em;
width: 100%;
overflow: hidden;
box-sizing: border-box; }
.wmarkdown header, .wmarkdown footer {
color: #EFEFEF;
background-color: #222; }
.wmarkdown header {
top: 0em;
height: 4em;
z-index: 30; }
.wmarkdown header .logo {
height: 1.6em;
margin: .1em .5em;
font-weight: 900; }
.wmarkdown header .logo a {
display: inline-block;
height: 100%; }
.wmarkdown header .logo a > span {
vertical-align: middle; }
.wmarkdown header .logo .text {
display: inline-block;
margin: .3em 0em; }
.wmarkdown header .logo span[style] {
display: none; }
.wmarkdown header .logo .image {
display: inline-block;
height: 100%; }
.wmarkdown header .logo .image[data-status=loading], .wmarkdown header .logo .image[data-status=error] {
display: none; }
.wmarkdown header .logo img {
width: auto;
height: 100%; }
.wmarkdown header .main-menu {
position: absolute;
top: 2em;
left: 50%;
width: 40em;
margin-left: -20em;
text-align: center; }
.wmarkdown header .main-menu ul {
margin: 0em;
padding: 0em;
list-style-type: none; }
.wmarkdown header .main-menu li {
display: inline-block;
margin: 0em 1em;
white-space: nowrap; }
.wmarkdown header .wmd-options {
display: none;
position: absolute;
top: 0em;
right: 0em;
margin: .2em .8em; }
.wmarkdown header .wmd-options .multiplier {
display: inline-block;
width: 100px;
height: 20px;
background-color: #88F; }
.wmarkdown header .view-menu button {
transition-property: color border-color background-color opacity; }
.wmarkdown header .view-menu button [data-icon]::before {
margin: 0em; }
.wmarkdown header .view-menu button [data-i18n] {
display: none; }
.wmarkdown > .body, .wmarkdown main {
top: 4em;
bottom: 1em;
color: #222;
background-color: #EFEFEF;
z-index: 10; }
.wmarkdown > .body > .headers-menu, .wmarkdown > .body > .content, .wmarkdown > .body > .files, .wmarkdown main > .headers-menu, .wmarkdown main > .content, .wmarkdown main > .files {
position: absolute;
top: 0.5em;
bottom: 0.5em;
box-sizing: border-box; }
.wmarkdown > .body > .content > div, .wmarkdown main > .content > div {
padding: 0em 3em; }
.wmarkdown > .body > .headers-menu nav, .wmarkdown > .body > .files nav, .wmarkdown main > .headers-menu nav, .wmarkdown main > .files nav {
position: absolute;
top: 0em;
left: 0em;
width: 100%;
height: 100%;
padding: 1em;
overflow: auto;
box-sizing: border-box; }
.wmarkdown > .body > .headers-menu ul, .wmarkdown > .body > .files ul, .wmarkdown main > .headers-menu ul, .wmarkdown main > .files ul {
margin: 0em;
padding: 0em;
list-style-type: none; }
.wmarkdown > .body > .headers-menu ul [data-level='1'], .wmarkdown > .body > .files ul [data-level='1'], .wmarkdown main > .headers-menu ul [data-level='1'], .wmarkdown main > .files ul [data-level='1'] {
margin-left: 0em; }
.wmarkdown > .body > .headers-menu ul [data-level='2'], .wmarkdown > .body > .files ul [data-level='2'], .wmarkdown main > .headers-menu ul [data-level='2'], .wmarkdown main > .files ul [data-level='2'] {
margin-left: 2em; }
.wmarkdown > .body > .headers-menu ul [data-level='3'], .wmarkdown > .body > .files ul [data-level='3'], .wmarkdown main > .headers-menu ul [data-level='3'], .wmarkdown main > .files ul [data-level='3'] {
margin-left: 4em; }
.wmarkdown > .body > .headers-menu ul [data-level='4'], .wmarkdown > .body > .files ul [data-level='4'], .wmarkdown main > .headers-menu ul [data-level='4'], .wmarkdown main > .files ul [data-level='4'] {
margin-left: 6em; }
.wmarkdown > .body > .headers-menu ul [data-level='5'], .wmarkdown > .body > .files ul [data-level='5'], .wmarkdown main > .headers-menu ul [data-level='5'], .wmarkdown main > .files ul [data-level='5'] {
margin-left: 8em; }
.wmarkdown > .body > .headers-menu ul [data-level='6'], .wmarkdown > .body > .files ul [data-level='6'], .wmarkdown main > .headers-menu ul [data-level='6'], .wmarkdown main > .files ul [data-level='6'] {
margin-left: 10em; }
.wmarkdown > .body > .headers-menu ul [data-level='7'], .wmarkdown > .body > .files ul [data-level='7'], .wmarkdown main > .headers-menu ul [data-level='7'], .wmarkdown main > .files ul [data-level='7'] {
margin-left: 12em; }
.wmarkdown > .body > .headers-menu li, .wmarkdown > .body > .files li, .wmarkdown main > .headers-menu li, .wmarkdown main > .files li {
white-space: nowrap; }
.wmarkdown > .body > .headers-menu .menu-buttons, .wmarkdown > .body > .files .menu-buttons, .wmarkdown main > .headers-menu .menu-buttons, .wmarkdown main > .files .menu-buttons {
position: absolute;
top: 0em;
margin: .2em;
margin-top: -1.8em; }
.wmarkdown > .body > .headers-menu .menu-buttons [data-icon]::before, .wmarkdown > .body > .files .menu-buttons [data-icon]::before, .wmarkdown main > .headers-menu .menu-buttons [data-icon]::before, .wmarkdown main > .files .menu-buttons [data-icon]::before {
margin: 0em; }
.wmarkdown > .body > .headers-menu .menu-buttons span[data-i18n], .wmarkdown > .body > .files .menu-buttons span[data-i18n], .wmarkdown main > .headers-menu .menu-buttons span[data-i18n], .wmarkdown main > .files .menu-buttons span[data-i18n] {
display: none; }
.wmarkdown > .body > .headers-menu, .wmarkdown main > .headers-menu {
left: 0.5em;
width: 20%; }
.wmarkdown > .body > .headers-menu .menu-buttons, .wmarkdown main > .headers-menu .menu-buttons {
left: 0.5em; }
.wmarkdown > .body[data-headers-menu-deployed=false] > .content, .wmarkdown main[data-headers-menu-deployed=false] > .content {
left: 5%; }
.wmarkdown > .body[data-headers-menu-deployed=false] .headers-menu, .wmarkdown main[data-headers-menu-deployed=false] .headers-menu {
width: auto;
padding-left: 3em; }
.wmarkdown > .body[data-headers-menu-deployed=false] .headers-menu nav, .wmarkdown main[data-headers-menu-deployed=false] .headers-menu nav {
display: none; }
.wmarkdown > .body[data-headers-menu-deployed=false] .headers-menu button[data-i18n=show], .wmarkdown main[data-headers-menu-deployed=false] .headers-menu button[data-i18n=show] {
display: inline-block; }
.wmarkdown > .body[data-headers-menu-deployed=false] .headers-menu button[data-i18n=hide], .wmarkdown main[data-headers-menu-deployed=false] .headers-menu button[data-i18n=hide] {
display: none; }
.wmarkdown > .body[data-files-menu-deployed=false] > .content, .wmarkdown main[data-files-menu-deployed=false] > .content {
right: 5%; }
.wmarkdown > .body[data-files-menu-deployed=false] .files, .wmarkdown main[data-files-menu-deployed=false] .files {
width: auto;
padding-right: 3em; }
.wmarkdown > .body[data-files-menu-deployed=false] .files nav, .wmarkdown main[data-files-menu-deployed=false] .files nav {
display: none; }
.wmarkdown > .body[data-files-menu-deployed=false] .files button[data-i18n=show], .wmarkdown main[data-files-menu-deployed=false] .files button[data-i18n=show] {
display: inline-block; }
.wmarkdown > .body[data-files-menu-deployed=false] .files button[data-i18n=hide], .wmarkdown main[data-files-menu-deployed=false] .files button[data-i18n=hide] {
display: none; }
.wmarkdown > .body[data-headers-menu-deployed=true] .headers-menu button[data-i18n=show], .wmarkdown main[data-headers-menu-deployed=true] .headers-menu button[data-i18n=show] {
display: none; }
.wmarkdown > .body[data-headers-menu-deployed=true] .headers-menu button[data-i18n=hide], .wmarkdown main[data-headers-menu-deployed=true] .headers-menu button[data-i18n=hide] {
display: inline-block; }
.wmarkdown > .body[data-files-menu-deployed=true] .files button[data-i18n=show], .wmarkdown main[data-files-menu-deployed=true] .files button[data-i18n=show] {
display: none; }
.wmarkdown > .body[data-files-menu-deployed=true] .files button[data-i18n=hide], .wmarkdown main[data-files-menu-deployed=true] .files button[data-i18n=hide] {
display: inline-block; }
.wmarkdown > .body > .content, .wmarkdown main > .content {
top: 0em;
left: 25%;
right: 15%;
bottom: 0em;
margin: 0em 1em;
padding: 1em 0em;
overflow: auto; }
.wmarkdown > .body > .content legend, .wmarkdown main > .content legend {
display: none; }
.wmarkdown > .body > .content .padding-bottom, .wmarkdown main > .content .padding-bottom {
height: 1em; }
.wmarkdown > .body > .files, .wmarkdown main > .files {
right: 0.5em;
width: 10%; }
.wmarkdown > .body > .files .menu-buttons, .wmarkdown main > .files .menu-buttons {
right: 0.5em; }
.wmarkdown > .body > fieldset, .wmarkdown main > fieldset {
border: none; }
.wmarkdown > .body > fieldset > legend, .wmarkdown main > fieldset > legend {
display: block;
width: 100%;
border-bottom: 0.14em dotted #898989;
color: #222;
font-weight: 900;
font-size: 1.2em;
text-align: center;
box-sizing: border-box; }
.wmarkdown > .body [data-parent-deployed=false], .wmarkdown main [data-parent-deployed=false] {
display: none; }
.wmarkdown footer {
bottom: 0em;
height: 1em;
z-index: 20; }
.wmarkdown footer .license {
display: block;
width: 100%;
text-align: center;
font-size: .75em;
font-weight: 900; }
.wmarkdown footer .license img {
height: 1.1em;
margin-left: .4em; }
.wmarkdown footer .license > * {
vertical-align: middle; }
.wmarkdown[data-view=menu] .view-menu button[data-i18n=menu] {
opacity: 1; }
.wmarkdown[data-view=menu] .view-menu button[data-i18n=content] {
opacity: .5; }
.wmarkdown[data-view=menu] .view-menu button[data-i18n=files] {
opacity: .5; }
.wmarkdown[data-view=content] .view-menu button[data-i18n=menu] {
opacity: .5; }
.wmarkdown[data-view=content] .view-menu button[data-i18n=content] {
opacity: 1; }
.wmarkdown[data-view=content] .view-menu button[data-i18n=files] {
opacity: .5; }
.wmarkdown[data-view=files] .view-menu button[data-i18n=menu] {
opacity: .5; }
.wmarkdown[data-view=files] .view-menu button[data-i18n=content] {
opacity: .5; }
.wmarkdown[data-view=files] .view-menu button[data-i18n=files] {
opacity: 1; }
.wmarkdown[data-display-view=pc] .view-menu {
display: none; }
.wmarkdown[data-display-view=mobile] .view-menu {
display: block;
position: absolute;
bottom: 0em;
right: 0em;
margin: .3em 1em; }
.wmarkdown[data-display-view=mobile] .headers-menu .menu-buttons, .wmarkdown[data-display-view=mobile] .files .menu-buttons {
display: none; }
.wmarkdown[data-display-view=mobile] fieldset.headers-menu, .wmarkdown[data-display-view=mobile] fieldset.content, .wmarkdown[data-display-view=mobile] fieldset.files {
top: 0em;
left: 0em;
right: auto;
bottom: auto;
margin: 0em;
padding: 0em;
width: 100%;
height: 100%; }
.wmarkdown[data-display-view=mobile][data-view=menu] fieldset.headers-menu {
display: block; }
.wmarkdown[data-display-view=mobile][data-view=menu] fieldset.content {
display: none; }
.wmarkdown[data-display-view=mobile][data-view=menu] fieldset.files {
display: none; }
.wmarkdown[data-display-view=mobile][data-view=content] fieldset.headers-menu {
display: none; }
.wmarkdown[data-display-view=mobile][data-view=content] fieldset.content {
display: block; }
.wmarkdown[data-display-view=mobile][data-view=content] fieldset.files {
display: none; }
.wmarkdown[data-display-view=mobile][data-view=files] fieldset.headers-menu {
display: none; }
.wmarkdown[data-display-view=mobile][data-view=files] fieldset.content {
display: none; }
.wmarkdown[data-display-view=mobile][data-view=files] fieldset.files {
display: block; }
.wmarkdown[data-screen-size~="3"] .main-menu a [data-i18n] {
display: none; }
.wmarkdown[data-screen-size~="3"] header .logo .text {
font-size: .6em; }
.wmarkdown[data-screen-size~="4"] header .logo .text {
display: none; }
.wmarkdown[data-screen-size~="4"] .main-menu li {
margin: 0em .3em; }
.wmarkdown label.checkbox, .wmarkdown label.radio, .wmarkdown label.tick {
display: inline-block;
cursor: pointer; }
.wmarkdown label.checkbox input, .wmarkdown label.radio input, .wmarkdown label.tick input {
display: none; }
.wmarkdown label.checkbox [data-icon]::before, .wmarkdown label.radio [data-icon]::before, .wmarkdown label.tick [data-icon]::before {
margin: 0em; }
.wmarkdown .code-block {
display: block;
position: relative;
width: 80%;
height: auto;
margin-left: 10%;
font-size: .8em;
overflow: hidden;
box-sizing: border-box; }
.wmarkdown .code-block[data-special=false] {
max-height: 35em; }
.wmarkdown .code-block > ul {
position: absolute;
top: 0em;
left: 0em;
margin: 0em;
padding: 0em;
white-space: normal; }
.wmarkdown .code-block > ul li {
display: inline-block;
margin: 0em .2em;
padding: .2em .8em;
background-color: #dbdbdb;
vertical-align: middle;
border: 0.1em solid #898989;
border-radius: .4em; }
.wmarkdown .code-block > ul li [data-i18n] {
display: none;
font-weight: 900; }
.wmarkdown .code-block > ul li [data-i18n]::after {
content: ":";
margin-right: .4em; }
.wmarkdown .code-block .lines {
position: relative;
top: 0em;
left: 0em;
overflow: hidden; }
.wmarkdown .code-block .lines ol {
width: 100%;
margin: 0em;
margin-top: -.3em;
margin-left: 4em;
padding: 0em;
box-sizing: border-box; }
.wmarkdown .code-block .lines ol li:nth-child(2n) {
background-color: #f7f7f7; }
.wmarkdown .code-block .lines ol li:nth-child(2n + 1) {
background-color: #f2f2f2; }
.wmarkdown .code-block .code-box {
position: absolute;
top: 3.2em;
left: 4em;
right: 0em;
max-height: 31em;
overflow: auto; }
.wmarkdown .code-block > div, .wmarkdown .code-block > div * {
font-family: "Roboto Mono"; }
.wmarkdown .header-file-note {
margin-top: 2em;
font-size: .85em;
color: #898989; }
.wmarkdown .header-file-note + h1 {
margin-top: 0em; }
.wmarkdown .header-file-note + h2 {
margin-top: 0em; }
.wmarkdown .header-file-note + h3 {
margin-top: 0em; }
.wmarkdown .header-file-note + h4 {
margin-top: 0em; }
.wmarkdown .header-file-note + h5 {
margin-top: 0em; }
.wmarkdown .header-file-note + h6 {
margin-top: 0em; }
.wmarkdown .data-dictionary-item {
display: inline-block;
position: relative;
border-bottom: 0.1em dotted;
cursor: help; }
.wmarkdown .data-dictionary-item[data-left=true] > .box {
left: auto;
right: 0em; }
.wmarkdown .data-dictionary-item[data-left=false] > .box {
left: 0em;
right: auto; }
.wmarkdown .data-dictionary-item[data-top=false] > .box {
top: auto;
bottom: 1em; }
.wmarkdown .data-dictionary-item[data-top=true] > .box {
top: 1em;
bottom: auto; }
.wmarkdown .data-dictionary-item[data-show=false] > .box {
display: none; }
.wmarkdown .data-dictionary-item .box {
display: block;
position: absolute;
width: 10em;
height: auto;
max-height: 10em;
padding: .5em;
color: #222;
font-weight: 400;
border: 0.1em solid #222;
background-color: rgba(239, 239, 239, 0.95);
overflow: hidden;
box-sizing: border-box;
border-radius: 1em;
box-shadow: 0.1em 0.1em 0.2em #222; }
.wmarkdown .data-dictionary-item .box > span + span {
display: block; }
.wmarkdown .data-dictionary-item .result {
display: none; }
.wmarkdown .data-dictionary-item .description {
height: 6em;
text-align: center;
overflow: auto; }
.wmarkdown .data-dictionary-item .description .paragraph {
display: block; }
.wmarkdown .data-dictionary-item .description .paragraph + span {
margin-top: 1em; }
.wmarkdown .data-dictionary-item .links {
height: 3.1em;
margin: .5em 0em;
text-align: center;
white-space: nowrap;
overflow-x: auto;
overflow-y: hidden; }
.wmarkdown .data-dictionary-item .links > a {
display: inline-block;
width: 2em;
height: 2em;
margin: 0em .5em;
border: 0.1em solid #222;
background-color: #FFF;
background-position: center center;
background-size: cover;
box-sizing: border-box;
border-radius: 1em; }
.wmarkdown .data-dictionary-item [data-site=wikipedia_org], .wmarkdown .data-dictionary-item [data-site=es_wikipedia_org], .wmarkdown .data-dictionary-item [data-site=en_wikipedia_org] {
background-image: url("https://wikipedia.org/static/apple-touch/wikipedia.png"); }
.wmarkdown .data-dictionary-item [data-site=git_a3do_net], .wmarkdown .data-dictionary-item [data-site=git_k3y_pw] {
background-image: url("https://about.gitlab.com/ico/favicon-192x192.png"); }
.wmarkdown .data-dictionary-item [data-site=youtube_com], .wmarkdown .data-dictionary-item [data-site=www_youtube_com] {
background-image: url("https://www.youtube.com/s/desktop/c20c1e6c/img/favicon_144.png"); }
.wmarkdown .data-dictionary-item [data-site=www_mediawiki_org] {
background-image: url("https://www.mediawiki.org/static/apple-touch/mediawiki.png"); }
.wmarkdown .data-dictionary-item [data-site=github_com] {
background-image: url("https://github.com/fluidicon.png"); }
.wmarkdown .data-dictionary-table {
display: block;
position: relative; }
.wmarkdown .data-dictionary-table fieldset {
border: none; }
.wmarkdown .data-dictionary-table legend, .wmarkdown .data-dictionary-table tfoot, .wmarkdown .data-dictionary-table [data-field=i], .wmarkdown .data-dictionary-table [data-field=patterns], .wmarkdown .data-dictionary-table [data-field=results], .wmarkdown .data-dictionary-table .checkbox > [data-i18n] {
display: none; }
.wmarkdown .data-dictionary-table [data-field=urls] li {
word-break: break-all;
word-wrap: break-word; }
.wmarkdown .data-dictionary-table .search {
display: table;
width: 100%;
box-sizing: border-box; }
.wmarkdown .data-dictionary-table .search > * {
display: table-cell;
white-space: nowrap; }
.wmarkdown .data-dictionary-table .search .field, .wmarkdown .data-dictionary-table .search .field input {
width: 100%;
box-sizing: border-box; }
.wmarkdown .data-dictionary-table .search > label {
font-weight: 900; }
.wmarkdown .data-dictionary-table .search > label::after {
content: ":";
margin-right: .4em; }
.wmarkdown .data-dictionary-table th, .wmarkdown .data-dictionary-table td {
width: 40%; }
.wmarkdown .data-dictionary-table th[data-field=words], .wmarkdown .data-dictionary-table td[data-field=words] {
width: 20%; }
.wmarkdown .data-dictionary-table td {
padding: 1em .4em; }
.wmarkdown .data-dictionary-table thead, .wmarkdown .data-dictionary-table tbody {
display: block; }
.wmarkdown .data-dictionary-table thead tr:not([data-visible=false]), .wmarkdown .data-dictionary-table tbody tr:not([data-visible=false]) {
display: table; }
.wmarkdown .data-dictionary-table thead, .wmarkdown .data-dictionary-table thead tr, .wmarkdown .data-dictionary-table tbody, .wmarkdown .data-dictionary-table tbody tr {
width: 100%; }
.wmarkdown .data-dictionary-table tbody {
max-height: 30em;
overflow: auto; }
.wmarkdown .data-dictionary-table tbody > tr:nth-child(2n + 1) > td {
background-color: #f7f7f7; }
.wmarkdown .data-dictionary-table tbody > tr:nth-child(2n) > td {
background-color: #f2f2f2; }
.wmarkdown .data-dictionary-table tbody > tr:hover > td {
background-color: #fbfbfb; }
.wmarkdown .multimedia-box {
display: inline-block;
position: relative;
width: 100%;
text-align: center; }
.wmarkdown .multimedia-box [data-type=image] img, .wmarkdown .multimedia-box [data-type=image] a, .wmarkdown .multimedia-box [data-type=images] img, .wmarkdown .multimedia-box [data-type=images] a {
display: none; }
.wmarkdown .multimedia-box [data-type=image] .image-style, .wmarkdown .multimedia-box [data-type=images] .image-style {
display: inline-block;
width: 100%;
height: 100%;
background-position: center center;
background-repeat: no-repeat;
background-size: contain; }
.wmarkdown .multimedia-box video {
width: auto;
width: 100%; }
.wmarkdown .multimedia-box [data-type=audio] {
min-width: 10em; }
.wmarkdown .multimedia-box [data-type=audio] > .multimedia-box[data-multiple=false] > span {
left: 0em;
width: 100%; }
.wmarkdown .multimedia-box [data-type=audio] a {
display: none; }
.wmarkdown .multimedia-box audio {
position: absolute;
top: 100%;
left: 10%;
width: 80%;
margin-top: -6em;
box-sizing: border-box;
z-index: 20;
opacity: .7; }
.wmarkdown .multimedia-box .text {
position: absolute;
bottom: 0em;
left: 0em;
width: 100%;
margin: .5em;
text-align: center;
text-shadow: 0em 0em 0.1em #222, 0em 0em 0.075em #222, 0em 0em 0.05em #EFEFEF, 0em 0em 0.025em #EFEFEF; }
.wmarkdown .multimedia-box [data-type] {
display: inline-block;
position: relative;
margin: 1em; }
.wmarkdown .multimedia-box[data-multiple=true] > span {
width: 25%;
height: 10em; }
.wmarkdown .multimedia-box[data-multiple=false] > span {
width: 80%;
height: 25em;
text-align: center; }
.wmarkdown .multimedia-box[data-multiple] > [data-links-count] {
height: auto; }
.wmarkdown .multimedia-box[data-multiple] [data-platform] {
display: inline-block;
position: relative;
width: 20em;
height: 10em;
margin: .5em; }
.wmarkdown .multimedia-box .multimedia-box [data-type] {
position: absolute;
top: 0em;
left: 0em;
width: 100%;
height: 100%;
margin: 0em; }
.wmarkdown .multimedia-box [data-platform], .wmarkdown .multimedia-box[data-multiple=true] > [data-type=audio] > .multimedia-box, .wmarkdown .multimedia-box [data-platform] {
width: 20em;
height: 10em; }
.wmarkdown .multimedia-box [data-links-count='1'] > [data-platform], .wmarkdown .multimedia-box[data-multiple=false] > [data-type=audio] > .multimedia-box {
width: 80%;
height: 25em; }
.wmarkdown .links-group {
text-align: center; }
.wmarkdown .links-group a {
display: inline-block;
position: relative;
width: 6em;
height: 7.5em;
margin: 1em;
overflow: hidden;
opacity: .7;
transition-duration: 1s;
transition-property: color,opacity; }
.wmarkdown .links-group a img {
display: none; }
.wmarkdown .links-group a:hover {
opacity: 1;
transition-duration: 0.2s; }
.wmarkdown .links-group a [data-status] {
display: block;
position: absolute;
top: 0em;
left: 0em;
width: 6em;
height: 6em; }
.wmarkdown .links-group a .text {
display: block;
position: absolute;
left: 0em;
bottom: 0em;
width: 100%;
margin: 0em;
text-align: center; }
.wmarkdown .links-group a .image-style {
display: inline-block;
width: 100%;
height: 100%;
background-position: center center;
background-repeat: no-repeat;
background-size: contain; }
.wmarkdown .special-text-i .text {
font-weight: 900; }
.wmarkdown .quote {
padding: 1em;
border: 0.1em dotted #898989; }
.wmarkdown .wdoc {
position: relative;
border: 0.1 0.5em solid #898989;
background-color: #f7f7f7;
border-radius: .4em; }
.wmarkdown .wdoc[data-language] > legend {
display: block;
padding: 0em .4em; }
.wmarkdown .wdoc[data-language] > legend .name {
font-weight: 900; }
.wmarkdown .wdoc[data-language] > legend .language {
margin-left: .4em; }
.wmarkdown .wdoc[data-language] > legend .language::before {
content: "["; }
.wmarkdown .wdoc[data-language] > legend .language::after {
content: "]"; }
.wmarkdown .wdoc .structure .return-type {
margin-right: .4em; }
.wmarkdown .wdoc .structure .return-type::before {
content: "["; }
.wmarkdown .wdoc .structure .return-type::after {
content: "]"; }
.wmarkdown .wdoc .structure .attributes {
display: inline-block;
margin: 0em;
padding: 0em;
list-style-type: none; }
.wmarkdown .wdoc .structure .attributes::before {
content: "("; }
.wmarkdown .wdoc .structure .attributes::after {
content: ")"; }
.wmarkdown .wdoc .structure .attributes .attribute-status, .wmarkdown .wdoc .structure .attributes .attribute-description, .wmarkdown .wdoc .structure .attributes .return {
display: none; }
.wmarkdown .wdoc .structure .attributes .attribute-type {
margin-left: .4em; }
.wmarkdown .wdoc .structure .attributes .attribute-type span {
font-style: italic; }
.wmarkdown .wdoc .structure .attributes .attribute-type::before {
content: "[";
margin-right: .2em; }
.wmarkdown .wdoc .structure .attributes .attribute-type::after {
content: "]";
margin-left: .2em; }
.wmarkdown .wdoc .structure .attribute + span::before {
content: ",";
margin-right: .4em; }
.wmarkdown .wdoc .structure .attribute[data-status=optional]::after {
content: "?"; }
.wmarkdown .wdoc .attribute-type > span + span::before {
content: ",";
margin-right: .4em; }
.wmarkdown .wdoc .attributes-data {
display: table;
width: 100%;
margin-top: 1em;
box-sizing: border-box; }
.wmarkdown .wdoc .attributes-data > span {
display: table-row; }
.wmarkdown .wdoc .attributes-data > span > span {
display: table-cell; }
.wmarkdown .wdoc .attributes-data > .return {
font-style: italic; }
.wmarkdown .wdoc > .data {
margin: 0em;
margin-top: 1em;
padding: 0em;
list-style-type: none; }
.wmarkdown .wdoc > .data li {
padding-bottom: .1em; }
.wmarkdown .wdoc > .data li:hover {
padding-bottom: 0em;
border-bottom: 0.1em dotted #898989; }
.wmarkdown .wdoc > .data li > :first-child {
display: inline-block;
width: 10em;
height: 1.2em;
overflow: hidden; }
.wmarkdown .wdoc > .data li > :first-child::before {
content: "@"; }
.wmarkdown .wdoc > .data li > :last-child {
margin-left: .4em; }
.wmarkdown .wdoc div.attributes-data > * > * {
padding-bottom: .1em; }
.wmarkdown .wdoc div.attributes-data > *:hover > * {
padding-bottom: 0em;
border-bottom: 0.1em dotted #898989; }
.wmarkdown .wdoc [data-with-value=false] {
display: none; }
.wmarkdown .wdoc .deprecated {
font-weight: 900; }
.wmarkdown .wdoc .deprecated::before {
content: "("; }
.wmarkdown .wdoc .deprecated::after {
content: ")";
margin-right: .4em; }
.wmarkdown .wdoc[data-deprecated=true] {
opacity: .6;
transition-duration: 1s;
transition-property: opacity; }
.wmarkdown .wdoc[data-deprecated=true]:hover {
opacity: 1;
transition-duration: 0.2s; }
.wmarkdown .wdoc + .wdoc {
margin-top: 1em; }
.wmarkdown .wmd-table {
width: 80%;
margin-left: 10%;
border-collapse: collapse; }
.wmarkdown .wmd-table {
border: 0.1em solid #222; }
.wmarkdown .wmd-table td, .wmarkdown .wmd-table th {
border: 0.1em solid #898989; }
.wmarkdown .wmd-table tr td {
transition-duration: 1s;
transition-property: background-color; }
.wmarkdown .wmd-table tr:hover td {
transition-duration: 0.2s; }
.wmarkdown .wmd-table tbody > tr:nth-child(2n) > td {
background-color: #f2f2f2; }
.wmarkdown .wmd-table tbody > tr:nth-child(2n + 1) > td {
background-color: #e3e3e3; }
.wmarkdown .wmd-table tbody > tr:hover > td {
background-color: #fafafa; }
.wmarkdown .MathJax {
font-size: 1.3em; }
/*# sourceMappingURL=WMarkDown.css.map */

File diff suppressed because one or more lines are too long

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

@ -0,0 +1 @@
@import "WMarkDown.settings.scss", "WMarkDown.base.scss", "WMarkDown.components.scss", "WMarkDown.external.scss";

@ -0,0 +1,31 @@
// 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;

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

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

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

@ -0,0 +1,34 @@
<?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));

@ -0,0 +1,16 @@
-- Level 2.
drop table if exists Logs;
drop table if exists Traces;
drop table if exists UsersData;
drop table if exists IpsData;
drop table if exists FilesData;
-- Level 1.
drop table if exists Methods;
drop table if exists Sessions;
-- Level 0.
drop table if exists Applications;
drop table if exists Users;
drop table if exists Ips;
drop table if exists Files;

@ -0,0 +1,120 @@
-- Level 0.
create table if not exists Applications(
id integer not null primary key autoincrement,
name varchar(63) not null,
date_in datetime not null default (datetime('now')),
date_out datetime
);
create table if not exists Users(
id integer not null primary key autoincrement,
date_in datetime not null default (datetime('now')),
date_out datetime
);
create table if not exists Ips(
id integer not null primary key autoincrement,
address varchar(39) not null,
date_in datetime not null default (datetime('now')),
date_out datetime
);
create table if not exists Files(
id integer not null primary key autoincrement,
address varchar(39) not null,
date_in datetime not null default (datetime('now')),
date_out datetime
);
-- Level 1.
create table if not exists Methods(
id integer not null primary key autoincrement,
application integer not null,
name varchar(63) not null,
date_in datetime not null default (datetime('now')),
date_out datetime,
constraint methods_ip foreign key(application) references Applications(id)
);
create table if not exists Sessions(
id integer not null primary key autoincrement,
'user' integer not null,
ip integer not null,
date_last datetime not null default (datetime('now')),
date_in datetime not null default (datetime('now')),
date_out datetime,
constraint sessions_user foreign key('user') references Users(id),
constraint sessions_ip foreign key(ip) references Ips(id)
);
-- Level 2.
create table if not exists Logs(
id integer not null primary key autoincrement,
'session' integer,
'method' integer not null,
parameters text not null,
error bigint not null,
date_in datetime not null default (datetime('now')),
date_out datetime,
constraint logs_session foreign key('session') references Sessions(id),
constraint logs_method foreign key('method') references Methods(id)
);
create table if not exists Traces(
id integer not null primary key autoincrement,
'session' integer,
'method' integer not null,
parameters text not null,
error bigint not null,
trace text not null,
message text not null,
date_in datetime not null default (datetime('now')),
date_out datetime,
constraint traces_session foreign key('session') references Sessions(id),
constraint traces_method foreign key('method') references Methods(id)
);
create table if not exists UsersData(
id integer not null primary key autoincrement,
'session' integer,
'method' integer not null,
'user' integer not null,
name varchar(31) not null,
password varchar(255) not null,
accessible boolean not null default false,
deleted datetime,
date_in datetime not null default (datetime('now')),
date_out datetime,
constraint users_session foreign key('session') references Sessions(id),
constraint users_method foreign key('method') references Methods(id),
constraint users_user foreign key('user') references Users(id)
);
create table if not exists IpsData(
id integer not null primary key autoincrement,
'session' integer,
'method' integer not null,
ip integer not null,
address varchar(39) not null,
accessible boolean not null default true,
deleted datetime,
date_in datetime not null default (datetime('now')),
date_out datetime,
constraint ips_session foreign key('session') references Sessions(id),
constraint ips_method foreign key('method') references Methods(id),
constraint ips_ip foreign key(ip) references Ips(id)
);
create table if not exists FilesData(
id integer not null primary key autoincrement,
'session' integer,
'method' integer not null,
file integer not null,
'path' varchar(255) not null,
deleted datetime,
date_in datetime not null default (datetime('now')),
date_out datetime,
constraint files_session foreign key('session') references Sessions(id),
constraint files_method foreign key('method') references Methods(id),
constraint files_file foreign key(file) references Files(id)
);

@ -0,0 +1,117 @@
drop view if exists UsersDataView;
create view UsersDataView as
select * from UsersData where 'user' in (
select id from Users where date_out is null
) and id in (
select max(id) from UsersData where date_out is null group by 'user'
);
drop view if exists IpsDataView;
create view IpsDataView as
select * from IpsData where ip in (
select id from Ips where date_out is null
) and id in (
select max(id) from IpsData where date_out is null group by ip
);
drop view if exists SessionsView;
create view SessionsView as
select
sessions.id as id,
users.'user' as user_id,
users.name as 'user',
users.accessible as user_accesible,
users.deleted as user_deleted,
users.date_in as user_date_in,
ips.ip as ip_id,
ips.address as ip,
ips.accessible as ip_accessible,
ips.deleted as deleted,
ips.date_in as ip_date_in,
sessions.date_last as date_last,
sessions.date_in as date_in,
sessions.date_out as date_out
from Sessions sessions
join UsersDataView users on sessions.'user' = users.'user'
join IpsDataView ips on sessions.ip = ips.ip;
drop view if exists MethodsView;
create view MethodsView as
select
methods.id as id,
applications.id as application_id,
applications.name as application,
methods.name as 'method',
applications.date_in as application_date_in,
methods.date_in as date_in
from Methods methods
join Applications applications on
applications.date_out is null and
methods.application = applications.id and
methods.date_out is null;
drop view if exists LogsView;
create view LogsView as
select
logs.id as id,
sessions.id as session_id,
sessions.user_id as user_id,
sessions.'user' as 'user',
sessions.user_accesible as user_accesible,
sessions.user_deleted as user_deleted,
sessions.user_date_in as user_date_in,
sessions.ip_id as ip_id,
sessions.ip as ip,
sessions.ip_accessible as ip_accessible,
sessions.deleted as session_deleted,
sessions.ip_date_in as ip_date_in,
sessions.date_last as date_last,
sessions.date_in as session_date_in,
sessions.date_out as session_date_out,
methods.id as method_id,
methods.application_id as application_id,
methods.application as application,
methods.'method' as 'method',
methods.application_date_in as application_date_in,
methods.date_in as method_date_in,
logs.parameters as parameters,
logs.error as error,
logs.date_in as date_in,
logs.date_out as date_out
from Logs logs
join MethodsView methods on logs.'method' = methods.id
left join SessionsView sessions on logs.'session' = sessions.id;
drop view if exists TracesView;
create view TracesView as
select
traces.id as id,
sessions.id as session_id,
sessions.user_id as user_id,
sessions.'user' as 'user',
sessions.user_accesible as user_accesible,
sessions.user_deleted as user_deleted,
sessions.user_date_in as user_date_in,
sessions.ip_id as ip_id,
sessions.ip as ip,
sessions.ip_accessible as ip_accessible,
sessions.deleted as session_deleted,
sessions.ip_date_in as ip_date_in,
sessions.date_last as date_last,
sessions.date_in as session_date_in,
sessions.date_out as session_date_out,
methods.id as method_id,
methods.application_id as application_id,
methods.application as application,
methods.'method' as 'method',
methods.application_date_in as application_date_in,
methods.date_in as method_date_in,
traces.parameters as parameters,
traces.error as error,
traces.trace as trace,
traces.message as message,
traces.date_in as date_in,
traces.date_out as date_out
from Traces traces
join MethodsView methods on traces.'method' = methods.id
left join SessionsView sessions on traces.'session' = sessions.id;

@ -0,0 +1 @@
{"files":["\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/bugs.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/dictionary.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/example.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/faq.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/gitlab.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/checks.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/code_blocks.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/custom_parameters.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/font_formats.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/headers.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/links.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/maths.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/mermaid.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/multimedia.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules\/paragraphs.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/modules.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/projects.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/references.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/settings.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/targets.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/doc\/tarsier.html","\/mnt\/d\/git\/WMarkDown\/Public\/es\/index.html","\/mnt\/d\/git\/WMarkDown\/Public\/index.html"],"directories":["\/JSON","\/es","\/es\/doc","\/es\/doc\/modules"]}

@ -0,0 +1,36 @@
[[post_data {
"author" : "KyMAN",
"since" : 20220402,
"version" : 20220402
}]]
# ECMAScript
[[header_level 0]]
[[include /WMD/dev/Public/ecma/WMarkDown.Dictionary.ecma.js.w.md]]
[[header_level 0]]
[[include /WMD/dev/Public/ecma/WMarkDown.Dictionary.old.ecma.js.w.md]]
[[header_level 0]]
[[include /WMD/dev/Public/ecma/WMarkDown.Multimedia.ecma.js.w.md]]
[[header_level 0]]
[[include /WMD/dev/Public/ecma/WMarkDown.WMonitor.ecma.js.w.md]]
[[header_level 0]]
[[include /WMD/dev/Public/ecma/WMarkDown.ecma.js.w.md]]
[[html_data {
"title" : "ECMAScript - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/dev/ECMAScript/index.html",
"author" : "Tarsier,KyMAN",
"since" : 20220402,
"version" : 20220402,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,ecmascript",
"description" : "Parte ECMAScript del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,164 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Abstracts.Modules.php
```txt
/PHP/Abstracts/WMarkDown.Abstracts.Modules.php
```
## [[plain WMarkDown\Abstracts\Modules->__construct]]
[[wdoc
Método constructor.
@name WMarkDown\Abstracts\Modules->__construct
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 2d43277d1f2b7ab25c2db22973971d58
#$wmarkdown - optional Parámetro $wmarkdown
]]
## [[plain WMarkDown\Abstracts\Modules->reset]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\Modules->reset
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 5f82d3d60a4d86451919b358959747d8
]]
## [[plain WMarkDown\Abstracts\Modules->set_position]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\Modules->set_position
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 89addabe4af4916310567126df002b75
#$new_position - optional Parámetro $new_position
]]
## [[plain WMarkDown\Abstracts\Modules->get_position]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\Modules->get_position
@see WMarkDown\Abstracts\Modules->get_next_position
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash d7305b2bfc261efbb7759c8f6296a8f5
#$string - optional Parámetro $string
#return - - Retorno.
]]
## [[plain WMarkDown\Abstracts\Modules->has_more]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\Modules->has_more
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 79e93635e3b869086b808728fa4618db
#return - - Retorno.
]]
## [[plain WMarkDown\Abstracts\Modules->get_from]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\Modules->get_from
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 1e994006c697f945d7b9835b509105ef
#return - - Retorno.
]]
## [[plain WMarkDown\Abstracts\Modules->get_length]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\Modules->get_length
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 3176996f77eb83b011fa348b54d317ed
#return - - Retorno.
]]
## [[plain WMarkDown\Abstracts\Modules->get_to]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\Modules->get_to
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 5983662edccadcb09ce30f9232bcf9f0
#return - - Retorno.
]]
## [[plain WMarkDown\Abstracts\Modules->get_content]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\Modules->get_content
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash acde1565e22267a19bfa1eb13dcf2d5d
#return - - Retorno.
]]
## [[plain WMarkDown\Abstracts\Modules->get_html]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\Modules->get_html
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 67308d46b9e9c8e3bd3c7083a70a9ceb
#return - - Retorno.
]]
[[html_data {
"title" : "WMarkDown.Abstracts.Modules.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Abstracts/WMarkDown.Abstracts.Modules.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,abstracts,modules",
"description" : "WMarkDown.Abstracts.Modules.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,55 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Abstracts.ScriptsAnalyzer.php
```txt
/PHP/Abstracts/WMarkDown.Abstracts.ScriptsAnalyzer.php
```
## [[plain WMarkDown\Abstracts\ScriptsAnalyzer->__construct]]
[[wdoc
Método constructor.
@name WMarkDown\Abstracts\ScriptsAnalyzer->__construct
@lang PHP
@author KyMAN
@since 20211220
@version 20220329
@access public
@hash 0bbc17c8e8a4fd59f816a170eaa052c9
#$wmarkdown - optional Parámetro $wmarkdown
#$parent - optional Parámetro $parent
#$input - required Parámetro $input
]]
## [[plain WMarkDown\Abstracts\ScriptsAnalyzer->get_data]]
[[wdoc
Método object.
@name WMarkDown\Abstracts\ScriptsAnalyzer->get_data
@see WMarkDown::string_variables
@lang PHP
@author KyMAN
@since 20220329
@version 20220329
@access protected
@hash 80cf030f90df75f48f6f7f9671062c30
#$extension - optional Parámetro $extension
#$wmd_path - optional Parámetro $wmd_path
]]
[[html_data {
"title" : "WMarkDown.Abstracts.ScriptsAnalyzer.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Abstracts/WMarkDown.Abstracts.ScriptsAnalyzer.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,abstracts,scripts,analyzer",
"description" : "WMarkDown.Abstracts.ScriptsAnalyzer.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,115 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.PDO.SQLite.php
```txt
/PHP/Drivers/WMarkDown.PDO.SQLite.php
```
## [[plain WMarkDown\PDO\SQLite->close]]
[[wdoc
Método object.
@name WMarkDown\PDO\SQLite->close
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access private
@hash 5f8aa97596f575f3d6bb429221445312
]]
## [[plain WMarkDown\PDO\SQLite->connect]]
[[wdoc
Método object.
@name WMarkDown\PDO\SQLite->connect
@see WMarkDown::string_variables
@see WMarkDown->settings
@see WMarkDown\PDO\SQLite->close
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access private
@hash d0aa13ff85ad69789823f9b972592a9c
]]
## [[plain WMarkDown\PDO\SQLite->__construct]]
[[wdoc
Método constructor.
@name WMarkDown\PDO\SQLite->__construct
@see WMarkDown->settings
@see WMarkDown\PDO\SQLite->connect
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 3bd6cb720112886c353b06ac84a3f7ea
#$wmarkdown - optional Parámetro $wmarkdown
#$input - required Parámetro $input
]]
## [[plain WMarkDown\PDO\SQLite->__destruct]]
[[wdoc
Método destructor.
@name WMarkDown\PDO\SQLite->__destruct
@see WMarkDown\PDO\SQLite->close
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 9f851c6b4bbd8c7e10094f1a091740fa
]]
## [[plain WMarkDown\PDO\SQLite::query_variables]]
[[wdoc
Método static.
@name WMarkDown\PDO\SQLite::query_variables
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash a5ccc34b70d690defd98cbe3ef0fb34d
#$query - optional Parámetro $query
#$variables - optional Parámetro $variables
]]
## [[plain WMarkDown\PDO\SQLite->query]]
[[wdoc
Método object.
@name WMarkDown\PDO\SQLite->query
@see WMarkDown\PDO\SQLite->connect
@see WMarkDown\PDO\SQLite::query_variables
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 3149e48366e2cde626334831bd6f8bd5
#$query - optional Parámetro $query
#$input - required Parámetro $input
]]
[[html_data {
"title" : "WMarkDown.PDO.SQLite.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Drivers/WMarkDown.PDO.SQLite.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,DO,SQ,lite",
"description" : "WMarkDown.PDO.SQLite.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,37 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Interfaces.Modules.php
```txt
/PHP/Interfaces/WMarkDown.Interfaces.Modules.php
```
## [[plain WMarkDown\Interfaces\Modules->get_next_position]]
[[wdoc
Método object.
@name WMarkDown\Interfaces\Modules->get_next_position
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 3149e48366e2cde626334831bd6f8bd5
#$string - optional Parámetro $string
]]
[[html_data {
"title" : "WMarkDown.Interfaces.Modules.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Interfaces/WMarkDown.Interfaces.Modules.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,interfaces,modules",
"description" : "WMarkDown.Interfaces.Modules.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,40 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Interfaces.ScriptsAnalyzer.php
```txt
/PHP/Interfaces/WMarkDown.Interfaces.ScriptsAnalyzer.php
```
## [[plain WMarkDown\Interfaces\ScriptsAnalyzer->analyze]]
[[wdoc
Método object.
@name WMarkDown\Interfaces\ScriptsAnalyzer->analyze
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 3149e48366e2cde626334831bd6f8bd5
#$file - optional Parámetro $file
#$path - required Parámetro $path
#&$languages - optional Parámetro &$languages
#$level - optional Parámetro $level
]]
[[html_data {
"title" : "WMarkDown.Interfaces.ScriptsAnalyzer.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Interfaces/WMarkDown.Interfaces.ScriptsAnalyzer.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,interfaces,scripts,analyzer",
"description" : "WMarkDown.Interfaces.ScriptsAnalyzer.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,54 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Modules.Checks.php
```txt
/PHP/Modules/WMarkDown.Modules.Checks.php
```
## [[plain WMarkDown\Modules\Checks->get_next_position]]
[[wdoc
Método object.
@name WMarkDown\Modules\Checks->get_next_position
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 1bf1d56828eb6f3e7d9ea8eabe8eed2a
#$string - optional Parámetro $string
]]
## [[plain WMarkDown\Modules\Checks->process]]
[[wdoc
Método object.
@name WMarkDown\Modules\Checks->process
@see WMarkDown->get_hash
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 3149e48366e2cde626334831bd6f8bd5
#$string - optional Parámetro $string
#$modules - optional Parámetro $modules
#$level - optional Parámetro $level
]]
[[html_data {
"title" : "WMarkDown.Modules.Checks.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Modules/WMarkDown.Modules.Checks.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,modules,checks",
"description" : "WMarkDown.Modules.Checks.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,55 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Modules.CodeBlocks.php
```txt
/PHP/Modules/WMarkDown.Modules.CodeBlocks.php
```
## [[plain WMarkDown\Modules\CodeBlocks->get_next_position]]
[[wdoc
Método object.
@name WMarkDown\Modules\CodeBlocks->get_next_position
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 006dc1c9f8ae3ccf78ef52de6b756c5b
#$string - optional Parámetro $string
]]
## [[plain WMarkDown\Modules\CodeBlocks->process]]
[[wdoc
Método object.
@name WMarkDown\Modules\CodeBlocks->process
@see WMarkDown->settings
@see WMarkDown->string_variables
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 80cf030f90df75f48f6f7f9671062c30
#$string - optional Parámetro $string
#$modules - optional Parámetro $modules
#$level - optional Parámetro $level
]]
[[html_data {
"title" : "WMarkDown.Modules.CodeBlocks.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Modules/WMarkDown.Modules.CodeBlocks.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,modules,code,blocks",
"description" : "WMarkDown.Modules.CodeBlocks.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,97 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Modules.CustomParameters.php
```txt
/PHP/Modules/WMarkDown.Modules.CustomParameters.php
```
## [[plain WMarkDown\Modules\CustomParameters->get_next_position]]
[[wdoc
Método object.
@name WMarkDown\Modules\CustomParameters->get_next_position
@lang PHP
@author KyMAN
@since 20211220
@version 20220329
@access public
@hash fbb5dc26687f441e25a5af5de646d522
#$string - optional Parámetro $string
]]
## [[plain WMarkDown\Modules\CustomParameters->process]]
[[wdoc
Método object.
@name WMarkDown\Modules\CustomParameters->process
@see WMarkDown::string_variables
@see WMarkDown\Modules::format
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash ab51b9f064a1fe85000ecfd6fba5b66d
#$string - optional Parámetro $string
#$modules - optional Parámetro $modules
#$level - optional Parámetro $level
]]
## [[plain WMarkDown\Modules\CustomParameters->get_menu]]
[[wdoc
Método object.
@name WMarkDown\Modules\CustomParameters->get_menu
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 9d2f52569f7c1268194a9cf96134a2fc
#return - - Retorno.
]]
## [[plain WMarkDown\Modules\CustomParameters->get_title]]
[[wdoc
Método object.
@name WMarkDown\Modules\CustomParameters->get_title
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 927086813ae7fd266774bc8b2d62300a
#return - - Retorno.
]]
## [[plain WMarkDown\Modules\CustomParameters->get_order]]
[[wdoc
Método object.
@name WMarkDown\Modules\CustomParameters->get_order
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 80cf030f90df75f48f6f7f9671062c30
#return - - Retorno.
]]
[[html_data {
"title" : "WMarkDown.Modules.CustomParameters.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Modules/WMarkDown.Modules.CustomParameters.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,modules,custom,parameters",
"description" : "WMarkDown.Modules.CustomParameters.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,53 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Modules.Escapes.php
```txt
/PHP/Modules/WMarkDown.Modules.Escapes.php
```
## [[plain WMarkDown\Modules\Escapes->get_next_position]]
[[wdoc
Método object.
@name WMarkDown\Modules\Escapes->get_next_position
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 92d5dfbb743b4c5c78d011af9a9fcb95
#$string - optional Parámetro $string
]]
## [[plain WMarkDown\Modules\Escapes->process]]
[[wdoc
Método object.
@name WMarkDown\Modules\Escapes->process
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 80cf030f90df75f48f6f7f9671062c30
#$string - optional Parámetro $string
#$modules - optional Parámetro $modules
#$level - optional Parámetro $level
]]
[[html_data {
"title" : "WMarkDown.Modules.Escapes.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Modules/WMarkDown.Modules.Escapes.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,modules,escapes",
"description" : "WMarkDown.Modules.Escapes.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,54 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Modules.FontFormats.php
```txt
/PHP/Modules/WMarkDown.Modules.FontFormats.php
```
## [[plain WMarkDown\Modules\FontFormats->get_next_position]]
[[wdoc
Método object.
@name WMarkDown\Modules\FontFormats->get_next_position
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 58007fe84df88460b7f678d1251bdc2c
#$string - optional Parámetro $string
]]
## [[plain WMarkDown\Modules\FontFormats->process]]
[[wdoc
Método object.
@name WMarkDown\Modules\FontFormats->process
@see WMarkDown\Modules::format
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 80cf030f90df75f48f6f7f9671062c30
#$string - optional Parámetro $string
#$modules - optional Parámetro $modules
#$level - optional Parámetro $level
]]
[[html_data {
"title" : "WMarkDown.Modules.FontFormats.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Modules/WMarkDown.Modules.FontFormats.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,modules,font,formats",
"description" : "WMarkDown.Modules.FontFormats.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,98 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Modules.Headers.php
```txt
/PHP/Modules/WMarkDown.Modules.Headers.php
```
## [[plain WMarkDown\Modules\Headers::id]]
[[wdoc
Método static.
@name WMarkDown\Modules\Headers::id
@lang PHP
@author KyMAN
@since 20211220
@version 20220329
@access public
@hash c09ae0b210bf75b78a479db0c6095b7c
#$text - optional Parámetro $text
#return - - Retorno.
]]
## [[plain WMarkDown\Modules\Headers->get_next_position]]
[[wdoc
Método object.
@name WMarkDown\Modules\Headers->get_next_position
@lang PHP
@author KyMAN
@since 20211220
@version 20220329
@access public
@hash e35db94096d6575b2b8b72d6b6d65e4a
#$string - optional Parámetro $string
]]
## [[plain WMarkDown\Modules\Headers->process]]
[[wdoc
Método object.
@name WMarkDown\Modules\Headers->process
@see WMarkDown\Modules::format
@see WMarkDown\Modules\Headers::id
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 7c61a5cff2595fb2fe3d2595d2a7aaeb
#$string - optional Parámetro $string
#$modules - optional Parámetro $modules
#$level - optional Parámetro $level
]]
## [[plain WMarkDown\Modules\Headers->get_id]]
[[wdoc
Método object.
@name WMarkDown\Modules\Headers->get_id
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash ed5d32d71c33546a5e0cce942f6e16a6
#return - - Retorno.
]]
## [[plain WMarkDown\Modules\Headers->get_level]]
[[wdoc
Método object.
@name WMarkDown\Modules\Headers->get_level
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 67308d46b9e9c8e3bd3c7083a70a9ceb
#return - - Retorno.
]]
[[html_data {
"title" : "WMarkDown.Modules.Headers.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Modules/WMarkDown.Modules.Headers.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,modules,headers",
"description" : "WMarkDown.Modules.Headers.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

@ -0,0 +1,83 @@
[[post_data {
"author" : "KyMAN",
"since" : 20211220,
"version" : 20211220
}]]
# WMarkDown.Modules.Includes.php
```txt
/PHP/Modules/WMarkDown.Modules.Includes.php
```
## [[plain WMarkDown\Modules\Includes->get_next_position]]
[[wdoc
Método object.
@name WMarkDown\Modules\Includes->get_next_position
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 032e5f8a37b93e6c9edc645891e5a0cf
#$string - optional Parámetro $string
]]
## [[plain WMarkDown\Modules\Includes->process]]
[[wdoc
Método object.
@name WMarkDown\Modules\Includes->process
@see WMarkDown\Modules::format
@see WMarkDown->load_file
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 2319aae9e652048a15f227fae01c9085
#$string - optional Parámetro $string
#$modules - optional Parámetro $modules
#$level - optional Parámetro $level
]]
## [[plain WMarkDown\Modules\Includes->get_menu]]
[[wdoc
Método object.
@name WMarkDown\Modules\Includes->get_menu
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash cc1d018ac317b53c07b4493072971d87
#return - - Retorno.
]]
## [[plain WMarkDown\Modules\Includes->get_title]]
[[wdoc
Método object.
@name WMarkDown\Modules\Includes->get_title
@lang PHP
@author KyMAN
@since 20211220
@version 20211220
@access public
@hash 80cf030f90df75f48f6f7f9671062c30
#return - - Retorno.
]]
[[html_data {
"title" : "WMarkDown.Modules.Includes.php - WMarkDown",
"url" : "https://wmarkdown.k3y.pw/PHP/Modules/WMarkDown.Modules.Includes.php.html",
"author" : "Tarsier,KyMAN",
"since" : 20211220,
"version" : 20211220,
"key_words" : "Whalers,MarkDown,MediaWiki,WMarkDown,documentación,developt,desarrollo,programación,modules,includes",
"description" : "WMarkDown.Modules.Includes.php del WMarkDown.",
"project" : "WMarkDown",
"logo" : "https://wmarkdown.k3y.pw/images/wmarkdown.png",
"language" : "es"
}]]

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save