fix(py): Regular Expressions for text format fixed.
This commit is contained in:
		
							parent
							
								
									2fee5fa5d1
								
							
						
					
					
						commit
						1c43e093e9
					
				
							
								
								
									
										1209
									
								
								CSharp/WMarkDown.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1209
									
								
								CSharp/WMarkDown.cs
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -282,6 +282,17 @@ const WMarkDown = function(inputs){
 | 
			
		||||
        return box;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    this.get_anp = item => {
 | 
			
		||||
 | 
			
		||||
        while(!item.classList.contains("anp") && (item = item.parentNode))
 | 
			
		||||
            if(!item.classList){
 | 
			
		||||
                item = null;
 | 
			
		||||
                break;
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
        return item;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @returns {void}
 | 
			
		||||
     * @access private
 | 
			
		||||
@ -298,10 +309,21 @@ const WMarkDown = function(inputs){
 | 
			
		||||
                  /** @type {HTMLElement} */
 | 
			
		||||
                  content = block.querySelector(".content"), 
 | 
			
		||||
                  /** @type {String} */
 | 
			
		||||
                  type = block.getAttribute("data-type").toLowerCase();
 | 
			
		||||
                  type = block.getAttribute("data-type").toLowerCase(), 
 | 
			
		||||
                  /** @type {HTMLElement|null} */
 | 
			
		||||
                  anp_item = self.get_anp(block), 
 | 
			
		||||
                  /** @type {Boolean} */
 | 
			
		||||
                  dark_mode = (
 | 
			
		||||
                      anp_item ? (anp_item.getAttribute("data-gui_mode") == "dark" || (anp_item.getAttribute("data-gui-mode") == "default" && anp_item.getAttribute("data-dark-mode") == "true")) : 
 | 
			
		||||
                  window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches);
 | 
			
		||||
 | 
			
		||||
            block.setAttribute("data-processed", true);
 | 
			
		||||
 | 
			
		||||
            mermaid.initialize({
 | 
			
		||||
                theme : dark_mode ? "dark" : "default", 
 | 
			
		||||
                themeVariables : {fontSize : "16px"}
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            if(["math", "maths", "mathjax"].includes(language)){
 | 
			
		||||
                build_special_type(content, "MathJax").innerHTML = MathJax.tex2chtml(content.innerText).outerHTML;
 | 
			
		||||
                MathJax.startup.document.clear();
 | 
			
		||||
 | 
			
		||||
@ -657,4 +657,11 @@
 | 
			
		||||
        "https://x.com/litecoin", 
 | 
			
		||||
        "https://www.reddit.com/r/litecoin/"
 | 
			
		||||
    ]
 | 
			
		||||
], [
 | 
			
		||||
    [
 | 
			
		||||
        ["/\\bsrx06\\b/gi", "Grillo Team"], 
 | 
			
		||||
        ["/\\bgri(ll+|y)o[ \t]*t(e[ae]|i)[mn]\\b/gi", "Grillo Team"]
 | 
			
		||||
    ], [
 | 
			
		||||
        "Grupo profesional de las TIC."
 | 
			
		||||
    ], []
 | 
			
		||||
]]
 | 
			
		||||
							
								
								
									
										144
									
								
								Public/json/WMarkDown.dict.es.kyman.padron.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								Public/json/WMarkDown.dict.es.kyman.padron.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,144 @@
 | 
			
		||||
[[
 | 
			
		||||
    [
 | 
			
		||||
        ["/\\bpadr[oó]n *municipal *(de *)?habitantes\\b/ig", "Padrón Municipal de Habitantes"], 
 | 
			
		||||
        ["/\\bpadr[oó]n *(de *)?habitantes\\b/ig", "Padrón de Habitantes"], 
 | 
			
		||||
        ["/\\bpadr[oó]n\\b/ig", "Padrón"], 
 | 
			
		||||
        ["/(?<!\\.)(\\bpmh\\b|\\bp\\. *m\\. *h\\. *)/ig", "PMH"]
 | 
			
		||||
    ], [
 | 
			
		||||
        "El Padrón de Habitantes, o Padrón Municipal de Habitantes o PMH en el caso ", 
 | 
			
		||||
        "de España, es una base de datos para el registro de los ciudadanos."
 | 
			
		||||
    ], [
 | 
			
		||||
        "https://es.wikipedia.org/wiki/Padr%C3%B3n_municipal_de_habitantes", 
 | 
			
		||||
        "https://www.ine.es/dyngs/INEbase/es/categoria.htm?c=Estadistica_P&cid=1254734710990"
 | 
			
		||||
    ]
 | 
			
		||||
], [
 | 
			
		||||
    [
 | 
			
		||||
        ["/\\bcomunidad(es)? *aut[oó]noma(s)?\\b/ig", "Comunidad$1 Autónoma$2"], 
 | 
			
		||||
        ["/(?<!\\.)(\\bccaa\\b|c{1,2}\\. *a{1,2}\\. *)/gi", "CCAA"], 
 | 
			
		||||
        ["/\\bciudad(es)? *aut[óo]noma(s)?\\b/gi", "Ciudad$1 Autónoma$2"]
 | 
			
		||||
    ], [
 | 
			
		||||
        "Las Comunidades Autónomas son las subdivisiones territoriales dentro del país, ", 
 | 
			
		||||
        "las cuales con tienen las subdivisiones provinciales. Las Ciudades Autónomas ", 
 | 
			
		||||
        "como Ceuta y Melilla también están dentro de estas subdivisiones, aunque tengan ", 
 | 
			
		||||
        "otro nombre."
 | 
			
		||||
    ], [
 | 
			
		||||
        "https://www.ine.es/jaxiT3/Tabla.htm?t=3035&L=0", 
 | 
			
		||||
        "https://www.educacionfpydeportes.gob.es/eu/contenidos/in/comunidades-autonomas.html", 
 | 
			
		||||
        "https://administracion.gob.es/pagFront/espanaAdmon/directorioOrganigramas/comunidadesAutonomas/comunidadesAutonomas.htm", 
 | 
			
		||||
        "https://administracion.gob.es/pag_Home/atencionCiudadana/SedesElectronicas-y-Webs-Publicas/websPublicas/WP_CCAA.html", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/Comunidad_aut%C3%B3noma"
 | 
			
		||||
    ]
 | 
			
		||||
], [
 | 
			
		||||
    ["/\\bprovincia(s)?\\b/ig", "Provincia$1"], [
 | 
			
		||||
        "Las Provincias son las subdivisiones de las Comunidades Autónomas y Ciudades ", 
 | 
			
		||||
        "Autónomas, pudiendo éstas la propia provincia como pasa con el Principado de ", 
 | 
			
		||||
        "Asturias."
 | 
			
		||||
    ], [
 | 
			
		||||
        "https://www.ine.es/daco/daco42/codmun/cod_provincia_estandar.htm", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/Provincia_(Espa%C3%B1a)", 
 | 
			
		||||
        "https://commons.wikimedia.org/wiki/Category:Provinces_of_Spain"
 | 
			
		||||
    ]
 | 
			
		||||
], [
 | 
			
		||||
    [
 | 
			
		||||
        ["/\\bmunicipio(s)?\\b/ig", "Municipio$1"], 
 | 
			
		||||
        ["/\\bayuntamiento(s)?\\b/ig", "Ayuntamiento$1"], 
 | 
			
		||||
        ["/\\bconcello(s)?\\b/ig", "Concello$1"]
 | 
			
		||||
    ], [
 | 
			
		||||
        "Los Municipios son la partición del territorio Español mínimo a nivel de ", 
 | 
			
		||||
        "Gobierno, siendo éste el Ayuntamiento (Concello en gallego) el órgano de ", 
 | 
			
		||||
        "Gobierno Local."
 | 
			
		||||
    ], [
 | 
			
		||||
        "http://ayuntamientos.org.es/", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/Municipio", 
 | 
			
		||||
        "https://es.wiktionary.org/wiki/municipio", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/Ayuntamiento_(Espa%C3%B1a)"
 | 
			
		||||
    ]
 | 
			
		||||
], [
 | 
			
		||||
    [
 | 
			
		||||
        ["/\\bc[oó]digo(s)? *postal(es)?\\b/ig", "Código$1 Postal$2"], 
 | 
			
		||||
        ["/(?<!\\.)(\\bcp\\b|\\bc\\. *p\\. *)/ig", "CP"]
 | 
			
		||||
    ], [
 | 
			
		||||
        "Los Códigos Postales son una serie de códigos de 5 dígitos que representan áreas ", 
 | 
			
		||||
        "más pequeñas que los Municipios, de código único que se reparten a nivel nacional."
 | 
			
		||||
    ], [
 | 
			
		||||
        "https://www.correos.es/es/es/herramientas/codigos-postales/detalle", 
 | 
			
		||||
        "https://www.codigospostales.com/mapfus.html", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/C%C3%B3digo_postal", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/C%C3%B3digo_postal_de_Espa%C3%B1a"
 | 
			
		||||
    ]
 | 
			
		||||
], [
 | 
			
		||||
    [
 | 
			
		||||
        ["/\\binstituto *nacional *(de *)estad[ií]stica\\b/ig", "Instituto Nacional de Estadística"], 
 | 
			
		||||
        ["/(?<!\\.)(\\bine\\b|\\bi\\. *n\\. *e\\. *)/ig", "INE"]
 | 
			
		||||
    ], [
 | 
			
		||||
        "El Instituto Nacional de Estadística, también conocido como INE por sus siglas, es ", 
 | 
			
		||||
        "el órgano administrativo del estado encargado de la gestión de estadísticas estatales ", 
 | 
			
		||||
        "así como de la gestión de gran parte de los datos a nivel centralizado del estado, ", 
 | 
			
		||||
        "donde todas las competencias independientes dentro del mismo han de aportar los datos ", 
 | 
			
		||||
        "pertinentes según sea necesario."
 | 
			
		||||
    ], [
 | 
			
		||||
        "https://www.ine.es/", 
 | 
			
		||||
        "https://sede.ine.gob.es/", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/Instituto_Nacional_de_Estad%C3%ADstica_(Espa%C3%B1a)", 
 | 
			
		||||
        "http://www.datosgraficos.com/"
 | 
			
		||||
    ]
 | 
			
		||||
], [
 | 
			
		||||
    [
 | 
			
		||||
        ["/\\bdocumento *nacional *(de *)identidad\\b/ig", "Documento Nacional de Identidad"], 
 | 
			
		||||
        ["/(?<!\\.)(\\bdni\\b|\\bd\\. *n\\. *i\\. *)/ig", "DNI"], 
 | 
			
		||||
        ["/\\bn[úu]mero *(de *)(identificaci[oó]n|identidad) *(de *)extranjer([ií]a|o)\\b/ig", "Número de Identidad de Extranjero"], 
 | 
			
		||||
        ["/(?<!\\.)(\\bnie\\b|\\bn\\. *i\\. *e\\. *)/ig", "NIE"], 
 | 
			
		||||
        ["/\\bn[uú]mero *(de *)identificaci[oó]n *fiscal\\b/ig", "Número de Identificación Fiscal"], 
 | 
			
		||||
        ["/(?<!\\.)(\\bnif\\b|\\bn\\. *i\\. *f\\. *)/ig", "NIF"], 
 | 
			
		||||
        ["/\\bc[oó]digo *(de *)identificaci[oó]n *fiscal\\b/ig", "Código de Identificación Fiscal"], 
 | 
			
		||||
        ["/(?<!\\.)(\\bcif\\b|\\bc\\. *i\\. *f\\. *)/ig", "CIF"]
 | 
			
		||||
    ], [
 | 
			
		||||
        "Para identificar a las personas físicas y jurídicas en España se emplean diversos sistemas, ", 
 | 
			
		||||
        "siendo el más común y conocido el DNI para identificar a las personas físicas; pero también ", 
 | 
			
		||||
        "tenemos el NIE para extranjeros residentes España; NIF para hacer una identificación fiscal y ", 
 | 
			
		||||
        "tributaria de las personas físicas; o CIF para lo mismo pero para el caso de las personas ", 
 | 
			
		||||
        "jurídicas."
 | 
			
		||||
    ], [
 | 
			
		||||
        "https://www.dnielectronico.es/", 
 | 
			
		||||
        "https://www.citapreviadnie.es/", 
 | 
			
		||||
        "https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/dni/", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/Documento_nacional_de_identidad_(Espa%C3%B1a)", 
 | 
			
		||||
        "https://sede.policia.gob.es/portalCiudadano/_es/tramites_ciudadania_dnielectronico.php", 
 | 
			
		||||
        "https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/extranjeria/ciudadanos-de-la-union-europea/numero-de-Identidad-de-extranjero-nie/", 
 | 
			
		||||
        "https://sede.policia.gob.es/portalCiudadano/_es/tramites_extranjeria_tramite_asignacion_nie.php", 
 | 
			
		||||
        "https://www.inclusion.gob.es/web/migraciones/w/numero-de-identidad-de-extranjero-nie-hi91", 
 | 
			
		||||
        "https://sede.administracionespublicas.gob.es/pagina/index/directorio/icpplus", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/N%C3%BAmero_de_identificaci%C3%B3n_fiscal", 
 | 
			
		||||
        "https://www.boe.es/buscar/doc.php?id=BOE-A-2007-15984", 
 | 
			
		||||
        "https://www.boe.es/buscar/doc.php?id=BOE-A-1990-6394", 
 | 
			
		||||
        "https://sede.agenciatributaria.gob.es/Sede/censos-nif-domicilio-fiscal/solicitar-nif.html", 
 | 
			
		||||
        "https://www.exteriores.gob.es/Consulados/toulouse/es/ServiciosConsulares/Paginas/index.aspx?scca=Pasaportes+y+otros+documentos&scco=Francia&scd=281&scs=N%C3%BAmero+de+Identificaci%C3%B3n+Fiscal+(NIF)", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal", 
 | 
			
		||||
        "https://www.boe.es/buscar/doc.php?id=BOE-A-2007-15984"
 | 
			
		||||
    ]
 | 
			
		||||
], [
 | 
			
		||||
    ["/\\bunidad *familiar\\b/gi", "Unidad Familiar"], [
 | 
			
		||||
        "La Unidad Familiar o convivientes, viene siendo las personas que conviven bajo una misma vivienda."
 | 
			
		||||
    ], [
 | 
			
		||||
        "https://taxdown.es/taxductor/taxductor-unidad-familiar-que-es/", 
 | 
			
		||||
        "https://sede.agenciatributaria.gob.es/Sede/ayuda/manuales-videos-folletos/manuales-ayuda-presentacion/irpf-2019/3-cuestiones-generales/3_2-tributacion-individual-conjunta/3_2_1-unidad-familiar.html", 
 | 
			
		||||
        "https://sede.agenciatributaria.gob.es/Sede/irpf/tengo-que-presentar-declaracion/declaracion-individual-conjunta/que-unidad-familiar.html", 
 | 
			
		||||
        "https://www.conceptosjuridicos.com/unidad-familiar/", 
 | 
			
		||||
        "https://www.sepe.es/HomeSepe/es/Personas/distributiva-prestaciones/FAQS/solicitud-prestaciones/libro-familia-acreditacion-unidad-familiar.html"
 | 
			
		||||
    ]
 | 
			
		||||
], [
 | 
			
		||||
    [
 | 
			
		||||
        ["/\\bdirecci[oó]n *general *(de *)catastr(o|al)\\b/gi", "Dirección General de Catastro"], 
 | 
			
		||||
        ["/\\bcatastr(os?|al(es)?)\\b/gi", "Catastr$1"]
 | 
			
		||||
    ], [
 | 
			
		||||
        "Catastro es un órgano administrativo vinculado a la Hacienda Pública la cua registra las ", 
 | 
			
		||||
        "propiedades, inmuebles, terrenos y áreas. En cada país puede funcionar distinto dependiendo ", 
 | 
			
		||||
        "del orden administrativo y/o estatal que posea."
 | 
			
		||||
    ], [
 | 
			
		||||
        "https://www.catastro.hacienda.gob.es/", 
 | 
			
		||||
        "https://www.sedecatastro.gob.es/", 
 | 
			
		||||
        "https://www1.sedecatastro.gob.es/Cartografia/mapa.aspx?buscar=S", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/Catastro", 
 | 
			
		||||
        "https://es.wikipedia.org/wiki/Direcci%C3%B3n_General_del_Catastro"
 | 
			
		||||
    ]
 | 
			
		||||
]]
 | 
			
		||||
@ -65,6 +65,8 @@
 | 
			
		||||
      padding: .1em;
 | 
			
		||||
      white-space: nowrap;
 | 
			
		||||
      box-sizing: border-box; }
 | 
			
		||||
  .wmd-code-block[data-type=mermaid] svg {
 | 
			
		||||
    font-size: 1em; }
 | 
			
		||||
 | 
			
		||||
.wmd-quote {
 | 
			
		||||
  display: flex;
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -67,6 +67,7 @@ $transition-out : 1s;
 | 
			
		||||
            box-sizing : border-box;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    &[data-type=mermaid] svg{font-size : 1em;}
 | 
			
		||||
}
 | 
			
		||||
.wmd-quote{
 | 
			
		||||
    display : flex;
 | 
			
		||||
 | 
			
		||||
@ -9,9 +9,7 @@ html, body {
 | 
			
		||||
  left: 0em;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
  background-color: #EFEFEF;
 | 
			
		||||
  color: #222; }
 | 
			
		||||
  overflow: hidden; }
 | 
			
		||||
  .wmarkdown-web, .wmarkdown-web input, .wmarkdown-web button, .wmarkdown-web select {
 | 
			
		||||
    font-family: "Roboto"; }
 | 
			
		||||
  .wmarkdown-web pre, .wmarkdown-web textarea,
 | 
			
		||||
@ -25,6 +23,62 @@ html, body {
 | 
			
		||||
    font-size: 1em; }
 | 
			
		||||
  .wmarkdown-web [data-visible=false], .wmarkdown-web [data-hidden=true] {
 | 
			
		||||
    display: none; }
 | 
			
		||||
  .wmarkdown-web[data-gui-mode=light], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] {
 | 
			
		||||
    background-color: #EFEFEF;
 | 
			
		||||
    color: #222; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=light] a[href], .wmarkdown-web[data-gui-mode=light] [onclick], .wmarkdown-web[data-gui-mode=light] [onmouseover], .wmarkdown-web[data-gui-mode=light] [onmousedown], .wmarkdown-web[data-gui-mode=light] button, .wmarkdown-web[data-gui-mode=light] [type=button], .wmarkdown-web[data-gui-mode=light] [type=reset], .wmarkdown-web[data-gui-mode=light] [type=submit], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] a[href], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onclick], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onmouseover], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onmousedown], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] button, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=button], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=reset], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=submit] {
 | 
			
		||||
      color: #008844; }
 | 
			
		||||
      .wmarkdown-web[data-gui-mode=light] a[href]:hover, .wmarkdown-web[data-gui-mode=light] [onclick]:hover, .wmarkdown-web[data-gui-mode=light] [onmouseover]:hover, .wmarkdown-web[data-gui-mode=light] [onmousedown]:hover, .wmarkdown-web[data-gui-mode=light] button:hover, .wmarkdown-web[data-gui-mode=light] [type=button]:hover, .wmarkdown-web[data-gui-mode=light] [type=reset]:hover, .wmarkdown-web[data-gui-mode=light] [type=submit]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] a[href]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onclick]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onmouseover]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onmousedown]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] button:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=button]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=reset]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=submit]:hover {
 | 
			
		||||
        color: #880044; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=light] [onmouseover], .wmarkdown-web[data-gui-mode=light] [onmousedown], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onmouseover], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onmousedown] {
 | 
			
		||||
      color: #115533; }
 | 
			
		||||
      .wmarkdown-web[data-gui-mode=light] [onmouseover]:hover, .wmarkdown-web[data-gui-mode=light] [onmousedown]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onmouseover]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [onmousedown]:hover {
 | 
			
		||||
        color: #551133; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=light] button, .wmarkdown-web[data-gui-mode=light] [type=button], .wmarkdown-web[data-gui-mode=light] [type=reset], .wmarkdown-web[data-gui-mode=light] [type=submit], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] button, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=button], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=reset], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=submit] {
 | 
			
		||||
      border-color: 0.1em solid #008844;
 | 
			
		||||
      box-shadow: 0em 0em 0.4em #008844; }
 | 
			
		||||
      .wmarkdown-web[data-gui-mode=light] button:hover, .wmarkdown-web[data-gui-mode=light] [type=button]:hover, .wmarkdown-web[data-gui-mode=light] [type=reset]:hover, .wmarkdown-web[data-gui-mode=light] [type=submit]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] button:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=button]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=reset]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] [type=submit]:hover {
 | 
			
		||||
        border-color: 0.1em solid #880044;
 | 
			
		||||
        box-shadow: 0em 0em 0.4em #880044; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=light] .wmd-dictionary-item, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] .wmd-dictionary-item {
 | 
			
		||||
      color: #115533; }
 | 
			
		||||
      .wmarkdown-web[data-gui-mode=light] .wmd-dictionary-item:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] .wmd-dictionary-item:hover {
 | 
			
		||||
        color: #551133; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=light] header, .wmarkdown-web[data-gui-mode=light] footer, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] header, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] footer {
 | 
			
		||||
      box-shadow: 0em 0em 0.125em #EFEFEF, 0em 0em 0.25em #EFEFEF, 0em 0em 0.5em #EFEFEF, 0em 0em 1em #EFEFEF, 0em 0em 2em #EFEFEF; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=light] .wmd-dictionary-box, .wmarkdown-web[data-gui-mode=light] .wmd-main-menu, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] .wmd-dictionary-box, .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] .wmd-main-menu {
 | 
			
		||||
      background-color: #EFEFEF;
 | 
			
		||||
      box-shadow: 0.1em 0.1em 0.2em #222; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=light] .wmd-dictionary-box a[href], .wmarkdown-web[data-gui-mode=default][data-dark-mode=false] .wmd-dictionary-box a[href] {
 | 
			
		||||
      background-color: rgba(0, 0, 0, 0.1); }
 | 
			
		||||
  .wmarkdown-web[data-gui-mode=dark], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] {
 | 
			
		||||
    background-color: #222;
 | 
			
		||||
    color: #EFEFEF; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=dark] a[href], .wmarkdown-web[data-gui-mode=dark] [onclick], .wmarkdown-web[data-gui-mode=dark] [onmouseover], .wmarkdown-web[data-gui-mode=dark] [onmousedown], .wmarkdown-web[data-gui-mode=dark] button, .wmarkdown-web[data-gui-mode=dark] [type=button], .wmarkdown-web[data-gui-mode=dark] [type=reset], .wmarkdown-web[data-gui-mode=dark] [type=submit], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] a[href], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onclick], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onmouseover], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onmousedown], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] button, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=button], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=reset], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=submit] {
 | 
			
		||||
      color: #309d66; }
 | 
			
		||||
      .wmarkdown-web[data-gui-mode=dark] a[href]:hover, .wmarkdown-web[data-gui-mode=dark] [onclick]:hover, .wmarkdown-web[data-gui-mode=dark] [onmouseover]:hover, .wmarkdown-web[data-gui-mode=dark] [onmousedown]:hover, .wmarkdown-web[data-gui-mode=dark] button:hover, .wmarkdown-web[data-gui-mode=dark] [type=button]:hover, .wmarkdown-web[data-gui-mode=dark] [type=reset]:hover, .wmarkdown-web[data-gui-mode=dark] [type=submit]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] a[href]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onclick]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onmouseover]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onmousedown]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] button:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=button]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=reset]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=submit]:hover {
 | 
			
		||||
        color: #9d3066; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=dark] [onmouseover], .wmarkdown-web[data-gui-mode=dark] [onmousedown], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onmouseover], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onmousedown] {
 | 
			
		||||
      color: #90c6ab; }
 | 
			
		||||
      .wmarkdown-web[data-gui-mode=dark] [onmouseover]:hover, .wmarkdown-web[data-gui-mode=dark] [onmousedown]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onmouseover]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [onmousedown]:hover {
 | 
			
		||||
        color: #c690ab; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=dark] button, .wmarkdown-web[data-gui-mode=dark] [type=button], .wmarkdown-web[data-gui-mode=dark] [type=reset], .wmarkdown-web[data-gui-mode=dark] [type=submit], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] button, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=button], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=reset], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=submit] {
 | 
			
		||||
      border-color: 0.1em solid #309d66;
 | 
			
		||||
      box-shadow: 0em 0em 0.4em #309d66; }
 | 
			
		||||
      .wmarkdown-web[data-gui-mode=dark] button:hover, .wmarkdown-web[data-gui-mode=dark] [type=button]:hover, .wmarkdown-web[data-gui-mode=dark] [type=reset]:hover, .wmarkdown-web[data-gui-mode=dark] [type=submit]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] button:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=button]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=reset]:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] [type=submit]:hover {
 | 
			
		||||
        border-color: 0.1em solid #9d3066;
 | 
			
		||||
        box-shadow: 0em 0em 0.4em #9d3066; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=dark] .wmd-dictionary-item, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] .wmd-dictionary-item {
 | 
			
		||||
      color: #90c6ab; }
 | 
			
		||||
      .wmarkdown-web[data-gui-mode=dark] .wmd-dictionary-item:hover, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] .wmd-dictionary-item:hover {
 | 
			
		||||
        color: #c690ab; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=dark] header, .wmarkdown-web[data-gui-mode=dark] footer, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] header, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] footer {
 | 
			
		||||
      box-shadow: 0em 0em 0.125em #222, 0em 0em 0.25em #222, 0em 0em 0.5em #222, 0em 0em 1em #222, 0em 0em 2em #222; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=dark] .wmd-dictionary-box, .wmarkdown-web[data-gui-mode=dark] .wmd-main-menu, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] .wmd-dictionary-box, .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] .wmd-main-menu {
 | 
			
		||||
      background-color: #222;
 | 
			
		||||
      box-shadow: 0.1em 0.1em 0.2em #EFEFEF; }
 | 
			
		||||
    .wmarkdown-web[data-gui-mode=dark] .wmd-dictionary-box a[href], .wmarkdown-web[data-gui-mode=default][data-dark-mode=true] .wmd-dictionary-box a[href] {
 | 
			
		||||
      background-color: rgba(255, 255, 255, 0.1); }
 | 
			
		||||
  .wmarkdown-web a[href] {
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
    word-break: break-word; }
 | 
			
		||||
@ -34,28 +88,9 @@ html, body {
 | 
			
		||||
    .wmarkdown-web a[href]:hover, .wmarkdown-web [onclick]:hover, .wmarkdown-web [onmouseover]:hover, .wmarkdown-web [onmousedown]:hover, .wmarkdown-web button:hover, .wmarkdown-web [type=button]:hover, .wmarkdown-web [type=reset]:hover, .wmarkdown-web [type=submit]:hover {
 | 
			
		||||
      transition-duration: 0.2s; }
 | 
			
		||||
  .wmarkdown-web a[href], .wmarkdown-web [onclick], .wmarkdown-web [onmouseover], .wmarkdown-web [onmousedown], .wmarkdown-web button, .wmarkdown-web [type=button], .wmarkdown-web [type=reset], .wmarkdown-web [type=submit] {
 | 
			
		||||
    color: #008844;
 | 
			
		||||
    transition-property: color; }
 | 
			
		||||
    .wmarkdown-web a[href]:hover, .wmarkdown-web [onclick]:hover, .wmarkdown-web [onmouseover]:hover, .wmarkdown-web [onmousedown]:hover, .wmarkdown-web button:hover, .wmarkdown-web [type=button]:hover, .wmarkdown-web [type=reset]:hover, .wmarkdown-web [type=submit]:hover {
 | 
			
		||||
      color: #880044; }
 | 
			
		||||
  .wmarkdown-web [onmouseover], .wmarkdown-web [onmousedown] {
 | 
			
		||||
    color: #115533;
 | 
			
		||||
    transition-property: color; }
 | 
			
		||||
    .wmarkdown-web [onmouseover]:hover, .wmarkdown-web [onmousedown]:hover {
 | 
			
		||||
      color: #551133; }
 | 
			
		||||
  .wmarkdown-web a[href], .wmarkdown-web [onclick] {
 | 
			
		||||
    transition-property: color; }
 | 
			
		||||
  .wmarkdown-web button, .wmarkdown-web [type=button], .wmarkdown-web [type=reset], .wmarkdown-web [type=submit] {
 | 
			
		||||
    border-color: 0.1em solid #008844;
 | 
			
		||||
    box-shadow: 0em 0em 0.4em #008844;
 | 
			
		||||
    transition-property: color,border-color,box-shadow; }
 | 
			
		||||
    .wmarkdown-web button:hover, .wmarkdown-web [type=button]:hover, .wmarkdown-web [type=reset]:hover, .wmarkdown-web [type=submit]:hover {
 | 
			
		||||
      border-color: 0.1em solid #880044;
 | 
			
		||||
      box-shadow: 0em 0em 0.4em #880044; }
 | 
			
		||||
  .wmarkdown-web .wmd-dictionary-item {
 | 
			
		||||
    color: #115533; }
 | 
			
		||||
    .wmarkdown-web .wmd-dictionary-item:hover {
 | 
			
		||||
      color: #551133; }
 | 
			
		||||
  .wmarkdown-web h2 {
 | 
			
		||||
    font-size: 2.6em; }
 | 
			
		||||
  .wmarkdown-web h3 {
 | 
			
		||||
@ -75,8 +110,7 @@ html, body {
 | 
			
		||||
  .wmarkdown-web header, .wmarkdown-web footer {
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: row;
 | 
			
		||||
    box-shadow: 0em 0em 0.125em #EFEFEF, 0em 0em 0.25em #EFEFEF, 0em 0em 0.5em #EFEFEF, 0em 0em 1em #EFEFEF, 0em 0em 2em #EFEFEF; }
 | 
			
		||||
    flex-direction: row; }
 | 
			
		||||
    .wmarkdown-web header > *, .wmarkdown-web footer > * {
 | 
			
		||||
      flex: auto;
 | 
			
		||||
      align-self: center; }
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
"version": 3,
 | 
			
		||||
"mappings": "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",
 | 
			
		||||
"mappings": "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",
 | 
			
		||||
"sources": ["WMarkDown.web.scss","../../../AnP/Public/scss/AnP.common.scss","../../../AnP/Public/scss/AnP.settings.scss"],
 | 
			
		||||
"names": [],
 | 
			
		||||
"file": "WMarkDown.web.css"
 | 
			
		||||
 | 
			
		||||
@ -66,38 +66,38 @@ class WMarkDown:
 | 
			
		||||
    def __init__(self) -> None:
 | 
			
		||||
        
 | 
			
		||||
        self.modules:dict[str, tuple[int, REPattern]] = {
 | 
			
		||||
            "special_characters" : (self.SUBITEM, RECompile(r'\\([\(\{\[\*\\])')), 
 | 
			
		||||
            "title" : (self.RAW, RECompile(r'^((#{1,6})[\t ]*([^\r\n]+)|(={1,6})[\t ]*([^\r\n=]+)={1,6})(\n|\r\n|\r){2,}', RE_MULTILINE)), 
 | 
			
		||||
            "list" : (self.RAW, RECompile(r'^([\-\*#\+]+|([0-9]+|[a-z]+)\.)[^\r\n]*(\n|\r\n|\r)([\t ]*(([\-\*#\+]+|([0-9]+|[a-z]+)\.)[^\r\n]*)(\n|\r\n|\r)?)*', RE_IGNORE_CASE | RE_MULTILINE)), 
 | 
			
		||||
            "code_block" : (self.RAW, RECompile(r'^("{3}([^\r\n]*)(((?!"{3})(.|[\r\n]))+)"{3}|" " "([^\r\n]*)(((?!" " ")(.|[\r\n]))+)" " "|\'{3}([^\r\n]*)(((?!\'{3})(.|[\r\n]))+)\'{3}|\' \' \'([^\r\n]*)(((?!\' \' \')(.|[\r\n]))+)\' \' \'|`{3}([^\r\n]*)(((?!`{3})(.|[\r\n]))+)`{3}|` ` `([^\r\n]*)(((?!` ` `)(.|[\r\n]))+)` ` `)', RE_MULTILINE)), 
 | 
			
		||||
            "table" : (self.RAW, RECompile(r'^\[\|([^\r\n]*)[\r\n]+((^\|([^\]]([^\r\n"\']|"([^"\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*"|\'([^\'\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*\')*)?[\r\n]+)*)^\|\]', RE_MULTILINE)), 
 | 
			
		||||
            "quote" : (self.RAW, RECompile(r'^>[ \t]*(\[\![\t ]*([^\] \t]+)([ \t]+([^\]]+))?\])?(([^\r\n]+(\r\n|[\r\n])?)*)', RE_MULTILINE)), 
 | 
			
		||||
            "include" : (self.RAW, RECompile(r'^\[{2}include[ \t]+([^\]]+)\]{2}', RE_MULTILINE)), 
 | 
			
		||||
            "media" : (self.SUBITEM | self.LINKED, RECompile(r'\({2}\!(image|icon|video|audio|sound|picture)[ \t]+("(([^"]+|[\r\n]+))"|\'(([^\']+|[\r\n]+))\'|([^ \t\)]+))([ \t]*|[ \t]+("(([^\\\\"]+|\\\\.|[\r\n]+)*)"|\'(([^\\\\\']+|\\\\.|[\r\n]+)*)\'|([^\)]+)))\){2}', RE_IGNORE_CASE)), 
 | 
			
		||||
            "code_doc" : (self.RAW, RECompile(r'^\[{2}@(([^\]]+|\][^\]])+)\]{2}', RE_MULTILINE)), 
 | 
			
		||||
            "presentation_links" : (self.RAW, RECompile(r'^\[{2}"{3}(([^"]+|[\r\n]+|"{1,2}[^"])*)"{3}\]{2}', RE_MULTILINE)), 
 | 
			
		||||
            "paragraph" : (self.RAW, RECompile(r'^(([^\r\n]+(\n|\r\n|\r)?)+)', RE_MULTILINE)), 
 | 
			
		||||
            # "bold_italic" : (self.SUBITEM | self.LINKED, RECompile(r'\*{3}(([^\*]+|\*{1,2}[^\*]|[\r\n]+|\\\*)*)\*{3}')), 
 | 
			
		||||
            # "bold_italic" : (self.SUBITEM | self.LINKED, RECompile(r'(?<!\\)\*{3}((?:\\\*|\*{1,2}[^\*]|[^*\r\n]|[\r\n])*)\*{3}')), 
 | 
			
		||||
            # "bold" : (self.SUBITEM | self.LINKED, RECompile(r'\*{2}(([^\*]+|\*[^\*]|[\r\n]+|\\\*)*)\*{2}')), 
 | 
			
		||||
            "bold" : (self.SUBITEM | self.LINKED, RECompile(r'(?<!\\)\*{2}((?:\\\*|\*[^\*]|[^*\r\n]|[\r\n]|(?!\*{2}[^\*])\*)*)\*{2}')), 
 | 
			
		||||
            # "italic" : (self.SUBITEM | self.LINKED, RECompile(r'(?<!\\)\*(([^\*]+|[\r\n]+|\\\*)*)\*')), 
 | 
			
		||||
            "italic" : (self.SUBITEM | self.LINKED, RECompile(r'(?<!\\)\*((?:\\\*|[^*\r\n]|[\r\n]|\*{2})*)\*')), 
 | 
			
		||||
            "underline" : (self.SUBITEM | self.LINKED, RECompile(r'_{2}(([^_]+|_[^_])+)_{2}')), 
 | 
			
		||||
            "strike" : (self.SUBITEM | self.LINKED, RECompile(r'~{2}(([^~]+|~[^~])+)~{2}')), 
 | 
			
		||||
            "code_item" : (self.SUBITEM | self.LINKED, RECompile(r'`{2}(([^`]+|`[^`])+)`{2}')), 
 | 
			
		||||
            "checkbox" : (self.SUBITEM | self.LINKED, RECompile(r'\[((\-)|(x)|( ))\]', RE_IGNORE_CASE)), 
 | 
			
		||||
            "radio" : (self.SUBITEM | self.LINKED, RECompile(r'\(((\-)|(x)|( ))\)', RE_IGNORE_CASE)), 
 | 
			
		||||
            "tick" : (self.SUBITEM | self.LINKED, RECompile(r'\{((w)|(v)|(x))\}', RE_IGNORE_CASE)), 
 | 
			
		||||
            "color_sample" : (self.SUBITEM | self.LINKED, RECompile(r'\[{2}((\#[a-f0-9]{3,8})|color[ \t]+([^\[\]\t\r\n]+))\]{2}', RE_IGNORE_CASE)), 
 | 
			
		||||
            "exclude" : (self.SUBITEM, RECompile(r'\[{2}\!(([^\]]+|\][^\]]|[\r\n])*)\]{2}')), 
 | 
			
		||||
            "link" : (self.SUBITEM, RECompile(r'(\[([^\[\]]+)\])?\((([^\(\) \t]+)[ \t]+("(([^\\\\"]+|\\\\.|[\r\n]+)*)"|\'(([^\\\\\']+|\\\\.|[\r\n]+)*)\'|([^\(\)]+)?))[ \t]*\)|\[(\+?[0-9 ]{5,22}|[^ \]]+)([\t ]+([^\]]*))?\]|([a-z0-9]{3,8}\:\/{2}[^ \(\[\)\]>]+|[a-z\.0-9_\-]+@[a-z\.0-9_\-]+\.[a-z0-9]+)', RE_IGNORE_CASE))
 | 
			
		||||
            "special_characters" : (WMarkDown.SUBITEM, RECompile(r'\\([\(\{\[\*\\])')), 
 | 
			
		||||
            "title" : (WMarkDown.RAW, RECompile(r'^((#{1,6})[\t ]*([^\r\n]+)|(={1,6})[\t ]*([^\r\n=]+)={1,6})(\n|\r\n|\r){2,}', RE_MULTILINE)), 
 | 
			
		||||
            "list" : (WMarkDown.RAW, RECompile(r'^([\-\*#\+]+|([0-9]+|[a-z]+)\.)[^\r\n]*(\n|\r\n|\r)([\t ]*(([\-\*#\+]+|([0-9]+|[a-z]+)\.)[^\r\n]*)(\n|\r\n|\r)?)*', RE_IGNORE_CASE | RE_MULTILINE)), 
 | 
			
		||||
            "code_block" : (WMarkDown.RAW, RECompile(r'^("{3}([^\r\n]*)(((?!"{3})(.|[\r\n]))+)"{3}|" " "([^\r\n]*)(((?!" " ")(.|[\r\n]))+)" " "|\'{3}([^\r\n]*)(((?!\'{3})(.|[\r\n]))+)\'{3}|\' \' \'([^\r\n]*)(((?!\' \' \')(.|[\r\n]))+)\' \' \'|`{3}([^\r\n]*)(((?!`{3})(.|[\r\n]))+)`{3}|` ` `([^\r\n]*)(((?!` ` `)(.|[\r\n]))+)` ` `)', RE_MULTILINE)), 
 | 
			
		||||
            "table" : (WMarkDown.RAW, RECompile(r'^\[\|([^\r\n]*)[\r\n]+((^\|([^\]]([^\r\n"\']|"([^"\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*"|\'([^\'\\\\]+|\\\\(.|[\r\n])|[\r\n]+)*\')*)?[\r\n]+)*)^\|\]', RE_MULTILINE)), 
 | 
			
		||||
            "quote" : (WMarkDown.RAW, RECompile(r'^>[ \t]*(\[\![\t ]*([^\] \t]+)([ \t]+([^\]]+))?\])?(([^\r\n]+(\r\n|[\r\n])?)*)', RE_MULTILINE)), 
 | 
			
		||||
            "include" : (WMarkDown.RAW, RECompile(r'^\[{2}include[ \t]+([^\]]+)\]{2}', RE_MULTILINE)), 
 | 
			
		||||
            "media" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'\({2}\!(image|icon|video|audio|sound|picture)[ \t]+("(([^"]+|[\r\n]+))"|\'(([^\']+|[\r\n]+))\'|([^ \t\)]+))([ \t]*|[ \t]+("(([^\\\\"]+|\\\\.|[\r\n]+)*)"|\'(([^\\\\\']+|\\\\.|[\r\n]+)*)\'|([^\)]+)))\){2}', RE_IGNORE_CASE)), 
 | 
			
		||||
            "code_doc" : (WMarkDown.RAW, RECompile(r'^\[{2}@(([^\]]+|\][^\]])+)\]{2}', RE_MULTILINE)), 
 | 
			
		||||
            "presentation_links" : (WMarkDown.RAW, RECompile(r'^\[{2}"{3}(([^"]+|[\r\n]+|"{1,2}[^"])*)"{3}\]{2}', RE_MULTILINE)), 
 | 
			
		||||
            "paragraph" : (WMarkDown.RAW, RECompile(r'^(([^\r\n]+(\n|\r\n|\r)?)+)', RE_MULTILINE)), 
 | 
			
		||||
            # "bold_italic" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'\*{3}(([^\*]+|\*{1,2}[^\*]|[\r\n]+|\\\*)*)\*{3}')), 
 | 
			
		||||
            # "bold_italic" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'(?<!\\)\*{3}((?:\\\*|\*{1,2}[^\*]|[^*\r\n]|[\r\n])*)\*{3}')), 
 | 
			
		||||
            # "bold" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'\*{2}(([^\*]+|\*[^\*]|[\r\n]+|\\\*)*)\*{2}')), 
 | 
			
		||||
            "bold" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'(?<!\\)\*{2}((?:\\\*|\*[^\*]|[^*\r\n]|[\r\n]|(?!\*{2}[^\*])\*)*)\*{2}')), 
 | 
			
		||||
            # "italic" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'(?<!\\)\*(([^\*]+|[\r\n]+|\\\*)*)\*')), 
 | 
			
		||||
            "italic" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'(?<!\\)\*((?:\\\*|[^*\r\n]|[\r\n]|\*{2})*)\*')), 
 | 
			
		||||
            "underline" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'__(((?!__).)+)__')), 
 | 
			
		||||
            "strike" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'~~(((?!~~).)+)~~')), 
 | 
			
		||||
            "code_item" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'``(((?!``).)+)``')), 
 | 
			
		||||
            "checkbox" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'\[((\-)|(x)|( ))\]', RE_IGNORE_CASE)), 
 | 
			
		||||
            "radio" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'\(((\-)|(x)|( ))\)', RE_IGNORE_CASE)), 
 | 
			
		||||
            "tick" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'\{((w)|(v)|(x))\}', RE_IGNORE_CASE)), 
 | 
			
		||||
            "color_sample" : (WMarkDown.SUBITEM | WMarkDown.LINKED, RECompile(r'\[{2}((\#[a-f0-9]{3,8})|color[ \t]+([^\[\]\t\r\n]+))\]{2}', RE_IGNORE_CASE)), 
 | 
			
		||||
            "exclude" : (WMarkDown.SUBITEM, RECompile(r'\[{2}\!(([^\]]+|\][^\]]|[\r\n])*)\]{2}')), 
 | 
			
		||||
            "link" : (WMarkDown.SUBITEM, RECompile(r'(\[([^\[\]]+)\])?\((([^\(\) \t]+)[ \t]+("(([^\\\\"]+|\\\\.|[\r\n]+)*)"|\'(([^\\\\\']+|\\\\.|[\r\n]+)*)\'|([^\(\)]+)?))[ \t]*\)|\[(\+?[0-9 ]{5,22}|[^ \]]+)([\t ]+([^\]]*))?\]|([a-z0-9]{3,8}\:\/{2}[^ \(\[\)\]>]+|[a-z\.0-9_\-]+@[a-z\.0-9_\-]+\.[a-z0-9]+)', RE_IGNORE_CASE))
 | 
			
		||||
        }
 | 
			
		||||
        self.__ids_cache:tuple[str] = tuple()
 | 
			
		||||
 | 
			
		||||
    def __id(self, string:str) -> str:
 | 
			
		||||
 | 
			
		||||
        id:str = self.re_characters_no_id.sub(r'-', string).lower()
 | 
			
		||||
        id:str = WMarkDown.re_characters_no_id.sub(r'-', string).lower()
 | 
			
		||||
 | 
			
		||||
        if id[0] == '-':
 | 
			
		||||
            id = id[1:]
 | 
			
		||||
