feat: ECMA and Python Script file with documentation done.
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
*.apache2.conf
|
||||||
|
*[Ss]ecrets?*
|
||||||
|
/Python/Abstracts/AnPMap.py
|
||||||
|
/Python/Abstracts/Applications.py
|
||||||
|
.sass-cache
|
||||||
|
__pycache__
|
73
Artbook/ErrorsManager.logo.svg
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="200mm"
|
||||||
|
height="200mm"
|
||||||
|
viewBox="0 0 200 200"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
inkscape:version="1.3.1 (9b9bdc1480, 2023-11-25, custom)"
|
||||||
|
sodipodi:docname="ErrorsManager.logo.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:zoom="0.72183587"
|
||||||
|
inkscape:cx="376.12428"
|
||||||
|
inkscape:cy="428.07515"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1011"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="32"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="layer1" />
|
||||||
|
<defs
|
||||||
|
id="defs1" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Capa 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<path
|
||||||
|
id="path2"
|
||||||
|
style="fill:#992211;stroke-width:5.68737;stroke-linecap:round;fill-opacity:1"
|
||||||
|
d="M 100.0001 9.9999064 A 90 90 0 0 0 84.99998 11.393103 L 84.99998 21.600749 A 80 80 0 0 0 55.127384 33.913692 L 48.001721 26.788029 A 90 90 0 0 0 26.788029 48.001721 L 33.913692 55.127384 A 80 80 0 0 0 21.600749 84.99998 L 11.393103 84.99998 A 90 90 0 0 0 9.9999064 100.0001 A 90 90 0 0 0 11.393103 115.00022 L 21.600749 115.00022 A 80 80 0 0 0 33.913692 144.87281 L 26.788029 151.99847 A 90 90 0 0 0 48.001721 173.21217 L 55.127384 166.0865 A 80 80 0 0 0 84.99998 178.39945 L 84.99998 188.60658 A 90 90 0 0 0 100.0001 189.99977 A 90 90 0 0 0 115.00022 188.60658 L 115.00022 178.39945 A 80 80 0 0 0 144.87281 166.0865 L 151.99796 173.21165 A 90 90 0 0 0 173.21165 151.99796 L 166.0865 144.87281 A 80 80 0 0 0 178.39945 115.00022 L 188.60658 115.00022 A 90 90 0 0 0 189.99977 100.0001 A 90 90 0 0 0 188.71458 84.99998 L 178.56843 84.99998 A 80 80 0 0 0 166.16298 55.050387 L 173.33722 47.876147 A 90 90 0 0 0 152.12353 26.662972 L 144.94929 33.837211 A 80 80 0 0 0 115.00022 21.431767 L 115.00022 11.285616 A 90 90 0 0 0 100.0001 9.9999064 z M 100.0001 40.000142 A 60 60 0 0 1 160.00005 100.0001 A 60 60 0 0 1 100.0001 160.00005 A 60 60 0 0 1 40.000142 100.0001 A 60 60 0 0 1 100.0001 40.000142 z " />
|
||||||
|
<path
|
||||||
|
id="path5"
|
||||||
|
style="fill:#229999;stroke-width:5.75487;stroke-linecap:round;fill-opacity:1"
|
||||||
|
d="M 100.0001 50.000049 A 50 50 0 0 0 85.164827 52.304818 L 90.000191 119.99991 L 110 119.99991 L 114.83899 52.259859 A 50 50 0 0 0 100.0001 50.000049 z M 90.000191 129.99982 L 85.541032 147.83542 A 50 50 0 0 0 100.0001 150.00015 A 50 50 0 0 0 114.45916 147.83542 L 110 129.99982 L 90.000191 129.99982 z " />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="Backup"
|
||||||
|
style="display:none"
|
||||||
|
sodipodi:insensitive="true">
|
||||||
|
<path
|
||||||
|
id="path1-9"
|
||||||
|
style="fill:#880044;stroke-width:6.58587;stroke-linecap:round"
|
||||||
|
d="M 100.0001,9.999906 A 90,90 0 0 0 9.9999064,100.0001 90,90 0 0 0 100.0001,189.99977 90,90 0 0 0 189.99977,100.0001 90,90 0 0 0 100.0001,9.999906 Z m 0,9.999907 A 80,80 0 0 1 179.99987,100.0001 80,80 0 0 1 100.0001,179.99987 80,80 0 0 1 19.999813,100.0001 80,80 0 0 1 100.0001,19.999813 Z" />
|
||||||
|
<path
|
||||||
|
id="path2-3"
|
||||||
|
style="fill:#ffff00;stroke-width:11.542;stroke-linecap:round"
|
||||||
|
d="M 100.0001,30.000236 A 70,70 0 0 0 30.000236,100.0001 70,70 0 0 0 100.0001,169.99996 70,70 0 0 0 169.99996,100.0001 70,70 0 0 0 100.0001,30.000236 Z m 0,9.999906 A 60,60 0 0 1 160.00005,100.0001 60,60 0 0 1 100.0001,160.00005 60,60 0 0 1 40.000142,100.0001 60,60 0 0 1 100.0001,40.000142 Z" />
|
||||||
|
<path
|
||||||
|
id="rect2-1"
|
||||||
|
style="fill:#ff0000;stroke-width:3.67973;stroke-linecap:round"
|
||||||
|
d="M 84.99998,0 V 84.99998 H 0 v 30.00024 h 84.99998 v 84.99998 h 30.00024 V 115.00022 H 200.0002 V 84.99998 H 115.00022 V 0 Z" />
|
||||||
|
<path
|
||||||
|
id="path1"
|
||||||
|
style="fill:#880044;stroke-width:6.58587;stroke-linecap:round"
|
||||||
|
d="m 115.00022,11.285616 v 10.159587 a 80,80 0 0 1 29.93925,12.401827 l 7.18406,-7.184058 A 90,90 0 0 0 115.00022,11.285616 Z M 84.99998,11.393103 A 90,90 0 0 0 48.001204,26.788029 l 7.155119,7.155119 A 80,80 0 0 1 84.99998,21.581628 Z m 10.864453,18.796269 a 70,70 0 0 0 -8.167977,0.910022 l 3.999239,9.655224 a 60,60 0 0 1 16.608285,5.17e-4 l 3.93361,-9.495544 A 70,70 0 0 0 95.864433,30.189372 Z M 59.979801,42.57983 A 70,70 0 0 0 42.740027,60.045947 l 9.495544,3.93361 A 60,60 0 0 1 63.979557,52.235055 Z m 79.974449,0.160197 -3.93361,9.495544 a 60,60 0 0 1 11.7445,11.743986 l 9.65523,-3.999756 A 70,70 0 0 0 139.95425,42.740027 Z m 33.38297,5.136637 -7.18405,7.184058 a 80,80 0 0 1 12.40131,29.939258 h 10.1601 A 90,90 0 0 0 173.33722,47.876664 Z M 26.788029,48.001204 A 90,90 0 0 0 11.393103,84.99998 h 10.188525 a 80,80 0 0 1 12.36152,-29.843657 z m 142.112771,39.695252 -9.65522,3.999239 a 60,60 0 0 1 -5.2e-4,16.608285 l 9.49554,3.93361 a 70,70 0 0 0 0.1602,-24.541134 z m -137.641209,0.06615 a 70,70 0 0 0 -0.160197,24.541134 l 9.655224,-3.99924 a 60,60 0 0 1 5.17e-4,-16.608284 z M 11.393103,115.00022 a 90,90 0 0 0 15.394926,36.99825 l 7.155119,-7.1546 a 80,80 0 0 1 -12.36152,-29.84365 z m 167.024947,0 a 80,80 0 0 1 -12.36152,29.84314 l 7.15512,7.15511 a 90,90 0 0 0 15.39493,-36.99825 z m -126.182995,21.02042 -9.655225,3.99975 a 70,70 0 0 0 17.466117,17.23978 l 3.93361,-9.49555 A 60,60 0 0 1 52.235055,136.02064 Z m 95.529565,0 a 60,60 0 0 1 -11.74398,11.7445 l 3.99975,9.65523 a 70,70 0 0 0 17.23978,-17.46612 z m -56.068408,23.22442 -3.93361,9.49554 a 70,70 0 0 0 24.541138,0.1602 l -3.99924,-9.65522 a 60,60 0 0 1 -16.608288,-5.2e-4 z m 53.147148,6.81147 a 80,80 0 0 1 -29.84314,12.36152 v 10.18853 a 90,90 0 0 0 36.99825,-15.39493 z m -89.68652,5.2e-4 -7.155119,7.15512 a 90,90 0 0 0 36.998259,15.39441 v -10.18853 a 80,80 0 0 1 -29.84314,-12.361 z" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.0 KiB |
BIN
Artbook/ErrorsManager.logo.xcf
Normal file
125
HTML/ErrorsManager.base.html
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{language}">
|
||||||
|
<head>
|
||||||
|
<title data-i18n="{title_i18n}">{title_text}</title>
|
||||||
|
<meta http-equiv="content-type" content="text/html;charset={charset}" />
|
||||||
|
<meta charset="{charset}" />
|
||||||
|
|
||||||
|
<meta name="xdoc:project" content="ErrorsManager" />
|
||||||
|
<meta name="xdoc:link" content="{link}" />
|
||||||
|
<meta name="xdoc:git" content="https://git.k3y.pw/KyMAN/ErrorsManager" />
|
||||||
|
<meta name="xdoc:author" content="KyMAN" />
|
||||||
|
<meta name="xdoc:since" content="20240626" />
|
||||||
|
<meta name="xdoc:version" content="20240626" />
|
||||||
|
<meta name="xdoc:access" content="public" />
|
||||||
|
|
||||||
|
<meta name="xdoc:donate:btc" content="" />
|
||||||
|
<meta name="xdoc:donate:ltc" content="" />
|
||||||
|
<meta name="xdoc:donate:doge" content="" />
|
||||||
|
<meta name="xdoc:donate:dash" content="" />
|
||||||
|
|
||||||
|
<style data-type="text/css;charset=utf-8" data-language="CSS1.2" data-rel="stylesheet" charset="utf-8">
|
||||||
|
|
||||||
|
html,body{
|
||||||
|
height : 100%;
|
||||||
|
margin : 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script data-type="text/javascript;charset=utf-8" data-language="ECMAScript 2015" src="https://anp.local/ecma/AnPScriptsLoader.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
|
||||||
|
|
||||||
|
<script data-type="text/javascript;charset=utf-8" data-language="ECMAScript 2015" charset="utf-8">
|
||||||
|
|
||||||
|
const domain = /^https?\:\/{2}[^\/]+\.((anprm\.)?local|anprm)/i.test(window.location) ? "local" : "k3y.pw";
|
||||||
|
|
||||||
|
new AnPScriptsLoader({
|
||||||
|
styles : [
|
||||||
|
// "https://cdn." + domain + "/css/Cantarell.v17.remote.css",
|
||||||
|
// "https://cdn." + domain + "/css/Roboto.v30.remote.css",
|
||||||
|
// "https://cdn." + domain + "/css/RobotoMono.v23.remote.css",
|
||||||
|
// "https://cdn." + domain + "/css/FA6F.v6.5.2.remote.css",
|
||||||
|
"https://cdn." + domain + "/css/Roboto.v30.local.css",
|
||||||
|
"https://cdn." + domain + "/css/RobotoMono.v23.local.css",
|
||||||
|
"https://cdn." + domain + "/css/FA6F.v6.5.2.local.css",
|
||||||
|
"/scss/ErrorsManager.scss",
|
||||||
|
"https://wmarkdown." + domain + "/css/WMarkDown.icons.FontAwesome.css",
|
||||||
|
"https://wmarkdown." + domain + "/css/WMarkDown.web.icons.css",
|
||||||
|
"https://wmarkdown." + domain + "/scss/WMarkDown.scss",
|
||||||
|
"https://cdn." + domain + "/data/styles/Highlight.v11.10.0.min.css"
|
||||||
|
],
|
||||||
|
scripts : [[
|
||||||
|
"/ecma/ErrorsManager.ecma.js",
|
||||||
|
"https://cdn." + domain + "/js/Highlight.v11.10.0.min.js",
|
||||||
|
"https://wmarkdown." + domain + "/ecma/WMarkDown.ecma.js",
|
||||||
|
"https://cdn." + domain + "/data/scripts/Highlight.v11.10.0.min.js",
|
||||||
|
"https://cdn." + domain + "/data/scripts/tex-mml-chtml.v3.2.2.js"
|
||||||
|
], [
|
||||||
|
"https://anp." + domain + "/ecma/Application/AnP.ecma.js"
|
||||||
|
], [
|
||||||
|
"https://anp." + domain + "/ecma/Managers/Settings.ecma.js",
|
||||||
|
"https://anp." + domain + "/ecma/Application/URI.ecma.js",
|
||||||
|
"https://anp." + domain + "/ecma/Managers/Globals.ecma.js",
|
||||||
|
"https://anp." + domain + "/ecma/Managers/I18N.ecma.js",
|
||||||
|
"https://anp." + domain + "/ecma/Managers/PrintTypes.ecma.js",
|
||||||
|
"https://anp." + domain + "/ecma/Managers/Threads.ecma.js",
|
||||||
|
"https://anp." + domain + "/ecma/Application/Attributes.ecma.js",
|
||||||
|
"https://anp." + domain + "/ecma/Application/HTMLPreload.ecma.js"
|
||||||
|
], [
|
||||||
|
"https://anp." + domain + "/ecma/Components/Base.ecma.js"
|
||||||
|
]]
|
||||||
|
}, () => {
|
||||||
|
|
||||||
|
wmarkdown = new WMarkDown({dictionary : "https://wmarkdown." + domain + "/json/WMarkDown.dict.es.kyman.json"});
|
||||||
|
anp = new AnP({
|
||||||
|
globals : {
|
||||||
|
anp_root : "https://anp." + domain,
|
||||||
|
errors_manager_root : ""
|
||||||
|
},
|
||||||
|
callback : () => anp.base.set(".errors-manager")
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body class="anp errors-manager">
|
||||||
|
<header>
|
||||||
|
<h1 data-i18n="errors_manager" data-i18n-without="true" title="{{errors_manager}}">
|
||||||
|
<a href="{link}" target="_blank">
|
||||||
|
<span class="image">
|
||||||
|
<img src="{logo}" />
|
||||||
|
<span style="background-image:url('{logo}');"></span>
|
||||||
|
</span>
|
||||||
|
<span data-i18n="errors_manager">{{errors_manager}}</span>
|
||||||
|
</a>
|
||||||
|
</h1>
|
||||||
|
<nav class="main-menu">
|
||||||
|
<ul>
|
||||||
|
<li data-i18n="web" data-i18n-without="true" title="{{web}}">
|
||||||
|
<a href="/" target="_self">
|
||||||
|
<span data-icon="web"></span>
|
||||||
|
<span data-i18n="web">{{web}}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li data-i18n="git" data-i18n-without="true" title="{{git}}">
|
||||||
|
<a href="https://git.k3y.pw/KyMAN/ErrorsManager" target="_self">
|
||||||
|
<span data-icon="git"></span>
|
||||||
|
<span data-i18n="git">{{git}}</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
<main>{contents}</main>
|
||||||
|
<footer>
|
||||||
|
<span class="license">
|
||||||
|
<a class="license-image" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank" data-i18n="license_cc_by_nc_sa_4" data-i18n-without="true" title="{{license_cc_by_nc_sa_4}}">
|
||||||
|
<span data-i18n="license_cc_by_nc_sa_4">{{license_cc_by_nc_sa_4}}</span>
|
||||||
|
<img src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" data-i18n="license_cc_by_nc_sa_4" data-i18n-without="true" alt="{{license_cc_by_nc_sa_4}}">
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
3
JSON/ErrorsManager.py.routes.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[
|
||||||
|
"get:/ /ErrorsManager/Public"
|
||||||
|
]
|
42
JSON/ErrorsManager.py.settings.json
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"errors_manager_host_name" : "/^(https?\\:\\/{2})?errorsmanager\\.(k3y\\.pw|(anprm\\.)?local|anprm)/",
|
||||||
|
"errors_manager_default_settings_files" : [
|
||||||
|
"/JSON/ErrorsManager.py.settings.json"
|
||||||
|
],
|
||||||
|
"errors_manager_default_secrets_files" : [
|
||||||
|
"/JSON/ErrorsManager.py.settings.secrets.json"
|
||||||
|
],
|
||||||
|
"errors_manager_default_i18n_files" : [
|
||||||
|
"/JSON/I18N/ErrorsManager.py.i18n.espanol.json"
|
||||||
|
],
|
||||||
|
"errors_manager_default_routes_files" : [
|
||||||
|
"/JSON/ErrorsManager.py.routes.json",
|
||||||
|
"/JSON/ErrorsManager.py.routes.secrets.json"
|
||||||
|
],
|
||||||
|
"errors_manager_default_views_files" : [],
|
||||||
|
"errors_manager_resources" : {
|
||||||
|
"charset" : "utf-8",
|
||||||
|
"logo" : "/images/ErrorsManager.png",
|
||||||
|
"link" : "https://errorsmanager.k3y.pw/",
|
||||||
|
"git" : "https://git.k3y.pw/KyMAN/ErrorsManager",
|
||||||
|
"project" : "ErrorsManager",
|
||||||
|
"web" : "https://errorsmanager.k3y.pw",
|
||||||
|
"authors" : "KyMAN",
|
||||||
|
"class" : "errors-manager",
|
||||||
|
"snake" : "errors_manager",
|
||||||
|
"metas" : {},
|
||||||
|
"styles" : ["/scss/ErrorsManager.scss"],
|
||||||
|
"menu" : [
|
||||||
|
["web", "_self", "/"],
|
||||||
|
["git", "_blank", "https://git.k3y.pw/KyMAN/ErrorsManager"]
|
||||||
|
],
|
||||||
|
"licenses" : [
|
||||||
|
["copyright", null, null, {
|
||||||
|
"year" : "2024-2025",
|
||||||
|
"entity" : "KyMAN"
|
||||||
|
}],
|
||||||
|
["cc_by_nc_sa_4"]
|
||||||
|
],
|
||||||
|
"dictionary" : "https://wmarkdown.{domain}/json/WMarkDown.dict.es.kyman.json"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.alarabiyah.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"alarabiyah" : {
|
||||||
|
|
||||||
|
"errors_manager" : "سوء التصرف"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.azerbaycanca.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"azerbaycanca" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Qalereya"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.blanga.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"blanga" : {
|
||||||
|
|
||||||
|
"errors_manager" : "ভুল বোঝাবুঝি"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.bokmal.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"bokmal" : {
|
||||||
|
|
||||||
|
"errors_manager" : "MistakesManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.bulgarski.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"bulgarski" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Грешки Manager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.catala.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"catala" : {
|
||||||
|
|
||||||
|
"errors_manager" : "ErrorsManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.cestina.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"cestina" : {
|
||||||
|
|
||||||
|
"errors_manager" : "ChybyManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.dansk.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"dansk" : {
|
||||||
|
|
||||||
|
"errors_manager" : "MistakesManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.deutsch.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"deutsch" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Fehlermanager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.eesti.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"eesti" : {
|
||||||
|
|
||||||
|
"errors_manager" : "VeadManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.ellinika.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ellinika" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Διαχειριστής λαθών"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.english.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"english" : {
|
||||||
|
|
||||||
|
"errors_manager" : "MistakesManager"
|
||||||
|
}
|
||||||
|
}
|
5
JSON/I18N/ErrorsManager.py.i18n.espanol.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"espanol" : {
|
||||||
|
"errors_manager" : "ErrorsManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.esperanto.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"esperanto" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Eraroj"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.farsi.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"farsi" : {
|
||||||
|
|
||||||
|
"errors_manager" : "اشتباهات مدیر"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.francais.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"francais" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Gestionnaire des erreurs"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.gaeilge.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"gaeilge" : {
|
||||||
|
|
||||||
|
"errors_manager" : "MistakesManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.hangugeo.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"hangugeo" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Mistakes 관리자"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.hanyu.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"hanyu" : {
|
||||||
|
|
||||||
|
"errors_manager" : "錯誤管理者"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.hindi.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"hindi" : {
|
||||||
|
|
||||||
|
"errors_manager" : "MistakesManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.indonesia.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"indonesia" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Login"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.italiano.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"italiano" : {
|
||||||
|
|
||||||
|
"errors_manager" : "MistakesManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.ivrit.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ivrit" : {
|
||||||
|
|
||||||
|
"errors_manager" : "טעויות"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.latviski.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"latviski" : {
|
||||||
|
|
||||||
|
"errors_manager" : "KļūdasManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.lietuviskai.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"lietuviskai" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Comment"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.magyar.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"magyar" : {
|
||||||
|
|
||||||
|
"errors_manager" : "MistakesManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.malayu.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"malayu" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Kesalahan Kesalahan Pengurus"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.nederlands.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"nederlands" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Foutenbeheer"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.nihongo.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"nihongo" : {
|
||||||
|
|
||||||
|
"errors_manager" : "ミステークマネージャー"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.polski.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"polski" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Błąd menedżer"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.portugues.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"portugues" : {
|
||||||
|
|
||||||
|
"errors_manager" : "ErrosManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.romaneste.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"romaneste" : {
|
||||||
|
|
||||||
|
"errors_manager" : "GreşeliManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.russkiy.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"russkiy" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Ошибки менеджера"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.shqip.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"shqip" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Gabimet Manager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.slovencina.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"slovencina" : {
|
||||||
|
|
||||||
|
"errors_manager" : "ChybyManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.slovenscina.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"slovenscina" : {
|
||||||
|
|
||||||
|
"errors_manager" : "NapakeManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.suomi.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"suomi" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Virheet"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.svenska.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"svenska" : {
|
||||||
|
|
||||||
|
"errors_manager" : "MisstagManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.tagalog.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"tagalog" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Nagkakamali"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.thai.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"thai" : {
|
||||||
|
|
||||||
|
"errors_manager" : "ตัวจัดการข้อผิดพลาด"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.turkce.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"turkce" : {
|
||||||
|
|
||||||
|
"errors_manager" : "HatalarManager"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.ukrainska.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ukrainska" : {
|
||||||
|
|
||||||
|
"errors_manager" : "Мапа"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.urdu.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"urdu" : {
|
||||||
|
|
||||||
|
"errors_manager" : "غلطفہمی"
|
||||||
|
}
|
||||||
|
}
|
6
JSON/I18N/ErrorsManager.py.i18n.zhongwen.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"zhongwen" : {
|
||||||
|
|
||||||
|
"errors_manager" : "错误的管理者"
|
||||||
|
}
|
||||||
|
}
|
13
Public/doc/es/bugs.w.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_bugs
|
||||||
|
title_text = Bugs - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
## Bugs
|
||||||
|
|
||||||
|
En esta sección se listarán los bugs encontrados en la librería y el estado en el que se encuentran para su reparación por parte de los desarrolladores.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
26
Public/doc/es/description.w.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_description
|
||||||
|
title_text = Descripción - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
El proyecto ErrorsManager es un proyeto ideado y desarrollado por Srx00 orientado a gestionar errores de una forma eficiente, compacta, sencilla y compatible entre plataformas. La idea radica en que la forma más simple de poder gestionar y mostrar errores de tipo global es gestionando un sistema Booleano que nos permite identificar punto a punto si algo es correcto o no, donde la solución más práctica, sencilla, eficiente, de bajos recursos y bajo peso sería el uso natural de binarios sobre valores enteros como valores comunes a todos los lenguajes, mediante la práctica del Bitwise y operadores binarios, ya sean nativos \(Como en la mayoría de los lenguajes) o alternativos \(Como es parcialmente en el caso de SQL Server), sin embargo, esto nos da un problema de funcionamiento real el cual podemos ver representado en la siguiente tabla:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Lenguaje | Bits de entero | Bits de Bitwise seguros
|
||||||
|
| JavaScript | 32 | 31
|
||||||
|
| SQL Server | 64 | 28
|
||||||
|
| Python | Infinito | Infinito
|
||||||
|
|]
|
||||||
|
|
||||||
|
> [!!] Es cierto que Python no puede trabajar valores infinitos y que su valor máximo entero es de 64 bits, sin embargo, éste hace uso de una práctica que individualiza los dígitos del valor y los calcula en múltiples ciclos, que pese a ser un proceso más lento por ser fuera de la mantisa, aunque éstos se agrupon binariamente, permite un uso que puede extenderse hasta casi los 4GB de longitud, por tanto, hablando de semejantes longitudes lo consideramos, al uso de esta librería, como infinito.
|
||||||
|
|
||||||
|
> [!!] Es verdad que en los SQL el entero es de 32 bits, sin embargo, existe la variación del BigInt que nos permite tener enteros de hasta 64 bits. Es importante tener en cuenta que ciertos motores como MySQL/MariaDB no contemplan el uso físico de la mantisa pudiendo ser ejectados en entornos de 32 bits y poder trabajar valores de 64 bits, por lo que se cuenta únicamente por gestión de memoria, pero como uso serguro en decimal tenemos 64 bits, pero como uso Bitwise lo tenemos que bajar de 32 bits.
|
||||||
|
|
||||||
|
Visto este problema tanto de limitaciones como de diferentes longitudes de trabajo para los Bitwise existe esta librería. La idea es cambiar un valor numérico entero por un String cuya longitud se condiciona a los 2GB en la mínima \(32 bits de mantisa, pese a que éste sea realmente más, pero no en potencia 2 que serían los 4GB). También hay que tener en cuenta que el espacio asignado en lenguajes fuertemente tipados o de gestión de memoria, sería un despropósito asignar semejante cantidades, motivo por el cual, esta librería lo deja a una longitud de 512 bytes de tamaño para la gestión de errores. Dicha longitud se basará en Base64, base la cual sería una potencia 6 de base 2, es decir, por caracter tendríamos una gestión de 6 errores simultáneos distintos, por lo que 512 bytes daría lugar a la posibilidad de gestión de 512 \* 6, que vendría siendo **3072 errores simultáneos por String**.
|
||||||
|
|
||||||
|
> [!!] Esta librería permite alternar trabajo con Strings y valores numéricos enteros, siendo más eficiente y rápido, además de nativo, el uso de valores numéricos enteros positivos, así que se aconseja que mientras se esté por debajo de los 28 bits de longitud se haga uso de este sistema, a partir de ahí se aconseja el uso de Strings mediante esta librería.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
49
Public/doc/es/design.w.md
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_design
|
||||||
|
title_text = Diseño - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
## Diseño
|
||||||
|
|
||||||
|
El diseño de la interfaz de muestreo e información del proyecto ErrorsManager viene siendo la extraída de forma directa del proyecto AnP y el propio WMarkDown, con la diferencia principal de los colores primario y secundario.
|
||||||
|
|
||||||
|
Empezando por los colores, tenemos los siguientes:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Tipo | Hexadecimal | RGBA | Muestra
|
||||||
|
| Fondo | #EFEFEF | rgba\(239, 239, 239, 1) | [[#EFEFEF]]
|
||||||
|
| Frontal | #222 | rgba\(34, 34, 34, 1) | [[#222]]
|
||||||
|
| Primario | #812 | rgba\(136, 17, 34, 1) | [[#812]]
|
||||||
|
| Secundario | #218 | rgba\(34, 17, 136, 1) | [[#218]]
|
||||||
|
| Gris | #888 | rgba\(136, 136, 136, 1) | [[#888]]
|
||||||
|
| Tabla título | #19888888 | rgba\(136, 136, 136, 0.1) | [[color rgba(136, 136, 136, 0.1)]]
|
||||||
|
| Tabla Select | #19888888 | rgba\(136, 136, 136, 0.1) | [[color rgba(136, 136, 136, 0.1)]]
|
||||||
|
| Tabla impar | #38888888 | rgba\(136, 136, 136, 0.2) | [[color rgba(136, 136, 136, 0.2)]]
|
||||||
|
| Tabla par | #00FFFFFF | rgba\(255, 255, 255, 0) | [[color rgba(255, 255, 255, 0)]]
|
||||||
|
| Borde interno | #19888888 | rgba\(136, 136, 136, 0.5) | [[color rgba(136, 136, 136, 0.5)]]
|
||||||
|
| Diccionario | #551a22 | rgba\(85, 26, 34, 1) | [[#551a22]]
|
||||||
|
| Diccionario en | #224d55 | rgba\(34, 77, 85, 1) | [[#224d55]]
|
||||||
|
| Code impar | #38C8C8C8 | rgba\(200, 200, 200, 0.2) | [[color rgba(200, 200, 200, 0.2)]]
|
||||||
|
|]
|
||||||
|
|
||||||
|
Por otro lado, tenemos las fuentes de texto usados en la Web de este proyecto, las cuales son:
|
||||||
|
|
||||||
|
* **Roboto**. Para el texto en general.
|
||||||
|
* https://fonts.google.com/specimen/Roboto?query=roboto
|
||||||
|
* **Roboto Mono**. Para los bloques de código.
|
||||||
|
* https://fonts.google.com/specimen/Roboto+Mono?query=roboto
|
||||||
|
* **Font Awesome**. Para la iconificación general de la Web.
|
||||||
|
* https://fontawesome.com/
|
||||||
|
|
||||||
|
El tamaño de la fuente, así como de los elementos de la Web se basan en un sistema que simulan los DPI en la Web, usando la magnitud "EM" para determinar un tamaño dinámico sobre el bloque anfitrión del mismo. Por defecto, éste se basa en dividir en 40 celdas desde el lado de la pantalla o del marco de visualización más estrecho, quedando como tamaño de fuente por defecto una celda.
|
||||||
|
|
||||||
|
La cabecera hace uso de 4 celdas y el pie de página consta de 2. Ambos ordenan sus elementos en un bloque Flex a modo tupla.
|
||||||
|
|
||||||
|
Finalmente tenemos el logo del proyecto, que representa una centralización de recursos sobre otros proyectos exponiendo un punto central del que parten todos los demás proyectos más grandes.
|
||||||
|
|
||||||
|
((!image /images/ErrorsManager.png))
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
55
Public/doc/es/donates.w.md
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_donates
|
||||||
|
title_text = Donaciones - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
## Donaciones
|
||||||
|
|
||||||
|
Este proyecto es plenamente gratuito pues es un proyecto orientado a complementar otros proyectos de los mismos desarrolladores. No tiene ningún plan de ingresos ni pasivos ni activos más allá de lo que se expone en este título. Si alguien quisiere colaborar en que este proyecto no sólo esté abierto por requisitos de los autores, sino también cara un mantenimiento hacia terceros, a continuación presentamos unas direcciones de Cryptoactivos donde se podrá donar sin ninguna cuantía mínima establecida.
|
||||||
|
|
||||||
|
- **Bitcoin** o *BTC*: [bitcoin:bc1qypwl4063lhcjx7zmktqrs7n7s3dypwn5nr6h9u?label=ErrorsManagerDonation bc1qypwl4063lhcjx7zmktqrs7n7s3dypwn5nr6h9u]
|
||||||
|
- **Litecoin** o *LTC*: [litecoin:ltc1qlqmy4pzl9f2kmqrgn8prfkjrndnnqw770j77ey?label=ErrorsManagerDonation ltc1qlqmy4pzl9f2kmqrgn8prfkjrndnnqw770j77ey]
|
||||||
|
- **Dogecoin** o *DOGE*: [dogecoin:DA8dwyPzs9KL3mZWQh1feJztPhq8dn7QRq?label=ErrorsManagerDonation DA8dwyPzs9KL3mZWQh1feJztPhq8dn7QRq]
|
||||||
|
- **Dash**: [dash:Xp8EnKd6PdhiLiibPhb9joQHqKcb2LvDMn?label=ErrorsManagerDonation Xp8EnKd6PdhiLiibPhb9joQHqKcb2LvDMn]
|
||||||
|
- **Faircoin** o *FAIR*: [faircoin:fLG4irvJt1xt67kPDTjEbNinXW3vUFvKzQ?label=ErrorsManagerDonation fLG4irvJt1xt67kPDTjEbNinXW3vUFvKzQ]
|
||||||
|
|
||||||
|
> [!!] Mientras no halla ninguna condición de recursos que impida el mantenimiento gratuito de este servicio, éste permanecerá mantenido y público independientemente de los ingresos obtenidos a partir de los donativos.
|
||||||
|
|
||||||
|
> [!#] Los usuarios que colaboren y quieran ser referenciados, éstos serán referenciados en este apartado mediante un Quote de comentario de usuario con el Nick y avatar correspondiente, pero sólo en caso de que ellos quieran aparecer aquí.
|
||||||
|
|
||||||
|
> [!#] Se mantendrá informados a los usuarios de todo aquel donativo dado y la cantidad económica adquirida, y será publicado su uso y tenencia para que halla constancia pública del uso que se le dé a dichos recursos.
|
||||||
|
|
||||||
|
> [!@Srx00] Quería agredecer de forma persona aquellas aportaciones que serán bien recibidas y valoradas para este proyecto, ya sea como valor simbólico como de mantenimiento. Así, que desde el desarrollo y como desarrollador de este proyecto, muchas gracias a todos aquellos que ponen su granito de arena para este proyecto y por lo tanto, en pro de todos. Muchas gracias, de verdad.
|
||||||
|
|
||||||
|
### Balance
|
||||||
|
|
||||||
|
A continuación se mostrará una tabla de balance con respecto a las cantidades y usos dados.
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Activo | Cantidad | Motivo | Usuario | Cantidad total actual
|
||||||
|
| **BTC** | 0 BTC | Inicio del contador de unidades de BTC. | | 0 BTC
|
||||||
|
| **LTC** | 0 LTC | Inicio del contador de unidades de LTC. | | 0 LTC
|
||||||
|
| **DOGE** | 0 DOGE | Inicio del contador de unidades de DOGE. | | 0 DOGE
|
||||||
|
| **DASH** | 0 DASH | Inicio del contador de unidades de DASH. | | 0 DASH
|
||||||
|
| **FAIR** | 0 FAIR | Inicio del contador de unidades de FAIR. | | 0 FAIR
|
||||||
|
|]
|
||||||
|
|
||||||
|
Cómputo total actual en tenencia.
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Activo | Cantidad | Número de Operaciones
|
||||||
|
| **BTC** | 0 BTC | 0
|
||||||
|
| **LTC** | 0 LTC | 0
|
||||||
|
| **DOGE** | 0 DOGE | 0
|
||||||
|
| **DASH** | 0 DASH | 0
|
||||||
|
| **FAIR** | 0 FAIR | 0
|
||||||
|
|]
|
||||||
|
|
||||||
|
### Donantes
|
||||||
|
|
||||||
|
A continuación, los comentarios de los donantes.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
21
Public/doc/es/faq.w.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_faq
|
||||||
|
title_text = F.A.Q. - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
## F.A.Q.
|
||||||
|
|
||||||
|
En este apartado se responderán a las preguntas más frecuentes que se puedan realizar en el entorno cercano de este proyecto.
|
||||||
|
|
||||||
|
> [!?] **¿Por qué la realización de este proyecto pudiendo gestionar los errores mediante matrices, enviando consigo los textos descriptivos de cada uno de los errores?** En teoría, las diferentes capas de una aplicación podrían estar desarrolladas en distintos entornos de desarrollo, por ejemplo, no es lo mismo trabajar procedimientos almacenados desde una base de datos que controladores en el servidor o métodos en el cliente. Para poder compatibilizar todos estos entornos cuando entre ellos consumen servicios expuestos, éstos han de conocer las posibles respuestas y consigo, los distintos mensajes de error que se devuelvan, por tanto, para ahorrar ancho de banda, ya sea a nivel local, de red o Internet, es mejor, en estos casos concretos, enviar un código que defina y especifique todo antes que toda aquella información al respecto que puede ser bastante. Al no existir un sistema unificado para dicho fin con las características de longitud y eficiencia deseada, por lo menos, desde el conocimiento de Srx00, pues éste decidió crear esta librería.
|
||||||
|
|
||||||
|
> [!?] **¿Por qué este trabajo está público y gratuito?** Esta librería es una librería que sí o sí iba a desarrollar Srx00 para los fines de los distintos proyectos que desarrolla. Al no tener un modelo de negocio y no estar sujeto a clientes, éste quedará libre y gratuito, dentro de los términos y condiciones de la licencia Creative Commons BY-NC-SA 4.0. Ésto permite no sólo compartir con la comunidad, sino también currículum y una forma de extender el conocimiento de existencia de este tipo de proyectos de Srx00.
|
||||||
|
|
||||||
|
> [!?] **¿Por qué la licencia Creative Commons de Atribución, No Comercial y que se Permite Compartir, CC-BY-NC-SA 4.0?** Porque Srx00 quiere compartir con la comunidad este trabajo, sin embargo, una de las condiciones más importantes es reconocer la autoría original, lo que ofrece Currículum y conocimiento del trabajo del o los autores, además de no permitir la comercialización de dicho proyecto, lo que no impide que éste pueda estar en un proyecto comercial siempre que lo que se venda no sea este proyecto. Las licencias como MIT o GPL no cumplen con dichas espectativas y Srx00 tiene la filosofía de que todo trabajo ha de ser reconocido a su autor aunque éste no lo requiera o precise pues es su trabajo.
|
||||||
|
|
||||||
|
> [!?] **Al ser un proyecto CC-BY-NC-SA 4.0, el cual tiene como condición No Comercial. ¿Podría integrar este proyecto en un proyecto personal de caracter privado y comercial?** Sí, siempre que éste reconozca la autoría de este proyecto y que no sea éste la base de negocio económico de dicho proyecto, es decir, si se integra para gestionar los errores del proyecto o cualquier otra cosa que ayude o facilite el trabajo del mismo pero la base económica del proyecto sea otra cosa agena a eso se permite perfectamente el uso y manipulación del mismo.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
140
Public/doc/es/integration.w.md
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_integration
|
||||||
|
title_text = Integración - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
## Integración
|
||||||
|
|
||||||
|
El proyecto ErrorsManager viene siendo un proyecto que se basa principalmente en un objeto que parte de una clase, aunque en lenguajes como los SQL, éste parte de una librería que contiene las acciones necesarias para poder trabajar con ésta.
|
||||||
|
|
||||||
|
### JavaScript/ECMAScript
|
||||||
|
|
||||||
|
En proyectos de JavaScript/ECMAScript, existen varias formas de ser adjuntas, sin embargo, aquí hablaremos únicamente de la adjunción directa vía etiqueta SCRIPT de HTML pues cada entorno de desarrollo tendrá su forma de cargar dicha librería. Para poder hacer uso de esta librería puede ser mediante sistema local, a partir de descargar dicha librería; o bien, hacer uso de la librería original de este servidor o cualquier otro CDN, aunque se aconseja siempre que sea el oficial.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script data-type="text/javascript;charset=utf-8" data-language="ECMAScript 2015" src="https://errorsmanager.k3y.pw/ecma/ErrorsManager.ecma.js" data-crossorigin="anonymous" charset="utf-8"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!@Srx00] Estos atributos que aquí se exponen son míos con la folosofía de preservar ciertos atributos que antiguamente se utilizaban y que a creencia personal, son útiles para identificar a qué clase de Script te enfrentas sin necesidad de tener que ver el contenido del fichero que vinculan, así que los elementos que salen como *data-* no serían nacesarios de aplicar, simplemente siguen una filosofía personal que siempre aparecerán expuestos en mis desarrollos personales.
|
||||||
|
|
||||||
|
Los Links que se pueden usar para dicho fin son los siguientes:
|
||||||
|
|
||||||
|
* https://errorsmanager.k3y.pw/ecma/ErrorsManager.ecma.js
|
||||||
|
* https://git.k3y.pw/KyMAN/ErrorsManager/raw/branch/main/Public/ecma/ErrorsManager.ecma.js
|
||||||
|
|
||||||
|
Para descargar el archivo original tenemos el siguiente link:
|
||||||
|
|
||||||
|
* https://git.k3y.pw/KyMAN/ErrorsManager/src/branch/main/Public/ecma/ErrorsManager.ecma.js
|
||||||
|
|
||||||
|
Luego, para poder hacer uso de dicha librería simplemente hemos de crear el objeto que contiene las órdenes con el alfabeto correspondiente.
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(errors_manager.get_alphabet());
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
De esta forma, comprobamos que realmente funciona imprimiendo el alfabeto usado para el String.
|
||||||
|
|
||||||
|
### Python
|
||||||
|
|
||||||
|
La integración en Python se puede hacer de varias formas según interese al desarrollador, sin embargo, hay que tener encuenta que ésto puede dar lugar a problemas de funcionalidad según se haga.
|
||||||
|
|
||||||
|
> [!!] Recuerda que Python funciona bajo los permisos del usuario ejecutor, por lo que es importante tener encuenta los permisos, ya sean por las ACL como por los permisos nativos del sistema.
|
||||||
|
|
||||||
|
#### Directo
|
||||||
|
|
||||||
|
La integración directa dentro de un proyecto Python sería básicamente descargar el siguiente archivo Python desde el propio Git e integrarlo dentro de nuestro proyecto.
|
||||||
|
|
||||||
|
* https://git.k3y.pw/KyMAN/ErrorsManager/src/branch/main/Python/ErrorsManager.py
|
||||||
|
|
||||||
|
Si el fichero fue instalado en el directorio "Assets" dentro de nuestro proyecto, su implementación sería la siguiente:
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(errors_manager.get_alphabet())
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Enlace Simbólico
|
||||||
|
|
||||||
|
Una integración a partir de un Enlace Simbólico \(Sistemas UNIX) o Acceso Directo \(Sistemas DOS) simlemente es tener descargado el archivo mencionado justo en el apartado **[#directo Directo]** en cualquier parte de que nos interese tenerlo como un recurso compartido y éste ser vinculado mediante Enlace Simbólico o Acceso Directo dentro de nuestro proyecto. Siguiendo con el ejemplo anterior, y en nuestro caso, en un entorno UNIX, éste sería:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
mkdir /CARPETA_DE_RECURSOS_COMPARTIDOS
|
||||||
|
cd /CARPETA_DE_RECURSOS_COMPARTIDOS
|
||||||
|
|
||||||
|
wget https://git.k3y.pw/KyMAN/ErrorsManager/raw/branch/main/Python/ErrorsManager.py
|
||||||
|
ln -s ErrorsManager.py /PROYECTO_PYTHON/Assets/ErrorsManager.py
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Y de la misma forma que el anterior, tendríamos:
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(errors_manager.get_alphabet())
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Indirecto o En Caliente
|
||||||
|
|
||||||
|
La última forma que se expone es la carga indirecta o compilado en caliente. Python tiene 3 modos de trabajo:
|
||||||
|
|
||||||
|
* **Compilado**, donde se compila un PYC u otro formato dependiendo del propio compilador, que pese a seguir siendo interpretado por una VM, éste ya no tendría el proceso del precompilado.
|
||||||
|
* **Precompilado**, donde se ejecuta directamente un archivo PY que lance toda la aplicación, ya sea con carga de archivos importados o seá únicamente un fichero, donde se compila en memoria y tras ello será ejecutado e interpretado. Este método es el más habitual.
|
||||||
|
* **Compilado en caliente**, el cual se usa para cargar librerías que pueden o no estar dentro del proyecto y se cargan como ficheros binarios, luego éstos se compilan en caliente dentro de la aplicació ya ejecutada y luego se ejecutan éstos al nivel donde se haga la compilación.
|
||||||
|
|
||||||
|
En este caso sería el último, y ésto nos permite cargar cualquier fichero en cualquier punto del sistema operativo mediante su Path, ya sea absoluto o relativo. Suponiendo que está en un directorio de recursos compartidos entre aplicaciones, y partiendo del ejemplo del apartado anterior **[#enlace-simb-lico Enlace Simbólico]**, el resultado sería el siguiente:
|
||||||
|
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from os.path import exists as path_exists
|
||||||
|
|
||||||
|
path:str = "/CARPETA_DE_RECURSOS_COMPARTIDOS/ErrorsManager.py"
|
||||||
|
|
||||||
|
if path_exists(path):
|
||||||
|
|
||||||
|
opened:BufferedReader
|
||||||
|
|
||||||
|
with open(path, "rb") as opened:
|
||||||
|
try:
|
||||||
|
|
||||||
|
exec(compile(opened.read(), "ErrorsManager.py", "exec"), globals())
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(errors_manager.get_alphabet())
|
||||||
|
|
||||||
|
except Exception as exception:
|
||||||
|
print(exception.getMessage())
|
||||||
|
else:
|
||||||
|
print("No existe el Path '" + path + "'.")
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!!] Este método tiene tres problemas: el primero de todos, y más importante es que hay que tener en cuenta que para aplicaciones compiladas no vale pues la librería quedaría sin compilar a petición de la aplicación; requiere de que exista siempre esa librería, sino nos dirá que no existe, y eso puede ser un problema a la hora de compartir el proyecto; y finalmente, los permisos que tenga el fichero para ser cargado, aunque no le afectaría el permiso de ejecución pues como podemos ver, simplemente lee su contenido y luego lo ejecuta, pero no ejecuta propiamente el fichero.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
55
Public/doc/es/manual.w.md
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_manual
|
||||||
|
title_text = Manual - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
## Manual
|
||||||
|
|
||||||
|
[[include manual/basis.w.md]]
|
||||||
|
|
||||||
|
[[include manual/set_alphabet.w.md]]
|
||||||
|
|
||||||
|
[[include manual/get_alphabet.w.md]]
|
||||||
|
|
||||||
|
[[include manual/is_string.w.md]]
|
||||||
|
|
||||||
|
[[include manual/is_integer.w.md]]
|
||||||
|
|
||||||
|
[[include manual/is_array.w.md]]
|
||||||
|
|
||||||
|
[[include manual/type.w.md]]
|
||||||
|
|
||||||
|
[[include manual/process.w.md]]
|
||||||
|
|
||||||
|
[[include manual/bits.w.md]]
|
||||||
|
|
||||||
|
[[include manual/to_array.w.md]]
|
||||||
|
|
||||||
|
[[include manual/to_array_binary.w.md]]
|
||||||
|
|
||||||
|
[[include manual/to_integer.w.md]]
|
||||||
|
|
||||||
|
[[include manual/to_string.w.md]]
|
||||||
|
|
||||||
|
[[include manual/to_unknown.w.md]]
|
||||||
|
|
||||||
|
[[include manual/has.w.md]]
|
||||||
|
|
||||||
|
[[include manual/has_range.w.md]]
|
||||||
|
|
||||||
|
[[include manual/compact.w.md]]
|
||||||
|
|
||||||
|
[[include manual/bitwise.w.md]]
|
||||||
|
|
||||||
|
[[include manual/set.w.md]]
|
||||||
|
|
||||||
|
[[include manual/join.w.md]]
|
||||||
|
|
||||||
|
[[include manual/set_blocks.w.md]]
|
||||||
|
|
||||||
|
[[include manual/slice.w.md]]
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
54
Public/doc/es/manual/basis.w.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_basis
|
||||||
|
title_text = Base conceptual - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
En este apartado se analizará cada una de las funcionalidades de esta librería, en común entre todos los lenguajes, de esta forma se podrá gestionar de una forma común entre los distintos entornos a los que pertenece.
|
||||||
|
|
||||||
|
Antes de empezar, hay que aclarar que esta librería se basa en un funcionamiento mediante Bitwise dentro de un String, donde cada caracter representa un valor numérico entero en una base binaria cuya potencia por defecto será 6, es decir, que cada caracter representa un valor numérico decimal entero positivo entre 0 y 63, ambos incluídos, y cuando hay más de un valor, éste será como cuando hay más de un dígito en base decimal, permitiendo recrear valores numéricos enormes. Para poder llevar a cabo ésto, se requiere de un alfabeto de caracteres el cual determina por posición, qué valor numérico decimal entero positivo representa. Por defecto, el alfabeto usado es el Base64, el cual es el siguiente:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!#] Es cierto que Base64 realmente no tiene 64 caracteres, sino 65. Esto sucede por el caracter de relleno para que cumpla con el protocolo de la codificación de Base64. En nuestro caso, éste último caracter será ignorado pues se usará, dentro del conjunto matemático los 64 caracteres que representan las posiciones de la 0 a la 63, los cuales incluyen el caracter más ("+") y el caracter igual ("=").
|
||||||
|
|
||||||
|
> [!! ¡OJO!] Es importante entender que se diferenciarán las mayúsculas de las minúsculas cara entornos como los SQL lo cual hay que forzarlo en las funciones de trabajo con caracteres y Strings.
|
||||||
|
|
||||||
|
> [!! IMPORTANTE] Para que los errores puedan ser multiplataforma e integrados en lenguajes o plataformas externas, el alfabeto y la potencia de la base han de coincidir, sino, los errores en formato String serán mal interpretados.
|
||||||
|
|
||||||
|
La librería trabaja tres tipos muy concretos de datos equivalentes de error:
|
||||||
|
|
||||||
|
* **Integer**: Viene siendo un valor numérico entero cuyos Bits representan, de forma Booleana, cada uno de los errores, hasta un máximo seguro de 28 bits de longitud.
|
||||||
|
* **String**: Viene siendo una cadena de caracteres en el alfabeto dado que determina el código de error. Viene a representar lo mismo que el *Integer* pero con la diferencia de que cada caracter viene siendo un valor numérico en una base específica cuya unión hace enteros simulados más largos y cuyos bits por posición, representan lo dicho anteriormente.
|
||||||
|
* **Array**: Viene siendo lo mismo que el String pero cada caracter es subsituído por el entero correspondiente al que hace referencia dentro de un vector, lista, Array, tupla, etc., y éste está comprendido entre 0 y la base del String menos 1, ambos incluídos. Por ejemplo, en Base64 sería entre 0 y 63, ambos incuídos.
|
||||||
|
|
||||||
|
```maths
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
|
||||||
|
Base = 64 \\
|
||||||
|
Rango(x, y) = [x, y] = [0, 64 - 1] = [0, 2^{log_2{64}} - 1] \\ \\
|
||||||
|
|
||||||
|
B = Base \\
|
||||||
|
Rango(x, y) = [x, y] = [0, B - 1] = [0, 2^{log_2{B}} - 1] \\
|
||||||
|
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!!] Es importante mencionar que el código de error visual es el propio String, sin embargo, el código de error para ser procesado y trabajado es el Array.
|
||||||
|
|
||||||
|
La librería se basa en un objeto o en un espacio de nombres, pero entornos que no posean ninguna de las dos cosas señaladas anteriormente o que el uso de éstas requiera de un trabajo engorroso o profundo sobre dicho entorno, éstos usarán la cabecera de nombre en todos sus elementos a usar **errors_manager_** en Snake o **ErrorsManager** en Pascal según convenga su uso.
|
||||||
|
|
||||||
|
* **Métodos** y **Funciones**: Irá en Snake.
|
||||||
|
* **Tablas** y **Vistas**: Irá en Pascal.
|
||||||
|
* **Variables**: Irá en Snake.
|
||||||
|
* **Constantes**: Irá en Snake Upper.
|
||||||
|
|
||||||
|
> [!#] La librería, al no trabajar entorno gráfico pues es simplemente para el lado de desarrollo, ésta no posee entradas en Kebab para clases e IDs entre otras claves. Además, por filosofía no se usa Camel, sino Pascal.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
45
Public/doc/es/manual/bits.w.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_bits
|
||||||
|
title_text = bits - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### bits
|
||||||
|
|
||||||
|
[[@ [integer] ErrorsManager.bits(!Integer|String|Array<Integer> code)]]
|
||||||
|
|
||||||
|
El método **bits** es un método objeto que retorna el número de bits que contiene el código de error, que viene siendo el número de comprobaciones Booleanas que contiene.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(errors_manager.bits(105))
|
||||||
|
print(errors_manager.bits("pB"))
|
||||||
|
print(errors_manager.bits([41, 1]))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(errors_manager.bits(105));
|
||||||
|
console.log(errors_manager.bits("pB"));
|
||||||
|
console.log(errors_manager.bits([41, 1]));
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
La respuesta en todos los casos sería 7.
|
||||||
|
|
||||||
|
> [!!] Es importante destacar que el número de Bits parte desde la última comprobación de error Booleano que dio "true", es decir, si se esperan 20 comprobaciones pero los últimos valores de comprobación son "false", es decir, que no tienen error, éstos no saldrán reflejados en el valor de bits final, a excepción de valores de relleno que pueden ser dados en los Sring y los Array.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
105
Public/doc/es/manual/bitwise.w.md
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_bitwise
|
||||||
|
title_text = bitwise - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### bitwise
|
||||||
|
|
||||||
|
[[@ [Integer] ErrorsManager.bitwise(!Integer code, !Integer bits)]]
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager.bitwise(!String code, !Integer bits)]]
|
||||||
|
|
||||||
|
[[@ [Array<Integer>] ErrorsManager.bitwise(!Array<Integer> code, !Integer bits)]]
|
||||||
|
|
||||||
|
El método **bitwise** es un método objeto nos permite hacer desplazamiento de Bit en el código de error tantos Bits como queramos, siendo el número de Bits positivo hacia la izquierda, creando los Bits requeridos; y siendo el número de Bits negativo hacia la derecha, eliminando consigo ese número de Bits por ese lado.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
options:tuple[int] = (-10, -5, -3, -1, 0, 1, 3, 5, 10)
|
||||||
|
value:int|str|list[int]
|
||||||
|
|
||||||
|
for i, value in enumerate((105, "pB", [41, 1])):
|
||||||
|
|
||||||
|
bits:int
|
||||||
|
|
||||||
|
for bits in options:
|
||||||
|
|
||||||
|
new_value:int|str|list[int] = errors_manager.bitwise(value, bits)
|
||||||
|
|
||||||
|
print((
|
||||||
|
value,
|
||||||
|
errors_manager.to_array_binary(value),
|
||||||
|
bits,
|
||||||
|
new_value,
|
||||||
|
errors_manager.to_array_binary(new_value)
|
||||||
|
))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager(),
|
||||||
|
/** @type {Array.<number>} */
|
||||||
|
options = [-10, -5, -3, -1, 0, 1, 3, 5, 10];
|
||||||
|
|
||||||
|
[105, "pB", [41, 1]].forEach((value, i) => options.forEach(bits => {
|
||||||
|
|
||||||
|
/** @type {number|String|Array.<number>} */
|
||||||
|
const new_value = errors_manager.bitwise(value, bits);
|
||||||
|
|
||||||
|
console.log([
|
||||||
|
value,
|
||||||
|
errors_manager.to_array_binary(value),
|
||||||
|
bits,
|
||||||
|
new_value,
|
||||||
|
errors_manager.to_array_binary(new_value)
|
||||||
|
]);
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
El resultado de estas pruebas son los siguientes:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Valor | Binario | Bits | Desplazado | Binario desplazado
|
||||||
|
| 105 | \["101001", "000001"] | -10 | 0 | \["000000"]
|
||||||
|
| 105 | \["101001", "000001"] | -5 | 3 | \["000011"]
|
||||||
|
| 105 | \["101001", "000001"] | -3 | 13 | \["001101"]
|
||||||
|
| 105 | \["101001", "000001"] | -1 | 52 | \["110100"]
|
||||||
|
| 105 | \["101001", "000001"] | 0 | 105 | \["101001", "000001"]
|
||||||
|
| 105 | \["101001", "000001"] | 1 | 210 | \["010010", "000011"]
|
||||||
|
| 105 | \["101001", "000001"] | 3 | 840 | \["001000", "001101"]
|
||||||
|
| 105 | \["101001", "000001"] | 5 | 3360 | \["100000", "110100"]
|
||||||
|
| 105 | \["101001", "000001"] | 10 | 107520 | \["000000", "010000", "011010"]
|
||||||
|
| "pB" | \["101001", "000001"] | -10 | "A" | \["000000"]
|
||||||
|
| "pB" | \["101001", "000001"] | -5 | "DA" | \["000011", "000000"]
|
||||||
|
| "pB" | \["101001", "000001"] | -3 | "NA" | \["001101", "000000"]
|
||||||
|
| "pB" | \["101001", "000001"] | -1 | "0A" | \["110100", "000000"]
|
||||||
|
| "pB" | \["101001", "000001"] | 0 | "pB" | \["101001", "000001"]
|
||||||
|
| "pB" | \["101001", "000001"] | 1 | "SD" | \["010010", "000011"]
|
||||||
|
| "pB" | \["101001", "000001"] | 3 | "IN" | \["001000", "001101"]
|
||||||
|
| "pB" | \["101001", "000001"] | 5 | "g0" | \["100000", "110100"]
|
||||||
|
| "pB" | \["101001", "000001"] | 10 | "AQa" | \["000000", "010000", "011010"]
|
||||||
|
| \[41, 1] | \["101001", "000001"] | -10 | \[0] | \["000000"]
|
||||||
|
| \[41, 1] | \["101001", "000001"] | -5 | \[3, 0] | \["000011", "000000"]
|
||||||
|
| \[41, 1] | \["101001", "000001"] | -3 | \[13, 0] | \["001101", "000000"]
|
||||||
|
| \[41, 1] | \["101001", "000001"] | -1 | \[52, 0] | \["110100", "000000"]
|
||||||
|
| \[41, 1] | \["101001", "000001"] | 0 | \[41, 1] | \["101001", "000001"]
|
||||||
|
| \[41, 1] | \["101001", "000001"] | 1 | \[18, 3] | \["010010", "000011"]
|
||||||
|
| \[41, 1] | \["101001", "000001"] | 3 | \[8, 13] | \["001000", "001101"]
|
||||||
|
| \[41, 1] | \["101001", "000001"] | 5 | \[32, 52] | \["100000", "110100"]
|
||||||
|
| \[41, 1] | \["101001", "000001"] | 10 | \[0, 16, 26] | \["000000", "010000", "011010"]
|
||||||
|
|]
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
78
Public/doc/es/manual/compact.w.md
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_compact
|
||||||
|
title_text = compact - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### compact
|
||||||
|
|
||||||
|
[[@ [Integer] ErrorsManager.compact(!Integer code)]]
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager.compact(!String code)]]
|
||||||
|
|
||||||
|
[[@ [Array<Integer>] ErrorsManager.compact(!Array<Integer> code)]]
|
||||||
|
|
||||||
|
El método **compact** es un método objeto que elimina los ceros a la izquierda del código de error en formao Array o String. Cuando a éste se le envía el formato Integer, éste retornará el mismo pues los valores numéricos enteros no tienen dicha propiedad.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
value:int|str|list[int]
|
||||||
|
|
||||||
|
for i, value in enumerate((105, "pBAA", [41, 1, 0, 0])):
|
||||||
|
|
||||||
|
compacted:int|str|list[int] = errors_manager.compact(value)
|
||||||
|
|
||||||
|
print([
|
||||||
|
"Prueba " + str(i),
|
||||||
|
value,
|
||||||
|
errors_manager.to_array_binary(value),
|
||||||
|
compacted,
|
||||||
|
errors_manager.to_array_binary(compacted)
|
||||||
|
])
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
[105, "pBAA", [41, 1, 0, 0]].forEach((value, i) => {
|
||||||
|
|
||||||
|
/** @type {number|String|Array.<number>} */
|
||||||
|
const compacted = errors_manager.compact(value);
|
||||||
|
|
||||||
|
console.log([
|
||||||
|
"Prueba " + i,
|
||||||
|
value,
|
||||||
|
errors_manager.to_array_binary(value),
|
||||||
|
compacted,
|
||||||
|
errors_manager.to_array_binary(compacted)
|
||||||
|
]);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
El resultado de estas pruebas son los siguientes:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Prueba | Valor | Binario | Compactado | Binario compactado
|
||||||
|
| 0 | 105 | \["101001", "000001"] | 105 | \["101001", "000001"]
|
||||||
|
| 1 | "pBAA" | \["101001", "000001", "000000", "000000"] | "pB" | \["101001", "000001"]
|
||||||
|
| 2 | \[41, 1, 0, 0] | \["101001", "000001", "000000", "000000"] | \[41, 1] | \["101001", "000001"]
|
||||||
|
|]
|
||||||
|
|
||||||
|
> [!!] Los binarios aquí representados están en base al método objeto de pruebas **to_array_binary**, y es posible que no se espere dicho binario del valor dado por su orden, pero es el método que se usa para hacer las comprobaciones pertinentes.
|
||||||
|
|
||||||
|
> [!!] Los valores compactados lo único que hacen es simplificar el valor a la mínima unidad como valor, en el caso de los String como caracteres; y en el caso de los Array como enteros, motivo por el cual, cuando salen los binarios compactados salen con ceros a la izquierda en el último bloque binario, sin embargo, podemos ver que lo que son bloques completamente 0 se eliminarán.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
42
Public/doc/es/manual/get_alphabet.w.md
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_get_alphabet
|
||||||
|
title_text = get_alphabet - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### get_alphabet
|
||||||
|
|
||||||
|
[[@ [string] ErrorsManager.get_alphabet()]]
|
||||||
|
|
||||||
|
El método **get_alphabet** es un método objeto que retorna el alfabeto actualmente en uso del objeto ErrorsManager.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
mi_alfabeto:str = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM+/"
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager(mi_alfabeto)
|
||||||
|
|
||||||
|
# Imprime mi alfabeto como alfabeto actual en uso.
|
||||||
|
print(errors_manager.get_alphabet())
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {String} */
|
||||||
|
const mi_alfabeto = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM+/",
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
errors_manager = new ErrorsManager(mi_alfabeto);
|
||||||
|
|
||||||
|
// Imprime mi alfabeto como alfabeto actual en uso.
|
||||||
|
console.log(errors_manager.get_alphabet());
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
118
Public/doc/es/manual/has.w.md
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_has
|
||||||
|
title_text = has - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### has
|
||||||
|
|
||||||
|
[[@ [Boolean] ErrorsManager.has(!Integer|String|Array<Integer> code, Integer|Array<Integer> bits)]]
|
||||||
|
|
||||||
|
El método **has** es un método objeto que verifica si hay error o no en el código dado o en un o varios bits dados.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(("Prueba 1", errors_manager.has(0)))
|
||||||
|
print(("Prueba 2", errors_manager.has("A")))
|
||||||
|
print(("Prueba 3", errors_manager.has([0, 0])))
|
||||||
|
|
||||||
|
print(("Prueba 4", errors_manager.has(105)))
|
||||||
|
print(("Prueba 5", errors_manager.has("pB")))
|
||||||
|
print(("Prueba 6", errors_manager.has([41, 1])))
|
||||||
|
|
||||||
|
print(("Prueba 7", errors_manager.has(105, 5)))
|
||||||
|
print(("Prueba 8", errors_manager.has("pB", 5)))
|
||||||
|
print(("Prueba 9", errors_manager.has([41, 1], 5)))
|
||||||
|
|
||||||
|
print(("Prueba 10", errors_manager.has(105, 4)))
|
||||||
|
print(("Prueba 11", errors_manager.has("pB", 4)))
|
||||||
|
print(("Prueba 12", errors_manager.has([41, 1], 4)))
|
||||||
|
|
||||||
|
print(("Prueba 13", errors_manager.has(105, (5, 6))))
|
||||||
|
print(("Prueba 14", errors_manager.has("pB", (5, 6))))
|
||||||
|
print(("Prueba 15", errors_manager.has([41, 1], (5, 6))))
|
||||||
|
|
||||||
|
print(("Prueba 16", errors_manager.has(105, (4, 5, 6))))
|
||||||
|
print(("Prueba 17", errors_manager.has("pB", (4, 5, 6))))
|
||||||
|
print(("Prueba 18", errors_manager.has([41, 1], (4, 5, 6))))
|
||||||
|
|
||||||
|
print(["Prueba 19", errors_manager.has(105, (1, 2))])
|
||||||
|
print(["Prueba 20", errors_manager.has("pB", (1, 2))])
|
||||||
|
print(["Prueba 121", errors_manager.has([41, 1], (1, 2))])
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(["Prueba 1", errors_manager.has(0)]);
|
||||||
|
console.log(["Prueba 2", errors_manager.has("A")]);
|
||||||
|
console.log(["Prueba 3", errors_manager.has([0, 0])]);
|
||||||
|
|
||||||
|
console.log(["Prueba 4", errors_manager.has(105)]);
|
||||||
|
console.log(["Prueba 5", errors_manager.has("pB")]);
|
||||||
|
console.log(["Prueba 6", errors_manager.has([41, 1])]);
|
||||||
|
|
||||||
|
console.log(["Prueba 7", errors_manager.has(105, 5)]);
|
||||||
|
console.log(["Prueba 8", errors_manager.has("pB", 5)]);
|
||||||
|
console.log(["Prueba 9", errors_manager.has([41, 1], 5)]);
|
||||||
|
|
||||||
|
console.log(["Prueba 10", errors_manager.has(105, 4)]);
|
||||||
|
console.log(["Prueba 11", errors_manager.has("pB", 4)]);
|
||||||
|
console.log(["Prueba 12", errors_manager.has([41, 1], 4)]);
|
||||||
|
|
||||||
|
console.log(["Prueba 13", errors_manager.has(105, [5, 6])]);
|
||||||
|
console.log(["Prueba 14", errors_manager.has("pB", [5, 6])]);
|
||||||
|
console.log(["Prueba 15", errors_manager.has([41, 1], [5, 6])]);
|
||||||
|
|
||||||
|
console.log(["Prueba 16", errors_manager.has(105, [4, 5, 6])]);
|
||||||
|
console.log(["Prueba 17", errors_manager.has("pB", [4, 5, 6])]);
|
||||||
|
console.log(["Prueba 18", errors_manager.has([41, 1], [4, 5, 6])]);
|
||||||
|
|
||||||
|
console.log(["Prueba 19", errors_manager.has(105, [1, 2])]);
|
||||||
|
console.log(["Prueba 20", errors_manager.has("pB", [1, 2])]);
|
||||||
|
console.log(["Prueba 121", errors_manager.has([41, 1], [1, 2])]);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
La respuesta a estos ejemplos sería:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Prueba | Python | JavaScript
|
||||||
|
| 1 | False | false
|
||||||
|
| 2 | False | false
|
||||||
|
| 3 | False | false
|
||||||
|
| 4 | True | true
|
||||||
|
| 5 | True | true
|
||||||
|
| 6 | True | true
|
||||||
|
| 7 | True | true
|
||||||
|
| 8 | True | true
|
||||||
|
| 9 | True | true
|
||||||
|
| 10 | False | false
|
||||||
|
| 11 | False | false
|
||||||
|
| 12 | False | false
|
||||||
|
| 13 | True | true
|
||||||
|
| 14 | True | true
|
||||||
|
| 15 | True | true
|
||||||
|
| 16 | True | true
|
||||||
|
| 17 | True | true
|
||||||
|
| 18 | True | true
|
||||||
|
| 19 | False | false
|
||||||
|
| 20 | False | false
|
||||||
|
| 21 | False | false
|
||||||
|
|]
|
||||||
|
|
||||||
|
> [!!] Cuando se especifican los Bits, éstos han de cumplirse en todos los casos.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
85
Public/doc/es/manual/has_range.w.md
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_has_range
|
||||||
|
title_text = has_range - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### has_range
|
||||||
|
|
||||||
|
[[@ [Boolean] ErrorsManager.has_range(!Integer|String|Array<Integer> code, !Integer _from, Integer _to)]]
|
||||||
|
|
||||||
|
El método **has_range** es un método objeto que verifica si hay error o no en un rango de bits del código dado o no.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(("Prueba 1", errors_manager.has_range(105, 2, 6)))
|
||||||
|
print(("Prueba 2", errors_manager.has_range("pB", 2, 6)))
|
||||||
|
print(("Prueba 3", errors_manager.has_range([41, 1], 2, 6)))
|
||||||
|
|
||||||
|
print(("Prueba 4", errors_manager.has_range(105, 1, 2)))
|
||||||
|
print(("Prueba 5", errors_manager.has_range("pB", 1, 2)))
|
||||||
|
print(("Prueba 6", errors_manager.has_range([41, 1], 1, 2)))
|
||||||
|
|
||||||
|
print(("Prueba 7", errors_manager.has_range(105, 4)))
|
||||||
|
print(("Prueba 8", errors_manager.has_range("pB", 4)))
|
||||||
|
print(("Prueba 9", errors_manager.has_range([41, 1], 4)))
|
||||||
|
|
||||||
|
print(("Prueba 10", errors_manager.has_range(105, 0, 2)))
|
||||||
|
print(("Prueba 11", errors_manager.has_range("pB", 0, 2)))
|
||||||
|
print(("Prueba 12", errors_manager.has_range([41, 1], 0, 2)))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(("Prueba 1", errors_manager.has_range(105, 2, 6)));
|
||||||
|
console.log(("Prueba 2", errors_manager.has_range("pB", 2, 6)));
|
||||||
|
console.log(("Prueba 3", errors_manager.has_range([41, 1], 2, 6)));
|
||||||
|
|
||||||
|
console.log(("Prueba 4", errors_manager.has_range(105, 1, 2)));
|
||||||
|
console.log(("Prueba 5", errors_manager.has_range("pB", 1, 2)));
|
||||||
|
console.log(("Prueba 6", errors_manager.has_range([41, 1], 1, 2)));
|
||||||
|
|
||||||
|
console.log(("Prueba 7", errors_manager.has_range(105, 4)));
|
||||||
|
console.log(("Prueba 8", errors_manager.has_range("pB", 4)));
|
||||||
|
console.log(("Prueba 9", errors_manager.has_range([41, 1], 4)));
|
||||||
|
|
||||||
|
console.log(("Prueba 10", errors_manager.has_range(105, 0, 2)));
|
||||||
|
console.log(("Prueba 11", errors_manager.has_range("pB", 0, 2)));
|
||||||
|
console.log(("Prueba 12", errors_manager.has_range([41, 1], 0, 2)));
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
La respuesta a estos ejemplos sería:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Prueba | Python | JavaScript
|
||||||
|
| 1 | True | true
|
||||||
|
| 2 | True | true
|
||||||
|
| 3 | True | true
|
||||||
|
| 4 | False | false
|
||||||
|
| 5 | False | false
|
||||||
|
| 6 | False | false
|
||||||
|
| 7 | False | false
|
||||||
|
| 8 | False | false
|
||||||
|
| 9 | False | false
|
||||||
|
| 10 | True | true
|
||||||
|
| 11 | True | true
|
||||||
|
| 12 | True | true
|
||||||
|
|]
|
||||||
|
|
||||||
|
> [!!] El atributo **_from** es obligatorio, sin embargo, el atributo **_to** es opcional. Cuando **_to** no está definido se entiende que es hasta el último Bit.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
89
Public/doc/es/manual/is_array.w.md
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_is_array
|
||||||
|
title_text = is_array - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### is_array
|
||||||
|
|
||||||
|
[[@ [Boolean] ErrorsManager:is_array(!?Any value)]]
|
||||||
|
|
||||||
|
El método **is_array** es un método estático que verifica si el valor dado es un Array o no, y en caso de estar en entornos como Python, hablamos de si son Listas o Tuplas.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(["Prueba 1", errors_manager.is_array("")])
|
||||||
|
print(["Prueba 2", errors_manager.is_array("Hola xD")])
|
||||||
|
print(["Prueba 3", errors_manager.is_array(None)])
|
||||||
|
print(["Prueba 4", errors_manager.is_array(5)])
|
||||||
|
print(["Prueba 5", errors_manager.is_array(-8)])
|
||||||
|
print(["Prueba 6", errors_manager.is_array(-104.56)])
|
||||||
|
print(["Prueba 7", errors_manager.is_array(6.007)])
|
||||||
|
print(["Prueba 8", errors_manager.is_array(.345)])
|
||||||
|
print(["Prueba 9", errors_manager.is_array(ErrorsManager)])
|
||||||
|
print(["Prueba 10", errors_manager.is_array(errors_manager)])
|
||||||
|
print(["Prueba 11", errors_manager.is_array(["Esto es un String"])])
|
||||||
|
print(["Prueba 12", errors_manager.is_array(['S', 't', 'r', 'i', 'n', 'g'])])
|
||||||
|
print(["Prueba 13", errors_manager.is_array(True)])
|
||||||
|
print(["Prueba 14", errors_manager.is_array(False)])
|
||||||
|
print(["Prueba 15", errors_manager.is_array((True,))])
|
||||||
|
print(["Prueba 16", errors_manager.is_array([2, 45, 18, 24])])
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(["Prueba 1", errors_manager.is_array("")]);
|
||||||
|
console.log(["Prueba 2", errors_manager.is_array("Hola xD")]);
|
||||||
|
console.log(["Prueba 3", errors_manager.is_array(null)]);
|
||||||
|
console.log(["Prueba 4", errors_manager.is_array(5)]);
|
||||||
|
console.log(["Prueba 5", errors_manager.is_array(-8)]);
|
||||||
|
console.log(["Prueba 6", errors_manager.is_array(-104.56)]);
|
||||||
|
console.log(["Prueba 7", errors_manager.is_array(6.007)]);
|
||||||
|
console.log(["Prueba 8", errors_manager.is_array(.345)]);
|
||||||
|
console.log(["Prueba 9", errors_manager.is_array(ErrorsManager)]);
|
||||||
|
console.log(["Prueba 10", errors_manager.is_array(errors_manager)]);
|
||||||
|
console.log(["Prueba 11", errors_manager.is_array(["Esto es un String"])]);
|
||||||
|
console.log(["Prueba 12", errors_manager.is_array(['S', 't', 'r', 'i', 'n', 'g'])]);
|
||||||
|
console.log(["Prueba 13", errors_manager.is_array(true)]);
|
||||||
|
console.log(["Prueba 14", errors_manager.is_array(false)]);
|
||||||
|
console.log(["Prueba 15", errors_manager.is_array([true])]);
|
||||||
|
console.log(["Prueba 16", errors_manager.is_array([2, 45, 18, 24])]);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
En los ejemplos anteriores sacaríamos los siguientes resultados:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Prueba | Python | JavaScript
|
||||||
|
| 1 | False | false
|
||||||
|
| 2 | False | false
|
||||||
|
| 3 | False | false
|
||||||
|
| 4 | False | false
|
||||||
|
| 5 | False | false
|
||||||
|
| 6 | False | false
|
||||||
|
| 7 | False | false
|
||||||
|
| 8 | False | false
|
||||||
|
| 9 | False | false
|
||||||
|
| 10 | False | false
|
||||||
|
| 11 | True | true
|
||||||
|
| 12 | True | true
|
||||||
|
| 13 | False | false
|
||||||
|
| 14 | False | false
|
||||||
|
| 15 | True | true
|
||||||
|
| 16 | True | true
|
||||||
|
|]
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
89
Public/doc/es/manual/is_integer.w.md
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_is_integer
|
||||||
|
title_text = is_integer - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### is_integer
|
||||||
|
|
||||||
|
[[@ [Boolean] ErrorsManager:is_integer(!?Any value)]]
|
||||||
|
|
||||||
|
El método **is_integer** es un método estático que verifica si el valor dado es un un valor numérico entero o no.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(["Prueba 1", errors_manager.is_integer("")])
|
||||||
|
print(["Prueba 2", errors_manager.is_integer("Hola xD")])
|
||||||
|
print(["Prueba 3", errors_manager.is_integer(None)])
|
||||||
|
print(["Prueba 4", errors_manager.is_integer(5)])
|
||||||
|
print(["Prueba 5", errors_manager.is_integer(-8)])
|
||||||
|
print(["Prueba 6", errors_manager.is_integer(-104.56)])
|
||||||
|
print(["Prueba 7", errors_manager.is_integer(6.007)])
|
||||||
|
print(["Prueba 8", errors_manager.is_integer(.345)])
|
||||||
|
print(["Prueba 9", errors_manager.is_integer(ErrorsManager)])
|
||||||
|
print(["Prueba 10", errors_manager.is_integer(errors_manager)])
|
||||||
|
print(["Prueba 11", errors_manager.is_integer(["Esto es un String"])])
|
||||||
|
print(["Prueba 12", errors_manager.is_integer(['S', 't', 'r', 'i', 'n', 'g'])])
|
||||||
|
print(["Prueba 13", errors_manager.is_integer(True)])
|
||||||
|
print(["Prueba 14", errors_manager.is_integer(False)])
|
||||||
|
print(["Prueba 15", errors_manager.is_integer((True,))])
|
||||||
|
print(["Prueba 16", errors_manager.is_integer([2, 45, 18, 24])])
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(["Prueba 1", errors_manager.is_integer("")]);
|
||||||
|
console.log(["Prueba 2", errors_manager.is_integer("Hola xD")]);
|
||||||
|
console.log(["Prueba 3", errors_manager.is_integer(null)]);
|
||||||
|
console.log(["Prueba 4", errors_manager.is_integer(5)]);
|
||||||
|
console.log(["Prueba 5", errors_manager.is_integer(-8)]);
|
||||||
|
console.log(["Prueba 6", errors_manager.is_integer(-104.56)]);
|
||||||
|
console.log(["Prueba 7", errors_manager.is_integer(6.007)]);
|
||||||
|
console.log(["Prueba 8", errors_manager.is_integer(.345)]);
|
||||||
|
console.log(["Prueba 9", errors_manager.is_integer(ErrorsManager)]);
|
||||||
|
console.log(["Prueba 10", errors_manager.is_integer(errors_manager)]);
|
||||||
|
console.log(["Prueba 11", errors_manager.is_integer(["Esto es un String"])]);
|
||||||
|
console.log(["Prueba 12", errors_manager.is_integer(['S', 't', 'r', 'i', 'n', 'g'])]);
|
||||||
|
console.log(["Prueba 13", errors_manager.is_integer(true)]);
|
||||||
|
console.log(["Prueba 14", errors_manager.is_integer(false)]);
|
||||||
|
console.log(["Prueba 15", errors_manager.is_integer([true])]);
|
||||||
|
console.log(["Prueba 16", errors_manager.is_integer([2, 45, 18, 24])]);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
En los ejemplos anteriores sacaríamos los siguientes resultados:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Prueba | Python | JavaScript
|
||||||
|
| 1 | False | false
|
||||||
|
| 2 | False | false
|
||||||
|
| 3 | False | false
|
||||||
|
| 4 | True | true
|
||||||
|
| 5 | True | true
|
||||||
|
| 6 | False | false
|
||||||
|
| 7 | False | false
|
||||||
|
| 8 | False | false
|
||||||
|
| 9 | False | false
|
||||||
|
| 10 | False | false
|
||||||
|
| 11 | False | false
|
||||||
|
| 12 | False | false
|
||||||
|
| 13 | False | false
|
||||||
|
| 14 | False | false
|
||||||
|
| 15 | False | false
|
||||||
|
| 16 | False | false
|
||||||
|
|]
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
89
Public/doc/es/manual/is_string.w.md
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_is_string
|
||||||
|
title_text = is_string - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### is_string
|
||||||
|
|
||||||
|
[[@ [Boolean] ErrorsManager:is_string(!?Any value)]]
|
||||||
|
|
||||||
|
El método **is_string** es un método estático que verifica si el valor dado es un String o no.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(["Prueba 1", errors_manager.is_string("")])
|
||||||
|
print(["Prueba 2", errors_manager.is_string("Hola xD")])
|
||||||
|
print(["Prueba 3", errors_manager.is_string(None)])
|
||||||
|
print(["Prueba 4", errors_manager.is_string(5)])
|
||||||
|
print(["Prueba 5", errors_manager.is_string(-8)])
|
||||||
|
print(["Prueba 6", errors_manager.is_string(-104.56)])
|
||||||
|
print(["Prueba 7", errors_manager.is_string(6.007)])
|
||||||
|
print(["Prueba 8", errors_manager.is_string(.345)])
|
||||||
|
print(["Prueba 9", errors_manager.is_string(ErrorsManager)])
|
||||||
|
print(["Prueba 10", errors_manager.is_string(errors_manager)])
|
||||||
|
print(["Prueba 11", errors_manager.is_string(["Esto es un String"])])
|
||||||
|
print(["Prueba 12", errors_manager.is_string(['S', 't', 'r', 'i', 'n', 'g'])])
|
||||||
|
print(["Prueba 13", errors_manager.is_string(True)])
|
||||||
|
print(["Prueba 14", errors_manager.is_string(False)])
|
||||||
|
print(["Prueba 15", errors_manager.is_string((True,))])
|
||||||
|
print(["Prueba 16", errors_manager.is_string([2, 45, 18, 24])])
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(["Prueba 1", errors_manager.is_string("")]);
|
||||||
|
console.log(["Prueba 2", errors_manager.is_string("Hola xD")]);
|
||||||
|
console.log(["Prueba 3", errors_manager.is_string(null)]);
|
||||||
|
console.log(["Prueba 4", errors_manager.is_string(5)]);
|
||||||
|
console.log(["Prueba 5", errors_manager.is_string(-8)]);
|
||||||
|
console.log(["Prueba 6", errors_manager.is_string(-104.56)]);
|
||||||
|
console.log(["Prueba 7", errors_manager.is_string(6.007)]);
|
||||||
|
console.log(["Prueba 8", errors_manager.is_string(.345)]);
|
||||||
|
console.log(["Prueba 9", errors_manager.is_string(ErrorsManager)]);
|
||||||
|
console.log(["Prueba 10", errors_manager.is_string(errors_manager)]);
|
||||||
|
console.log(["Prueba 11", errors_manager.is_string(["Esto es un String"])]);
|
||||||
|
console.log(["Prueba 12", errors_manager.is_string(['S', 't', 'r', 'i', 'n', 'g'])]);
|
||||||
|
console.log(["Prueba 13", errors_manager.is_string(true)]);
|
||||||
|
console.log(["Prueba 14", errors_manager.is_string(false)]);
|
||||||
|
console.log(["Prueba 15", errors_manager.is_string([true])]);
|
||||||
|
console.log(["Prueba 16", errors_manager.is_string([2, 45, 18, 24])]);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
En los ejemplos anteriores sacaríamos los siguientes resultados:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Prueba | Python | JavaScript
|
||||||
|
| 1 | True | true
|
||||||
|
| 2 | True | true
|
||||||
|
| 3 | True | true
|
||||||
|
| 4 | False | false
|
||||||
|
| 5 | False | false
|
||||||
|
| 6 | False | false
|
||||||
|
| 7 | False | false
|
||||||
|
| 8 | False | false
|
||||||
|
| 9 | False | false
|
||||||
|
| 10 | False | false
|
||||||
|
| 11 | False | false
|
||||||
|
| 12 | False | false
|
||||||
|
| 13 | False | false
|
||||||
|
| 14 | False | false
|
||||||
|
| 15 | False | false
|
||||||
|
| 16 | False | false
|
||||||
|
|]
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
26
Public/doc/es/manual/join.w.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_join
|
||||||
|
title_text = join - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### join
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager.set(!String code, !string error, Integer bit = 0, Integer length = 0)]]
|
||||||
|
|
||||||
|
El método **join** es un método objeto que nos permite realizar dos acciones:
|
||||||
|
|
||||||
|
* Unir dos códigos de error en formato String, el segundo sobre el primero en la posición dada.
|
||||||
|
* Y también nos permite resetear Bits del código de error a 0.
|
||||||
|
|
||||||
|
Ambas funciones de unir códigos y resetear a cero son mezclables, es decir, cuando se une un segundo código de error en formato String, éste se une mediante "OR" al código actual desde la posición que se le determine, por tanto, si lo que se quiere es substituir Bits lo que hay que hacer es pasar a cero los Bits que se crean que vayan a ser alterados.
|
||||||
|
|
||||||
|
> [!!] Es importante destacar que en lenguajes de tipados flexibles como JavaScript, esta función puede cubrir no sólo códigos de error en formato numérico String sino también en Integer y Array, y es el motivo por el cual se puede encontrar este método como unificado en dichos entornos. Para este motivo tendríamos la siguiente estructura de método.
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager.join(!(String|Integer|Array<Integer>) code, !(String|Integer|Array<Integer>) error, Integer bit = 0, Integer length = 0)]]
|
||||||
|
|
||||||
|
> [!!] Para lenguajes rígidos como los SQL, C#, etc. Para poder integrar otro código de error Integer es necesario llamar al método "set" en vez de a éste, en los lenguajes flexibles puede hacerse uso de ambos.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
85
Public/doc/es/manual/process.w.md
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_process
|
||||||
|
title_text = process - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### process
|
||||||
|
|
||||||
|
[[@ [Array<Array<Integer, String>>] ErrorsManager.process(!Integer|String|Array<Integer> code, !Array<String> messages)]]
|
||||||
|
|
||||||
|
El método **process** es un método objeto que retorna el alfabeto actualmente en uso del objeto ErrorsManager.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
i:int
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
error_messages:tuple[str] = ["error_message_" + str(i) for i in range(16)]
|
||||||
|
|
||||||
|
print(errors_manager.process(105, error_messages))
|
||||||
|
print(errors_manager.process("pB", error_messages))
|
||||||
|
print(errors_manager.process([41, 1], error_messages))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager(),
|
||||||
|
/** @type {Array.<String>} */
|
||||||
|
error_messages = "0123456789abcdef".split("").map((_, i) => "error_message_" + i);
|
||||||
|
|
||||||
|
console.log(errors_manager.process(105, error_messages));
|
||||||
|
console.log(errors_manager.process("pB", error_messages));
|
||||||
|
console.log(errors_manager.process([41, 1], error_messages));
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
El resultado de estas pruebas es:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= i | Bit | Mensaje
|
||||||
|
| 0 | 0 | error_message_0
|
||||||
|
| 3 | 3 | error_message_3
|
||||||
|
| 5 | 5 | error_message_5
|
||||||
|
| 6 | 6 | error_message_6
|
||||||
|
|]
|
||||||
|
|
||||||
|
Esto viene siendo porque el código de error se puede ver de la siguiente forma:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Byte | String | Array | Binario
|
||||||
|
| 0 | p | 41 | 101001
|
||||||
|
| 1 | B | 1 | 000001
|
||||||
|
|]
|
||||||
|
|
||||||
|
Si unimos todos los valores en un único binario tendríamos:
|
||||||
|
|
||||||
|
``105 = \[1, 41] = \[000001, 101001] = 000001101001 = 1101001``
|
||||||
|
|
||||||
|
Si miramos las posiciones de los bytes tenemos:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Bit | Valor | Mensaje
|
||||||
|
| 0 | 1 | error_message_0
|
||||||
|
| 1 | 0 |
|
||||||
|
| 2 | 0 |
|
||||||
|
| 3 | 1 | error_message_3
|
||||||
|
| 4 | 0 |
|
||||||
|
| 5 | 1 | error_message_5
|
||||||
|
| 6 | 1 | error_message_6
|
||||||
|
| 7 | 0 |
|
||||||
|
| 8 | 0 |
|
||||||
|
| 9 | 0 |
|
||||||
|
| 10 | 0 |
|
||||||
|
| 11 | 0 |
|
||||||
|
|]
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
26
Public/doc/es/manual/set.w.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_set
|
||||||
|
title_text = set - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### set
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager.set(!String code, !Integer error, Integer bit = 0, Integer length = 0)]]
|
||||||
|
|
||||||
|
El método **set** es un método objeto que nos permite realizar dos acciones:
|
||||||
|
|
||||||
|
* Establecer un valor numérico a nuestro código de error en formato String actual en una posición específica.
|
||||||
|
* Y también nos permite resetear Bits del código de error a 0.
|
||||||
|
|
||||||
|
Ambas funciones de establecer valor y resetear a cero son mezclables, es decir, cuando se establece un valor, éste se une mediante "OR" al código actual desde la posición que se le determine, por tanto, si lo que se quiere es substituir Bits lo que hay que hacer es pasar a cero los Bits que se crean que vayan a ser alterados.
|
||||||
|
|
||||||
|
> [!!] Es importante destacar que en lenguajes de tipados flexibles como JavaScript, esta función puede cubrir no sólo códigos de error en formato numérico entero sino también en String y Array, y es el motivo por el cual se puede encontrar este método como unificado en dichos entornos. Para este motivo tendríamos la siguiente estructura de método.
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager.set(!(String|Integer|Array<Integer>) code, !(String|Integer|Array<Integer>) error, Integer bit = 0, Integer length = 0)]]
|
||||||
|
|
||||||
|
> [!!] Para lenguajes rígidos como los SQL, C#, etc. Para poder integrar otro código de error String es necesario llamar al método "join" en vez de a éste, en los lenguajes flexibles puede hacerse uso de ambos.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
54
Public/doc/es/manual/set_alphabet.w.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_set_alphabet
|
||||||
|
title_text = set_alphabet - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### set_alphabet
|
||||||
|
|
||||||
|
[[@ ErrorsManager.set_alphabet(?!String alphabet)]]
|
||||||
|
|
||||||
|
El método **set_alphabet** es un método objeto para establecer de forma externa al objeto, el alfabeto que determinará el código resultante de error y que condicionará su interpretación. Dicha función tendrá de entrada la nueva cadena la cual será un String de al menos 64 caracteres, y éstos han de ser distintos entre sí o funcionará mal. No hay retorno.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
nuevo_alfabeto:str = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM+/"
|
||||||
|
|
||||||
|
# Imprime el alfabeto por defecto.
|
||||||
|
print(errors_manager.get_alphabet())
|
||||||
|
|
||||||
|
errors_manager.set_alphabet(nuevo_alfabeto)
|
||||||
|
|
||||||
|
# Imprime el nuevo alfabeto con su nuevo orden.
|
||||||
|
print(errors_manager.get_alphabet())
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager(),
|
||||||
|
/** @type {String} */
|
||||||
|
nuevo_alfabeto = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM+/";
|
||||||
|
|
||||||
|
// Imprime el alfabeto por defecto.
|
||||||
|
console.log(errors_manager.get_alphabet());
|
||||||
|
|
||||||
|
errors_manager.set_alphabet(nuevo_alfabeto);
|
||||||
|
|
||||||
|
// Imprime el nuevo alfabeto con su nuevo orden.
|
||||||
|
console.log(errors_manager.get_alphabet());
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!!] Se pueden cambiar los caracteres por otros que no sean necesariamente de base64, sin embargo, hay que tener en cuenta la compatibilidad entre plataformas e interpretación de dichos caracteres tanto en el traspaso de una plataforma a otra así como en la capacidad del lenguaje que se esté trabajando. Se aconseja ir siempre a la parte más restrictiva del proyecto.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
26
Public/doc/es/manual/set_blocks.w.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_set_blocks
|
||||||
|
title_text = set_blocks - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### set_blocks
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager.set_blocks(!String code, !Array.<Integer> blocks, Integer bit = 0, Integer length = 0)]]
|
||||||
|
|
||||||
|
El método **set_blocks** es un método objeto que nos permite realizar dos acciones:
|
||||||
|
|
||||||
|
* Establecer uno o más códigos de error en formato Integer sobre otro en formato String ya dado.
|
||||||
|
* Y también nos permite resetear Bits del código de error a 0.
|
||||||
|
|
||||||
|
Ambas funciones de establecer valor y resetear a cero son mezclables, es decir, cuando se establece un valor, éste se une mediante "OR" al código actual desde la posición que se le determine, por tanto, si lo que se quiere es substituir Bits lo que hay que hacer es pasar a cero los Bits que se crean que vayan a ser alterados.
|
||||||
|
|
||||||
|
> [!!] Es importante destacar que en lenguajes de tipados flexibles como JavaScript, esta función puede cubrir no sólo códigos de error en formato numérico entero sino también en String y Array, y es el motivo por el cual se puede encontrar este método como unificado en dichos entornos. Para este motivo tendríamos la siguiente estructura de método.
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager.set(!(String|Integer|Array<Integer>) code, !(String|Integer|Array<Integer>) error, Integer bit = 0, Integer length = 0)]]
|
||||||
|
|
||||||
|
> [!!] Para lenguajes rígidos como los SQL, C#, etc. Para poder integrar otro código de error String es necesario llamar al método "join" en vez de a éste, en los lenguajes flexibles puede hacerse uso de ambos.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
53
Public/doc/es/manual/to_array.w.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_to_array
|
||||||
|
title_text = to_array - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### to_array
|
||||||
|
|
||||||
|
[[@ [Array<Integer>] ErrorsManager.to_array(!Integer|String|Array<Integer> code, Integer length)]]
|
||||||
|
|
||||||
|
El método **to_array** es un método objeto que transforma un código de error cualquiera en un código de error de tipo Array con la opción de especificar bits de relleno con 0.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(errors_manager.to_array(105))
|
||||||
|
print(errors_manager.to_array("pB"))
|
||||||
|
print(errors_manager.to_array([41, 1]))
|
||||||
|
|
||||||
|
print(errors_manager.to_array(105, 20))
|
||||||
|
print(errors_manager.to_array("pB", 20))
|
||||||
|
print(errors_manager.to_array([41, 1], 20))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(errors_manager.to_array(105));
|
||||||
|
console.log(errors_manager.to_array("pB"));
|
||||||
|
console.log(errors_manager.to_array([41, 1]));
|
||||||
|
|
||||||
|
console.log(errors_manager.to_array(105, 20));
|
||||||
|
console.log(errors_manager.to_array("pB", 20));
|
||||||
|
console.log(errors_manager.to_array([41, 1], 20));
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
La respuesta en 3 primeros casos sería el Array \[41, 1], mientras que en los otros 3 sería \[41, 1, 0, 0].
|
||||||
|
|
||||||
|
> [!!] Si se especifica el valor "length", éste rellenará el Array con tantos 0 como requiera.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
45
Public/doc/es/manual/to_array_binary.w.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_to_array_binary
|
||||||
|
title_text = to_array_binary - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### to_array_binary
|
||||||
|
|
||||||
|
[[@ [Array<String>] ErrorsManager.to_array_binary(!Integer|String|Array<Integer> code)]]
|
||||||
|
|
||||||
|
El método **to_array_binary** es un método objeto que transforma un código de error cualquiera en un Array de hexas en binario en formato String.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(errors_manager.to_array_binary(105))
|
||||||
|
print(errors_manager.to_array_binary("pB"))
|
||||||
|
print(errors_manager.to_array_binary([41, 1]))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(errors_manager.to_array_binary(105));
|
||||||
|
console.log(errors_manager.to_array_binary("pB"));
|
||||||
|
console.log(errors_manager.to_array_binary([41, 1]));
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
La respuesta en todos los casos sería el Array \["101001", "000001"].
|
||||||
|
|
||||||
|
> [!!] El valor devuelto por este método no es trabajable como código de error pues sólo existe a modo de comprobaciones.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
45
Public/doc/es/manual/to_integer.w.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_to_integer
|
||||||
|
title_text = to_integer - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### to_integer
|
||||||
|
|
||||||
|
[[@ [Integer] ErrorsManager.to_integer(!Integer|String|Array<Integer> code)]]
|
||||||
|
|
||||||
|
El método **to_integer** es un método objeto que transforma un código de error cualquiera en un código de error de tipo Integer.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(errors_manager.to_integer(105))
|
||||||
|
print(errors_manager.to_integer("pB"))
|
||||||
|
print(errors_manager.to_integer([41, 1]))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(errors_manager.to_integer(105));
|
||||||
|
console.log(errors_manager.to_integer("pB"));
|
||||||
|
console.log(errors_manager.to_integer([41, 1]));
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
La respuesta en todos los casos sería el valor numérico entero 105.
|
||||||
|
|
||||||
|
> [!! IMPORTANTE] Si el código de error tiene más Bits de los que puede trabajar el lenguaje donde se encuentra la librería, éste detendrá el proceso con una Excepción.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
53
Public/doc/es/manual/to_string.w.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_to_string
|
||||||
|
title_text = to_string - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### to_string
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager.to_string(!Integer|String|Array<Integer> code, Integer length)]]
|
||||||
|
|
||||||
|
El método **to_string** es un método objeto que transforma un código de error cualquiera en un código de error de tipo String con la opción de especificar bits de relleno con el equivalente a 0 en el alfabeto seleccionado.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(errors_manager.to_string(105))
|
||||||
|
print(errors_manager.to_string("pB"))
|
||||||
|
print(errors_manager.to_string([41, 1]))
|
||||||
|
|
||||||
|
print(errors_manager.to_string(105, 20))
|
||||||
|
print(errors_manager.to_string("pB", 20))
|
||||||
|
print(errors_manager.to_string([41, 1], 20))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(errors_manager.to_string(105));
|
||||||
|
console.log(errors_manager.to_string("pB"));
|
||||||
|
console.log(errors_manager.to_string([41, 1]));
|
||||||
|
|
||||||
|
console.log(errors_manager.to_string(105, 20));
|
||||||
|
console.log(errors_manager.to_string("pB", 20));
|
||||||
|
console.log(errors_manager.to_string([41, 1], 20));
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
La respuesta en 3 primeros casos sería el String "pB", mientras que en los otros 3 sería "pBAA".
|
||||||
|
|
||||||
|
> [!!] Si se especifica el valor "length", éste rellenará el String con tantos caracteres equivalentes a 0 como requiera. En el caso de ser el alfabeto por defecto, es decir, un Base64, el caracter equivalente a 0 es el caracter "A".
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
59
Public/doc/es/manual/to_unknown.w.md
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_to_unknown
|
||||||
|
title_text = to_unknown - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### to_unknown
|
||||||
|
|
||||||
|
[[@ [Any|null] ErrorsManager.to_unknown(?Any code)]]
|
||||||
|
|
||||||
|
El método **to_unknown** es un método objeto que sirve para ejecutar en caso de ser un tipado no conocido por la librería como código de error. Básicamente retorna el mismo valor que se le da.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(["Prueba 1", errors_manager.to_unknown(105)])
|
||||||
|
print(["Prueba 2", errors_manager.to_unknown("pB")])
|
||||||
|
print(["Prueba 3", errors_manager.to_unknown([41, 1])])
|
||||||
|
print(["Prueba 4", errors_manager.to_unknown(None)])
|
||||||
|
print(["Prueba 5", errors_manager.to_unknown(errors_manager)])
|
||||||
|
print(["Prueba 5", errors_manager.to_unknown(True)])
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(["Prueba 1", errors_manager.to_unknown(105)]);
|
||||||
|
console.log(["Prueba 2", errors_manager.to_unknown("pB")]);
|
||||||
|
console.log(["Prueba 3", errors_manager.to_unknown([41, 1])]);
|
||||||
|
console.log(["Prueba 4", errors_manager.to_unknown(null)]);
|
||||||
|
console.log(["Prueba 5", errors_manager.to_unknown(errors_manager)]);
|
||||||
|
console.log(["Prueba 5", errors_manager.to_unknown(true)]);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Los resultados serían los siguientes:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Prueba | Python | Javascript
|
||||||
|
| 1 || 105
|
||||||
|
| 2 || "pB"
|
||||||
|
| 3 || \[41, 1]
|
||||||
|
| 4 | None | null
|
||||||
|
| 5 || errors_manager\[ErrorsManager]
|
||||||
|
| 6 | True | true
|
||||||
|
|]
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
96
Public/doc/es/manual/type.w.md
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_type
|
||||||
|
title_text = type - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
### type
|
||||||
|
|
||||||
|
[[@ [String] ErrorsManager:type(!?Any value)]]
|
||||||
|
|
||||||
|
El método **type** es un método estático que retorna el tipado de una variable con respecto a si es:
|
||||||
|
|
||||||
|
* **[[!string]]**: Si es un texto.
|
||||||
|
* **[[!integer]]**: Si es un valor numérico entero.
|
||||||
|
* **[[!array]]**: Si es un Array, Vector, Lista, Tupla, etc. De valores numéricos enteros.
|
||||||
|
* **[[!unknown]]**: Si no es ninguno de los tipos anteriores.
|
||||||
|
|
||||||
|
> [!!] La librería sólo trabaja los tipados String, Integer y Array de enteros. Si es otro tipado, ésta lo tomará como desconocido y lo tratará como algo inesperado o un error, pero no hará saltar una Excepción.
|
||||||
|
|
||||||
|
```py
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Assets.ErrorsManager import ErrorsManager
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(["Prueba 1", errors_manager.type("")])
|
||||||
|
print(["Prueba 2", errors_manager.type("Hola xD")])
|
||||||
|
print(["Prueba 3", errors_manager.type(None)])
|
||||||
|
print(["Prueba 4", errors_manager.type(5)])
|
||||||
|
print(["Prueba 5", errors_manager.type(-8)])
|
||||||
|
print(["Prueba 6", errors_manager.type(-104.56)])
|
||||||
|
print(["Prueba 7", errors_manager.type(6.007)])
|
||||||
|
print(["Prueba 8", errors_manager.type(.345)])
|
||||||
|
print(["Prueba 9", errors_manager.type(ErrorsManager)])
|
||||||
|
print(["Prueba 10", errors_manager.type(errors_manager)])
|
||||||
|
print(["Prueba 11", errors_manager.type(["Esto es un String"])])
|
||||||
|
print(["Prueba 12", errors_manager.type(['S', 't', 'r', 'i', 'n', 'g'])])
|
||||||
|
print(["Prueba 13", errors_manager.type(True)])
|
||||||
|
print(["Prueba 14", errors_manager.type(False)])
|
||||||
|
print(["Prueba 15", errors_manager.type((True,))])
|
||||||
|
print(["Prueba 16", errors_manager.type([2, 45, 18, 24])])
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(["Prueba 1", errors_manager.type("")]);
|
||||||
|
console.log(["Prueba 2", errors_manager.type("Hola xD")]);
|
||||||
|
console.log(["Prueba 3", errors_manager.type(null)]);
|
||||||
|
console.log(["Prueba 4", errors_manager.type(5)]);
|
||||||
|
console.log(["Prueba 5", errors_manager.type(-8)]);
|
||||||
|
console.log(["Prueba 6", errors_manager.type(-104.56)]);
|
||||||
|
console.log(["Prueba 7", errors_manager.type(6.007)]);
|
||||||
|
console.log(["Prueba 8", errors_manager.type(.345)]);
|
||||||
|
console.log(["Prueba 9", errors_manager.type(ErrorsManager)]);
|
||||||
|
console.log(["Prueba 10", errors_manager.type(errors_manager)]);
|
||||||
|
console.log(["Prueba 11", errors_manager.type(["Esto es un String"])]);
|
||||||
|
console.log(["Prueba 12", errors_manager.type(['S', 't', 'r', 'i', 'n', 'g'])]);
|
||||||
|
console.log(["Prueba 13", errors_manager.type(true)]);
|
||||||
|
console.log(["Prueba 14", errors_manager.type(false)]);
|
||||||
|
console.log(["Prueba 15", errors_manager.type([true])]);
|
||||||
|
console.log(["Prueba 16", errors_manager.type([2, 45, 18, 24])]);
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
En los ejemplos anteriores sacaríamos los siguientes resultados:
|
||||||
|
|
||||||
|
[|
|
||||||
|
|= Prueba | Python | JavaScript
|
||||||
|
| 1 | [[!string]] | [[!string]]
|
||||||
|
| 2 | [[!string]] | [[!string]]
|
||||||
|
| 3 | [[!unknown]] | [[!unknown]]
|
||||||
|
| 4 | [[!integer]] | [[!integer]]
|
||||||
|
| 5 | [[!integer]] | [[!integer]]
|
||||||
|
| 6 | [[!unknown]] | [[!unknown]]
|
||||||
|
| 7 | [[!unknown]] | [[!unknown]]
|
||||||
|
| 8 | [[!unknown]] | [[!unknown]]
|
||||||
|
| 9 | [[!unknown]] | [[!unknown]]
|
||||||
|
| 10 | [[!unknown]] | [[!unknown]]
|
||||||
|
| 11 | [[!array]] | [[!array]]
|
||||||
|
| 12 | [[!array]] | [[!array]]
|
||||||
|
| 13 | [[!unknown]] | [[!unknown]]
|
||||||
|
| 14 | [[!unknown]] | [[!unknown]]
|
||||||
|
| 15 | [[!array]] | [[!array]]
|
||||||
|
| 16 | [[!array]] | [[!array]]
|
||||||
|
|]
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
17
Public/doc/es/opinions.w.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_opinions
|
||||||
|
title_text = Opiniones y comentarios - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
## Opiniones y comentarios
|
||||||
|
|
||||||
|
Esta sección va dedicada a publicar las opiniones y comentarios de usuarios cercanos a los desarrolladores del proyecto para que halla una visión externa a éste, aprobechando la confianza en éstos tanto para lo bueno como para lo malo.
|
||||||
|
|
||||||
|
> [!@Srx00] Quería agradecer personalmente a todos aquellos que me han dado una opinión y/o comentario acerca de este proyecto. Lo valoro mucho pues sea como crítica para aprender como apoyo a continuar con este tipo de trabajos, me son realmente importantes. ¡Muchas gracias!
|
||||||
|
|
||||||
|
> [!@Srx00] Como opinión personal, es un proyecto raro, que le da mayor complejidad a la aplicación en desarrollo como cuando le metes cualquier librería que añade una nueva funcionalidad, sin embargo, es cierto que si lo vemos desde el punto de vista de la gestión de errores, creo, a nivel personal, por mi experiencia, que éste puede ser una herramienta fuerte para gestionar los errores tanto a nivel local como entre plataformas o diferentes entornos del lenguaje dentro de un mismo proyecto, sin embargo, creo de vital importancia destacar que si se puede omitir el uso de dichas funciones, por ejemplo, para aquellos errores que contengan menos de 28 verificaciones, ahorraría tanto coste de dificultad como coste de proceso. Al ser una herramienta compatible directamente con enteros, es una forma de darle eficiencia a tu proyecto y no rompería mucho la estructura de funcionamiento con esta librería en la medida de lo posible.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
48
Public/doc/es/projects.w.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_projects
|
||||||
|
title_text = Proyectos - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
## Proyectos
|
||||||
|
|
||||||
|
Este proyecto es independiente a nivel de funcionamiento como librería, independientemente del lenguaje que se esté utilizando, sin embargo, a nivel de página Web, éste hace uso de los siguientes proyectos.
|
||||||
|
|
||||||
|
[["""
|
||||||
|
WMarkDown
|
||||||
|
*https://wmarkdown.k3y.pw/images/WMarkDown.png
|
||||||
|
*https://wmarkdown.k3y.pw/favicon.ico
|
||||||
|
https://wmarkdown.k3y.pw/
|
||||||
|
https://git.k3y.pw/Whalers/WMarkDown
|
||||||
|
AnP
|
||||||
|
*https://anp.k3y.pw/images/AnP.png
|
||||||
|
*https://anp.k3y.pw/images/AnP-512.png
|
||||||
|
*https://anp.k3y.pw/favicon.ico
|
||||||
|
https://anp.k3y.pw/
|
||||||
|
https://git.k3y.pw/AnP/AnP
|
||||||
|
CDN de KyMAN
|
||||||
|
*https://cdn.k3y.pw/images/CDN.png
|
||||||
|
*https://cdn.k3y.pw/images/CDN-512.png
|
||||||
|
*https://cdn.k3y.pw/favicon.ico
|
||||||
|
https://cdn.k3y.pw/
|
||||||
|
https://git.k3y.pw/KyMAN/CDN
|
||||||
|
"""]]
|
||||||
|
|
||||||
|
> [!#] Dicho proyecto hereda de otros proyectos a partir de los aquí presentados, por ejemplo, a partir del WMarkDown hereda del MathJAX, highlight.js y MermaidJS de JavaScript, entre otros. Si vais al proyecto WMarkDown podréis ver más información acerca de dichas dependencias.
|
||||||
|
|
||||||
|
Por otro lado, este proyecto es usado en proyectos tales como los siguientes:
|
||||||
|
|
||||||
|
[["""
|
||||||
|
AnP
|
||||||
|
*https://anp.k3y.pw/images/AnP.png
|
||||||
|
*https://anp.k3y.pw/images/AnP-512.png
|
||||||
|
*https://anp.k3y.pw/favicon.ico
|
||||||
|
https://anp.k3y.pw/
|
||||||
|
https://git.k3y.pw/AnP/AnP
|
||||||
|
"""]]
|
||||||
|
|
||||||
|
> [!#] Al ser un proyecto para uso tan crudo y básico, éste puede aparecer en proyectos de los cuales herede para funciones como la Web o servicio de servidor, entre otros.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
168
Public/doc/es/targets.w.md
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_targets
|
||||||
|
title_text = Objetivos - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
## Objetvos
|
||||||
|
|
||||||
|
Para ver el estado del proyecto con respecto a lo que sería el objetivo final, tenemos lo siguiente:
|
||||||
|
|
||||||
|
+ [-] Crear diseño y logo.
|
||||||
|
+ [X] Código de colores \(El mismo que AnP).
|
||||||
|
+ [X] Crear diseño \(El mismo que WMarkDown).
|
||||||
|
+ [ ] Crear logo.
|
||||||
|
+ [-] Montar la documentación.
|
||||||
|
+ [-] Documentación general.
|
||||||
|
+ [ ] Documentación de la librería.
|
||||||
|
- [X] Python.
|
||||||
|
+ [X] Función *set_alphabet*.
|
||||||
|
+ [X] Función *get_alphabet*.
|
||||||
|
+ [X] Función *process*.
|
||||||
|
+ [X] Función *bits*.
|
||||||
|
+ [X] Función *to_array*.
|
||||||
|
+ [X] Función *to_array_binary*.
|
||||||
|
+ [X] Función *to_integer*.
|
||||||
|
+ [X] Función *to_string*.
|
||||||
|
+ [X] Función *has*.
|
||||||
|
+ [X] Función *to_unknown*.
|
||||||
|
+ [X] Función *compact*.
|
||||||
|
+ [X] Función *[[!bitwise]]*.
|
||||||
|
+ [X] Función *set*.
|
||||||
|
+ [X] Función *join*.
|
||||||
|
+ [X] Función *set_blocks*.
|
||||||
|
+ [X] Función *slice*.
|
||||||
|
+ [X] Función *has_range*.
|
||||||
|
+ [X] Función *is_string*.
|
||||||
|
+ [X] Función *is_integer*.
|
||||||
|
+ [X] Función *is_array*.
|
||||||
|
+ [X] Función *type*.
|
||||||
|
- [ ] PHP.
|
||||||
|
+ [ ] Función *set_alphabet*.
|
||||||
|
+ [ ] Función *get_alphabet*.
|
||||||
|
+ [ ] Función *process*.
|
||||||
|
+ [ ] Función *bits*.
|
||||||
|
+ [ ] Función *to_array*.
|
||||||
|
+ [ ] Función *to_array_binary*.
|
||||||
|
+ [ ] Función *to_integer*.
|
||||||
|
+ [ ] Función *to_string*.
|
||||||
|
+ [ ] Función *has*.
|
||||||
|
+ [ ] Función *to_unknown*.
|
||||||
|
+ [ ] Función *compact*.
|
||||||
|
+ [ ] Función *[[!bitwise]]*.
|
||||||
|
+ [ ] Función *set*.
|
||||||
|
+ [ ] Función *join*.
|
||||||
|
+ [ ] Función *set_blocks*.
|
||||||
|
+ [ ] Función *slice*.
|
||||||
|
+ [ ] Función *has_range*.
|
||||||
|
+ [ ] Función *is_string*.
|
||||||
|
+ [ ] Función *is_integer*.
|
||||||
|
+ [ ] Función *is_array*.
|
||||||
|
+ [ ] Función *type*.
|
||||||
|
- [ ] C#.
|
||||||
|
+ [ ] Función *set_alphabet*.
|
||||||
|
+ [ ] Función *get_alphabet*.
|
||||||
|
+ [ ] Función *process*.
|
||||||
|
+ [ ] Función *bits*.
|
||||||
|
+ [ ] Función *to_array*.
|
||||||
|
+ [ ] Función *to_array_binary*.
|
||||||
|
+ [ ] Función *to_integer*.
|
||||||
|
+ [ ] Función *to_string*.
|
||||||
|
+ [ ] Función *has*.
|
||||||
|
+ [ ] Función *to_unknown*.
|
||||||
|
+ [ ] Función *compact*.
|
||||||
|
+ [ ] Función *[[!bitwise]]*.
|
||||||
|
+ [ ] Función *set*.
|
||||||
|
+ [ ] Función *join*.
|
||||||
|
+ [ ] Función *set_blocks*.
|
||||||
|
+ [ ] Función *slice*.
|
||||||
|
+ [ ] Función *has_range*.
|
||||||
|
+ [ ] Función *is_string*.
|
||||||
|
+ [ ] Función *is_integer*.
|
||||||
|
+ [ ] Función *is_array*.
|
||||||
|
+ [ ] Función *type*.
|
||||||
|
- [X] JavaScript/ECMAScript.
|
||||||
|
+ [X] Función *set_alphabet*.
|
||||||
|
+ [X] Función *get_alphabet*.
|
||||||
|
+ [X] Función *process*.
|
||||||
|
+ [X] Función *bits*.
|
||||||
|
+ [X] Función *to_array*.
|
||||||
|
+ [X] Función *to_array_binary*.
|
||||||
|
+ [X] Función *to_integer*.
|
||||||
|
+ [X] Función *to_string*.
|
||||||
|
+ [X] Función *has*.
|
||||||
|
+ [X] Función *to_unknown*.
|
||||||
|
+ [X] Función *compact*.
|
||||||
|
+ [X] Función *[[!bitwise]]*.
|
||||||
|
+ [X] Función *set*.
|
||||||
|
+ [X] Función *join*.
|
||||||
|
+ [X] Función *set_blocks*.
|
||||||
|
+ [X] Función *slice*.
|
||||||
|
+ [X] Función *has_range*.
|
||||||
|
+ [X] Función *is_string*.
|
||||||
|
+ [X] Función *is_integer*.
|
||||||
|
+ [X] Función *is_array*.
|
||||||
|
+ [X] Función *type*.
|
||||||
|
- [ ] MySQL/MariaDB.
|
||||||
|
+ [ ] Función *set_alphabet*.
|
||||||
|
+ [ ] Función *get_alphabet*.
|
||||||
|
+ [ ] Función *process*.
|
||||||
|
+ [ ] Función *bits*.
|
||||||
|
+ [ ] Función *to_array*.
|
||||||
|
+ [ ] Función *to_array_binary*.
|
||||||
|
+ [ ] Función *to_integer*.
|
||||||
|
+ [ ] Función *to_string*.
|
||||||
|
+ [ ] Función *has*.
|
||||||
|
+ [ ] Función *to_unknown*.
|
||||||
|
+ [ ] Función *compact*.
|
||||||
|
+ [ ] Función *[[!bitwise]]*.
|
||||||
|
+ [ ] Función *set*.
|
||||||
|
+ [ ] Función *join*.
|
||||||
|
+ [ ] Función *set_blocks*.
|
||||||
|
+ [ ] Función *slice*.
|
||||||
|
+ [ ] Función *has_range*.
|
||||||
|
- [ ] SQLServer.
|
||||||
|
+ [ ] Función *set_alphabet*.
|
||||||
|
+ [ ] Función *get_alphabet*.
|
||||||
|
+ [ ] Función *process*.
|
||||||
|
+ [ ] Función *bits*.
|
||||||
|
+ [ ] Función *to_array*.
|
||||||
|
+ [ ] Función *to_array_binary*.
|
||||||
|
+ [ ] Función *to_integer*.
|
||||||
|
+ [ ] Función *to_string*.
|
||||||
|
+ [ ] Función *has*.
|
||||||
|
+ [ ] Función *to_unknown*.
|
||||||
|
+ [ ] Función *compact*.
|
||||||
|
+ [ ] Función *[[!bitwise]]*.
|
||||||
|
+ [ ] Función *set*.
|
||||||
|
+ [ ] Función *join*.
|
||||||
|
+ [ ] Función *set_blocks*.
|
||||||
|
+ [ ] Función *slice*.
|
||||||
|
+ [ ] Función *has_range*.
|
||||||
|
- [ ] Rust.
|
||||||
|
+ [ ] Función *set_alphabet*.
|
||||||
|
+ [ ] Función *get_alphabet*.
|
||||||
|
+ [ ] Función *process*.
|
||||||
|
+ [ ] Función *bits*.
|
||||||
|
+ [ ] Función *to_array*.
|
||||||
|
+ [ ] Función *to_array_binary*.
|
||||||
|
+ [ ] Función *to_integer*.
|
||||||
|
+ [ ] Función *to_string*.
|
||||||
|
+ [ ] Función *has*.
|
||||||
|
+ [ ] Función *to_unknown*.
|
||||||
|
+ [ ] Función *compact*.
|
||||||
|
+ [ ] Función *[[!bitwise]]*.
|
||||||
|
+ [ ] Función *set*.
|
||||||
|
+ [ ] Función *join*.
|
||||||
|
+ [ ] Función *set_blocks*.
|
||||||
|
+ [ ] Función *slice*.
|
||||||
|
+ [ ] Función *has_range*.
|
||||||
|
+ [ ] Función *is_string*.
|
||||||
|
+ [ ] Función *is_integer*.
|
||||||
|
+ [ ] Función *is_array*.
|
||||||
|
+ [ ] Función *type*.
|
||||||
|
+ [ ] Subir y publicar el proyecto.
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
489
Public/ecma/ErrorsManager.ecma.js
Normal file
@ -0,0 +1,489 @@
|
|||||||
|
/**
|
||||||
|
* @param {string|Array.<string>} [alphabet]
|
||||||
|
* @returns {void}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
const ErrorsManager = function(alphabet){
|
||||||
|
|
||||||
|
/** @type {ErrorsManager} */
|
||||||
|
const self = this;
|
||||||
|
/** @type {number} */
|
||||||
|
let error = 0;
|
||||||
|
// /** @type {RegExp|null} */
|
||||||
|
// let re_hexa_error = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {void}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
const constructor = () => {
|
||||||
|
|
||||||
|
self.set_alphabet(alphabet);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|Array.<string>)} new_alphabet
|
||||||
|
* @returns {number}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.set_alphabet = new_alphabet => {
|
||||||
|
|
||||||
|
error = (
|
||||||
|
new_alphabet === undefined ? 0 :
|
||||||
|
new_alphabet === null ? 0 :
|
||||||
|
!ErrorsManager.prototype.is_string(new_alphabet) && !ErrorsManager.prototype.is_array(new_alphabet) ? 1 << 2 :
|
||||||
|
0) << 1;
|
||||||
|
|
||||||
|
if(!error){
|
||||||
|
if(new_alphabet){
|
||||||
|
|
||||||
|
/** @type {number} */
|
||||||
|
const original_length = new_alphabet.length,
|
||||||
|
/** @type {number} */
|
||||||
|
final_length = (new_alphabet = (new_alphabet instanceof Array ? new_alphabet : new_alphabet.split("")).filter((character, i) => (
|
||||||
|
ErrorsManager.prototype.is_string(character) && character.length == 1 && new_alphabet.indexOf(character) == i
|
||||||
|
))).length;
|
||||||
|
|
||||||
|
error |= (
|
||||||
|
original_length != final_length ? 1 << 0 :
|
||||||
|
final_length < 64 ? 1 << 1 :
|
||||||
|
0) << 5;
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
alphabet = error || !new_alphabet ? (
|
||||||
|
alphabet && alphabet.length ? alphabet :
|
||||||
|
ErrorsManager.prototype.BASE64) : new_alphabet;
|
||||||
|
// re_hexa_error = new RegExp("[^" + alphabet[0] + "]");
|
||||||
|
|
||||||
|
return error;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @param {!number} [length = 0]
|
||||||
|
* @returns {Array.<number>}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.to_array = (code, length = 0) => {
|
||||||
|
|
||||||
|
/** @type {Array.<number>} */
|
||||||
|
let array = [];
|
||||||
|
|
||||||
|
if(ErrorsManager.prototype.is_string(code))
|
||||||
|
array = code.split("").map(hexa => alphabet.indexOf(hexa));
|
||||||
|
else if(ErrorsManager.prototype.is_integer(code)){
|
||||||
|
while(code){
|
||||||
|
array.push(code & 0x3F);
|
||||||
|
code >>>= 6;
|
||||||
|
};
|
||||||
|
}else if(ErrorsManager.prototype.is_array(code))
|
||||||
|
array = [].concat(code);
|
||||||
|
|
||||||
|
while(array.length < length)
|
||||||
|
array.push(0);
|
||||||
|
|
||||||
|
return array && array.length ? array : [0];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(number|string|Array.<number>)} error
|
||||||
|
* @param {!Array.<string|null>} messages
|
||||||
|
* @returns {Array.<string>}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.process = (error, messages) => {
|
||||||
|
|
||||||
|
/** @type {Array.<string>} */
|
||||||
|
const response = [],
|
||||||
|
/** @type {number} */
|
||||||
|
m = messages.length,
|
||||||
|
/** @type {Array.<number>} */
|
||||||
|
array_error = self.to_array(error),
|
||||||
|
/** @type {number} */
|
||||||
|
l = array_error.length;
|
||||||
|
|
||||||
|
for(let i = 0; i < l; i ++)
|
||||||
|
for(let j = 0; j < 6; j ++)
|
||||||
|
if(array_error[i] & (1 << j)){
|
||||||
|
|
||||||
|
/** @type {number} */
|
||||||
|
const k = j + i * 6;
|
||||||
|
|
||||||
|
response.push([k, k < m && messages[k] ? messages[k] : "error_message_" + k]);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
return response;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {Array.<string>}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.get_alphabet = () => alphabet.join("");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @returns {number}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.bits = code => {
|
||||||
|
if(ErrorsManager.prototype.is_integer(code))
|
||||||
|
return code ? Math.log2(code) : 1;
|
||||||
|
|
||||||
|
ErrorsManager.prototype.is_string(code) && (code = self.to_array(code));
|
||||||
|
|
||||||
|
if(ErrorsManager.prototype.is_array(code))
|
||||||
|
return !(code = self.compact(code)).length || !code[code.length - 1] ? 1 : (code.length - 1) * 6 + (Math.log2(code[code.length - 1]) + 1 >> 0);
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @returns {Array.<string>}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.to_array_binary = code => (code = self.to_array(code)).map(hexa => ("000000" + hexa.toString(2)).slice(-6));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @returns {number}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.to_integer = code => {
|
||||||
|
if(ErrorsManager.prototype.is_integer(code))
|
||||||
|
return code;
|
||||||
|
if(ErrorsManager.prototype.is_array(code))
|
||||||
|
return code.length ? code.length > 1 ? code.reduce((total, hexa, i) => total | (hexa << i * 6)) : code[0] : 0;
|
||||||
|
if(!ErrorsManager.prototype.is_string(code))
|
||||||
|
return 0;
|
||||||
|
return code ? code.length > 1 ? code.split("").reduce((total, hexa, i) => (i > 1 ? total : alphabet.indexOf(total)) | (alphabet.indexOf(hexa) << i * 6)) : alphabet.indexOf(code) : 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @param {!number} [length = 0]
|
||||||
|
* @returns {string}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.to_string = (code, length = 0) => {
|
||||||
|
|
||||||
|
/** @type {string} */
|
||||||
|
let string = "";
|
||||||
|
|
||||||
|
if(ErrorsManager.prototype.is_string(code))
|
||||||
|
string = code;
|
||||||
|
else{
|
||||||
|
if(ErrorsManager.prototype.is_integer(code)){
|
||||||
|
while(code){
|
||||||
|
string += alphabet[code & 0x3F];
|
||||||
|
code >>>= 6;
|
||||||
|
};
|
||||||
|
}else if(ErrorsManager.prototype.is_array(code))
|
||||||
|
string = code.length ? code.length > 1 ? code.reduce((total, hexa, i) => (i > 1 ? total : alphabet[total]) + alphabet[hexa]) : alphabet[code[0]] : alphabet[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
while(string.length < length)
|
||||||
|
string += alphabet[0];
|
||||||
|
|
||||||
|
return string || alphabet[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @param {!(number|Array.<number>)} [bits]
|
||||||
|
* @returns {boolean|null}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.has = (code, bits) => {
|
||||||
|
if(!ErrorsManager.prototype.is_integer(bits) && !ErrorsManager.prototype.is_array(bits))
|
||||||
|
return (
|
||||||
|
ErrorsManager.prototype.is_string(code) ? code.split("").some(hexa => hexa != alphabet[0]) :
|
||||||
|
ErrorsManager.prototype.is_integer(code) ? !!code :
|
||||||
|
ErrorsManager.prototype.is_array(code) ? code.some(hexa => !!hexa) :
|
||||||
|
null);
|
||||||
|
|
||||||
|
/** @type {Array.<number>} */
|
||||||
|
const error = self.to_array(code),
|
||||||
|
/** @type {number} */
|
||||||
|
l = error.length * 6;
|
||||||
|
|
||||||
|
return l ? (
|
||||||
|
AnP.prototype.is_array(bits) ? bits : [bits]
|
||||||
|
).some(bit => bit <= l && error[bit / 6 >> 0] & (1 << bit % 6)) : false;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {?any} code
|
||||||
|
* @returns {any|null}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.to_unknown = code => code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @returns {string|number|Array.<number>}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.compact = code => {
|
||||||
|
if(ErrorsManager.prototype.is_string(code)){
|
||||||
|
while(code && code[code.length - 1] == alphabet[0])
|
||||||
|
code = code.substr(0, code.length - 1);
|
||||||
|
return code || alphabet[0];
|
||||||
|
};
|
||||||
|
if(ErrorsManager.prototype.is_array(code)){
|
||||||
|
code = [].concat(code);
|
||||||
|
while(code.length && !code[code.length - 1])
|
||||||
|
code.pop();
|
||||||
|
return code.length ? code : [0];
|
||||||
|
};
|
||||||
|
if(ErrorsManager.prototype.is_integer(code))
|
||||||
|
return code;
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @param {!number} bits
|
||||||
|
* @returns {string|number|Array.<number>}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.bitwise = (code, bits) => {
|
||||||
|
|
||||||
|
if(!bits || !self.has(code))
|
||||||
|
return code;
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {boolean} */
|
||||||
|
const reverse = bits < 0,
|
||||||
|
/** @type {number} */
|
||||||
|
start = (reverse ? bits *= -1 : bits) / 6 >> 0,
|
||||||
|
/** @type {number} */
|
||||||
|
rest = bits % 6,
|
||||||
|
/** @type {string} */
|
||||||
|
type_method = "to_" + ErrorsManager.prototype.type(code);
|
||||||
|
|
||||||
|
if(reverse){
|
||||||
|
|
||||||
|
code = self.to_string(code).substring(start);
|
||||||
|
|
||||||
|
if(rest){
|
||||||
|
if(code){
|
||||||
|
|
||||||
|
/** @type {number} */
|
||||||
|
const l = (code = self.to_array(code)).length - 1,
|
||||||
|
/** @type {number} */
|
||||||
|
r = 6 - rest,
|
||||||
|
/** @type {number} */
|
||||||
|
block = ~-(1 << rest);
|
||||||
|
|
||||||
|
for(let i = 0; i < l; i ++)
|
||||||
|
code[i] = (code[i] >> rest) | ((code[i + 1] & block) << r);
|
||||||
|
code[l] >>= rest;
|
||||||
|
|
||||||
|
}else
|
||||||
|
code = [0];
|
||||||
|
};
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
code = self.to_array(code);
|
||||||
|
|
||||||
|
if(rest){
|
||||||
|
|
||||||
|
/** @type {Array.<number>} */
|
||||||
|
const block = [~-(1 << (r = 6 - rest)), ~-(1 << rest) << r],
|
||||||
|
/** @type {number} */
|
||||||
|
l = code.length - 1,
|
||||||
|
/** @type {number} */
|
||||||
|
last = (code[l] & block[1]) >> r;
|
||||||
|
|
||||||
|
last && (code[l + 1] = last);
|
||||||
|
for(let i = l; i > 0; i --)
|
||||||
|
code[i] = ((code[i] & block[0]) << rest) | (code[i - 1] >> r);
|
||||||
|
code[0] = (code[0] & block[0]) << rest;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
for(let i = 0; i < start; i ++)
|
||||||
|
code.unshift(0);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
return self[type_method](code);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @param {!(string|number|Array.<number>)} error
|
||||||
|
* @param {!number} [bit = 0]
|
||||||
|
* @param {!number} [length = 0]
|
||||||
|
* @returns {string}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.set = (code, error, bit = 0, length = 0) => {
|
||||||
|
|
||||||
|
code = self.to_array(code);
|
||||||
|
error = self.to_array(error);
|
||||||
|
bit && (error = self.bitwise(error, bit));
|
||||||
|
|
||||||
|
/** @type {number} */
|
||||||
|
let i = bit / 6 >> 0;
|
||||||
|
|
||||||
|
if(length){
|
||||||
|
|
||||||
|
/** @type {Array.<number>} */
|
||||||
|
const ampersand = [],
|
||||||
|
/** @type {number} */
|
||||||
|
start = bit % 6,
|
||||||
|
/** @type {number} */
|
||||||
|
m = (length + start) / 6 >> 0,
|
||||||
|
/** @type {number} */
|
||||||
|
end = (start + length) % 6;
|
||||||
|
|
||||||
|
for(let j = 0; j < m; j ++)
|
||||||
|
ampersand.push(0);
|
||||||
|
ampersand[0] |= ~-(1 << start);
|
||||||
|
end && ampersand.push(~-(1 << (6 - end)) << end);
|
||||||
|
|
||||||
|
ampersand.forEach((hexa, j) => code[j + i] &= hexa);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
if(has(error)){
|
||||||
|
|
||||||
|
/** @type {number} */
|
||||||
|
const l = error.length;
|
||||||
|
|
||||||
|
while(code.length <= i)
|
||||||
|
code.push(0);
|
||||||
|
|
||||||
|
for(; i < l; i ++)
|
||||||
|
code[i] = (code[i] || 0) | error[i];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
return self.compact(self.to_string(code));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @param {!(string|number|Array.<number>)} error
|
||||||
|
* @param {!number} [bit = 0]
|
||||||
|
* @param {!number} [length = 0]
|
||||||
|
* @returns {string}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.join = (code, error, bit = 0, length = 0) => self.set(code, error, bit, length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @param {!Array.<string|number|Array.<number>>} blocks
|
||||||
|
* @param {!number} [bit = 0]
|
||||||
|
* @param {!number} [length = 0]
|
||||||
|
* @returns {string}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.set_blocks = (code, blocks, bit = 0, length = 0) => {
|
||||||
|
|
||||||
|
/** @type {number} */
|
||||||
|
const l = blocks.length;
|
||||||
|
|
||||||
|
length && (code = self.set(code, 0, bit, length));
|
||||||
|
|
||||||
|
for(let i = 0; i < l; i ++)
|
||||||
|
blocks[i] && (code = self.set(code, blocks[i], bit));
|
||||||
|
|
||||||
|
return code || alphabet[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @param {!number} _from
|
||||||
|
* @param {!number} [_to = 0]
|
||||||
|
* @returns {string|number|Array.<number>|null}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.slice = (code, _from, _to = 0) => {
|
||||||
|
if(!self.has(code))
|
||||||
|
return code;
|
||||||
|
|
||||||
|
/** @type {number} */
|
||||||
|
const bits = self.bits(code);
|
||||||
|
/** @type {number} */
|
||||||
|
let rest;
|
||||||
|
|
||||||
|
_from < 0 && (_from = bits + _from);
|
||||||
|
_to = (
|
||||||
|
_to > bits ? bits :
|
||||||
|
_to < 0 ? bits - _to :
|
||||||
|
_to) - _from;
|
||||||
|
rest = _to % 6;
|
||||||
|
code = self.bitwise(code, -_from);
|
||||||
|
|
||||||
|
return (
|
||||||
|
ErrorsManager.prototype.is_string(code) ? code.slice(0, _to / 6 >> 0) + (rest ? alphabet[alphabet.indexOf(code.slice(-1)) & ~-(1 << rest)] : "") :
|
||||||
|
ErrorsManager.prototype.is_array(code) ? code.slice(0, _to / 6 >> 0).concat(rest ? [code[code.length - 1] & ~-(1 << rest)] : []) :
|
||||||
|
ErrorsManager.prototype.is_integer(code) ? code & ~-(1 << _to) :
|
||||||
|
null);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @param {!number} _from
|
||||||
|
* @param {!number} [_to = 0]
|
||||||
|
* @returns {boolean}
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
this.has_range = (code, _from, _to = 0) => self.has(self.slice(code, _from, _to));
|
||||||
|
|
||||||
|
constructor();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @type {Array.<string>} */
|
||||||
|
ErrorsManager.prototype.BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".split("");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {?any} value
|
||||||
|
* @returns {boolean}
|
||||||
|
* @access public
|
||||||
|
* @static
|
||||||
|
*/
|
||||||
|
ErrorsManager.prototype.is_string = value => typeof value == "string";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {?any} value
|
||||||
|
* @returns {boolean}
|
||||||
|
* @access public
|
||||||
|
* @static
|
||||||
|
*/
|
||||||
|
ErrorsManager.prototype.is_integer = value => typeof value == "number" && value == value >> 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {?any} value
|
||||||
|
* @returns {boolean}
|
||||||
|
* @access public
|
||||||
|
* @static
|
||||||
|
*/
|
||||||
|
ErrorsManager.prototype.is_array = value => typeof value == "object" && value instanceof Array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!(string|number|Array.<number>)} code
|
||||||
|
* @returns {string}
|
||||||
|
* @access public
|
||||||
|
* @static
|
||||||
|
*/
|
||||||
|
ErrorsManager.prototype.type = code => {
|
||||||
|
|
||||||
|
/** @type {Array.<string>} */
|
||||||
|
const types = ["string", "integer", "array"];
|
||||||
|
|
||||||
|
for(let i = 0; i < 3; i ++)
|
||||||
|
if(ErrorsManager.prototype["is_" + types[i]](code))
|
||||||
|
return types[i];
|
||||||
|
return "unknown";
|
||||||
|
};
|
BIN
Public/favicon.ico
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
Public/images/ErrorsManager-180.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
Public/images/ErrorsManager-192.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
Public/images/ErrorsManager-270.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
Public/images/ErrorsManager-32.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
Public/images/ErrorsManager-512.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
Public/images/ErrorsManager.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
29
Public/index.w.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
```wmd-options
|
||||||
|
language = es
|
||||||
|
title_i18n = errors_manager_title_documentation
|
||||||
|
title_text = Documentación - ErrorsManager
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
||||||
|
|
||||||
|
[[include doc/es/description.w.md]]
|
||||||
|
|
||||||
|
[[include doc/es/projects.w.md]]
|
||||||
|
|
||||||
|
[[include doc/es/design.w.md]]
|
||||||
|
|
||||||
|
[[include doc/es/integration.w.md]]
|
||||||
|
|
||||||
|
[[include doc/es/manual.w.md]]
|
||||||
|
|
||||||
|
[[include doc/es/faq.w.md]]
|
||||||
|
|
||||||
|
[[include doc/es/bugs.w.md]]
|
||||||
|
|
||||||
|
[[include doc/es/targets.w.md]]
|
||||||
|
|
||||||
|
[[include doc/es/opinions.w.md]]
|
||||||
|
|
||||||
|
[[include doc/es/donates.w.md]]
|
||||||
|
|
||||||
|
<!-- [[wmd]] -->
|
154
Public/scss/ErrorsManager.css
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
.errors-manager {
|
||||||
|
position: relative;
|
||||||
|
top: 0em;
|
||||||
|
left: 0em;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: #EFEFEF;
|
||||||
|
color: #222; }
|
||||||
|
.errors-manager, .errors-manager input, .errors-manager button, .errors-manager select {
|
||||||
|
font-family: "Roboto"; }
|
||||||
|
.errors-manager pre, .errors-manager textarea,
|
||||||
|
.errors-manager .wmd-code-block,
|
||||||
|
.errors-manager .wmd-code-block ol > li::marker,
|
||||||
|
.errors-manager .wmd-code-doc > .description {
|
||||||
|
font-family: "Roboto Mono"; }
|
||||||
|
.errors-manager [data-icon]::before {
|
||||||
|
font-family: "FA6FR"; }
|
||||||
|
.errors-manager input, .errors-manager button, .errors-manager select, .errors-manager textarea {
|
||||||
|
font-size: 1em; }
|
||||||
|
.errors-manager [data-visible=false], .errors-manager [data-hidden=true] {
|
||||||
|
display: none; }
|
||||||
|
.errors-manager a[href] {
|
||||||
|
text-decoration: none;
|
||||||
|
word-break: break-word; }
|
||||||
|
.errors-manager a[href], .errors-manager [onclick], .errors-manager [onmouseover], .errors-manager [onmousedown], .errors-manager button, .errors-manager [type=button], .errors-manager [type=reset], .errors-manager [type=submit] {
|
||||||
|
cursor: pointer;
|
||||||
|
transition-duration: 1s; }
|
||||||
|
.errors-manager a[href]:hover, .errors-manager [onclick]:hover, .errors-manager [onmouseover]:hover, .errors-manager [onmousedown]:hover, .errors-manager button:hover, .errors-manager [type=button]:hover, .errors-manager [type=reset]:hover, .errors-manager [type=submit]:hover {
|
||||||
|
transition-duration: 0.2s; }
|
||||||
|
.errors-manager a[href], .errors-manager [onclick], .errors-manager [onmouseover], .errors-manager [onmousedown], .errors-manager button, .errors-manager [type=button], .errors-manager [type=reset], .errors-manager [type=submit] {
|
||||||
|
color: #812;
|
||||||
|
transition-property: color; }
|
||||||
|
.errors-manager a[href]:hover, .errors-manager [onclick]:hover, .errors-manager [onmouseover]:hover, .errors-manager [onmousedown]:hover, .errors-manager button:hover, .errors-manager [type=button]:hover, .errors-manager [type=reset]:hover, .errors-manager [type=submit]:hover {
|
||||||
|
color: #278; }
|
||||||
|
.errors-manager [onmouseover], .errors-manager [onmousedown] {
|
||||||
|
color: #551a22;
|
||||||
|
transition-property: color; }
|
||||||
|
.errors-manager [onmouseover]:hover, .errors-manager [onmousedown]:hover {
|
||||||
|
color: #224d55; }
|
||||||
|
.errors-manager a[href], .errors-manager [onclick] {
|
||||||
|
transition-property: color; }
|
||||||
|
.errors-manager button, .errors-manager [type=button], .errors-manager [type=reset], .errors-manager [type=submit] {
|
||||||
|
border-color: 0.1em solid #812;
|
||||||
|
box-shadow: 0em 0em 0.4em #812;
|
||||||
|
transition-property: color,border-color,box-shadow; }
|
||||||
|
.errors-manager button:hover, .errors-manager [type=button]:hover, .errors-manager [type=reset]:hover, .errors-manager [type=submit]:hover {
|
||||||
|
border-color: 0.1em solid #278;
|
||||||
|
box-shadow: 0em 0em 0.4em #278; }
|
||||||
|
.errors-manager .wmd-dictionary-item {
|
||||||
|
color: #551a22; }
|
||||||
|
.errors-manager .wmd-dictionary-item:hover {
|
||||||
|
color: #224d55; }
|
||||||
|
.errors-manager h2 {
|
||||||
|
font-size: 2.6em; }
|
||||||
|
.errors-manager h3 {
|
||||||
|
font-size: 2.2em; }
|
||||||
|
.errors-manager h4 {
|
||||||
|
font-size: 1.8em; }
|
||||||
|
.errors-manager h5 {
|
||||||
|
font-size: 1.4em; }
|
||||||
|
.errors-manager h6 {
|
||||||
|
font-size: 1em; }
|
||||||
|
.errors-manager ul, .errors-manager ol {
|
||||||
|
padding: 0em 2em; }
|
||||||
|
.errors-manager header, .errors-manager main, .errors-manager footer {
|
||||||
|
position: absolute;
|
||||||
|
left: 0em;
|
||||||
|
width: 100%; }
|
||||||
|
.errors-manager header, .errors-manager footer {
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
box-shadow: 0em 0em 0.125em #EFEFEF, 0em 0em 0.25em #EFEFEF, 0em 0em 0.5em #EFEFEF, 0em 0em 1em #EFEFEF, 0em 0em 2em #EFEFEF; }
|
||||||
|
.errors-manager header > *, .errors-manager footer > * {
|
||||||
|
flex: auto;
|
||||||
|
align-self: center; }
|
||||||
|
.errors-manager header {
|
||||||
|
top: 0em;
|
||||||
|
height: 4em;
|
||||||
|
z-index: 20; }
|
||||||
|
.errors-manager header h1 {
|
||||||
|
margin: .2em 1em;
|
||||||
|
padding: 0em;
|
||||||
|
font-size: 1em;
|
||||||
|
text-wrap: nowrap; }
|
||||||
|
.errors-manager header h1 .image {
|
||||||
|
height: 3.6em; }
|
||||||
|
.errors-manager header h1 img {
|
||||||
|
width: auto;
|
||||||
|
height: 3.6em; }
|
||||||
|
.errors-manager header h1 img + span {
|
||||||
|
display: none; }
|
||||||
|
.errors-manager header h1 span + span {
|
||||||
|
font-size: 3.4em;
|
||||||
|
height: 0.9444444444em; }
|
||||||
|
.errors-manager header h1 a > span {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top; }
|
||||||
|
.errors-manager main {
|
||||||
|
top: 4em;
|
||||||
|
bottom: 2.5em;
|
||||||
|
padding: 1% 2%;
|
||||||
|
z-index: 10;
|
||||||
|
overflow: auto;
|
||||||
|
box-sizing: border-box; }
|
||||||
|
.errors-manager footer {
|
||||||
|
bottom: 0em;
|
||||||
|
height: 2.5em;
|
||||||
|
z-index: 30; }
|
||||||
|
.errors-manager .main-menu {
|
||||||
|
width: 25em;
|
||||||
|
text-align: center; }
|
||||||
|
.errors-manager .main-menu ul {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0em;
|
||||||
|
padding: 0em; }
|
||||||
|
.errors-manager .main-menu li {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0em .6em; }
|
||||||
|
.errors-manager .licenses {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
position: absolute;
|
||||||
|
left: 0em;
|
||||||
|
bottom: 0em;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
padding: .1em .2em;
|
||||||
|
font-weight: 900;
|
||||||
|
font-size: .85em;
|
||||||
|
box-sizing: border-box; }
|
||||||
|
.errors-manager .license {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-self: center;
|
||||||
|
margin: 0em .2em;
|
||||||
|
text-align: center;
|
||||||
|
box-sizing: border-box; }
|
||||||
|
.errors-manager .license span {
|
||||||
|
flex: auto;
|
||||||
|
align-self: center; }
|
||||||
|
.errors-manager .license > * {
|
||||||
|
vertical-align: middle; }
|
||||||
|
.errors-manager .license img {
|
||||||
|
width: auto;
|
||||||
|
height: 2.5em;
|
||||||
|
margin: .2em .2em; }
|
||||||
|
|
||||||
|
.errors-manager h1 .image + span {
|
||||||
|
font-size: 3.1em; }
|
||||||
|
|
||||||
|
/*# sourceMappingURL=ErrorsManager.css.map */
|
7
Public/scss/ErrorsManager.css.map
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"mappings": "AAKA,eAAe;ECuBX,QAAQ,EAAG,QAAQ;EACnB,GAAG,EAAG,GAAG;EACT,IAAI,EAAG,GAAG;EACV,KAAK,EAAG,IAAI;EACZ,MAAM,EAAG,IAAI;EACb,QAAQ,EAAG,MAAM;EA4Hb,gBAAgB,ECzJV,OAAO;ED0Jb,KAAK,EC3JC,IAAI;EDgCd,sFAAqB;IAAC,WAAW,ECtBtB,QAAQ;EDuBnB;;;8CAG0B;IAAC,WAAW,ECxB7B,aAAa;EDyBtB,mCAAmB;IAAC,WAAW,ECvBtB,OAAO;EDwBhB,+FAA4B;IAAC,SAAS,EAAG,GAAG;EAE5C,wEAAuC;IAAC,OAAO,EAAG,IAAI;EAEtD,uBAAO;IACH,eAAe,EAAG,IAAI;IACtB,UAAU,EAAG,UAAU;EAE3B,oOAA6F;IACzF,MAAM,EAAG,OAAO;IAChB,mBAAmB,ECpBT,EAAE;IDqBZ,oRAAO;MAAC,mBAAmB,ECtBlB,IAAG;EDwBhB,oOAA6F;IACzF,KAAK,EDtDI,IAAI;ICuDb,mBAAmB,EAAG,KAAK;IAC3B,oRAAO;MAAC,KAAK,EDvDF,IAAI;ECyDnB,4DAA2B;IACvB,KAAK,EAAG,OAAqC;IAC7C,mBAAmB,EAAG,KAAK;IAC3B,wEAAO;MAAC,KAAK,EAAG,OAAuC;EAO3D,kDAAiB;IAAC,mBAAmB,EAAG,KAAK;EAC7C,kHAA+C;IAC3C,YAAY,EAAG,gBAAyB;IACxC,UAAU,EAAG,kBAA2B;IACxC,mBAAmB,EAAG,6BAA6B;IACnD,0IAAO;MACH,YAAY,EAAG,gBAA2B;MAC1C,UAAU,EAAG,kBAA6B;EAIlD,oCAAoB;IAChB,KAAK,EAAG,OAAqC;IAC7C,0CAAO;MAAC,KAAK,EAAG,OAAuC;EAIvD,kBAAM;IAAC,SAAS,EAAG,KAAmB;EAAtC,kBAAM;IAAC,SAAS,EAAG,KAAmB;EAAtC,kBAAM;IAAC,SAAS,EAAG,KAAmB;EAAtC,kBAAM;IAAC,SAAS,EAAG,KAAmB;EAAtC,kBAAM;IAAC,SAAS,EAAG,GAAmB;EAG1C,sCAAK;IACD,OAAO,EAAG,OAAO;EAGrB,oEAAkB;IACd,QAAQ,EAAG,QAAQ;IACnB,IAAI,EAAG,GAAG;IACV,KAAK,EAAG,IAAI;EAEhB,8CAAa;IACT,QAAQ,EAAG,MAAM;IACjB,OAAO,EAAG,IAAI;IACd,cAAc,EAAG,GAAG;IAxFxB,UAAU,EACN,gHAIuB;IAqFvB,sDAAG;MACC,IAAI,EAAG,IAAI;MACX,UAAU,EAAG,MAAM;EAG3B,sBAAM;IACF,GAAG,EAAG,GAAG;IACT,MAAM,EC1FG,GAAG;ID2FZ,OAAO,EAAG,EAAE;IACZ,yBAAE;MACE,MAAM,EAAG,QAAQ;MACjB,OAAO,EAAG,GAAG;MACb,SAAS,EAAG,GAAG;MACf,SAAS,EAAG,MAAM;MAClB,gCAAM;QAAC,MAAM,EAAG,KAAyB;MACzC,6BAAG;QACC,KAAK,EAAG,IAAI;QACZ,MAAM,EAAG,KAAyB;QAClC,oCAAM;UAAC,OAAO,EAAG,IAAI;MAEzB,qCAAS;QACL,SAAS,EAAG,KAAyB;QACrC,MAAM,EAAG,cAAiE;MAE9E,kCAAM;QACF,OAAO,EAAG,YAAY;QACtB,cAAc,EAAG,GAAG;EAIhC,oBAAI;IACA,GAAG,EClHM,GAAG;IDmHZ,MAAM,EClHG,KAAK;IDmHd,OAAO,EAAG,KAAK;IACf,OAAO,EAAG,EAAE;IACZ,QAAQ,EAAG,IAAI;IACf,UAAU,EAAG,UAAU;EAE3B,sBAAM;IACF,MAAM,EAAG,GAAG;IACZ,MAAM,EC1HG,KAAK;ID2Hd,OAAO,EAAG,EAAE;EAiBhB,0BAAU;IACN,KAAK,EAAG,IAAI;IACZ,UAAU,EAAG,MAAM;IACnB,6BAAE;MACE,eAAe,EAAG,IAAI;MACtB,MAAM,EAAG,GAAG;MACZ,OAAO,EAAG,GAAG;IAEjB,6BAAE;MACE,OAAO,EAAG,YAAY;MACtB,MAAM,EAAG,QAAQ;EAIzB,yBAAS;IACL,OAAO,EAAG,IAAI;IACd,cAAc,EAAG,GAAG;IACpB,eAAe,EAAG,MAAM;IACxB,QAAQ,EAAG,QAAQ;IACnB,IAAI,EAAG,GAAG;IACV,MAAM,EAAG,GAAG;IACZ,KAAK,EAAG,IAAI;IACZ,UAAU,EAAG,MAAM;IACnB,OAAO,EAAG,SAAS;IACnB,WAAW,EAAG,GAAG;IACjB,SAAS,EAAG,KAAK;IACjB,UAAU,EAAG,UAAU;EAG3B,wBAAQ;IACJ,OAAO,EAAG,IAAI;IACd,cAAc,EAAG,GAAG;IACpB,UAAU,EAAG,MAAM;IACnB,MAAM,EAAG,QAAQ;IACjB,UAAU,EAAG,MAAM;IACnB,UAAU,EAAG,UAAU;IACvB,6BAAI;MACA,IAAI,EAAG,IAAI;MACX,UAAU,EAAG,MAAM;IAEvB,4BAAG;MAAC,cAAc,EAAG,MAAM;IAC3B,4BAAG;MACC,KAAK,EAAG,IAAI;MACZ,MAAM,EAAG,KAAK;MACd,MAAM,EAAG,SAAS;;ADpM9B,gCAA8B;EAAC,SAAS,EAAG,KAAK",
|
||||||
|
"sources": ["ErrorsManager.scss","../../../AnP/Public/scss/AnP.common.scss","../../../AnP/Public/scss/AnP.settings.scss"],
|
||||||
|
"names": [],
|
||||||
|
"file": "ErrorsManager.css"
|
||||||
|
}
|
10
Public/scss/ErrorsManager.scss
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
@import "../../../AnP/Public/scss/AnP.settings.scss";
|
||||||
|
$color-primary : #812;
|
||||||
|
$color-secondary : #278;
|
||||||
|
@import "../../../AnP/Public/scss/AnP.common.scss";
|
||||||
|
|
||||||
|
.errors-manager{
|
||||||
|
@include main_web;
|
||||||
|
}
|
||||||
|
|
||||||
|
.errors-manager h1 .image+span{font-size : 3.1em;}
|
64
Public/test.html
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<script src="ecma/ErrorsManager.ecma.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
errors_manager = new ErrorsManager();
|
||||||
|
|
||||||
|
console.log(errors_manager.to_string(105));
|
||||||
|
console.log(errors_manager.to_array(105));
|
||||||
|
console.log(errors_manager.to_array_binary(105));
|
||||||
|
console.log(errors_manager.process(105, "0123456789abcdef".split("").map((_, i) => "error_message_" + i)));
|
||||||
|
|
||||||
|
|
||||||
|
console.log(errors_manager.bits(105));
|
||||||
|
console.log(errors_manager.bits("pB"));
|
||||||
|
console.log(errors_manager.bits([41, 1]));
|
||||||
|
|
||||||
|
options = [-10, -5, -3, -1, 0, 1, 3, 5, 10];
|
||||||
|
filler = "";
|
||||||
|
results = [];
|
||||||
|
|
||||||
|
while(filler.length < 30)
|
||||||
|
filler += " ";
|
||||||
|
|
||||||
|
format = (value, characters) => " " + (
|
||||||
|
JSON.stringify(value).replace(/,/g, ", ") + filler
|
||||||
|
).slice(0, characters) + " ";
|
||||||
|
|
||||||
|
[105, "pB", [41, 1]].forEach((value, i) => options.forEach(bits => {
|
||||||
|
|
||||||
|
const new_value = errors_manager.bitwise(value, bits);
|
||||||
|
|
||||||
|
results.push([
|
||||||
|
format(value, 7),
|
||||||
|
format(errors_manager.to_array_binary(value), 20),
|
||||||
|
format(bits, 4),
|
||||||
|
format(new_value, 12),
|
||||||
|
format(errors_manager.to_array_binary(new_value), 30)
|
||||||
|
]);
|
||||||
|
// console.log(results[results.length - 1]);
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.log(results);
|
||||||
|
// console.log(results.map(result => result.join("|")).join("\n"));
|
||||||
|
|
||||||
|
// if ('speechSynthesis' in window) {
|
||||||
|
// console.log("CARGANDO...");
|
||||||
|
// window.speechSynthesis.onvoiceschanged = () => {
|
||||||
|
// console.log("CARGADO");
|
||||||
|
// const voices = window.speechSynthesis.getVoices();
|
||||||
|
// console.log(voices);
|
||||||
|
// const selectedVoice = voices.find(voice => voice.name === 'Google español'); // Ejemplo de selección de voz
|
||||||
|
|
||||||
|
// // Crear un objeto de síntesis de voz
|
||||||
|
// const utterance = new SpeechSynthesisUtterance('Hola, mundo!');
|
||||||
|
// utterance.voice = selectedVoice;
|
||||||
|
|
||||||
|
// // Iniciar la síntesis de voz
|
||||||
|
// window.speechSynthesis.speak(utterance);
|
||||||
|
// };
|
||||||
|
// } else {
|
||||||
|
// console.error('La API de SpeechSynthesis no es compatible con este navegador.');
|
||||||
|
// };
|
||||||
|
|
||||||
|
</script>
|
62
Public/test2.html
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Prueba de SpeechSynthesis</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<button onclick="hablar()">Hacer hablar</button>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
function iterar_voces(text, voices, i){
|
||||||
|
if(i >= voices.length)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const utterance = new SpeechSynthesisUtterance(text);
|
||||||
|
|
||||||
|
utterance.voice = voices[i];
|
||||||
|
utterance.onend = () => iterar_voces(text, voices, i + 1);
|
||||||
|
console.log([voices[i], i]);
|
||||||
|
|
||||||
|
speechSynthesis.speak(utterance);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
function hablar(){
|
||||||
|
// speechSynthesis.cancel();
|
||||||
|
|
||||||
|
const voices = speechSynthesis.getVoices().filter(voice => voice.lang == "es");
|
||||||
|
|
||||||
|
console.log(voices);
|
||||||
|
iterar_voces('¡Hola, mundo! Esto es una prueba. ¿Qué tal funciona?', voices, 0);
|
||||||
|
// voices.forEach((voice, i) => {
|
||||||
|
|
||||||
|
// iterar_voces('¡Hola, mundo! Esto es una prueba. ¿Qué tal funciona?');
|
||||||
|
|
||||||
|
// speechSynthesis.speak(utterance);
|
||||||
|
|
||||||
|
// });
|
||||||
|
// utterance.voice = voices[4];
|
||||||
|
// speechSynthesis.speak(utterance);
|
||||||
|
// speechSynthesis.
|
||||||
|
// window.speechSynthesis.onvoiceschanged = () => {
|
||||||
|
// const voices = window.speechSynthesis.getVoices();
|
||||||
|
|
||||||
|
// // Verifica si se han cargado voces
|
||||||
|
// if (voices.length === 0) {
|
||||||
|
// console.error('No se encontraron voces.');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Selecciona la primera voz disponible (puedes personalizar esto)
|
||||||
|
// const selectedVoice = voices[0];
|
||||||
|
|
||||||
|
// const utterance = new SpeechSynthesisUtterance('Hola, mundo!');
|
||||||
|
// utterance.voice = selectedVoice;
|
||||||
|
|
||||||
|
// window.speechSynthesis.speak(utterance);
|
||||||
|
// };
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
15
Python/Application/ErrorsManager.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from Abstracts.Applications import ApplicationsAbstract
|
||||||
|
from Abstracts.AnPMap import AnP, Optional, Any
|
||||||
|
from os.path import abspath as path_absolute
|
||||||
|
from os.path import dirname as directory_name
|
||||||
|
|
||||||
|
class ErrorsManager(ApplicationsAbstract):
|
||||||
|
|
||||||
|
def __init__(self, anp:AnP|None, inputs:Optional[dict[str, Any|None]|tuple|list] = None) -> None:
|
||||||
|
super().__init__(anp, "errors_manager", anp.path.get_parent(path_absolute(directory_name(__file__))), {
|
||||||
|
**anp.get_dictionary(inputs),
|
||||||
|
"errors_manager_default_settings_files" : "/JSON/ErrorsManager.py.settings.json"
|
||||||
|
})
|
397
Python/ErrorsManager.py
Normal file
@ -0,0 +1,397 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from typing import Any, Optional
|
||||||
|
from re import Pattern as REPattern
|
||||||
|
from re import compile as RECompile
|
||||||
|
from math import log2
|
||||||
|
|
||||||
|
class ErrorsManager:
|
||||||
|
|
||||||
|
BASE64:list[str] = [*"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="]
|
||||||
|
|
||||||
|
def __init__(self, alphabet:Optional[str|list[str]|tuple[str]] = None) -> None:
|
||||||
|
|
||||||
|
self.__error:int = 0
|
||||||
|
# self.__re_hexa_error:REPattern|None = None
|
||||||
|
self.__alphabet:list[str] = []
|
||||||
|
|
||||||
|
self.set_alphabet(alphabet)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_string(value:Any|None) -> bool:
|
||||||
|
return isinstance(value, str)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_array(value:Any|None) -> bool:
|
||||||
|
return isinstance(value, (list, tuple))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_integer(value:Any|None) -> bool:
|
||||||
|
return isinstance(value, int)
|
||||||
|
|
||||||
|
def set_alphabet(self, alphabet:Optional[str] = None) -> int:
|
||||||
|
|
||||||
|
self.__error = (
|
||||||
|
0 if alphabet == None else
|
||||||
|
1 << 2 if not ErrorsManager.is_array(alphabet) and not ErrorsManager.is_string(alphabet) else
|
||||||
|
0) << 1
|
||||||
|
|
||||||
|
if not self.__error:
|
||||||
|
if alphabet:
|
||||||
|
|
||||||
|
original_length:int = len(self.__alphabet)
|
||||||
|
final_length:int = 0
|
||||||
|
character:str
|
||||||
|
i:int
|
||||||
|
|
||||||
|
alphabet = (
|
||||||
|
alphabet if isinstance(alphabet, list) else
|
||||||
|
list(alphabet) if isinstance(alphabet, tuple) else
|
||||||
|
[*alphabet])
|
||||||
|
alphabet = [character for i, character in alphabet if isinstance(character, str) and len(character) == 1 and alphabet.index(character) == i]
|
||||||
|
final_length = len(alphabet)
|
||||||
|
|
||||||
|
self.__error |= (
|
||||||
|
1 << 0 if original_length != final_length else
|
||||||
|
1 << 1 if final_length < 64 else
|
||||||
|
0) << 5
|
||||||
|
|
||||||
|
self.__alphabet = (
|
||||||
|
self.__alphabet if self.__alphabet and len(self.__alphabet) else
|
||||||
|
ErrorsManager.BASE64) if self.__error or not alphabet else alphabet
|
||||||
|
# self.__re_hexa_error = RECompile(r'[^' + alphabet[0] + ']')
|
||||||
|
|
||||||
|
return self.__error
|
||||||
|
|
||||||
|
def to_array(self,
|
||||||
|
code:str|int|list[int]|tuple[int],
|
||||||
|
length:Optional[int] = 1
|
||||||
|
) -> list[int]:
|
||||||
|
|
||||||
|
array:list[int] = []
|
||||||
|
|
||||||
|
if ErrorsManager.is_string(code):
|
||||||
|
|
||||||
|
hexa:str
|
||||||
|
|
||||||
|
for hexa in code:
|
||||||
|
array += [self.__alphabet.index(hexa)]
|
||||||
|
|
||||||
|
elif ErrorsManager.is_integer(code):
|
||||||
|
while code:
|
||||||
|
array += [code & 0x3F]
|
||||||
|
code >>= 6
|
||||||
|
elif ErrorsManager.is_array(code):
|
||||||
|
|
||||||
|
hexa:int
|
||||||
|
|
||||||
|
for hexa in code:
|
||||||
|
array += [hexa]
|
||||||
|
|
||||||
|
while len(array) < length:
|
||||||
|
array += [0]
|
||||||
|
|
||||||
|
return array
|
||||||
|
|
||||||
|
def process(self,
|
||||||
|
error:int|str|list[int]|tuple[int],
|
||||||
|
messages:list[str]|tuple[str]
|
||||||
|
) -> list[str]:
|
||||||
|
|
||||||
|
response:list[str] = []
|
||||||
|
m:int = len(messages)
|
||||||
|
i:int
|
||||||
|
hexa:int
|
||||||
|
|
||||||
|
for i, hexa in enumerate(self.to_array(error)):
|
||||||
|
|
||||||
|
j:int
|
||||||
|
|
||||||
|
for j in range(6):
|
||||||
|
if hexa & (1 << j):
|
||||||
|
|
||||||
|
k:int = j + i * 6
|
||||||
|
|
||||||
|
response += [[k, messages[k] if k < m and messages[k] else "error_message_" + str(k)]]
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
def get_alphabet(self) -> str:
|
||||||
|
return "".join(self.__alphabet)
|
||||||
|
|
||||||
|
def bits(self, code:str|int|list[int]|tuple[int]) -> int|None:
|
||||||
|
|
||||||
|
if ErrorsManager.is_integer(code):
|
||||||
|
return 1 if not code else int(log2(code) + 1)
|
||||||
|
|
||||||
|
if ErrorsManager.is_string(code):
|
||||||
|
code = self.to_array(code)
|
||||||
|
|
||||||
|
if ErrorsManager.is_array(code):
|
||||||
|
|
||||||
|
code = self.compact(code)
|
||||||
|
|
||||||
|
l:int = len(code)
|
||||||
|
|
||||||
|
return 1 if not l or not code[-1] else (l - 1) * 6 + int(log2(code[-1]) + 1)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def to_array_binary(self, code:str|int|list[int]|tuple[int]) -> list[str]:
|
||||||
|
|
||||||
|
hexa:int
|
||||||
|
|
||||||
|
return [("000000" + "{0:b}".format(hexa))[-6:] for hexa in self.to_array(code)]
|
||||||
|
|
||||||
|
def to_integer(self, code:str|int|list[int]|tuple[int]) -> int:
|
||||||
|
if ErrorsManager.is_integer(code):
|
||||||
|
return code
|
||||||
|
if ErrorsManager.is_array(code):
|
||||||
|
|
||||||
|
hexa:int
|
||||||
|
i:int
|
||||||
|
|
||||||
|
return sum([hexa << i * 6 for i, hexa in enumerate(code)])
|
||||||
|
if ErrorsManager.is_string(code):
|
||||||
|
|
||||||
|
hexa:str
|
||||||
|
i:int
|
||||||
|
|
||||||
|
return sum([self.__alphabet.index(hexa) << i * 6 for i, hexa in enumerate(code)])
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def to_string(self,
|
||||||
|
code:str|int|list[int]|tuple[int],
|
||||||
|
length:Optional[int] = 1
|
||||||
|
) -> str:
|
||||||
|
|
||||||
|
string:str = ""
|
||||||
|
|
||||||
|
if ErrorsManager.is_string(code):
|
||||||
|
string += code
|
||||||
|
elif ErrorsManager.is_integer(code):
|
||||||
|
while code:
|
||||||
|
string += self.__alphabet[code & 0x3F]
|
||||||
|
code >>= 6
|
||||||
|
elif ErrorsManager.is_array(code):
|
||||||
|
|
||||||
|
hexa:str
|
||||||
|
|
||||||
|
string = "".join([self.__alphabet[hexa] for hexa in code])
|
||||||
|
|
||||||
|
while len(string) < length:
|
||||||
|
string += self.__alphabet[0]
|
||||||
|
|
||||||
|
return string or self.__alphabet[0]
|
||||||
|
|
||||||
|
def has(self,
|
||||||
|
code:int|str|tuple[int]|list[int],
|
||||||
|
bits:Optional[int|list[int]|tuple[int]] = None
|
||||||
|
) -> bool:
|
||||||
|
if not ErrorsManager.is_integer(bits) and not ErrorsManager.is_array(bits):
|
||||||
|
if ErrorsManager.is_string(code):
|
||||||
|
|
||||||
|
hexa:str
|
||||||
|
|
||||||
|
for hexa in code:
|
||||||
|
if self.__alphabet.index(hexa):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
if ErrorsManager.is_integer(code):
|
||||||
|
return not not code
|
||||||
|
if ErrorsManager.is_array(code):
|
||||||
|
|
||||||
|
hexa:int
|
||||||
|
|
||||||
|
for hexa in code:
|
||||||
|
if hexa:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
error:list[int] = self.to_array(code)
|
||||||
|
bit:int
|
||||||
|
|
||||||
|
if ErrorsManager.is_integer(bits):
|
||||||
|
bits = (bits,)
|
||||||
|
|
||||||
|
for bit in bits[:len(error) - 1]:
|
||||||
|
if error[bit]:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def to_unknown(self, code:Any|None) -> Any|None:
|
||||||
|
return code
|
||||||
|
|
||||||
|
def compact(self, code:int|str|list[int]|tuple[int]) -> int|str|list[int]:
|
||||||
|
if ErrorsManager.is_string(code):
|
||||||
|
while code and code[-1] == self.__alphabet[0]:
|
||||||
|
code = code[:-1]
|
||||||
|
return code or self.__alphabet[0]
|
||||||
|
if ErrorsManager.is_array(code):
|
||||||
|
code = list(code)
|
||||||
|
while len(code) and not code[-1]:
|
||||||
|
code = code[:-1]
|
||||||
|
return code if len(code) else [0]
|
||||||
|
if ErrorsManager.is_integer(code):
|
||||||
|
return code
|
||||||
|
return 0
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def type(self, code:int|str|tuple[int]|list[int]):
|
||||||
|
return (
|
||||||
|
"string" if self.is_string(code) else
|
||||||
|
"integer" if self.is_integer(code) else
|
||||||
|
"array" if self.is_array(code) else
|
||||||
|
"unknown")
|
||||||
|
|
||||||
|
def bitwise(self,
|
||||||
|
code:int|str|tuple[int]|list[int],
|
||||||
|
bits:int
|
||||||
|
) -> str|int|list[int]:
|
||||||
|
|
||||||
|
if not bits or not self.has(code):
|
||||||
|
return code
|
||||||
|
|
||||||
|
reverse:bool = bits < 0
|
||||||
|
|
||||||
|
if reverse:
|
||||||
|
bits *= -1
|
||||||
|
|
||||||
|
start:int = int(bits / 6)
|
||||||
|
rest:int = bits % 6
|
||||||
|
type_method:str = "to_" + ErrorsManager.type(code)
|
||||||
|
i:int
|
||||||
|
test:bool = bits == 35
|
||||||
|
|
||||||
|
code = self.to_array(code)
|
||||||
|
|
||||||
|
if reverse:
|
||||||
|
|
||||||
|
code = code[start:]
|
||||||
|
|
||||||
|
if rest:
|
||||||
|
if code:
|
||||||
|
|
||||||
|
r:int = 6 - rest
|
||||||
|
block:int = ~-(1 << rest)
|
||||||
|
hexa:int
|
||||||
|
|
||||||
|
code = [(hexa >> rest) | ((code[i + 1] & block) << r) for i, hexa in enumerate(code[:-1])] + [code[-1] >> rest]
|
||||||
|
|
||||||
|
else:
|
||||||
|
code = [0]
|
||||||
|
|
||||||
|
else:
|
||||||
|
test and print(["start", start, rest])
|
||||||
|
|
||||||
|
if rest:
|
||||||
|
|
||||||
|
r:int = 6 - rest
|
||||||
|
mask:int = ~-(1 << 6)
|
||||||
|
|
||||||
|
code = [(code[0] << rest) & mask] + [((hexa << rest) & mask) | (code[i - 1] >> r) for i, hexa in enumerate(code[1:])] + [code[-1] >> r]
|
||||||
|
|
||||||
|
test and print(code)
|
||||||
|
|
||||||
|
for i in range(start):
|
||||||
|
code = [0] + code
|
||||||
|
|
||||||
|
return getattr(self, type_method)(code)
|
||||||
|
|
||||||
|
def set(self,
|
||||||
|
code:int|str|list[int]|tuple[int],
|
||||||
|
error:int|str|list[int]|tuple[int],
|
||||||
|
bit:Optional[int] = 0,
|
||||||
|
length:Optional[int] = 0
|
||||||
|
) -> str:
|
||||||
|
|
||||||
|
code = self.to_array(code)
|
||||||
|
error = self.to_array(error)
|
||||||
|
|
||||||
|
if bit:
|
||||||
|
error = self.bitwise(error, bit)
|
||||||
|
|
||||||
|
i:int = int(bit / 6)
|
||||||
|
|
||||||
|
if length:
|
||||||
|
|
||||||
|
start:int = bit % 6
|
||||||
|
j:int
|
||||||
|
hexa:int
|
||||||
|
end:int = (start + length) % 6
|
||||||
|
|
||||||
|
for j, hexa in enumerate([~-(1 << start)] + [0 for j in range(int((length + start) / 6) - 1)] + ([~-(1 << (6 - end)) << end] if end else [])):
|
||||||
|
code[j + i] &= hexa
|
||||||
|
|
||||||
|
if self.has(error):
|
||||||
|
|
||||||
|
l:int = len(error)
|
||||||
|
|
||||||
|
while len(code) < i:
|
||||||
|
code += [0]
|
||||||
|
|
||||||
|
m:int = len(code)
|
||||||
|
|
||||||
|
while i < l:
|
||||||
|
if i >= m:
|
||||||
|
code += [0]
|
||||||
|
code[i] = (code[i] or 0) | error[i]
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
return self.compact(self.to_string(code))
|
||||||
|
|
||||||
|
def join(self,
|
||||||
|
code:int|str|list[int]|tuple[int],
|
||||||
|
error:int|str|list[int]|tuple[int],
|
||||||
|
bit:Optional[int] = 0,
|
||||||
|
length:Optional[int] = 0
|
||||||
|
) -> str:
|
||||||
|
return self.set(code, error, bit, length)
|
||||||
|
|
||||||
|
def set_blocks(self,
|
||||||
|
code:str|int|tuple[int]|list[int],
|
||||||
|
blocks:list[str|int|tuple[int]|list[int]]|tuple[str|int|tuple[int]|list[int]],
|
||||||
|
bit:Optional[int] = 0,
|
||||||
|
length:Optional[int] = 0
|
||||||
|
) -> str:
|
||||||
|
|
||||||
|
block:int
|
||||||
|
i:int
|
||||||
|
|
||||||
|
if length:
|
||||||
|
code = self.set(code, 0, bit, length)
|
||||||
|
|
||||||
|
for i, block in blocks:
|
||||||
|
if block:
|
||||||
|
code = self.set(code, block, i + bit)
|
||||||
|
|
||||||
|
return code or self.__alphabet[0]
|
||||||
|
|
||||||
|
def slice(self,
|
||||||
|
code:str|int|list[int]|tuple[int],
|
||||||
|
_from:int,
|
||||||
|
_to:Optional[int] = 0
|
||||||
|
) -> str|int|list[int]|None:
|
||||||
|
if self.has(code):
|
||||||
|
return code
|
||||||
|
|
||||||
|
bits:int = self.bits(code)
|
||||||
|
rest:int
|
||||||
|
|
||||||
|
if _from < 0:
|
||||||
|
_from = bits + _from
|
||||||
|
_to = (
|
||||||
|
bits if _to > bits else
|
||||||
|
bits - _to if _to < 0 else
|
||||||
|
_to) - _from
|
||||||
|
rest = _to %6
|
||||||
|
code = self.bitwise(code, -_from)
|
||||||
|
|
||||||
|
return (
|
||||||
|
code[:int(_to / 6)] + (self.__alphabet[self.__alphabet.index(code[-1]) & ~-(1 << rest)] if rest else "") if ErrorsManager.is_string(code) else
|
||||||
|
code[:int(_to / 6)] + ([code[-1] & ~-(1 << rest)] if rest else []) if ErrorsManager.is_array(code) else
|
||||||
|
code & ~-(1 << _to) if ErrorsManager.is_integer(code) else
|
||||||
|
None)
|
||||||
|
|
||||||
|
def has_range(self, code:int|str|list[int]|tuple[int], _from:int, _to:Optional[int] = 0) -> bool:
|
||||||
|
return self.has(self.slice(code, _from, _to))
|
65
Python/tests.py
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from ErrorsManager import ErrorsManager
|
||||||
|
from json import dumps as json_encode
|
||||||
|
|
||||||
|
errors_manager:ErrorsManager = ErrorsManager()
|
||||||
|
|
||||||
|
print(errors_manager.to_string(105))
|
||||||
|
print(errors_manager.to_array(105))
|
||||||
|
print(errors_manager.to_array_binary(105))
|
||||||
|
print(errors_manager.process(105, ["error_message_" + str(i) for i, _ in enumerate("0123456789abcdef")]))
|
||||||
|
|
||||||
|
|
||||||
|
print(errors_manager.bits(105))
|
||||||
|
print(errors_manager.bits("pB"))
|
||||||
|
print(errors_manager.bits([41, 1]))
|
||||||
|
|
||||||
|
options = [-10, -5, -3, -1, 0, 1, 3, 5, 10]
|
||||||
|
filler = ""
|
||||||
|
results = []
|
||||||
|
|
||||||
|
while len(filler) < 30:
|
||||||
|
filler += " "
|
||||||
|
|
||||||
|
def format(value, characters):
|
||||||
|
return " " + (
|
||||||
|
json_encode(value).replace(",", ", ") + filler
|
||||||
|
)[:characters]
|
||||||
|
|
||||||
|
for i, value in enumerate([105, "pB", [41, 1]]):
|
||||||
|
for bits in options:
|
||||||
|
|
||||||
|
new_value = errors_manager.bitwise(value, bits)
|
||||||
|
example = [
|
||||||
|
format(value, 7),
|
||||||
|
format(errors_manager.to_array_binary(value), 20),
|
||||||
|
format(bits, 4),
|
||||||
|
format(new_value, 12),
|
||||||
|
format(errors_manager.to_array_binary(new_value), 30)
|
||||||
|
]
|
||||||
|
|
||||||
|
results += [example]
|
||||||
|
|
||||||
|
print(example)
|
||||||
|
|
||||||
|
print("")
|
||||||
|
|
||||||
|
# [105, "pB", [41, 1]].forEach((value, i) => options.forEach(bits => {
|
||||||
|
|
||||||
|
# const new_value = errors_manager.bitwise(value, bits)
|
||||||
|
|
||||||
|
# results.push([
|
||||||
|
# format(value, 7),
|
||||||
|
# format(errors_manager.to_array_binary(value), 20),
|
||||||
|
# format(bits, 4),
|
||||||
|
# format(new_value, 12),
|
||||||
|
# format(errors_manager.to_array_binary(new_value), 30)
|
||||||
|
# ])
|
||||||
|
# // print(results[results.length - 1])
|
||||||
|
|
||||||
|
# }))
|
||||||
|
|
||||||
|
# -- print(results)
|
||||||
|
# // print(results.map(result => result.join("|")).join("\n"))
|
3
Tools/sass.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
directory=`dirname $(readlink -f "$0")`
|
||||||
|
sass $directory/../Public/scss/ErrorsManager.scss ../Public/scss/ErrorsManager.css;
|
3
Tools/test.py.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
directory=`dirname $(readlink -f "$0")`
|
||||||
|
python3 $directory/../Python/tests.py
|