@ -121,14 +121,14 @@ class WMarkDown:
 | 
			
		||||
        self.__ids_cache = tuple()
 | 
			
		||||
 | 
			
		||||
    def module_title(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            level:str = str(len(matches.group(2) or matches.group(4)))
 | 
			
		||||
            content:str = (matches.group(3) or matches.group(5)).strip()
 | 
			
		||||
            id:str = self.__id(content)
 | 
			
		||||
 | 
			
		||||
            return ('<h' + level + ' class="wmd-title" id="' + id + '" title="' + content + '">' + 
 | 
			
		||||
                '<span>' + self.analyse(content, language, self.SUBITEM, path) + '</span>' + 
 | 
			
		||||
                '<span>' + self.analyse(content, language, WMarkDown.SUBITEM, path) + '</span>' + 
 | 
			
		||||
                '<a href="#' + id + '" target="_blank">' + 
 | 
			
		||||
                    '<span data-icon="link"></span>' + 
 | 
			
		||||
                '</a>' + 
 | 
			
		||||
@ -136,38 +136,38 @@ class WMarkDown:
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_paragraph(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return '<p>' + self.analyse(matches.group(0).strip(), language, self.SUBITEM, path) + '</p>'
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return '<p>' + self.analyse(matches.group(0).strip(), language, WMarkDown.SUBITEM, path) + '</p>'
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_bold_italic(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return '<b><i>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</i></b>'
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return '<b><i>' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + '</i></b>'
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_bold(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return '<b>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</b>'
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return '<b>' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + '</b>'
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_italic(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return '<i>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</i>'
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return '<i>' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + '</i>'
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_strike(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return '<del>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</del>'
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return '<del>' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + '</del>'
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_underline(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return '<u>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</u>'
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return '<u>' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + '</u>'
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_code_item(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return '<code>' + self.analyse(matches.group(1), language, self.SUBITEM, path) + '</code>'
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return '<code>' + self.analyse(matches.group(1), language, WMarkDown.SUBITEM, path) + '</code>'
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
@ -185,20 +185,20 @@ class WMarkDown:
 | 
			
		||||
    
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def module_checkbox(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return self.__check_html_module("checkbox", matches)
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return WMarkDown.__check_html_module("checkbox", matches)
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def module_radio(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return self.__check_html_module("radio", matches)
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return WMarkDown.__check_html_module("radio", matches)
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def module_tick(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
            return self.__check_html_module("tick", matches)
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return WMarkDown.__check_html_module("tick", matches)
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
@ -217,46 +217,48 @@ class WMarkDown:
 | 
			
		||||
    def __list_start(self, unordered:bool, _type:str) -> str:
 | 
			
		||||
        if not unordered:
 | 
			
		||||
            _type = _type[:-1]
 | 
			
		||||
            if self.re_integer.search(_type):
 | 
			
		||||
            if WMarkDown.re_integer.search(_type):
 | 
			
		||||
                return ' start="' + _type + '"'
 | 
			
		||||
        return ''
 | 
			
		||||
    
 | 
			
		||||
    def module_list(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            html:str = ''
 | 
			
		||||
            lines:list[str] = self.re_new_line.split(matches.group(0))
 | 
			
		||||
            lines:list[str] = WMarkDown.re_new_line.split(matches.group(0))
 | 
			
		||||
            levels:list[list[int, str, str|None]] = [[0, 'u', None]]
 | 
			
		||||
            l:int = 0
 | 
			
		||||
            line:str
 | 
			
		||||
            last_mark:str|None = None
 | 
			
		||||
            subtype:str|None = None
 | 
			
		||||
 | 
			
		||||
            for line in lines:
 | 
			
		||||
                
 | 
			
		||||
                matches:REMatch = self.re_list_line.search(line)
 | 
			
		||||
                matches:REMatch = WMarkDown.re_list_line.search(line)
 | 
			
		||||
 | 
			
		||||
                if not matches:
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                separator_by_marks:str = len(matches.group(3) or "")
 | 
			
		||||
                separator:str = separator_by_marks if separator_by_marks > 1 else len(matches.group(1))
 | 
			
		||||
                separator_by_marks:int = len(matches.group(3) or "")
 | 
			
		||||
                separator:int = separator_by_marks if separator_by_marks > 1 else len(matches.group(1))
 | 
			
		||||
                _type:str = matches.group(2)
 | 
			
		||||
                key:str = matches.group(4)
 | 
			
		||||
                string:str = self.analyse(matches.group(5), language, self.SUBITEM, path).strip()
 | 
			
		||||
                string:str = self.analyse(matches.group(5), language, WMarkDown.SUBITEM, path).strip()
 | 
			
		||||
                unordered:bool = _type and _type[-1] in ('-', '*', '+')
 | 
			
		||||
                subtype:str = _type[-1] if _type else None
 | 
			
		||||
 | 
			
		||||
                subtype = _type[-1] if _type else None
 | 
			
		||||
 | 
			
		||||
                if _type:
 | 
			
		||||
                    if levels[l][0] == separator:
 | 
			
		||||
                        levels[l][1] = 'u' if unordered else 'o'
 | 
			
		||||
                        levels[l][2] = subtype
 | 
			
		||||
                        html += ('</li>' if html else '<' + str(levels[l][1]) + 'l class="wmd-list"' + self.__list_start(unordered, _type) + self.__list_deployed(levels[l - 1], last_mark, l) + (
 | 
			
		||||
                        html += ('</li>' if html else '<' + str(levels[l][1]) + 'l class="wmd-list"' + WMarkDown.__list_start(unordered, _type) + WMarkDown.__list_deployed(levels[l - 1], last_mark, l) + (
 | 
			
		||||
                            ' type="' + key[0] + '"' if key and not unordered and key[0] in ('a', 'A', 'i', 'I') else 
 | 
			
		||||
                        '') + '>') + '<li>' + string
 | 
			
		||||
                    elif levels[l][0] < separator:
 | 
			
		||||
                        l += 1
 | 
			
		||||
                        levels += [[separator, "u" if unordered else "o", subtype]]
 | 
			
		||||
                        html += '<' + levels[l][1] + 'l class="wmd-list"' + self.__list_start(unordered, _type) + self.__list_deployed(levels[l - 1], last_mark, l) + (
 | 
			
		||||
                        html += '<' + levels[l][1] + 'l class="wmd-list"' + WMarkDown.__list_start(unordered, _type) + WMarkDown.__list_deployed(levels[l - 1], last_mark, l) + (
 | 
			
		||||
                            ' type="' + key[0] + '"' if key and not unordered and key[0] in ('a', 'A', 'i', 'I') else 
 | 
			
		||||
                        '') + '><li>' + string
 | 
			
		||||
                    else:
 | 
			
		||||
@ -295,16 +297,16 @@ class WMarkDown:
 | 
			
		||||
            class_key:str
 | 
			
		||||
            
 | 
			
		||||
            attribute, classes_str, closer = matches.groups()
 | 
			
		||||
            classes = self.re_white_spaces.split(classes_str)
 | 
			
		||||
            classes = WMarkDown.re_white_spaces.split(classes_str)
 | 
			
		||||
 | 
			
		||||
            return attribute + classes_str + (' ' if classes_str else '') + " ".join([
 | 
			
		||||
                class_key for class_key in _class if class_key not in classes
 | 
			
		||||
            ]) + closer
 | 
			
		||||
        
 | 
			
		||||
        return self.re_class_attribute.sub(callback, html)
 | 
			
		||||
        return WMarkDown.re_class_attribute.sub(callback, html)
 | 
			
		||||
    
 | 
			
		||||
    def module_table(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            html:dict[str, str] = {
 | 
			
		||||
                "thead" : '', 
 | 
			
		||||
@ -316,7 +318,7 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
            while True:
 | 
			
		||||
 | 
			
		||||
                line_matches:REMatch = self.re_table_line.search(data)
 | 
			
		||||
                line_matches:REMatch = WMarkDown.re_table_line.search(data)
 | 
			
		||||
 | 
			
		||||
                if not line_matches:
 | 
			
		||||
                    break
 | 
			
		||||
@ -336,7 +338,7 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
                while True:
 | 
			
		||||
 | 
			
		||||
                    cell_matches:REMatch = self.re_table_item.search(line)
 | 
			
		||||
                    cell_matches:REMatch = WMarkDown.re_table_item.search(line)
 | 
			
		||||
 | 
			
		||||
                    if not cell_matches:
 | 
			
		||||
                        break
 | 
			
		||||
@ -347,8 +349,8 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
                    row += '<t' + cell_type + column_span + '>' + self.analyse(
 | 
			
		||||
                        content[1:-1] if content and content[0] + content[-1] in ("''", '""') else content, 
 | 
			
		||||
                        self.HTML, 
 | 
			
		||||
                        self.SUBITEM, 
 | 
			
		||||
                        WMarkDown.HTML, 
 | 
			
		||||
                        WMarkDown.SUBITEM, 
 | 
			
		||||
                        path
 | 
			
		||||
                    ) + '</t' + cell_type + '>'
 | 
			
		||||
 | 
			
		||||
@ -373,36 +375,36 @@ class WMarkDown:
 | 
			
		||||
    
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def module_exclude(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return '<span class="wmd-excluded">' + (matches.group(1) or "") + '</span>'
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_link(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            raw_url:str = (matches.group(4) or matches.group(11) or matches.group(14) or "").strip()
 | 
			
		||||
            url = (
 | 
			
		||||
                "tel:" + raw_url.replace(" ", "") if self.re_phone_number.search(raw_url) else 
 | 
			
		||||
                "mailto:" + raw_url if self.re_email_address.search(raw_url) else 
 | 
			
		||||
                "tel:" + raw_url.replace(" ", "") if WMarkDown.re_phone_number.search(raw_url) else 
 | 
			
		||||
                "mailto:" + raw_url if WMarkDown.re_email_address.search(raw_url) else 
 | 
			
		||||
            raw_url)
 | 
			
		||||
            text:str|None = matches.group(2) or matches.group(13) or raw_url
 | 
			
		||||
            text:str = matches.group(2) or matches.group(13) or raw_url
 | 
			
		||||
            protocol_matches:REMatch|None = WMarkDown.re_protocol.search(url)
 | 
			
		||||
 | 
			
		||||
            return '<a href="' + url + '" target="_' + ("blank" if "://" in url else "self") + '" title="' + self.re_line_marks.sub(r'', (
 | 
			
		||||
            return '<a href="' + url + '" target="_' + ("blank" if "://" in url else "self") + '" title="' + WMarkDown.re_line_marks.sub(r'', (
 | 
			
		||||
                matches.group(6) or matches.group(8) or matches.group(10) or text
 | 
			
		||||
            ).strip()) + '" data-protocol="' + (
 | 
			
		||||
                (protocol_matches.group(1) if protocol_matches else "http").lower()
 | 
			
		||||
            ) + '">' + self.analyse(text.strip(), language, self.SUBITEM | self.LINKED, path) + '</a>'
 | 
			
		||||
            ) + '">' + self.analyse(text.strip(), language, WMarkDown.SUBITEM | self.LINKED, path) + '</a>'
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_quote(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            _type:str|None = matches.group(2)
 | 
			
		||||
            type_text:str|None = matches.group(4)
 | 
			
		||||
 | 
			
		||||
            if _type in self.quote_special:
 | 
			
		||||
                _type = self.quote_special[_type]
 | 
			
		||||
            if _type in WMarkDown.quote_special:
 | 
			
		||||
                _type = WMarkDown.quote_special[_type]
 | 
			
		||||
 | 
			
		||||
            return ('<blockquote class="wmd-quote"' + (' data-quote-type="' + _type + '"' if _type else '') + '>' + 
 | 
			
		||||
                (('<div class="quote-type">' + ((
 | 
			
		||||
@ -412,13 +414,13 @@ class WMarkDown:
 | 
			
		||||
                    '<span data-icon="' + _type + '"></span>' + 
 | 
			
		||||
                    ('<span class="quote-type-name">' + type_text + '</span>' if type_text else '')
 | 
			
		||||
                )) + '</div>') if _type else '') + 
 | 
			
		||||
                '<div class="text">' + self.analyse(matches.group(5), language, self.SUBITEM, path) + '</div>' + 
 | 
			
		||||
                '<div class="text">' + self.analyse(matches.group(5), language, WMarkDown.SUBITEM, path) + '</div>' + 
 | 
			
		||||
            '</blockquote>')
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def code_block_data(self, key:str, value:str|int, language:Optional[int] = HTML, path:Optional[str] = None) -> str:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
    def code_block_data(self, key:str, value:str|int, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return ('<li data-i18n="' + key + '" data-i18n-without="true" title="' + key + '">' + 
 | 
			
		||||
                '<span data-icon="' + key + '"></span>' + 
 | 
			
		||||
                '<span data-i18n="' + key + '">' + key + '</span>' + 
 | 
			
		||||
@ -429,11 +431,11 @@ class WMarkDown:
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def filter_html_special_characters(self, string:str) -> str:
 | 
			
		||||
 | 
			
		||||
        l:int = len(self.html_special_characters)
 | 
			
		||||
        l:int = len(WMarkDown.html_special_characters)
 | 
			
		||||
        _:int
 | 
			
		||||
        index:list[int] = [-1 for _ in range(l)]
 | 
			
		||||
        response:str = ''
 | 
			
		||||
        characters:tuple[str] = tuple(self.html_special_characters.keys())
 | 
			
		||||
        characters:tuple[str] = tuple(WMarkDown.html_special_characters.keys())
 | 
			
		||||
 | 
			
		||||
        while True:
 | 
			
		||||
 | 
			
		||||
@ -461,7 +463,7 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
            length:int = index[i]
 | 
			
		||||
 | 
			
		||||
            response += string[:length] + '&' + self.html_special_characters[characters[i]] + ';'
 | 
			
		||||
            response += string[:length] + '&' + WMarkDown.html_special_characters[characters[i]] + ';'
 | 
			
		||||
            string = string[length + 1:]
 | 
			
		||||
            
 | 
			
		||||
            for j in range(l):
 | 
			
		||||
@ -472,7 +474,7 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def module_code_block(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            _type:str
 | 
			
		||||
            content:str
 | 
			
		||||
@ -491,26 +493,26 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
            if _type:
 | 
			
		||||
 | 
			
		||||
                lines:list[str] = self.re_new_line.split(content)[2:]
 | 
			
		||||
                lines:list[str] = WMarkDown.re_new_line.split(content)[2:]
 | 
			
		||||
                _:str
 | 
			
		||||
 | 
			
		||||
                return ('<div class="wmd-code-block" data-type="' + _type + '" data-processed="false">'
 | 
			
		||||
                    '<ul class="data">' + 
 | 
			
		||||
                        '<li><span data-icon="' + _type + '"></span></li>' + 
 | 
			
		||||
                        self.code_block_data("type", _type, language) + 
 | 
			
		||||
                        self.code_block_data("characters", len(content), language) + 
 | 
			
		||||
                        self.code_block_data("lines", len(lines), language) + 
 | 
			
		||||
                        WMarkDown.code_block_data("type", _type, language) + 
 | 
			
		||||
                        WMarkDown.code_block_data("characters", len(content), language) + 
 | 
			
		||||
                        WMarkDown.code_block_data("lines", len(lines), language) + 
 | 
			
		||||
                    '</ul>' + 
 | 
			
		||||
                    '<div class="code">' + 
 | 
			
		||||
                        '<ol class="lines">' + ''.join(['<li></li>' for _ in lines]) + '</ol>' + 
 | 
			
		||||
                        '<pre class="content">' + self.filter_html_special_characters(content) + '</pre>' + 
 | 
			
		||||
                        '<pre class="content">' + WMarkDown.filter_html_special_characters(content) + '</pre>' + 
 | 
			
		||||
                    '</div>' + 
 | 
			
		||||
                '</div>')
 | 
			
		||||
            return 'UNKNOWN_BLOCK'
 | 
			
		||||
        return None
 | 
			
		||||
    
 | 
			
		||||
    def module_special_characters(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            return matches.group(1)
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
@ -525,21 +527,21 @@ class WMarkDown:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    def module_include(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
            
 | 
			
		||||
            relative_path:str = matches.group(1)
 | 
			
		||||
            new_path:str = path + relative_path
 | 
			
		||||
            extension:str = self.re_extension.search(new_path).groups()[1:]
 | 
			
		||||
            content:str|None = self.load_file(new_path)
 | 
			
		||||
            extension:str = WMarkDown.re_extension.search(new_path).groups()[1:]
 | 
			
		||||
            content:str|None = WMarkDown.load_file(new_path)
 | 
			
		||||
            directory:str = directory_name(new_path) + "/"
 | 
			
		||||
            results:str|None = (
 | 
			
		||||
                None if content == None else 
 | 
			
		||||
                self.process(content, language, directory)[0] if ".".join(extension) == "w.md" else 
 | 
			
		||||
                self.analyse(content, language, self.RAW, directory) if extension[-1] == "md" else 
 | 
			
		||||
                self.analyse(content, language, WMarkDown.RAW, directory) if extension[-1] == "md" else 
 | 
			
		||||
            content)
 | 
			
		||||
 | 
			
		||||
            return ('<section data-path="' + relative_path + '" data-include="' + ("false" if results == None else "true") + '">' + 
 | 
			
		||||
                    '<div class="link"><a href="' + relative_path + '" target="_self" title="' + relative_path + '">' + relative_path + '</a></div>' + 
 | 
			
		||||
                '<div class="link"><a href="' + relative_path + '" target="_self" title="' + relative_path + '">' + relative_path + '</a></div>' + 
 | 
			
		||||
                (results or "") + 
 | 
			
		||||
            '</section>')
 | 
			
		||||
        return None
 | 
			
		||||
@ -559,14 +561,14 @@ class WMarkDown:
 | 
			
		||||
        '</span>')
 | 
			
		||||
 | 
			
		||||
    def module_media(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            _type:str = matches.group(1).lower()
 | 
			
		||||
            links:list[str] = self.re_white_spaces.split(matches.group(3) or matches.group(5) or matches.group(7))
 | 
			
		||||
            links:list[str] = WMarkDown.re_white_spaces.split(matches.group(3) or matches.group(5) or matches.group(7))
 | 
			
		||||
            text:str = (matches.group(10) or matches.group(12) or matches.group(14) or '').strip()
 | 
			
		||||
 | 
			
		||||
            if _type in ("image", "picture", "icon"):
 | 
			
		||||
                return self.build_html_image(links, _type, text)
 | 
			
		||||
                return WMarkDown.build_html_image(links, _type, text)
 | 
			
		||||
            
 | 
			
		||||
            if _type in ("video",):
 | 
			
		||||
 | 
			
		||||
@ -609,7 +611,7 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
            start, end = matches.span()
 | 
			
		||||
 | 
			
		||||
            string = string[:start] + self.item_mark[0] + str(len(fragments)) + self.item_mark[1] + string[end:]
 | 
			
		||||
            string = string[:start] + WMarkDown.item_mark[0] + str(len(fragments)) + WMarkDown.item_mark[1] + string[end:]
 | 
			
		||||
            fragments += [matches.group(0)]
 | 
			
		||||
 | 
			
		||||
        return string
 | 
			
		||||
@ -619,7 +621,7 @@ class WMarkDown:
 | 
			
		||||
        
 | 
			
		||||
        while True:
 | 
			
		||||
 | 
			
		||||
            matches:REMatch = self.item_mark[2].search(string)
 | 
			
		||||
            matches:REMatch = WMarkDown.item_mark[2].search(string)
 | 
			
		||||
 | 
			
		||||
            if not matches:
 | 
			
		||||
                break
 | 
			
		||||
@ -636,16 +638,16 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def __doc_typed_format(self, typed:str) -> str:
 | 
			
		||||
        return self.filter_html_special_characters(typed.replace(' ', "").replace(',', ", "))
 | 
			
		||||
        return WMarkDown.filter_html_special_characters(typed.replace(' ', "").replace(',', ", "))
 | 
			
		||||
 | 
			
		||||
    def module_code_doc(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            # print(matches.groups())
 | 
			
		||||
 | 
			
		||||
            data:str = matches.group(1).strip()
 | 
			
		||||
            base:REMatch = self.re_code_doc.search(data)
 | 
			
		||||
            return_type:str = self.__doc_typed_format(base.group(2) or "void")
 | 
			
		||||
            base:REMatch = WMarkDown.re_code_doc.search(data)
 | 
			
		||||
            return_type:str = WMarkDown.__doc_typed_format(base.group(2) or "void")
 | 
			
		||||
            access:str = base.group(3) or "public"
 | 
			
		||||
            name_space:str|None = base.group(5)
 | 
			
		||||
            environment:str = base.group(6) or "global"
 | 
			
		||||
@ -680,10 +682,10 @@ class WMarkDown:
 | 
			
		||||
            if parameters:
 | 
			
		||||
                while True:
 | 
			
		||||
 | 
			
		||||
                    matches = self.re_code_doc_subarguments.search(parameters)
 | 
			
		||||
                    matches = WMarkDown.re_code_doc_subarguments.search(parameters)
 | 
			
		||||
 | 
			
		||||
                    if matches:
 | 
			
		||||
                        parameters = self.mark_replace(parameters, matches, fragments)
 | 
			
		||||
                        parameters = WMarkDown.mark_replace(parameters, matches, fragments)
 | 
			
		||||
                    else:
 | 
			
		||||
                        break
 | 
			
		||||
            else:
 | 
			
		||||
@ -691,16 +693,16 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
            for parameter in parameters.split(","):
 | 
			
		||||
 | 
			
		||||
                matches = self.re_code_doc_arguments.search(parameter.strip())
 | 
			
		||||
                matches = WMarkDown.re_code_doc_arguments.search(parameter.strip())
 | 
			
		||||
 | 
			
		||||
                if matches:
 | 
			
		||||
 | 
			
		||||
                    scopes:str = matches.group(1) or ""
 | 
			
		||||
                    required:bool = "!" in scopes
 | 
			
		||||
                    nullish:bool = "?" in scopes
 | 
			
		||||
                    typed:str = self.__doc_typed_format(self.restore_marks(matches.group(2), fragments))
 | 
			
		||||
                    typed:str = WMarkDown.__doc_typed_format(WMarkDown.restore_marks(matches.group(2), fragments))
 | 
			
		||||
                    name:str = matches.group(3).strip()
 | 
			
		||||
                    default_value:str = self.filter_html_special_characters(self.restore_marks((matches.group(5) or "").strip(), fragments))
 | 
			
		||||
                    default_value:str = WMarkDown.filter_html_special_characters(WMarkDown.restore_marks((matches.group(5) or "").strip(), fragments))
 | 
			
		||||
 | 
			
		||||
                    arguments += ('<span class="argument">' + 
 | 
			
		||||
                        ('<span class="required" data-i18n="required" title="Required">Required</span>' if required else '') + 
 | 
			
		||||
@ -739,7 +741,7 @@ class WMarkDown:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    def module_color_sample(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            color:str = matches.group(2) or matches.group(3)
 | 
			
		||||
 | 
			
		||||
@ -750,7 +752,7 @@ class WMarkDown:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    def module_presentation_links(self, matches:REMatch, language:Optional[int] = HTML, path:Optional[str] = None) -> str|None:
 | 
			
		||||
        if language & self.HTML:
 | 
			
		||||
        if language & WMarkDown.HTML:
 | 
			
		||||
 | 
			
		||||
            items:list = []
 | 
			
		||||
            i:int = -1
 | 
			
		||||
@ -760,9 +762,9 @@ class WMarkDown:
 | 
			
		||||
            html_avatars:str = ''
 | 
			
		||||
            html_list:str = ''
 | 
			
		||||
 | 
			
		||||
            for line in self.re_new_lines.split(matches.group(1)):
 | 
			
		||||
            for line in WMarkDown.re_new_lines.split(matches.group(1)):
 | 
			
		||||
 | 
			
		||||
                has_spaces:bool = self.re_start_with_white_spaces.search(line) != None
 | 
			
		||||
                has_spaces:bool = WMarkDown.re_start_with_white_spaces.search(line) != None
 | 
			
		||||
                data:str = line.strip()
 | 
			
		||||
 | 
			
		||||
                if not data:
 | 
			
		||||
@ -780,7 +782,6 @@ class WMarkDown:
 | 
			
		||||
                else:
 | 
			
		||||
                    i += 1
 | 
			
		||||
                    items += [[line.strip(), [], []]]
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
            for i, (title, avatars, links) in enumerate(items):
 | 
			
		||||
 | 
			
		||||
@ -789,11 +790,11 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
                html_avatars += ('<li title="' + title + '" data-i="' + str(i) + '" data-links="' + str(len(links)) + '">' + 
 | 
			
		||||
                    ('<a href="' + links[0] + '" target="_blank">' + 
 | 
			
		||||
                        self.build_html_image(avatars) + 
 | 
			
		||||
                    '</a>' if len(links) else self.build_html_image(avatars)) + 
 | 
			
		||||
                        WMarkDown.build_html_image(avatars) + 
 | 
			
		||||
                    '</a>' if len(links) else WMarkDown.build_html_image(avatars)) + 
 | 
			
		||||
                    ''.join(['<a href="' + link + '" target="_blank" class="wmd-favicon" style="background-image:' + (
 | 
			
		||||
                        'url(\'' + self.re_domain.search(link).group(0) + '/favicon.ico\')' + 
 | 
			
		||||
                        (',url(\'' + self.re_domain.search(link.replace(".k3y.pw/", ".local/")).group(0) + '/favicon.ico\')' if ".k3y.pw/" in link else '')
 | 
			
		||||
                        'url(\'' + WMarkDown.re_domain.search(link).group(0) + '/favicon.ico\')' + 
 | 
			
		||||
                        (',url(\'' + WMarkDown.re_domain.search(link.replace(".k3y.pw/", ".local/")).group(0) + '/favicon.ico\')' if ".k3y.pw/" in link else '')
 | 
			
		||||
                    ) + ';"></a>' for link in links]) + 
 | 
			
		||||
                '</li>')
 | 
			
		||||
                html_list += ('<li class="name">' + 
 | 
			
		||||
@ -813,7 +814,7 @@ class WMarkDown:
 | 
			
		||||
    def remove_default_tabulations(self, data:str) -> str:
 | 
			
		||||
 | 
			
		||||
        line:str
 | 
			
		||||
        lines:list[str] = self.re_new_lines.split(data)
 | 
			
		||||
        lines:list[str] = WMarkDown.re_new_lines.split(data)
 | 
			
		||||
        spaces:int = len(data)
 | 
			
		||||
 | 
			
		||||
        def callback(matches:REMatch):
 | 
			
		||||
@ -823,16 +824,16 @@ class WMarkDown:
 | 
			
		||||
            if not line:
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            white_spaces:int = len(self.re_started_white_spaces.search(line).group(0))
 | 
			
		||||
            white_spaces:int = len(WMarkDown.re_started_white_spaces.search(line).group(0))
 | 
			
		||||
 | 
			
		||||
            if white_spaces < spaces:
 | 
			
		||||
                spaces = white_spaces
 | 
			
		||||
 | 
			
		||||
        return self.re_lines.sub(callback, data)
 | 
			
		||||
        return WMarkDown.re_lines.sub(callback, data)
 | 
			
		||||
 | 
			
		||||
    def __build(self, data:str, language:int, path:str|None) -> str:
 | 
			
		||||
        return ('<div class="wmd wmarkdown" data-dictionary-processed="false" data-menu-processed="false">' + 
 | 
			
		||||
            self.analyse(self.remove_default_tabulations(data), language, self.RAW, path) + 
 | 
			
		||||
            self.analyse(WMarkDown.remove_default_tabulations(data), language, WMarkDown.RAW, path) + 
 | 
			
		||||
            '<div class="wmd-process-and-loaded"></div>' + 
 | 
			
		||||
        '</div>')
 | 
			
		||||
 | 
			
		||||
@ -840,7 +841,7 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
        results:str = ""
 | 
			
		||||
        variables:dict[str, str] = {}
 | 
			
		||||
        options:REMatch = self.re_options.search(data)
 | 
			
		||||
        options:REMatch = WMarkDown.re_options.search(data)
 | 
			
		||||
        
 | 
			
		||||
        if options:
 | 
			
		||||
 | 
			
		||||
@ -852,7 +853,7 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
            while True:
 | 
			
		||||
 | 
			
		||||
                option:REMatch = self.re_option.search(options_data)
 | 
			
		||||
                option:REMatch = WMarkDown.re_option.search(options_data)
 | 
			
		||||
 | 
			
		||||
                if not option:
 | 
			
		||||
                    break
 | 
			
		||||
@ -864,7 +865,7 @@ class WMarkDown:
 | 
			
		||||
 | 
			
		||||
        while True:
 | 
			
		||||
 | 
			
		||||
            matches:REMatch = self.re_block_mark.search(data)
 | 
			
		||||
            matches:REMatch = WMarkDown.re_block_mark.search(data)
 | 
			
		||||
 | 
			
		||||
            if not matches:
 | 
			
		||||
                results += data
 | 
			
		||||
@ -873,7 +874,7 @@ class WMarkDown:
 | 
			
		||||
            open_from:int
 | 
			
		||||
            open_to:int
 | 
			
		||||
            mark:str = matches.group(1)
 | 
			
		||||
            re_close:REPattern = RECompile(r'^\s*' + mark, RE_MULTILINE) if mark else self.re_block_html
 | 
			
		||||
            re_close:REPattern = RECompile(r'^\s*' + mark, RE_MULTILINE) if mark else WMarkDown.re_block_html
 | 
			
		||||
 | 
			
		||||
            open_from, open_to = matches.span()
 | 
			
		||||
            results += data[:open_from]
 | 
			
		||||
@ -900,9 +901,8 @@ class WMarkDown:
 | 
			
		||||
    def analyse(self, data:str, language:Optional[int] = HTML, mode:Optional[int] = RAW, path:Optional[str] = None) -> str:
 | 
			
		||||
 | 
			
		||||
        response:str = ""
 | 
			
		||||
        pattern:REPattern
 | 
			
		||||
        item_mode:int
 | 
			
		||||
        items:dict[str, list[bool, int, int, REMatch]] = {key : [True, -1, -1, None] for key, (item_mode, pattern) in self.modules.items() if mode == self.RAW or mode | item_mode == item_mode}
 | 
			
		||||
        items:dict[str, list[bool, int, int, REMatch]] = {key : [True, -1, -1, None] for key, (item_mode, pattern) in self.modules.items() if mode == WMarkDown.RAW or mode | item_mode == item_mode}
 | 
			
		||||
        # j:int = 0
 | 
			
		||||
        # m:int = 10
 | 
			
		||||
 | 
			
		||||
@ -920,7 +920,7 @@ class WMarkDown:
 | 
			
		||||
                if not exists:
 | 
			
		||||
                    continue
 | 
			
		||||
 | 
			
		||||
                pattern = self.modules[key][1]
 | 
			
		||||
                pattern:REPattern = self.modules[key][1]
 | 
			
		||||
 | 
			
		||||
                if _from < 0:
 | 
			
		||||
                    items[key][3] = matches = pattern.search(data)
 | 
			
		||||
@ -955,4 +955,4 @@ class WMarkDown:
 | 
			
		||||
        return response
 | 
			
		||||
 | 
			
		||||
    def to_html(self, data:str, path:Optional[str] = None) -> str:
 | 
			
		||||
        return self.analyse(data, self.HTML, self.RAW, path)
 | 
			
		||||
        return self.analyse(data, WMarkDown.HTML, WMarkDown.RAW, path)
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user