diff options
author | Rodrigo Arias Mallo <rodarima@gmail.com> | 2024-01-01 23:40:52 +0100 |
---|---|---|
committer | Rodrigo Arias Mallo <rodarima@gmail.com> | 2024-01-01 23:40:52 +0100 |
commit | 5ea943a5e789222472e45864e119cf786498bfcd (patch) | |
tree | ea307589de0fdb202474ad4d07c0bef7fe1c53e8 /old/test |
Import original dillo.org website into old/
Diffstat (limited to 'old/test')
128 files changed, 17917 insertions, 0 deletions
diff --git a/old/test/4648/4ta.html b/old/test/4648/4ta.html new file mode 100644 index 0000000..d782123 --- /dev/null +++ b/old/test/4648/4ta.html @@ -0,0 +1,566 @@ + + + + <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> +<head> + + + +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> + <title>La Cuarta: El Diario popular, noticias de Chile y el mundo para la barra pop</title> + + + + + <link rel="stylesheet" type="text/css" href="http://resource.lacuarta.com/css2015/headerNuevo.css?30062016" media="screen" title="default"/> + <link rel="stylesheet" type="text/css" href="http://resource.lacuarta.com/css2015/pageFullL4com.css?30062016" media="screen" title="default"/> + + <link rel="stylesheet" type="text/css" href="http://resource.lacuarta.com/css2015/l4slider.css?30062016" media="screen" title="default"/> + <link rel="stylesheet" type="text/css" href="http://resource.lacuarta.com/css2015/l4galeria.css?30062016" media="screen" title="default"/> + <link rel="stylesheet" type="text/css" href="http://resource.lacuarta.com/css2015/galleriffic.css?30062016" media="screen" title="default"/> + <link rel="stylesheet" type="text/css" href="http://resource.lacuarta.com/css2015/qpGalleriffic.css?30062016" media="screen" title="default"/> + +<style type="text/css" media="screen"> +.cajasInsertos img{ + height: 170px; + width: 150px; + padding-left: 16px; +} +.cajasInsertos{ +width: 160px; +margin-top: 0px; +} +</style> + +<style type="text/css" media="screen"> + .Homeslider-wrapper{ + width: 730px !important; + margin-top: 10px !important; + float:left !important; + height: 450px !important; + } + div.imgSet h5 { + bottom: 60px !important; + border-left: 2px solid #FF0018 !important; + color: #FFF !important; + font-size: 14px !important; + margin: 0px !important; + opacity: 0.8 !important; + padding: 5px !important; + position: relative !important; + text-align: left !important; + width: 50% !important; + font-weight: 700 !important; + background: rgba(0, 0, 0, 0.5) !important; + text-shadow: 0.2em 0.2em #000 !important; + } +.l4ta_contenedorTxtARtc h2 { +font-size:24px; +} +.slide_otras_gal .viewport { + height: 127px !important; +} +.ad700x50 { + margin-left: 15px !important; +} +.bg-skin { + z-index: -1 !important; +} +.box_news_home_left ul li { + background: rgba(0, 0, 0, 0.75); + display: inline-block; + height: 100%; + margin-top: 10px !important; +margin-bottom: 10px !important; + width: 100%; +} +</style> + </head> +<body> +<script type="text/javascript"> +//Srcipt para capturar URL + var urlComscore = document.URL; + var positionHTTP = urlComscore.indexOf("/", 8); + if(positionHTTP==-1) + urlComscore = "portada"; + else + urlComscore = urlComscore.substring(positionHTTP+1).replace(/[/]/gi, '.').length==0?"portada":urlComscore.substring(positionHTTP+1).replace(/[/]/gi, '.'); +// +// <![CDATA[ +function comScore(t){var b="comScore",o=document,f=o.location,a="",e="undefined",g=2048,s,k,p,h,r="characterSet",n="defaultCharset",m=(typeof +encodeURIComponent!=e?encodeURIComponent:escape);if(o.cookie.indexOf(b+"=")!=-1){p=o.cookie.split(";");for(h=0,f=p.length;h<f;h++){var q=p[h].indexOf(b+"=");if(q!=-1){a="&"+unescape(p[h].substring(q+b.length+1))}}}t=t+"&ns__t="+(new +Date().getTime());t=t+"&ns_c="+(o[r]?o[r]:(o[n]?o[n]:""))+"&c8="+m(o.title)+a+"&c7="+m(f&&f.href?f.href:o.URL)+"&c9="+m(o.referrer);if(t.length>g&&t.indexOf("&")>0){s=t.substr(0,g-8).lastIndexOf("&");t=(t.substring(0,s)+"&ns_cut="+m(t.substring(s+1))).substr +(0,g)}if(o.images){k=new Image();if(typeof ns_p==e){ns_p=k}k.src=t}else{o.write('<p><'+'img src="'+t+'" height="1" width="1" alt="*"></p>')}}; +comScore('http'+(document.location.href.charAt(4)=='s'?'s://sb':'://b')+'.scorecardresearch.com/p?c1=2&c2=6906468&ns_site=la-cuarta&name=' + urlComscore); +// ]]> +</script> +<noscript><p><img src="http://b.scorecardresearch.com/p?c1=2&c2=6906468&ns_site=la-cuarta&name=no.javascript" height="1" width="1" alt="*"></p></noscript> + + + + + <div id='div-gpt-ad-1424448852786-11-oop'> + <script type='text/javascript'> + googletag.cmd.push(function() { + googletag.display('div-gpt-ad-1424448852786-11-oop'); + }); + </script> + </div> + + + + <div id='div-gpt-ad-1424448852786-8-oop'> + <script type='text/javascript'> + googletag.cmd.push(function() { + googletag.display('div-gpt-ad-1424448852786-8-oop'); + }); + </script> + </div> + + + + <div id='div-gpt-ad-1424448852786-9-oop'> + <script type='text/javascript'> + googletag.cmd.push(function() { + googletag.display('div-gpt-ad-1424448852786-9-oop'); + }); + </script> + </div> + + + + <div id='div-gpt-ad-1424448852786-10-oop'> + <script type='text/javascript'> + googletag.cmd.push(function() { + googletag.display('div-gpt-ad-1424448852786-10-oop'); + }); + </script> + </div> + + + + <div id='div-gpt-ad-1424448852786-12-oop'> + <script type='text/javascript'> + googletag.cmd.push(function() { + googletag.display('div-gpt-ad-1424448852786-12-oop'); + }); + </script> + </div> + + + + <div id="adsSkycrapper" class="adtechvanishclass" style="position: fixed;float:left;display:none"> + + <div id='div-gpt-ad-1424448852786-13' > + <script type='text/javascript'> + googletag.cmd.push(function() { + googletag.display('div-gpt-ad-1424448852786-13'); + }); + </script> + </div> + </div> + + + + <div class="L4comPortadaFirst"> + + <div style="width: 100%; float: left;"> + <div class="adTop portada"> + + + + + <div id='div-gpt-ad-1424448852786-6' class="ad728x90"> + <script type='text/javascript'> + googletag.cmd.push(function() { + googletag.display('div-gpt-ad-1424448852786-6'); + }); + </script> + </div> + + + + <div id='div-gpt-ad-1424448852786-1' class="ad200x90"> + <script type='text/javascript'> + googletag.cmd.push(function() { + googletag.display('div-gpt-ad-1424448852786-1'); + }); + </script> + </div> + + +</div> + </div> + + + + <div class="L4ta_menu_secciones"> + + <div class="menuPrincipal_L4ta"> + <ul> + <li><a href="../../index.html" class="casa" title="Ir a la portada"> <img class="imgHomeL4ta" alt="LaCuarta.Com" src="http://resource.lacuarta.com/img/L4ta_home.png" style="position: relative; top: 3px;"> </a></li> + + <li> + <a href="https://www.dillo.org/canal/cronica/63.html"> Crónica</a> + </li> + <li> + <a href="https://www.dillo.org/canal/mundo/66.html" > Mundo</a> + </li> + <li> + <a href="https://www.dillo.org/canal/deportiva/64.html" > Deportiva</a> + </li> + <li> + <a href="https://www.dillo.org/canal/espectacular/65.html"> Espectacular</a> + </li> + <li> + <a href="https://www.dillo.org/canal/diosagram/612.html"> #Diosagram</a> + </li> + <li> + <a href="https://www.dillo.org/canal/mascotas/528.html"> Mascotas</a> + </li> + <li> + <a href="https://www.dillo.org/canal/multimedia/galerias/524.html"> Galerías</a> + </li> + </ul> + <div class="l4ta_lastEdit"> + <a href="http://papeldigital.info/lacuarta"><img class="imgHomeL4ta" alt="Ediciones Anteriores" src="http://resource.lacuarta.com/img/L4ta_ediciones.png"> Ediciones anteriores</a> + </div> + </div> + + + + <ul class="subCronica submenuL4ta" style="display:none"> + <li class="sbp1">Los más calentitos</li> + <li class="sbp2"> + <span class="fecha"> + 16:35 hrs + </span> + <a href="http://www.lacuarta.com/noticias/cronica/2016/06/63-202371-9-los-chilenos-somos-campeones-de-america-en-consumo-de-copete.shtml"> + Los chilenos somos campeones de América en consumo de copete + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 13:27 hrs + </span> + <a href="http://www.lacuarta.com/noticias/cronica/2016/06/63-202366-9-por-fin-avenida-providencia-sera-reabierta-esta-noche.shtml"> + Por fin: Avenida Providencia será reabierta esta noche + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 30/06 + </span> + <a href="http://www.lacuarta.com/noticias/cronica/2016/06/63-202345-9-golosos-roban-camion-con-100-millones-en-papas-fritas.shtml"> + ¡Golosos roban camión con 100 millones en papas fritas! + </a> + </li> + <li class="sbp3"> + <div class="ad300x30"></div> + <a href="https://www.dillo.org/canal/cronica/63.html">Ir a CRÓNICA »</a> + </li> + </ul> + <ul class="subVuelta submenuL4ta" style="display:none"> + <li class="sbp1">Los más calentitos</li> + <li class="sbp2"> + <span class="fecha"> + 16:35 hrs + </span> + <a href="http://www.lacuarta.com/noticias/mundo/2016/06/66-202369-9-fotos-la-rica-dahiana-zelinsky-es-la-miss-tanga-paraguay-2016.shtml"> + [Fotos] La rica Dahiana Zelinsky es la Miss Tanga Paraguay 2016 + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 11:44 hrs + </span> + <a href="http://www.lacuarta.com/noticias/mundo/2016/06/66-202360-9-otra-de-donald-trump-aseguro-estar-a-favor-de-la-tortura.shtml"> + Otra de Donald Trump: aseguró estar a favor de la tortura + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 30/06 + </span> + <a href="http://www.lacuarta.com/noticias/mundo/2016/06/66-202344-9-bielorrusos-obedecen-a-su-presi-y-trabajan-a-potope.shtml"> + Bielorrusos obedecen a su presi y trabajan a "potope" + </a> + </li> + <li class="sbp3"> + <div class="ad300x30"></div> + <a href="https://www.dillo.org/canal/mundo/66.html">Ir a VUELTA AL MUNDO »</a> + </li> + </ul> + <ul class="subDeportiva submenuL4ta" style="display:none"> + <li class="sbp1">Los más calentitos</li> + <li class="sbp2"> + <span class="fecha"> + 17:24 hrs + </span> + <a href="http://www.lacuarta.com/noticias/deportiva/2016/06/64-202373-9-jean-beausejour-se-viraria-del-colo-pa-regresar-al-america.shtml"> + Jean Beausejour se viraría del Colo pa' regresar al América + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 15:38 hrs + </span> + <a href="http://www.lacuarta.com/noticias/deportiva/2016/06/64-202368-9-arturo-salah-hablo-tras-amenazas-del-sifup.shtml"> + Arturo Salah habló tras amenazas del Sifup + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 15:37 hrs + </span> + <a href="http://www.lacuarta.com/noticias/deportiva/2016/06/64-202367-9-a-esteban-paredes-le-penan-los-dramas-por-los-televisores-robados.shtml"> + A Esteban Paredes le penan los dramas por los televisores robados + </a> + </li> + <li class="sbp3"> + <div class="ad300x30"></div> + <a href="https://www.dillo.org/canal/deportiva/64.html">Ir a DEPORTIVA »</a> + </li> + </ul> + <ul class="subEspec submenuL4ta" style="display:none"> + <li class="sbp1">Los más calentitos</li> + <li class="sbp2"> + <span class="fecha"> + 20:49 hrs + </span> + <a href="https://www.dillo.org/noticias/espectacular/2016/06/65-202370-9-carla-ochoa-confirma-romance-con-estas-coquetonas-poses.shtml"> + Carla Ochoa confirma romance con estas coquetonas poses + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 20:05 hrs + </span> + <a href="https://www.dillo.org/noticias/espectacular/2016/06/65-202375-9-oceanika-tienta-con-fusion-peruanojaponesa.shtml"> + Oceanika tienta con fusión peruano-japonesa + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 19:08 hrs + </span> + <a href="https://www.dillo.org/noticias/espectacular/2016/06/65-202372-9-pobrecita-eugenia-lemos-enfrento-su-peor-miedo-en-matinal-de-mega.shtml"> + Pobrecita: Eugenia Lemos enfrentó su peor miedo en matinal de Mega + </a> + </li> + <li class="sbp3"> + <div class="ad300x30"></div> + <a href="https://www.dillo.org/canal/espectacular/65.html">Ir a ESPECTACULAR »</a> + </li> + </ul> + <ul class="subDio submenuL4ta" style="display:none"> + <li class="sbp1">Los más calentitos</li> + <li class="sbp2"> + <span class="fecha"> + 00:32 hrs + </span> + <a href="http://www.lacuarta.com/noticias/diosagram/2016/06/612-202338-9-conoce-a-la-diosagram-del-dia-anyalissa.shtml"> + Conoce a la #Diosagram del día: Anyalissa + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 29/06 + </span> + <a href="http://www.lacuarta.com/noticias/diosagram/2016/06/612-202295-9-conoce-a-la-diosagram-del-dia-katalina-katt-leya.shtml"> + Conoce a la #Diosagram del día: Katalina "Katt" Leya + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 28/06 + </span> + <a href="http://www.lacuarta.com/noticias/diosagram/2016/06/612-202248-9-conoce-a-la-diosagram-del-dia-erika-mitdank.shtml"> + Conoce a la #Diosagram del día: Érika Mitdank + </a> + </li> + <li class="sbp3"> + <div class="ad300x30"></div> + <a href="https://www.dillo.org/canal/diosagram/612.html">Ir a DIOSAGRAM »</a> + </li> + </ul> + <ul class="subMascot submenuL4ta" style="display:none"> + <li class="sbp1">Los más calentitos</li> + <li class="sbp2"> + <span class="fecha"> + 13:22 hrs + </span> + <a href="http://www.lacuarta.com/noticias/mascotas/2016/06/528-202329-9-loro-testificaria-en-un-juicio-por-asesinato.shtml"> + Loro testificaría en un juicio por asesinato + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 11:18 hrs + </span> + <a href="http://www.lacuarta.com/noticias/mascotas/2016/06/528-202359-9-echaran-a-un-gato-de-la-biblioteca-que-es-su-hogar.shtml"> + Echarán a un gato de la biblioteca que es su hogar + </a> + </li> + <li class="sbp2"> + <span class="fecha"> + 09:13 hrs + </span> + <a href="http://www.lacuarta.com/noticias/mascotas/2016/06/528-202352-9-video-eduardo-fuentes-conto-como-vivio-la-muerte-de-su-perrito.shtml"> + [Video] Eduardo Fuentes contó cómo vivió la muerte de su perrito + </a> + </li> + <li class="sbp3"> + <div class="ad300x30"></div> + <a href="https://www.dillo.org/canal/mascotas/528.html">Ir a MASCOTAS »</a> + </li> + </ul> + <ul class="subGalerias submenuL4ta" style="display:none; height: auto;"> + <li class="sbp1">Los más calentitos</li> + <li class="sbp2" style="height: auto;"> + <a href="http://www.lacuarta.com/galerias/multimedia/galerias/2016/06/524-18641-7-monica-soto-y-su-mea-culpa-tras-salir-del-reality.shtml"> + <img src="http://static.lacuarta.com/20160630/2309353_110_70.jpg" alt="Mónica Soto y su mea culpa tras salir del reality" width="110" height="70" /> + <p style="font-size:12px;">Mónica Soto y su mea culpa tras salir del reality</p> + </a> + </li> + <li class="sbp2" style="height: auto;"> + <a href="http://www.lacuarta.com/galerias/multimedia/galerias/2016/06/524-18640-7-los-ineditos-detalles-de-la-copa-america-centenario.shtml"> + <img src="http://static.lacuarta.com/20160630/2309342_110_70.jpg" alt="Los inéditos detalles de la Copa América Centenario" width="110" height="70" /> + <p style="font-size:12px;">Los inéditos detalles de la Copa América Centenario</p> + </a> + </li> + <li class="sbp2" style="height: auto;"> + <a href="http://www.lacuarta.com/galerias/multimedia/galerias/2016/06/524-18639-7-tera-patrick-quedo-loca-con-nuestro-nino.shtml"> + <img src="http://static.lacuarta.com/20160628/2308904_110_70.jpg" alt="Tera Patrick quedó loca con nuestro ''Niño''" width="110" height="70" /> + <p style="font-size:12px;">Tera Patrick quedó loca con nuestro ''Niño''</p> + </a> + </li> + <li class="sbp3"> + <div class="ad300x30"></div> + <a href="https://www.dillo.org/canal/multimedia/galerias/524.html">Ir a Galerías »</a> + </li> + </ul> + </div> + + + <div id="contenido" class=""> + <div class="a1020"> + + + + + <div class="span-13 titulares1"> + + <div class="span-9 colCentral"> + <div style="float: left;"> + + + <div id='div-gpt-ad-1424448852786-5' class="ad700x50"> + <script type='text/javascript'> + googletag.cmd.push(function() { + googletag.display('div-gpt-ad-1424448852786-5'); + }); + </script> + </div> + </div> + + <div class="contenedorSlide_homeL4TA"> + + + + + + <div class="noticiasPrincipalesDestacadas"> + + <div class="principalDestacada_l4ta"> + <a href="https://www.dillo.org/noticias/espectacular/2016/06/65-202370-9-carla-ochoa-confirma-romance-con-estas-coquetonas-poses.shtml"> + <img width="710" src="http://static.lacuarta.com/20160611/2302969_710.jpg" alt=""/> + </a> + </div> + <div class="titulo_principalDestacado SLI_espectacular"> + <a href="https://www.dillo.org/noticias/espectacular/2016/06/65-202370-9-carla-ochoa-confirma-romance-con-estas-coquetonas-poses.shtml" ><h3> Carla Ochoa confirma romance con estas coquetonas poses </h3></a> + <p> La rucia subió un par de fotos donde disfruta de sus vacaciones con el galancete Pedro Bastidas. </p> + </div> + + + + <div class="notasSecuandariasDestacda_l4ta SLI_deportiva"> + <a href="http://www.lacuarta.com/noticias/deportiva/2016/06/64-202367-9-a-esteban-paredes-le-penan-los-dramas-por-los-televisores-robados.shtml"> + <img src="http://static.lacuarta.com/20160303/2263300_125.jpg" alt=""/> + <a href="http://www.lacuarta.com/noticias/deportiva/2016/06/64-202367-9-a-esteban-paredes-le-penan-los-dramas-por-los-televisores-robados.shtml" ><h3> Paredes le penan los dramas por los televisores robados </h3></a> + </a> + </div> +</div> </div> + + <div class="box_news_home_right"> + <ul> + <li> +<div class="border_dep"> +<h3 class="L4ta_tituloRigth"><img alt="DEP.png" src="http://resource.lacuarta.com/img/secciones/DEP.png" class="contenedorSecciones_L4ta_ColumnaLeft"$ +<p class="L4ta_bajaTituloIzquierda"> Nuevo deté rossonero tendría en la lista de refuerzos al chileno y ex pupilo, en Fiorentina. </p> +<a href="/noticias/deportiva/2016/06/64-202354-9-matias-fernandez-estaria-a-un-paso-de-fichar-en-el-milan.shtml" title=" Matías Fernández estaría a u$ + <div class="L4ta_img_efecto"> + <img src="http://static.lacuarta.com/20160630/2309401.jpg" alt="" title=""/> + </div> + </a> +</div> </li> + + <li> +<div class="border_dep"> +<h3 class="L4ta_tituloRigth"><img alt="DEP.png" src="http://resource.lacuarta.com/img/secciones/DEP.png" class="contenedorSecciones_L4ta_ColumnaLeft"$ +<p class="L4ta_bajaTituloIzquierda"> "Veremos como compatibilizar los intereses de todos", comentó don Elmer después de cachar las amenazas de Carlos$ +<a href="http://www.lacuarta.com/noticias/deportiva/2016/06/64-202368-9-arturo-salah-hablo-tras-amenazas-del-sifup.shtml" title=" Arturo Salah habló $ + <div class="L4ta_img_efecto"> + <img src="http://static.lacuarta.com/20160530/2298562.jpg" alt="" title=""/> + </div> + </a> +</div> </li> +</ul> +</div> + + +<div class="horoskp span-4 last"> + <h2>Horóscopo</h2> + <div id="contenedor-horoscopo"> + <a class="buttons prev" href="4ta.html#"><img src="http://resource.lacuarta.com/css/i/horoscopo/flecha_roja_hcpo_prev.png" alt="anterior" /></a> + <div class="viewport"> + <ul class="overview"> + <li class="signo"> + <h3>aries</h3> + <img class="zodiaco" src="http://resource.lacuarta.com/css/i/horoscopo/aries.png" alt="aries" /> + <span class="fechahoroscopo">21 de marzo al 20 de abril</span> + <p>No deje que jueguen con sus sentimientos, si esa persona no lo está tomando en serio, mándela para otro lado. Cuidado con el colesterol. Se están haciendo grandes expectativas por su trabajo, siga así. Negro. N° 7.</p> + </li> + <li class="signo"> + <h3>tauro</h3> + <img class="zodiaco" src="http://resource.lacuarta.com/css/i/horoscopo/tauro.png" alt="tauro" /> + <span class="fechahoroscopo">21 de abril al 20 de mayo</span> + <p>Deje pasar el tiempo y todo se calmará, así tanto usted como la otra persona tendrán el tiempo para analizar y tomar una buena decisión. Sea más cuidadoso con su salud. Ahorre para sus proyectos pendientes. Crema. N° 29.</p> + </li> + <li class="signo"> + <h3>géminis</h3> + <img class="zodiaco" src="http://resource.lacuarta.com/css/i/horoscopo/geminis.png" alt="geminis" /> + <span class="fechahoroscopo">21 de mayo al 22 de junio</span> + <p>No juegue con los sentimientos de las personas, porque esto le puede rebotar en cualquier momento. Fracturas o esguinces pueden amargarle la jornada. Día laboral lento y con más de alguna complicación. Blanco. N° 11.</p> + </li> + </ul> + </div> + <a class="buttons next" href="4ta.html#"><img src="http://resource.lacuarta.com/css/i/horoscopo/flecha_roja_hcpo_next.png" alt="siguiente" /></a> + </div> + + <div class="tiayoli"> + <h3>Por Yolanda Sultana</h3> + <p class="yoli-tw"><a href="http://twitter.com/yolandasultanah" title="@yolandasultanah" target="_blank">@yolandasultanah</a></p> + <p class="yoli-fn">(02) 27788818 - (032) 2613124 - (072) 2239013</p> + </div> + <!-- div class="pioresna"> + <h2>Encuentre a su pio es ná,</h2> + <h3>Escríbanos rapidito a:</h3> + <a href="mailto:arrozlacuarta@gmail.com">arrozlacuarta@gmail.com</a> + </div --> +</div> + </div> + + </body> +</html> diff --git a/old/test/4648/BTG.html b/old/test/4648/BTG.html new file mode 100644 index 0000000..2799683 --- /dev/null +++ b/old/test/4648/BTG.html @@ -0,0 +1,1874 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <!-- Script for statistics - Remove -->
+ <script type="text/javascript">var _sf_startpt=(new Date()).getTime()</script>
+ <!-- Script for statistics - Remove -->
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="description" content="Mercados en Linea - BTG Pactual Chile. Accede a la mejor página financiera en tiempo real de Chile y Perú. Visitanos." />
+ <title>Mercados en Línea - BTG Pactual Chile</title>
+ <link href="http://www.btgpactual.mdgms.com/css/celfinStyle.css" rel="stylesheet" type="text/css" />
+
+ <link href="http://www.btgpactual.mdgms.com/css/jquery-ui-1.8.13.custom.css" rel="stylesheet" type="text/css" />
+
+ <script type="text/javascript" language="javascript" src="http://www.btgpactual.mdgms.com/js/jquery.1.6.1.js"></script>
+
+ <!-- CALENDAR -->
+ <link href="http://www.btgpactual.mdgms.com/css/calendar.css" rel="stylesheet" type="text/css" />
+ <script type="text/javascript" src="http://www.btgpactual.mdgms.com/js/calendar.js"></script>
+ <script type="text/javascript" src="http://www.btgpactual.mdgms.com/js/calendar-es.js"></script>
+ <script type="text/javascript" src="http://www.btgpactual.mdgms.com/js/calendar-setup.js"></script>
+ <!-- FIN CALENDAR -->
+
+ <script type="text/javascript" language="javascript" src="http://www.btgpactual.mdgms.com/js/jquery-ui-1.8.13.custom.min.js"></script>
+ <script type="text/javascript" language="javascript" src="http://www.btgpactual.mdgms.com/js/jquery.ui.autocomplete.js"></script>
+
+ <script type="text/javascript" language="javascript" src="http://www.btgpactual.mdgms.com/js/functions.js"></script>
+
+ <script type='text/javascript'>
+ //Initialisation of the JS API in the general page
+ var d=document.domain.split('.'); if (d.length>2) {document.domain = d[d.length-2]+'.'+d[d.length-1];}
+ </script>
+ <script type="text/javascript" src="http://push2.mdgms.com/files/js-api/1.6.x/mdg_js_api.js"></script> + <script type="text/javascript"> +MDG.PageProperties["AUTH_ID_NAME"]="AZID"; +MDG.PageProperties["AUTH_ID_VALUE"]="10510,1468030125,VsiRGGHc8rDpA1xcY7qB0Q==,jo6ar9E9SNWvL1Imr76ep+66AdyTFkPhSj3H3FNFe2s=,axiTvTt6vydBgu6lFBxkE7T/CyExOri6v9+r0S7/YKIcviBappFALV2ypCgGRHGa4H1hzKt7MLMACpXj0hFzOw=="; +MDG.PageProperties["MDG_HOST"]="*.push2.mdgms.com"; +MDG.PageProperties["POLL_INTERVAL"]="3000"; +MDG.PageProperties["PUSH_SERVER_DELAY"]="500"; +var domhandler; +$(document).ready(function(){domhandler = new MDG.MdgJsDomHandler()}); +$(window).unload(function(){if(typeof(domhandler) != "undefined") domhandler.destroy()}); +</script> +
+ <script type="text/javascript">
+
+ function ConsumerMarket() {};
+ function ConsumerStatusMarket() {};
+
+ ConsumerMarket.prototype.consume = function(obj, subscription) {
+ var value = "n.a.";
+ var performance_pct = "n.a.";
+ var prev_performance_pct = "n.a.";
+
+ if (obj.isValid()) {
+
+ __iIDNotation = obj.getValue("ID_NOTATION");
+
+ value = obj.getFormattedValue("PRICE");
+ performance_pct = obj.getRawValue("PERFORMANCE_PCT");
+ prev_performance_pct = obj.getPrevRawValue("PERFORMANCE_PCT");
+
+ var statusMarket = $('#market_open_'+__iIDNotation).html();
+ var statusTradeable = $('#market_tradeable_'+__iIDNotation).html();
+
+ var classPrice = "txtSome";
+
+ if (statusMarket == 0 || statusTradeable == 0){
+ classPrice = "gris";
+ clase = "gris";
+ }else if (performance_pct>0){
+ if (performance_pct>prev_performance_pct){
+ clase = "txtBackGreen";
+ }else if(performance_pct<prev_performance_pct){
+ clase = "txtBackRed";
+ }else{
+ clase = "txtBackYel";
+ }
+ }else if(performance_pct<0){
+ if (performance_pct>prev_performance_pct){
+ clase = "txtBackRed";
+ }else if(performance_pct<prev_performance_pct){
+ clase = "txtBackGreen";
+ }else{
+ clase = "txtBackYel";
+ }
+ }
+
+
+ $('#market_performancepct_'+__iIDNotation).html(formatNumPCT(performance_pct)).removeClass().addClass(clase);
+ setTimeout('tickMarket("'+__iIDNotation+'",'+performance_pct+')',500);
+ $('#market_price_'+__iIDNotation).html(value).removeClass().addClass(classPrice);
+
+ }
+
+ // return true for further updates,
+ // false for a passive unsubscription
+ return true;
+
+ };
+
+ ConsumerStatusMarket.prototype.consume = function(obj, subscription) {
+ var iOpenMarket = "";
+ var iTradeable = "";
+
+ if (obj.isValid()) {
+
+ __iIDNotation = obj.getValue("ID_NOTATION");
+
+ iOpenMarket = obj.getFormattedValue("IS_MARKET_OPEN");
+ iTradeable = obj.getRawValue("IS_TRADEABLE");
+
+ $('#market_tradeable_'+__iIDNotation).html(iTradeable);
+ $('#market_open_'+__iIDNotation).html(iTradeable);
+ }
+
+ // return true for further updates,
+ // false for a passive unsubscription
+ return true;
+ };
+
+ var today='2016-07-07';
+ var sYear = '2016';
+ var pathChart = '/relaunch_chart/chart.html?';
+ var iIDNotation = '17242077';
+ var mdgSession;
+ var TimeZone = 42;
+
+ $(document).ready(function(){
+
+ //settingChart();
+ /**
+ * Take IdNotation for Push
+ */
+ nId = "17242077";
+ /**
+ * Function click on Name
+ */
+ $(".name").click(function(){
+
+ nIdnotation = this.id;
+ sName = $(this).attr("title");
+ periodo = "1D";
+
+ nIdnotations=nIdnotation.split("_");
+ nIdnotation=nIdnotations[1];
+ if(!isNaN(nIdnotation))
+ {
+ nIdnotation=nIdnotations[1];
+ }
+ else
+ {
+ if(!isNaN(nIdnotations[2])){
+ nIdnotation=$("#"+nIdnotations[0]+"_notation_"+nIdnotations[2]).html();
+ }else{
+ nIdnotation=$("#"+nIdnotations[0]+"_"+nIdnotations[1]+"_notation_"+nIdnotations[3]).html();
+ }
+ }
+
+ iIDNotation = nIdnotation;
+ detalle(nIdnotation);
+ grafico(nIdnotation,periodo,TimeZone);
+ zeroRange();
+ $("#search").val("Buscar");
+ });
+
+ /**
+ * Function click on range
+ */
+ $('.navPeriodo').hover(function() {
+ $(this).addClass('listhover');
+ }, function() {
+ $(this).removeClass('listhover');
+ });
+ $('.navPeriodo').click(function() {
+ $('.navPeriodo').removeClass('listclick').addClass('list');
+ $(this).removeClass('list').addClass('listclick');
+ periodo = this.id;
+ nIdnotation = iIDNotation;
+ grafico(nIdnotation,periodo,TimeZone);
+ });
+
+ /**
+ * Calendar
+ */
+ Calendar.setup({
+ inputField : "desde",
+ ifFormat : "%d/%m/%Y",
+ button : "trigger"
+ });
+
+ Calendar.setup({
+ inputField : "hasta",
+ ifFormat : "%d/%m/%Y",
+ button : "trigger"
+ });
+ /**
+ * Change Details
+ */
+ $(".btn").click(function(){
+ link=$(this).html();
+ if(link=='Detalle Mercados'){
+ location.href="http://www.btgpactual.mdgms.com/www/chile/detail.html";
+ }
+ });
+
+ /**
+ * Click Flag Peru
+ */
+ $(".flagPe").click(function(){
+ location.href="http://www.btgpactual.mdgms.com/www/peru/resume.html";
+ });
+ /**
+ * Calculation Period
+ */
+ $(".btnGo").click(function(){
+ var desde = $("#desde").val();
+ var hasta = $("#hasta").val();
+ var hoy = $("#hoy").val();
+ var nIdnotation = iIDNotation;
+
+ var fecha1 = desde.split("/");
+ var dia1 = fecha1[0];
+ var mes1 = fecha1[1];
+ var ano1 = fecha1[2];
+
+ var fecha2 = hasta.split("/");
+ var dia2 = fecha2[0];
+ var mes2 = fecha2[1];
+ var ano2 = fecha2[2];
+
+ var fecha = hoy.split("/");
+ var dia = fecha[0];
+ var mes = fecha[1];
+ var ano = fecha[2];
+
+ if(new Date(ano1,mes1-1,dia1) > new Date(ano,mes-1,dia) || new Date(ano1,mes1-1,dia1) > new Date(ano2,mes2-1,dia2) || new Date(ano2,mes2-1,dia2) > new Date(ano,mes-1,dia)){
+ alert("ATENCION: Verifique la fecha");
+ desde = $("#desde").val(hoy);
+ hasta = $("#hasta").val(hoy);
+ }
+ else if(new Date(ano1,mes1-1,dia1) <= new Date(ano,mes-1,dia) && new Date(ano1,mes1-1,dia1) <= new Date(ano,mes-1,dia)){
+ grafico(nIdnotation,'RANGE',TimeZone,mes1+'/'+dia1+'/'+ano1,mes2+'/'+dia2+'/'+ano2);
+ }else{
+ grafico(nIdnotation,'RANGE',TimeZone,mes1+'/'+dia1+'/'+ano1,mes2+'/'+dia2+'/'+ano2);
+ }
+ });
+
+ /**
+ * Load Indices PUSH
+ */
+ loadIndices();
+ /**
+ * MDG_Refresh called every two seconds
+ */
+ mdgSession = domhandler.getSession();
+
+ makeRequest("SGO","TOP","CN_DIFF_REL_RANGE_DESC","20");
+ makeRequest("SGO","FLOP","CN_DIFF_REL_RANGE","20");
+ makeRequest("SGO","TOP_FLOP","MONEY_RANGE_DESC","20");
+
+ /**
+ * Display Alert
+ */
+ //$('.alerta').show();
+ /**
+ * Click to hide Alert
+ */
+ $('.btnCancelar').click(function(){
+ $('.alerta').hide();
+ });
+
+ $( "#search" ).catcomplete({
+ delay: 0,
+ minLength: 2,
+ width: 300,
+ position: { my: "right top", at:"right bottom"},
+ source: function( request, response ) {
+ $.getJSON( "search.html", {
+ SEARCH_VALUE: extractLast( request.term )
+ }, response );
+ },
+ select: function( event, ui ) {
+ $( "#search" ).val( ui.item.name_security );
+ $( "#idnotation" ).val( ui.item.notation );
+ clickSelectSearch(ui.item.notation);
+ $(this).blur();
+ return false;
+ }
+ });
+
+ $("#search").bind({
+ click: function(){
+ $(this).val('');
+ },
+ blur: function(){
+ if (this.value == ''){
+ $('#search').removeClass('ui-autocomplete-loading');
+ this.value = 'Buscar';
+ }else{
+ $('#search').removeClass('ui-autocomplete-loading');
+ }
+ }
+ });
+ });//Fin ready
+
+ /**
+ *
+ * Function for request TOP, FLOP, TOP_FLOP
+ *
+ */
+ function makeRequest(__idExchange,__type,__sort,__size)
+ {
+ var mdgUrl = new MDG.URL("/stocks/top_flop_list?VERSION=1");
+ mdgUrl.addParam("ID_EXCHANGE", __idExchange);
+ mdgUrl.addParam("TYPE", __type);
+ mdgUrl.addParam("SORT", __sort);
+ mdgUrl.addParam("BLOCKSIZE", __size);
+ mdgUrl.addParam("QUALITY", "BST");
+
+ var oTopFlop = new priceHandler();
+ oTopFlop.__type = __type;
+ oTopFlop.__size = __size;
+ oTopFlop.__sort = __sort;
+
+ var mdgRequest = new MDG.Request(mdgUrl, oTopFlop);
+ mdgSession.request(mdgRequest);
+ }
+ /*
+ * Function for Clean Fields for TOP, Flop, TOP_FLOP
+ */
+ function cleanTopFlopFields(__type,__count){
+
+ for (i=__count;i<=10;i++){
+ document.getElementById( __type+'_notation_' + i ).innerHTML = '';
+ document.getElementById( __type+'_name_' + i ).innerHTML = '';
+ document.getElementById( __type+'_price_' + i ).innerHTML = '';
+ document.getElementById( __type+'_pct_' + i ).innerHTML = '';
+ document.getElementById( __type+'_performance_' + i ).innerHTML = '';
+
+ $('#' + __type + '_name_' + i).attr('title','');
+ }
+ }
+ /*
+ * Function for change class to Close
+ */
+ function MDGMarketClose(row,type){
+
+ $('#' + type + '_name_'+row).removeClass().addClass('gris');
+ $('#' + type + '_price_'+row).removeClass().addClass('gris');
+ $('#' + type + '_pct_'+row).removeClass().addClass('gris');
+ }
+ /**
+ * Filter for status market and class for price and performance
+ */
+ function tickTopFlop(type,row,performancepct,date){
+
+ if(date != today){
+ MDGMarketClose(row,type);
+ }else{
+ if (performancepct>0.0){
+ $('#'+type+'_pct_'+row).removeClass().addClass("txtGreen");
+ }else if(performancepct<0.0){
+ $('#'+type+'_pct_'+row).removeClass().addClass("txtRed");
+ }else{
+ $('#'+type+'_pct_'+row).removeClass().addClass("txtSome");
+ }
+ }
+ }
+ /**
+ * Function for parse Date for Request TOP, FLOP, TOP_FLOP
+ */
+ function parseDate(__date){
+
+ var date = new Date(__date);
+ var month = (date.getMonth().length == 1 ) ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1);
+ var day = (date.getDay().length == 1 ) ? '0' + (date.getDay() + 1) : (date.getDay() + 1);
+ var year = date.getFullYear();
+
+ return year + '-' + month + '-' + day;
+ }
+ /*
+ * Function Handler for TOP, FLOP, TOP_FLOP
+ */
+ function priceHandler(mdgObject)
+ {
+ var __type = null;
+ var __size = null;
+ var __sort = null;
+
+ this.consume = function(mdgObject)
+ {
+ var price;
+ var name_security;
+ var home_symbol;
+ var pct;
+ var performance;
+ var prev_performance;
+ var notation;
+ var tabNotation;
+ var classPct;
+
+
+ if (mdgObject.isValid()){
+
+ var iContaTable = 1
+
+ for (var i = 1; i <= mdgObject.getValue('AMOUNT'); i++){
+
+ if (iContaTable>10) break;
+
+ if (mdgObject.getValue('ID_CURRENCY', i) == "CLP"){
+
+ notation = mdgObject.getValue('ID_NOTATION', i);
+ tabNotation = $( '#' + this.__type + '_notation_' + iContaTable).html();
+ // console.log(i + " " +mdgObject.getValue('AMOUNT') + " " + notation+ " => "+ mdgObject.getValue('HOME_SYMBOL', i) + " - TABLA " + tabNotation);
+
+ // verificando que el id_notation exista en la tabla
+ if ( tabNotation != null ){
+
+ if ( notation != tabNotation ){
+ // console.log("DISTINTOS");
+
+ name_security = mdgObject.getValue('NAME_SECURITY', i);
+ home_symbol = mdgObject.getValue('HOME_SYMBOL', i);
+ if (home_symbol == ''){
+ home_symbol = name_security;
+ }
+ price = mdgObject.getFormattedValue('BASE_QUOTE_RANGE', i);
+ pct = formato_numero(mdgObject.getRawValue('CN_DIFF_REL_RANGE', i),2);
+ pct_r = mdgObject.getRawValue('CN_DIFF_REL_RANGE', i);
+ performance = mdgObject.getValue('CN_DIFF_ABS_RANGE', i);
+ date = mdgObject.getRawValue('DATE_BASE_QUOTE', i);
+
+ document.getElementById( this.__type + '_notation_' + iContaTable ).innerHTML = notation;
+ document.getElementById( this.__type + '_name_' + iContaTable ).innerHTML = home_symbol.replace('\\',' ');
+ document.getElementById( this.__type + '_price_' + iContaTable ).innerHTML = price;
+ document.getElementById( this.__type + '_pct_' + iContaTable ).innerHTML = pct;
+ document.getElementById( this.__type + '_performance_' + iContaTable ).innerHTML = performance;
+
+ $('#' + this.__type + '_name_' + iContaTable).attr('title',name_security);
+
+ if (date != today){
+ MDGMarketClose(iContaTable, this.__type);
+ }else{
+
+ $('#' + this.__type + '_name_' + iContaTable).removeClass().addClass("txtSome");
+ $('#' + this.__type + '_price_' + iContaTable).removeClass().addClass("txtSome");
+
+ if (performance > 0.0){
+ classPct = 'txtBackGreen';
+ }else if(performance < 0.0){
+ classPct = 'txtBackRed';
+ }
+ $('#' + this.__type + '_pct_' + iContaTable ).removeClass().addClass(classPct);
+ }
+
+ // console.log("antes del setTimeout");
+
+ setTimeout('tickTopFlop("' + this.__type + '",'+iContaTable+','+pct_r+',"'+date+'")',1000);
+
+ }else{
+
+ // console.log("IGUALES");
+
+ performance = mdgObject.getValue('CN_DIFF_ABS_RANGE', i);
+ price = mdgObject.getFormattedValue('BASE_QUOTE_RANGE', i);
+ pct = formato_numero(mdgObject.getRawValue('CN_DIFF_REL_RANGE', i),2);
+ pct_r = mdgObject.getRawValue('CN_DIFF_REL_RANGE', i);
+ date = mdgObject.getRawValue('DATE_BASE_QUOTE', i);
+
+ prev_performance = $('#' + this.__type + '_performance_' + iContaTable ).html();
+
+ if (date != today){
+
+ MDGMarketClose(iContaTable, this.__type);
+
+ }else{
+
+ if (performance != prev_performance){
+
+ document.getElementById( this.__type + '_price_' + iContaTable ).innerHTML = price;
+ document.getElementById( this.__type + '_pct_' + iContaTable ).innerHTML = pct;
+ document.getElementById( this.__type + '_performance_' + iContaTable ).innerHTML = performance;
+
+ $('#' + this.__type + '_name_' + iContaTable).removeClass().addClass("txtSome");
+ $('#' + this.__type + '_price_' + iContaTable).removeClass().addClass("txtSome");
+
+ if (performance > prev_performance){
+ classPct = 'txtBackGreen';
+ }else if(performance < prev_performance){
+ classPct = 'txtBackRed';
+ }
+
+
+ $('#' + this.__type + '_pct_' + iContaTable ).removeClass().addClass(classPct);
+ setTimeout('tickTopFlop("' + this.__type + '",'+iContaTable+','+pct_r+',"'+date+'")',1000);
+
+ }//endif
+
+ }//endif
+
+ }//endif
+
+
+
+ }// endif null
+
+ iContaTable++;
+
+ } // end if solo CLP
+
+ }//endfor
+
+ }//endif
+
+ cleanTopFlopFields(this.__type,iContaTable);
+
+ // Get expiry time of MDG object in milliseconds (since 1970/01/01)
+ var expiryTime = mdgObject.getExpiryTime();
+
+ // Difference Client - MDG in seconds, * 1000 to get milliseconds
+ var timeDifference = mdgSession.getTimeDifference() * 1000;
+
+ // add time difference and + 10 sec. This is the client time to request the object again
+ var requestTime = expiryTime + timeDifference;
+
+ // We need the number of milliseconds from now till the object shall be requested again
+ // Get current timestamp (milliseconds since 1970/01/01)
+ var timestamp = new Date();
+ var timeout = requestTime - timestamp;
+
+ //console.log("timeout => " + timeout)
+ //Alberto -> set Timeout to 20 sec
+ timeout = 20000;
+ window.setTimeout('makeRequest("SGO","' + this.__type + '","' + this.__sort + '","20")',timeout);
+
+ //Important, has to return true to be re-invoked
+ return true;
+ };
+ }
+ /**
+ * Function for Click TopFlop
+ */
+ function clickTopFlop(__this){
+ nIdnotation = $(__this).attr("id");
+ sName = $(__this).attr("title");
+ periodo = "1M";
+
+ nIdnotations=nIdnotation.split("_");
+ nIdnotation=nIdnotations[1];
+ if(!isNaN(nIdnotation))
+ {
+ nIdnotation=nIdnotations[1];
+ }
+ else
+ {
+ nIdnotation=nIdnotations[2];
+ }
+
+ iIDNotation = nIdnotation;
+
+ detalle(nIdnotation);
+ grafico(nIdnotation,periodo,TimeZone);
+ //loadData(periodo,nIdnotation);
+ //loadGraph(periodo,nIdnotation);
+ zeroRange();
+
+ $("#search").val("Buscar");
+
+ }
+
+ /**
+ * Function for Indices PUSH
+ */
+ function loadIndices(){
+
+ if (typeof MDG == "undefined") return false;
+ if (typeof domhandler == "undefined") return false;
+
+ //$('#debug').html('CARGO INDICES');
+
+ var sessionOfDomHandler = domhandler.getSession();
+
+ aRequestIndices = new Array();
+ var url = "";
+ var consumerPricePerformancePCT = new ConsumerMarket();
+ var consumerStatus = new ConsumerStatusMarket();
+ var filter = "";
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=17242077");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[0] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=17242077");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[1] = new MDG.Subscription(url,consumerStatus);
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=50947616");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[2] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=50947616");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[3] = new MDG.Subscription(url,consumerStatus);
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=1335248");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[4] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=1335248");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[5] = new MDG.Subscription(url,consumerStatus);
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=324977");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[6] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=324977");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[7] = new MDG.Subscription(url,consumerStatus);
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=325104");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[8] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=325104");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[9] = new MDG.Subscription(url,consumerStatus);
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=4359526");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[10] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=4359526");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[11] = new MDG.Subscription(url,consumerStatus);
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=60972397");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[12] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=60972397");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[13] = new MDG.Subscription(url,consumerStatus);
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=10583965");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[14] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=10583965");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[15] = new MDG.Subscription(url,consumerStatus);
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=1918069");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[16] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=1918069");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[17] = new MDG.Subscription(url,consumerStatus);
+
+
+ url = new MDG.URL("prices/quote?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=20735");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_ALL,['PRICE','PERFORMANCE_PCT']);
+ aRequestIndices[18] = new MDG.Subscription(url,consumerPricePerformancePCT,filter);
+
+ url = new MDG.URL("prices/status?VERSION=2&ID_QUALITY_PRICE=4&ID_NOTATION=20735");
+ filter = new MDG.SubscriptionFilter(MDG.Event.TYPE_CHANGE,['IS_TRADEABLE','IS_MARKET_OPEN']);
+ aRequestIndices[19] = new MDG.Subscription(url,consumerStatus);
+
+ sessionOfDomHandler.subscribe(aRequestIndices);
+ }
+
+ /**
+ * Filter for status market and class for price and performance
+ */
+ function tickMarket(__iIDNotation,performancepct){
+
+ var statusMarket = $('#market_open_'+__iIDNotation).html();
+ var statusTradeable = $('#market_tradeable_'+__iIDNotation).html();
+
+ if (statusMarket == 0 || statusTradeable == 0){
+ $('#market_performancepct_'+__iIDNotation).removeClass().addClass("gris");
+ }else if (performancepct>0.0){
+ $('#market_performancepct_'+__iIDNotation).removeClass().addClass("txtGreen");
+ }else if(performancepct<0.0){
+ $('#market_performancepct_'+__iIDNotation).removeClass().addClass("txtRed");
+ }else{
+ $('#market_performancepct_'+__iIDNotation).removeClass().addClass("txtSome");
+ }
+
+ }
+
+ filterPrice = function(object, subscription, value, row){
+ if (object.isValid()){
+
+ value = object.getRaw('PRICE');
+
+ return formato_numero(value, 2, ',', '.');
+ }
+ };
+
+ classFilterPerformancePCT = function(object, subscription, classValue, row){
+
+ if (object.isValid()){
+
+ var __classValue = "";
+ var iIDNotation = object.getValue("ID_NOTATION");
+
+ var is_tradeable =0;
+ var is_market_open = 0;
+ if (is_tradeable == 0 || is_market_open == 0){
+ $('#debug').append(row + " - " + iIDNotation + " - " + is_tradeable + " - " + is_market_open + " - GRIS <br>");
+ __classValue = "gris";
+ }else{
+ $('#debug').append(row + " - " + iIDNotation + " - " +is_tradeable + " - " + is_market_open + " - " + classValue + "<br>" );
+ __classValue = classValue;
+ }
+ return __classValue;
+ }
+ $('#debug').append(row + " - " + classValue + "<br>");
+ };
+ /**
+ * Filter for PerformancePCT
+ */
+ FilterPerformancePCT = function(object,subscription,value,row){
+
+ if (object.isValid()){
+ return formatNumPCT(object.getRawValue("PERFORMANCE_PCT"));
+ }
+ };
+
+ /**
+ * Filter for Volume
+ */
+ /*
+ filterVolume = function(object,subscription,value,row){
+
+ if (object.isValid()){
+
+ var fTotalMoney = object.getRawValue("TOTAL_MONEY");
+ var fTotalVolume = object.getRawValue("TOTAL_VOLUME");
+ var fResult = 0;
+ if (fTotalMoney != "_NA_"){
+ fTotalMoney = fTotalMoney/1000000;
+ fResult = formato_numero(fTotalMoney,2,',','.');
+ }else{
+ fTotalVolume = fTotalVolume/1000000;
+ fResult = formato_numero(fTotalVolume,2,',','.');
+ }
+ return fResult;
+ }
+ };
+ */
+ </script>
+</head>
+<body>
+<div id="wrapper">
+ <div class="btn">Detalle Mercados</div><!--btn-->
+ <div class="line_der"></div><!--line_der-->
+ <div class="btn btn_on">Resumen</div><!--btn-->
+ <div id="__top">
+ <div class="brand"><img src="http://www.btgpactual.mdgms.com/images/logo_btgPactual_cl.png" border="0" height="35" width="144" alt="BTG Pactual Chile" /></div>
+
+ <div class="buscador">
+ <div class="loopa"></div><!--loopa-->
+ <input name="search" type="text" id="search" size="30" class="txtfld" value="Buscar"/>
+ <input type="hidden" id="idnotation" name="idnotation" value="" />
+ <div class="clos"></div><!--clos-->
+ </div><!--buscador-->
+ <div class="flagCl"></div><!--flagCl-->
+ <div class="flagPe" title="Ir a Mercados en LÃnea Perú"></div><!--flagPe-->
+ </div><!--__top-->
+
+ <div class="midTop">
+ <div class="left">
+ <div id="datos">
+
+ <div class="charTop">
+ <div class="merc">IPSA, CHILE</div>
+ </div><!--charTop-->
+
+ <div class="charSubTop">
+ <div class="valores">
+ <table cellpadding="0" cellspacing="2" border="0" class="tab" width="100%">
+ <tr>
+ <td align="left"><span style="margin-left: 3px;">Valor Actual</span></td>
+ <td><div class="green" id="domhandler:1.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:CLASS.params:ID_NOTATION-3D17242077-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:gray.gt:green.lt:red.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:gray.resetGt:green.resetLt:red"></div></td>
+ <td>
+ <span class="valor" id="domhandler:2.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D17242077-26ID_QUALITY_PRICE-3D4.attr:PRICE">
+ 3.997,71 </span></td>
+ <td>Var.% Actual</td>
+ <td>
+ <span class="headGraphGreen" id="domhandler:3.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17242077-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:headGraphBackSome.gt:headGraphBackGreen.lt:headGraphBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:headGraphSome.resetGt:headGraphGreen.resetLt:headGraphRed">
+ +0,07% </span></td>
+ <td>Var. Puntos Actual</td>
+ <td>
+ <span class="headGraphGreen" id="domhandler:4.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17242077-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE.comp:PREV.eq:headGraphBackSome.gt:headGraphBackGreen.lt:headGraphBackRed.resetAttr:PERFORMANCE.resetComp:ZERO.resetEq:headGraphSome.resetGt:headGraphGreen.resetLt:headGraphRed">
+ +2,75
+ </span>
+ </td>
+ </tr>
+ </table>
+ </div><!--valores-->
+ </div><!--charSubTop-->
+ </div><!--Datos-->
+
+ <div class="chart"><iframe src="https://www.dillo.org/relaunch_chart/chart.html?ID_NOTATION=17242077&TIME_SPAN=1D&TIMEZONE=42&WIDTH=700&HEIGHT=175" id="graf" height="195" width="710" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" ></iframe></div>
+ <div class="clear"></div><!--clear-->
+ <div class="nav">
+ <input type="hidden" name="idnotation" id="idnotation" value="17242077"/>
+ <input type="hidden" name="hoy" id="hoy" value="07/07/2016"/>
+ <input type="hidden" name="today" id="today" value="2016-07-07"/>
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td width="55" class="navPeriodo listclick" id="1D">1 día</td>
+ <td width="55" class="navPeriodo list" id="5D">1 semana</td>
+ <td width="55" class="navPeriodo list" id="1M">1 mes</td>
+ <td width="55" class="navPeriodo list" id="3M">3 meses</td>
+ <td width="55" class="navPeriodo list" id="6M">6 meses</td>
+ <td width="55" class="navPeriodo list" id="1Y">1 año</td>
+ <td width="55" class="navPeriodo list" id="5Y">5 años</td>
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td width="20" class="tdDerDays">Desde</td>
+ <td width="27"><input name="desde" id="desde" type="text" class="txtfld2" readonly="readonly" value="07/07/2016" /></td>
+ <td width="20" class="tdDerDays">Hasta</td>
+ <td width="27"><input name="hasta" id="hasta" type="text" class="txtfld2" readonly="readonly" value="07/07/2016" /></td>
+ <td width="6"><div class="btnGo"></div></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div><!--nav-->
+ </div><!--left-->
+
+ <div class="right">
+ <div class="combo" style="margin-top:0px">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="45%">Mayores Alzas</td>
+ <td class="tdCent" width="30%">Precio</td>
+ <td width="25%">%</td>
+ </tr>
+ </table>
+</div><!--topCombo-->
+<div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" id="top">
+ <tbody>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_1" style="display: none;">81846693</span>
+ <span id="TOP_performance_1" style="display: none;">0.079</span>
+ <span id="TOP_name_1" class="name " title="NITRATOS DE CHILE SA COM NPV" style="cursor:pointer;">NITRATOS</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_1" class="">0,75</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_1" class="txtGreen ">+11,77</span></td>
+
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_2" style="display: none;">56167215</span>
+ <span id="TOP_performance_2" style="display: none;">3</span>
+ <span id="TOP_name_2" class="name " title="POTASIOS DE CHILE SA COM NPV SER'A'" style="cursor:pointer;">POTASIOS-A</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_2" class="">55,00</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_2" class="txtGreen ">+5,77</span></td>
+
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_3" style="display: none;">17241993</span>
+ <span id="TOP_performance_3" style="display: none;">1.16</span>
+ <span id="TOP_name_3" class="name " title="MASISA S.A. COM NPV" style="cursor:pointer;">MASISA</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_3" class="">25,63</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_3" class="txtGreen ">+4,74</span></td>
+
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_4" style="display: none;">6946349</span>
+ <span id="TOP_performance_4" style="display: none;">71.3</span>
+ <span id="TOP_name_4" class="name " title="EMBOTELLADORA ANDINA SA PRF'B'NPV" style="cursor:pointer;">ANDINA-B</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_4" class="">2.399,10</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_4" class="txtGreen ">+3,06</span></td>
+
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_5" style="display: none;">66804079</span>
+ <span id="TOP_performance_5" style="display: none;">25.6</span>
+ <span id="TOP_name_5" class="name " title="HORTIFRUT S.A. COM NPV" style="cursor:pointer;">HF</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_5" class="">880,00</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_5" class="txtGreen ">+3,00</span></td>
+
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_6" style="display: none;">17241969</span>
+ <span id="TOP_performance_6" style="display: none;">110.5</span>
+ <span id="TOP_name_6" class="name " title="INSTITUTO DE DIAGNOSTICO SA COM NPV" style="cursor:pointer;">INDISA</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_6" class="">3.805,50</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_6" class="txtGreen ">+2,99</span></td>
+
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_7" style="display: none;">17242001</span>
+ <span id="TOP_performance_7" style="display: none;">0.11</span>
+ <span id="TOP_name_7" class="name " title="INVERSIONES NORTE GRANDE SA" style="cursor:pointer;">NORTEGRAN</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_7" class="">3,80</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_7" class="txtGreen ">+2,98</span></td>
+
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_8" style="display: none;">17241852</span>
+ <span id="TOP_performance_8" style="display: none;">12.34</span>
+ <span id="TOP_name_8" class="name " title="PAMPA CALICHERA SOCIEDAD DE INVERSI COM NPV SER'A'" style="cursor:pointer;">CALICHERAA</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_8" class="">497,34</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_8" class="txtGreen ">+2,54</span></td>
+
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_9" style="display: none;">31760748</span>
+ <span id="TOP_performance_9" style="display: none;">7</span>
+ <span id="TOP_name_9" class="name " title="EMPRESAS HITES SA" style="cursor:pointer;">HITES</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_9" class="">298,00</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_9" class="txtGreen ">+2,41</span></td>
+
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_notation_10" style="display: none;">47233677</span>
+ <span id="TOP_performance_10" style="display: none;">0.5</span>
+ <span id="TOP_name_10" class="name " title="AUSTRALIS SEAFOODS SA" style="cursor:pointer;">AUSTRALIS</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_price_10" class="">21,50</span></td>
+ <td align="right" width="25%"><span id="TOP_pct_10" class="txtGreen ">+2,38</span></td>
+
+ </tr>
+ </tbody>
+ </table>
+</div><!--medCombo--> </div><!--combo-->
+ <div class="combo">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="45%">Mayores Bajas</td>
+ <td class="tdCent" width="30%">Precio</td>
+ <td width="25%">%</td>
+ </tr>
+ </table>
+</div><!--topCombo-->
+<div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" id="flop">
+ <tbody>
+ <tr style='display: none;'>
+ <td align="left" width="45%">
+ <span id="FLOP_notation_1" style="display: none;">17241970</span>
+ <span id="FLOP_performance_1" style="display: none;">-13</span>
+ <span id="FLOP_name_1" class="name " title="INDIVER S.A. NPV" style="cursor:pointer;">INDIVER</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_1" class="">16,00</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_1" class="txtRed ">-44,83</span></td>
+ </tr>
+ <tr >
+ <td align="left" width="45%">
+ <span id="FLOP_notation_2" style="display: none;">17242054</span>
+ <span id="FLOP_performance_2" style="display: none;">-200000</span>
+ <span id="FLOP_name_2" class="name " title="INMOBILIARIA SPORT FRANCALS NPV" style="cursor:pointer;">SPORTFRAN</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_2" class="">2.100.000,00</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_2" class="txtRed ">-8,70</span></td>
+ </tr>
+ <tr >
+ <td align="left" width="45%">
+ <span id="FLOP_notation_3" style="display: none;">17241977</span>
+ <span id="FLOP_performance_3" style="display: none;">-2</span>
+ <span id="FLOP_name_3" class="name " title="INVERMAR S.A. COM NPV" style="cursor:pointer;">INVERMAR</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_3" class="">47,00</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_3" class="txtRed ">-4,08</span></td>
+ </tr>
+ <tr >
+ <td align="left" width="45%">
+ <span id="FLOP_notation_4" style="display: none;">164032162</span>
+ <span id="FLOP_performance_4" style="display: none;">-24.26</span>
+ <span id="FLOP_name_4" class="name " title="ENTEL TELECOMUNICATION(EMPRESA NAC) COM NPV (S/R 22/07/2016)" style="cursor:pointer;">ENTEL-OSA</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_4" class="">575,74</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_4" class="txtRed ">-4,04</span></td>
+ </tr>
+ <tr >
+ <td align="left" width="45%">
+ <span id="FLOP_notation_5" style="display: none;">17241988</span>
+ <span id="FLOP_performance_5" style="display: none;">-0.99</span>
+ <span id="FLOP_name_5" class="name " title="EMPRESAS LA POLAR S.A. COM NPV" style="cursor:pointer;">NUEVAPOLAR</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_5" class="">31,71</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_5" class="txtRed ">-3,03</span></td>
+ </tr>
+ <tr >
+ <td align="left" width="45%">
+ <span id="FLOP_notation_6" style="display: none;">17241917</span>
+ <span id="FLOP_performance_6" style="display: none;">-200</span>
+ <span id="FLOP_name_6" class="name " title="CIA ELECTRO METALURGICA NPV" style="cursor:pointer;">ELECMETAL</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_6" class="">8.500,00</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_6" class="txtRed ">-2,30</span></td>
+ </tr>
+ <tr >
+ <td align="left" width="45%">
+ <span id="FLOP_notation_7" style="display: none;">17241903</span>
+ <span id="FLOP_performance_7" style="display: none;">-100</span>
+ <span id="FLOP_name_7" class="name " title="CRISTALERIAS DE CHILE SA NPV" style="cursor:pointer;">CRISTALES</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_7" class="">5.600,00</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_7" class="txtRed ">-1,75</span></td>
+ </tr>
+ <tr >
+ <td align="left" width="45%">
+ <span id="FLOP_notation_8" style="display: none;">17242050</span>
+ <span id="FLOP_performance_8" style="display: none;">-19.5</span>
+ <span id="FLOP_name_8" class="name " title="SONDA S.A. COM NPV" style="cursor:pointer;">SONDA</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_8" class="">1.205,50</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_8" class="txtRed ">-1,59</span></td>
+ </tr>
+ <tr >
+ <td align="left" width="45%">
+ <span id="FLOP_notation_9" style="display: none;">17241849</span>
+ <span id="FLOP_performance_9" style="display: none;">-3.57</span>
+ <span id="FLOP_name_9" class="name " title="BESALCO SA COM NPV" style="cursor:pointer;">BESALCO</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_9" class="">230,00</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_9" class="txtRed ">-1,53</span></td>
+ </tr>
+ <tr >
+ <td align="left" width="45%">
+ <span id="FLOP_notation_10" style="display: none;">141483479</span>
+ <span id="FLOP_performance_10" style="display: none;">-0.1</span>
+ <span id="FLOP_name_10" class="name " title="VSPT" style="cursor:pointer;">VSPT</span>
+ </td>
+ <td align="right" width="30%"><span id="FLOP_price_10" class="">6,70</span></td>
+ <td align="right" width="25%"><span id="FLOP_pct_10" class="txtRed ">-1,47</span></td>
+ </tr>
+ </tbody>
+ </table>
+</div><!--medCombo--> </div><!--combo-->
+ </div><!--right-->
+ </div><!--midTop-->
+
+ <div class="midBot">
+ <div class="comboMar sepTop">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="50%">Fondo Mutuos</td>
+ <td class="tdCent" width="27%">Precio</td>
+ <td width="23%">% 30 d</td>
+ </tr>
+ </table>
+</div><!--topCombo-->
+<div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td align="left" width="46%"><span id="name_25812362" class="name" title="A. Chilenas">A. Chilenas</span></td>
+ <td align="right" width="29%"><span id="value_25812362">2.617,32</span></td>
+ <td align="right" width="25%"><span id="performance_25812362" class="txtGreen">+0,84</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_55850879" class="name" title="Chile Accion">Chile Accion</span></td>
+ <td align="right" width="29%"><span id="value_55850879">885,51</span></td>
+ <td align="right" width="25%"><span id="performance_55850879" class="txtGreen">+1,07</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_25812363" class="name" title="A. Latinoamericanas">A. Latinoame...</span></td>
+ <td align="right" width="29%"><span id="value_25812363">2.083,37</span></td>
+ <td align="right" width="25%"><span id="performance_25812363" class="txtGreen">+0,68</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_25812373" class="name" title="Brasil">Brasil</span></td>
+ <td align="right" width="29%"><span id="value_25812373">1.305,88</span></td>
+ <td align="right" width="25%"><span id="performance_25812373" class="txtGreen">+3,51</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_84168493" class="name" title="Andino">Andino</span></td>
+ <td align="right" width="29%"><span id="value_84168493">914,96</span></td>
+ <td align="right" width="25%"><span id="performance_84168493" class="txtRed">-1,26</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_25812365" class="name" title="A. USA">A. USA</span></td>
+ <td align="right" width="29%"><span id="value_25812365">1.414,82</span></td>
+ <td align="right" width="25%"><span id="performance_25812365" class="txtRed">-3,54</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_85141992" class="name" title="Global Desarrollo">Global Desar...</span></td>
+ <td align="right" width="29%"><span id="value_85141992">1.298,66</span></td>
+ <td align="right" width="25%"><span id="performance_85141992" class="txtRed">-5,05</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_89600349" class="name" title="Global Emergente">Global Emerg...</span></td>
+ <td align="right" width="29%"><span id="value_89600349">1.014,46</span></td>
+ <td align="right" width="25%"><span id="performance_89600349" class="txtRed">-2,70</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_25880981" class="name" title="A. Asia Emergente">A. Asia Emer...</span></td>
+ <td align="right" width="29%"><span id="value_25880981">971,91</span></td>
+ <td align="right" width="25%"><span id="performance_25880981" class="txtRed">-2,38</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_85141997" class="name" title="Gestion Activa">Gestion Activa</span></td>
+ <td align="right" width="29%"><span id="value_85141997">1.144,69</span></td>
+ <td align="right" width="25%"><span id="performance_85141997" class="txtRed">-1,74</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_121238543" class="name" title="Gestion Conservadora">Gestion Cons...</span></td>
+ <td align="right" width="29%"><span id="value_121238543">1.001,86</span></td>
+ <td align="right" width="25%"><span id="performance_121238543" class="txtRed">-0,66</span></td>
+ </tr>
+ </table>
+ </div><!--medCombo--> </div><!--combo-->
+ <div class="comboMar sepTop">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="46%">Tasa de Interés</td>
+ <td class="tdCent" width="29%">Tasa</td>
+ <td width="25%">Var</td>
+ </tr>
+ </table>
+</div><!--topCombo-->
+<div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_23132524" title="BCP 2 Años">BCP 2 Años</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:5.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D23132524-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">3,83 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:6.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D23132524-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+0,79 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_23132523" title="BCP 5 Años">BCP 5 Años</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:7.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D23132523-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">4,06 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:8.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D23132523-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+0,74 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_17121761" title="BCP 10 Años">BCP 10 Años</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:9.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D17121761-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">4,41 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:10.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17121761-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+0,46 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_17121758" title="BCU 5 Años">BCU 5 Años</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:11.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D17121758-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">1,07 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:12.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17121758-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+1,90 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_17121760" title="BCU 10 Años">BCU 10 Años</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:13.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D17121760-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">1,41 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:14.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17121760-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+0,71 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25881035" title="Tip 30-89">Tip 30-89</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:15.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D25881035-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">3,72 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:16.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25881035-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtSome">0,00 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25881036" title="Tab 1 Año">Tab 1 Año</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:17.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D25881036-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">5,58 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:18.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25881036-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtSome">0,00 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25812379" title="US Treasury 2">US Treasury 2</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:19.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D25812379-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">0,58 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:20.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25812379-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtSome">0,00 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25812380" title="US Treasury 5">US Treasury 5</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:21.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D25812380-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">0,97 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:22.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25812380-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+2,11 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25812381" title="US Treasury 10">US Treasury 10</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:23.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE.params:ID_NOTATION-3D25812381-26ID_QUALITY_PRICE-3D4.attr:PRICE.valueFilter:filterPrice">1,40 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:24.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25812381-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+1,45 </span>
+ </td>
+ </tr>
+ </table>
+</div><!--medCombo--> </div><!--combo-->
+ <div class="comboMar_b sepTop">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="46%">Mercados</td>
+ <td class="tdCent" width="29%">Puntos</td>
+ <td width="25%">%</td>
+ </tr>
+ </table>
+</div><!--topCombo-->
+<div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_17242077" style="display: none;">0</span>
+ <span id="market_open_17242077" style="display: none;">0</span>
+ <span class="name" id="name_17242077" title="IPSA, CHILE">
+ IPSA, CHILE </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_17242077" class="gris">
+ 3.997,71 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_17242077" class="gris">
+ +0,07 </span>
+ <input type="hidden" name="market_performancepct_raw_17242077" id="market_performancepct_raw_17242077" value="0.0688" />
+ </td>
+ </tr>
+
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_50947616" style="display: none;">0</span>
+ <span id="market_open_50947616" style="display: none;">0</span>
+ <span class="name" id="name_50947616" title="S&P 40 MILA">
+ S&P 40 MILA </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_50947616" class="gris">
+ 533,76 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_50947616" class="gris">
+ +0,40 </span>
+ <input type="hidden" name="market_performancepct_raw_50947616" id="market_performancepct_raw_50947616" value="0.3969" />
+ </td>
+ </tr>
+
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_1335248" style="display: none;">0</span>
+ <span id="market_open_1335248" style="display: none;">0</span>
+ <span class="name" id="name_1335248" title="BOVESPA, BRASIL">
+ BOVESPA, BRASIL </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_1335248" class="gris">
+ 52.014,66 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_1335248" class="gris">
+ +0,22 </span>
+ <input type="hidden" name="market_performancepct_raw_1335248" id="market_performancepct_raw_1335248" value="0.2174" />
+ </td>
+ </tr>
+
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_324977" style="display: none;">0</span>
+ <span id="market_open_324977" style="display: none;">0</span>
+ <span class="name" id="name_324977" title="DOW JONES, USA">
+ DOW JONES, USA </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_324977" class="gris">
+ 17.895,88 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_324977" class="gris">
+ -0,13 </span>
+ <input type="hidden" name="market_performancepct_raw_324977" id="market_performancepct_raw_324977" value="-0.1269" />
+ </td>
+ </tr>
+
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_325104" style="display: none;">0</span>
+ <span id="market_open_325104" style="display: none;">0</span>
+ <span class="name" id="name_325104" title="NASDAQ, USA">
+ NASDAQ, USA </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_325104" class="gris">
+ 4.459,58 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_325104" class="gris">
+ +0,33 </span>
+ <input type="hidden" name="market_performancepct_raw_325104" id="market_performancepct_raw_325104" value="0.3348" />
+ </td>
+ </tr>
+
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_4359526" style="display: none;">0</span>
+ <span id="market_open_4359526" style="display: none;">0</span>
+ <span class="name" id="name_4359526" title="S&P 500, USA">
+ S&P 500, USA </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_4359526" class="gris">
+ 2.097,90 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_4359526" class="gris">
+ -0,09 </span>
+ <input type="hidden" name="market_performancepct_raw_4359526" id="market_performancepct_raw_4359526" value="-0.0872" />
+ </td>
+ </tr>
+
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_60972397" style="display: none;">1</span>
+ <span id="market_open_60972397" style="display: none;">1</span>
+ <span class="name" id="name_60972397" title="NIKKEI 225, JPN">
+ NIKKEI 225, JPN </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_60972397" class="txtSome">
+ 15.391,20 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_60972397" class="txtGreen">
+ +0,75 </span>
+ <input type="hidden" name="market_performancepct_raw_60972397" id="market_performancepct_raw_60972397" value="0.7525" />
+ </td>
+ </tr>
+
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_10583965" style="display: none;">1</span>
+ <span id="market_open_10583965" style="display: none;">1</span>
+ <span class="name" id="name_10583965" title="IPC, MEXICO">
+ IPC, MEXICO </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_10583965" class="txtSome">
+ 45.394,37 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_10583965" class="txtGreen">
+ +0,20 </span>
+ <input type="hidden" name="market_performancepct_raw_10583965" id="market_performancepct_raw_10583965" value="0.1978" />
+ </td>
+ </tr>
+
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_1918069" style="display: none;">0</span>
+ <span id="market_open_1918069" style="display: none;">0</span>
+ <span class="name" id="name_1918069" title="FTSE 100, UK">
+ FTSE 100, UK </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_1918069" class="gris">
+ 6.533,79 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_1918069" class="gris">
+ +1,09 </span>
+ <input type="hidden" name="market_performancepct_raw_1918069" id="market_performancepct_raw_1918069" value="1.0861" />
+ </td>
+ </tr>
+
+
+ <tr>
+ <td align="left" width="46%">
+ <span id="market_tradeable_20735" style="display: none;">0</span>
+ <span id="market_open_20735" style="display: none;">0</span>
+ <span class="name" id="name_20735" title="DAX, ALEMANIA">
+ DAX, ALEMANIA </span>
+ </td>
+ <td align="right" width="29%">
+ <span id="market_price_20735" class="gris">
+ 9.418,78 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="market_performancepct_20735" class="gris">
+ +0,49 </span>
+ <input type="hidden" name="market_performancepct_raw_20735" id="market_performancepct_raw_20735" value="0.4856" />
+ </td>
+ </tr>
+
+ </table>
+
+</div><!--medCombo--> </div><!--combo-->
+ <div class="combo sepTop">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="46%">Más Transadas</td>
+ <td class="tdCent" width="29%">Precio</td>
+ <td width="25%">%</td>
+ </tr>
+ </table>
+</div><!--topCombo-->
+<div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" id="topflop">
+ <tbody>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_1" style="display: none;">17242026</span>
+ <span id="TOP_FLOP_performance_1" style="display: none;">-2.9</span>
+ <span id="TOP_FLOP_name_1" class="name " title="RIPLEY CORP SA" style="cursor:pointer;">RIPLEY</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_1" class="">409,13</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_1" class="txtRed ">-0,70</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_2" style="display: none;">17241892</span>
+ <span id="TOP_FLOP_performance_2" style="display: none;">5.5</span>
+ <span id="TOP_FLOP_name_2" class="name " title="VINA CONCHA Y TORO" style="cursor:pointer;">CONCHATORO</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_2" class="">1.055,40</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_2" class="txtGreen ">+0,52</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_3" style="display: none;">17241862</span>
+ <span id="TOP_FLOP_performance_3" style="display: none;">1.5</span>
+ <span id="TOP_FLOP_name_3" class="name " title="CENCOSUD SA COM NPV" style="cursor:pointer;">CENCOSUD</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_3" class="">1.898,40</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_3" class="txtGreen ">+0,08</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_4" style="display: none;">6946349</span>
+ <span id="TOP_FLOP_performance_4" style="display: none;">71.3</span>
+ <span id="TOP_FLOP_name_4" class="name " title="EMBOTELLADORA ANDINA SA PRF'B'NPV" style="cursor:pointer;">ANDINA-B</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_4" class="">2.399,10</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_4" class="txtGreen ">+3,06</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_5" style="display: none;">159872948</span>
+ <span id="TOP_FLOP_performance_5" style="display: none;">-0.2</span>
+ <span id="TOP_FLOP_name_5" class="name " title="ENERSIS CHILE SA COM NPV" style="cursor:pointer;">ENERSIS-CH</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_5" class="">76,74</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_5" class="txtRed ">-0,26</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_6" style="display: none;">17241947</span>
+ <span id="TOP_FLOP_performance_6" style="display: none;">-39</span>
+ <span id="TOP_FLOP_name_6" class="name " title="S.A.C.I FALABELLA COM NPV" style="cursor:pointer;">FALABELLA</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_6" class="">5.000,10</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_6" class="txtRed ">-0,77</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_7" style="display: none;">17241878</span>
+ <span id="TOP_FLOP_performance_7" style="display: none;">0.16</span>
+ <span id="TOP_FLOP_name_7" class="name " title="BANCO DE CHILE COM" style="cursor:pointer;">CHILE</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_7" class="">70,36</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_7" class="txtGreen ">+0,23</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_8" style="display: none;">17242057</span>
+ <span id="TOP_FLOP_performance_8" style="display: none;">276</span>
+ <span id="TOP_FLOP_name_8" class="name " title="SOCIEDAD QUIMICA Y MINERA DE CHILE PRF SER'B'" style="cursor:pointer;">SQM-B</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_8" class="">17.002,00</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_8" class="txtGreen ">+1,65</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_9" style="display: none;">17875039</span>
+ <span id="TOP_FLOP_performance_9" style="display: none;">-92.5</span>
+ <span id="TOP_FLOP_name_9" class="name " title="COMPANIA CERVECERIAS UNIDAS SA COM NPV" style="cursor:pointer;">CCU</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_9" class="">7.506,40</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_9" class="txtRed ">-1,22</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="45%">
+ <span id="TOP_FLOP_notation_10" style="display: none;">17241985</span>
+ <span id="TOP_FLOP_performance_10" style="display: none;">19.7</span>
+ <span id="TOP_FLOP_name_10" class="name " title="LATAM AIRLINES GROUP SA COM NPV" style="cursor:pointer;">LAN</span>
+ </td>
+ <td align="right" width="30%"><span id="TOP_FLOP_price_10" class="">4.370,30</span></td>
+ <td align="right" width="25%"><span id="TOP_FLOP_pct_10" class="txtGreen ">+0,45</span></td>
+ </tr>
+ </tbody>
+ </table>
+</div><!--medCombo--> </div><!--combo-->
+ </div><!--midBot-->
+
+ <div class="midBot">
+ <div class="comboMar">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="50%">Fondo Mutuos</td>
+ <td class="tdCent" width="27%">Precio</td>
+ <td width="23%">% 30 d</td>
+ </tr>
+ </table>
+ </div><!--topCombo-->
+ <div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25812367" title="Money Market">Money Market</span></td>
+ <td align="right" width="29%"><span id="value_25812367">1.686,20</span></td>
+ <td align="right" width="25%"><span id="performance_25812367" class="txtGreen">+0,26</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_63751132" title="Renta a Plazo">Renta a Plazo</span></td>
+ <td align="right" width="29%"><span id="value_63751132">1.217,40</span></td>
+ <td align="right" width="25%"><span id="performance_63751132" class="txtGreen">+0,28</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25812372" title="Renta Nominal">Renta Nominal</span></td>
+ <td align="right" width="29%"><span id="value_25812372">1.719,96</span></td>
+ <td align="right" width="25%"><span id="performance_25812372" class="txtGreen">+0,56</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_53121511" title="Renta Local">Renta Local</span></td>
+ <td align="right" width="29%"><span id="value_53121511">1.248,18</span></td>
+ <td align="right" width="25%"><span id="performance_53121511" class="txtGreen">+0,39</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25812368" title="Renta Chilena">Renta Chilena</span></td>
+ <td align="right" width="29%"><span id="value_25812368">2.001,22</span></td>
+ <td align="right" width="25%"><span id="performance_25812368" class="txtGreen">+0,85</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_76245856" title="Renta Activa">Renta Activa</span></td>
+ <td align="right" width="29%"><span id="value_76245856">1.215,90</span></td>
+ <td align="right" width="25%"><span id="performance_76245856" class="txtGreen">+0,69</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25812371" title="Money Market Dólar">Money Market...</span></td>
+ <td align="right" width="29%"><span id="value_25812371">1,90</span></td>
+ <td align="right" width="25%"><span id="performance_25812371" class="txtGreen">+0,03</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25812369" title="Renta Lat. Dólar">Renta Lat. D...</span></td>
+ <td align="right" width="29%"><span id="value_25812369">2,03</span></td>
+ <td align="right" width="25%"><span id="performance_25812369" class="txtGreen">+0,48</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_136925548" title="Renta Internacional (USD)">Renta Intern...</span></td>
+ <td align="right" width="29%"><span id="value_136925548">9,97</span></td>
+ <td align="right" width="25%"><span id="performance_136925548" class="txtGreen">+0,92</span></td>
+ </tr>
+ </table>
+ </div><!--medCombo--> </div><!--combo-->
+ <div class="comboMar">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="46%">F. de Inversión</td>
+ <td class="tdCent" width="29%">Precio</td>
+ <td width="25%">% 30 d</td>
+ </tr>
+ </table>
+</div><!--topCombo-->
+<div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td align="left" width="46%"><span id="name_38239541" class="name" title="Deuda Latinoamericana">Deuda Latino...</span></td>
+ <td align="right" width="29%"><span id="value_38239541">27.320,26</span></td>
+ <td align="right" width="25%"><span id="performance_38239541" class="txtRed">-0,41</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_38239479" class="name" title="Small Cap Chile">Small Cap Chile</span></td>
+ <td align="right" width="29%"><span id="value_38239479">67.916,88</span></td>
+ <td align="right" width="25%"><span id="performance_38239479" class="txtGreen">+1,33</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_40239479" class="name" title="Deuda Corporativa Chile">Deuda Corpor...</span></td>
+ <td align="right" width="29%"><span id="value_40239479">30.704,07</span></td>
+ <td align="right" width="25%"><span id="performance_40239479" class="txtGreen">+0,87</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_62395271" class="name" title="High Yield Latin America">High Yield L...</span></td>
+ <td align="right" width="29%"><span id="value_62395271">0,98</span></td>
+ <td align="right" width="25%"><span id="performance_62395271" class="txtGreen">+0,46</span></td>
+ </tr>
+ </table>
+</div><!--medCombo--> </div><!--combo-->
+ <div class="comboMar_b">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="46%">Monedas</td>
+ <td class="tdCent" width="29%">Puntos</td>
+ <td width="25%">%</td>
+ </tr>
+ </table>
+</div><!--topCombo-->
+<div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td align="left" width="46%"><span id="name_17121756" class="name" title="DOLAR SPOT">DOLAR SPOT</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:25.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17121756-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">
+ 666,0500 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:26.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17121756-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">
+ +0,57 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_1390634" class="name" title="EURO">EURO</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:27.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1390634-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">
+ 1,1075 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:28.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1390634-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">
+ +0,10 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_17121762" class="name" title="UF">UF</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:29.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17121762-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">
+ 26.064,2200 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:30.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17121762-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">
+ +0,01 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_17121757" class="name" title="DOLAR OBS.">DOLAR OBS.</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:31.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17121757-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">
+ 664,5100 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:32.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D17121757-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">
+ +0,49 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_994752" class="name" title="REAL BRASILEÑO">REAL BRASILEÑO</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:33.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D994752-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">
+ 3,3609 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:34.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D994752-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">
+ +0,01 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_1363989" class="name" title="YEN JAPONES">YEN JAPONES</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:35.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1363989-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">
+ 100,8480 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:36.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1363989-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">
+ +0,09 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_1305587" class="name" title="LIBRA ESTERLINA">LIBRA ESTERLINA</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:37.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1305587-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">
+ 1,2945 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:38.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1305587-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">
+ +0,27 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_833622" class="name" title="DOLAR AUS.">DOLAR AUS.</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:39.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D833622-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">
+ 0,7508 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:40.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D833622-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">
+ +0,20 </span>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span id="name_1343320" class="name" title="YUAN CHINO">YUAN CHINO</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:41.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1343320-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">
+ 6,6871 </span>
+ </td>
+ <td align="right" width="25%">
+ <span id="domhandler:42.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1343320-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">
+ +0,12 </span>
+ </td>
+ </tr>
+ </table>
+ </div><!--medCombo--> </div><!--combo-->
+ <div class="combo">
+ <div class="topCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td class="tdDer" width="46%">Commodities</td>
+ <td class="tdCent" width="29%">Precio</td>
+ <td width="25%">%</td>
+ </tr>
+ </table>
+</div><!--topCombo-->
+<div class="medCombo">
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_1022799" title="Cobre a Futuro">Cobre a Futuro</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:43.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1022799-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">2,12 </span>
+ </td>
+ <td align="right" width="25%"><span id="domhandler:44.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1022799-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtRed">-0,19</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25881002" title="Cobre a Cash">Cobre a Cash</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:45.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25881002-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">2,14 </span>
+ </td>
+ <td align="right" width="25%"><span id="domhandler:46.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25881002-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+0,40</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_28134860" title="Crude OIL WTI">Crude OIL WTI</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:47.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D28134860-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">45,40 </span>
+ </td>
+ <td align="right" width="25%"><span id="domhandler:48.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D28134860-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+0,49</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_1326189" title="Oro">Oro</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:49.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1326189-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">1.355,00 </span>
+ </td>
+ <td align="right" width="25%"><span id="domhandler:50.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1326189-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtRed">-0,43</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_1288094" title="Plata">Plata</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:51.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1288094-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">19,67 </span>
+ </td>
+ <td align="right" width="25%"><span id="domhandler:52.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D1288094-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtRed">-0,36</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25815104" title="Celulosa NBSK">Celulosa NBSK</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:53.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25815104-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">809,79 </span>
+ </td>
+ <td align="right" width="25%"><span id="domhandler:54.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25815104-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtSome">0,00</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25881003" title="Gas Natural">Gas Natural</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:55.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25881003-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">2,83 </span>
+ </td>
+ <td align="right" width="25%"><span id="domhandler:56.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25881003-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtGreen">+3,06</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25815105" title="Harina de Pesc.">Harina de Pesc.</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:57.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25815105-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">1.700,00 </span>
+ </td>
+ <td align="right" width="25%"><span id="domhandler:58.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25815105-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtSome">0,00</span></td>
+ </tr>
+ <tr>
+ <td align="left" width="46%"><span class="name" id="name_25881004" title="Azucar">Azucar</span></td>
+ <td align="right" width="29%">
+ <span id="domhandler:59.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25881004-26ID_QUALITY_PRICE-3D4.attr:PRICE.comp:PREV.eq:txtSome.gt:txtSome.lt:txtSome.resetAttr:PRICE.resetComp:ZERO.resetEq:txtSome.resetGt:txtSome.resetLt:txtSome">563,50 </span>
+ </td>
+ <td align="right" width="25%"><span id="domhandler:60.mdgObj:-2Fprices-2Fquote-3FVERSION-3D2.consumer:VALUE-2CCLASS.params:ID_NOTATION-3D25881004-26ID_QUALITY_PRICE-3D4.attr:PERFORMANCE_PCT.comp:PREV.eq:txtBackYel.gt:txtBackGreen.lt:txtBackRed.resetAttr:PERFORMANCE_PCT.resetComp:ZERO.resetEq:txtSome.resetGt:txtGreen.resetLt:txtRed.valueFilter:FilterPerformancePCT" class="txtRed">-1,43</span></td>
+ </tr>
+ </table>
+</div><!--medCombo--> </div><!--combo-->
+ </div><!--midBot-->
+
+ <div class="clear"></div><!--clear-->
+ <div class="disc"><span style="font-weight:bolder;">Información de acciones en tiempo real. Monedas y commodities con desfase de 15 minutos.</span> Infórmese de las características esenciales de la inversión en estos fondos mutuos, las que se encuentran contenidas en sus reglamentos internos y contratos de suscripción de cuotas. La rentabilidad o ganancia obtenida en el pasado por estos fondos, no garantiza que se repita en el futuro. Los valores de los fondos mutuos son variables. Rentabilidad actualizada al último día hábil vigente. Fuente: BTG Pactual Chile, Interactive Data, BCS. Sitio desarrollado utilizando la tecnología y datos de <a href="http://www.interactivedata-ms.com/en/index.html">Interactive Data</a>. <strong><a href="http://www.btgpactual.mdgms.com/pdf/aviso_legal_btgpactual_chile.pdf">Aviso Legal</a></strong>.</div>
+</div><!--wrapper-->
+<div class="alerta" style="display:none">
+ <div class="bodAlerta">
+ <div class="topAlerta">Información</div>
+ <div class="infoAlerta">Información de acciones en tiempo real.<br />
+ Monedas y commodities con desfase de 15 minutos.</div>
+ <div class="btnCancelar"> </div>
+ </div>
+</div><!--alerta-->
+<div id="debug"></div>
+<script type="text/javascript">
+
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-24883966-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+
+</script>
+
+</body>
+</html>
diff --git a/old/test/4648/index.html b/old/test/4648/index.html new file mode 100644 index 0000000..d4a3e5e --- /dev/null +++ b/old/test/4648/index.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/4648</title> + </head> + <body> +<h1>Index of /test/4648</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=D.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="4ta.html">4ta.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="BTG.html">BTG.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">112K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.html">t1.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.n.html">t1.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.html">t2.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.ok.html">t2.n.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.sm.html">t2.n.sm.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.html">t3.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.ok.html">t3.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test-suite.v1.txt">test-suite.v1.txt</a></td><td align="right">2016-08-04 16:08 </td><td align="right">4.2K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/4648/index.html?C=D;O=A.html b/old/test/4648/index.html?C=D;O=A.html new file mode 100644 index 0000000..2c4713e --- /dev/null +++ b/old/test/4648/index.html?C=D;O=A.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/4648</title> + </head> + <body> +<h1>Index of /test/4648</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=D.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="4ta.html">4ta.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="BTG.html">BTG.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">112K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.html">t1.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.n.html">t1.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.html">t2.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.ok.html">t2.n.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.sm.html">t2.n.sm.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.html">t3.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.ok.html">t3.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test-suite.v1.txt">test-suite.v1.txt</a></td><td align="right">2016-08-04 16:08 </td><td align="right">4.2K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/4648/index.html?C=D;O=D.html b/old/test/4648/index.html?C=D;O=D.html new file mode 100644 index 0000000..8dfb86e --- /dev/null +++ b/old/test/4648/index.html?C=D;O=D.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/4648</title> + </head> + <body> +<h1>Index of /test/4648</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test-suite.v1.txt">test-suite.v1.txt</a></td><td align="right">2016-08-04 16:08 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.ok.html">t3.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.html">t3.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.sm.html">t2.n.sm.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.ok.html">t2.n.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.html">t2.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.n.html">t1.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.html">t1.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="BTG.html">BTG.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">112K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="4ta.html">4ta.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right"> 19K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/4648/index.html?C=M;O=A.html b/old/test/4648/index.html?C=M;O=A.html new file mode 100644 index 0000000..04011b6 --- /dev/null +++ b/old/test/4648/index.html?C=M;O=A.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/4648</title> + </head> + <body> +<h1>Index of /test/4648</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=D.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="4ta.html">4ta.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="BTG.html">BTG.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">112K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.html">t1.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.n.html">t1.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.html">t2.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.ok.html">t2.n.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.sm.html">t2.n.sm.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.html">t3.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.ok.html">t3.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test-suite.v1.txt">test-suite.v1.txt</a></td><td align="right">2016-08-04 16:08 </td><td align="right">4.2K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/4648/index.html?C=M;O=D.html b/old/test/4648/index.html?C=M;O=D.html new file mode 100644 index 0000000..8dfb86e --- /dev/null +++ b/old/test/4648/index.html?C=M;O=D.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/4648</title> + </head> + <body> +<h1>Index of /test/4648</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test-suite.v1.txt">test-suite.v1.txt</a></td><td align="right">2016-08-04 16:08 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.ok.html">t3.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.html">t3.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.sm.html">t2.n.sm.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.ok.html">t2.n.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.html">t2.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.n.html">t1.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.html">t1.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="BTG.html">BTG.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">112K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="4ta.html">4ta.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right"> 19K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/4648/index.html?C=N;O=A.html b/old/test/4648/index.html?C=N;O=A.html new file mode 100644 index 0000000..d4a3e5e --- /dev/null +++ b/old/test/4648/index.html?C=N;O=A.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/4648</title> + </head> + <body> +<h1>Index of /test/4648</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=D.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="4ta.html">4ta.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="BTG.html">BTG.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">112K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.html">t1.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.n.html">t1.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.html">t2.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.ok.html">t2.n.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.sm.html">t2.n.sm.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.html">t3.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.ok.html">t3.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test-suite.v1.txt">test-suite.v1.txt</a></td><td align="right">2016-08-04 16:08 </td><td align="right">4.2K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/4648/index.html?C=N;O=D.html b/old/test/4648/index.html?C=N;O=D.html new file mode 100644 index 0000000..8dfb86e --- /dev/null +++ b/old/test/4648/index.html?C=N;O=D.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/4648</title> + </head> + <body> +<h1>Index of /test/4648</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test-suite.v1.txt">test-suite.v1.txt</a></td><td align="right">2016-08-04 16:08 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.ok.html">t3.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.html">t3.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.sm.html">t2.n.sm.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.ok.html">t2.n.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.html">t2.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.n.html">t1.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.html">t1.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="BTG.html">BTG.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">112K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="4ta.html">4ta.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right"> 19K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/4648/index.html?C=S;O=A.html b/old/test/4648/index.html?C=S;O=A.html new file mode 100644 index 0000000..c3dc894 --- /dev/null +++ b/old/test/4648/index.html?C=S;O=A.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/4648</title> + </head> + <body> +<h1>Index of /test/4648</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=D.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.html">t3.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.ok.html">t3.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.html">t1.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.n.html">t1.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.html">t2.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.sm.html">t2.n.sm.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.ok.html">t2.n.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test-suite.v1.txt">test-suite.v1.txt</a></td><td align="right">2016-08-04 16:08 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="4ta.html">4ta.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="BTG.html">BTG.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">112K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/4648/index.html?C=S;O=D.html b/old/test/4648/index.html?C=S;O=D.html new file mode 100644 index 0000000..1b8f184 --- /dev/null +++ b/old/test/4648/index.html?C=S;O=D.html @@ -0,0 +1,24 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/4648</title> + </head> + <body> +<h1>Index of /test/4648</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="BTG.html">BTG.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">112K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="4ta.html">4ta.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test-suite.v1.txt">test-suite.v1.txt</a></td><td align="right">2016-08-04 16:08 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.ok.html">t2.n.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.sm.html">t2.n.sm.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t2.n.html">t2.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.n.html">t1.n.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t1.html">t1.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.ok.html">t3.ok.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t3.html">t3.html</a></td><td align="right">2016-07-17 04:47 </td><td align="right">1.3K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/4648/t1.html b/old/test/4648/t1.html new file mode 100644 index 0000000..d99fcff --- /dev/null +++ b/old/test/4648/t1.html @@ -0,0 +1,20 @@ +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> +<div style="float:left"><div></div><div style="display:table"><span></div></div> diff --git a/old/test/4648/t1.n.html b/old/test/4648/t1.n.html new file mode 100644 index 0000000..b7edeb8 --- /dev/null +++ b/old/test/4648/t1.n.html @@ -0,0 +1,20 @@ +<div style="float:left"><div></div><div style="display:table"><span>1</div></div> +<div style="float:left"><div></div><div style="display:table"><span>2</div></div> +<div style="float:left"><div></div><div style="display:table"><span>3</div></div> +<div style="float:left"><div></div><div style="display:table"><span>4</div></div> +<div style="float:left"><div></div><div style="display:table"><span>5</div></div> +<div style="float:left"><div></div><div style="display:table"><span>6</div></div> +<div style="float:left"><div></div><div style="display:table"><span>7</div></div> +<div style="float:left"><div></div><div style="display:table"><span>8</div></div> +<div style="float:left"><div></div><div style="display:table"><span>9</div></div> +<div style="float:left"><div></div><div style="display:table"><span>0</div></div> +<div style="float:left"><div></div><div style="display:table"><span>1</div></div> +<div style="float:left"><div></div><div style="display:table"><span>2</div></div> +<div style="float:left"><div></div><div style="display:table"><span>3</div></div> +<div style="float:left"><div></div><div style="display:table"><span>4</div></div> +<div style="float:left"><div></div><div style="display:table"><span>5</div></div> +<div style="float:left"><div></div><div style="display:table"><span>6</div></div> +<div style="float:left"><div></div><div style="display:table"><span>7</div></div> +<div style="float:left"><div></div><div style="display:table"><span>8</div></div> +<div style="float:left"><div></div><div style="display:table"><span>9</div></div> +<div style="float:left"><div></div><div style="display:table"><span>0</div></div> diff --git a/old/test/4648/t2.n.html b/old/test/4648/t2.n.html new file mode 100644 index 0000000..0919da4 --- /dev/null +++ b/old/test/4648/t2.n.html @@ -0,0 +1,21 @@ +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</div></div> + diff --git a/old/test/4648/t2.n.ok.html b/old/test/4648/t2.n.ok.html new file mode 100644 index 0000000..43ea767 --- /dev/null +++ b/old/test/4648/t2.n.ok.html @@ -0,0 +1,20 @@ +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<span>4</span></div></div> diff --git a/old/test/4648/t2.n.sm.html b/old/test/4648/t2.n.sm.html new file mode 100644 index 0000000..98779d3 --- /dev/null +++ b/old/test/4648/t2.n.sm.html @@ -0,0 +1,21 @@ +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> +<div style="float:left">1<div>2</div><div style="display:table">3<small>4</div></div> + diff --git a/old/test/4648/t3.html b/old/test/4648/t3.html new file mode 100644 index 0000000..53dd445 --- /dev/null +++ b/old/test/4648/t3.html @@ -0,0 +1,20 @@ +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> +<div style="float:left"><div></div><div style="display:table"></div> diff --git a/old/test/4648/t3.ok.html b/old/test/4648/t3.ok.html new file mode 100644 index 0000000..2f43d5a --- /dev/null +++ b/old/test/4648/t3.ok.html @@ -0,0 +1,21 @@ +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> +<div style="float:left"><div></div><div style="display:table"></div></div> + diff --git a/old/test/4648/test-suite.v1.txt b/old/test/4648/test-suite.v1.txt new file mode 100644 index 0000000..5d5cc12 --- /dev/null +++ b/old/test/4648/test-suite.v1.txt @@ -0,0 +1,91 @@ +Legend: d4646 = dillo version #4646 in Mercurial repository. + x a = Test failed, with code a = Problems 1, 9 and 3. +Custom test pages at: http://www.dillo.org/test/4648/ + + + Results Table +.-------.--------.------.-----------.-----------------------.-----.-----. +| | BTG | test | pravda.ru | 4ta.html | VT | PV | +| | render | t.* | #1 | #2 | Girl | footb. | horos.| | | +|-------|--------|------|-----------|-----------------------|-----|-----| +|d4657 | ok | ok | ok | ok | ok | ok | ok | ok | ok |* +|d4652 | ok | ok | x a | x ic| ok | x l | x d | x n | ok | +|d4651 | ok | ok | x a | x ic| ok | x l | x d | x n | ok | +|d4648 | ok | ok | ok | ok | ok | ok | ok | ok | ok |* +|d4647 | ok | ok | ok | x g | ok | ok | ok | ok | ok | +|d4646 | ok | ok | x a | x i | ok | x j | x d | x n | ok | +|d4645 | ok | ok | x m | x i | ok | x j | x d | ok | ok | +|d4644 | ok | ok | x a | x b | ok | x j | x d | ok | x k | +|incr | ok | ok | x a | x b | x c | ok | x d | x i | x k | +|d4587 | ok | x e | ok | ok | ok | ok | ok | x i | x k | +|d4584 | ok | x h | ok | ok | ok | ok | ok | x i | x k | +'-----------------------------------'-----------------------------'-----' + + ___________________________________________________________ +/ a | b | c | d | e | f | g | h | i | j | k \ incr = d4594 +| 1 9 3 | 1 9 4 | 9 | 1 5 | 6 | 7 | 4 | 12 | 13 | 8 9 | 10 | 47 = prune patch +'------------------------------------------------------'----' 45 = idle patch +| l: 2 9| m: 4 2| n: 5 9 | 46 = words patch + 48 = viewportchg +Problems: +1: overwrites text with images. +2: crops images (aspect ratio). +3: different layout. +4: overwrites text with float. +5: overwrites text with text. +6: CPU HOG with: t2.n, t2.n.sm +7: Missing page sections (sometimes works for the same page). +8: Small images cut in two sometimes ("ESP", "CRO", ...) +9: Wrong aspect ratio for images (text line height) +10: Page drawn with offset (but browser thinks other section is on screen). +11: CPU HOG. +12: CPU HOG with: t1, t1n, t2.n, t2.n.sm, t3. +13: overwrites text and images with text and images. + +Goods: +*: works for the whole t.* suite. + +Testing (all with background images disabled): + +BTG: + 1.- Bck/Fwd several times (first at normal then maximized). + 2.- resize from max to normal several times. + +pravda #1: + 1. Load [1] at normal size, wait most images to load, check images and check + them not to overlap text, go Bck/Fwd, check again. + 2. Maximize window, check images don't overlap text, check the page layout + to have three main columns (the upper part). Go Bck/Fwd, check again. + +pravda #2: + 1. Load [1] at normal size, wait most images to load, then load [2], + press page down, check the "print version" float doesn't overlap text, + or images (they may stack), check the two images inside it have the + same size and ratio, maximize, return to normal, check the float again. + +4ta: +1. Run dillo, disable images, load 4ta.html, click Girl img, go Bck/Fwd, + check img, exit dillo. +2. Run dillo, disable images, load 4ta.html, click football img, go Bck/Fwd, + check img, click dep.png img, check images, go Bck/Fwd, check images. +3. Run dillo, disable images, load 4ta.html, click tauro img, check horoscope + text, go Bck/Fwd, check h. text, click aries img, check h. text, go Bck/Fwd, + check h. text, exit dillo. + +VT: + 1. Load [3] at normal size, wait for most images to load, go Bck/Fwd, check + images and text not to override each other. + +PV: + 1. Load [5] at normal size, wait for most images to load, search for "re-re" + with Find Text, press page down (you'll see an image), go Bck/Fwd, check + the image is there. If not, you can place the cursor where the image was, + if you get a hand cursor, Dillo thinks it is there. Wait for the tooltip + and drag it a bit downwards to the right, Dillo will repaint from the image + data. + +[1] http://tinyurl.com/j2yavxk +[2] http://tinyurl.com/gqso9eu +[3] http://tinyurl.com/msyl7x +[4] http://tinyurl.com/grd6yg4 +[5] http://tinyurl.com/huvf6pn diff --git a/old/test/DragonFly.html.bz2 b/old/test/DragonFly.html.bz2 Binary files differnew file mode 100644 index 0000000..5b7149d --- /dev/null +++ b/old/test/DragonFly.html.bz2 diff --git a/old/test/HB.d2837.png b/old/test/HB.d2837.png Binary files differnew file mode 100644 index 0000000..37a17f8 --- /dev/null +++ b/old/test/HB.d2837.png diff --git a/old/test/HB.d2861.png b/old/test/HB.d2861.png Binary files differnew file mode 100644 index 0000000..d684f7c --- /dev/null +++ b/old/test/HB.d2861.png diff --git a/old/test/adblocker.patch b/old/test/adblocker.patch new file mode 100644 index 0000000..ca9ca0b --- /dev/null +++ b/old/test/adblocker.patch @@ -0,0 +1,403 @@ +diff -r 6c4735564ddc src/Makefile.am +--- a/src/Makefile.am Sun Dec 21 06:50:09 2008 +0000 ++++ b/src/Makefile.am Sat Dec 27 19:02:06 2008 +0000 +@@ -28,6 +28,8 @@ dillo_SOURCES = \ + bw.c \ + cookies.c \ + cookies.h \ ++ adblock.c \ ++ adblock.h \ + auth.c \ + auth.h \ + colors.c \ +diff -r 6c4735564ddc src/adblock.c +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/src/adblock.c Sat Dec 27 19:02:06 2008 +0000 +@@ -0,0 +1,294 @@ ++/* ++ * An ad blocker thing following the Adblock Plus syntax found at ++ * http://adblockplus.org/en/filters as it was in December 2008. ++ * ++ * This is not very tidy yet since I don't think it's in any danger of ++ * getting into the real tree without being changed into a dpi. ++ * Hence the conversational tone and everything... ++ * ++ * - Comment lines begin with '!'. ++ * - A "basic" rule has an implicit wildcard at each end. i.e., it's ++ * just looking for a substring. A '|' character before or after ++ * means turn off the wildcard behavior here. ++ * - A basic rule can contain wildcards. They may just mean '*'. ++ * I don't know whether '?' is supposed to be special. ++ * - I think they regard any rule of the form /something/ as a regexp rule. ++ * ++ * - Now you prefix your rule with "@@" if it's an "exception rule" that ++ * _prevents_ blocking. ++ * - And you can append '$' followed by comma-separated options. ++ * Mostly these specify what types of URLs should be filtered, ++ * i.e., image URL, script URL, etc. If the type is prefixed by a '~', ++ * it means "_don't_ filter this type". ++ * There is also an option for case-sensitive matching. ++ * ++ * LIMITATIONS ++ * 1. Is probably as slow as molasses. ++ * 2. Treats all non-regexp rules as case-sensitive. ++ * GNU's fnmatch does have a FNM_CASEFOLD, though... ++ * Just translating everything into regexps might be easiest in ++ * a way, but I doubt it would help the presumably-slow speed. ++ * 3. Doesn't handle element hiding. ++ */ ++ ++#include <ctype.h> ++ ++#include <fnmatch.h> ++#include <regex.h> ++ ++#include "msg.h" ++#include "adblock.h" ++ ++ ++/* Filename in ~/.dillo/ . A preference to point directly to the file used by ++ * Adblock Plus would be nice. ++ */ ++#define ADBLOCK_FILENAME "adblock" ++ ++ ++typedef enum { ++ ADBLOCK_ALLOW = 1 << 0, ++ ADBLOCK_REGEXP = 1 << 1, ++ ADBLOCK_MATCH_CASE = 1 << 2, ++} AdblockFlag_t; ++ ++typedef struct { ++ const char *name; ++ AdblockType_t type; ++} AdblockOption_t; ++ ++typedef struct { ++ char *str; ++ int flags; ++ int types; ++} AdblockRule_t; ++ ++/* ++ * Types that don't apply to Dillo aren't included. I'm thinking that ++ * ADBLOCK_DOCUMENT could be used for HTTP redirection... ++ */ ++const AdblockOption_t Options[] = { ++ {"image", ADBLOCK_IMAGE}, ++ {"stylesheet", ADBLOCK_STYLESHEET}, ++ {"document", ADBLOCK_DOCUMENT}, ++}; ++ ++ ++static Dlist *adblock_rules; ++ ++ ++/* ++ * Parse filter options. A typical options string might look ++ * something like "match-case, image, stylesheet" ++ * ++ * Return nonzero iff this rule is meaningful for Dillo. ++ * There's no sense in keeping a rule around that's only for ++ * XBL or DTD or whatever... ++ */ ++static int Adblock_parse_filter_options(const char *options, ++ AdblockRule_t *rule) ++{ ++ const int listlen = sizeof(Options) / sizeof(AdblockOption_t); ++ bool_t inverse = FALSE, types_seen = FALSE; ++ const char *ptr; ++ int i; ++ ++ ptr = options; ++ ++ while (*ptr) { ++ while (isspace(*ptr)) ++ ptr++; ++ if (!dStrncasecmp(ptr, "match-case", 10)) { ++ rule->flags |= ADBLOCK_MATCH_CASE; ++ ptr += 10; ++ } else { ++ types_seen = TRUE; ++ ++ if (*ptr == '~') { ++ if (!inverse) { ++ /* Initialize. First inverse seen (unless the user is mixing ++ * inverse and 'regular' type specifications, which seems ++ * inadvisable). ++ */ ++ rule->types = ADBLOCK_ALL; ++ } ++ inverse = TRUE; ++ ptr++; ++ } else { ++ inverse = FALSE; ++ } ++ for (i = 0; i < listlen; i++) { ++ const char *name = Options[i].name; ++ int len = strlen(name); ++ if (!dStrncasecmp(ptr, name, len) && ++ ptr[len] != '-' && !isalpha(ptr[len])) { ++ /* match */ ++ if (inverse) { ++ rule->types &= ~Options[i].type; ++ } else { ++ rule->types |= Options[i].type; ++ } ++ ptr += len; ++ break; ++ } ++ } ++ } ++ while (*ptr && *ptr != ',') ++ ptr++; ++ if (*ptr) ++ ptr++; ++ } ++ if (types_seen == FALSE) { ++ rule->types = ADBLOCK_ALL; ++ } ++ return (rule->types != 0); ++} ++ ++/* ++ * Parse one line. ++ * ++ * A rule "with everything" might look something like ++ * "@@|text|$~object,match-case". ++ * There are also regex rules, "/text/" , which serve to add complexity. ++ */ ++static AdblockRule_t *Adblock_parse_line(char *line) ++{ ++ enum {BASIC_NO_WILDCARD, BASIC_WILDCARD, REGEXP_POSSIBLE}; ++ int len, start; ++ const char *ptr; ++ Dstr *dstr; ++ AdblockRule_t *rule; ++ bool_t keep = TRUE; ++ ++ dStrstrip(line); ++ ptr = line; ++ if (*ptr == '\0' || *ptr == '!') { ++ /* empty or comment */ ++ return NULL; ++ } ++ rule = dNew0(AdblockRule_t, 1); ++ ++ if (*ptr == '@' && ptr[1] == '@') { ++ rule->flags = ADBLOCK_ALLOW; ++ ptr += 2; ++ } ++ if (*ptr == '/') { ++ start = REGEXP_POSSIBLE; ++ }else if (*ptr == '|') { ++ start = BASIC_NO_WILDCARD; ++ ptr++; ++ } else { ++ start = BASIC_WILDCARD; ++ } ++ len = strcspn(ptr, "|$"); ++ dstr = dStr_new(""); ++ ++ if (start == REGEXP_POSSIBLE && ptr[len-1] == '/' && ptr[len] != '|') { ++ /* /text/, and regexec() doesn't want the '/'s */ ++ rule->flags |= ADBLOCK_REGEXP; ++ ptr++; ++ len -= 2; ++ } else if (start != BASIC_NO_WILDCARD) { ++ /* wildcard at beginning */ ++ dStr_append_c(dstr, '*'); ++ } ++ if (len > 0) { ++ dStr_append_l(dstr, ptr, len); ++ ptr += len; ++ } ++ if (*ptr == '|' || (rule->flags & ADBLOCK_REGEXP)) { ++ ptr++; ++ } else { ++ /* wildcard at end */ ++ dStr_append_c(dstr, '*'); ++ } ++ rule->str = dstr->str; ++ dStr_free(dstr, 0); ++ ++ if (*ptr != '$') { ++ rule->types = ADBLOCK_ALL; ++ } else { ++ ptr++; ++ keep = Adblock_parse_filter_options(ptr, rule); ++ } ++ MSG("%s\n%s\nimg%d sty%d doc%d allow%d matchcase%d%s\n\n", line, rule->str, ++ rule->types & ADBLOCK_IMAGE, rule->types & ADBLOCK_STYLESHEET, ++ rule->types & ADBLOCK_DOCUMENT, rule->flags & ADBLOCK_ALLOW, ++ rule->flags & ADBLOCK_MATCH_CASE, (keep ? "" : "\nDISCARD!")); ++ ++ if (!keep) { ++ dFree(rule); ++ rule = NULL; ++ } ++ return rule; ++} ++ ++/* ++ * Initialize, reading rules from file. ++ */ ++void a_Adblock_init() ++{ ++ FILE *F_in; ++ char *filename, *line; ++ ++ adblock_rules = dList_new(1); ++ filename = dStrconcat(dGethomedir(), "/.dillo/", ADBLOCK_FILENAME, NULL); ++ ++ if ((F_in = fopen(filename, "r"))) { ++ while ((line = dGetline(F_in)) != NULL) { ++ AdblockRule_t *rule; ++ ++ if ((rule = Adblock_parse_line(line))) ++ dList_append(adblock_rules, rule); ++ dFree(line); ++ } ++ fclose(F_in); ++ } else { ++ MSG("adblock: Can't open rules file %s\n", filename); ++ } ++ dFree(filename); ++} ++ ++/* ++ * Has this URL been blocked by the user? ++ */ ++bool_t a_Adblock_permitted(const DilloUrl *url, AdblockType_t t) ++{ ++ int i; ++ AdblockRule_t *rule; ++ bool_t allow = TRUE, match = FALSE; ++ regex_t buffer; ++ ++ for (i = 0; (rule = dList_nth_data(adblock_rules, i)); i++) { ++ if (rule->types & t) { ++ if (rule->flags & ADBLOCK_REGEXP) { ++ int cflags = REG_NOSUB; ++ if (!(rule->flags & ADBLOCK_MATCH_CASE)) ++ cflags |= REG_ICASE; ++ if (regcomp(&buffer, rule->str, cflags)) { ++ MSG("regcomp didn't like rule string %s\n", rule->str); ++ /* Which might not mean that there's anything _wrong_ with ++ * the string necessarily. We'll see... ++ */ ++ } else { ++ match = (regexec(&buffer, URL_STR(url), 0, NULL, ++ 0) == 0); ++ regfree(&buffer); ++ } ++ } else { ++ match = (fnmatch(rule->str, URL_STR(url), 0) == 0); ++ } ++ if (match) { ++ if (rule->flags & ADBLOCK_ALLOW) { ++ /* overrides any rule to block */ ++ allow = TRUE; ++ break; ++ } ++ allow = FALSE; ++ } ++ } ++ } ++ _MSG("%s %s\n", allow ? "ACCEPTED" : "BLOCKED", URL_STR(url)); ++ return allow; ++} ++ +diff -r 6c4735564ddc src/adblock.h +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/src/adblock.h Sat Dec 27 19:02:06 2008 +0000 +@@ -0,0 +1,38 @@ ++#ifndef __ADBLOCK_H__ ++#define __ADBLOCK_H__ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ ++ ++#include "url.h" ++ ++typedef enum { ++ ADBLOCK_NONE = 0, ++ ADBLOCK_IMAGE = 1 << 0, ++ ADBLOCK_STYLESHEET = 1 << 1, ++ ADBLOCK_DOCUMENT = 1 << 2, ++ ADBLOCK_ALL = ADBLOCK_DOCUMENT | (ADBLOCK_DOCUMENT - 1), ++#if 0 ++ /* Not needed yet */ ++ ADBLOCK_SCRIPT = 1 << 3, ++ ADBLOCK_BACKGROUND = 1 << 4, ++ ADBLOCK_OBJECT = 1 << 5, ++ ADBLOCK_XBL = 1 << 6, ++ ADBLOCK_PING = 1 << 7, ++ ADBLOCK_XMLHTTPREQUEST = 1 << 8, ++ ADBLOCK_OBJECT_SUBREQUEST = 1 << 9, ++ ADBLOCK_DTD = 1 << 10, ++ ADBLOCK_SUBDOCUMENT = 1 << 11, ++ ADBLOCK_OTHER = 1 << 12, ++#endif ++} AdblockType_t; ++ ++ ++void a_Adblock_init(); ++bool_t a_Adblock_permitted(const DilloUrl *url, AdblockType_t t); ++ ++#ifdef __cplusplus ++} ++#endif /* __cplusplus */ ++#endif /* !__ADBLOCK_H__ */ +diff -r 6c4735564ddc src/dillo.cc +--- a/src/dillo.cc Sun Dec 21 06:50:09 2008 +0000 ++++ b/src/dillo.cc Sat Dec 27 19:02:06 2008 +0000 +@@ -46,6 +46,7 @@ + #include "dicache.h" + #include "cookies.h" + #include "auth.h" ++#include "adblock.h" + + /* + * Command line options structure +@@ -269,6 +270,7 @@ int main(int argc, char **argv) + a_Bw_init(); + a_Cookies_init(); + a_Auth_init(); ++ a_Adblock_init(); + + /* command line options override preferences */ + if (options_got & DILLO_CLI_FULLWINDOW) +diff -r 6c4735564ddc src/html.cc +--- a/src/html.cc Sun Dec 21 06:50:09 2008 +0000 ++++ b/src/html.cc Sat Dec 27 19:02:07 2008 +0000 +@@ -36,6 +36,7 @@ + #include "nav.h" + #include "menu.hh" + #include "prefs.h" ++#include "adblock.h" + #include "capi.h" + #include "html.hh" + #include "html_common.hh" +@@ -2081,7 +2121,7 @@ DilloImage *a_Html_add_new_image(DilloHt + // style_attrs->x_tooltip = a_Dw_tooltip_new_no_ref(attrbuf); + + alt_ptr = a_Html_get_attr_wdef(html, tag, tagsize, "alt", NULL); +- if ((!alt_ptr || !*alt_ptr) && !a_UIcmd_get_images_enabled(html->bw)) { ++ if ((!alt_ptr || !*alt_ptr)) { + dFree(alt_ptr); + alt_ptr = dStrdup("[IMG]"); // Place holder for img_off mode + } +@@ -2136,8 +2176,9 @@ DilloImage *a_Html_add_new_image(DilloHt + style_attrs); + } + +- load_now = a_UIcmd_get_images_enabled(html->bw) || +- (a_Capi_get_flags(url) & CAPI_IsCached); ++ load_now = (a_Capi_get_flags(url) & CAPI_IsCached) || ++ (a_UIcmd_get_images_enabled(html->bw) && ++ a_Adblock_permitted(url, ADBLOCK_IMAGE)); + Html_add_new_linkimage(html, &url, load_now ? NULL : Image); + if (load_now) + Html_load_image(html->bw, url, Image); diff --git a/old/test/adblocker.patch.0 b/old/test/adblocker.patch.0 new file mode 100644 index 0000000..b700599 --- /dev/null +++ b/old/test/adblocker.patch.0 @@ -0,0 +1,393 @@ +diff -r 6c4735564ddc src/Makefile.am +--- a/src/Makefile.am Sun Dec 21 06:50:09 2008 +0000 ++++ b/src/Makefile.am Sun Dec 21 23:56:33 2008 +0000 +@@ -28,6 +28,8 @@ dillo_SOURCES = \ + bw.c \ + cookies.c \ + cookies.h \ ++ adblock.c \ ++ adblock.h \ + auth.c \ + auth.h \ + colors.c \ +diff -r 6c4735564ddc src/adblock.c +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/src/adblock.c Sun Dec 21 23:56:33 2008 +0000 +@@ -0,0 +1,293 @@ ++/* ++ * An ad blocker thing following the Adblock Plus syntax found at ++ * http://adblockplus.org/en/filters as it was in December 2008. ++ * ++ * This is not very tidy yet since I don't think it's in any danger of ++ * getting into the real tree without being changed into a dpi. ++ * Hence the conversational tone and everything... ++ * ++ * - Comment lines begin with '!'. ++ * - A "basic" rule has an implicit wildcard at each end. i.e., it's ++ * just looking for a substring. A '|' character before or after ++ * means turn off the wildcard behavior here. ++ * - A basic rule can contain wildcards. They may just mean '*'. ++ * I don't know whether '?' is supposed to be special. ++ * - I think they regard any rule of the form /something/ as a regexp rule. ++ * ++ * - Now you prefix your rule with "@@" if it's an "exception rule" that ++ * _prevents_ blocking. ++ * - And you can append '$' followed by comma-separated options. ++ * Mostly these specify what types of URLs should be filtered, ++ * i.e., image URL, script URL, etc. If the type is prefixed by a '~', ++ * it means "_don't_ filter this type". ++ * There is also an option for case-sensitive matching. ++ * ++ * LIMITATIONS ++ * 1. Is probably as slow as molasses. ++ * 2. Treats all non-regexp rules as case-sensitive. ++ * GNU's fnmatch does have a FNM_CASEFOLD, though... ++ * Just translating everything into regexps might be easiest in ++ * a way, but I doubt it would help the presumably-slow speed. ++ * 3. Doesn't handle element hiding. ++ */ ++ ++#include <ctype.h> ++ ++#include <fnmatch.h> ++#include <regex.h> ++ ++#include "msg.h" ++#include "adblock.h" ++ ++ ++/* Filename in ~/.dillo/ . A preference to point directly to the file used by ++ * Adblock Plus would be nice. ++ */ ++#define ADBLOCK_FILENAME "adblock" ++ ++ ++typedef enum { ++ ADBLOCK_ALLOW = 1 << 0, ++ ADBLOCK_REGEXP = 1 << 1, ++ ADBLOCK_MATCH_CASE = 1 << 2, ++} AdblockFlag_t; ++ ++typedef struct { ++ const char *name; ++ AdblockType_t type; ++} AdblockOption_t; ++ ++typedef struct { ++ char *str; ++ int flags; ++ int types; ++} AdblockRule_t; ++ ++/* ++ * Types that don't apply to Dillo aren't included. I'm thinking that ++ * ADBLOCK_DOCUMENT could be used for HTTP redirection... ++ */ ++const AdblockOption_t Options[] = { ++ {"image", ADBLOCK_IMAGE}, ++ {"stylesheet", ADBLOCK_STYLESHEET}, ++ {"document", ADBLOCK_DOCUMENT}, ++}; ++ ++ ++static Dlist *adblock_rules; ++ ++ ++/* ++ * Parse filter options. A typical options string might look ++ * something like "match-case, image, stylesheet" ++ * ++ * Return nonzero iff this rule is meaningful for Dillo. ++ * There's no sense in keeping a rule around that's only for ++ * XBL or DTD or whatever... ++ */ ++static int Adblock_parse_filter_options(const char *options, ++ AdblockRule_t *rule) ++{ ++ const int listlen = sizeof(Options) / sizeof(AdblockOption_t); ++ bool_t inverse = FALSE, types_seen = FALSE; ++ const char *ptr; ++ int i; ++ ++ ptr = options; ++ ++ while (*ptr) { ++ while (isspace(*ptr)) ++ ptr++; ++ if (!dStrncasecmp(ptr, "match-case", 10)) { ++ rule->flags |= ADBLOCK_MATCH_CASE; ++ ptr += 10; ++ } else { ++ types_seen = TRUE; ++ ++ if (*ptr == '~') { ++ if (!inverse) { ++ /* Initialize. First inverse seen (unless the user is mixing ++ * inverse and 'regular' type specifications, which seems ++ * inadvisable). ++ */ ++ rule->types = ADBLOCK_ALL; ++ } ++ inverse = TRUE; ++ ptr++; ++ } else { ++ inverse = FALSE; ++ } ++ for (i = 0; i < listlen; i++) { ++ const char *name = Options[i].name; ++ int len = strlen(name); ++ if (!dStrncasecmp(ptr, name, len) && ++ ptr[len] != '-' && !isalpha(ptr[len])) { ++ /* match */ ++ if (inverse) { ++ rule->types &= ~Options[i].type; ++ } else { ++ rule->types |= Options[i].type; ++ } ++ ptr += len; ++ break; ++ } ++ } ++ } ++ while (*ptr && *ptr != ',') ++ ptr++; ++ if (*ptr) ++ ptr++; ++ } ++ if (types_seen == FALSE) { ++ rule->types = ADBLOCK_ALL; ++ } ++ return (rule->types != 0); ++} ++ ++/* ++ * Parse one line. ++ * ++ * A rule "with everything" might look something like ++ * "@@|text|$~object,match-case". ++ * There are also regex rules, "/text/" , which serve to add complexity. ++ */ ++static AdblockRule_t *Adblock_parse_line(char *line) ++{ ++ enum {BASIC_NO_WILDCARD, BASIC_WILDCARD, REGEXP_POSSIBLE}; ++ int len, start; ++ const char *ptr; ++ Dstr *dstr; ++ AdblockRule_t *rule; ++ bool_t keep = TRUE; ++ ++ dStrstrip(line); ++ ptr = line; ++ if (*ptr == '\0' || *ptr == '!') { ++ /* empty or comment */ ++ return NULL; ++ } ++ rule = dNew0(AdblockRule_t, 1); ++ ++ if (*ptr == '@' && ptr[1] == '@') { ++ rule->flags = ADBLOCK_ALLOW; ++ ptr += 2; ++ } ++ if (*ptr == '/') { ++ start = REGEXP_POSSIBLE; ++ }else if (*ptr == '|') { ++ start = BASIC_NO_WILDCARD; ++ ptr++; ++ } else { ++ start = BASIC_WILDCARD; ++ } ++ len = strcspn(ptr, "|$"); ++ dstr = dStr_new(""); ++ ++ if (start == REGEXP_POSSIBLE && ptr[len-1] == '/' && ptr[len] != '|') { ++ /* /text/, and regexec() doesn't want the '/'s */ ++ rule->flags |= ADBLOCK_REGEXP; ++ ptr++; ++ len -= 2; ++ } else if (start != BASIC_NO_WILDCARD) { ++ /* wildcard at beginning */ ++ dStr_append_c(dstr, '*'); ++ } ++ if (len > 0) { ++ dStr_append_l(dstr, ptr, len); ++ ptr += len; ++ } ++ if (*ptr == '|' || (rule->flags & ADBLOCK_REGEXP)) { ++ ptr++; ++ } else { ++ /* wildcard at end */ ++ dStr_append_c(dstr, '*'); ++ } ++ rule->str = dstr->str; ++ dStr_free(dstr, 0); ++ ++ if (*ptr != '$') { ++ rule->types = ADBLOCK_ALL; ++ } else { ++ ptr++; ++ keep = Adblock_parse_filter_options(ptr, rule); ++ } ++ MSG("%s\n%s\nimg%d sty%d doc%d allow%d matchcase%d%s\n\n", line, rule->str, ++ rule->types & ADBLOCK_IMAGE, rule->types & ADBLOCK_STYLESHEET, ++ rule->types & ADBLOCK_DOCUMENT, rule->flags & ADBLOCK_ALLOW, ++ rule->flags & ADBLOCK_MATCH_CASE, (keep ? "" : "\nDISCARD!")); ++ ++ if (!keep) { ++ dFree(rule); ++ rule = NULL; ++ } ++ return rule; ++} ++ ++/* ++ * Initialize, reading rules from file. ++ */ ++void a_Adblock_init() ++{ ++ FILE *F_in; ++ char *filename, *line; ++ ++ adblock_rules = dList_new(1); ++ filename = dStrconcat(dGethomedir(), "/.dillo/", ADBLOCK_FILENAME, NULL); ++ ++ if ((F_in = fopen(filename, "r"))) { ++ while ((line = dGetline(F_in)) != NULL) { ++ AdblockRule_t *rule; ++ ++ if ((rule = Adblock_parse_line(line))) ++ dList_append(adblock_rules, rule); ++ dFree(line); ++ } ++ fclose(F_in); ++ } else { ++ MSG("adblock: Can't open rules file %s\n", filename); ++ } ++ dFree(filename); ++} ++ ++/* ++ * Has this URL been blocked by the user? ++ */ ++bool_t a_Adblock_permitted(const DilloUrl *url, AdblockType_t t) ++{ ++ int i; ++ AdblockRule_t *rule; ++ bool_t allow = TRUE, match = FALSE; ++ regex_t buffer; ++ ++ for (i = 0; (rule = dList_nth_data(adblock_rules, i)); i++) { ++ if (rule->types & t) { ++ if (rule->flags & ADBLOCK_REGEXP) { ++ int cflags = REG_NOSUB; ++ if (!(rule->flags & ADBLOCK_MATCH_CASE)) ++ cflags |= REG_ICASE; ++ if (regcomp(&buffer, rule->str, cflags)) { ++ MSG("regcomp didn't like rule string %s\n", rule->str); ++ /* Which might not mean that there's anything _wrong_ with ++ * the string necessarily. We'll see... ++ */ ++ } else { ++ match = (regexec(&buffer, URL_STR(url), 0, NULL, ++ 0) == 0); ++ regfree(&buffer); ++ } ++ } else { ++ match = (fnmatch(rule->str, URL_STR(url), 0) == 0); ++ } ++ if (match) { ++ if (rule->flags & ADBLOCK_ALLOW) { ++ /* overrides any rule to block */ ++ allow = TRUE; ++ break; ++ } ++ allow = FALSE; ++ } ++ } ++ } ++ return allow; ++} ++ +diff -r 6c4735564ddc src/adblock.h +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/src/adblock.h Sun Dec 21 23:56:33 2008 +0000 +@@ -0,0 +1,38 @@ ++#ifndef __ADBLOCK_H__ ++#define __ADBLOCK_H__ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ ++ ++#include "url.h" ++ ++typedef enum { ++ ADBLOCK_NONE = 0, ++ ADBLOCK_IMAGE = 1 << 0, ++ ADBLOCK_STYLESHEET = 1 << 1, ++ ADBLOCK_DOCUMENT = 1 << 2, ++ ADBLOCK_ALL = ADBLOCK_DOCUMENT | (ADBLOCK_DOCUMENT - 1), ++#if 0 ++ /* Not needed yet */ ++ ADBLOCK_SCRIPT = 1 << 3, ++ ADBLOCK_BACKGROUND = 1 << 4, ++ ADBLOCK_OBJECT = 1 << 5, ++ ADBLOCK_XBL = 1 << 6, ++ ADBLOCK_PING = 1 << 7, ++ ADBLOCK_XMLHTTPREQUEST = 1 << 8, ++ ADBLOCK_OBJECT_SUBREQUEST = 1 << 9, ++ ADBLOCK_DTD = 1 << 10, ++ ADBLOCK_SUBDOCUMENT = 1 << 11, ++ ADBLOCK_OTHER = 1 << 12, ++#endif ++} AdblockType_t; ++ ++ ++void a_Adblock_init(); ++bool_t a_Adblock_permitted(const DilloUrl *url, AdblockType_t t); ++ ++#ifdef __cplusplus ++} ++#endif /* __cplusplus */ ++#endif /* !__ADBLOCK_H__ */ +diff -r 6c4735564ddc src/dillo.cc +--- a/src/dillo.cc Sun Dec 21 06:50:09 2008 +0000 ++++ b/src/dillo.cc Sun Dec 21 23:56:33 2008 +0000 +@@ -46,6 +46,7 @@ + #include "dicache.h" + #include "cookies.h" + #include "auth.h" ++#include "adblock.h" + + /* + * Command line options structure +@@ -269,6 +270,7 @@ int main(int argc, char **argv) + a_Bw_init(); + a_Cookies_init(); + a_Auth_init(); ++ a_Adblock_init(); + + /* command line options override preferences */ + if (options_got & DILLO_CLI_FULLWINDOW) +diff -r 6c4735564ddc src/html.cc +--- a/src/html.cc Sun Dec 21 06:50:09 2008 +0000 ++++ b/src/html.cc Sun Dec 21 23:56:33 2008 +0000 +@@ -36,6 +36,7 @@ + #include "nav.h" + #include "menu.hh" + #include "prefs.h" ++#include "adblock.h" + #include "capi.h" + #include "html.hh" + #include "html_common.hh" +@@ -2136,8 +2137,9 @@ DilloImage *a_Html_add_new_image(DilloHt + style_attrs); + } + +- load_now = a_UIcmd_get_images_enabled(html->bw) || +- (a_Capi_get_flags(url) & CAPI_IsCached); ++ load_now = (a_Capi_get_flags(url) & CAPI_IsCached) || ++ (a_UIcmd_get_images_enabled(html->bw) && ++ a_Adblock_permitted(url, ADBLOCK_IMAGE)); + Html_add_new_linkimage(html, &url, load_now ? NULL : Image); + if (load_now) + Html_load_image(html->bw, url, Image); diff --git a/old/test/adblocker.patch.1 b/old/test/adblocker.patch.1 new file mode 100644 index 0000000..ca9ca0b --- /dev/null +++ b/old/test/adblocker.patch.1 @@ -0,0 +1,403 @@ +diff -r 6c4735564ddc src/Makefile.am +--- a/src/Makefile.am Sun Dec 21 06:50:09 2008 +0000 ++++ b/src/Makefile.am Sat Dec 27 19:02:06 2008 +0000 +@@ -28,6 +28,8 @@ dillo_SOURCES = \ + bw.c \ + cookies.c \ + cookies.h \ ++ adblock.c \ ++ adblock.h \ + auth.c \ + auth.h \ + colors.c \ +diff -r 6c4735564ddc src/adblock.c +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/src/adblock.c Sat Dec 27 19:02:06 2008 +0000 +@@ -0,0 +1,294 @@ ++/* ++ * An ad blocker thing following the Adblock Plus syntax found at ++ * http://adblockplus.org/en/filters as it was in December 2008. ++ * ++ * This is not very tidy yet since I don't think it's in any danger of ++ * getting into the real tree without being changed into a dpi. ++ * Hence the conversational tone and everything... ++ * ++ * - Comment lines begin with '!'. ++ * - A "basic" rule has an implicit wildcard at each end. i.e., it's ++ * just looking for a substring. A '|' character before or after ++ * means turn off the wildcard behavior here. ++ * - A basic rule can contain wildcards. They may just mean '*'. ++ * I don't know whether '?' is supposed to be special. ++ * - I think they regard any rule of the form /something/ as a regexp rule. ++ * ++ * - Now you prefix your rule with "@@" if it's an "exception rule" that ++ * _prevents_ blocking. ++ * - And you can append '$' followed by comma-separated options. ++ * Mostly these specify what types of URLs should be filtered, ++ * i.e., image URL, script URL, etc. If the type is prefixed by a '~', ++ * it means "_don't_ filter this type". ++ * There is also an option for case-sensitive matching. ++ * ++ * LIMITATIONS ++ * 1. Is probably as slow as molasses. ++ * 2. Treats all non-regexp rules as case-sensitive. ++ * GNU's fnmatch does have a FNM_CASEFOLD, though... ++ * Just translating everything into regexps might be easiest in ++ * a way, but I doubt it would help the presumably-slow speed. ++ * 3. Doesn't handle element hiding. ++ */ ++ ++#include <ctype.h> ++ ++#include <fnmatch.h> ++#include <regex.h> ++ ++#include "msg.h" ++#include "adblock.h" ++ ++ ++/* Filename in ~/.dillo/ . A preference to point directly to the file used by ++ * Adblock Plus would be nice. ++ */ ++#define ADBLOCK_FILENAME "adblock" ++ ++ ++typedef enum { ++ ADBLOCK_ALLOW = 1 << 0, ++ ADBLOCK_REGEXP = 1 << 1, ++ ADBLOCK_MATCH_CASE = 1 << 2, ++} AdblockFlag_t; ++ ++typedef struct { ++ const char *name; ++ AdblockType_t type; ++} AdblockOption_t; ++ ++typedef struct { ++ char *str; ++ int flags; ++ int types; ++} AdblockRule_t; ++ ++/* ++ * Types that don't apply to Dillo aren't included. I'm thinking that ++ * ADBLOCK_DOCUMENT could be used for HTTP redirection... ++ */ ++const AdblockOption_t Options[] = { ++ {"image", ADBLOCK_IMAGE}, ++ {"stylesheet", ADBLOCK_STYLESHEET}, ++ {"document", ADBLOCK_DOCUMENT}, ++}; ++ ++ ++static Dlist *adblock_rules; ++ ++ ++/* ++ * Parse filter options. A typical options string might look ++ * something like "match-case, image, stylesheet" ++ * ++ * Return nonzero iff this rule is meaningful for Dillo. ++ * There's no sense in keeping a rule around that's only for ++ * XBL or DTD or whatever... ++ */ ++static int Adblock_parse_filter_options(const char *options, ++ AdblockRule_t *rule) ++{ ++ const int listlen = sizeof(Options) / sizeof(AdblockOption_t); ++ bool_t inverse = FALSE, types_seen = FALSE; ++ const char *ptr; ++ int i; ++ ++ ptr = options; ++ ++ while (*ptr) { ++ while (isspace(*ptr)) ++ ptr++; ++ if (!dStrncasecmp(ptr, "match-case", 10)) { ++ rule->flags |= ADBLOCK_MATCH_CASE; ++ ptr += 10; ++ } else { ++ types_seen = TRUE; ++ ++ if (*ptr == '~') { ++ if (!inverse) { ++ /* Initialize. First inverse seen (unless the user is mixing ++ * inverse and 'regular' type specifications, which seems ++ * inadvisable). ++ */ ++ rule->types = ADBLOCK_ALL; ++ } ++ inverse = TRUE; ++ ptr++; ++ } else { ++ inverse = FALSE; ++ } ++ for (i = 0; i < listlen; i++) { ++ const char *name = Options[i].name; ++ int len = strlen(name); ++ if (!dStrncasecmp(ptr, name, len) && ++ ptr[len] != '-' && !isalpha(ptr[len])) { ++ /* match */ ++ if (inverse) { ++ rule->types &= ~Options[i].type; ++ } else { ++ rule->types |= Options[i].type; ++ } ++ ptr += len; ++ break; ++ } ++ } ++ } ++ while (*ptr && *ptr != ',') ++ ptr++; ++ if (*ptr) ++ ptr++; ++ } ++ if (types_seen == FALSE) { ++ rule->types = ADBLOCK_ALL; ++ } ++ return (rule->types != 0); ++} ++ ++/* ++ * Parse one line. ++ * ++ * A rule "with everything" might look something like ++ * "@@|text|$~object,match-case". ++ * There are also regex rules, "/text/" , which serve to add complexity. ++ */ ++static AdblockRule_t *Adblock_parse_line(char *line) ++{ ++ enum {BASIC_NO_WILDCARD, BASIC_WILDCARD, REGEXP_POSSIBLE}; ++ int len, start; ++ const char *ptr; ++ Dstr *dstr; ++ AdblockRule_t *rule; ++ bool_t keep = TRUE; ++ ++ dStrstrip(line); ++ ptr = line; ++ if (*ptr == '\0' || *ptr == '!') { ++ /* empty or comment */ ++ return NULL; ++ } ++ rule = dNew0(AdblockRule_t, 1); ++ ++ if (*ptr == '@' && ptr[1] == '@') { ++ rule->flags = ADBLOCK_ALLOW; ++ ptr += 2; ++ } ++ if (*ptr == '/') { ++ start = REGEXP_POSSIBLE; ++ }else if (*ptr == '|') { ++ start = BASIC_NO_WILDCARD; ++ ptr++; ++ } else { ++ start = BASIC_WILDCARD; ++ } ++ len = strcspn(ptr, "|$"); ++ dstr = dStr_new(""); ++ ++ if (start == REGEXP_POSSIBLE && ptr[len-1] == '/' && ptr[len] != '|') { ++ /* /text/, and regexec() doesn't want the '/'s */ ++ rule->flags |= ADBLOCK_REGEXP; ++ ptr++; ++ len -= 2; ++ } else if (start != BASIC_NO_WILDCARD) { ++ /* wildcard at beginning */ ++ dStr_append_c(dstr, '*'); ++ } ++ if (len > 0) { ++ dStr_append_l(dstr, ptr, len); ++ ptr += len; ++ } ++ if (*ptr == '|' || (rule->flags & ADBLOCK_REGEXP)) { ++ ptr++; ++ } else { ++ /* wildcard at end */ ++ dStr_append_c(dstr, '*'); ++ } ++ rule->str = dstr->str; ++ dStr_free(dstr, 0); ++ ++ if (*ptr != '$') { ++ rule->types = ADBLOCK_ALL; ++ } else { ++ ptr++; ++ keep = Adblock_parse_filter_options(ptr, rule); ++ } ++ MSG("%s\n%s\nimg%d sty%d doc%d allow%d matchcase%d%s\n\n", line, rule->str, ++ rule->types & ADBLOCK_IMAGE, rule->types & ADBLOCK_STYLESHEET, ++ rule->types & ADBLOCK_DOCUMENT, rule->flags & ADBLOCK_ALLOW, ++ rule->flags & ADBLOCK_MATCH_CASE, (keep ? "" : "\nDISCARD!")); ++ ++ if (!keep) { ++ dFree(rule); ++ rule = NULL; ++ } ++ return rule; ++} ++ ++/* ++ * Initialize, reading rules from file. ++ */ ++void a_Adblock_init() ++{ ++ FILE *F_in; ++ char *filename, *line; ++ ++ adblock_rules = dList_new(1); ++ filename = dStrconcat(dGethomedir(), "/.dillo/", ADBLOCK_FILENAME, NULL); ++ ++ if ((F_in = fopen(filename, "r"))) { ++ while ((line = dGetline(F_in)) != NULL) { ++ AdblockRule_t *rule; ++ ++ if ((rule = Adblock_parse_line(line))) ++ dList_append(adblock_rules, rule); ++ dFree(line); ++ } ++ fclose(F_in); ++ } else { ++ MSG("adblock: Can't open rules file %s\n", filename); ++ } ++ dFree(filename); ++} ++ ++/* ++ * Has this URL been blocked by the user? ++ */ ++bool_t a_Adblock_permitted(const DilloUrl *url, AdblockType_t t) ++{ ++ int i; ++ AdblockRule_t *rule; ++ bool_t allow = TRUE, match = FALSE; ++ regex_t buffer; ++ ++ for (i = 0; (rule = dList_nth_data(adblock_rules, i)); i++) { ++ if (rule->types & t) { ++ if (rule->flags & ADBLOCK_REGEXP) { ++ int cflags = REG_NOSUB; ++ if (!(rule->flags & ADBLOCK_MATCH_CASE)) ++ cflags |= REG_ICASE; ++ if (regcomp(&buffer, rule->str, cflags)) { ++ MSG("regcomp didn't like rule string %s\n", rule->str); ++ /* Which might not mean that there's anything _wrong_ with ++ * the string necessarily. We'll see... ++ */ ++ } else { ++ match = (regexec(&buffer, URL_STR(url), 0, NULL, ++ 0) == 0); ++ regfree(&buffer); ++ } ++ } else { ++ match = (fnmatch(rule->str, URL_STR(url), 0) == 0); ++ } ++ if (match) { ++ if (rule->flags & ADBLOCK_ALLOW) { ++ /* overrides any rule to block */ ++ allow = TRUE; ++ break; ++ } ++ allow = FALSE; ++ } ++ } ++ } ++ _MSG("%s %s\n", allow ? "ACCEPTED" : "BLOCKED", URL_STR(url)); ++ return allow; ++} ++ +diff -r 6c4735564ddc src/adblock.h +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/src/adblock.h Sat Dec 27 19:02:06 2008 +0000 +@@ -0,0 +1,38 @@ ++#ifndef __ADBLOCK_H__ ++#define __ADBLOCK_H__ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ ++ ++#include "url.h" ++ ++typedef enum { ++ ADBLOCK_NONE = 0, ++ ADBLOCK_IMAGE = 1 << 0, ++ ADBLOCK_STYLESHEET = 1 << 1, ++ ADBLOCK_DOCUMENT = 1 << 2, ++ ADBLOCK_ALL = ADBLOCK_DOCUMENT | (ADBLOCK_DOCUMENT - 1), ++#if 0 ++ /* Not needed yet */ ++ ADBLOCK_SCRIPT = 1 << 3, ++ ADBLOCK_BACKGROUND = 1 << 4, ++ ADBLOCK_OBJECT = 1 << 5, ++ ADBLOCK_XBL = 1 << 6, ++ ADBLOCK_PING = 1 << 7, ++ ADBLOCK_XMLHTTPREQUEST = 1 << 8, ++ ADBLOCK_OBJECT_SUBREQUEST = 1 << 9, ++ ADBLOCK_DTD = 1 << 10, ++ ADBLOCK_SUBDOCUMENT = 1 << 11, ++ ADBLOCK_OTHER = 1 << 12, ++#endif ++} AdblockType_t; ++ ++ ++void a_Adblock_init(); ++bool_t a_Adblock_permitted(const DilloUrl *url, AdblockType_t t); ++ ++#ifdef __cplusplus ++} ++#endif /* __cplusplus */ ++#endif /* !__ADBLOCK_H__ */ +diff -r 6c4735564ddc src/dillo.cc +--- a/src/dillo.cc Sun Dec 21 06:50:09 2008 +0000 ++++ b/src/dillo.cc Sat Dec 27 19:02:06 2008 +0000 +@@ -46,6 +46,7 @@ + #include "dicache.h" + #include "cookies.h" + #include "auth.h" ++#include "adblock.h" + + /* + * Command line options structure +@@ -269,6 +270,7 @@ int main(int argc, char **argv) + a_Bw_init(); + a_Cookies_init(); + a_Auth_init(); ++ a_Adblock_init(); + + /* command line options override preferences */ + if (options_got & DILLO_CLI_FULLWINDOW) +diff -r 6c4735564ddc src/html.cc +--- a/src/html.cc Sun Dec 21 06:50:09 2008 +0000 ++++ b/src/html.cc Sat Dec 27 19:02:07 2008 +0000 +@@ -36,6 +36,7 @@ + #include "nav.h" + #include "menu.hh" + #include "prefs.h" ++#include "adblock.h" + #include "capi.h" + #include "html.hh" + #include "html_common.hh" +@@ -2081,7 +2121,7 @@ DilloImage *a_Html_add_new_image(DilloHt + // style_attrs->x_tooltip = a_Dw_tooltip_new_no_ref(attrbuf); + + alt_ptr = a_Html_get_attr_wdef(html, tag, tagsize, "alt", NULL); +- if ((!alt_ptr || !*alt_ptr) && !a_UIcmd_get_images_enabled(html->bw)) { ++ if ((!alt_ptr || !*alt_ptr)) { + dFree(alt_ptr); + alt_ptr = dStrdup("[IMG]"); // Place holder for img_off mode + } +@@ -2136,8 +2176,9 @@ DilloImage *a_Html_add_new_image(DilloHt + style_attrs); + } + +- load_now = a_UIcmd_get_images_enabled(html->bw) || +- (a_Capi_get_flags(url) & CAPI_IsCached); ++ load_now = (a_Capi_get_flags(url) & CAPI_IsCached) || ++ (a_UIcmd_get_images_enabled(html->bw) && ++ a_Adblock_permitted(url, ADBLOCK_IMAGE)); + Html_add_new_linkimage(html, &url, load_now ? NULL : Image); + if (load_now) + Html_load_image(html->bw, url, Image); diff --git a/old/test/bar.html b/old/test/bar.html new file mode 100644 index 0000000..3cb2e15 --- /dev/null +++ b/old/test/bar.html @@ -0,0 +1 @@ +content: bar diff --git a/old/test/bc1.html b/old/test/bc1.html new file mode 100644 index 0000000..f4d27a5 --- /dev/null +++ b/old/test/bc1.html @@ -0,0 +1,38 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<title>Border Collapsing</title> + +<style type="text/css" media="all"> + +.word {background-color: orange} + + +table.collapse { + border-collapse: collapse; + border: 1px solid black; +} +td, th { + padding:5px solid #444; + border: 10px solid #aaa; + margin: 20px solid blue; +} +</style> +</head> + +<body> + +<h3>Separate:</h3> + <table border=1 _bgcolor="red" cellpadding=0> + <tr><td><i class="word">Carnivores</i><td>Primates + <tr><td>Tiger<td>Sifaka + </table> +<h3>Collapse:</h3> + <table class="collapse"> + <tr><td><i class="word">Carnivores</i><td>Primates + <tr><td>Tiger<td>Sifaka + </table> + +</body> +</html> diff --git a/old/test/charref_test1.html b/old/test/charref_test1.html new file mode 100644 index 0000000..027822f --- /dev/null +++ b/old/test/charref_test1.html @@ -0,0 +1,26 @@ +<!doctype html> this is html5<br> +? expect ?<br> +�x3f; should fail<br> +&#}; should fail<br> +? expect ?<br> +? should fail<br> +&#-10; should fail<br> +� should fail<br> + should fail<br> + should fail<br> +” error but workaround to "<br> + should fail<br> +􃀀 should be something<br> +� should fail<br> +� should fail<br> +Ж cyrillic Zh<br> +<br> +& ampersand<br> +<a href="../index.html%3Fq&copy=3&.html">link</a> check attrs<br> +(w)≫⃒(w) expands to 6 bytes; would've broken under the old in-place substitution<br> +⟨ ⟩ are different in html4 and html5 (look the same)<br> +& should fail<br> +&---; I left the strchr(":_.-", *s) alone. It's probably not exactly correct for html5.<br> +& & & bare ampersands<br> +' expect '<br> +&asdfghjkl; unrecognized<br> diff --git a/old/test/charref_test2.5.html b/old/test/charref_test2.5.html new file mode 100644 index 0000000..8664c8a --- /dev/null +++ b/old/test/charref_test2.5.html @@ -0,0 +1,26 @@ +this is whatever<br> +? expect ?<br> +�x3f; should fail<br> +&#}; should fail<br> +? expect ?<br> +? expect ? and warning<br> +&#-10; should fail<br> +� should fail<br> + should fail<br> + should fail<br> +” error but workaround to "<br> + should fail<br> +􃀀 should fail<br> +� should fail<br> +� should fail<br> +Ж cyrillic Zh<br> +<br> +& ampersand<br> +<a href="../index.html%3Fq&copy=3&.html">link</a><br> +≫⃒ from html5. unrecognized<br> +⟨ ⟩ are different in html4 and html5<br> +& warning and ampersand<br> +&---; unrecognized <br> +& & & complain about bare ampersands<br> +' unrecognized<br> +&asdfghjkl; unrecognized<br> diff --git a/old/test/charref_test2.html b/old/test/charref_test2.html new file mode 100644 index 0000000..bf03fe6 --- /dev/null +++ b/old/test/charref_test2.html @@ -0,0 +1,26 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">this is html4<br> +? expect ?<br> +�x3f; should fail<br> +&#}; should fail<br> +? expect ?<br> +? expect ? and warning<br> +&#-10; should fail<br> +� should fail<br> + should fail<br> + should fail<br> +” error but workaround to "<br> + should fail<br> +􃀀 should fail<br> +� should fail<br> +� should fail<br> +Ж cyrillic Zh<br> +<br> +& ampersand<br> +<a href="../index.html%3Fq&copy=3&.html">link</a><br> +≫⃒ from html5. unrecognized<br> +⟨ ⟩ are different in html4 and html5<br> +& warning and ampersand<br> +&---; unrecognized <br> +& & & complain about bare ampersands<br> +' unrecognized<br> +&asdfghjkl; unrecognized<br> diff --git a/old/test/charref_test3.html b/old/test/charref_test3.html new file mode 100644 index 0000000..148eebb --- /dev/null +++ b/old/test/charref_test3.html @@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> this is xhtml<br> +? expect ?<br> +�x3f; should fail<br> +&#}; should fail<br> +? expect ?<br> +? should fail<br> +&#-10; should fail<br> +� should fail<br> + should fail<br> + should fail<br> +” error but workaround to "<br> + should fail<br> +􃀀 should fail<br> +� should fail<br> +� should fail<br> +Ж cyrillic Zh<br> +<br> +& ampersand<br> +<a href="../index.html%3Fq&copy=3&.html">link</a><br> +≫⃒ from html5. unrecognized. <br> +⟨ ⟩ are different in html4 and html5<br> +& should fail<br> +&---; unrecognized<br> +& & & complain about bare ampersands<br> +' expect '<br> +&asdfghjkl; unrecognized<br> +<br> +<hr> diff --git a/old/test/choose_colors2.diff b/old/test/choose_colors2.diff new file mode 100644 index 0000000..cabfdc7 --- /dev/null +++ b/old/test/choose_colors2.diff @@ -0,0 +1,211 @@ +diff -r 901072d419b3 src/dillo.cc +--- a/src/dillo.cc Wed Jan 02 23:41:10 2013 +0000 ++++ b/src/dillo.cc Thu Jan 03 06:25:22 2013 +0000 +@@ -219,6 +219,30 @@ + fl_measure(o->value, W, H, interpret_symbols); + } + ++static void colorMenuLabelDraw(const Fl_Label* o, int X, int Y, int W, int H, ++ Fl_Align align) ++{ ++ const int interpret_symbols = 1; ++ ++ fl_draw_shortcut = 0; ++ fl_font(o->font, o->size); ++ fl_color((Fl_Color)o->color); ++ fl_rectf(X+1, Y+1, 3*H/2 - 2, H-2); ++ fl_color(FL_FOREGROUND_COLOR); ++ fl_draw(o->value, X+3*H/2 + 2, Y, W-3*H/2-2, H, align, o->image, ++ interpret_symbols); ++} ++ ++static void colorMenuLabelMeasure(const Fl_Label* o, int& W, int& H) ++{ ++ const int interpret_symbols = 1; ++ ++ fl_draw_shortcut = 0; ++ fl_font(o->font, o->size); ++ fl_measure(o->value, W, H, interpret_symbols); ++ W += 3*H/2 + 2; ++} ++ + /* + * Tell the user if default/pref fonts can't be found. + */ +@@ -434,6 +458,8 @@ + // Use to permit '&' interpretation. + Fl::set_labeltype(FL_FREE_LABELTYPE,custMenuLabelDraw,custMenuLabelMeasure); + ++ Fl::set_labeltype((Fl_Labeltype)(FL_FREE_LABELTYPE+1),colorMenuLabelDraw, ++ colorMenuLabelMeasure); + checkPreferredFonts(); + + /* use preferred font for UI */ +diff -r 901072d419b3 src/menu.cc +--- a/src/menu.cc Wed Jan 02 23:41:10 2013 +0000 ++++ b/src/menu.cc Thu Jan 03 06:25:22 2013 +0000 +@@ -13,6 +13,7 @@ + + #include <FL/Fl.H> + #include <FL/Fl_Menu_Item.H> ++#include <FL/Fl_Color_Chooser.H> + + #include "lout/misc.hh" /* SimpleVector */ + #include "msg.h" +@@ -659,6 +660,57 @@ + ui->change_panel(VOIDP2INT(user_data), ui->get_smallicons()); + } + ++static Fl_Color get_label_color(int32_t pref_color) ++{ ++ if (!(pref_color & 0xffffff00)) ++ return (Fl_Color)pref_color; ++ ++ int r = (pref_color >> 24) & 0xff, g = (pref_color >> 16) & 0xff, ++ b = (pref_color >> 8) & 0xff; ++ ++ return fl_color_cube(r * (FL_NUM_RED - 1) / 255, ++ g * (FL_NUM_GREEN - 1) / 255, ++ b * (FL_NUM_BLUE - 1) / 255); ++} ++ ++static void Menu_base_color_change_cb(Fl_Widget*, void *user_data) ++{ ++ Fl_Color colornum = (Fl_Color)user_data; ++ int old_rgb = Fl::get_color(colornum); ++ uchar r = old_rgb >> 24, ++ g = (old_rgb >> 16) & 0xff, ++ b = (old_rgb >> 8) & 0xff; ++ ++ if (fl_color_chooser("Dillo: select color", r, g, b)) { ++ if (colornum == FL_BACKGROUND_COLOR) { ++ // have to update "gray ramp" ++ Fl::background(r, g, b); ++ } else { ++ Fl::set_color(colornum, r, g, b); ++ } ++ ((UI*)popup_bw->ui)->window()->redraw(); ++ } ++} ++ ++static void Menu_color_change_cb(Fl_Widget *w, void *user_data) ++{ ++ int32_t *prefp = (int32_t *)user_data; ++ uint rgb; ++ ++ if (*prefp & 0xffffff00) ++ rgb = *prefp; ++ else ++ rgb = Fl::get_color(*prefp); ++ rgb >>= 8; ++ ++ uchar r = rgb >> 16, g = (rgb >> 8) & 0xff, b = rgb & 0xff; ++ ++ if (fl_color_chooser("Dillo: select color", r, g, b)) { ++ *prefp = (r << 24) | (g << 16) | (b << 8); ++ ((UI*)popup_bw->ui)->window()->redraw(); ++ } ++} ++ + /* + * Toggle loading of images -- and load them if enabling. + */ +@@ -700,6 +752,27 @@ + {"small icons", 0,Menu_panel_change_cb,(void*)10, + FL_MENU_TOGGLE,0,0,0,0}, + {0,0,0,0,0,0,0,0,0}, ++ {"UI colors", 0, Menu_nop_cb, (void*)0, FL_SUBMENU,0,0,0,0}, ++ {"foreground", 0, Menu_base_color_change_cb, ++ (void*)FL_FOREGROUND_COLOR,0,FL_FREE_LABELTYPE+1,0,0, ++ FL_FOREGROUND_COLOR}, ++ {"main bg", 0, Menu_base_color_change_cb, (void*)FL_BACKGROUND_COLOR, ++ 0,FL_FREE_LABELTYPE+1,0,0,FL_BACKGROUND_COLOR}, ++ {"text bg", 0, Menu_base_color_change_cb, (void*)FL_BACKGROUND2_COLOR, ++ 0,FL_FREE_LABELTYPE+1,0,0,FL_BACKGROUND2_COLOR}, ++ {"selection", 0, Menu_base_color_change_cb, (void*)FL_SELECTION_COLOR, ++ 0,FL_FREE_LABELTYPE+1,0,0,FL_SELECTION_COLOR}, ++ {"button highlight", 0, Menu_color_change_cb, ++ &prefs.ui_button_highlight_color,0,FL_FREE_LABELTYPE+1,0,0,0}, ++ {"tab active bg", 0, Menu_color_change_cb, ++ &prefs.ui_tab_active_bg_color,0,FL_FREE_LABELTYPE+1,0,0,0}, ++ {"tab active fg", 0, Menu_color_change_cb, ++ &prefs.ui_tab_active_fg_color,0,FL_FREE_LABELTYPE+1,0,0,0}, ++ {"tab bg", 0, Menu_color_change_cb, &prefs.ui_tab_bg_color,0, ++ FL_FREE_LABELTYPE+1,0,0,0}, ++ {"tab fg", 0, Menu_color_change_cb, &prefs.ui_tab_fg_color,0, ++ FL_FREE_LABELTYPE+1,0,0,0}, ++ {0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0} + }; + +@@ -716,6 +789,11 @@ + pm[4+cur_panelsize].setonly(); + cur_smallicons ? pm[7].set() : pm[7].clear(); + ++ pm[14].labelcolor(get_label_color(prefs.ui_button_highlight_color)); ++ pm[15].labelcolor(get_label_color(prefs.ui_tab_active_bg_color)); ++ pm[16].labelcolor(get_label_color(prefs.ui_tab_active_fg_color)); ++ pm[17].labelcolor(get_label_color(prefs.ui_tab_bg_color)); ++ pm[18].labelcolor(get_label_color(prefs.ui_tab_fg_color)); + item = pm->popup(x, y); + if (item) { + ((Fl_Widget *)item)->do_callback(); +diff -r 901072d419b3 src/tipwin.cc +--- a/src/tipwin.cc Wed Jan 02 23:41:10 2013 +0000 ++++ b/src/tipwin.cc Thu Jan 03 06:25:22 2013 +0000 +@@ -181,7 +181,7 @@ + { + if (active()) { + if (e == FL_ENTER) { +- color(light_color); ++ color(prefs.ui_button_highlight_color); + redraw(); + } else if (e == FL_LEAVE || e == FL_RELEASE || e == FL_HIDE) { + color(norm_color); +diff -r 901072d419b3 src/uicmd.cc +--- a/src/uicmd.cc Wed Jan 02 23:41:10 2013 +0000 ++++ b/src/uicmd.cc Thu Jan 03 06:25:22 2013 +0000 +@@ -109,7 +109,6 @@ + Fl_Pack *Pack; + Fl_Group *Control; + CustButton *CloseBtn; +- int tabcolor_inactive, tabcolor_active; + + void update_pack_offset(void); + void resize(int x, int y, int w, int h) +@@ -137,8 +136,6 @@ + Pack = NULL; + focus_counter = 0; + tab_w = 50, tab_h = th, ctab_h = 1, btn_w = 20, ctl_w = 1*btn_w+2; +- tabcolor_active = prefs.ui_tab_active_bg_color; +- tabcolor_inactive = prefs.ui_tab_bg_color; + resize(0,0,ww,ctab_h); + /* tab buttons go inside a pack within a scroll */ + Scroll = new Fl_Scroll(0,0,ww-ctl_w,ctab_h); +@@ -282,7 +279,7 @@ + btn->copy_label(DEFAULT_TAB_LABEL); + btn->clear_visible_focus(); + btn->box(FL_GTK_THIN_UP_BOX); +- btn->color(focus ? tabcolor_active : tabcolor_inactive); ++ btn->color(focus ? prefs.ui_tab_active_bg_color : prefs.ui_tab_bg_color); + btn->labelcolor(focus ? prefs.ui_tab_active_fg_color : + prefs.ui_tab_fg_color); + btn->ui(new_ui); +@@ -412,7 +409,7 @@ + // Set old tab label to normal color + if ((idx = get_btn_idx(old_ui)) != -1) { + btn = (CustTabButton*)Pack->child(idx); +- btn->color(tabcolor_inactive); ++ btn->color(prefs.ui_tab_bg_color); + btn->labelcolor(prefs.ui_tab_fg_color); + btn->redraw(); + } +@@ -427,7 +424,7 @@ + */ + cbtn->ui()->show(); + Wizard->value(cbtn->ui()); +- cbtn->color(tabcolor_active); ++ cbtn->color(prefs.ui_tab_active_bg_color); + cbtn->labelcolor(prefs.ui_tab_active_fg_color); + cbtn->redraw(); + update_pack_offset(); diff --git a/old/test/color_themes.diff b/old/test/color_themes.diff new file mode 100644 index 0000000..5ae197f --- /dev/null +++ b/old/test/color_themes.diff @@ -0,0 +1,380 @@ +diff -r df1a2f4f9d5a src/dillo.cc +--- a/src/dillo.cc Sat Jan 12 20:35:54 2013 +0000 ++++ b/src/dillo.cc Sun Jan 13 05:29:37 2013 +0000 +@@ -237,43 +237,49 @@ + checkFont(prefs.font_fantasy, "fantasy"); + } + +-static void setColorFLTK(int32_t color, void (*fn) (uchar, uchar, uchar)) ++/* ++ * Set UI color. 'color' is an 0xrrggbb value, whereas 'default_val' is a fltk ++ * color (index 0-0xFF, or 0xrrggbb00). ++ */ ++static void setUIColorWdef(Fl_Color idx, int32_t color, Fl_Color default_val) + { +- if (color != -1) +- fn(color >> 16, (color >> 8) & 0xff, color & 0xff); +-} +- +-static void setColorPrefWdef(int32_t &color, int32_t default_val) +-{ +- if (color == -1) +- color = default_val; +- else if (color == 0) +- color = FL_BLACK; +- else +- color <<= 8; ++ if (color == -1) { ++ if (default_val != 0xFFFFFFFF) ++ Fl::set_color(idx, default_val); ++ } else { ++ Fl::set_color(idx, color << 8); ++ } + } + + static void setColors() + { +- unsigned rgb; ++ /* The main background is a special case because Fl::background() will ++ * set the "gray ramp", which is a set of lighter and darker colors based ++ * on the main background and used for box edges and such. ++ */ ++ if (prefs.ui_main_bg_color != -1) { ++ uchar r = prefs.ui_main_bg_color >> 16, ++ g = (prefs.ui_main_bg_color >> 8 & 0xff), ++ b = prefs.ui_main_bg_color & 0xff; + +- setColorFLTK(prefs.ui_main_bg_color, Fl::background); +- setColorFLTK(prefs.ui_text_bg_color, Fl::background2); +- setColorFLTK(prefs.ui_fg_color, Fl::foreground); ++ Fl::background(r, g, b); ++ } + +- if (prefs.ui_selection_color == -1) +- rgb = Fl::get_color(fl_contrast(FL_SELECTION_COLOR, +- FL_BACKGROUND2_COLOR)); +- else +- rgb = prefs.ui_selection_color << 8; +- Fl::set_color(FL_SELECTION_COLOR, rgb); +- +- setColorPrefWdef(prefs.ui_button_highlight_color, +- fl_lighter(FL_BACKGROUND_COLOR)); +- setColorPrefWdef(prefs.ui_tab_active_bg_color, FL_BACKGROUND2_COLOR); +- setColorPrefWdef(prefs.ui_tab_bg_color, FL_BACKGROUND_COLOR); +- setColorPrefWdef(prefs.ui_tab_active_fg_color, FL_FOREGROUND_COLOR); +- setColorPrefWdef(prefs.ui_tab_fg_color, FL_FOREGROUND_COLOR); ++ setUIColorWdef(FL_BACKGROUND2_COLOR, prefs.ui_text_bg_color, 0xFFFFFFFF); ++ setUIColorWdef(FL_FOREGROUND_COLOR, prefs.ui_fg_color, 0xFFFFFFFF); ++ setUIColorWdef(FL_SELECTION_COLOR, prefs.ui_selection_color, ++ fl_contrast(FL_SELECTION_COLOR, FL_BACKGROUND2_COLOR)); ++ setUIColorWdef(PREFS_UI_BUTTON_HIGHLIGHT_COLOR, ++ prefs.ui_button_highlight_color, ++ fl_lighter(FL_BACKGROUND_COLOR)); ++ setUIColorWdef(PREFS_UI_TAB_ACTIVE_BG_COLOR, prefs.ui_tab_active_bg_color, ++ Fl::get_color(FL_BACKGROUND2_COLOR)); ++ setUIColorWdef(PREFS_UI_TAB_BG_COLOR, prefs.ui_tab_bg_color, ++ Fl::get_color(FL_BACKGROUND_COLOR)); ++ setUIColorWdef(PREFS_UI_TAB_ACTIVE_FG_COLOR, prefs.ui_tab_active_fg_color, ++ Fl::get_color(FL_FOREGROUND_COLOR)); ++ setUIColorWdef(PREFS_UI_TAB_FG_COLOR, prefs.ui_tab_fg_color, ++ Fl::get_color(FL_FOREGROUND_COLOR)); + } + + /* +diff -r df1a2f4f9d5a src/menu.cc +--- a/src/menu.cc Sat Jan 12 20:35:54 2013 +0000 ++++ b/src/menu.cc Sun Jan 13 05:29:37 2013 +0000 +@@ -12,6 +12,7 @@ + // Functions/Methods for menus + + #include <FL/Fl.H> ++#include <FL/Fl_Menu_.H> + #include <FL/Fl_Menu_Item.H> + + #include "lout/misc.hh" /* SimpleVector */ +@@ -659,6 +660,14 @@ + ui->change_panel(VOIDP2INT(user_data), ui->get_smallicons()); + } + ++static void Menu_color_theme_cb(Fl_Widget *w, void*) ++{ ++ Fl_Menu_Item *mi = (Fl_Menu_Item*)w; ++ const char *theme = mi->label(); ++ ++ a_UIcmd_change_color_theme(theme); ++} ++ + /* + * Toggle loading of images -- and load them if enabling. + */ +@@ -700,6 +709,11 @@ + {"small icons", 0,Menu_panel_change_cb,(void*)10, + FL_MENU_TOGGLE,0,0,0,0}, + {0,0,0,0,0,0,0,0,0}, ++ {"UI Colors", 0, Menu_nop_cb, 0, FL_SUBMENU,0,0,0,0}, ++ {"traditional", 0, Menu_color_theme_cb, 0,0,0,0,0,0}, ++ {"earth", 0, Menu_color_theme_cb, 0,0,0,0,0,0}, ++ {"green", 0, Menu_color_theme_cb, 0,0,0,0,0,0}, ++ {0,0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0,0} + }; + +diff -r df1a2f4f9d5a src/prefs.h +--- a/src/prefs.h Sat Jan 12 20:35:54 2013 +0000 ++++ b/src/prefs.h Sun Jan 13 05:29:37 2013 +0000 +@@ -23,6 +23,13 @@ + #define PREFS_GEOMETRY_DEFAULT_XPOS -9999 + #define PREFS_GEOMETRY_DEFAULT_YPOS -9999 + ++/* FLTK free color indices from 16 to 31 */ ++#define PREFS_UI_BUTTON_HIGHLIGHT_COLOR 16 ++#define PREFS_UI_TAB_ACTIVE_BG_COLOR 17 ++#define PREFS_UI_TAB_ACTIVE_FG_COLOR 18 ++#define PREFS_UI_TAB_BG_COLOR 19 ++#define PREFS_UI_TAB_FG_COLOR 20 ++ + /* Panel sizes */ + enum { P_tiny = 0, P_small, P_medium }; + +diff -r df1a2f4f9d5a src/tipwin.cc +--- a/src/tipwin.cc Sat Jan 12 20:35:54 2013 +0000 ++++ b/src/tipwin.cc Sun Jan 13 05:29:37 2013 +0000 +@@ -174,7 +174,7 @@ + TipWinButton(x,y,w,h,l) + { + norm_color = color(); +- light_color = prefs.ui_button_highlight_color; ++ light_color = PREFS_UI_BUTTON_HIGHLIGHT_COLOR; + } + + int CustButton::handle(int e) +diff -r df1a2f4f9d5a src/ui.cc +--- a/src/ui.cc Sat Jan 12 20:35:54 2013 +0000 ++++ b/src/ui.cc Sun Jan 13 05:29:37 2013 +0000 +@@ -404,23 +404,31 @@ + /* + * Create the archetipic browser buttons + */ ++void UI::make_deactivated_icons() ++{ ++ if (icons->ImgLeftIn) ++ delete icons->ImgLeftIn; ++ icons->ImgLeftIn = icons->ImgLeft->copy(); ++ icons->ImgLeftIn->desaturate(); ++ icons->ImgLeftIn->color_average(FL_BACKGROUND_COLOR, .14f); ++ ++ if (icons->ImgRightIn) ++ delete icons->ImgRightIn; ++ icons->ImgRightIn = icons->ImgRight->copy(); ++ icons->ImgRightIn->desaturate(); ++ icons->ImgRightIn->color_average(FL_BACKGROUND_COLOR, .14f); ++ ++ if (icons->ImgStopIn) ++ delete icons->ImgStopIn; ++ icons->ImgStopIn = icons->ImgStop->copy(); ++ icons->ImgStopIn->desaturate(); ++ icons->ImgStopIn->color_average(FL_BACKGROUND_COLOR, .14f); ++} ++ + void UI::make_toolbar(int tw, int th) + { +- if (!icons->ImgLeftIn) { +- icons->ImgLeftIn = icons->ImgLeft->copy(); +- icons->ImgLeftIn->desaturate(); +- icons->ImgLeftIn->color_average(FL_BACKGROUND_COLOR, .14f); +- } +- if (!icons->ImgRightIn) { +- icons->ImgRightIn = icons->ImgRight->copy(); +- icons->ImgRightIn->desaturate(); +- icons->ImgRightIn->color_average(FL_BACKGROUND_COLOR, .14f); +- } +- if (!icons->ImgStopIn) { +- icons->ImgStopIn = icons->ImgStop->copy(); +- icons->ImgStopIn->desaturate(); +- icons->ImgStopIn->color_average(FL_BACKGROUND_COLOR, .14f); +- } ++ if (!icons->ImgLeftIn) ++ make_deactivated_icons(); + Back = make_button("Back", icons->ImgLeft, icons->ImgLeftIn, UI_BACK, 1); + Forw = make_button("Forw", icons->ImgRight, icons->ImgRightIn, UI_FORW); + Home = make_button("Home", icons->ImgHome, NULL, UI_HOME); +@@ -645,6 +653,7 @@ + CustGroupVertical(x, y, ui_w, ui_h, label) + { + LocBar = NavBar = StatusBar = NULL; ++ bg_val = Fl::get_color(FL_BACKGROUND_COLOR); + + Tabs = NULL; + TopGroup = this; +@@ -792,6 +801,19 @@ + return ret; + } + ++void UI::draw() ++{ ++ uint new_bg = Fl::get_color(FL_BACKGROUND_COLOR); ++ ++ if (bg_val != new_bg) { ++ bg_val = new_bg; ++ make_deactivated_icons(); ++ Back->deimage(icons->ImgLeftIn); ++ Forw->deimage(icons->ImgRightIn); ++ Stop->deimage(icons->ImgStopIn); ++ } ++ CustGroupVertical::draw(); ++} + + //---------------------------- + // API for the User Interface +diff -r df1a2f4f9d5a src/ui.hh +--- a/src/ui.hh Sat Jan 12 20:35:54 2013 +0000 ++++ b/src/ui.hh Sun Jan 13 05:29:37 2013 +0000 +@@ -137,11 +137,13 @@ + // Panel customization variables + int PanelSize, Small_Icons; + int p_xpos, p_ypos, bw, bh, mh, lh, nh, fh, sh, pw, lbl; ++ uint bg_val; + bool PanelTemporary; + + UIPanelmode Panelmode; + CustButton *make_button(const char *label, Fl_Image *img, Fl_Image*deimg, + int b_n, int start = 0); ++ void make_deactivated_icons(); + void make_toolbar(int tw, int th); + void make_location(int ww); + void make_progress_bars(int wide, int thin_up); +@@ -149,6 +151,7 @@ + Fl_Widget *make_filemenu_button(); + void make_panel(int ww); + void make_status_bar(int ww, int wh); ++ void draw(); + + public: + +diff -r df1a2f4f9d5a src/uicmd.cc +--- a/src/uicmd.cc Sat Jan 12 20:35:54 2013 +0000 ++++ b/src/uicmd.cc Sun Jan 13 05:29:37 2013 +0000 +@@ -110,7 +110,6 @@ + Fl_Pack *Pack; + Fl_Group *Control; + CustButton *CloseBtn; +- int tabcolor_inactive, tabcolor_active; + + void update_pack_offset(void); + void resize(int x, int y, int w, int h) +@@ -138,8 +137,6 @@ + Pack = NULL; + focus_counter = 0; + tab_w = 50, tab_h = th, ctab_h = 1, btn_w = 20, ctl_w = 1*btn_w+2; +- tabcolor_active = prefs.ui_tab_active_bg_color; +- tabcolor_inactive = prefs.ui_tab_bg_color; + resize(0,0,ww,ctab_h); + /* tab buttons go inside a pack within a scroll */ + Scroll = new Fl_Scroll(0,0,ww-ctl_w,ctab_h); +@@ -283,9 +280,8 @@ + btn->copy_label(DEFAULT_TAB_LABEL); + btn->clear_visible_focus(); + btn->box(FL_GTK_THIN_UP_BOX); +- btn->color(focus ? tabcolor_active : tabcolor_inactive); +- btn->labelcolor(focus ? prefs.ui_tab_active_fg_color : +- prefs.ui_tab_fg_color); ++ btn->color(focus ? PREFS_UI_TAB_ACTIVE_BG_COLOR : PREFS_UI_TAB_BG_COLOR); ++ btn->labelcolor(focus ? PREFS_UI_TAB_ACTIVE_FG_COLOR:PREFS_UI_TAB_FG_COLOR); + btn->ui(new_ui); + btn->callback(tab_btn_cb, this); + Pack->add(btn); // append +@@ -413,8 +409,8 @@ + // Set old tab label to normal color + if ((idx = get_btn_idx(old_ui)) != -1) { + btn = (CustTabButton*)Pack->child(idx); +- btn->color(tabcolor_inactive); +- btn->labelcolor(prefs.ui_tab_fg_color); ++ btn->color(PREFS_UI_TAB_BG_COLOR); ++ btn->labelcolor(PREFS_UI_TAB_FG_COLOR); + btn->redraw(); + } + /* We make a point of calling show() before value() is changed because +@@ -428,8 +424,8 @@ + */ + cbtn->ui()->show(); + Wizard->value(cbtn->ui()); +- cbtn->color(tabcolor_active); +- cbtn->labelcolor(prefs.ui_tab_active_fg_color); ++ cbtn->color(PREFS_UI_TAB_ACTIVE_BG_COLOR); ++ cbtn->labelcolor(PREFS_UI_TAB_ACTIVE_FG_COLOR); + cbtn->redraw(); + update_pack_offset(); + +@@ -1145,6 +1141,61 @@ + } + + /* ++ * Change the color theme ++ */ ++void a_UIcmd_change_color_theme(const char *theme) ++{ ++ typedef struct { ++ const char *name; ++ uint fg; ++ uint main_bg; ++ uint text_bg; ++ uint selection; ++ uint button_hl; ++ uint tab_active_bg; ++ uint tab_active_fg; ++ uint tab_bg; ++ uint tab_fg; ++ } theme_t; ++ ++ static const theme_t themes[] = { ++ {"traditional", FL_BLACK, 0xC0C0C000, 0xBFDABF00, FL_BLUE, 0xD5D5D500, ++ 0x87ACA700, FL_BLACK, 0xB7BEB700, FL_BLACK}, ++ {"green", 0x10040400, 0xC8D39400, 0xBDD8B600, 0x7C5F4200, 0xBDBD8000, ++ 0xB5B67900, 0xB6090700, 0xCAC68200, 0x10040400}, ++ {"earth", 0x10040400, 0xC2A47B00, 0xCDC9A500, 0x76302400, 0xD5C3A400, ++ 0xAF4B3F00, FL_WHITE, 0xD2B48C00, 0x10040400}, ++ }; ++ ++ int n = sizeof(themes) / sizeof(themes[0]); ++ ++ for (int i = 0; i < n; i++) { ++ if (!strcmp(theme, themes[i].name)) { ++ const theme_t *t = themes + i; ++ uint rgb = t->main_bg; ++ ++ Fl::background(rgb >> 24, (rgb >> 16) & 0xff, (rgb >> 8) & 0xff); ++ Fl::set_color(FL_BACKGROUND2_COLOR, t->text_bg); ++ Fl::set_color(FL_FOREGROUND_COLOR, t->fg); ++ Fl::set_color(FL_SELECTION_COLOR, t->selection); ++ Fl::set_color(PREFS_UI_BUTTON_HIGHLIGHT_COLOR, t->button_hl); ++ Fl::set_color(PREFS_UI_TAB_ACTIVE_BG_COLOR, t->tab_active_bg); ++ Fl::set_color(PREFS_UI_TAB_ACTIVE_FG_COLOR, t->tab_active_fg); ++ Fl::set_color(PREFS_UI_TAB_BG_COLOR, t->tab_bg); ++ Fl::set_color(PREFS_UI_TAB_FG_COLOR, t->tab_fg); ++ ++ n = a_Bw_num(); ++ for (i = 0; i < n; i++) { ++ BrowserWindow *bw = a_Bw_get(i); ++ ((UI*)bw->ui)->window()->redraw(); ++ } ++ break; ++ } ++ } ++ ++} ++ ++/* + * Ask the vsource dpi to show this URL's source + */ + void a_UIcmd_view_page_source(BrowserWindow *bw, const DilloUrl *url) +diff -r df1a2f4f9d5a src/uicmd.hh +--- a/src/uicmd.hh Sat Jan 12 20:35:54 2013 +0000 ++++ b/src/uicmd.hh Sun Jan 13 05:29:37 2013 +0000 +@@ -50,6 +50,7 @@ + bool_t showing_hiddens); + void a_UIcmd_file_popup(void *vbw, void *v_wid); + void a_UIcmd_copy_urlstr(BrowserWindow *bw, const char *urlstr); ++void a_UIcmd_change_color_theme(const char *theme); + void a_UIcmd_view_page_source(BrowserWindow *bw, const DilloUrl *url); + void a_UIcmd_view_page_bugs(void *vbw); + void a_UIcmd_bugmeter_popup(void *vbw); diff --git a/old/test/cross-nesting-simple.html b/old/test/cross-nesting-simple.html new file mode 100644 index 0000000..d2c228b --- /dev/null +++ b/old/test/cross-nesting-simple.html @@ -0,0 +1,24 @@ +Cross nesting between A, BUTTON, SELECT and TEXTAREA is forbidden:<br> +<dl> +<dt>A: + <dd> A A<a><a></a> + <dd> A BUTTON<a><button value="OK" name="sop"></button></a> + <dd> A SELECT<a><select></select></a> + <dd> A TEXTAREA<a><textarea rows=1 cols=1></textarea></a> +<dt>BUTTON: + <dd> BUTTON A<button><a></button> + <dd> BUTTON BUTTON<button><button value="OK" name="sop"></button></button> + <dd> BUTTON SELECT<button><select></button>> + <dd> BUTTON TEXTAREA<button><textarea rows=1 cols=1></textarea></button> +<dt>SELECT: + <dd> SELECT A<select><a></select> + <dd> SELECT BUTTON<select><button value="OK" name="sop"></button></select> + <dd> SELECT SELECT<select><select></select>> + <dd> SELECT TEXTAREA<select><textarea rows=1 cols=1></textarea></select> +<dt>TEXTAREA: + <dd> TEXTAREA A<textarea><a></a></textarea> + <dd> TEXTAREA BUTTON<textarea><button value="OK"></button></textarea> + <dd> TEXTAREA SELECT<textarea><select></select></textarea>> + <dd> TEXTAREA TEXTAREA<textarea><textarea rows=1 cols=1></textarea></textarea> + +</dl> diff --git a/old/test/cs1.html b/old/test/cs1.html new file mode 100644 index 0000000..10174af --- /dev/null +++ b/old/test/cs1.html @@ -0,0 +1,94 @@ +<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Test</title> +</head> + +<body leftmargin="0" topmargin="0"> + + no width specified<br> + <table border=1> + <tr> <td>1 2 3 4 + <td>5 6 7 8 9 10 + <td>A + <tr> <td colspan="2" bgcolor=teal>cs=2 + <td>B + </table> + no width specified<br> + <table border=1> + <tr> <td>1 + <td>2 + <td>A + <tr> <td colspan="2" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 + <td>B + </table> + proportional apportion<br> + <table border=1> + <tr> <td>1 + <td>2 2 + <td>3 3 3 + <td>A + <tr> <td colspan="3" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + <td>B + </table> + width=100%<br> + <table width='100%' border=1> + <tr> <td>1 + <td>2 + <td>A + <tr> <td colspan="2" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 + <td>B + </table> + width=100% with td width in percentage<br> + <table width='100%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <tr> <td colspan="2" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 + <td>B + </table> + + different width percentages in the same column<br> + <table width='100%' border=1> + <tr> <td width='70%'>70% + <td width='10%'>10% + <td width='10%'>10% + <tr> <td width='10%'>10% + <td width='70%'>70% + <td width='10%'>10% + </table> + + different width percentages in the same column<br> + <table width='100%' border=1> + <tr> <td width='10%'>10% + <td width='20%'>20% + <td width='30%'>30% + <td width='40%'>40% + <td width='50%'>50% + <td width='10%'>10% + <tr> <td width='5%'>5% + <td width='10%'>10% + <td width='15%'>15% + <td width='20%'>20% + <td width='25%'>25% + <td width='10%'>10% + </table> + + percentages adding more than a 100% (no table width)<br> + <table border=1> + <tr> <td width='100%'>100% + <td width='50%'>50% + <td width='50%'>50% + <td width='100%'>100% + </table> + percentages adding more than a 100% (table width=100%)<br> + <table width='100%' border=1 bgcolor=teal> + <tr> <td width='100%'>100% + <td width='50%'>50% + <td width='50%'>50% + <td width='100%'>100% + </table> + +</body> +</html> diff --git a/old/test/cs7.html b/old/test/cs7.html new file mode 100644 index 0000000..090f7a0 --- /dev/null +++ b/old/test/cs7.html @@ -0,0 +1,69 @@ +<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Test</title> +</head> + +<body leftmargin="0" topmargin="0"> + + percentages adding more than a 100% (table width=100%)<br> + <table width='100%' border=1 bgcolor=teal> + <tr> <td width='100%'>100% + <td width='50%'>50% + <td width='50%'>50% + <td width='100%'>100% + </table> + + percentages adding more than a 100% (table width=100%)<br> + <table width='100%' border=1 bgcolor=teal> + <tr> <td width='80%'>80% + <td width='5%'>5% + </table> + <table width='100%' border=1 bgcolor=lightblue> + <tr> <td width='80%'>80% + <td width='15%'>15% + <td width='5%'>5% + </table> + + width=100% with cells widths in percentages<br> + <table border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <tr> <td colspan="2" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 + <td>B + </table> + + small cell width:<br> + <table border=1> <tr> <td width='20%'>20%</td> </table> + <table border=1> <tr> <td width='50%'>50%</td> </table> + <table border=1> <tr> <td width='80%'>80%</td> </table> + <table border=1> <tr> <td width='100%'>100%</td> </table> + <table border=1> + <tr> <td width='20%'>20% + <td width='30%'>30% + </table> + + small cell width with table width=100%:<br> + <table width=100% border=1> <tr> <td width='20%'>20%</td> </table> + <table width=100% border=1> <tr> <td width='50%'>50%</td> </table> + <table width=100% border=1> <tr> <td width='80%'>80%</td> </table> + <table width=100% border=1> <tr> <td width='100%'>100%</td> </table> + <table width=100% border=1> + <tr> <td width='20%'>20% + <td width='30%'>30% + </table> + + cell width in second row:<br> + <table width=100% border=1> + <tr> <td> AAAA + <td> BBBB + <tr> <td> CCCC + <td width='100%'>20% + <tr> <td> CCCC + <td width='20%'>100% + </table> + +</body> +</html> diff --git a/old/test/css-top-margin-bug.html b/old/test/css-top-margin-bug.html new file mode 100644 index 0000000..e74a420 --- /dev/null +++ b/old/test/css-top-margin-bug.html @@ -0,0 +1,37 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=US-ASCII"> + <title>Title</title> + <link href="style.css" rel="stylesheet" type="text/css"> + </head> + <body> + <h1>Headline 1</h1> + <p></p> + <div class="top"> + <h2>Headline 2</h2> + </div> + <div class="content"> + <p> + Content (dillo 2.2 creates a margin at the top - dillo 2.1.1 and + other browsers do not) + </p> + </div> + <div class="top"> + Normal Text + </div> + <div class="content"> + <p>Content (dillo 2.2 creates no margin - as expected)</p> + </div> + <div class="top"> + <p>Paragraph</p> + </div> + <div class="content"> + <p>Content (dillo 2.2 creates margin at the top - as with headline)</p> + </div> + <!-- Footer --> + <hr> + <p>Footer</p> + </body> +</html> +<!-- EOF --> diff --git a/old/test/css-top-margin-bug.tar b/old/test/css-top-margin-bug.tar Binary files differnew file mode 100644 index 0000000..506672e --- /dev/null +++ b/old/test/css-top-margin-bug.tar diff --git a/old/test/dillo-tabs.png b/old/test/dillo-tabs.png Binary files differnew file mode 100644 index 0000000..7c13281 --- /dev/null +++ b/old/test/dillo-tabs.png diff --git a/old/test/dillo2.html b/old/test/dillo2.html new file mode 100644 index 0000000..b60c0b9 --- /dev/null +++ b/old/test/dillo2.html @@ -0,0 +1,283 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <title> Dillo Web Browser :: + + Home Page + +</title> +<base href=""> +<style type="text/css"> +.date {font-size: 10px; color: #666; margin-bottom: 0.5em} +h1 {background: #f8f8f8; color: #67f} +.sidebar h3 {font-size: 1em; margin: 0.4em 0 0.2em 0; color: #56f; background: #f8f8f8} +.sidebar .items {background: #f8f8f8} +ul li {list-style-type: square} +.newsitem {background: #f8f8f8; border-color: #e8e8e8; border-style: solid; border-width: 1px; margin-bottom: 0.5em} +.newsitem h3 {margin-top: 0; margin-bottom: 0.2em; color: #56f; background: #f0f0f0} +body {margin: 0} +</style> +</head> + +<body text="black" link="blue" vlink="#403090" bgcolor="white" + style="line-height: 1.3"> + + +<table width="100%" cellspacing="0" cellpadding="0"><tr> +<td><img src="../db1.png" alt="The Dillo Web Browser"> +<td width="100%"> + <img src="../db2.png" alt="The Dillo Web Browser" height="124" width="100%"> +</table> + +<table border="0" cellpadding="20" cellspacing="5" width="100%"> + <tr valign="top"> + <td class="sidebar"> + <h3>Dillo</h3> + <div class="items"> + <a href="../index.html">Home</a><br> + <a href="../screenshots/index.html">Screenshots</a><br> + <a href="../download.html">Download</a><br> + <a href="../FAQ.html" title="Frequently asked questions">FAQ</a><br> + <a href="../Compatibility.html">Compatibility</a><br> + <a href="http://hg.dillo.org/dillo/file/tip/ChangeLog"> + Changelog</a><br> + <a href="../Plans.html">Current Plans</a><br> + <a href="../MList.html">Mailing List</a><br> + <a href="../conferences.html">Conferences</a><br> + <a href="../donations.html">Donate</a><br> + </div> + <h3>Users</h3> + <div class="items"> + <a href="../dillo3-help.html">Help</a><br> + <a href="../Icons/index.html">Icons</a><br> + <a href="../help/bug_meter.html">Bug meter</a><br> + </div> + <h3>Bug Tracker</h3> + <div class="items"> + <a href="../bugtrack/Dbugtrack.html">Bug Track Intro</a><br> + <a href="../bugtrack/Dquery.html">View Entries</a><br> + <a href="../bugtrack/Dinsert.html">Bug Insertion</a><br> + <a href="../bugtrack/Dvolunteer.html">Volunteering</a><br> + </div> + <h3>Developers</h3> + <div class="items"> + <a href="../developer.html">New Developer</a><br> + <a href="../documentation.html">Documentation</a> *<br> + <a href="../NC_design.html">Naming&Coding</a><br> + <a href="../source.html">Source repository</a><br> + <a href="../dpi1.html">Dpi1 Spec</a><br> + <a href="../CSS.html">CSS Spec</a><br> + <a href="../D_authors.html">Authors</a><br> + <a href="../authors/jcid-email.html">Security contact</a><br> + </div> + <h3>Related</h3> + <div class="items"> + <a href="../press.html">Dillo in the Press!</a><br> + <a href="../interview.html">Interview</a><br> + <a href="../interview.es.html">Entrevista</a> + <img src="../chile.png" alt="*"><br> + <a href="../Links.html">Links</a><br> + <a href="../logos/logos.html">Art</a><br> + </div> + <h3>Hosted at:</h3> + <div class="items"> + <a href="http://auriga.wearlab.de/"> + <img src="http://www.dillo.org/wearlab.png" alt="[wearLab] @TZI" width="87" height="33"></a> + <p> + <a href="http://www.dillo.org/stats/">Site Statistics</a><br> + <a href="../authors/webmaster-email.html">Webmaster</a> + <p> + <a href="http://www.anybrowser.org/campaign/"> + <img src="http://www.dillo.org/AnyBrowser.gif" width="88" height="31" + alt="anybrowser"></a> + </div> + <td valign="top" align="left" width="100%"> + + + <h1 style="margin-top: 0.3em"> + Welcome to the Dillo Project! + </h1> + +<div style="background: #f8f8f8; margin-top: 0.5em"> + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">What is Dillo?</b> + <ul> + <li> Dillo is a + <a href='../Compatibility.html'>multi-platform</a> + graphical web browser known for its speed and + <a href='../memory.html'>small footprint</a>. </li> + + <li> Dillo is written in C and C++. </li> + + <li> Dillo is based on <a href='http://www.fltk.org'>FLTK</a>, the Fast + Light Toolkit (statically-linked by default!). </li> + + <li> Dillo is free software made available under the terms of the GNU + General Public License (GPLv3). </li> + + <li> Dillo strives to be friendly both to users and developers. </li> + + <li> Dillo helps web authors to comply with web standards by using the + <a href='../help/bug_meter.html'>bug meter</a>.</li> + </ul> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Project objectives</b> + <ul> + <li>The democratization of internet information access.</li> + <li>Personal security and privacy.</li> + <li>High software efficiency.</li> + <p> + [<a href='../funding/objectives.html'>more info</a>] + </ul> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Current version</b> + <blockquote> + Dillo follows an evolving software model where each new version + should be better than the previous one; there's no place for unstable + releases, so just keep with the latest one: <b>dillo-3.0.2</b>. + [<a href="../download.html">download</a>] + </blockquote> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Current plans</b> + <blockquote> + The <a href='../Plans.html'>current plans</a> section has its own page now<br> + (also accessible from the left column's top links). + </blockquote> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Code contributions</b> + <blockquote style="margin-top: 0"> + If you plan to contribute to Dillo <i>please</i> take a minute to read + through our <a href="../developer.html">New Developer Info</a>. There you should + find everything you need to know. + </blockquote> + </div> +</div> + + <div class="news"> + <h1> + News + </h1> + + <div class="newsitem"> + <h3>Dillo-3.0.2 has been released!</h3> + <div class="date">05-Dec-2011</div> + + Highlights in this new release include: +<ul> +<li>HTTP digest authentication +<li>More sophisticated handling of linebreaks and whitespace +<li>CSS text-transform property +<li>Locale-independent ASCII character case handling (fixes Turkic locales) +<li>Bind Ctrl-{PageUp,PageDown} to tab-{previous,next} +<li>If not following redirection, show body of redirecting page +<li>Middle click on stylesheet menu item opens in new tab/window +<li>Improved handling of combining characters +</ul> + </div> + + <div class="newsitem"> + <h3>Dillo-3.0.1 has been released!</h3> + <div class="date">23-Sep-2011</div> + + Dillo-3.0.1 brings improved privacy, never sending or accepting + third-party cookies. Also, the <a href="../screenshots/index.html">UI theme</a> can + be changed, keys can be set for paging left/right, and you can disable the + dialog that pops up when quitting with multiple tabs/windows open. + </div> + + <div class="newsitem"> + <h3>Dillo-3.0 has been released!</h3> + <div class="date">08-Sep-2011</div> + + In Dillo3, we have shifted from fltk2 to the fltk-1.3 series. The + experimental status of fltk2 had kept Dillo2 out of a number of + distributions, but fltk-1.3 has already seen + <a href="http://fltk.org/articles.php?L1086">an official release</a>, + clearing the way for dillo to return to all of these distributions + and bring safe lightweight graphical browsing to those users. + <p> + Using fltk-1.3 also means that OSX users can run dillo3 on Cocoa. + <p> + Some other interesting changes: +<ul> +<li>Default binding for close-all changed from Alt-q to Ctrl-q. +<li>Default binding for close-tab changed from Ctrl-q to Ctrl-w. +<li>Default binding for left-tab changed to Shift-Ctrl-Tab. +<li>Rewrote the User Interface: much simpler design and event handling. +<li>Added on-the-fly panel resize (tiny/small/medium and normal/small icons). +<li>'hide-panels' key action now hides the findbar if present, + and toggles display of the control panels otherwise. +<li>Allow multiple search engines to be set in dillorc, with a menu + in the web search dialog to select between them. +<li>Added an optional label to dillorc's search_url.<br> + Format: "[<label> ]<url>" +<li>Add right_click_closes_tab preference (default is middle click). +<li>Allow binding to non-ASCII keys and multimedia keys. +<li>Avoid a certificate dialog storm on some HTTPS sites (BUG#868). +<li>Enable line wrapping for <textarea>. (BUG#903) +<li>Avoid double render after going Back or Forward + (it takes half the time now!) +<li>Implemented a custom tabs handler (to allow fine control of it). +<li>Rewrote dw's crossing-events dispatcher (avoids redundant events). +<li>Fixed a years old bug: stamped tooltips when scrolling with keyboard. +<li>Fixed a border case in URL resolver: empty path + {query|fragment} + (BUG#948) +<li>Cancel the expected URL after offering a download (BUG#982) +<li>Eliminated a pack of 22 compiler warnings (gcc-4.6.1 amd64) +<li>Removed 'large' option of panel_size preference. +<li>Removed --enable-ansi configure option. +<li>Limit saved cookie size. +<li>Wrap image alt text. +<li>Added support for CSS adjacent sibling selectors. +<li>Fix redraw loops and reenabled limit_text_width dillorc option. +<li>Collapse parent's and first child's top margin. +</ul> + </div> + + <div class="newsitem"> + <h3>Dillo-2.2.1 has been released!</h3> + <div class="date">26-Jul-2011</div> + + This is the final release of Dillo2, which depends on the + <a href="http://fltk.org/articles.php?L825">moribund</a> FLTK2, + and the big news is that Dillo3, a port to FLTK-1.3, is expected to be + available in a matter of weeks! FLTK-1.3 is actively developed, and 1.3.0 + was <a href="http://fltk.org/articles.php?L1086">released</a> last + month. + <p> + As for + <a href="../dillo-2.x/ChangeLog.html">new features</a>, + some highlights are: more CSS properties, cookies changes, and handling + of page source now uses a DPI (plugin). + </div> + + <div class="newsitem"> + <h3>Dillo-2.2 has been released!</h3> + <div class="date">11-Feb-2010</div> + + In this release, you will find: a major overhaul of the cookies subsystem + including important security fixes, a reimplementation of the Dillo Plugin + (DPI) API, a configurable HTTP connection limit, improved CSS, and + <a href="http://hg.dillo.org/dillo/file/tip/ChangeLog">plenty more</a>. + </div> + </div> + + </td> + + </tr> +</table> + + +</body> +</html> + diff --git a/old/test/dillo2.tmp1.html b/old/test/dillo2.tmp1.html new file mode 100644 index 0000000..739f91c --- /dev/null +++ b/old/test/dillo2.tmp1.html @@ -0,0 +1,283 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <title> Dillo Web Browser :: + + Home Page + +</title> +<base href=""> +<style type="text/css"> +.date {font-size: 10px; color: #666; margin-bottom: 0.5em} +h1 {background: #ddc; color: #57f} +.sidebar h3 {background: #8ce; font-size: 1em; margin: 0.4em 0 0.2em 0; color: #56f} +.sidebar .items {background: #ccc} +ul li {list-style-type: square} +.newsitem {background: #ada; border-color: #e8e8e8; border-style: solid; border-width: 1px; margin-bottom: 0.5em} +.newsitem h3 {background: #eee; margin-top: 0; margin-bottom: 0.2em; color: #56f} +body {margin: 0} +</style> +</head> + +<body text="black" link="blue" vlink="#403090" bgcolor="#58e" + style="line-height: 1.3"> + + +<table width="100%" cellspacing="0" cellpadding="0"><tr> +<td><img src="../db1.png" alt="The Dillo Web Browser"> +<td width="100%"> + <img src="../db2.png" alt="The Dillo Web Browser" height="124" width="100%"> +</table> + +<table border="0" cellpadding="20" cellspacing="5" width="100%"> + <tr valign="top"> + <td class="sidebar"> + <h3>Dillo</h3> + <div class="items"> + <a href="../index.html">Home</a><br> + <a href="../screenshots/index.html">Screenshots</a><br> + <a href="../download.html">Download</a><br> + <a href="../FAQ.html" title="Frequently asked questions">FAQ</a><br> + <a href="../Compatibility.html">Compatibility</a><br> + <a href="http://hg.dillo.org/dillo/file/tip/ChangeLog"> + Changelog</a><br> + <a href="../Plans.html">Current Plans</a><br> + <a href="../MList.html">Mailing List</a><br> + <a href="../conferences.html">Conferences</a><br> + <a href="../donations.html">Donate</a><br> + </div> + <h3>Users</h3> + <div class="items"> + <a href="../dillo3-help.html">Help</a><br> + <a href="../Icons/index.html">Icons</a><br> + <a href="../help/bug_meter.html">Bug meter</a><br> + </div> + <h3>Bug Tracker</h3> + <div class="items"> + <a href="../bugtrack/Dbugtrack.html">Bug Track Intro</a><br> + <a href="../bugtrack/Dquery.html">View Entries</a><br> + <a href="../bugtrack/Dinsert.html">Bug Insertion</a><br> + <a href="../bugtrack/Dvolunteer.html">Volunteering</a><br> + </div> + <h3>Developers</h3> + <div class="items"> + <a href="../developer.html">New Developer</a><br> + <a href="../documentation.html">Documentation</a> *<br> + <a href="../NC_design.html">Naming&Coding</a><br> + <a href="../source.html">Source repository</a><br> + <a href="../dpi1.html">Dpi1 Spec</a><br> + <a href="../CSS.html">CSS Spec</a><br> + <a href="../D_authors.html">Authors</a><br> + <a href="../authors/jcid-email.html">Security contact</a><br> + </div> + <h3>Related</h3> + <div class="items"> + <a href="../press.html">Dillo in the Press!</a><br> + <a href="../interview.html">Interview</a><br> + <a href="../interview.es.html">Entrevista</a> + <img src="../chile.png" alt="*"><br> + <a href="../Links.html">Links</a><br> + <a href="../logos/logos.html">Art</a><br> + </div> + <h3>Hosted at:</h3> + <div class="items"> + <a href="http://auriga.wearlab.de/"> + <img src="http://www.dillo.org/wearlab.png" alt="[wearLab] @TZI" width="87" height="33"></a> + <p> + <a href="http://www.dillo.org/stats/">Site Statistics</a><br> + <a href="../authors/webmaster-email.html">Webmaster</a> + <p> + <a href="http://www.anybrowser.org/campaign/"> + <img src="http://www.dillo.org/AnyBrowser.gif" width="88" height="31" + alt="anybrowser"></a> + </div> + <td valign="top" align="left" width="100%"> + + + <h1 style="margin-top: 0.3em"> + Welcome to the Dillo Project! + </h1> + +<div style="background: #ada; margin-top: 0.5em"> + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">What is Dillo?</b> + <ul> + <li> Dillo is a + <a href='../Compatibility.html'>multi-platform</a> + graphical web browser known for its speed and + <a href='../memory.html'>small footprint</a>. </li> + + <li> Dillo is written in C and C++. </li> + + <li> Dillo is based on <a href='http://www.fltk.org'>FLTK</a>, the Fast + Light Toolkit (statically-linked by default!). </li> + + <li> Dillo is free software made available under the terms of the GNU + General Public License (GPLv3). </li> + + <li> Dillo strives to be friendly both to users and developers. </li> + + <li> Dillo helps web authors to comply with web standards by using the + <a href='../help/bug_meter.html'>bug meter</a>.</li> + </ul> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Project objectives</b> + <ul> + <li>The democratization of internet information access.</li> + <li>Personal security and privacy.</li> + <li>High software efficiency.</li> + <p> + [<a href='../funding/objectives.html'>more info</a>] + </ul> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Current version</b> + <blockquote> + Dillo follows an evolving software model where each new version + should be better than the previous one; there's no place for unstable + releases, so just keep with the latest one: <b>dillo-3.0.2</b>. + [<a href="../download.html">download</a>] + </blockquote> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Current plans</b> + <blockquote> + The <a href='../Plans.html'>current plans</a> section has its own page now<br> + (also accessible from the left column's top links). + </blockquote> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Code contributions</b> + <blockquote style="margin-top: 0"> + If you plan to contribute to Dillo <i>please</i> take a minute to read + through our <a href="../developer.html">New Developer Info</a>. There you should + find everything you need to know. + </blockquote> + </div> +</div> + + <div class="news"> + <h1> + News + </h1> + + <div class="newsitem"> + <h3>Dillo-3.0.2 has been released!</h3> + <div class="date">05-Dec-2011</div> + + Highlights in this new release include: +<ul> +<li>HTTP digest authentication +<li>More sophisticated handling of linebreaks and whitespace +<li>CSS text-transform property +<li>Locale-independent ASCII character case handling (fixes Turkic locales) +<li>Bind Ctrl-{PageUp,PageDown} to tab-{previous,next} +<li>If not following redirection, show body of redirecting page +<li>Middle click on stylesheet menu item opens in new tab/window +<li>Improved handling of combining characters +</ul> + </div> + + <div class="newsitem"> + <h3>Dillo-3.0.1 has been released!</h3> + <div class="date">23-Sep-2011</div> + + Dillo-3.0.1 brings improved privacy, never sending or accepting + third-party cookies. Also, the <a href="../screenshots/index.html">UI theme</a> can + be changed, keys can be set for paging left/right, and you can disable the + dialog that pops up when quitting with multiple tabs/windows open. + </div> + + <div class="newsitem"> + <h3>Dillo-3.0 has been released!</h3> + <div class="date">08-Sep-2011</div> + + In Dillo3, we have shifted from fltk2 to the fltk-1.3 series. The + experimental status of fltk2 had kept Dillo2 out of a number of + distributions, but fltk-1.3 has already seen + <a href="http://fltk.org/articles.php?L1086">an official release</a>, + clearing the way for dillo to return to all of these distributions + and bring safe lightweight graphical browsing to those users. + <p> + Using fltk-1.3 also means that OSX users can run dillo3 on Cocoa. + <p> + Some other interesting changes: +<ul> +<li>Default binding for close-all changed from Alt-q to Ctrl-q. +<li>Default binding for close-tab changed from Ctrl-q to Ctrl-w. +<li>Default binding for left-tab changed to Shift-Ctrl-Tab. +<li>Rewrote the User Interface: much simpler design and event handling. +<li>Added on-the-fly panel resize (tiny/small/medium and normal/small icons). +<li>'hide-panels' key action now hides the findbar if present, + and toggles display of the control panels otherwise. +<li>Allow multiple search engines to be set in dillorc, with a menu + in the web search dialog to select between them. +<li>Added an optional label to dillorc's search_url.<br> + Format: "[<label> ]<url>" +<li>Add right_click_closes_tab preference (default is middle click). +<li>Allow binding to non-ASCII keys and multimedia keys. +<li>Avoid a certificate dialog storm on some HTTPS sites (BUG#868). +<li>Enable line wrapping for <textarea>. (BUG#903) +<li>Avoid double render after going Back or Forward + (it takes half the time now!) +<li>Implemented a custom tabs handler (to allow fine control of it). +<li>Rewrote dw's crossing-events dispatcher (avoids redundant events). +<li>Fixed a years old bug: stamped tooltips when scrolling with keyboard. +<li>Fixed a border case in URL resolver: empty path + {query|fragment} + (BUG#948) +<li>Cancel the expected URL after offering a download (BUG#982) +<li>Eliminated a pack of 22 compiler warnings (gcc-4.6.1 amd64) +<li>Removed 'large' option of panel_size preference. +<li>Removed --enable-ansi configure option. +<li>Limit saved cookie size. +<li>Wrap image alt text. +<li>Added support for CSS adjacent sibling selectors. +<li>Fix redraw loops and reenabled limit_text_width dillorc option. +<li>Collapse parent's and first child's top margin. +</ul> + </div> + + <div class="newsitem"> + <h3>Dillo-2.2.1 has been released!</h3> + <div class="date">26-Jul-2011</div> + + This is the final release of Dillo2, which depends on the + <a href="http://fltk.org/articles.php?L825">moribund</a> FLTK2, + and the big news is that Dillo3, a port to FLTK-1.3, is expected to be + available in a matter of weeks! FLTK-1.3 is actively developed, and 1.3.0 + was <a href="http://fltk.org/articles.php?L1086">released</a> last + month. + <p> + As for + <a href="../dillo-2.x/ChangeLog.html">new features</a>, + some highlights are: more CSS properties, cookies changes, and handling + of page source now uses a DPI (plugin). + </div> + + <div class="newsitem"> + <h3>Dillo-2.2 has been released!</h3> + <div class="date">11-Feb-2010</div> + + In this release, you will find: a major overhaul of the cookies subsystem + including important security fixes, a reimplementation of the Dillo Plugin + (DPI) API, a configurable HTTP connection limit, improved CSS, and + <a href="http://hg.dillo.org/dillo/file/tip/ChangeLog">plenty more</a>. + </div> + </div> + + </td> + + </tr> +</table> + + +</body> +</html> + diff --git a/old/test/dillo2.tmp2.html b/old/test/dillo2.tmp2.html new file mode 100644 index 0000000..08867b5 --- /dev/null +++ b/old/test/dillo2.tmp2.html @@ -0,0 +1,283 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <title> Dillo Web Browser :: + + Home Page + +</title> +<base href=""> +<style type="text/css"> +.date {font-size: 10px; color: #666; margin-bottom: 0.5em} +h1 {background: #88f; color: #eff} +.sidebar h3 {background: #97d; font-size: 1em; margin: 0.4em 0 0.2em 0; color: #eff} +.sidebar .items {background: #ccc} +ul li {list-style-type: square} +.newsitem {background: #ccf; border-color: #e8e8e8; border-style: solid; border-width: 1px; margin-bottom: 0.5em} +.newsitem h3 {background: #dfd; margin-top: 0; margin-bottom: 0.2em; color: #56f} +body {margin: 0} +</style> +</head> + +<body text="black" link="#191970" vlink="#403090" bgcolor="#69e" + style="line-height: 1.3"> + + +<table width="100%" cellspacing="0" cellpadding="0"><tr> +<td><img src="../db1.png" alt="The Dillo Web Browser"> +<td width="100%"> + <img src="../db2.png" alt="The Dillo Web Browser" height="124" width="100%"> +</table> + +<table border="0" cellpadding="20" cellspacing="5" width="100%"> + <tr valign="top"> + <td class="sidebar"> + <h3>Dillo</h3> + <div class="items"> + <a href="../index.html">Home</a><br> + <a href="../screenshots/index.html">Screenshots</a><br> + <a href="../download.html">Download</a><br> + <a href="../FAQ.html" title="Frequently asked questions">FAQ</a><br> + <a href="../Compatibility.html">Compatibility</a><br> + <a href="http://hg.dillo.org/dillo/file/tip/ChangeLog"> + Changelog</a><br> + <a href="../Plans.html">Current Plans</a><br> + <a href="../MList.html">Mailing List</a><br> + <a href="../conferences.html">Conferences</a><br> + <a href="../donations.html">Donate</a><br> + </div> + <h3>Users</h3> + <div class="items"> + <a href="../dillo3-help.html">Help</a><br> + <a href="../Icons/index.html">Icons</a><br> + <a href="../help/bug_meter.html">Bug meter</a><br> + </div> + <h3>Bug Tracker</h3> + <div class="items"> + <a href="../bugtrack/Dbugtrack.html">Bug Track Intro</a><br> + <a href="../bugtrack/Dquery.html">View Entries</a><br> + <a href="../bugtrack/Dinsert.html">Bug Insertion</a><br> + <a href="../bugtrack/Dvolunteer.html">Volunteering</a><br> + </div> + <h3>Developers</h3> + <div class="items"> + <a href="../developer.html">New Developer</a><br> + <a href="../documentation.html">Documentation</a> *<br> + <a href="../NC_design.html">Naming&Coding</a><br> + <a href="../source.html">Source repository</a><br> + <a href="../dpi1.html">Dpi1 Spec</a><br> + <a href="../CSS.html">CSS Spec</a><br> + <a href="../D_authors.html">Authors</a><br> + <a href="../authors/jcid-email.html">Security contact</a><br> + </div> + <h3>Related</h3> + <div class="items"> + <a href="../press.html">Dillo in the Press!</a><br> + <a href="../interview.html">Interview</a><br> + <a href="../interview.es.html">Entrevista</a> + <img src="../chile.png" alt="*"><br> + <a href="../Links.html">Links</a><br> + <a href="../logos/logos.html">Art</a><br> + </div> + <h3>Hosted at:</h3> + <div class="items"> + <a href="http://auriga.wearlab.de/"> + <img src="http://www.dillo.org/wearlab.png" alt="[wearLab] @TZI" width="87" height="33"></a> + <p> + <a href="http://www.dillo.org/stats/">Site Statistics</a><br> + <a href="../authors/webmaster-email.html">Webmaster</a> + <p> + <a href="http://www.anybrowser.org/campaign/"> + <img src="http://www.dillo.org/AnyBrowser.gif" width="88" height="31" + alt="anybrowser"></a> + </div> + <td valign="top" align="left" width="100%"> + + + <h1 style="margin-top: 0.3em"> + Welcome to the Dillo Project! + </h1> + +<div style="background: #ccf; margin-top: 0.5em"> + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">What is Dillo?</b> + <ul> + <li> Dillo is a + <a href='../Compatibility.html'>multi-platform</a> + graphical web browser known for its speed and + <a href='../memory.html'>small footprint</a>. </li> + + <li> Dillo is written in C and C++. </li> + + <li> Dillo is based on <a href='http://www.fltk.org'>FLTK</a>, the Fast + Light Toolkit (statically-linked by default!). </li> + + <li> Dillo is free software made available under the terms of the GNU + General Public License (GPLv3). </li> + + <li> Dillo strives to be friendly both to users and developers. </li> + + <li> Dillo helps web authors to comply with web standards by using the + <a href='../help/bug_meter.html'>bug meter</a>.</li> + </ul> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Project objectives</b> + <ul> + <li>The democratization of internet information access.</li> + <li>Personal security and privacy.</li> + <li>High software efficiency.</li> + <p> + [<a href='../funding/objectives.html'>more info</a>] + </ul> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Current version</b> + <blockquote> + Dillo follows an evolving software model where each new version + should be better than the previous one; there's no place for unstable + releases, so just keep with the latest one: <b>dillo-3.0.2</b>. + [<a href="../download.html">download</a>] + </blockquote> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Current plans</b> + <blockquote> + The <a href='../Plans.html'>current plans</a> section has its own page now<br> + (also accessible from the left column's top links). + </blockquote> + </div> + + <div style="margin-bottom: 0.3em"> + <b style="color: #56f">Code contributions</b> + <blockquote style="margin-top: 0"> + If you plan to contribute to Dillo <i>please</i> take a minute to read + through our <a href="../developer.html">New Developer Info</a>. There you should + find everything you need to know. + </blockquote> + </div> +</div> + + <div class="news"> + <h1> + News + </h1> + + <div class="newsitem"> + <h3>Dillo-3.0.2 has been released!</h3> + <div class="date">05-Dec-2011</div> + + Highlights in this new release include: +<ul> +<li>HTTP digest authentication +<li>More sophisticated handling of linebreaks and whitespace +<li>CSS text-transform property +<li>Locale-independent ASCII character case handling (fixes Turkic locales) +<li>Bind Ctrl-{PageUp,PageDown} to tab-{previous,next} +<li>If not following redirection, show body of redirecting page +<li>Middle click on stylesheet menu item opens in new tab/window +<li>Improved handling of combining characters +</ul> + </div> + + <div class="newsitem"> + <h3>Dillo-3.0.1 has been released!</h3> + <div class="date">23-Sep-2011</div> + + Dillo-3.0.1 brings improved privacy, never sending or accepting + third-party cookies. Also, the <a href="../screenshots/index.html">UI theme</a> can + be changed, keys can be set for paging left/right, and you can disable the + dialog that pops up when quitting with multiple tabs/windows open. + </div> + + <div class="newsitem"> + <h3>Dillo-3.0 has been released!</h3> + <div class="date">08-Sep-2011</div> + + In Dillo3, we have shifted from fltk2 to the fltk-1.3 series. The + experimental status of fltk2 had kept Dillo2 out of a number of + distributions, but fltk-1.3 has already seen + <a href="http://fltk.org/articles.php?L1086">an official release</a>, + clearing the way for dillo to return to all of these distributions + and bring safe lightweight graphical browsing to those users. + <p> + Using fltk-1.3 also means that OSX users can run dillo3 on Cocoa. + <p> + Some other interesting changes: +<ul> +<li>Default binding for close-all changed from Alt-q to Ctrl-q. +<li>Default binding for close-tab changed from Ctrl-q to Ctrl-w. +<li>Default binding for left-tab changed to Shift-Ctrl-Tab. +<li>Rewrote the User Interface: much simpler design and event handling. +<li>Added on-the-fly panel resize (tiny/small/medium and normal/small icons). +<li>'hide-panels' key action now hides the findbar if present, + and toggles display of the control panels otherwise. +<li>Allow multiple search engines to be set in dillorc, with a menu + in the web search dialog to select between them. +<li>Added an optional label to dillorc's search_url.<br> + Format: "[<label> ]<url>" +<li>Add right_click_closes_tab preference (default is middle click). +<li>Allow binding to non-ASCII keys and multimedia keys. +<li>Avoid a certificate dialog storm on some HTTPS sites (BUG#868). +<li>Enable line wrapping for <textarea>. (BUG#903) +<li>Avoid double render after going Back or Forward + (it takes half the time now!) +<li>Implemented a custom tabs handler (to allow fine control of it). +<li>Rewrote dw's crossing-events dispatcher (avoids redundant events). +<li>Fixed a years old bug: stamped tooltips when scrolling with keyboard. +<li>Fixed a border case in URL resolver: empty path + {query|fragment} + (BUG#948) +<li>Cancel the expected URL after offering a download (BUG#982) +<li>Eliminated a pack of 22 compiler warnings (gcc-4.6.1 amd64) +<li>Removed 'large' option of panel_size preference. +<li>Removed --enable-ansi configure option. +<li>Limit saved cookie size. +<li>Wrap image alt text. +<li>Added support for CSS adjacent sibling selectors. +<li>Fix redraw loops and reenabled limit_text_width dillorc option. +<li>Collapse parent's and first child's top margin. +</ul> + </div> + + <div class="newsitem"> + <h3>Dillo-2.2.1 has been released!</h3> + <div class="date">26-Jul-2011</div> + + This is the final release of Dillo2, which depends on the + <a href="http://fltk.org/articles.php?L825">moribund</a> FLTK2, + and the big news is that Dillo3, a port to FLTK-1.3, is expected to be + available in a matter of weeks! FLTK-1.3 is actively developed, and 1.3.0 + was <a href="http://fltk.org/articles.php?L1086">released</a> last + month. + <p> + As for + <a href="../dillo-2.x/ChangeLog.html">new features</a>, + some highlights are: more CSS properties, cookies changes, and handling + of page source now uses a DPI (plugin). + </div> + + <div class="newsitem"> + <h3>Dillo-2.2 has been released!</h3> + <div class="date">11-Feb-2010</div> + + In this release, you will find: a major overhaul of the cookies subsystem + including important security fixes, a reimplementation of the Dillo Plugin + (DPI) API, a configurable HTTP connection limit, improved CSS, and + <a href="http://hg.dillo.org/dillo/file/tip/ChangeLog">plenty more</a>. + </div> + </div> + + </td> + + </tr> +</table> + + +</body> +</html> + diff --git a/old/test/dillo_tabs.png b/old/test/dillo_tabs.png Binary files differnew file mode 100644 index 0000000..2bd75e0 --- /dev/null +++ b/old/test/dillo_tabs.png diff --git a/old/test/dillobanner2.png b/old/test/dillobanner2.png Binary files differnew file mode 100644 index 0000000..c8c102e --- /dev/null +++ b/old/test/dillobanner2.png diff --git a/old/test/discard-syntax-errors.html b/old/test/discard-syntax-errors.html new file mode 100644 index 0000000..cbe148a --- /dev/null +++ b/old/test/discard-syntax-errors.html @@ -0,0 +1,52 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<title>discard CSS syntax errors</title> + +<style type="text/css" media="all"> + +.word { + background-color: orange +} + +table.separate { + border-collapse: separate; +} +table.separatebogus { + border-collapse: separate; + margin: 10px foo bar; + border: 20px #foo bar; + padding: 40px baz; +} + +.tdbogus { + margin: 5px baz; + border: 10px solido #aaa; + padding: 20px 34; +} +.tdok { + border: 5px solid red; +} +</style> +</head> + +<body bgcolor="#F0F8FF"> + +<h3>Separate:</h3> +These tables should render equal when CSS syntax errors are discarded: +<p> + <table class="separate" border=1> + <tr><td>Carnivores<td><i class="word">Primates</i> + <tr><td class="tdok">Tiger<td>Sifaka + </table> +<br> + <table class="separatebogus" border=1> + <tr><td class="tdbogus">Carnivores<td><i class="word">Primates</i> + <tr><td class="tdok">Tiger<td>Sifaka + </table> +<br> +<hr> + +</body> +</html> diff --git a/old/test/empty.pdf b/old/test/empty.pdf new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/old/test/empty.pdf diff --git a/old/test/filtering.1.patch b/old/test/filtering.1.patch new file mode 100644 index 0000000..3daa93f --- /dev/null +++ b/old/test/filtering.1.patch @@ -0,0 +1,554 @@ +diff -r f5a186303478 src/cache.c +--- a/src/cache.c Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/cache.c Sat Sep 12 01:56:25 2009 +0000 +@@ -937,7 +937,7 @@ static int Cache_redirect(CacheEntry_t * + NewUrl = a_Url_new(URL_STR_(entry->Location), URL_STR_(entry->Url)); + if (entry->Flags & CA_TempRedirect) + a_Url_set_flags(NewUrl, URL_FLAGS(NewUrl) | URL_E2EQuery); +- a_Nav_push(bw, NewUrl); ++ a_Nav_push(bw, NewUrl, entry->Url); + a_Url_free(NewUrl); + } else { + /* Sub entity redirection (most probably an image) */ +diff -r f5a186303478 src/capi.c +--- a/src/capi.c Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/capi.c Sat Sep 12 01:56:25 2009 +0000 +@@ -15,6 +15,7 @@ + * to get the requests served. Kind of a broker. + */ + ++#include <ctype.h> /* isalpha */ + #include <string.h> + + #include "msg.h" +@@ -311,6 +312,86 @@ static char *Capi_dpi_build_cmd(DilloWeb + } + + /* ++ * When dillo wants to open an URL, this can be either due to user action ++ * (e.g., typing in an URL, clicking a link), or automatic (HTTP header ++ * indicates redirection, META HTML tag with refresh attribute and 0 delay, ++ * and images and stylesheets on an HTML page when autoloading is enabled). ++ * ++ * For a user request, the action will be permitted. ++ * For an automatic request, permission to load depends on the filter set ++ * by the user. ++ */ ++static bool_t Capi_filters_allow(const DilloUrl *wanted, ++ const DilloUrl *requester) ++{ ++ bool_t ret; ++ ++ if (requester == NULL) { ++ /* request made by user */ ++ ret = TRUE; ++ } else { ++ switch (prefs.filter_auto_requests) { ++ case PREFS_FILTER_SAME_HOST: ++ ret = dStrcasecmp(URL_HOST(wanted), URL_HOST(requester)) == 0; ++ break; ++ case PREFS_FILTER_SAME_DOMAIN: ++ { ++ const char *req_host = URL_HOST(requester), ++ *want_host = URL_HOST(wanted); ++ uint_t req_hostlen = strlen(req_host); ++ ++ MSG("Capi_filters_allow:\n%s\n%s\n", req_host, want_host); ++ if (req_hostlen > 0 && !isalpha(req_host[req_hostlen - 1])) { ++ /* for IP addrs, match fully */ ++ ret = dStrcasecmp(req_host, want_host) == 0; ++ } else { ++ /* For hostnames, let's say for now that if you have two dots, ++ * we'll ignore everything through the first dot, e.g., ++ * 'www.dillo.org' => 'dillo.org' ++ * ++ * TODO: it sounds like requiring a third dot would be best for ++ * ai,au,bd,bh,ck,eg,et,fk,il,in,kh,kr,mk,mt,na,np,nz,pg,pk,qa, ++ * sa,sb,sg,sv,ua,ug,uk,uy,vn,za,zw, name ++ */ ++ uint_t want_hostlen; ++ char *dot = strchr(req_host, '.'); ++ ++ if (dot && strchr(dot + 1, '.')) { ++ req_hostlen -= dot + 1 - req_host; ++ req_host = dot + 1; ++ } ++ want_hostlen = strlen(want_host); ++ ++ if (want_hostlen < req_hostlen) { ++ ret = FALSE; ++ } else { ++ if (want_hostlen > req_hostlen && ++ want_host[want_hostlen - req_hostlen - 1] == '.') { ++ /* If the longer, leading portion of the host ends with ++ * a dot, trim it off, e.g., 'hg.dillo.org' => 'dillo.org' ++ * but 'hgdillo.org' would be unchanged. ++ */ ++ want_host += want_hostlen - req_hostlen; ++ } ++ ret = dStrcasecmp(req_host, want_host) == 0; ++ } ++ } ++ if (ret) ++ MSG("ALLOW\n"); ++ else ++ MSG("BLOCK\n"); ++ break; ++ } ++ case PREFS_FILTER_ALLOW_ALL: ++ default: ++ ret = TRUE; ++ break; ++ } ++ } ++ return ret; ++} ++ ++/* + * Most used function for requesting a URL. + * TODO: clean up the ad-hoc bindings with an API that allows dynamic + * addition of new plugins. +@@ -325,6 +406,9 @@ int a_Capi_open_url(DilloWeb *web, CA_Ca + capi_conn_t *conn = NULL; + const char *scheme = URL_SCHEME(web->url); + int safe = 0, ret = 0, use_cache = 0; ++ ++ dReturn_val_if_fail((a_Capi_get_flags(web->url) & CAPI_IsCached) || ++ Capi_filters_allow(web->url, web->requester), 0); + + /* reload test */ + reload = (!(a_Capi_get_flags(web->url) & CAPI_IsCached) || +diff -r f5a186303478 src/dillo.cc +--- a/src/dillo.cc Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/dillo.cc Sat Sep 12 01:56:25 2009 +0000 +@@ -330,7 +330,7 @@ int main(int argc, char **argv) + + if (idx == argc) { + /* No URLs/files on cmdline. Send startup screen */ +- a_Nav_push(bw, prefs.start_page); ++ a_Nav_push(bw, prefs.start_page, NULL); + } else { + for (int i = idx; i < argc; i++) { + DilloUrl *start_url = makeStartUrl(argv[i], local); +@@ -344,7 +344,7 @@ int main(int argc, char **argv) + a_UIcmd_open_url_nw(bw, start_url); + } + } else { +- a_Nav_push(bw, start_url); ++ a_Nav_push(bw, start_url, NULL); + } + a_Url_free(start_url); + } +diff -r f5a186303478 src/form.cc +--- a/src/form.cc Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/form.cc Sat Sep 12 01:56:25 2009 +0000 +@@ -949,7 +949,7 @@ void DilloHtmlForm::submit(DilloHtmlInpu + a_Nav_push_nw(html->bw, url); + } + } else { +- a_Nav_push(html->bw, url); ++ a_Nav_push(html->bw, url, NULL); + } + a_Url_free(url); + } +diff -r f5a186303478 src/html.cc +--- a/src/html.cc Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/html.cc Sat Sep 12 01:56:26 2009 +0000 +@@ -104,8 +104,8 @@ static const char *Html_get_attr2(DilloH + const char *attrname, + int tag_parsing_flags); + static int Html_write_raw(DilloHtml *html, char *buf, int bufsize, int Eof); +-static void Html_load_image(BrowserWindow *bw, DilloUrl *url, +- DilloImage *image); ++static bool Html_load_image(BrowserWindow *bw, DilloUrl *url, ++ const DilloUrl *requester, DilloImage *image); + static void Html_callback(int Op, CacheClient_t *Client); + static void Html_tag_cleanup_at_close(DilloHtml *html, int TagIdx); + +@@ -669,12 +669,21 @@ void DilloHtml::loadImages (const DilloU + { + dReturn_if_fail (bw->nav_expecting == FALSE); + ++ /* If the user asked for a specific URL, the user (NULL) is the requester, ++ * but if the user just asked for all URLs, use the page URL as the ++ * requester. If the possible patterns become more complex, it might be ++ * good to have the caller supply the requester instead. ++ */ ++ const DilloUrl *requester = pattern ? NULL : this->page_url; ++ + for (int i = 0; i < images->size(); i++) { + if (images->get(i)->image) { + if ((!pattern) || (!a_Url_cmp(images->get(i)->url, pattern))) { +- Html_load_image(bw, images->get(i)->url, images->get(i)->image); +- a_Image_unref (images->get(i)->image); +- images->get(i)->image = NULL; // web owns it now ++ if (Html_load_image(bw, images->get(i)->url, requester, ++ images->get(i)->image)) { ++ a_Image_unref (images->get(i)->image); ++ images->get(i)->image = NULL; // web owns it now ++ } + } + } + } +@@ -2100,9 +2109,10 @@ DilloImage *a_Html_image_new(DilloHtml * + + load_now = prefs.load_images || + (a_Capi_get_flags_with_redirection(url) & CAPI_IsCached); +- Html_add_new_linkimage(html, &url, load_now ? NULL : Image); ++ bool loading = false; + if (load_now) +- Html_load_image(html->bw, url, Image); ++ loading = Html_load_image(html->bw, url, html->page_url, Image); ++ Html_add_new_linkimage(html, &url, loading ? NULL : Image); + + dFree(width_ptr); + dFree(height_ptr); +@@ -2113,13 +2123,13 @@ DilloImage *a_Html_image_new(DilloHtml * + /* + * Tell cache to retrieve image + */ +-static void Html_load_image(BrowserWindow *bw, DilloUrl *url, +- DilloImage *Image) ++static bool Html_load_image(BrowserWindow *bw, DilloUrl *url, ++ const DilloUrl *requester, DilloImage *Image) + { + DilloWeb *Web; + int ClientKey; + /* Fill a Web structure for the cache query */ +- Web = a_Web_new(url); ++ Web = a_Web_new(url, requester); + Web->bw = bw; + Web->Image = Image; + a_Image_ref(Image); +@@ -2129,6 +2139,7 @@ static void Html_load_image(BrowserWindo + a_Bw_add_client(bw, ClientKey, 0); + a_Bw_add_url(bw, url); + } ++ return ClientKey != 0; + } + + /* +@@ -2943,7 +2954,7 @@ void a_Html_load_stylesheet(DilloHtml *h + } else { + /* Fill a Web structure for the cache query */ + int ClientKey; +- DilloWeb *Web = a_Web_new(url); ++ DilloWeb *Web = a_Web_new(url, html->page_url); + Web->bw = html->bw; + if ((ClientKey = a_Capi_open_url(Web, Html_css_load_callback, NULL))) { + ++html->bw->NumPendingStyleSheets; +diff -r f5a186303478 src/nav.c +--- a/src/nav.c Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/nav.c Sat Sep 12 01:56:26 2009 +0000 +@@ -191,7 +191,8 @@ static void Nav_stack_clean(BrowserWindo + * This function requests the page's root-URL; images and related stuff + * are fetched directly by the HTML module. + */ +-static void Nav_open_url(BrowserWindow *bw, const DilloUrl *url, int offset) ++static void Nav_open_url(BrowserWindow *bw, const DilloUrl *url, ++ const DilloUrl *requester, int offset) + { + DilloUrl *old_url; + bool_t MustLoad, ForceReload, Repush, IgnoreScroll; +@@ -232,7 +233,7 @@ static void Nav_open_url(BrowserWindow * + + // a_Menu_pagemarks_new(bw); + +- Web = a_Web_new(url); ++ Web = a_Web_new(url, requester); + Web->bw = bw; + Web->flags |= WEB_RootUrl; + if ((ClientKey = a_Capi_open_url(Web, NULL, NULL)) != 0) { +@@ -341,7 +342,8 @@ void a_Nav_expect_done(BrowserWindow *bw + * - Set bw to expect the URL data + * - Ask the cache to feed back the requested URL (via Nav_open_url) + */ +-void a_Nav_push(BrowserWindow *bw, const DilloUrl *url) ++void a_Nav_push(BrowserWindow *bw, const DilloUrl *url, ++ const DilloUrl *requester) + { + dReturn_if_fail (bw != NULL); + +@@ -353,7 +355,7 @@ void a_Nav_push(BrowserWindow *bw, const + a_Nav_cancel_expect(bw); + bw->nav_expect_url = a_Url_dup(url); + bw->nav_expecting = TRUE; +- Nav_open_url(bw, url, 0); ++ Nav_open_url(bw, url, requester, 0); + } + + /* +@@ -370,7 +372,7 @@ static void Nav_repush(BrowserWindow *bw + a_Url_set_flags(url, URL_FLAGS(url) | URL_ReloadFromCache); + bw->nav_expect_url = a_Url_dup(url); + bw->nav_expecting = TRUE; +- Nav_open_url(bw, url, 0); ++ Nav_open_url(bw, url, NULL, 0); + a_Url_free(url); + } + } +@@ -407,7 +409,7 @@ static void Nav_redirection0_callback(vo + + if (bw->meta_refresh_status == 2) { + Nav_stack_move_ptr(bw, -1); +- a_Nav_push(bw, bw->meta_refresh_url); ++ a_Nav_push(bw, bw->meta_refresh_url,a_History_get_url(NAV_TOP_UIDX(bw))); + } + a_Url_free(bw->meta_refresh_url); + bw->meta_refresh_url = NULL; +@@ -441,9 +443,11 @@ void a_Nav_push_nw(BrowserWindow *bw, co + + a_UIcmd_get_wh(bw, &w, &h); + newbw = a_UIcmd_browser_window_new(w, h, 0, bw); +- a_Nav_push(newbw, url); +-} +- ++ a_Nav_push(newbw, url, NULL); ++} ++ ++#if 0 ++we can remove this + /* + * Wraps a_Nav_push to match 'DwPage->link' function type + */ +@@ -451,7 +455,7 @@ void a_Nav_vpush(void *vbw, const DilloU + { + a_Nav_push(vbw, url); + } +- ++#endif + /* + * Send the browser back to previous page + */ +@@ -462,7 +466,7 @@ void a_Nav_back(BrowserWindow *bw) + a_Nav_cancel_expect(bw); + if (--idx >= 0){ + a_UIcmd_set_msg(bw, ""); +- Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), -1); ++ Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), NULL, -1); + } + } + +@@ -476,7 +480,7 @@ void a_Nav_forw(BrowserWindow *bw) + a_Nav_cancel_expect(bw); + if (++idx < a_Nav_stack_size(bw)) { + a_UIcmd_set_msg(bw, ""); +- Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), +1); ++ Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), NULL, +1); + } + } + +@@ -485,7 +489,7 @@ void a_Nav_forw(BrowserWindow *bw) + */ + void a_Nav_home(BrowserWindow *bw) + { +- a_Nav_push(bw, prefs.home); ++ a_Nav_push(bw, prefs.home, NULL); + } + + /* +@@ -506,7 +510,7 @@ static void Nav_reload(BrowserWindow *bw + a_Url_set_flags(ReqURL, URL_FLAGS(ReqURL) & ~URL_SpamSafe); + bw->nav_expect_url = ReqURL; + bw->nav_expecting = TRUE; +- Nav_open_url(bw, ReqURL, 0); ++ Nav_open_url(bw, ReqURL, NULL, 0); + } + } + +@@ -548,7 +552,7 @@ void a_Nav_jump(BrowserWindow *bw, int o + a_Nav_push_nw(bw, a_History_get_url(NAV_UIDX(bw,idx))); + } else { + a_Nav_cancel_expect(bw); +- Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), offset); ++ Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), NULL, offset); + a_UIcmd_set_buttons_sens(bw); + } + } +@@ -585,7 +589,7 @@ void a_Nav_save_url(BrowserWindow *bw, + void a_Nav_save_url(BrowserWindow *bw, + const DilloUrl *url, const char *filename) + { +- DilloWeb *Web = a_Web_new(url); ++ DilloWeb *Web = a_Web_new(url, NULL); + Web->bw = bw; + Web->filename = dStrdup(filename); + Web->flags |= WEB_Download; +diff -r f5a186303478 src/nav.h +--- a/src/nav.h Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/nav.h Sat Sep 12 01:56:26 2009 +0000 +@@ -14,7 +14,8 @@ extern "C" { + #endif /* __cplusplus */ + + void a_Nav_redirection0(BrowserWindow *bw, const DilloUrl *new_url); +-void a_Nav_push(BrowserWindow *bw, const DilloUrl *url); ++void a_Nav_push(BrowserWindow *bw, const DilloUrl *url, ++ const DilloUrl *requester); + void a_Nav_push_nw(BrowserWindow *bw, const DilloUrl *url); + void a_Nav_vpush(void *vbw, const DilloUrl *url); + void a_Nav_repush(BrowserWindow *bw); +diff -r f5a186303478 src/prefs.c +--- a/src/prefs.c Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/prefs.c Sat Sep 12 01:56:26 2009 +0000 +@@ -38,6 +38,7 @@ void a_Prefs_init(void) + prefs.buffered_drawing = 1; + prefs.contrast_visited_color = TRUE; + prefs.enterpress_forces_submit = FALSE; ++ prefs.filter_auto_requests = PREFS_FILTER_ALLOW_ALL; + prefs.focus_new_tab = TRUE; + prefs.font_cursive = dStrdup(PREFS_FONT_CURSIVE); + prefs.font_factor = 1.0; +diff -r f5a186303478 src/prefs.h +--- a/src/prefs.h Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/prefs.h Sat Sep 12 01:56:26 2009 +0000 +@@ -25,6 +25,10 @@ extern "C" { + + /* Panel sizes */ + enum { P_tiny = 0, P_small, P_medium, P_large }; ++ ++enum {PREFS_FILTER_ALLOW_ALL, ++ PREFS_FILTER_SAME_HOST, ++ PREFS_FILTER_SAME_DOMAIN}; + + typedef struct _DilloPrefs DilloPrefs; + +@@ -68,6 +72,7 @@ struct _DilloPrefs { + bool_t load_images; + bool_t load_stylesheets; + bool_t parse_embedded_css; ++ int filter_auto_requests; + int32_t buffered_drawing; + char *font_serif; + char *font_sans_serif; +diff -r f5a186303478 src/prefsparser.cc +--- a/src/prefsparser.cc Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/prefsparser.cc Sat Sep 12 01:56:26 2009 +0000 +@@ -26,6 +26,7 @@ typedef enum { + PREFS_INT32, + PREFS_DOUBLE, + PREFS_GEOMETRY, ++ PREFS_FILTER, + PREFS_PANEL_SIZE + } PrefType_t; + +@@ -50,6 +51,7 @@ int PrefsParser::parseOption(char *name, + { "contrast_visited_color", &prefs.contrast_visited_color, PREFS_BOOL }, + { "enterpress_forces_submit", &prefs.enterpress_forces_submit, + PREFS_BOOL }, ++ { "filter_auto_requests", &prefs.filter_auto_requests, PREFS_FILTER }, + { "focus_new_tab", &prefs.focus_new_tab, PREFS_BOOL }, + { "font_cursive", &prefs.font_cursive, PREFS_STRING }, + { "font_factor", &prefs.font_factor, PREFS_DOUBLE }, +@@ -135,6 +137,17 @@ int PrefsParser::parseOption(char *name, + a_Misc_parse_geometry(value, &prefs.xpos, &prefs.ypos, + &prefs.width, &prefs.height); + break; ++ case PREFS_FILTER: ++ if (!dStrcasecmp(value, "same_host")) ++ prefs.filter_auto_requests = PREFS_FILTER_SAME_HOST; ++ else if (!dStrcasecmp(value, "same_domain")) ++ prefs.filter_auto_requests = PREFS_FILTER_SAME_DOMAIN; ++ else { ++ if (dStrcasecmp(value, "allow_all")) ++ MSG_WARN("prefs: unrecognized value for filter_auto_requests\n"); ++ prefs.filter_auto_requests = PREFS_FILTER_ALLOW_ALL; ++ } ++ break; + case PREFS_PANEL_SIZE: + if (!dStrcasecmp(value, "tiny")) + prefs.panel_size = P_tiny; +diff -r f5a186303478 src/uicmd.cc +--- a/src/uicmd.cc Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/uicmd.cc Sat Sep 12 01:56:26 2009 +0000 +@@ -597,7 +597,7 @@ void a_UIcmd_open_urlstr(void *vbw, cons + dFree(new_urlstr); + + if (url) { +- a_Nav_push(bw, url); ++ a_Nav_push(bw, url, NULL); + a_Url_free(url); + } + } +@@ -611,7 +611,7 @@ void a_UIcmd_open_urlstr(void *vbw, cons + */ + void a_UIcmd_open_url(BrowserWindow *bw, const DilloUrl *url) + { +- a_Nav_push(bw, url); ++ a_Nav_push(bw, url, NULL); + } + + /* +@@ -629,7 +629,7 @@ void a_UIcmd_open_url_nt(void *vbw, cons + { + BrowserWindow *new_bw = UIcmd_tab_new(vbw); + if (url) +- a_Nav_push(new_bw, url); ++ a_Nav_push(new_bw, url, NULL); + if (focus) { + BW2UI(new_bw)->tabs()->selected_child(BW2UI(new_bw)); + BW2UI(new_bw)->tabs()->selected_child()->take_focus(); +@@ -816,7 +816,7 @@ void a_UIcmd_open_file(void *vbw) + + if (name) { + url = a_Url_new(name, "file:"); +- a_Nav_push((BrowserWindow*)vbw, url); ++ a_Nav_push((BrowserWindow*)vbw, url, NULL); + a_Url_free(url); + dFree(name); + } +@@ -907,7 +907,7 @@ void a_UIcmd_book(void *vbw) + void a_UIcmd_book(void *vbw) + { + DilloUrl *url = a_Url_new("dpi:/bm/", NULL); +- a_Nav_push((BrowserWindow*)vbw, url); ++ a_Nav_push((BrowserWindow*)vbw, url, NULL); + a_Url_free(url); + } + +diff -r f5a186303478 src/web.cc +--- a/src/web.cc Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/web.cc Sat Sep 12 01:56:26 2009 +0000 +@@ -103,12 +103,13 @@ int a_Web_dispatch_by_type (const char * + /* + * Allocate and set safe values for a DilloWeb structure + */ +-DilloWeb* a_Web_new(const DilloUrl *url) ++DilloWeb* a_Web_new(const DilloUrl *url, const DilloUrl *requester) + { + DilloWeb *web= dNew(DilloWeb, 1); + + _MSG(" a_Web_new: ValidWebs ==> %d\n", dList_length(ValidWebs)); + web->url = a_Url_dup(url); ++ web->requester = a_Url_dup(requester); + web->bw = NULL; + web->flags = 0; + web->Image = NULL; +@@ -136,6 +137,7 @@ void a_Web_free(DilloWeb *web) + { + if (!web) return; + a_Url_free(web->url); ++ a_Url_free(web->requester); + a_Image_unref(web->Image); + dFree(web->filename); + dList_remove(ValidWebs, (void *)web); +diff -r f5a186303478 src/web.hh +--- a/src/web.hh Fri Sep 11 01:56:58 2009 +0000 ++++ b/src/web.hh Sat Sep 12 01:56:26 2009 +0000 +@@ -22,6 +22,8 @@ typedef struct _DilloWeb DilloWeb; + + struct _DilloWeb { + DilloUrl *url; /* Requested URL */ ++ DilloUrl *requester; /* URL that caused this request, or ++ * NULL if user-initiated. */ + BrowserWindow *bw; /* The requesting browser window [reference] */ + int flags; /* Additional info */ + +@@ -34,7 +36,7 @@ struct _DilloWeb { + }; + + void a_Web_init(void); +-DilloWeb* a_Web_new (const DilloUrl* url); ++DilloWeb* a_Web_new (const DilloUrl* url, const DilloUrl *requester); + int a_Web_valid(DilloWeb *web); + void a_Web_free (DilloWeb*); + int a_Web_dispatch_by_type (const char *Type, DilloWeb *web, diff --git a/old/test/filtering.2.patch b/old/test/filtering.2.patch new file mode 100644 index 0000000..f75539f --- /dev/null +++ b/old/test/filtering.2.patch @@ -0,0 +1,488 @@ +diff -r e820d7cb2be7 src/cache.c +--- a/src/cache.c Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/cache.c Mon Dec 28 01:54:09 2009 +0000 +@@ -937,7 +937,7 @@ + NewUrl = a_Url_new(URL_STR_(entry->Location), URL_STR_(entry->Url)); + if (entry->Flags & CA_TempRedirect) + a_Url_set_flags(NewUrl, URL_FLAGS(NewUrl) | URL_E2EQuery); +- a_Nav_push(bw, NewUrl); ++ a_Nav_push(bw, NewUrl, entry->Url); + a_Url_free(NewUrl); + } else { + /* Sub entity redirection (most probably an image) */ +diff -r e820d7cb2be7 src/capi.c +--- a/src/capi.c Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/capi.c Mon Dec 28 01:54:09 2009 +0000 +@@ -15,6 +15,7 @@ + * to get the requests served. Kind of a broker. + */ + ++#include <ctype.h> /* isalpha */ + #include <string.h> + + #include "msg.h" +@@ -313,6 +314,86 @@ + } + + /* ++ * When dillo wants to open an URL, this can be either due to user action ++ * (e.g., typing in an URL, clicking a link), or automatic (HTTP header ++ * indicates redirection, META HTML tag with refresh attribute and 0 delay, ++ * and images and stylesheets on an HTML page when autoloading is enabled). ++ * ++ * For a user request, the action will be permitted. ++ * For an automatic request, permission to load depends on the filter set ++ * by the user. ++ */ ++static bool_t Capi_filters_allow(const DilloUrl *wanted, ++ const DilloUrl *requester) ++{ ++ bool_t ret; ++ ++ if (requester == NULL) { ++ /* request made by user */ ++ ret = TRUE; ++ } else { ++ switch (prefs.filter_auto_requests) { ++ case PREFS_FILTER_SAME_HOST: ++ ret = dStrcasecmp(URL_HOST(wanted), URL_HOST(requester)) == 0; ++ break; ++ case PREFS_FILTER_SAME_DOMAIN: ++ { ++ const char *req_host = URL_HOST(requester), ++ *want_host = URL_HOST(wanted); ++ uint_t req_hostlen = strlen(req_host); ++ ++ MSG("Capi_filters_allow:\n%s\n%s\n", req_host, want_host); ++ if (req_hostlen > 0 && !isalpha(req_host[req_hostlen - 1])) { ++ /* for IP addrs, match fully */ ++ ret = dStrcasecmp(req_host, want_host) == 0; ++ } else { ++ /* For hostnames, let's say for now that if you have two dots, ++ * we'll ignore everything through the first dot, e.g., ++ * 'www.dillo.org' => 'dillo.org' ++ * ++ * TODO: it sounds like requiring a third dot would be best for ++ * ai,au,bd,bh,ck,eg,et,fk,il,in,kh,kr,mk,mt,na,np,nz,pg,pk,qa, ++ * sa,sb,sg,sv,ua,ug,uk,uy,vn,za,zw, name ++ */ ++ uint_t want_hostlen; ++ char *dot = strchr(req_host, '.'); ++ ++ if (dot && strchr(dot + 1, '.')) { ++ req_hostlen -= dot + 1 - req_host; ++ req_host = dot + 1; ++ } ++ want_hostlen = strlen(want_host); ++ ++ if (want_hostlen < req_hostlen) { ++ ret = FALSE; ++ } else { ++ if (want_hostlen > req_hostlen && ++ want_host[want_hostlen - req_hostlen - 1] == '.') { ++ /* If the longer, leading portion of the host ends with ++ * a dot, trim it off, e.g., 'hg.dillo.org' => 'dillo.org' ++ * but 'hgdillo.org' would be unchanged. ++ */ ++ want_host += want_hostlen - req_hostlen; ++ } ++ ret = dStrcasecmp(req_host, want_host) == 0; ++ } ++ } ++ if (ret) ++ MSG("ALLOW\n"); ++ else ++ MSG("BLOCK\n"); ++ break; ++ } ++ case PREFS_FILTER_ALLOW_ALL: ++ default: ++ ret = TRUE; ++ break; ++ } ++ } ++ return ret; ++} ++ ++/* + * Most used function for requesting a URL. + * TODO: clean up the ad-hoc bindings with an API that allows dynamic + * addition of new plugins. +@@ -328,6 +409,9 @@ + const char *scheme = URL_SCHEME(web->url); + int safe = 0, ret = 0, use_cache = 0; + ++ dReturn_val_if_fail((a_Capi_get_flags(web->url) & CAPI_IsCached) || ++ Capi_filters_allow(web->url, web->requester), 0); ++ + /* reload test */ + reload = (!(a_Capi_get_flags(web->url) & CAPI_IsCached) || + (URL_FLAGS(web->url) & URL_E2EQuery)); +diff -r e820d7cb2be7 src/html.cc +--- a/src/html.cc Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/html.cc Mon Dec 28 01:54:09 2009 +0000 +@@ -105,8 +105,8 @@ + const char *attrname, + int tag_parsing_flags); + static int Html_write_raw(DilloHtml *html, char *buf, int bufsize, int Eof); +-static void Html_load_image(BrowserWindow *bw, DilloUrl *url, +- DilloImage *image); ++static bool Html_load_image(BrowserWindow *bw, DilloUrl *url, ++ const DilloUrl *requester, DilloImage *image); + static void Html_callback(int Op, CacheClient_t *Client); + static void Html_tag_cleanup_at_close(DilloHtml *html, int TagIdx); + +@@ -654,12 +654,21 @@ + { + dReturn_if_fail (bw->nav_expecting == FALSE); + ++ /* If the user asked for a specific URL, the user (NULL) is the requester, ++ * but if the user just asked for all URLs, use the page URL as the ++ * requester. If the possible patterns become more complex, it might be ++ * good to have the caller supply the requester instead. ++ */ ++ const DilloUrl *requester = pattern ? NULL : this->page_url; ++ + for (int i = 0; i < images->size(); i++) { + if (images->get(i)->image) { + if ((!pattern) || (!a_Url_cmp(images->get(i)->url, pattern))) { +- Html_load_image(bw, images->get(i)->url, images->get(i)->image); +- a_Image_unref (images->get(i)->image); +- images->get(i)->image = NULL; // web owns it now ++ if (Html_load_image(bw, images->get(i)->url, requester, ++ images->get(i)->image)) { ++ a_Image_unref (images->get(i)->image); ++ images->get(i)->image = NULL; // web owns it now ++ } + } + } + } +@@ -2086,9 +2095,10 @@ + + load_now = prefs.load_images || + (a_Capi_get_flags_with_redirection(url) & CAPI_IsCached); +- Html_add_new_htmlimage(html, &url, load_now ? NULL : Image); ++ bool loading = false; + if (load_now) +- Html_load_image(html->bw, url, Image); ++ loading = Html_load_image(html->bw, url, html->page_url, Image); ++ Html_add_new_htmlimage(html, &url, loading ? NULL : Image); + + dFree(tooltip_str); + dFree(width_ptr); +@@ -2100,13 +2110,13 @@ + /* + * Tell cache to retrieve image + */ +-static void Html_load_image(BrowserWindow *bw, DilloUrl *url, +- DilloImage *Image) ++static bool Html_load_image(BrowserWindow *bw, DilloUrl *url, ++ const DilloUrl *requester, DilloImage *Image) + { + DilloWeb *Web; + int ClientKey; + /* Fill a Web structure for the cache query */ +- Web = a_Web_new(url); ++ Web = a_Web_new(url, requester); + Web->bw = bw; + Web->Image = Image; + a_Image_ref(Image); +@@ -2116,6 +2126,7 @@ + a_Bw_add_client(bw, ClientKey, 0); + a_Bw_add_url(bw, url); + } ++ return ClientKey != 0; + } + + /* +@@ -2924,7 +2935,7 @@ + } else { + /* Fill a Web structure for the cache query */ + int ClientKey; +- DilloWeb *Web = a_Web_new(url); ++ DilloWeb *Web = a_Web_new(url, html->page_url); + Web->bw = html->bw; + if ((ClientKey = a_Capi_open_url(Web, Html_css_load_callback, NULL))) { + ++html->bw->NumPendingStyleSheets; +diff -r e820d7cb2be7 src/nav.c +--- a/src/nav.c Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/nav.c Mon Dec 28 01:54:09 2009 +0000 +@@ -191,7 +191,8 @@ + * This function requests the page's root-URL; images and related stuff + * are fetched directly by the HTML module. + */ +-static void Nav_open_url(BrowserWindow *bw, const DilloUrl *url, int offset) ++static void Nav_open_url(BrowserWindow *bw, const DilloUrl *url, ++ const DilloUrl *requester, int offset) + { + DilloUrl *old_url; + bool_t MustLoad, ForceReload, Repush, IgnoreScroll; +@@ -232,7 +233,7 @@ + + // a_Menu_pagemarks_new(bw); + +- Web = a_Web_new(url); ++ Web = a_Web_new(url, requester); + Web->bw = bw; + Web->flags |= WEB_RootUrl; + if ((ClientKey = a_Capi_open_url(Web, NULL, NULL)) != 0) { +@@ -341,7 +342,8 @@ + * - Set bw to expect the URL data + * - Ask the cache to feed back the requested URL (via Nav_open_url) + */ +-void a_Nav_push(BrowserWindow *bw, const DilloUrl *url) ++void a_Nav_push(BrowserWindow *bw, const DilloUrl *url, ++ const DilloUrl *requester) + { + dReturn_if_fail (bw != NULL); + +@@ -353,7 +355,7 @@ + a_Nav_cancel_expect(bw); + bw->nav_expect_url = a_Url_dup(url); + bw->nav_expecting = TRUE; +- Nav_open_url(bw, url, 0); ++ Nav_open_url(bw, url, requester, 0); + } + + /* +@@ -370,7 +372,7 @@ + a_Url_set_flags(url, URL_FLAGS(url) | URL_ReloadFromCache); + bw->nav_expect_url = a_Url_dup(url); + bw->nav_expecting = TRUE; +- Nav_open_url(bw, url, 0); ++ Nav_open_url(bw, url, NULL, 0); + a_Url_free(url); + } + } +@@ -407,7 +409,7 @@ + + if (bw->meta_refresh_status == 2) { + Nav_stack_move_ptr(bw, -1); +- a_Nav_push(bw, bw->meta_refresh_url); ++ a_Nav_push(bw, bw->meta_refresh_url,a_History_get_url(NAV_TOP_UIDX(bw))); + } + a_Url_free(bw->meta_refresh_url); + bw->meta_refresh_url = NULL; +@@ -441,7 +443,7 @@ + a_Nav_cancel_expect(bw); + if (--idx >= 0){ + a_UIcmd_set_msg(bw, ""); +- Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), -1); ++ Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), NULL, -1); + } + } + +@@ -455,7 +457,7 @@ + a_Nav_cancel_expect(bw); + if (++idx < a_Nav_stack_size(bw)) { + a_UIcmd_set_msg(bw, ""); +- Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), +1); ++ Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), NULL, +1); + } + } + +@@ -464,7 +466,7 @@ + */ + void a_Nav_home(BrowserWindow *bw) + { +- a_Nav_push(bw, prefs.home); ++ a_Nav_push(bw, prefs.home, NULL); + } + + /* +@@ -496,7 +498,7 @@ + a_Url_set_flags(r_url, URL_FLAGS(r_url) & ~URL_SpamSafe); + bw->nav_expect_url = r_url; + bw->nav_expecting = TRUE; +- Nav_open_url(bw, r_url, 0); ++ Nav_open_url(bw, r_url, NULL, 0); + } + } + } +@@ -523,7 +525,7 @@ + a_UIcmd_open_url_nw(bw, a_History_get_url(NAV_UIDX(bw,idx))); + } else { + a_Nav_cancel_expect(bw); +- Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), offset); ++ Nav_open_url(bw, a_History_get_url(NAV_UIDX(bw,idx)), NULL, offset); + a_UIcmd_set_buttons_sens(bw); + } + } +@@ -560,7 +562,7 @@ + void a_Nav_save_url(BrowserWindow *bw, + const DilloUrl *url, const char *filename) + { +- DilloWeb *Web = a_Web_new(url); ++ DilloWeb *Web = a_Web_new(url, NULL); + Web->bw = bw; + Web->filename = dStrdup(filename); + Web->flags |= WEB_Download; +diff -r e820d7cb2be7 src/nav.h +--- a/src/nav.h Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/nav.h Mon Dec 28 01:54:09 2009 +0000 +@@ -14,7 +14,8 @@ + #endif /* __cplusplus */ + + void a_Nav_redirection0(BrowserWindow *bw, const DilloUrl *new_url); +-void a_Nav_push(BrowserWindow *bw, const DilloUrl *url); ++void a_Nav_push(BrowserWindow *bw, const DilloUrl *url, ++ const DilloUrl *requester); + void a_Nav_repush(BrowserWindow *bw); + void a_Nav_back(BrowserWindow *bw); + void a_Nav_forw(BrowserWindow *bw); +diff -r e820d7cb2be7 src/prefs.c +--- a/src/prefs.c Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/prefs.c Mon Dec 28 01:54:09 2009 +0000 +@@ -39,6 +39,7 @@ + prefs.buffered_drawing = 1; + prefs.contrast_visited_color = TRUE; + prefs.enterpress_forces_submit = FALSE; ++ prefs.filter_auto_requests = PREFS_FILTER_ALLOW_ALL; + prefs.focus_new_tab = TRUE; + prefs.font_cursive = dStrdup(PREFS_FONT_CURSIVE); + prefs.font_factor = 1.0; +diff -r e820d7cb2be7 src/prefs.h +--- a/src/prefs.h Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/prefs.h Mon Dec 28 01:54:09 2009 +0000 +@@ -26,6 +26,10 @@ + /* Panel sizes */ + enum { P_tiny = 0, P_small, P_medium, P_large }; + ++enum {PREFS_FILTER_ALLOW_ALL, ++ PREFS_FILTER_SAME_HOST, ++ PREFS_FILTER_SAME_DOMAIN}; ++ + typedef struct _DilloPrefs DilloPrefs; + + struct _DilloPrefs { +@@ -69,6 +73,7 @@ + bool_t load_images; + bool_t load_stylesheets; + bool_t parse_embedded_css; ++ int filter_auto_requests; + int32_t buffered_drawing; + char *font_serif; + char *font_sans_serif; +diff -r e820d7cb2be7 src/prefsparser.cc +--- a/src/prefsparser.cc Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/prefsparser.cc Mon Dec 28 01:54:09 2009 +0000 +@@ -26,6 +26,7 @@ + PREFS_INT32, + PREFS_DOUBLE, + PREFS_GEOMETRY, ++ PREFS_FILTER, + PREFS_PANEL_SIZE + } PrefType_t; + +@@ -50,6 +51,7 @@ + { "contrast_visited_color", &prefs.contrast_visited_color, PREFS_BOOL }, + { "enterpress_forces_submit", &prefs.enterpress_forces_submit, + PREFS_BOOL }, ++ { "filter_auto_requests", &prefs.filter_auto_requests, PREFS_FILTER }, + { "focus_new_tab", &prefs.focus_new_tab, PREFS_BOOL }, + { "font_cursive", &prefs.font_cursive, PREFS_STRING }, + { "font_factor", &prefs.font_factor, PREFS_DOUBLE }, +@@ -136,6 +138,17 @@ + a_Misc_parse_geometry(value, &prefs.xpos, &prefs.ypos, + &prefs.width, &prefs.height); + break; ++ case PREFS_FILTER: ++ if (!dStrcasecmp(value, "same_host")) ++ prefs.filter_auto_requests = PREFS_FILTER_SAME_HOST; ++ else if (!dStrcasecmp(value, "same_domain")) ++ prefs.filter_auto_requests = PREFS_FILTER_SAME_DOMAIN; ++ else { ++ if (dStrcasecmp(value, "allow_all")) ++ MSG_WARN("prefs: unrecognized value for filter_auto_requests\n"); ++ prefs.filter_auto_requests = PREFS_FILTER_ALLOW_ALL; ++ } ++ break; + case PREFS_PANEL_SIZE: + if (!dStrcasecmp(value, "tiny")) + prefs.panel_size = P_tiny; +diff -r e820d7cb2be7 src/uicmd.cc +--- a/src/uicmd.cc Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/uicmd.cc Mon Dec 28 01:54:09 2009 +0000 +@@ -616,7 +616,7 @@ + */ + void a_UIcmd_open_url(BrowserWindow *bw, const DilloUrl *url) + { +- a_Nav_push(bw, url); ++ a_Nav_push(bw, url, NULL); + a_UIcmd_focus_main_area(bw); + } + +@@ -626,7 +626,7 @@ + * Location if we don't yet have an URL, main otherwise. + */ + if (url) { +- a_Nav_push(new_bw, url); ++ a_Nav_push(new_bw, url, NULL); + BW2UI(new_bw)->focus_main(); + } else { + BW2UI(new_bw)->focus_location(); +@@ -840,7 +840,7 @@ + + if (name) { + url = a_Url_new(name, "file:"); +- a_Nav_push((BrowserWindow*)vbw, url); ++ a_Nav_push((BrowserWindow*)vbw, url, NULL); + a_Url_free(url); + dFree(name); + } +@@ -931,7 +931,7 @@ + void a_UIcmd_book(void *vbw) + { + DilloUrl *url = a_Url_new("dpi:/bm/", NULL); +- a_Nav_push((BrowserWindow*)vbw, url); ++ a_Nav_push((BrowserWindow*)vbw, url, NULL); + a_Url_free(url); + } + +diff -r e820d7cb2be7 src/web.cc +--- a/src/web.cc Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/web.cc Mon Dec 28 01:54:09 2009 +0000 +@@ -103,12 +103,13 @@ + /* + * Allocate and set safe values for a DilloWeb structure + */ +-DilloWeb* a_Web_new(const DilloUrl *url) ++DilloWeb* a_Web_new(const DilloUrl *url, const DilloUrl *requester) + { + DilloWeb *web= dNew(DilloWeb, 1); + + _MSG(" a_Web_new: ValidWebs ==> %d\n", dList_length(ValidWebs)); + web->url = a_Url_dup(url); ++ web->requester = a_Url_dup(requester); + web->bw = NULL; + web->flags = 0; + web->Image = NULL; +@@ -136,6 +137,7 @@ + { + if (!web) return; + a_Url_free(web->url); ++ a_Url_free(web->requester); + a_Image_unref(web->Image); + dFree(web->filename); + dList_remove(ValidWebs, (void *)web); +diff -r e820d7cb2be7 src/web.hh +--- a/src/web.hh Sun Dec 27 20:35:17 2009 +0000 ++++ b/src/web.hh Mon Dec 28 01:54:09 2009 +0000 +@@ -22,6 +22,8 @@ + + struct _DilloWeb { + DilloUrl *url; /* Requested URL */ ++ DilloUrl *requester; /* URL that caused this request, or ++ * NULL if user-initiated. */ + BrowserWindow *bw; /* The requesting browser window [reference] */ + int flags; /* Additional info */ + +@@ -34,7 +36,7 @@ + }; + + void a_Web_init(void); +-DilloWeb* a_Web_new (const DilloUrl* url); ++DilloWeb* a_Web_new (const DilloUrl* url, const DilloUrl *requester); + int a_Web_valid(DilloWeb *web); + void a_Web_free (DilloWeb*); + int a_Web_dispatch_by_type (const char *Type, DilloWeb *web, diff --git a/old/test/foo.html b/old/test/foo.html new file mode 100644 index 0000000..257cc56 --- /dev/null +++ b/old/test/foo.html @@ -0,0 +1 @@ +foo diff --git a/old/test/form-select-multiple.html b/old/test/form-select-multiple.html new file mode 100644 index 0000000..abf3ea7 --- /dev/null +++ b/old/test/form-select-multiple.html @@ -0,0 +1,30 @@ +<html> +a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br> +b<br>b<br>b<br>b<br>b<br>b<br>b<br>b<br>b<br>b<br> +c<br>c<br>c<br>c<br>c<br>c<br>c<br>c<br>c<br>c<br> + +<P>Select one or more sections to search: +<form action="https://www.dillo.org/test/a.html"> +<SELECT NAME=sections MULTIPLE> +<OPTION>Web Authoring Reference</OPTION> +<OPTION>FAQ Archives</OPTION> +<OPTION>Design Elements</OPTION> +<OPTION>Tools</OPTION> +<OPTION>Feature Article 1</OPTION> +<OPTION>Feature Article 2</OPTION> +<OPTION>Feature Article 3</OPTION> +<OPTION>Feature Article 4</OPTION> +<OPTION>Feature Article 5</OPTION> +<OPTION>Feature Article 6</OPTION> +<OPTION>Feature Article 7</OPTION> +<OPTION>Feature Article 8</OPTION> +<OPTION>Feature Article 9</OPTION> +<OPTION>Feature Article 10</OPTION> +</SELECT> +<input type="submit" name="Submit" value="Test"> +</P> +</form> +a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br> +b<br>b<br>b<br>b<br>b<br>b<br>b<br>b<br>b<br>b<br> +</html> + diff --git a/old/test/form_reset.html b/old/test/form_reset.html new file mode 100644 index 0000000..44a7449 --- /dev/null +++ b/old/test/form_reset.html @@ -0,0 +1,65 @@ +<form action="https://www.dillo.org/test/sldjlskjf"> +<select name=sel0> + <option selected>first selected + <option>not1 + <option>not 2 +</select> +<select name=sel1> + <option>not + <option>not2 + <option selected>last selected +</select> +<select name=sel2> + <option>none by author 1 + <option>none by author 2 + <option>none by author 3 +</select> +<select name=sel3 multiple> + <option selected>yes + <option>no + <option selected>yes + <option>no + <option selected>yes + <option>no + <option selected>yes + <option>no +</select> +<select name=sel4 multiple> + <option>no + <option selected>yes + <option>no + <option selected>yes + <option>no + <option selected>yes + <option>no + <option selected>yes +</select> +<select name=sel5 multiple> + <option>none by author 1 + <option>none by author 2 + <option>none by author 3 +</select> +<select name=sel6 size=3> + <option>only1 1 + <option>only1 2 + <option>only1 3 +</select> +<select name=sel7 size=3> + <option selected>first sel + <option>only1 2 + <option>only1 3 +</select> +<select name=sel8 size=3> + <option>only1 1 + <option>only1 2 + <option selected>last sel +</select> +<select name=sel9 size=3> +</select> +<select name=sela multiple> +</select> +<select name=selb> +</select> +<input type=reset> +<input type=submit> +</form> diff --git a/old/test/gettext.0.diff.bz2 b/old/test/gettext.0.diff.bz2 Binary files differnew file mode 100644 index 0000000..390b392 --- /dev/null +++ b/old/test/gettext.0.diff.bz2 diff --git a/old/test/gnash.cc b/old/test/gnash.cc new file mode 100644 index 0000000..034990a --- /dev/null +++ b/old/test/gnash.cc @@ -0,0 +1,514 @@ +################################################################ begin ### +// +// Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +#ifdef HAVE_CONFIG_H +#include "gnashconfig.h" +#endif + +#include <fltk/Item.h> +#include <fltk/Window.h> + +#ifdef HAVE_X11 +#include <fltk/x11.h> +#endif + +#include <fltk/events.h> +#include <fltk/run.h> +#include <fltk/Cursor.h> +#include <fltk/layout.h> +#include <fltk/MenuBar.h> +#include <fltk/ItemGroup.h> +#include <fltk/file_chooser.h> + +#include "fltksup.h" +#include "gnash.h" +#include "gui.h" +#include "VM.h" + +#include "render_handler.h" + +using namespace std; +using namespace fltk; + +namespace gnash +{ + + +FltkGui::FltkGui(unsigned long xid, float scale, bool loop, unsigned int depth) + : Window(0, 0), + Gui(xid, scale, loop, depth), + _menu_height(_xid ? 0 : 20) +{ +} + +FltkGui::~FltkGui() +{ + delete _popup_menu; +} + + +void +FltkGui::renderBuffer() +{ + // FLTK has a nice mechanism where you can set damage() to whatever you want + // so in draw() you can check what exactly you want to redraw. But + // unfortunately it doesn't seem to remember what bits you turn on. So I'll + // just do it the old-fashioned way. + + static bool firstRun = true; + + if (firstRun) { + using namespace geometry; + Range2d<int> bounds(0, 0, _width, _height); + _glue->render(bounds); + + return; + } + + if (! _drawbounds_vec.size() ) { + return; // XXX what about Cairo? + } + + for (unsigned bno=0; bno < _drawbounds_vec.size(); bno++) { + geometry::Range2d<int>& bounds = _drawbounds_vec[bno]; + + assert ( bounds.isFinite() ); + + _glue->render(bounds); + } +} + +int +FltkGui::handle(int event) +{ + switch (event) { + case TIMEOUT: + advance_movie(this); + repeat_timeout(_interval); + return true; + case PUSH: + Window::handle(event); + notify_mouse_clicked(true, 1); + return true; + case RELEASE: + Window::handle(event); + notify_mouse_clicked(false, 1); + return true; + case MOVE: + { + if (!_xid && event_y() < static_cast<int>(_menu_height)) { + return Window::handle(event); + } + notify_mouse_moved(event_x(), event_y()-_menu_height); + return Window::handle(event);; + } + case SHORTCUT: + case KEY: + handleKey(event_key()); + return true; + default: + return Window::handle(event); + } +} + +void +FltkGui::handleKey(unsigned key) +{ + // TODO: there are more keys + struct { + unsigned fltkKey; + gnash::key::code gnashKey; + } table[] = { + { BackSpaceKey, gnash::key::BACKSPACE }, + { TabKey, gnash::key::TAB }, + { ClearKey, gnash::key::CLEAR }, + { ReturnKey, gnash::key::ENTER }, + { CapsLockKey, gnash::key::CAPSLOCK }, + { EscapeKey, gnash::key::ESCAPE }, + { SpaceKey, gnash::key::SPACE }, + { PageDownKey, gnash::key::PGDN }, + { PageUpKey, gnash::key::PGUP }, + { HomeKey, gnash::key::HOME }, + { EndKey, gnash::key::END }, + { LeftKey, gnash::key::LEFT }, + { UpKey, gnash::key::UP }, + { RightKey, gnash::key::RIGHT }, + { DownKey, gnash::key::DOWN }, + { InsertKey, gnash::key::INSERT }, + { DeleteKey, gnash::key::DELETEKEY }, + { HelpKey, gnash::key::HELP }, + { NumLockKey, gnash::key::NUM_LOCK }, + { SubtractKey, gnash::key::MINUS }, + { DivideKey, gnash::key::SLASH }, + { 0, gnash::key::INVALID } +#if 0 + // These appear to be unavailable in fltk + { bracketleft, gnash::key::LEFT_BRACKET }, + { backslash, gnash::key::BACKSLASH }, + { bracketright, gnash::key::RIGHT_BRACKET }, + { quotedbl, gnash::key::QUOTE }, + { VoidSymbol, gnash::key::INVALID } + { SemicolonKey, gnash::key::SEMICOLON }, + { equalKey, gnash::key::EQUALS }, +#endif + }; + + int modifier = gnash::key::GNASH_MOD_NONE; + + unsigned long state = event_state(); + + if (state & SHIFT) { + modifier = modifier | gnash::key::GNASH_MOD_SHIFT; + } + if (state & CTRL) { + modifier = modifier | gnash::key::GNASH_MOD_CONTROL; + } + if (state & ALT) { + modifier = modifier | gnash::key::GNASH_MOD_ALT; + } + + for (int i = 0; table[i].fltkKey; i++) { + if (key == table[i].fltkKey) { + notify_key_event((gnash::key::code)table[i].gnashKey, modifier, + true); + break; + } + } +} + +bool +FltkGui::run() +{ + fltk::run(); + + return true; +} + +bool +FltkGui::init(int /* argc */, char *** /*argv */) +{ + + return true; +} + +void +FltkGui::setInterval(unsigned int time) +{ + _interval = time / 1000.0; + add_timeout (_interval); +} + +void +FltkGui::create() +{ +#ifdef HAVE_X11 + if (_xid) { + // Make FLTK render into an X window indicated by the XID. + CreatedWindow::set_xid(this, _xid); + return; + } +#endif + Window::create(); +} + +bool +FltkGui::createWindow(const char* title, int width, int height) +{ + resize(width, _menu_height + height); + + + label(title); + begin(); + + if (!_xid) { + MenuBar* menubar = new MenuBar(0, 0, width, _menu_height); + menubar->begin(); + addMenuItems(); + menubar->end(); + } +#ifdef RENDERER_AGG + _glue = new FltkAggGlue(0, _menu_height, width, height); +#elif defined(RENDERER_CAIRO) +#error FLTK/Cairo is currently broken. Please try again soon... + FltkCairoGlue _glue; +#elif defined(RENDERER_OPENGL) +#error FLTK/OpenGL is currently broken. Please try again soon... + FltkCairoGlue _glue; +#endif + createMenu(); + end(); + + _renderer = _glue->createRenderHandler(); + if ( ! _renderer ) return false; + set_render_handler(_renderer); + + _glue->initBuffer(width, height); + + // The minimum size of the window is 1x1 pixels. + size_range (1, 1); + + show(); + + return true; +} + + +static void fltk_menu_open_file(Widget*, void*) +{ + const char *newfile = fltk::file_chooser("Open File", "*.swf", NULL); + if (!newfile) { + return; + } + + // menu_open_file().. +} + +static void fltk_menu_save_file_as(Widget*, void*) +{ + const char* savefile = file_chooser("Save File as", NULL, NULL); + if (!savefile) { + return; + } + + // menu_save_file(); +} + +static void fltk_menu_fullscreen(Widget*, void* ptr) +{ +// GNASH_REPORT_FUNCTION; + + static bool fullscreen = false; + static Rectangle oldBounds; + + fullscreen = !fullscreen; + + FltkGui* gui = static_cast<FltkGui*>(ptr); + if (fullscreen) { + oldBounds.set(gui->x(), gui->y(), gui->w(), gui->h()); + gui->fullscreen(); + } else { + gui->fullscreen_off(oldBounds.x(), oldBounds.y(), oldBounds.w(), +oldBounds.h()); + } +} + + +static void +fltk_menu_quit(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_quit(); +} + +static void +fltk_menu_play(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_play(); +} + +static void +fltk_menu_pause(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_pause(); +} + +static void +fltk_menu_stop(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_stop(); +} + +static void +fltk_menu_restart(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_restart(); +} + +static void +fltk_menu_step_forward(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_step_forward(); +} + + +static void +fltk_menu_step_backward(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_step_backward(); +} + +static void +fltk_menu_jump_forward(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_jump_forward(); +} + +static void +fltk_menu_jump_backward(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_jump_backward(); +} + +static void +fltk_menu_toggle_sound(Widget*, void* ptr) +{ + FltkGui* gui = static_cast<FltkGui*>(ptr); + gui->menu_toggle_sound(); +} + +void +FltkGui::addMenuItems() +{ + ItemGroup* file = new ItemGroup("File"); + + + file->begin(); + new Item("Open", 0, fltk_menu_open_file); + new Item("Save as", 0, fltk_menu_save_file_as); + new Item("Quit", 0, fltk_menu_quit, this); + file->end(); + + ItemGroup* edit = new ItemGroup("Edit"); + edit->begin(); + new Item("Preferences"); + edit->end(); + + ItemGroup* view = new ItemGroup("View"); + view->begin(); + new Item("Double size"); + new Item("Fullscreen", 0, fltk_menu_fullscreen, this); + view->end(); + + ItemGroup* movie_ctrl = new ItemGroup("Movie control"); + movie_ctrl->begin(); + new Item("Play Movie", 0, fltk_menu_play, this); + new Item("Pause Movie", 0, fltk_menu_pause, this); + new Item("Stop Movie", 0, fltk_menu_stop, this); + new Item("Restart Movie", 0, fltk_menu_restart, this); + new Item("Step Forward Frame", 0, fltk_menu_step_forward, this); + new Item("Step Backward Frame", 0, fltk_menu_step_backward, this); + new Item("Jump Forward 10 Frames", 0, fltk_menu_jump_forward, this); + new Item("Jump Backward 10 Frames", 0, fltk_menu_jump_backward, this); + new Item("Toggle Sound", 0, fltk_menu_toggle_sound, this); + movie_ctrl->end(); + + ItemGroup* help = new ItemGroup("Help"); + help->begin(); + new Item("About"); + help->end(); +} + + + +bool +FltkGui::createMenu() +{ + _popup_menu = new PopupMenu(0, 0, w(), h()); + _popup_menu->type(PopupMenu::POPUP3); + + _popup_menu->begin(); + + addMenuItems(); + + _popup_menu->end(); + + return true; +} + +void +FltkGui::layout() +{ + if (!VM::isInitialized()) { + // No movie yet; don't bother resizing anything. + return; + } + + // Let FLTK update the window borders, etc. + Window::layout(); + + if ((layout_damage() & LAYOUT_WH)) { + _glue->resize(w(), h() - _menu_height); + resize_view(w(), h() - _menu_height); + } +} + +void +FltkGui::setCursor(gnash_cursor_type newcursor) +{ + fltk::Cursor* cursortype; + + switch(newcursor) { + case gnash::CURSOR_HAND: + cursortype = fltk::CURSOR_HAND; + break; + case gnash::CURSOR_INPUT: + cursortype = fltk::CURSOR_INSERT; + break; + default: + cursortype = fltk::CURSOR_DEFAULT; + } + + cursor(cursortype); +} + +void +FltkGui::setInvalidatedRegions(const InvalidatedRanges& ranges) +{ + // forward to renderer + // + // Why? Why have the region been invalidated ?? + // Was the renderer offscreen buffer also invalidated + // (need to rerender)? + // Was only the 'onscreen' buffer be invalidated (no need to rerender, + // just to blit) ?? + // + // To be safe just assume this 'invalidated' region is actually + // the offscreen buffer, for safety, but we need to clarify this. + // + _renderer->set_invalidated_regions(ranges); + + _drawbounds_vec.clear(); + + for (size_t rno=0; rno<ranges.size(); rno++) { + + geometry::Range2d<int> bounds = Intersection( + _renderer->world_to_pixel(ranges.getRange(rno)), + _validbounds); + + // it may happen that a particular range is out of the screen, which + // will lead to bounds==null. + if (bounds.isNull()) continue; + + assert(bounds.isFinite()); + + _drawbounds_vec.push_back(bounds); + + } +} + +// end of namespace +} + diff --git a/old/test/img/gotage.gif b/old/test/img/gotage.gif Binary files differnew file mode 100644 index 0000000..9cbd3bd --- /dev/null +++ b/old/test/img/gotage.gif diff --git a/old/test/img/index.html b/old/test/img/index.html new file mode 100644 index 0000000..c5218a8 --- /dev/null +++ b/old/test/img/index.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/img</title> + </head> + <body> +<h1>Index of /test/img</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=D.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="gotage.gif">gotage.gif</a></td><td align="right">2008-01-19 15:33 </td><td align="right">8.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n1.html">n1.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right">232 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n2.html">n2.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right"> 98 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n3.html">n3.html</a></td><td align="right">2008-01-19 15:33 </td><td align="right">246 </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/img/index.html?C=D;O=A.html b/old/test/img/index.html?C=D;O=A.html new file mode 100644 index 0000000..1e2c4f6 --- /dev/null +++ b/old/test/img/index.html?C=D;O=A.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/img</title> + </head> + <body> +<h1>Index of /test/img</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=D.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="gotage.gif">gotage.gif</a></td><td align="right">2008-01-19 15:33 </td><td align="right">8.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n1.html">n1.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right">232 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n2.html">n2.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right"> 98 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n3.html">n3.html</a></td><td align="right">2008-01-19 15:33 </td><td align="right">246 </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/img/index.html?C=D;O=D.html b/old/test/img/index.html?C=D;O=D.html new file mode 100644 index 0000000..78d161c --- /dev/null +++ b/old/test/img/index.html?C=D;O=D.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/img</title> + </head> + <body> +<h1>Index of /test/img</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n3.html">n3.html</a></td><td align="right">2008-01-19 15:33 </td><td align="right">246 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n2.html">n2.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right"> 98 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n1.html">n1.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right">232 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="gotage.gif">gotage.gif</a></td><td align="right">2008-01-19 15:33 </td><td align="right">8.8K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/img/index.html?C=M;O=A.html b/old/test/img/index.html?C=M;O=A.html new file mode 100644 index 0000000..3058879 --- /dev/null +++ b/old/test/img/index.html?C=M;O=A.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/img</title> + </head> + <body> +<h1>Index of /test/img</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=D.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n1.html">n1.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right">232 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n2.html">n2.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right"> 98 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n3.html">n3.html</a></td><td align="right">2008-01-19 15:33 </td><td align="right">246 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="gotage.gif">gotage.gif</a></td><td align="right">2008-01-19 15:33 </td><td align="right">8.8K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/img/index.html?C=M;O=D.html b/old/test/img/index.html?C=M;O=D.html new file mode 100644 index 0000000..d159231 --- /dev/null +++ b/old/test/img/index.html?C=M;O=D.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/img</title> + </head> + <body> +<h1>Index of /test/img</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="gotage.gif">gotage.gif</a></td><td align="right">2008-01-19 15:33 </td><td align="right">8.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n3.html">n3.html</a></td><td align="right">2008-01-19 15:33 </td><td align="right">246 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n2.html">n2.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right"> 98 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n1.html">n1.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right">232 </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/img/index.html?C=N;O=A.html b/old/test/img/index.html?C=N;O=A.html new file mode 100644 index 0000000..c5218a8 --- /dev/null +++ b/old/test/img/index.html?C=N;O=A.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/img</title> + </head> + <body> +<h1>Index of /test/img</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=D.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="gotage.gif">gotage.gif</a></td><td align="right">2008-01-19 15:33 </td><td align="right">8.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n1.html">n1.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right">232 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n2.html">n2.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right"> 98 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n3.html">n3.html</a></td><td align="right">2008-01-19 15:33 </td><td align="right">246 </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/img/index.html?C=N;O=D.html b/old/test/img/index.html?C=N;O=D.html new file mode 100644 index 0000000..78d161c --- /dev/null +++ b/old/test/img/index.html?C=N;O=D.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/img</title> + </head> + <body> +<h1>Index of /test/img</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n3.html">n3.html</a></td><td align="right">2008-01-19 15:33 </td><td align="right">246 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n2.html">n2.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right"> 98 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n1.html">n1.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right">232 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="gotage.gif">gotage.gif</a></td><td align="right">2008-01-19 15:33 </td><td align="right">8.8K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/img/index.html?C=S;O=A.html b/old/test/img/index.html?C=S;O=A.html new file mode 100644 index 0000000..0f5621d --- /dev/null +++ b/old/test/img/index.html?C=S;O=A.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/img</title> + </head> + <body> +<h1>Index of /test/img</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=D.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n2.html">n2.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right"> 98 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n1.html">n1.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right">232 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n3.html">n3.html</a></td><td align="right">2008-01-19 15:33 </td><td align="right">246 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="gotage.gif">gotage.gif</a></td><td align="right">2008-01-19 15:33 </td><td align="right">8.8K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/img/index.html?C=S;O=D.html b/old/test/img/index.html?C=S;O=D.html new file mode 100644 index 0000000..475e4ec --- /dev/null +++ b/old/test/img/index.html?C=S;O=D.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/img</title> + </head> + <body> +<h1>Index of /test/img</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="gotage.gif">gotage.gif</a></td><td align="right">2008-01-19 15:33 </td><td align="right">8.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n3.html">n3.html</a></td><td align="right">2008-01-19 15:33 </td><td align="right">246 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n1.html">n1.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right">232 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="n2.html">n2.html</a></td><td align="right">2008-01-19 15:32 </td><td align="right"> 98 </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/img/n1.html b/old/test/img/n1.html new file mode 100644 index 0000000..122b85a --- /dev/null +++ b/old/test/img/n1.html @@ -0,0 +1,8 @@ +<!doctype HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html><body> + +<a href="https://www.dillo.org/test/bookstore1.htm" target="_blank"> + <img src="gotage.gif" alt="Fifth" align="left" + hspace="20" border="50" width="88" height="140"></a> + +</body></html> diff --git a/old/test/img/n2.html b/old/test/img/n2.html new file mode 100644 index 0000000..c5071cc --- /dev/null +++ b/old/test/img/n2.html @@ -0,0 +1,9 @@ +<HTML><BODY> + +<A HREF="https://www.dillo.org/test/img/blah"> + <IMG SRC="gotage.gif" ALIGN=LEFT VSPACE=15> +</A> + +</BODY></HTML> + + diff --git a/old/test/img/n3.html b/old/test/img/n3.html new file mode 100644 index 0000000..e13e118 --- /dev/null +++ b/old/test/img/n3.html @@ -0,0 +1,8 @@ +<!doctype HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html><body> + +<a href="https://www.dillo.org/test/bookstore1.htm" target="_blank"> + <img src="gotage.gif" alt="Fifth" align="left" + hspace="200" vspace="100" border="50" width="88" height="140"></a> + +</body></html> diff --git a/old/test/img_loading_options.patch b/old/test/img_loading_options.patch new file mode 100644 index 0000000..2b90fa2 --- /dev/null +++ b/old/test/img_loading_options.patch @@ -0,0 +1,323 @@ +diff -r 9d82957f8d6a src/html.cc +--- a/src/html.cc Thu Sep 03 18:42:54 2009 +0000 ++++ b/src/html.cc Sun Sep 06 22:52:31 2009 +0000 +@@ -197,13 +197,23 @@ static void Html_free(void *data) + } + + /* +- * Used by the "Load images" page menuitem. +- */ +-void a_Html_load_images(void *v_html, DilloUrl *pattern) ++ * Used by the "Load image" image menuitem. ++ */ ++void a_Html_load_image(void *v_html, const DilloUrl *url) + { + DilloHtml *html = (DilloHtml*)v_html; + +- html->loadImages(pattern); ++ html->loadImages(url, "same url"); ++} ++ ++/* ++ * Used by the "Autoload images" tools menu item ++ */ ++void a_Html_load_images(void *v_html) ++{ ++ DilloHtml *html = (DilloHtml*)v_html; ++ ++ html->loadImages(html->page_url, prefs.load_images); + } + + /* +@@ -662,18 +672,70 @@ bool_t DilloHtml::unloadedImages() + return FALSE; + } + ++/* TODO: clean up, make understandable :) */ ++static bool Html_domain_match(const DilloUrl *page, const DilloUrl *image) ++{ ++ const char *page_str = URL_HOST(page), ++ *img_str = URL_HOST(image); ++ uint_t page_strlen = strlen(page_str); ++ ++ MSG("Html_domain_match:\n%s\n%s\n", page_str, img_str); ++ if (isalpha(page_str[page_strlen - 1])) { ++ /* For IP addrs, match fully. For hostnames, let's say for now that ++ * if you have two dots, we will ignore what's before the first dot. ++ */ ++ char *dot = strchr(page_str, '.'); ++ ++ if (dot && strchr(dot + 1, '.')) { ++ page_strlen -= dot + 1 - page_str; ++ page_str = dot + 1; ++ } ++ uint_t img_strlen = strlen(img_str); ++ ++ if (img_strlen < page_strlen) { ++ MSG("FAIL\n"); ++ return false; ++ } else { ++ if (img_strlen > page_strlen && ++ img_str[img_strlen - page_strlen - 1] == '.') { ++ img_str += img_strlen - page_strlen; ++ } ++ } ++ } ++ bool ret = dStrcasecmp(page_str, img_str) == 0; ++ if (ret) ++ MSG("MATCH\n"); ++ else ++ MSG("FAIL\n"); ++ return ret; ++ ++ /* I guess a dot suffix would foil this, but it's not worth worrying ++ * about for the moment ++ */ ++} ++ + /* + * Load images if they were disabled. + */ +-void DilloHtml::loadImages (const DilloUrl *pattern) ++void DilloHtml::loadImages (const DilloUrl *url, const char *strictness) + { + dReturn_if_fail (bw->nav_expecting == FALSE); + + for (int i = 0; i < images->size(); i++) { +- if (images->get(i)->image) { +- if ((!pattern) || (!a_Url_cmp(images->get(i)->url, pattern))) { +- Html_load_image(bw, images->get(i)->url, images->get(i)->image); +- a_Image_unref (images->get(i)->image); ++ DilloImage *image; ++ DilloUrl *url2; ++ ++ if ((image = images->get(i)->image)) { ++ url2 = images->get(i)->url; ++ if (!dStrcasecmp(strictness, "yes") || ++ (!dStrcasecmp(strictness, "same url") && ++ !a_Url_cmp(url, url2)) || ++ (!dStrcasecmp(strictness, "same host") && ++ !dStrcasecmp(URL_HOST(url), URL_HOST(url2))) || ++ (!dStrcasecmp(strictness, "same domain") && ++ Html_domain_match(url, url2))) { ++ Html_load_image(bw, url2, image); ++ a_Image_unref (image); + images->get(i)->image = NULL; // web owns it now + } + } +@@ -755,8 +817,7 @@ bool DilloHtml::HtmlLinkReceiver::click + // clicked an image that has not already been loaded + if (event->button == 1){ + // load all instances of this image +- DilloUrl *pattern = html->images->get(img)->url; +- html->loadImages(pattern); ++ html->loadImages(html->images->get(img)->url, "same url"); + return true; + } + } +@@ -1970,6 +2031,18 @@ static void Html_tag_open_address(DilloH + HT2TB(html)->addParbreak (9, html->styleEngine->wordStyle ()); + } + ++static bool Html_autoload_image(const DilloUrl *page_url, ++ const DilloUrl *image_url) ++{ ++ if (dStrcasecmp(prefs.load_images, "yes") == 0) ++ return true; ++ if (dStrcasecmp(prefs.load_images, "same host") == 0) ++ return (dStrcasecmp(URL_HOST(page_url), URL_HOST(image_url)) == 0); ++ if (dStrcasecmp(prefs.load_images, "same domain") == 0) ++ return Html_domain_match(page_url, image_url); ++ return false; ++} ++ + /* + * Read image-associated tag attributes and create new image. + */ +@@ -1989,8 +2062,11 @@ DilloImage *a_Html_image_new(DilloHtml * + // (attrbuf = a_Html_get_attr(html, tag, tagsize, "title"))) + // style_attrs->x_tooltip = a_Dw_tooltip_new_no_ref(attrbuf); + ++ load_now = Html_autoload_image(html->page_url, url) || ++ (a_Capi_get_flags_with_redirection(url) & CAPI_IsCached); ++ + alt_ptr = a_Html_get_attr_wdef(html, tag, tagsize, "alt", NULL); +- if ((!alt_ptr || !*alt_ptr) && !prefs.load_images) { ++ if (!load_now && (!alt_ptr || !*alt_ptr)) { + dFree(alt_ptr); + alt_ptr = dStrdup("[IMG]"); // Place holder for img_off mode + } +@@ -2098,8 +2174,6 @@ DilloImage *a_Html_image_new(DilloHtml * + if (HT2TB(html)->getBgColor()) + Image->bg_color = HT2TB(html)->getBgColor()->getColor(); + +- load_now = prefs.load_images || +- (a_Capi_get_flags_with_redirection(url) & CAPI_IsCached); + Html_add_new_linkimage(html, &url, load_now ? NULL : Image); + if (load_now) + Html_load_image(html->bw, url, Image); +diff -r 9d82957f8d6a src/html.hh +--- a/src/html.hh Thu Sep 03 18:42:54 2009 +0000 ++++ b/src/html.hh Sun Sep 06 22:52:31 2009 +0000 +@@ -10,7 +10,8 @@ extern "C" { + /* + * Exported functions + */ +-void a_Html_load_images(void *v_html, DilloUrl *pattern); ++void a_Html_load_image(void *v_html, const DilloUrl *url); ++void a_Html_load_images(void *v_html); + void a_Html_form_submit(void *v_html, void *v_form); + void a_Html_form_reset(void *v_html, void *v_form); + void a_Html_form_display_hiddens(void *v_html, void *v_form, bool_t display); +diff -r 9d82957f8d6a src/html_common.hh +--- a/src/html_common.hh Thu Sep 03 18:42:54 2009 +0000 ++++ b/src/html_common.hh Sun Sep 06 22:52:31 2009 +0000 +@@ -209,7 +209,7 @@ public: + DilloHtmlEnc enc, const char *charset); + DilloHtmlForm *getCurrentForm (); + bool_t unloadedImages(); +- void loadImages (const DilloUrl *pattern); ++ void loadImages (const DilloUrl *url, const char *strictness); + void addCssUrl(const DilloUrl *url); + }; + +diff -r 9d82957f8d6a src/menu.cc +--- a/src/menu.cc Thu Sep 03 18:42:54 2009 +0000 ++++ b/src/menu.cc Sun Sep 06 22:52:31 2009 +0000 +@@ -192,15 +192,15 @@ static void Menu_view_page_bugs_cb(Widge + } + + /* +- * Load images on current page that match URL pattern +- */ +-static void Menu_load_images_cb(Widget*, void *user_data) ++ * Load image on current page that match URL pattern ++ */ ++static void Menu_load_image_cb(Widget*, void *user_data) + { + DilloUrl *page_url = (DilloUrl *) user_data; + void *doc = a_Bw_get_url_doc(popup_bw, page_url); + + if (doc) +- a_Html_load_images(doc, popup_url); ++ a_Html_load_image(doc, popup_url); + } + + /* +@@ -473,7 +473,7 @@ void a_Menu_image_popup(BrowserWindow *b + i->callback(Menu_open_url_nt_cb); + new Divider(); + i = load_img_menuitem = new Item("Load image"); +- i->callback(Menu_load_images_cb); ++ i->callback(Menu_load_image_cb); + i = new Item("Bookmark this Image"); + i->callback(Menu_add_bookmark_cb); + i = new Item("Copy Image location"); +@@ -674,16 +674,23 @@ static void Menu_embedded_css_cb(Widget + } + + /* +- * Toggle loading of images -- and load them if enabling. +- */ +-static void Menu_imgload_toggle_cb(Widget *wid) +-{ +- if ((prefs.load_images = wid->state() ? 1 : 0)) { ++ * Change setting for loading images -- and load them if enabled. ++ */ ++static void Menu_imgload_cb(Widget *wid) ++{ ++ char *parent_label = dStrconcat("Autoload images: ", wid->label(), NULL); ++ ++ dFree((char *)wid->parent()->label()); ++ wid->parent()->label(parent_label); ++ ++ dFree(prefs.load_images); ++ prefs.load_images = dStrdup(wid->label()); ++ ++ if (dStrcasecmp(wid->label(), "no")) { + void *doc = a_Bw_get_current_doc(popup_bw); + + if (doc) { +- DilloUrl *pattern = NULL; +- a_Html_load_images(doc, pattern); ++ a_Html_load_images(doc); + } + } + } +@@ -710,9 +717,21 @@ void a_Menu_tools_popup(BrowserWindow *b + it->callback(Menu_embedded_css_cb); + it->state(prefs.parse_embedded_css); + new Divider(); +- it = new ToggleItem("Load images"); +- it->callback(Menu_imgload_toggle_cb); +- it->state(prefs.load_images); ++ ++ char *label = dStrconcat("Autoload images: ", prefs.load_images, NULL); ++ ItemGroup *ig = new ItemGroup(label); ++ it = new Item("yes"); ++ it->callback(Menu_imgload_cb); ++ ig->add(it); ++ it = new Item("same domain"); ++ it->callback(Menu_imgload_cb); ++ ig->add(it); ++ it = new Item("same host"); ++ it->callback(Menu_imgload_cb); ++ ig->add(it); ++ it = new Item("no"); ++ it->callback(Menu_imgload_cb); ++ ig->add(it); + pm->type(PopupMenu::POPUP13); + pm->end(); + } +diff -r 9d82957f8d6a src/prefs.c +--- a/src/prefs.c Thu Sep 03 18:42:54 2009 +0000 ++++ b/src/prefs.c Sun Sep 06 22:52:32 2009 +0000 +@@ -22,6 +22,7 @@ + #define PREFS_NO_PROXY "localhost 127.0.0.1" + #define PREFS_SAVE_DIR "/tmp/" + #define PREFS_HTTP_REFERER "host" ++#define PREFS_LOAD_IMAGES "yes" + + /*----------------------------------------------------------------------------- + * Global Data +@@ -61,7 +62,7 @@ void a_Prefs_init(void) + prefs.http_proxyuser = NULL; + prefs.http_referer = dStrdup(PREFS_HTTP_REFERER); + prefs.limit_text_width = FALSE; +- prefs.load_images=TRUE; ++ prefs.load_images = dStrdup(PREFS_LOAD_IMAGES); + prefs.load_stylesheets=TRUE; + prefs.middle_click_drags_page = TRUE; + prefs.middle_click_opens_new_tab = TRUE; +@@ -107,6 +108,7 @@ void a_Prefs_freeall(void) + a_Url_free(prefs.http_proxy); + dFree(prefs.http_proxyuser); + dFree(prefs.http_referer); ++ dFree(prefs.load_images); + dFree(prefs.no_proxy); + dFree(prefs.save_dir); + dFree(prefs.search_url); +diff -r 9d82957f8d6a src/prefs.h +--- a/src/prefs.h Thu Sep 03 18:42:54 2009 +0000 ++++ b/src/prefs.h Sun Sep 06 22:52:32 2009 +0000 +@@ -65,7 +65,7 @@ struct _DilloPrefs { + bool_t show_search; + bool_t show_progress_box; + bool_t fullwindow_start; +- bool_t load_images; ++ char *load_images; + bool_t load_stylesheets; + bool_t parse_embedded_css; + int32_t buffered_drawing; +diff -r 9d82957f8d6a src/prefsparser.cc +--- a/src/prefsparser.cc Thu Sep 03 18:42:54 2009 +0000 ++++ b/src/prefsparser.cc Sun Sep 06 22:52:32 2009 +0000 +@@ -67,7 +67,7 @@ int PrefsParser::parseOption(char *name, + { "http_proxyuser", &prefs.http_proxyuser, PREFS_STRING }, + { "http_referer", &prefs.http_referer, PREFS_STRING }, + { "limit_text_width", &prefs.limit_text_width, PREFS_BOOL }, +- { "load_images", &prefs.load_images, PREFS_BOOL }, ++ { "load_images", &prefs.load_images, PREFS_STRING }, + { "load_stylesheets", &prefs.load_stylesheets, PREFS_BOOL }, + { "middle_click_drags_page", &prefs.middle_click_drags_page, + PREFS_BOOL }, diff --git a/old/test/img_ratio.html b/old/test/img_ratio.html new file mode 100644 index 0000000..276ea5c --- /dev/null +++ b/old/test/img_ratio.html @@ -0,0 +1,19 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> + <HEAD> + <TITLE> IMG with only height or only width test. </TITLE> + </HEAD> + <H1 ALIGN="CENTER"> + Only width: + </H1> + <IMG SRC="https://www.dillo.org/test/maj00s.gif" width="100" title="The fool"> + <HR> + + <H1 ALIGN="CENTER"> + Only height: + </H1> + <IMG SRC="https://www.dillo.org/test/maj00s.gif" height="165" title="The fool"> + <HR> + + </HTML> + diff --git a/old/test/index.html?C=D;O=A.html b/old/test/index.html?C=D;O=A.html new file mode 100644 index 0000000..1799216 --- /dev/null +++ b/old/test/index.html?C=D;O=A.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test</title> + </head> + <body> +<h1>Index of /test</h1> + <table> + <tr><th valign="top"><img src="../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=D.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../index.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="4648/index.html">4648/</a></td><td align="right">2016-08-04 16:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="DragonFly.html.bz2">DragonFly.html.bz2</a></td><td align="right">2009-04-21 00:01 </td><td align="right"> 97K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2837.png">HB.d2837.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">147K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2861.png">HB.d2861.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">146K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch">adblocker.patch</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.0">adblocker.patch.0</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.1">adblocker.patch.1</a></td><td align="right">2008-12-27 20:09 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="bar.html">bar</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 13 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="bc1.html">bc1.html</a></td><td align="right">2010-10-12 19:14 </td><td align="right">787 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test1.html">charref_test1.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">886 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.5.html">charref_test2.5.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">746 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.html">charref_test2.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">806 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test3.html">charref_test3.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">839 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="choose_colors2.diff">choose_colors2.diff</a></td><td align="right">2013-01-03 07:27 </td><td align="right">7.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="color_themes.diff">color_themes.diff</a></td><td align="right">2013-01-13 06:32 </td><td align="right"> 13K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cross-nesting-simple.html">cross-nesting-simple.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs1.html">cs1.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs7.html">cs7.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="css-top-margin-bug.html">css-top-margin-bug.html</a></td><td align="right">2010-05-22 17:40 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/tar.gif" alt="[ ]"></td><td><a href="css-top-margin-bug.tar">css-top-margin-bug.tar</a></td><td align="right">2010-05-22 17:40 </td><td align="right"> 70K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo-tabs.png">dillo-tabs.png</a></td><td align="right">2011-09-15 21:03 </td><td align="right"> 72K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.html">dillo2.html</a></td><td align="right">2012-03-20 19:31 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp1.html">dillo2.tmp1.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp2.html">dillo2.tmp2.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo_tabs.png">dillo_tabs.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 21K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillobanner2.png">dillobanner2.png</a></td><td align="right">2009-05-02 02:50 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="discard-syntax-errors.html">discard-syntax-errors.html</a></td><td align="right">2010-10-21 13:26 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/layout.gif" alt="[ ]"></td><td><a href="empty.pdf">empty.pdf</a></td><td align="right">2009-02-13 01:25 </td><td align="right"> 0 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.1.patch">filtering.1.patch</a></td><td align="right">2009-09-12 04:03 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.2.patch">filtering.2.patch</a></td><td align="right">2009-12-28 02:59 </td><td align="right"> 16K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="foo.html">foo</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 4 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form-select-multiple.html">form-select-multiple.html</a></td><td align="right">2011-06-29 17:32 </td><td align="right">919 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form_reset.html">form_reset.html</a></td><td align="right">2012-11-24 21:27 </td><td align="right">1.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="gettext.0.diff.bz2">gettext.0.diff.bz2</a></td><td align="right">2011-08-03 07:38 </td><td align="right"> 41K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="gnash.cc">gnash.cc</a></td><td align="right">2008-10-10 18:45 </td><td align="right"> 12K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="img/index.html">img/</a></td><td align="right">2008-01-19 15:34 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_loading_options.patch">img_loading_options.patch</a></td><td align="right">2009-09-07 01:02 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_ratio.html">img_ratio.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">452 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="jorgen.html">jorgen.html</a></td><td align="right">2009-01-26 17:25 </td><td align="right">351 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li.html">li.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">155 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li2.html">li2.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">185 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li_minus.html">li_minus.html</a></td><td align="right">2006-01-16 20:35 </td><td align="right">177 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="long_alt_text.html">long_alt_text.html</a></td><td align="right">2011-08-25 03:35 </td><td align="right"> 80K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="mbedtls.diff">mbedtls.diff</a></td><td align="right">2016-07-02 02:53 </td><td align="right"> 60K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="mr-test.tgz">mr-test.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="msg_levels.diff">msg_levels.diff</a></td><td align="right">2013-04-27 00:19 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="msqldoc.tgz">msqldoc.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">142K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="https://www.dillo.org/test/mysql-6.0.doc.tar.bz2">mysql-6.0.doc.tar.bz2</a></td><td align="right">2009-04-20 23:28 </td><td align="right">4.7M</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="norow.html">norow.html</a></td><td align="right">2009-08-10 15:51 </td><td align="right">236 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph1.png">ph1.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 51K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph2.png">ph2.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 50K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="public_suffix.diff">public_suffix.diff</a></td><td align="right">2010-01-16 03:38 </td><td align="right">9.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="redraws.html">redraws.html</a></td><td align="right">2011-09-03 18:24 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="rowspan.html">rowspan.html</a></td><td align="right">2007-11-25 18:02 </td><td align="right">4.9K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="sd3.html">sd3.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">184 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="style.css">style.css</a></td><td align="right">2010-05-11 12:47 </td><td align="right">544 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="tables/index.html">tables/</a></td><td align="right">2008-01-19 15:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="vertical-align.patch">vertical-align.patch</a></td><td align="right">2009-12-22 02:05 </td><td align="right"> 17K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="weirdChars.jpg">weirdChars.jpg</a></td><td align="right">2009-09-25 13:31 </td><td align="right"> 54K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="weird_pre.html">weird_pre.html</a></td><td align="right">2009-01-26 17:28 </td><td align="right">2.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="xmp2.png">xmp2.png</a></td><td align="right">2009-11-10 22:43 </td><td align="right"> 38K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/index.html?C=D;O=D.html b/old/test/index.html?C=D;O=D.html new file mode 100644 index 0000000..7b601ae --- /dev/null +++ b/old/test/index.html?C=D;O=D.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test</title> + </head> + <body> +<h1>Index of /test</h1> + <table> + <tr><th valign="top"><img src="../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../index.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="xmp2.png">xmp2.png</a></td><td align="right">2009-11-10 22:43 </td><td align="right"> 38K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="weird_pre.html">weird_pre.html</a></td><td align="right">2009-01-26 17:28 </td><td align="right">2.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="weirdChars.jpg">weirdChars.jpg</a></td><td align="right">2009-09-25 13:31 </td><td align="right"> 54K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="vertical-align.patch">vertical-align.patch</a></td><td align="right">2009-12-22 02:05 </td><td align="right"> 17K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="tables/index.html">tables/</a></td><td align="right">2008-01-19 15:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="style.css">style.css</a></td><td align="right">2010-05-11 12:47 </td><td align="right">544 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="sd3.html">sd3.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">184 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="rowspan.html">rowspan.html</a></td><td align="right">2007-11-25 18:02 </td><td align="right">4.9K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="redraws.html">redraws.html</a></td><td align="right">2011-09-03 18:24 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="public_suffix.diff">public_suffix.diff</a></td><td align="right">2010-01-16 03:38 </td><td align="right">9.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph2.png">ph2.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 50K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph1.png">ph1.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 51K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="norow.html">norow.html</a></td><td align="right">2009-08-10 15:51 </td><td align="right">236 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="https://www.dillo.org/test/mysql-6.0.doc.tar.bz2">mysql-6.0.doc.tar.bz2</a></td><td align="right">2009-04-20 23:28 </td><td align="right">4.7M</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="msqldoc.tgz">msqldoc.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">142K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="msg_levels.diff">msg_levels.diff</a></td><td align="right">2013-04-27 00:19 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="mr-test.tgz">mr-test.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="mbedtls.diff">mbedtls.diff</a></td><td align="right">2016-07-02 02:53 </td><td align="right"> 60K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="long_alt_text.html">long_alt_text.html</a></td><td align="right">2011-08-25 03:35 </td><td align="right"> 80K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li_minus.html">li_minus.html</a></td><td align="right">2006-01-16 20:35 </td><td align="right">177 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li2.html">li2.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">185 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li.html">li.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">155 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="jorgen.html">jorgen.html</a></td><td align="right">2009-01-26 17:25 </td><td align="right">351 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_ratio.html">img_ratio.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">452 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_loading_options.patch">img_loading_options.patch</a></td><td align="right">2009-09-07 01:02 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="img/index.html">img/</a></td><td align="right">2008-01-19 15:34 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="gnash.cc">gnash.cc</a></td><td align="right">2008-10-10 18:45 </td><td align="right"> 12K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="gettext.0.diff.bz2">gettext.0.diff.bz2</a></td><td align="right">2011-08-03 07:38 </td><td align="right"> 41K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form_reset.html">form_reset.html</a></td><td align="right">2012-11-24 21:27 </td><td align="right">1.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form-select-multiple.html">form-select-multiple.html</a></td><td align="right">2011-06-29 17:32 </td><td align="right">919 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="foo.html">foo</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 4 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.2.patch">filtering.2.patch</a></td><td align="right">2009-12-28 02:59 </td><td align="right"> 16K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.1.patch">filtering.1.patch</a></td><td align="right">2009-09-12 04:03 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/layout.gif" alt="[ ]"></td><td><a href="empty.pdf">empty.pdf</a></td><td align="right">2009-02-13 01:25 </td><td align="right"> 0 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="discard-syntax-errors.html">discard-syntax-errors.html</a></td><td align="right">2010-10-21 13:26 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillobanner2.png">dillobanner2.png</a></td><td align="right">2009-05-02 02:50 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo_tabs.png">dillo_tabs.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 21K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp2.html">dillo2.tmp2.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp1.html">dillo2.tmp1.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.html">dillo2.html</a></td><td align="right">2012-03-20 19:31 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo-tabs.png">dillo-tabs.png</a></td><td align="right">2011-09-15 21:03 </td><td align="right"> 72K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/tar.gif" alt="[ ]"></td><td><a href="css-top-margin-bug.tar">css-top-margin-bug.tar</a></td><td align="right">2010-05-22 17:40 </td><td align="right"> 70K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="css-top-margin-bug.html">css-top-margin-bug.html</a></td><td align="right">2010-05-22 17:40 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs7.html">cs7.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs1.html">cs1.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cross-nesting-simple.html">cross-nesting-simple.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="color_themes.diff">color_themes.diff</a></td><td align="right">2013-01-13 06:32 </td><td align="right"> 13K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="choose_colors2.diff">choose_colors2.diff</a></td><td align="right">2013-01-03 07:27 </td><td align="right">7.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test3.html">charref_test3.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">839 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.html">charref_test2.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">806 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.5.html">charref_test2.5.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">746 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test1.html">charref_test1.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">886 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="bc1.html">bc1.html</a></td><td align="right">2010-10-12 19:14 </td><td align="right">787 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="bar.html">bar</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 13 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.1">adblocker.patch.1</a></td><td align="right">2008-12-27 20:09 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.0">adblocker.patch.0</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch">adblocker.patch</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2861.png">HB.d2861.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">146K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2837.png">HB.d2837.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">147K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="DragonFly.html.bz2">DragonFly.html.bz2</a></td><td align="right">2009-04-21 00:01 </td><td align="right"> 97K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="4648/index.html">4648/</a></td><td align="right">2016-08-04 16:08 </td><td align="right"> - </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/index.html?C=M;O=A.html b/old/test/index.html?C=M;O=A.html new file mode 100644 index 0000000..db97009 --- /dev/null +++ b/old/test/index.html?C=M;O=A.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test</title> + </head> + <body> +<h1>Index of /test</h1> + <table> + <tr><th valign="top"><img src="../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=D.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../index.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo_tabs.png">dillo_tabs.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 21K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_ratio.html">img_ratio.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">452 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li.html">li.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">155 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li2.html">li2.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">185 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="mr-test.tgz">mr-test.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="msqldoc.tgz">msqldoc.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">142K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph1.png">ph1.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 51K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph2.png">ph2.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 50K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li_minus.html">li_minus.html</a></td><td align="right">2006-01-16 20:35 </td><td align="right">177 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="rowspan.html">rowspan.html</a></td><td align="right">2007-11-25 18:02 </td><td align="right">4.9K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs1.html">cs1.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs7.html">cs7.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="tables/index.html">tables/</a></td><td align="right">2008-01-19 15:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="img/index.html">img/</a></td><td align="right">2008-01-19 15:34 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="bar.html">bar</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 13 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="foo.html">foo</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 4 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="gnash.cc">gnash.cc</a></td><td align="right">2008-10-10 18:45 </td><td align="right"> 12K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.1">adblocker.patch.1</a></td><td align="right">2008-12-27 20:09 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.0">adblocker.patch.0</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch">adblocker.patch</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="jorgen.html">jorgen.html</a></td><td align="right">2009-01-26 17:25 </td><td align="right">351 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="weird_pre.html">weird_pre.html</a></td><td align="right">2009-01-26 17:28 </td><td align="right">2.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/layout.gif" alt="[ ]"></td><td><a href="empty.pdf">empty.pdf</a></td><td align="right">2009-02-13 01:25 </td><td align="right"> 0 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="https://www.dillo.org/test/mysql-6.0.doc.tar.bz2">mysql-6.0.doc.tar.bz2</a></td><td align="right">2009-04-20 23:28 </td><td align="right">4.7M</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="DragonFly.html.bz2">DragonFly.html.bz2</a></td><td align="right">2009-04-21 00:01 </td><td align="right"> 97K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillobanner2.png">dillobanner2.png</a></td><td align="right">2009-05-02 02:50 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="norow.html">norow.html</a></td><td align="right">2009-08-10 15:51 </td><td align="right">236 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_loading_options.patch">img_loading_options.patch</a></td><td align="right">2009-09-07 01:02 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.1.patch">filtering.1.patch</a></td><td align="right">2009-09-12 04:03 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="weirdChars.jpg">weirdChars.jpg</a></td><td align="right">2009-09-25 13:31 </td><td align="right"> 54K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="xmp2.png">xmp2.png</a></td><td align="right">2009-11-10 22:43 </td><td align="right"> 38K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="vertical-align.patch">vertical-align.patch</a></td><td align="right">2009-12-22 02:05 </td><td align="right"> 17K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.2.patch">filtering.2.patch</a></td><td align="right">2009-12-28 02:59 </td><td align="right"> 16K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="public_suffix.diff">public_suffix.diff</a></td><td align="right">2010-01-16 03:38 </td><td align="right">9.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="style.css">style.css</a></td><td align="right">2010-05-11 12:47 </td><td align="right">544 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/tar.gif" alt="[ ]"></td><td><a href="css-top-margin-bug.tar">css-top-margin-bug.tar</a></td><td align="right">2010-05-22 17:40 </td><td align="right"> 70K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="css-top-margin-bug.html">css-top-margin-bug.html</a></td><td align="right">2010-05-22 17:40 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="bc1.html">bc1.html</a></td><td align="right">2010-10-12 19:14 </td><td align="right">787 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="discard-syntax-errors.html">discard-syntax-errors.html</a></td><td align="right">2010-10-21 13:26 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form-select-multiple.html">form-select-multiple.html</a></td><td align="right">2011-06-29 17:32 </td><td align="right">919 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="gettext.0.diff.bz2">gettext.0.diff.bz2</a></td><td align="right">2011-08-03 07:38 </td><td align="right"> 41K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="long_alt_text.html">long_alt_text.html</a></td><td align="right">2011-08-25 03:35 </td><td align="right"> 80K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="redraws.html">redraws.html</a></td><td align="right">2011-09-03 18:24 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo-tabs.png">dillo-tabs.png</a></td><td align="right">2011-09-15 21:03 </td><td align="right"> 72K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.html">dillo2.html</a></td><td align="right">2012-03-20 19:31 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp1.html">dillo2.tmp1.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp2.html">dillo2.tmp2.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form_reset.html">form_reset.html</a></td><td align="right">2012-11-24 21:27 </td><td align="right">1.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="choose_colors2.diff">choose_colors2.diff</a></td><td align="right">2013-01-03 07:27 </td><td align="right">7.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="color_themes.diff">color_themes.diff</a></td><td align="right">2013-01-13 06:32 </td><td align="right"> 13K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="msg_levels.diff">msg_levels.diff</a></td><td align="right">2013-04-27 00:19 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2837.png">HB.d2837.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">147K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2861.png">HB.d2861.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">146K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test1.html">charref_test1.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">886 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.5.html">charref_test2.5.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">746 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.html">charref_test2.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">806 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test3.html">charref_test3.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">839 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cross-nesting-simple.html">cross-nesting-simple.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="sd3.html">sd3.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">184 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="mbedtls.diff">mbedtls.diff</a></td><td align="right">2016-07-02 02:53 </td><td align="right"> 60K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="4648/index.html">4648/</a></td><td align="right">2016-08-04 16:08 </td><td align="right"> - </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/index.html?C=M;O=D.html b/old/test/index.html?C=M;O=D.html new file mode 100644 index 0000000..6c0912e --- /dev/null +++ b/old/test/index.html?C=M;O=D.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test</title> + </head> + <body> +<h1>Index of /test</h1> + <table> + <tr><th valign="top"><img src="../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../index.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="4648/index.html">4648/</a></td><td align="right">2016-08-04 16:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="mbedtls.diff">mbedtls.diff</a></td><td align="right">2016-07-02 02:53 </td><td align="right"> 60K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="sd3.html">sd3.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">184 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cross-nesting-simple.html">cross-nesting-simple.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test3.html">charref_test3.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">839 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.html">charref_test2.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">806 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.5.html">charref_test2.5.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">746 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test1.html">charref_test1.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">886 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2861.png">HB.d2861.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">146K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2837.png">HB.d2837.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">147K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="msg_levels.diff">msg_levels.diff</a></td><td align="right">2013-04-27 00:19 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="color_themes.diff">color_themes.diff</a></td><td align="right">2013-01-13 06:32 </td><td align="right"> 13K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="choose_colors2.diff">choose_colors2.diff</a></td><td align="right">2013-01-03 07:27 </td><td align="right">7.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form_reset.html">form_reset.html</a></td><td align="right">2012-11-24 21:27 </td><td align="right">1.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp2.html">dillo2.tmp2.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp1.html">dillo2.tmp1.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.html">dillo2.html</a></td><td align="right">2012-03-20 19:31 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo-tabs.png">dillo-tabs.png</a></td><td align="right">2011-09-15 21:03 </td><td align="right"> 72K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="redraws.html">redraws.html</a></td><td align="right">2011-09-03 18:24 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="long_alt_text.html">long_alt_text.html</a></td><td align="right">2011-08-25 03:35 </td><td align="right"> 80K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="gettext.0.diff.bz2">gettext.0.diff.bz2</a></td><td align="right">2011-08-03 07:38 </td><td align="right"> 41K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form-select-multiple.html">form-select-multiple.html</a></td><td align="right">2011-06-29 17:32 </td><td align="right">919 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="discard-syntax-errors.html">discard-syntax-errors.html</a></td><td align="right">2010-10-21 13:26 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="bc1.html">bc1.html</a></td><td align="right">2010-10-12 19:14 </td><td align="right">787 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="css-top-margin-bug.html">css-top-margin-bug.html</a></td><td align="right">2010-05-22 17:40 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/tar.gif" alt="[ ]"></td><td><a href="css-top-margin-bug.tar">css-top-margin-bug.tar</a></td><td align="right">2010-05-22 17:40 </td><td align="right"> 70K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="style.css">style.css</a></td><td align="right">2010-05-11 12:47 </td><td align="right">544 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="public_suffix.diff">public_suffix.diff</a></td><td align="right">2010-01-16 03:38 </td><td align="right">9.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.2.patch">filtering.2.patch</a></td><td align="right">2009-12-28 02:59 </td><td align="right"> 16K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="vertical-align.patch">vertical-align.patch</a></td><td align="right">2009-12-22 02:05 </td><td align="right"> 17K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="xmp2.png">xmp2.png</a></td><td align="right">2009-11-10 22:43 </td><td align="right"> 38K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="weirdChars.jpg">weirdChars.jpg</a></td><td align="right">2009-09-25 13:31 </td><td align="right"> 54K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.1.patch">filtering.1.patch</a></td><td align="right">2009-09-12 04:03 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_loading_options.patch">img_loading_options.patch</a></td><td align="right">2009-09-07 01:02 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="norow.html">norow.html</a></td><td align="right">2009-08-10 15:51 </td><td align="right">236 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillobanner2.png">dillobanner2.png</a></td><td align="right">2009-05-02 02:50 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="DragonFly.html.bz2">DragonFly.html.bz2</a></td><td align="right">2009-04-21 00:01 </td><td align="right"> 97K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="https://www.dillo.org/test/mysql-6.0.doc.tar.bz2">mysql-6.0.doc.tar.bz2</a></td><td align="right">2009-04-20 23:28 </td><td align="right">4.7M</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/layout.gif" alt="[ ]"></td><td><a href="empty.pdf">empty.pdf</a></td><td align="right">2009-02-13 01:25 </td><td align="right"> 0 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="weird_pre.html">weird_pre.html</a></td><td align="right">2009-01-26 17:28 </td><td align="right">2.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="jorgen.html">jorgen.html</a></td><td align="right">2009-01-26 17:25 </td><td align="right">351 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch">adblocker.patch</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.0">adblocker.patch.0</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.1">adblocker.patch.1</a></td><td align="right">2008-12-27 20:09 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="gnash.cc">gnash.cc</a></td><td align="right">2008-10-10 18:45 </td><td align="right"> 12K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="foo.html">foo</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 4 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="bar.html">bar</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 13 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="img/index.html">img/</a></td><td align="right">2008-01-19 15:34 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="tables/index.html">tables/</a></td><td align="right">2008-01-19 15:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs7.html">cs7.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs1.html">cs1.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="rowspan.html">rowspan.html</a></td><td align="right">2007-11-25 18:02 </td><td align="right">4.9K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li_minus.html">li_minus.html</a></td><td align="right">2006-01-16 20:35 </td><td align="right">177 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph2.png">ph2.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 50K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph1.png">ph1.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 51K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="msqldoc.tgz">msqldoc.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">142K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="mr-test.tgz">mr-test.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li2.html">li2.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">185 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li.html">li.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">155 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_ratio.html">img_ratio.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">452 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo_tabs.png">dillo_tabs.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 21K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/index.html?C=N;O=A.html b/old/test/index.html?C=N;O=A.html new file mode 100644 index 0000000..11efb4d --- /dev/null +++ b/old/test/index.html?C=N;O=A.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test</title> + </head> + <body> +<h1>Index of /test</h1> + <table> + <tr><th valign="top"><img src="../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=D.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../index.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="4648/index.html">4648/</a></td><td align="right">2016-08-04 16:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="DragonFly.html.bz2">DragonFly.html.bz2</a></td><td align="right">2009-04-21 00:01 </td><td align="right"> 97K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2837.png">HB.d2837.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">147K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2861.png">HB.d2861.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">146K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch">adblocker.patch</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.0">adblocker.patch.0</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.1">adblocker.patch.1</a></td><td align="right">2008-12-27 20:09 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="bar.html">bar</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 13 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="bc1.html">bc1.html</a></td><td align="right">2010-10-12 19:14 </td><td align="right">787 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test1.html">charref_test1.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">886 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.5.html">charref_test2.5.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">746 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.html">charref_test2.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">806 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test3.html">charref_test3.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">839 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="choose_colors2.diff">choose_colors2.diff</a></td><td align="right">2013-01-03 07:27 </td><td align="right">7.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="color_themes.diff">color_themes.diff</a></td><td align="right">2013-01-13 06:32 </td><td align="right"> 13K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cross-nesting-simple.html">cross-nesting-simple.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs1.html">cs1.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs7.html">cs7.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="css-top-margin-bug.html">css-top-margin-bug.html</a></td><td align="right">2010-05-22 17:40 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/tar.gif" alt="[ ]"></td><td><a href="css-top-margin-bug.tar">css-top-margin-bug.tar</a></td><td align="right">2010-05-22 17:40 </td><td align="right"> 70K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo-tabs.png">dillo-tabs.png</a></td><td align="right">2011-09-15 21:03 </td><td align="right"> 72K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.html">dillo2.html</a></td><td align="right">2012-03-20 19:31 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp1.html">dillo2.tmp1.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp2.html">dillo2.tmp2.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo_tabs.png">dillo_tabs.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 21K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillobanner2.png">dillobanner2.png</a></td><td align="right">2009-05-02 02:50 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="discard-syntax-errors.html">discard-syntax-errors.html</a></td><td align="right">2010-10-21 13:26 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/layout.gif" alt="[ ]"></td><td><a href="empty.pdf">empty.pdf</a></td><td align="right">2009-02-13 01:25 </td><td align="right"> 0 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.1.patch">filtering.1.patch</a></td><td align="right">2009-09-12 04:03 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.2.patch">filtering.2.patch</a></td><td align="right">2009-12-28 02:59 </td><td align="right"> 16K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="foo.html">foo</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 4 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form-select-multiple.html">form-select-multiple.html</a></td><td align="right">2011-06-29 17:32 </td><td align="right">919 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form_reset.html">form_reset.html</a></td><td align="right">2012-11-24 21:27 </td><td align="right">1.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="gettext.0.diff.bz2">gettext.0.diff.bz2</a></td><td align="right">2011-08-03 07:38 </td><td align="right"> 41K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="gnash.cc">gnash.cc</a></td><td align="right">2008-10-10 18:45 </td><td align="right"> 12K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="img/index.html">img/</a></td><td align="right">2008-01-19 15:34 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_loading_options.patch">img_loading_options.patch</a></td><td align="right">2009-09-07 01:02 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_ratio.html">img_ratio.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">452 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="jorgen.html">jorgen.html</a></td><td align="right">2009-01-26 17:25 </td><td align="right">351 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li.html">li.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">155 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li2.html">li2.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">185 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li_minus.html">li_minus.html</a></td><td align="right">2006-01-16 20:35 </td><td align="right">177 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="long_alt_text.html">long_alt_text.html</a></td><td align="right">2011-08-25 03:35 </td><td align="right"> 80K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="mbedtls.diff">mbedtls.diff</a></td><td align="right">2016-07-02 02:53 </td><td align="right"> 60K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="mr-test.tgz">mr-test.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="msg_levels.diff">msg_levels.diff</a></td><td align="right">2013-04-27 00:19 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="msqldoc.tgz">msqldoc.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">142K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="https://www.dillo.org/test/mysql-6.0.doc.tar.bz2">mysql-6.0.doc.tar.bz2</a></td><td align="right">2009-04-20 23:28 </td><td align="right">4.7M</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="norow.html">norow.html</a></td><td align="right">2009-08-10 15:51 </td><td align="right">236 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph1.png">ph1.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 51K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph2.png">ph2.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 50K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="public_suffix.diff">public_suffix.diff</a></td><td align="right">2010-01-16 03:38 </td><td align="right">9.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="redraws.html">redraws.html</a></td><td align="right">2011-09-03 18:24 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="rowspan.html">rowspan.html</a></td><td align="right">2007-11-25 18:02 </td><td align="right">4.9K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="sd3.html">sd3.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">184 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="style.css">style.css</a></td><td align="right">2010-05-11 12:47 </td><td align="right">544 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="tables/index.html">tables/</a></td><td align="right">2008-01-19 15:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="vertical-align.patch">vertical-align.patch</a></td><td align="right">2009-12-22 02:05 </td><td align="right"> 17K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="weirdChars.jpg">weirdChars.jpg</a></td><td align="right">2009-09-25 13:31 </td><td align="right"> 54K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="weird_pre.html">weird_pre.html</a></td><td align="right">2009-01-26 17:28 </td><td align="right">2.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="xmp2.png">xmp2.png</a></td><td align="right">2009-11-10 22:43 </td><td align="right"> 38K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/index.html?C=N;O=D.html b/old/test/index.html?C=N;O=D.html new file mode 100644 index 0000000..7b601ae --- /dev/null +++ b/old/test/index.html?C=N;O=D.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test</title> + </head> + <body> +<h1>Index of /test</h1> + <table> + <tr><th valign="top"><img src="../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../index.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="xmp2.png">xmp2.png</a></td><td align="right">2009-11-10 22:43 </td><td align="right"> 38K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="weird_pre.html">weird_pre.html</a></td><td align="right">2009-01-26 17:28 </td><td align="right">2.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="weirdChars.jpg">weirdChars.jpg</a></td><td align="right">2009-09-25 13:31 </td><td align="right"> 54K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="vertical-align.patch">vertical-align.patch</a></td><td align="right">2009-12-22 02:05 </td><td align="right"> 17K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="tables/index.html">tables/</a></td><td align="right">2008-01-19 15:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="style.css">style.css</a></td><td align="right">2010-05-11 12:47 </td><td align="right">544 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="sd3.html">sd3.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">184 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="rowspan.html">rowspan.html</a></td><td align="right">2007-11-25 18:02 </td><td align="right">4.9K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="redraws.html">redraws.html</a></td><td align="right">2011-09-03 18:24 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="public_suffix.diff">public_suffix.diff</a></td><td align="right">2010-01-16 03:38 </td><td align="right">9.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph2.png">ph2.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 50K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph1.png">ph1.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 51K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="norow.html">norow.html</a></td><td align="right">2009-08-10 15:51 </td><td align="right">236 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="https://www.dillo.org/test/mysql-6.0.doc.tar.bz2">mysql-6.0.doc.tar.bz2</a></td><td align="right">2009-04-20 23:28 </td><td align="right">4.7M</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="msqldoc.tgz">msqldoc.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">142K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="msg_levels.diff">msg_levels.diff</a></td><td align="right">2013-04-27 00:19 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="mr-test.tgz">mr-test.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="mbedtls.diff">mbedtls.diff</a></td><td align="right">2016-07-02 02:53 </td><td align="right"> 60K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="long_alt_text.html">long_alt_text.html</a></td><td align="right">2011-08-25 03:35 </td><td align="right"> 80K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li_minus.html">li_minus.html</a></td><td align="right">2006-01-16 20:35 </td><td align="right">177 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li2.html">li2.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">185 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li.html">li.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">155 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="jorgen.html">jorgen.html</a></td><td align="right">2009-01-26 17:25 </td><td align="right">351 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_ratio.html">img_ratio.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">452 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_loading_options.patch">img_loading_options.patch</a></td><td align="right">2009-09-07 01:02 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="img/index.html">img/</a></td><td align="right">2008-01-19 15:34 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="gnash.cc">gnash.cc</a></td><td align="right">2008-10-10 18:45 </td><td align="right"> 12K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="gettext.0.diff.bz2">gettext.0.diff.bz2</a></td><td align="right">2011-08-03 07:38 </td><td align="right"> 41K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form_reset.html">form_reset.html</a></td><td align="right">2012-11-24 21:27 </td><td align="right">1.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form-select-multiple.html">form-select-multiple.html</a></td><td align="right">2011-06-29 17:32 </td><td align="right">919 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="foo.html">foo</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 4 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.2.patch">filtering.2.patch</a></td><td align="right">2009-12-28 02:59 </td><td align="right"> 16K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.1.patch">filtering.1.patch</a></td><td align="right">2009-09-12 04:03 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/layout.gif" alt="[ ]"></td><td><a href="empty.pdf">empty.pdf</a></td><td align="right">2009-02-13 01:25 </td><td align="right"> 0 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="discard-syntax-errors.html">discard-syntax-errors.html</a></td><td align="right">2010-10-21 13:26 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillobanner2.png">dillobanner2.png</a></td><td align="right">2009-05-02 02:50 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo_tabs.png">dillo_tabs.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 21K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp2.html">dillo2.tmp2.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp1.html">dillo2.tmp1.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.html">dillo2.html</a></td><td align="right">2012-03-20 19:31 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo-tabs.png">dillo-tabs.png</a></td><td align="right">2011-09-15 21:03 </td><td align="right"> 72K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/tar.gif" alt="[ ]"></td><td><a href="css-top-margin-bug.tar">css-top-margin-bug.tar</a></td><td align="right">2010-05-22 17:40 </td><td align="right"> 70K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="css-top-margin-bug.html">css-top-margin-bug.html</a></td><td align="right">2010-05-22 17:40 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs7.html">cs7.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs1.html">cs1.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cross-nesting-simple.html">cross-nesting-simple.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="color_themes.diff">color_themes.diff</a></td><td align="right">2013-01-13 06:32 </td><td align="right"> 13K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="choose_colors2.diff">choose_colors2.diff</a></td><td align="right">2013-01-03 07:27 </td><td align="right">7.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test3.html">charref_test3.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">839 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.html">charref_test2.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">806 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.5.html">charref_test2.5.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">746 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test1.html">charref_test1.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">886 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="bc1.html">bc1.html</a></td><td align="right">2010-10-12 19:14 </td><td align="right">787 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="bar.html">bar</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 13 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.1">adblocker.patch.1</a></td><td align="right">2008-12-27 20:09 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.0">adblocker.patch.0</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch">adblocker.patch</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2861.png">HB.d2861.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">146K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2837.png">HB.d2837.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">147K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="DragonFly.html.bz2">DragonFly.html.bz2</a></td><td align="right">2009-04-21 00:01 </td><td align="right"> 97K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="4648/index.html">4648/</a></td><td align="right">2016-08-04 16:08 </td><td align="right"> - </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/index.html?C=S;O=A.html b/old/test/index.html?C=S;O=A.html new file mode 100644 index 0000000..f0ac16a --- /dev/null +++ b/old/test/index.html?C=S;O=A.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test</title> + </head> + <body> +<h1>Index of /test</h1> + <table> + <tr><th valign="top"><img src="../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=D.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../index.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="4648/index.html">4648/</a></td><td align="right">2016-08-04 16:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="img/index.html">img/</a></td><td align="right">2008-01-19 15:34 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="tables/index.html">tables/</a></td><td align="right">2008-01-19 15:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/layout.gif" alt="[ ]"></td><td><a href="empty.pdf">empty.pdf</a></td><td align="right">2009-02-13 01:25 </td><td align="right"> 0 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="foo.html">foo</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 4 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="bar.html">bar</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 13 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li.html">li.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">155 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li_minus.html">li_minus.html</a></td><td align="right">2006-01-16 20:35 </td><td align="right">177 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="sd3.html">sd3.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">184 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li2.html">li2.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">185 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="norow.html">norow.html</a></td><td align="right">2009-08-10 15:51 </td><td align="right">236 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="jorgen.html">jorgen.html</a></td><td align="right">2009-01-26 17:25 </td><td align="right">351 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_ratio.html">img_ratio.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">452 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="style.css">style.css</a></td><td align="right">2010-05-11 12:47 </td><td align="right">544 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.5.html">charref_test2.5.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">746 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="bc1.html">bc1.html</a></td><td align="right">2010-10-12 19:14 </td><td align="right">787 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.html">charref_test2.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">806 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test3.html">charref_test3.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">839 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test1.html">charref_test1.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">886 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form-select-multiple.html">form-select-multiple.html</a></td><td align="right">2011-06-29 17:32 </td><td align="right">919 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="css-top-margin-bug.html">css-top-margin-bug.html</a></td><td align="right">2010-05-22 17:40 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cross-nesting-simple.html">cross-nesting-simple.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="discard-syntax-errors.html">discard-syntax-errors.html</a></td><td align="right">2010-10-21 13:26 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form_reset.html">form_reset.html</a></td><td align="right">2012-11-24 21:27 </td><td align="right">1.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="mr-test.tgz">mr-test.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs7.html">cs7.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs1.html">cs1.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="weird_pre.html">weird_pre.html</a></td><td align="right">2009-01-26 17:28 </td><td align="right">2.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="rowspan.html">rowspan.html</a></td><td align="right">2007-11-25 18:02 </td><td align="right">4.9K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="choose_colors2.diff">choose_colors2.diff</a></td><td align="right">2013-01-03 07:27 </td><td align="right">7.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="public_suffix.diff">public_suffix.diff</a></td><td align="right">2010-01-16 03:38 </td><td align="right">9.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp1.html">dillo2.tmp1.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp2.html">dillo2.tmp2.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.html">dillo2.html</a></td><td align="right">2012-03-20 19:31 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.0">adblocker.patch.0</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_loading_options.patch">img_loading_options.patch</a></td><td align="right">2009-09-07 01:02 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch">adblocker.patch</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.1">adblocker.patch.1</a></td><td align="right">2008-12-27 20:09 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="gnash.cc">gnash.cc</a></td><td align="right">2008-10-10 18:45 </td><td align="right"> 12K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="color_themes.diff">color_themes.diff</a></td><td align="right">2013-01-13 06:32 </td><td align="right"> 13K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.2.patch">filtering.2.patch</a></td><td align="right">2009-12-28 02:59 </td><td align="right"> 16K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="vertical-align.patch">vertical-align.patch</a></td><td align="right">2009-12-22 02:05 </td><td align="right"> 17K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.1.patch">filtering.1.patch</a></td><td align="right">2009-09-12 04:03 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo_tabs.png">dillo_tabs.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 21K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="msg_levels.diff">msg_levels.diff</a></td><td align="right">2013-04-27 00:19 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="redraws.html">redraws.html</a></td><td align="right">2011-09-03 18:24 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillobanner2.png">dillobanner2.png</a></td><td align="right">2009-05-02 02:50 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="xmp2.png">xmp2.png</a></td><td align="right">2009-11-10 22:43 </td><td align="right"> 38K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="gettext.0.diff.bz2">gettext.0.diff.bz2</a></td><td align="right">2011-08-03 07:38 </td><td align="right"> 41K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph2.png">ph2.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 50K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph1.png">ph1.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 51K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="weirdChars.jpg">weirdChars.jpg</a></td><td align="right">2009-09-25 13:31 </td><td align="right"> 54K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="mbedtls.diff">mbedtls.diff</a></td><td align="right">2016-07-02 02:53 </td><td align="right"> 60K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/tar.gif" alt="[ ]"></td><td><a href="css-top-margin-bug.tar">css-top-margin-bug.tar</a></td><td align="right">2010-05-22 17:40 </td><td align="right"> 70K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo-tabs.png">dillo-tabs.png</a></td><td align="right">2011-09-15 21:03 </td><td align="right"> 72K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="long_alt_text.html">long_alt_text.html</a></td><td align="right">2011-08-25 03:35 </td><td align="right"> 80K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="DragonFly.html.bz2">DragonFly.html.bz2</a></td><td align="right">2009-04-21 00:01 </td><td align="right"> 97K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="msqldoc.tgz">msqldoc.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">142K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2861.png">HB.d2861.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">146K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2837.png">HB.d2837.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">147K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="https://www.dillo.org/test/mysql-6.0.doc.tar.bz2">mysql-6.0.doc.tar.bz2</a></td><td align="right">2009-04-20 23:28 </td><td align="right">4.7M</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/index.html?C=S;O=D.html b/old/test/index.html?C=S;O=D.html new file mode 100644 index 0000000..d0e9337 --- /dev/null +++ b/old/test/index.html?C=S;O=D.html @@ -0,0 +1,75 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test</title> + </head> + <body> +<h1>Index of /test</h1> + <table> + <tr><th valign="top"><img src="../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../index.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="https://www.dillo.org/test/mysql-6.0.doc.tar.bz2">mysql-6.0.doc.tar.bz2</a></td><td align="right">2009-04-20 23:28 </td><td align="right">4.7M</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2837.png">HB.d2837.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">147K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="HB.d2861.png">HB.d2861.png</a></td><td align="right">2013-06-27 20:30 </td><td align="right">146K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="msqldoc.tgz">msqldoc.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">142K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="DragonFly.html.bz2">DragonFly.html.bz2</a></td><td align="right">2009-04-21 00:01 </td><td align="right"> 97K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="long_alt_text.html">long_alt_text.html</a></td><td align="right">2011-08-25 03:35 </td><td align="right"> 80K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo-tabs.png">dillo-tabs.png</a></td><td align="right">2011-09-15 21:03 </td><td align="right"> 72K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/tar.gif" alt="[ ]"></td><td><a href="css-top-margin-bug.tar">css-top-margin-bug.tar</a></td><td align="right">2010-05-22 17:40 </td><td align="right"> 70K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="mbedtls.diff">mbedtls.diff</a></td><td align="right">2016-07-02 02:53 </td><td align="right"> 60K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="weirdChars.jpg">weirdChars.jpg</a></td><td align="right">2009-09-25 13:31 </td><td align="right"> 54K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph1.png">ph1.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 51K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="ph2.png">ph2.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 50K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="gettext.0.diff.bz2">gettext.0.diff.bz2</a></td><td align="right">2011-08-03 07:38 </td><td align="right"> 41K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="xmp2.png">xmp2.png</a></td><td align="right">2009-11-10 22:43 </td><td align="right"> 38K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillobanner2.png">dillobanner2.png</a></td><td align="right">2009-05-02 02:50 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="redraws.html">redraws.html</a></td><td align="right">2011-09-03 18:24 </td><td align="right"> 35K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="msg_levels.diff">msg_levels.diff</a></td><td align="right">2013-04-27 00:19 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/image2.gif" alt="[IMG]"></td><td><a href="dillo_tabs.png">dillo_tabs.png</a></td><td align="right">2005-07-21 00:35 </td><td align="right"> 21K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.1.patch">filtering.1.patch</a></td><td align="right">2009-09-12 04:03 </td><td align="right"> 19K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="vertical-align.patch">vertical-align.patch</a></td><td align="right">2009-12-22 02:05 </td><td align="right"> 17K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="filtering.2.patch">filtering.2.patch</a></td><td align="right">2009-12-28 02:59 </td><td align="right"> 16K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="color_themes.diff">color_themes.diff</a></td><td align="right">2013-01-13 06:32 </td><td align="right"> 13K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="gnash.cc">gnash.cc</a></td><td align="right">2008-10-10 18:45 </td><td align="right"> 12K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.1">adblocker.patch.1</a></td><td align="right">2008-12-27 20:09 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch">adblocker.patch</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_loading_options.patch">img_loading_options.patch</a></td><td align="right">2009-09-07 01:02 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="adblocker.patch.0">adblocker.patch.0</a></td><td align="right">2008-12-27 20:12 </td><td align="right"> 11K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.html">dillo2.html</a></td><td align="right">2012-03-20 19:31 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp2.html">dillo2.tmp2.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="dillo2.tmp1.html">dillo2.tmp1.html</a></td><td align="right">2012-10-10 16:37 </td><td align="right"> 10K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="public_suffix.diff">public_suffix.diff</a></td><td align="right">2010-01-16 03:38 </td><td align="right">9.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="choose_colors2.diff">choose_colors2.diff</a></td><td align="right">2013-01-03 07:27 </td><td align="right">7.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="rowspan.html">rowspan.html</a></td><td align="right">2007-11-25 18:02 </td><td align="right">4.9K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="weird_pre.html">weird_pre.html</a></td><td align="right">2009-01-26 17:28 </td><td align="right">2.5K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs1.html">cs1.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cs7.html">cs7.html</a></td><td align="right">2007-12-09 18:08 </td><td align="right">2.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/compressed.gif" alt="[ ]"></td><td><a href="mr-test.tgz">mr-test.tgz</a></td><td align="right">2005-07-21 00:35 </td><td align="right">1.8K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form_reset.html">form_reset.html</a></td><td align="right">2012-11-24 21:27 </td><td align="right">1.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="discard-syntax-errors.html">discard-syntax-errors.html</a></td><td align="right">2010-10-21 13:26 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="cross-nesting-simple.html">cross-nesting-simple.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="css-top-margin-bug.html">css-top-margin-bug.html</a></td><td align="right">2010-05-22 17:40 </td><td align="right">1.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="form-select-multiple.html">form-select-multiple.html</a></td><td align="right">2011-06-29 17:32 </td><td align="right">919 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test1.html">charref_test1.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">886 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test3.html">charref_test3.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">839 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.html">charref_test2.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">806 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="bc1.html">bc1.html</a></td><td align="right">2010-10-12 19:14 </td><td align="right">787 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="charref_test2.5.html">charref_test2.5.html</a></td><td align="right">2015-07-01 18:59 </td><td align="right">746 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="style.css">style.css</a></td><td align="right">2010-05-11 12:47 </td><td align="right">544 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="img_ratio.html">img_ratio.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">452 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="jorgen.html">jorgen.html</a></td><td align="right">2009-01-26 17:25 </td><td align="right">351 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="norow.html">norow.html</a></td><td align="right">2009-08-10 15:51 </td><td align="right">236 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li2.html">li2.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">185 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="sd3.html">sd3.html</a></td><td align="right">2016-06-21 22:52 </td><td align="right">184 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li_minus.html">li_minus.html</a></td><td align="right">2006-01-16 20:35 </td><td align="right">177 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/text.gif" alt="[TXT]"></td><td><a href="li.html">li.html</a></td><td align="right">2005-07-21 00:35 </td><td align="right">155 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="bar.html">bar</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 13 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/unknown.gif" alt="[ ]"></td><td><a href="foo.html">foo</a></td><td align="right">2008-02-05 13:52 </td><td align="right"> 4 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/layout.gif" alt="[ ]"></td><td><a href="empty.pdf">empty.pdf</a></td><td align="right">2009-02-13 01:25 </td><td align="right"> 0 </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="tables/index.html">tables/</a></td><td align="right">2008-01-19 15:08 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="img/index.html">img/</a></td><td align="right">2008-01-19 15:34 </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../icons/folder.gif" alt="[DIR]"></td><td><a href="4648/index.html">4648/</a></td><td align="right">2016-08-04 16:08 </td><td align="right"> - </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/jorgen.html b/old/test/jorgen.html new file mode 100644 index 0000000..efe5685 --- /dev/null +++ b/old/test/jorgen.html @@ -0,0 +1,24 @@ +<hr> +<b>Behaviour test:</b> +<hr> +<pre> +test tab1 tab2 tab3 + "Another tab1" "Another tab2" +</pre> +<hr> +<pre> + + + +three blank lines above this one +</pre> +<hr> +<pre> + a single space starts this line. + I start with two spaces. + I start with a tab. + I start with two tabs. +	I start with a tab entity. +		I start with two tab entities. +</pre> +<hr> diff --git a/old/test/li.html b/old/test/li.html new file mode 100644 index 0000000..4a6b38c --- /dev/null +++ b/old/test/li.html @@ -0,0 +1,10 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head><title>test</title></head> + <body> + <li>1 + <li>2 + <li>3 + </body> +</html> + diff --git a/old/test/li2.html b/old/test/li2.html new file mode 100644 index 0000000..91a79b8 --- /dev/null +++ b/old/test/li2.html @@ -0,0 +1,12 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head><title>test</title></head> + <body bgcolor="FEFEFE"> + <ul> + <li>1 + <li>2 + <li>3 + </ul> + </body> +</html> + diff --git a/old/test/li_minus.html b/old/test/li_minus.html new file mode 100644 index 0000000..301c2d6 --- /dev/null +++ b/old/test/li_minus.html @@ -0,0 +1,12 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head></head> +<body> +<ol> + <li value="-1">First + <li>Second + <li value="-30">Third +</ol> +</body> +</html> + diff --git a/old/test/long_alt_text.html b/old/test/long_alt_text.html new file mode 100644 index 0000000..ccfe53a --- /dev/null +++ b/old/test/long_alt_text.html @@ -0,0 +1,1799 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+
+ . .o8 oooo
+ .o8 "888 `888
+ .o888oo oooo oooo ooo. .oo. .oo. 888oooo. 888 oooo d8b
+ 888 `888 `888 `888P"Y88bP"Y88b d88' `88b 888 `888""8P
+ 888 888 888 888 888 888 888 888 888 888
+ 888 . 888 888 888 888 888 888 888 888 888 .o.
+ "888" `V88V"V8P' o888o o888o o888o `Y8bod8P' o888o d888b Y8P
+
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <!-- DEFAULT VARIABLES -->
+ <meta name="color:Background" content="#3b627e" />
+
+ <meta name="font:Title" content="Arial" />
+ <meta name="font:Body" content="Arial" />
+ <meta name="font:Accent" content="Lucida Sans" />
+
+ <meta name="if:Show People I Follow" content="1" />
+ <meta name="if:Show Tags" content="1" />
+ <meta name="if:Show Album Art on Audio Posts" content="1" />
+ <meta name="if:Enable Jump Pagination" content="0" />
+
+ <meta name="text:Disqus Shortname" content="" />
+
+ <meta name="image:Header" content="" />
+ <meta name="image:Background" content="" />
+
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>The Near-Sighted Monkey</title>
+ <meta name="description" content="" />
+ <link rel="shortcut icon" href="http://24.media.tumblr.com/avatar_cd7caa3934d2_16.png" />
+ <link rel="apple-touch-icon" href="http://30.media.tumblr.com/avatar_cd7caa3934d2_128.png"/>
+ <link rel="alternate" type="application/rss+xml" href="http://thenearsightedmonkey.tumblr.com/rss" />
+ <style type="text/css">
+ body {
+ background: #8FAABD url('http://assets.tumblr.com/images/x.gif') top left fixed repeat;
+ margin: 0;
+ padding: 0;
+ font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
+ }
+
+ .clear {
+ clear: both;
+ height: 0px;
+ overflow: hidden;
+ }
+
+ a img {
+ border: none;
+ }
+
+ #wrapper {
+ width: 845px;
+ margin: 0 auto;
+ }
+
+ #wrapper #title {
+ margin: 30px 0;
+ color: #fff;
+ font-size: 50px;
+ font-weight: bold;
+ font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
+ text-shadow: 1px 3px 5px rgba(0,0,0, 0.5);
+ letter-spacing: -1px;
+ }
+
+ #wrapper #title a {
+ color: #fff;
+ text-decoration: none;
+ }
+
+ #wrapper #content {
+ width: 520px;
+ float: left;
+ }
+
+ #wrapper #content .post {
+ font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
+ background: #fff;
+ padding: 10px;
+ position: relative;
+ }
+
+ #wrapper #content .post .media {
+ text-align: center;
+ margin-bottom: 10px;
+ }
+
+ #wrapper #content .post .quotebg {
+ font-family: georgia, serif;
+ font-size: 150px;
+ color: #8FAABD;
+ opacity: 0.2;
+ filter: alpha(opacity=20);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
+ position: absolute;
+ top: 70px;
+ left: 10px;
+ }
+
+ #wrapper #content .post .quote {
+ color: #8FAABD;
+ font-weight: bold;
+ padding: 20px 20px 5px 20px;
+ }
+
+ #wrapper #content .post .quote.short {
+ font-size: 33px;
+ line-height: 35px;
+ }
+
+ #wrapper #content .post .quote.medium {
+ font-size: 25px;
+ line-height: 28px;
+ }
+
+ #wrapper #content .post .quote.long {
+ font-size: 18px;
+ line-height: 22px;
+ }
+
+ #wrapper #content .post .quote_source *:first-child {
+ margin-top: 0px;
+ }
+
+ #wrapper #content .post .quote_source *:last-child {
+ margin-bottom: 0px;
+ }
+
+ #wrapper #content .post .quote *:first-child {
+ margin-top: 0px;
+ }
+
+ #wrapper #content .post .quote *:last-child {
+ margin-bottom: 0px;
+ }
+
+ #wrapper #content .post .copy {
+ color: #6e7173;
+ padding: 10px;
+ font-size: 13px;
+ line-height: 15px;
+ }
+
+ #wrapper #content .post .copy a {
+ color: #6e7173;
+ text-decoration: underline;
+ }
+
+ #wrapper #content .post .copy p {
+ margin: 10px 0 0 0;
+ padding: 0;
+ }
+
+ #wrapper #content .post .copy pre {
+ margin: 10px 0px 10px 0px;
+ padding: 10px;
+ background-color: #e6e6e6;
+ font: normal 11px Courier, monospace;
+ overflow: auto;
+ }
+
+ #wrapper #content .post .copy > p:first-child {
+ margin-top: 0;
+ }
+
+ #wrapper #content .post .copy img {
+ max-width: 100%;
+ }
+
+ #wrapper #content .post .audio {
+ background: #eaeaea;
+ float: left;
+ padding: 7px;
+ margin-bottom: 10px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ }
+
+ #wrapper #content .post .audio .player {
+ float: left;
+ }
+
+ #wrapper #content .post .audio .player .audio_player embed {
+ border: 1px solid #c8c8c8;
+ }
+
+ #wrapper #content .post .audio .meta {
+ padding: 8px 13px;
+ height: 13px;
+ float: left;
+ color: #666;
+ font-family: 'Lucida Sans', 'Lucida Grande', 'Lucida Sans Unicode', sans-serif;
+ font-size: 11px;
+ text-transform: lowercase;
+ }
+
+ #wrapper #content .post .audio .meta a {
+ color: #666;
+ text-decoration: none;
+ }
+
+ #wrapper #content .post .album_art {
+ text-align: center;
+ }
+
+ #wrapper #content .post .question {
+ color: #494949;
+ font-size: 16px;
+ font-weight: bold;
+ background: #f1f1f1;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+ margin: 0 0 15px 0;
+ padding: 15px 20px;
+ position: relative;
+ }
+
+ #wrapper #content .post .question .nipple {
+ width: 13px;
+ height: 7px;
+ background: #f1f1f1 url('http://assets.tumblr.com/themes/redux/ask-mask.png');
+ position: absolute;
+ bottom: -7px;
+ left: 30px;
+ }
+
+ #wrapper #content .post .asker_container {
+ margin: 0 0 20px 24px;
+ }
+
+ #wrapper #content .post .asker_container img {
+ margin: 0 12px -7px 0;
+ }
+
+ #wrapper #content .post .asker_container a.asker {
+ color: ;
+ }
+
+ #wrapper #content .post .title {
+ color: #494949;
+ font-size: 16px;
+ font-weight: bold;
+ padding: 10px 10px 0 10px;
+ }
+
+ #wrapper #content .post img {
+ max-width: 500px;
+ }
+
+ #wrapper #content .post .chat {
+ background-color: #fff;
+ border-left: 5px solid #dedddd;
+ margin: 10px 10px 0 10px;
+ font-size: 14px;
+ }
+
+ #wrapper #content .post .chat .lines {
+ margin-left: 1px;
+ }
+
+ #wrapper #content .post .chat .lines .line {
+ background-color: #eaeaea;
+ color: #494949;
+ margin-bottom: 1px;
+ padding: 3px 5px;
+ }
+
+ #wrapper #content .post .chat .lines .line.even {
+ background-color: #dedddd;
+ }
+
+ #wrapper #content .post .link {
+ margin: 4px 0 2px 0;
+ font-size: 16px;
+ line-height: 25px;
+ }
+
+ #wrapper #content .post .link a {
+ background-color: #8FAABD;
+ color: #fff;
+ padding: 5px 7px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ }
+
+ #wrapper #content .post .link a:hover {
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
+ }
+
+ #wrapper #content .post .footer {
+ background: #eaeaea;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ font-family: 'Lucida Sans', 'Lucida Grande', 'Lucida Sans Unicode', sans-serif;
+ font-size: 11px;
+ color: #666;
+ padding: 5px 10px;
+ margin-top: 10px;
+ }
+
+ #wrapper #content .post .footer.for_permalink:hover {
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
+ }
+
+ #wrapper #content .post .footer .date {
+ width: 67%;
+ float: left;
+ color: #666;
+ }
+
+ #wrapper #content .post .footer .notes {
+ width: 33%;
+ float: right;
+ text-align: right;
+ color: #666;
+ }
+
+ #wrapper #content .post .footer .notes a {
+ color: #666;
+ }
+
+ #wrapper #content .post .footer .tags a {
+ color: #4a4a51;
+ text-decoration: underline;
+ }
+
+ #wrapper #content .post .footer .tags .tag-commas:last-child {
+ display: none;
+ }
+
+ #wrapper #content .post .footer.with_source_url .tags {
+ max-width: 330px;
+ float: left;
+ }
+
+ #wrapper #content .post .footer.with_source_url .source_url {
+ float: right;
+ max-width: 160px;
+ overflow: hidden;
+ white-space: nowrap;
+
+ }
+
+ #wrapper #content .post .footer.with_source_url .source_url img {
+ vertical-align: top;
+ -moz-opacity: 0.5;
+ opacity: 0.5;
+ }
+
+ #wrapper #content .post .footer.with_source_url .source_url:hover img {
+ -moz-opacity: 0.7;
+ opacity: 0.7;
+ }
+
+ #wrapper #content .post a {
+ color: #6e7173;
+ text-decoration: none;
+ }
+
+ #wrapper #content .post .copy blockquote {
+ margin: 10px 0px 10px 10px;
+ padding-left: 15px;
+ border-left: solid 4px #dcdcdc;
+ }
+
+ #wrapper #content .post .copy blockquote blockquote {
+ border-left: solid 4px #cccccc;
+ }
+
+ #wrapper #content .post .copy blockquote blockquote blockquote {
+ border-left: solid 4px #bcbcbc;
+ }
+
+ #wrapper #content .post .copy blockquote blockquote blockquote blockquote {
+ border-left: solid 4px #acacac;
+ }
+
+ #wrapper #content .post .copy blockquote blockquote blockquote blockquote blockquote {
+ border-left: solid 4px #9c9c9c;
+ }
+
+ #wrapper #content .post .copy blockquote blockquote blockquote blockquote blockquote blockquote {
+ border-left: solid 4px #8c8c8c;
+ }
+
+ #wrapper #content .bottom {
+ background: url('http://assets.tumblr.com/themes/redux/shadow-post.png') top center no-repeat transparent;
+ width: 513px;
+ height: 40px;
+ margin: 0 auto;
+ }
+
+ #wrapper #content #navigation {
+ text-align: right;
+ padding-bottom: 35px;
+ text-transform: lowercase;
+ }
+
+ #wrapper #content #navigation a {
+ background-color: #fff;
+ color: #8FAABD;
+ padding: 5px 10px;
+ text-decoration: none;
+ margin-left: 25px;
+ }
+
+ #wrapper #content #navigation a:hover {
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
+ }
+
+ #wrapper #content #navigation.jump_pagination {}
+
+ #wrapper #content #navigation.jump_pagination a {
+ margin: 0 0 0 4px;
+ }
+
+ #wrapper #content #navigation.jump_pagination .current_page {
+ color: #fff;
+ background-color: rgba(255,255,255, 0.1);
+ border: 2px solid #fff;
+ padding: 3px 8px;
+ margin: 0 0 0 4px;
+ cursor: default;
+ }
+
+ #wrapper #content #navigation.jump_pagination .jump_page {}
+
+ #wrapper #content .post .notecontainer {
+ background: #eaeaea;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ font-family: 'Lucida Sans', 'Lucida Grande', 'Lucida Sans Unicode', sans-serif;
+ font-size: 11px;
+ color: #666;
+ margin-top: 10px;
+ margin-bottom: -10px;
+ }
+
+ #wrapper #content .post .notecontainer a {
+ color: #666;
+ text-decoration: underline;
+ }
+
+ #wrapper #content .post .notecontainer ol.notes {
+ padding: 0px 0 10px 0;
+ list-style-type: none;
+ font-size: 11px;
+ }
+
+ #wrapper #content .post .notecontainer ol.notes li.note {
+ padding: 10px 10px 0 10px;
+ }
+
+ #wrapper #content .post .notecontainer ol.notes li.note img.avatar {
+ vertical-align: -4px;
+ margin-right: 10px;
+ width: 16px;
+ height: 16px;
+ }
+
+ #wrapper #content .post .notecontainer ol.notes li.note span.action {
+ font-weight: normal;
+ }
+
+ #wrapper #content .post .notecontainer ol.notes li.note .answer_content {
+ font-weight: normal;
+ }
+
+ #wrapper #content .post .notecontainer ol.notes li.note blockquote {
+ border-left: 2px solid #666;
+ padding: 4px 10px;
+ margin: 10px 0px 0px 25px;
+ }
+
+ #wrapper #content .post .notecontainer ol.notes li.note blockquote a {
+ text-decoration: none;
+ }
+
+ #wrapper #content #searchresults {
+ color: #fff;
+ margin: 0 0 15px 0;
+ text-shadow: 1px 3px 5px rgba(0,0,0, 0.5);
+ font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
+ font-size: 20px;
+ }
+
+ #wrapper #content #searchresults .search_query {
+ font-weight: bold;
+ }
+
+ #wrapper #content #searchresults .search_query:before {
+ content:'“';
+ }
+
+ #wrapper #content #searchresults .search_query:after {
+ content:'â€';
+ }
+
+ #wrapper #sidebar {
+ width: 250px;
+ float: right;
+ color: #8FAABD;
+ font-family: 'Lucida Sans', 'Lucida Grande', 'Lucida Sans Unicode', sans-serif
+ }
+
+ #wrapper #sidebar a {
+ color: #8FAABD;
+ }
+
+ #wrapper #sidebar #top {
+ background: #fff;
+ padding: 0 20px;
+
+ -webkit-border-top-left-radius: 10px;
+ -webkit-border-top-right-radius: 10px;
+ -moz-border-radius-topleft: 10px;
+ -moz-border-radius-topright: 10px;
+ border-top-left-radius: 10px;
+ border-top-right-radius: 10px;
+ }
+
+ #wrapper #sidebar #top #avatar {
+ width: 146px;
+ height: 146px;
+ padding: 8px 0 0 9px;
+ background: url('http://assets.tumblr.com/themes/redux/avatar-bg.png') top left no-repeat transparent;
+ position: relative;
+ top: -24px;
+ left: -5px;
+ }
+
+ #wrapper #sidebar #top #pages {
+ margin-bottom: 15px;
+ font-size: 12px;
+ }
+
+ #wrapper #sidebar #top #pages.ask_and_submit {
+ display: none;
+
+
+ }
+
+ #wrapper #sidebar #top #pages a.page {
+ display: block;
+ float: left;
+ background-color: #8FAABD;
+ color: #fff;
+ padding: 4px 5px;
+ margin: 0 5px 5px 0;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ }
+
+ #wrapper #sidebar #top #pages a.page:last-child {
+ margin-right: 0;
+ }
+
+ #wrapper #sidebar #top #pages a.page:hover {
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
+ }
+
+ #wrapper #sidebar #top #description {
+ font-size: 11px;
+ position: relative;
+ top: -18px;
+ }
+
+ #wrapper #sidebar #top #description a {
+ color: #8FAABD;
+ text-decoration: underline;
+ }
+
+ #wrapper #sidebar #top #search {
+ background: #fff;
+ border: 1px solid #8FAABD;
+
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ }
+
+ #wrapper #sidebar #top #search-scope {
+ padding-top: 5px;
+ font-size: 11px;
+ text-align: center;
+ }
+
+ #wrapper #sidebar #top #search-scope input,
+ #wrapper #sidebar #top #search-scope label {
+ cursor: pointer;
+ }
+
+ #wrapper #sidebar #top #search form {
+ margin: 0;
+ }
+
+ #wrapper #sidebar #top #search form .query {
+ padding: 5px;
+ border: none;
+ background: transparent;
+ outline: none;
+ width: 125px;
+ float: left;
+ color: #8FAABD;
+ }
+
+ #wrapper #sidebar #top #search form .submit {
+ background: #8FAABD;
+ color: #fff;
+ border: none;
+ padding: 5px 7px;
+ margin: 3px 3px 2px 0;
+ float: right;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ cursor: pointer;
+ }
+
+ #wrapper #sidebar #top #search form .submit:hover {
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
+ }
+
+ #wrapper #sidebar #top .heading {
+ color: #fff;
+ font-family: helvetica, arial, sans-serif;
+ font-size: 17px;
+ margin-top: 20px;
+ padding: 10px;
+ background-color: #8FAABD;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+
+ #wrapper #sidebar #top a .heading {
+ color: #fff;
+ text-decoration: none;
+ }
+
+ #wrapper #sidebar #top .heading#followontumblr {
+ background: url('http://assets.tumblr.com/themes/redux/sidebar-follow-on-en_US.png') center left no-repeat #8FAABD;
+ text-indent: -9999px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+
+
+
+
+
+
+
+
+ }
+
+ #wrapper #sidebar #top .heading#followontumblr:hover,
+ #wrapper #sidebar #top .heading#twitter:hover {
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
+ }
+
+ #wrapper #sidebar #top .heading#twitter {
+ background: url('http://assets.tumblr.com/themes/redux/sidebar-twitter.png') right center no-repeat #8FAABD;
+ }
+
+ #wrapper #sidebar #top .heading#following {
+ background: url('http://assets.tumblr.com/themes/redux/sidebar-following.png') right center no-repeat #8FAABD;
+ }
+
+ #wrapper #sidebar #top .content {
+ margin-top: 2px;
+ padding: 7px 10px;
+ background: #eaeaea;
+ color: #666;
+ font-size: 11px;
+ overflow: hidden;
+ }
+
+ #wrapper #sidebar #top a {
+ text-decoration: none;
+ }
+
+ #wrapper #sidebar #top #following-avatars.content {
+ padding: 4px;
+ }
+
+ #wrapper #sidebar #top #following-avatars.content a img {
+ margin: 5px;
+ }
+
+ #wrapper #sidebar #top #buttons {
+ padding: 20px 0 0 0;
+ }
+
+ #wrapper #sidebar #top #buttons .button {
+ width: 35%;
+ height: 21px;
+ float: left;
+ background: left center no-repeat transparent;
+ padding: 2px 0 0 30px;
+ font-size: 14px;
+ }
+
+ #wrapper #sidebar #top #buttons a {
+ color: #8FAABD;
+ text-decoration: none;
+ }
+
+ #wrapper #sidebar #top #buttons div {
+ padding-bottom: 10px;
+ }
+
+ #wrapper #sidebar #top #buttons .button#button-rss {
+ background-image: url('http://assets.tumblr.com/themes/redux/button-rss.png?2');
+ text-transform: capitalize;
+ }
+
+ #wrapper #sidebar #top #buttons .button#button-random {
+ background-image: url('http://assets.tumblr.com/themes/redux/button-random.png?2');
+ }
+
+ #wrapper #sidebar #top #buttons .button#button-archive {
+ background-image: url('http://assets.tumblr.com/themes/redux/button-archive.png?2');
+ }
+
+ #wrapper #sidebar #top #buttons .button#button-mobile {
+ background-image: url('http://assets.tumblr.com/themes/redux/button-mobile.png?2');
+ }
+
+ #wrapper #sidebar #bottom {
+ background: url('http://assets.tumblr.com/themes/redux/sidebar-bottom.png') top center no-repeat transparent;
+ width: 250px;
+ height: 25px;
+ }
+
+ #wrapper #sidebar #copyright {
+ text-align: center;
+ color: #fff;
+ font-size: 12px;
+ margin-bottom: 10px;
+ }
+
+ #wrapper #sidebar #copyright a {
+ color: #fff;
+ margin-left: 15px;
+ }
+
+ </style>
+ <!--[if lt IE 7.]>
+ <style type="text/css">
+ #wrapper #sidebar #bottom {
+ background: transparent;
+ }
+
+ #wrapper #sidebar #top #avatar {
+ background: none;
+ }
+
+ #wrapper #sidebar #top #avatar img {
+ border: 5px solid #f1f1f1;
+ }
+
+ #wrapper #sidebar #top .heading#followontumblr {
+ background-image: none;
+ text-indent: 0;
+ }
+
+ #wrapper #sidebar #top .heading#twitter {
+ background-image: none;
+ }
+
+ #wrapper #sidebar #top .heading#following {
+ background-image: none;
+ }
+
+ #wrapper #content .post .audio .player {
+ float: none;
+ }
+
+ #wrapper #content .post .audio .meta {
+ display: none;
+ float: none;
+ }
+ </style>
+ <![endif]-->
+
+ <!--[if lt IE 8.]>
+ <style type="text/css">
+ #wrapper #content .bottom {
+ background: transparent;
+ }
+
+ #wrapper #content .post .footer {
+ background: transparent;
+ color: #000;
+ }
+
+ #wrapper #content .post .audio {
+ float: none;
+ background: transparent;
+ }
+
+ #wrapper #content .post .notecontainer .notes {
+ padding: 0;
+ margin: 0;
+ }
+ </style>
+ <![endif]-->
+ <style type="text/css"></style>
+<meta http-equiv="x-dns-prefetch-control" content="off"/></head>
+<body>
+ <div id="wrapper">
+ <div id="title">
+ <a href="../index.html">
+
+ The Near-Sighted Monkey
+ </a>
+ </div>
+
+ <div id="content">
+
+
+
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.nature.com/neuro/journal/vaop/ncurrent/fig_tab/nn.2726_F4.html"><img src="http://27.media.tumblr.com/tumblr_lkdi74Lqcc1qbub56o1_500.jpg" alt="houseofmind: + +Anatomically Distinct Dopamine Release During Anticipation and Experience of Peak Emotion to Music +Music has long been recognized as both an abstract and rewarding stimulus that produces feelings of euphoria and pleasure in many listeners. Music may also elicit emotional responses from listeners and alter affective states. While music has been present across multiple cultures and societies throughout time, the experience of pleasure while listening to music is highly specific, personal and subjective. In a study featured in Nature Neuroscience last February, Salimpoor and others set out to study what goes on in the brain of individuals while they listened to enjoyable/pleasurable music. +For the study, subjects were asked to bring their own pleasurable music, and the other subjects’ music was used as neutral music for comparison. Dopamine release while listening to music was estimated indirectly by using ligand-based positron emission tomography (PET) scan in which 11C raclopride, a radioactively labeled ligand, competes with endogenous dopamine for D2 receptor binding. The assumption is that if brain areas are experiencing surges of dopamine release, they binding capacity of 11C raclopride will decrease in these areas. The experience of feeling chills, a marker of peak emotional responses to music, was self-reported by the subjects. In addition, psychophysiological measurements (i.e. respiration rate, heart rate, skin conductance, temperature) were also conducted while the subjects listened to music while undergoing PET scanning. +PET scanning revealed changes in 11C raclopride binding in the striatum, specifically in the right caudate and the right nucleus accumbens. There was also a significant positive correlation between reports of chills and feelings of overall pleasure, perhaps indicating that chills may serve as an objective measure of pleasure while listening to music. The experience of overall greater pleasure while music listening was also correlated with greater autonomic nervous system arousal, as indexed by changes in psychophysiological measurements. +To assess the temporal dynamics in dopamine release, the group employed functional magnetic resonance imaging (fMRI) while subjects listened to neutral or pleasurable music. Subjects were asked to press a button whenever they felt chills (typically during pleasurable moments), and the 15s prior to the pressing of the button, which indicated chills + pleasure, were denoted as the anticipation window. Thus, dopamine release was studied in two different time periods: anticipation period (15s before reported pleasure and chills), and peak response (chills/pleasure). +When the fMRI scans were conjoined with the PET masks, the group was able to identify a temporally mediated BOLD response in the right side of dorsal (caudate) and ventral (nucleus accumbens) striatum that corresponded with anticipation epochs and peak experience, respectively. Moreover, as demonstrated above, behavioral measures like the number of reported chills were more correlated with 11C raclopride binding changes in the right caudate while intensity of chills and overall degree of reported pleasure were more significantly correlated with changes in 11C raclopride binding potential in the right nucleus accumbens. +In summary, the experience of pleasure while listening to music acts on the brain similarly to other rewards like food, sex and drugs. Listening to pleasurable music targets striatal areas associated with mesolimbic reward circuitry and dopaminergic neurotransmission. +Source: + +Salimpoor, et al. 2011. Anatomically Distinct Dopamine Release During Anticipation and Experience of Peak Emotion to Music. Nature Neuroscience. doi:10.1038/nn.2726 + +" /></a></div>
+ <div class="copy"><p><a href="http://houseofmind.tumblr.com/post/5162146460">houseofmind</a>:</p> +<blockquote> +<p><strong>Anatomically Distinct Dopamine Release During Anticipation and Experience of Peak Emotion to Music</strong></p> +<p><strong>Music has long been recognized as both an abstract and rewarding stimulus that produces feelings of euphoria and pleasure in many listeners.</strong>  <strong>Music may also elicit emotional responses from listeners and alter affective states.</strong> While music has been present across multiple cultures and societies throughout time,<strong> the experience of pleasure while listening to music is highly specific, personal and subjective.</strong> In a study featured in Nature Neuroscience last February, Salimpoor and others set out to study what goes on in the brain of individuals while they listened to enjoyable/pleasurable music. </p> +<p>For the study, subjects were asked to bring their own pleasurable music, and the other subjects’ music was used as neutral music for comparison. <strong>Dopamine release while listening to music was estimated indirectly by using ligand-based positron emission tomography (PET) scan in which 11C raclopride, a radioactively labeled ligand, competes with endogenous dopamine for D2 receptor binding.</strong> The assumption is that if brain areas are experiencing surges of dopamine release, they binding capacity of 11C raclopride will decrease in these areas.<strong> The experience of feeling chills, a marker of peak emotional responses to music, was self-reported by the subjects. In addition, psychophysiological measurements (i.e. respiration rate, heart rate, skin conductance, temperature) were also conducted while the subjects listened to music while undergoing PET scanning. </strong></p> +<p><strong>PET scanning revealed changes in 11C raclopride binding in the striatum, specifically in the right caudate and the right nucleus accumbens. </strong>There was also a significant positive correlation between reports of chills and feelings of overall pleasure, perhaps indicating that chills may serve as an objective measure of pleasure while listening to music. <strong>The experience of overall greater pleasure while music listening was also correlated with greater autonomic nervous system arousal, as indexed by changes in psychophysiological measurements. </strong></p> +<p><strong>To assess the temporal dynamics in dopamine release, the group employed functional magnetic resonance imaging (fMRI) while subjects listened to neutral or pleasurable music.</strong> Subjects were asked to press a button whenever they felt chills (typically during pleasurable moments), and the 15s prior to the pressing of the button, which indicated chills + pleasure, were denoted as the anticipation window. <strong>Thus, dopamine release was studied in two different time periods: anticipation period (15s before reported pleasure and chills), and peak response (chills/pleasure). </strong></p> +<p><strong>When the fMRI scans were conjoined with the PET masks, the group was able to identify a temporally mediated BOLD response in the right side of dorsal (caudate) and ventral (nucleus accumbens) striatum that corresponded with anticipation epochs and peak experience, respectively. </strong>Moreover, as demonstrated above, behavioral measures like the number of reported chills were more correlated with 11C raclopride binding changes in the right caudate while intensity of chills and overall degree of reported pleasure were more significantly correlated with changes in 11C raclopride binding potential in the right nucleus accumbens. </p> +<p><strong>In summary, the experience of pleasure while listening to music acts on the brain similarly to other rewards like food, sex and drugs. Listening to pleasurable music targets striatal areas associated with mesolimbic reward circuitry and dopaminergic neurotransmission. </strong></p> +<p><strong>Source:</strong></p> +<p><span> </span></p> +<p><a href="http://www.nature.com/neuro/journal/vaop/ncurrent/pdf/nn.2726.pdf">Salimpoor, et al. 2011. Anatomically Distinct Dopamine Release During Anticipation and Experience of Peak Emotion to Music. </a><em><a href="http://www.nature.com/neuro/journal/vaop/ncurrent/pdf/nn.2726.pdf">Nature Neuroscience</a></em><a href="http://www.nature.com/neuro/journal/vaop/ncurrent/pdf/nn.2726.pdf">. </a><span><a href="http://www.nature.com/neuro/journal/vaop/ncurrent/pdf/nn.2726.pdf">doi:10.1038/nn.2726</a></span></p> +<p><strong><span><strong><br/></strong></span></strong></p> +</blockquote></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9227936233/houseofmind-anatomically-distinct-dopamine">
+ <div class="footer for_permalink">
+ <div class="date">
+
+ Reblogged 3 days ago from houseofmind
+
+
+
+ </div>
+ <div class="notes">114 notes </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer with_source_url" style="
+ display:none;
+
+ display:block;
+ ">
+
+
+
+ <a href="http://houseofmind.tumblr.com/post/5162146460/anatomically-distinct-dopamine-release-during" class="source_url">
+ Source:
+
+ houseofmind
+ </a>
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9195679380/1/tumblr_lq9h3tKYwI1r1gqac"><img src="http://28.media.tumblr.com/tumblr_lq9h3tKYwI1r1gqaco1_500.jpg" alt="" /></a></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9195679380">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 3 days ago
+
+ </div>
+ <div class="notes">1 note </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9195621612/1/tumblr_lq9h17BhfX1r1gqac"><img src="http://25.media.tumblr.com/tumblr_lq9h17BhfX1r1gqaco1_500.jpg" alt="" /></a></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9195621612">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 3 days ago
+
+ </div>
+ <div class="notes">2 notes </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9195556328/1/tumblr_lq9gyaNTkT1r1gqac"><img src="http://29.media.tumblr.com/tumblr_lq9gyaNTkT1r1gqaco1_500.jpg" alt="" /></a></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9195556328">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 3 days ago
+
+ </div>
+ <div class="notes">1 note </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9195493051/1/tumblr_lq9gvefSsB1r1gqac"><img src="http://27.media.tumblr.com/tumblr_lq9gvefSsB1r1gqaco1_500.jpg" alt="" /></a></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9195493051">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 3 days ago
+
+ </div>
+ <div class="notes">1 note </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9195397371/1/tumblr_lq9gr3Zha51r1gqac"><img src="http://29.media.tumblr.com/tumblr_lq9gr3Zha51r1gqaco1_500.jpg" alt="" /></a></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9195397371">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 3 days ago
+
+ </div>
+ <div class="notes">5 notes </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9195248168/1/tumblr_lq9gkiSbUu1r1gqac"><img src="http://30.media.tumblr.com/tumblr_lq9gkiSbUu1r1gqaco1_500.jpg" alt="" /></a></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9195248168">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 3 days ago
+
+ </div>
+ <div class="notes">14 notes </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9195109179/1/tumblr_lq9gebfupo1r1gqac"><img src="http://24.media.tumblr.com/tumblr_lq9gebfupo1r1gqaco1_r1_500.jpg" alt="" /></a></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9195109179">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 3 days ago
+
+ </div>
+ <div class="notes">8 notes </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9195020956/1/tumblr_lq9gagHET51r1gqac"><img src="http://27.media.tumblr.com/tumblr_lq9gagHET51r1gqaco1_500.jpg" alt="" /></a></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9195020956">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 3 days ago
+
+ </div>
+ <div class="notes">1 note </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9194915261/1/tumblr_lq9g5pMFUE1r1gqac"><img src="http://29.media.tumblr.com/tumblr_lq9g5pMFUE1r1gqaco1_500.jpg" alt="" /></a></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9194915261">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 3 days ago
+
+ </div>
+ <div class="notes">2 notes </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9171705835/1/tumblr_lq8mvnA6Ra1r1gqac"><img src="http://27.media.tumblr.com/tumblr_lq8mvnA6Ra1r1gqaco1_500.jpg" alt="This is the handwriting of John Steinbeck" /></a></div>
+ <div class="copy"><p>This is the handwriting of John Steinbeck</p></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9171705835/this-is-the-handwriting-of-john-steinbeck">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 4 days ago
+
+ </div>
+ <div class="notes"> </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9171693282/1/tumblr_lq8mulHKAI1r1gqac"><img src="http://25.media.tumblr.com/tumblr_lq8mulHKAI1r1gqaco1_500.jpg" alt="This is the handwriting of Oscar Wilde" /></a></div>
+ <div class="copy"><p>This is the handwriting of Oscar Wilde</p></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9171693282/this-is-the-handwriting-of-oscar-wilde">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 4 days ago
+
+ </div>
+ <div class="notes"> </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9171679021/1/tumblr_lq8mtf4dba1r1gqac"><img src="http://30.media.tumblr.com/tumblr_lq8mtf4dba1r1gqaco1_500.jpg" alt="This is the handwriting of Emily Dickinson" /></a></div>
+ <div class="copy"><p>This is the handwriting of Emily Dickinson</p></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9171679021/this-is-the-handwriting-of-emily-dickinson">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 4 days ago
+
+ </div>
+ <div class="notes">2 notes </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9171661839/1/tumblr_lq8ms5W4aA1r1gqac"><img src="http://28.media.tumblr.com/tumblr_lq8ms5W4aA1r1gqaco1_500.jpg" alt="This is the handwriting of Charles Dickens" /></a></div>
+ <div class="copy"><p>This is the handwriting of Charles Dickens</p></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9171661839/this-is-the-handwriting-of-charles-dickens">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 4 days ago
+
+ </div>
+ <div class="notes"> </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+ <div class="post">
+
+
+ <div class="media"><a href="http://www.tumblr.com/photo/1280/9170924387/1/tumblr_lq8lr5cQB61r1gqac"><img src="http://24.media.tumblr.com/tumblr_lq8lr5cQB61r1gqaco1_r1_500.jpg" alt="This is the handwriting of Edgar Allen Poe" /></a></div>
+ <div class="copy"><p>This is the handwriting of Edgar Allen Poe</p></div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <a href="http://thenearsightedmonkey.tumblr.com/post/9170924387/this-is-the-handwriting-of-edgar-allen-poe">
+ <div class="footer for_permalink">
+ <div class="date">
+
+
+
+ Posted 4 days ago
+
+ </div>
+ <div class="notes"> </div>
+ <div class="clear"></div>
+ </div>
+ </a>
+
+
+ <div class="footer " style="
+ display:none;
+
+
+ ">
+
+
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+
+ </div>
+ <div class="bottom"></div>
+
+
+
+ <div id="navigation" >
+ <a href="https://www.dillo.org/page/5">← Previous</a>
+
+
+
+ <a href="https://www.dillo.org/page/7">Next page →</a>
+ </div>
+
+
+ </div>
+
+ <div id="sidebar">
+ <div id="top">
+ <div id="avatar"><a href="../index.html"><img src="http://30.media.tumblr.com/avatar_cd7caa3934d2_128.png" /></a></div>
+ <div id="description">During Spring Semester of 2012, Lynda Barry will be the University of Wisconsin’s Artist in Residence on the Madison campus. She’ll be teaching a writing and picture-making class called, “What It Is: Manually Shifting the Image†which will meet twice a week.<br />
+<br />
+The class will be open to both graduate and undergraduate students from all academic disciplines. No artistic talent is required to be part of this class, but students should have an interest in memory, images, how the brain works, and what the biological function of the thing we call ‘the arts’ may be.<br />
+<br />
+To find out more visit:http://www.arts.wisc.edu/artsinstitute/IAR/barry/</div>
+
+ <div id="pages" class="ask_and_submit">
+
+
+ <div class="clear"></div>
+ </div>
+
+
+
+ <div id="search">
+ <form action="https://www.dillo.org/search" method="get" id="search-form">
+ <input type="hidden" name="t" value="thenearsightedmonkey" />
+ <input type="hidden" name="scope" value="all_of_tumblr" />
+ <input type="text" name="q" class="query" value="" />
+ <input type="submit" value="Search" class="submit" />
+ <div class="clear"></div>
+ </form>
+ </div>
+ <div id="search-scope">
+ <input type="radio" id="search-scope-me" name="scope" checked onclick="document.getElementById('search-form').action='/search'" /> <label for="search-scope-me" onclick="document.getElementById('search-form').action='/search'">My blog</label>
+ <input type="radio" id="search-scope-all" name="scope" onclick="document.getElementById('search-form').action='http://www.tumblr.com/search'" /> <label for="search-scope-all" onclick="document.getElementById('search-form').action='http://www.tumblr.com/search'">All of Tumblr</label>
+ </div>
+
+ <a href="http://www.tumblr.com/follow/thenearsightedmonkey"><div class="heading" id="followontumblr">Follow on Tumblr</div></a>
+
+
+
+
+
+ <div id="buttons">
+ <div class="row">
+ <div class="button" id="button-rss"><a href="http://thenearsightedmonkey.tumblr.com/rss">RSS feed</a></div>
+ <div class="button" id="button-random"><a href="https://www.dillo.org/random">Random</a></div>
+ </div>
+ <div class="clear"></div>
+ <div class="row">
+ <div class="button" id="button-archive"><a href="https://www.dillo.org/archive">Archive</a></div>
+ <div class="button" id="button-mobile"><a href="https://www.dillo.org/mobile">Mobile</a></div>
+ </div>
+ <div class="clear"></div>
+ </div>
+
+ </div>
+
+ <div id="bottom"></div>
+ <div id="copyright">© 2011 <a href="http://www.tumblr.com">Powered by Tumblr</a></div>
+ </div>
+
+ <div class="clear"></div>
+ </div>
+
+
+
+
+<!-- BEGIN TUMBLR CODE --><iframe src="http://assets.tumblr.com/iframe.html?9&src=http%3A%2F%2Fthenearsightedmonkey.tumblr.com%2Fpage%2F6%2F&lang=en_US&name=thenearsightedmonkey&brag=0" scrolling="no" width="330" height="25" frameborder="0" style="position:absolute; z-index:1337; top:0px; right:0px; border:0px; background-color:transparent; overflow:hidden;" id="tumblr_controls"></iframe><!--[if IE]><script type="text/javascript">document.getElementById('tumblr_controls').allowTransparency=true;</script><![endif]--><script type="text/javascript">_qoptions={qacct:"p-19UtqE8ngoZbM"};</script><script type="text/javascript" src="http://edge.quantserve.com/quant.js"></script><noscript><img src="http://pixel.quantserve.com/pixel/p-19UtqE8ngoZbM.gif" style="display:none; border-width:0px; height:1px; width:1px;" alt=""/></noscript><!-- END TUMBLR CODE --></body>
+</html>
\ No newline at end of file diff --git a/old/test/mbedtls.diff b/old/test/mbedtls.diff new file mode 100644 index 0000000..d9a0ad4 --- /dev/null +++ b/old/test/mbedtls.diff @@ -0,0 +1,1754 @@ +diff -r c67e33f51c67 AUTHORS +--- a/AUTHORS Tue Jun 28 13:53:56 2016 +0000 ++++ b/AUTHORS Sat Jul 02 00:52:17 2016 +0000 +@@ -87,5 +87,3 @@ + * src/md5.[ch] contain code by L. Peter Deutsch whose copyright is held by + Aladdin Enterprises. + * src/tipwin.cc contains code by Greg Ercolano. +-* src/IO/tls.c contains code from wget whose copyright is held by the +- Free Software Foundation. +diff -r c67e33f51c67 configure.ac +--- a/configure.ac Tue Jun 28 13:53:56 2016 +0000 ++++ b/configure.ac Sat Jul 02 00:52:17 2016 +0000 +@@ -24,7 +24,7 @@ + , enable_gprof=no) + AC_ARG_ENABLE(insure, [ --enable-insure Try to compile and run with Insure++], + , enable_insure=no) +-AC_ARG_ENABLE(ssl, [ --enable-ssl Enable SSL/HTTPS/TLS (EXPERIMENTAL CODE)], ++AC_ARG_ENABLE(ssl, [ --enable-ssl Enable SSL/HTTPS/TLS], + , enable_ssl=no) + AC_ARG_WITH(ca-certs-file, [ --with-ca-certs-file=FILE Specify where to find a bundle of trusted CA certificates for TLS], CA_CERTS_FILE=$withval) + AC_ARG_WITH(ca-certs-dir, [ --with-ca-certs-dir=DIR Specify where to find a directory containing trusted CA certificates for TLS], CA_CERTS_DIR=$withval) +@@ -294,19 +294,18 @@ + dnl -------------------------- + dnl + if test "x$enable_ssl" = "xyes"; then +- AC_CHECK_HEADER(openssl/ssl.h, ssl_ok=yes, ssl_ok=no) ++ AC_CHECK_HEADER(mbedtls/ssl.h, ssl_ok=yes, ssl_ok=no) + + if test "x$ssl_ok" = "xyes"; then + old_libs="$LIBS" +- AC_CHECK_LIB(ssl, SSL_library_init, ssl_ok=yes, ssl_ok=no, -lcrypto) ++ AC_CHECK_LIB(mbedtls, mbedtls_ssl_init, ssl_ok=yes, ssl_ok=no, -lmbedx509 -lmbedcrypto) + LIBS="$old_libs" + fi + + if test "x$ssl_ok" = "xyes"; then +- LIBSSL_LIBS="-lcrypto -lssl" +- AC_MSG_WARN([*** Enabling SSL/HTTPS/TLS support. THIS IS EXPERIMENTAL CODE ***]) ++ LIBSSL_LIBS="-lmbedtls -lmbedx509 -lmbedcrypto" + else +- AC_MSG_WARN([*** No libssl found. Disabling SSL/HTTPS/TLS support. ***]) ++ AC_MSG_WARN([*** mbed TLS 2 not found. Disabling SSL/HTTPS/TLS support. ***]) + fi + fi + +diff -r c67e33f51c67 src/IO/IO.c +--- a/src/IO/IO.c Tue Jun 28 13:53:56 2016 +0000 ++++ b/src/IO/IO.c Sat Jul 02 00:52:17 2016 +0000 +@@ -37,7 +37,7 @@ + int Op; /* IORead | IOWrite */ + int FD; /* Current File Descriptor */ + int Flags; /* Flag array (look definitions above) */ +- int Status; /* errno code */ ++ int Status; /* nonzero upon IO failure */ + Dstr *Buf; /* Internal buffer */ + + void *Info; /* CCC Info structure for this IO */ +@@ -184,9 +184,14 @@ + ret = TRUE; + break; + } else { +- io->Status = errno; +- MSG("READ Failed: %s\n", strerror(errno)); +- break; ++ if (conn) { ++ io->Status = St; ++ break; ++ } else { ++ io->Status = errno; ++ MSG("READ Failed with %d: %s\n", St, strerror(errno)); ++ break; ++ } + } + } else { /* St == 0 */ + break; +@@ -234,8 +239,14 @@ + ret = TRUE; + break; + } else { +- io->Status = errno; +- break; ++ if (conn) { ++ io->Status = St; ++ break; ++ } else { ++ io->Status = errno; ++ MSG("WRITE Failed with %d: %s\n", St, strerror(errno)); ++ break; ++ } + } + } else if (St < io->Buf->len) { + /* Not all data written */ +diff -r c67e33f51c67 src/IO/tls.c +--- a/src/IO/tls.c Tue Jun 28 13:53:56 2016 +0000 ++++ b/src/IO/tls.c Sat Jul 02 00:52:17 2016 +0000 +@@ -1,24 +1,15 @@ + /* + * File: tls.c + * +- * Copyright 2004 Garrett Kajmowicz <gkajmowi@tbaytel.net> +- * (for some bits derived from the https dpi, e.g., certificate handling) +- * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, +- * 2009, 2010, 2011, 2012 Free Software Foundation, Inc. +- * (for the certificate hostname checking from wget) + * Copyright (C) 2011 Benjamin Johnson <obeythepenguin@users.sourceforge.net> + * (for the https code offered from dplus browser that formed the basis...) ++ * Copyright 2016 corvid + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * +- * As a special exception, permission is granted to link Dillo with the OpenSSL +- * or LibreSSL library, and distribute the linked executables without +- * including the source code for OpenSSL or LibreSSL in the source +- * distribution. You must obey the GNU General Public License, version 3, in +- * all respects for all of the code used other than OpenSSL or LibreSSL. + */ + + /* https://www.ssllabs.com/ssltest/viewMyClient.html +@@ -43,13 +34,8 @@ + #else + + #include <assert.h> ++#include <errno.h> + +-#include <sys/stat.h> +-#include <sys/types.h> +- +-#include <ctype.h> /* tolower for wget stuff */ +-#include <stdio.h> +-#include <errno.h> + #include "../../dlib/dlib.h" + #include "../dialog.hh" + #include "../klist.h" +@@ -57,10 +43,13 @@ + #include "tls.h" + #include "Url.h" + +-#include <openssl/ssl.h> +-#include <openssl/rand.h> +-#include <openssl/err.h> +-#include <openssl/x509v3.h> /* for hostname checking */ ++#include <mbedtls/ssl.h> ++#include <mbedtls/ctr_drbg.h> /* random number generator */ ++#include <mbedtls/entropy.h> ++#include <mbedtls/error.h> ++#include <mbedtls/oid.h> ++#include <mbedtls/x509.h> ++#include <mbedtls/net.h> /* net_send, net_recv */ + + #define CERT_STATUS_NONE 0 + #define CERT_STATUS_RECEIVING 1 +@@ -75,6 +64,11 @@ + } Server_t; + + typedef struct { ++ char *name; ++ Dlist *servers; ++} CertAuth_t; ++ ++typedef struct { + int fd; + int connkey; + } FdMapEntry_t; +@@ -85,18 +79,21 @@ + typedef struct { + int fd; + DilloUrl *url; +- SSL *ssl; ++ mbedtls_ssl_context *ssl; + bool_t connecting; + } Conn_t; + + /* List of active TLS connections */ + static Klist_t *conn_list = NULL; + +-/* +- * If ssl_context is still NULL, this corresponds to TLS being disabled. +- */ +-static SSL_CTX *ssl_context; ++static bool_t ssl_enabled = TRUE; ++static mbedtls_ssl_config ssl_conf; ++static mbedtls_x509_crt cacerts; ++static mbedtls_ctr_drbg_context ctr_drbg; ++static mbedtls_entropy_context entropy; ++ + static Dlist *servers; ++static Dlist *cert_authorities; + static Dlist *fd_map; + + static void Tls_connect_cb(int fd, void *vconnkey); +@@ -164,43 +161,92 @@ + /* + * Add a new TLS connection information node. + */ +-static int Tls_conn_new(int fd, const DilloUrl *url, SSL *ssl) ++static Conn_t *Tls_conn_new(int fd, const DilloUrl *url, ++ mbedtls_ssl_context *ssl) + { +- int key; +- + Conn_t *conn = dNew0(Conn_t, 1); + conn->fd = fd; + conn->url = a_Url_dup(url); + conn->ssl = ssl; + conn->connecting = TRUE; ++ return conn; ++} + +- key = a_Klist_insert(&conn_list, conn); ++static int Tls_make_conn_key(Conn_t *conn) ++{ ++ int key = a_Klist_insert(&conn_list, conn); + +- Tls_fd_map_add_entry(fd, key); ++ Tls_fd_map_add_entry(conn->fd, key); + + return key; + } + + /* +- * Let's monitor for TLS alerts. ++ * Load certificates from a given filename. + */ +-static void Tls_info_cb(const SSL *ssl, int where, int ret) ++static void Tls_load_certificates_from_file(const char *const filename) + { +- if (where & SSL_CB_ALERT) { +- const char *str = SSL_alert_desc_string_long(ret); ++ int ret = mbedtls_x509_crt_parse_file(&cacerts, filename); + +- if (strcmp(str, "close notify")) +- MSG("TLS ALERT on %s: %s\n", (where & SSL_CB_READ) ? "read" : "write", +- str); ++ if (ret < 0) { ++ if (ret == MBEDTLS_ERR_PK_FILE_IO_ERROR) { ++ /* can't read from file */ ++ } else { ++ MSG("Failed to parse certificates from %s (returned -0x%04x)\n", ++ filename, -ret); ++ } ++ } ++} ++ ++/* ++ * Load certificates from a given pathname. ++ */ ++static void Tls_load_certificates_from_path(const char *const pathname) ++{ ++ int ret = mbedtls_x509_crt_parse_path(&cacerts, pathname); ++ ++ if (ret < 0) { ++ if (ret == MBEDTLS_ERR_X509_FILE_IO_ERROR) { ++ /* can't read from path */ ++ } else { ++ MSG("Failed to parse certificates from %s (returned -0x%04x)\n", ++ pathname, -ret); ++ } ++ } ++} ++ ++/* ++ * Remove duplicate certificates. ++ */ ++static void Tls_remove_duplicate_certificates() ++{ ++ mbedtls_x509_crt *cp, *curr = &cacerts; ++ ++ while (curr) { ++ cp = curr; ++ while (cp->next) { ++ if (curr->serial.len == cp->next->serial.len && ++ !memcmp(curr->serial.p, cp->next->serial.p, curr->serial.len) && ++ curr->subject_raw.len == cp->next->subject_raw.len && ++ !memcmp(curr->subject_raw.p, cp->next->subject_raw.p, ++ curr->subject_raw.len)) { ++ mbedtls_x509_crt *duplicate = cp->next; ++ ++ cp->next = duplicate->next; ++ /* mbedtls_x509_crt_free() is a little strange. */ ++ duplicate->next = NULL; ++ mbedtls_x509_crt_free(duplicate); ++ dFree(duplicate); ++ } else { ++ cp = cp->next; ++ } ++ } ++ curr = curr->next; + } + } + + /* + * Load trusted certificates. +- * This is like using SSL_CTX_load_verify_locations() but permitting more +- * than one bundle and more than one directory. Due to the notoriously +- * abysmal openssl documentation, this was worked out from reading discussion +- * on the web and then reading openssl source to see what it normally does. + */ + static void Tls_load_certificates() + { +@@ -212,6 +258,8 @@ + */ + uint_t u; + char *userpath; ++ mbedtls_x509_crt *curr; ++ + static const char *const ca_files[] = { + "/etc/ssl/certs/ca-certificates.crt", + "/etc/pki/tls/certs/ca-bundle.crt", +@@ -226,120 +274,121 @@ + CA_CERTS_DIR + }; + +- X509_STORE *store = SSL_CTX_get_cert_store(ssl_context); +- X509_LOOKUP *lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); +- +- for (u = 0; u < sizeof(ca_files) / sizeof(ca_files[0]); u++) { ++ for (u = 0; u < sizeof(ca_files)/sizeof(ca_files[0]); u++) { + if (*ca_files[u]) +- X509_LOOKUP_load_file(lookup, ca_files[u], X509_FILETYPE_PEM); ++ Tls_load_certificates_from_file(ca_files[u]); + } + +- lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir()); + for (u = 0; u < sizeof(ca_paths)/sizeof(ca_paths[0]); u++) { +- if (*ca_paths[u]) +- X509_LOOKUP_add_dir(lookup, ca_paths[u], X509_FILETYPE_PEM); ++ if (*ca_paths[u]) { ++ Tls_load_certificates_from_path(ca_paths[u]); ++ } + } + + userpath = dStrconcat(dGethomedir(), "/.dillo/certs/", NULL); +- X509_LOOKUP_add_dir(lookup, userpath, X509_FILETYPE_PEM); ++ Tls_load_certificates_from_path(userpath); + dFree(userpath); + +- /* Clear out errors in the queue (file not found, etc.) */ +- while(ERR_get_error()) +- ; ++ Tls_remove_duplicate_certificates(); ++ for (curr = &cacerts, u = 1; curr->next; curr = curr->next, u++) ; ++ ++ MSG("Trusting %u TLS certificates.\n", u); + } + + /* +- * Initialize the OpenSSL library. ++ * Remove the pre-shared key ciphersuites. There are lots of them, ++ * and we aren't making any use of them. ++ */ ++static void Tls_remove_psk_ciphersuites() ++{ ++ const mbedtls_ssl_ciphersuite_t *cs_info; ++ int *our_ciphers, *q; ++ int n = 0; ++ ++ const int *default_ciphers = mbedtls_ssl_list_ciphersuites(), ++ *p = default_ciphers; ++ ++ /* count how many we will want */ ++ while (*p) { ++ cs_info = mbedtls_ssl_ciphersuite_from_id(*p); ++ if (!mbedtls_ssl_ciphersuite_uses_psk(cs_info)) ++ n++; ++ p++; ++ } ++ n++; ++ our_ciphers = dNew(int, n); ++ ++ /* iterate through again and copy them over */ ++ p = default_ciphers; ++ q = our_ciphers; ++ while (*p) { ++ cs_info = mbedtls_ssl_ciphersuite_from_id(*p); ++ ++ if (!mbedtls_ssl_ciphersuite_uses_psk(cs_info)) ++ *q++ = *p; ++ p++; ++ } ++ *q = 0; ++ ++ mbedtls_ssl_conf_ciphersuites(&ssl_conf, our_ciphers); ++} ++ ++/* ++ * Initialize the mbed TLS library. + */ + void a_Tls_init(void) + { +- SSL_library_init(); +- SSL_load_error_strings(); +- if (RAND_status() != 1) { +- /* The standard solution is to provide it with more entropy, but this +- * involves knowing very well that you are doing exactly the right thing. +- */ +- MSG_ERR("Disabling HTTPS: Insufficient entropy for openssl.\n"); ++ int ret; ++ ++ /* As of 2.3.0 in 2016, the 'default' profile allows SHA1, RIPEMD160, ++ * and SHA224 (in addition to the stronger ones), and the 'next' profile ++ * doesn't allow anything below SHA256. Since we're never going to hear ++ * when/if RIPEMD160 and SHA224 are deprecated, and they're obscure enough ++ * not to encounter, let's not allow those. ++ * These profiles are for certificates, and mbed tls points out that these ++ * have nothing to do with hashes during handshakes. ++ * Their 'next' profile only allows "Curves at or above 128-bit security ++ * level". For now, we follow 'default' and allow all curves. ++ */ ++ static const mbedtls_x509_crt_profile prof = { ++ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) | ++ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) | ++ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ) | ++ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA512 ), ++ 0xFFFFFFF, /* Any PK alg */ ++ 0xFFFFFFF, /* Any curve */ ++ 2048, ++ }; ++ ++ mbedtls_ssl_config_init(&ssl_conf); ++ ++ mbedtls_ssl_config_defaults(&ssl_conf, MBEDTLS_SSL_IS_CLIENT, ++ MBEDTLS_SSL_TRANSPORT_STREAM, ++ MBEDTLS_SSL_PRESET_DEFAULT); ++ mbedtls_ssl_conf_cert_profile(&ssl_conf, &prof); ++ ++ Tls_remove_psk_ciphersuites(); ++ ++ mbedtls_x509_crt_init(&cacerts); ++ mbedtls_ctr_drbg_init(&ctr_drbg); ++ mbedtls_entropy_init(&entropy); ++ ++ if((ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, ++ (unsigned char*)"dillo tls", 9))) { ++ ssl_enabled = FALSE; ++ MSG_ERR("tls: mbedtls_ctr_drbg_seed() failed. TLS disabled.\n"); + return; + } + +- /* Create SSL context */ +- ssl_context = SSL_CTX_new(SSLv23_client_method()); +- if (ssl_context == NULL) { +- MSG_ERR("Disabling HTTPS: Error creating SSL context.\n"); +- return; +- } +- +- SSL_CTX_set_info_callback(ssl_context, Tls_info_cb); +- +- /* Don't want: eNULL, which has no encryption; aNULL, which has no +- * authentication; LOW, which as of 2014 use 64 or 56-bit encryption; +- * EXPORT40, which uses 40-bit encryption; RC4, for which methods were +- * found in 2013 to defeat it somewhat too easily. +- */ +- SSL_CTX_set_cipher_list(ssl_context, +- "ALL:!aNULL:!eNULL:!LOW:!EXPORT40:!RC4"); +- +- /* SSL2 has been known to be insecure forever, disabling SSL3 is in response +- * to POODLE, and disabling compression is in response to CRIME. +- */ +- SSL_CTX_set_options(ssl_context, +- SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|SSL_OP_NO_COMPRESSION); +- +- /* This lets us deal with self-signed certificates */ +- SSL_CTX_set_verify(ssl_context, SSL_VERIFY_NONE, NULL); +- +- Tls_load_certificates(); ++ mbedtls_ssl_conf_authmode(&ssl_conf, MBEDTLS_SSL_VERIFY_OPTIONAL); ++ mbedtls_ssl_conf_ca_chain(&ssl_conf, &cacerts, NULL); ++ mbedtls_ssl_conf_rng(&ssl_conf, mbedtls_ctr_drbg_random, &ctr_drbg); + + fd_map = dList_new(20); + servers = dList_new(8); +-} ++ cert_authorities = dList_new(12); + +-/* +- * Save certificate with a hashed filename. +- * Return: 0 on success, 1 on failure. +- */ +-static int Tls_save_certificate_home(X509 * cert) +-{ +- char buf[4096]; +- +- FILE * fp = NULL; +- uint_t i = 0; +- int ret = 1; +- +- /* Attempt to create .dillo/certs blindly - check later */ +- snprintf(buf, 4096, "%s/.dillo/", dGethomedir()); +- mkdir(buf, 01777); +- snprintf(buf, 4096, "%s/.dillo/certs/", dGethomedir()); +- mkdir(buf, 01777); +- +- do { +- snprintf(buf, 4096, "%s/.dillo/certs/%lx.%u", +- dGethomedir(), X509_subject_name_hash(cert), i); +- +- fp=fopen(buf, "r"); +- if (fp == NULL){ +- /* File name doesn't exist so we can use it safely */ +- fp=fopen(buf, "w"); +- if (fp == NULL){ +- MSG("Unable to open cert save file in home dir\n"); +- break; +- } else { +- PEM_write_X509(fp, cert); +- fclose(fp); +- MSG("Wrote certificate\n"); +- ret = 0; +- break; +- } +- } else { +- fclose(fp); +- } +- i++; +- /* Don't loop too many times - just give up */ +- } while (i < 1024); +- +- return ret; ++ Tls_load_certificates(); + } + + /* +@@ -381,7 +430,7 @@ + Server_t *s; + int ret = TLS_CONNECT_READY; + +- dReturn_val_if_fail(ssl_context, TLS_CONNECT_NEVER); ++ dReturn_val_if_fail(ssl_enabled, TLS_CONNECT_NEVER); + + if ((s = dList_find_sorted(servers, url, Tls_servers_by_url_cmp))) { + if (s->cert_status == CERT_STATUS_RECEIVING) +@@ -427,379 +476,232 @@ + return Tls_cert_status(url) == CERT_STATUS_CLEAN; + } + ++#if 0 + /* +- * We are both checking whether the certificates are using a strong enough +- * hash algorithm and key as well as printing out certificate information the +- * first time that we see it. Mixing these two actions together is generally +- * not good practice, but feels justified by the fact that it's so much +- * trouble to get this information out of openssl even once. +- * +- * Return FALSE if MD5 (MD*) hash is found and user does not accept it, +- * otherwise TRUE. ++ * Print certificate and its chain of issuer certificates. + */ +-static bool_t Tls_check_cert_strength(SSL *ssl, Server_t *srv, int *choice) ++static void Tls_print_cert_chain(const mbedtls_x509_crt *cert) + { + /* print for first connection to server */ +- const bool_t print_chain = srv->cert_status == CERT_STATUS_RECEIVING; +- bool_t success = TRUE; ++ const mbedtls_x509_crt *last_cert; ++ const uint_t buflen = 2048; ++ char buf[buflen]; ++ int key_bits; ++ const char *sigalg; + +- STACK_OF(X509) *sk = SSL_get_peer_cert_chain(ssl); +- +- if (sk) { +- const uint_t buflen = 4096; +- char buf[buflen]; +- int rc, i, n = sk_X509_num(sk); +- X509 *cert = NULL; +- EVP_PKEY *public_key; +- int key_type, key_bits; +- const char *type_str; +- BIO *b; +- +- for (i = 0; i < n; i++) { +- cert = sk_X509_value(sk, i); +- public_key = X509_get_pubkey(cert); +- +- /* We are trying to find a way to get the hash function used +- * with a certificate. This way, which is not very pleasant, puts +- * a string such as "sha256WithRSAEncryption" in our buffer and we +- * then trim off the "With..." part. +- */ +- b = BIO_new(BIO_s_mem()); +- rc = i2a_ASN1_OBJECT(b, cert->sig_alg->algorithm); +- +- if (rc > 0) { +- rc = BIO_gets(b, buf, buflen); +- } +- if (rc <= 0) { +- strcpy(buf, "(unknown)"); +- buf[buflen-1] = '\0'; +- } else { +- char *s = strstr(buf, "With"); +- +- if (s) { +- *s = '\0'; +- if (!strcmp(buf, "sha1")) { +- if (print_chain) +- MSG_WARN("In 2015, browsers have begun to deprecate SHA1 " +- "certificates.\n"); +- } else if (!strncmp(buf, "md", 2) && success == TRUE) { +- const char *msg = "A certificate in the chain uses the MD5 " +- "signature algorithm, which is too weak " +- "to trust."; +- *choice = a_Dialog_choice("Dillo TLS security warning", msg, +- "Continue", "Cancel", NULL); +- if (*choice != 1) +- success = FALSE; +- } +- } +- } +- BIO_free(b); +- +- if (print_chain) +- MSG("%s ", buf); +- +- key_type = EVP_PKEY_type(public_key->type); +- type_str = key_type == EVP_PKEY_RSA ? "RSA" : +- key_type == EVP_PKEY_DSA ? "DSA" : +- key_type == EVP_PKEY_DH ? "DH" : +- key_type == EVP_PKEY_EC ? "EC" : "???"; +- key_bits = EVP_PKEY_bits(public_key); +- X509_NAME_oneline(X509_get_subject_name(cert), buf, buflen); +- buf[buflen-1] = '\0'; +- if (print_chain) +- MSG("%d-bit %s: %s\n", key_bits, type_str, buf); +- EVP_PKEY_free(public_key); +- +- if (key_type == EVP_PKEY_RSA && key_bits <= 1024) { +- if (print_chain) +- MSG_WARN("In 2014/5, browsers have been deprecating 1024-bit " +- "RSA keys.\n"); +- } ++ while (cert) { ++ if (cert->sig_md == MBEDTLS_MD_SHA1) { ++ MSG_WARN("In 2015, browsers have begun to deprecate SHA1 " ++ "certificates.\n"); + } + +- if (cert) { +- X509_NAME_oneline(X509_get_issuer_name(cert), buf, buflen); +- buf[buflen-1] = '\0'; +- if (print_chain) +- MSG("root: %s\n", buf); +- } ++ if (mbedtls_oid_get_sig_alg_desc(&cert->sig_oid, &sigalg)) ++ sigalg = "(??" ")"; ++ ++ key_bits = mbedtls_pk_get_bitlen(&cert->pk); ++ mbedtls_x509_dn_gets(buf, buflen, &cert->subject); ++ MSG("%d-bit %s: %s\n", key_bits, sigalg, buf); ++ ++ last_cert = cert; ++ cert = cert->next; + } +- return success; ++ if (last_cert) { ++ mbedtls_x509_dn_gets(buf, buflen, &last_cert->issuer); ++ MSG("root: %s\n", buf); ++ } + } ++#endif + +-/******************** BEGINNING OF STUFF DERIVED FROM wget-1.16.3 */ ++/* ++ * Generate dialog msg for expired cert. ++ */ ++static void Tls_cert_expired(const mbedtls_x509_crt *cert, Dstr *ds) ++{ ++ const mbedtls_x509_time *date = &cert->valid_to; + +-#define ASTERISK_EXCLUDES_DOT /* mandated by rfc2818 */ +- +-/* Return true is STRING (case-insensitively) matches PATTERN, false +- otherwise. The recognized wildcard character is "*", which matches +- any character in STRING except ".". Any number of the "*" wildcard +- may be present in the pattern. +- +- This is used to match of hosts as indicated in rfc2818: "Names may +- contain the wildcard character * which is considered to match any +- single domain name component or component fragment. E.g., *.a.com +- matches foo.a.com but not bar.foo.a.com. f*.com matches foo.com but +- not bar.com [or foo.bar.com]." +- +- If the pattern contain no wildcards, pattern_match(a, b) is +- equivalent to !strcasecmp(a, b). */ +- +-static bool_t pattern_match (const char *pattern, const char *string) +-{ +- +- const char *p = pattern, *n = string; +- char c; +- for (; (c = tolower (*p++)) != '\0'; n++) +- if (c == '*') +- { +- for (c = tolower (*p); c == '*'; c = tolower (*++p)) +- ; +- for (; *n != '\0'; n++) +- if (tolower (*n) == c && pattern_match (p, n)) +- return TRUE; +-#ifdef ASTERISK_EXCLUDES_DOT +- else if (*n == '.') +- return FALSE; +-#endif +- return c == '\0'; +- } +- else +- { +- if (c != tolower (*n)) +- return FALSE; +- } +- return *n == '\0'; ++ dStr_sprintfa(ds,"Certificate expired at: %04d/%02d/%02d %02d:%02d:%02d.\n", ++ date->year, date->mon, date->day, date->hour, date->min, ++ date->sec); + } + + /* +- * Check that the certificate corresponds to the site it's presented for. +- * +- * Return TRUE if the hostname matched or the user indicated acceptance. +- * FALSE on failure. ++ * Generate dialog msg when certificate is not for this host. + */ +-static bool_t Tls_check_cert_hostname(X509 *cert, const char *host, +- int *choice) ++static void Tls_cert_cn_mismatch(const mbedtls_x509_crt *cert, Dstr *ds) + { +- dReturn_val_if_fail(cert && host, FALSE); ++ const uint_t buflen = 2048; ++ char cert_info_buf[buflen]; ++ char *san, *s; + +- char *msg; +- GENERAL_NAMES *subjectAltNames; +- bool_t success = TRUE, alt_name_checked = FALSE;; +- char common_name[256]; ++ dStr_append(ds, "This host is not one of the hostnames listed on the TLS " ++ "certificate"); ++ /* ++ * ++ * Taking the human-readable certificate info and scraping it is brittle ++ * and horrible, but the alternative is to mimic ++ * x509_info_subject_alt_name(), an option that seems equally brittle and ++ * horrible. ++ * ++ * ++ */ ++ mbedtls_x509_crt_info(cert_info_buf, buflen, "", cert); + +- /* Check that HOST matches the common name in the certificate. +- #### The following remains to be done: +- +- - When matching against common names, it should loop over all +- common names and choose the most specific one, i.e. the last +- one, not the first one, which the current code picks. +- +- - Ensure that ASN1 strings from the certificate are encoded as +- UTF-8 which can be meaningfully compared to HOST. */ +- +- subjectAltNames = X509_get_ext_d2i (cert, NID_subject_alt_name, NULL, NULL); +- +- if (subjectAltNames) +- { +- /* Test subject alternative names */ +- +- Dstr *err = dStr_new(""); +- dStr_sprintf(err, "Hostname %s does not match any of certificate's " +- "Subject Alternative Names: ", host); +- +- /* Do we want to check for dNSNAmes or ipAddresses (see RFC 2818)? +- * Signal it by host_in_octet_string. */ +- ASN1_OCTET_STRING *host_in_octet_string = a2i_IPADDRESS (host); +- +- int numaltnames = sk_GENERAL_NAME_num (subjectAltNames); +- int i; +- for (i=0; i < numaltnames; i++) +- { +- const GENERAL_NAME *name = +- sk_GENERAL_NAME_value (subjectAltNames, i); +- if (name) +- { +- if (host_in_octet_string) +- { +- if (name->type == GEN_IPADD) +- { +- /* Check for ipAddress */ +- /* TODO: Should we convert between IPv4-mapped IPv6 +- * addresses and IPv4 addresses? */ +- alt_name_checked = TRUE; +- if (!ASN1_STRING_cmp (host_in_octet_string, +- name->d.iPAddress)) +- break; +- dStr_sprintfa(err, "%s ", name->d.iPAddress); +- } +- } +- else if (name->type == GEN_DNS) +- { +- /* dNSName should be IA5String (i.e. ASCII), however who +- * does trust CA? Convert it into UTF-8 for sure. */ +- unsigned char *name_in_utf8 = NULL; +- +- /* Check for dNSName */ +- alt_name_checked = TRUE; +- +- if (0 <= ASN1_STRING_to_UTF8 (&name_in_utf8, name->d.dNSName)) +- { +- /* Compare and check for NULL attack in ASN1_STRING */ +- if (pattern_match ((char *)name_in_utf8, host) && +- (strlen ((char *)name_in_utf8) == +- (size_t)ASN1_STRING_length (name->d.dNSName))) +- { +- OPENSSL_free (name_in_utf8); +- break; +- } +- dStr_sprintfa(err, "%s ", name_in_utf8); +- OPENSSL_free (name_in_utf8); +- } +- } +- } +- } +- sk_GENERAL_NAME_pop_free(subjectAltNames, GENERAL_NAME_free); +- if (host_in_octet_string) +- ASN1_OCTET_STRING_free(host_in_octet_string); +- +- if (alt_name_checked == TRUE && i >= numaltnames) +- { +- success = FALSE; +- *choice = a_Dialog_choice("Dillo TLS security warning", +- err->str, "Continue", "Cancel", NULL); +- +- switch (*choice){ +- case 1: +- success = TRUE; +- break; +- case 2: +- break; +- default: +- break; +- } +- } +- dStr_free(err, 1); +- } +- +- if (alt_name_checked == FALSE) +- { +- /* Test commomName */ +- X509_NAME *xname = X509_get_subject_name(cert); +- common_name[0] = '\0'; +- X509_NAME_get_text_by_NID (xname, NID_commonName, common_name, +- sizeof (common_name)); +- +- if (!pattern_match (common_name, host)) +- { +- success = FALSE; +- msg = dStrconcat("Certificate common name ", common_name, +- " doesn't match requested host name ", host, NULL); +- *choice = a_Dialog_choice("Dillo TLS security warning", +- msg, "Continue", "Cancel", NULL); +- dFree(msg); +- +- switch (*choice){ +- case 1: +- success = TRUE; +- break; +- case 2: +- break; +- default: +- break; +- } +- } +- else +- { +- /* We now determine the length of the ASN1 string. If it +- * differs from common_name's length, then there is a \0 +- * before the string terminates. This can be an instance of a +- * null-prefix attack. +- * +- * https://www.blackhat.com/html/bh-usa-09/bh-usa-09-archives.html#Marlinspike +- * */ +- +- int i = -1, j; +- X509_NAME_ENTRY *xentry; +- ASN1_STRING *sdata; +- +- if (xname) { +- for (;;) +- { +- j = X509_NAME_get_index_by_NID (xname, NID_commonName, i); +- if (j == -1) break; +- i = j; +- } +- } +- +- xentry = X509_NAME_get_entry(xname,i); +- sdata = X509_NAME_ENTRY_get_data(xentry); +- if (strlen (common_name) != (size_t)ASN1_STRING_length (sdata)) +- { +- success = FALSE; +- msg = dStrconcat("Certificate common name is invalid (contains a NUL " +- "character). This may be an indication that the " +- "host is not who it claims to be -- that is, not " +- "the real ", host, NULL); +- *choice = a_Dialog_choice("Dillo TLS security warning", +- msg, "Continue", "Cancel", NULL); +- dFree(msg); +- +- switch (*choice){ +- case 1: +- success = TRUE; +- break; +- case 2: +- break; +- default: +- break; +- } +- } +- } +- } +- return success; ++ if ((san = strstr(cert_info_buf, "subject alt name : "))) { ++ san += 20; ++ s = strchr(san, '\n'); ++ if (s) { ++ *s = '\0'; ++ dStr_sprintfa(ds, " (%s)", san); ++ } ++ } ++ dStr_append(ds, ".\n"); + } + +-/******************** END OF STUFF DERIVED FROM wget-1.16.3 */ ++/* ++ * Generate dialog msg when certificate is not trusted. ++ */ ++static void Tls_cert_trust_chain_failed(const mbedtls_x509_crt *cert, Dstr *ds) ++{ ++ const uint_t buflen = 2048; ++ char buf[buflen]; ++ ++ while (cert->next) ++ cert = cert->next; ++ mbedtls_x509_dn_gets(buf, buflen, &cert->issuer); ++ ++ dStr_sprintfa(ds, "Couldn't reach any trusted root certificate from " ++ "supplied certificate. The issuer at the end of the " ++ "chain was: \"%s\"\n", buf); ++} + + /* +- * Get the certificate at the end of the chain, or NULL on failure. +- * +- * Rumor has it that the stack can be NULL if a connection has been reused +- * and that the stack can then be reconstructed if necessary, but it doesn't +- * sound like a case we'll encounter. ++ * Generate dialog msg when certificate start date is in the future. + */ +-static X509 *Tls_get_end_of_chain(SSL *ssl) ++static void Tls_cert_not_valid_yet(const mbedtls_x509_crt *cert, Dstr *ds) + { +- STACK_OF(X509) *sk = SSL_get_peer_cert_chain(ssl); ++ const mbedtls_x509_time *date = &cert->valid_to; + +- return sk ? sk_X509_value(sk, sk_X509_num(sk) - 1) : NULL; ++ dStr_sprintfa(ds, "Certificate validity begins in the future at: " ++ "%04d/%02d/%02d %02d:%02d:%02d.\n", ++ date->year, date->mon, date->day, date->hour, date->min, ++ date->sec); + } + +-static void Tls_get_issuer_name(X509 *cert, char *buf, uint_t buflen) ++/* ++ * Generate dialog msg when certificate hash algorithm is not accepted. ++ */ ++static void Tls_cert_bad_hash(const mbedtls_x509_crt *cert, Dstr *ds) + { +- if (cert) { +- X509_NAME_oneline(X509_get_issuer_name(cert), buf, buflen); +- } else { +- strcpy(buf, "(unknown)"); +- buf[buflen-1] = '\0'; +- } ++ const char *hash = (cert->sig_md == MBEDTLS_MD_SHA1) ? "SHA1" : ++ (cert->sig_md == MBEDTLS_MD_SHA224) ? "SHA224" : ++ (cert->sig_md == MBEDTLS_MD_RIPEMD160) ? "RIPEMD160" : ++ (cert->sig_md == MBEDTLS_MD_SHA256) ? "SHA256" : ++ (cert->sig_md == MBEDTLS_MD_SHA384) ? "SHA384" : ++ (cert->sig_md == MBEDTLS_MD_SHA512) ? "SHA512" : ++ "Unrecognized"; ++ ++ dStr_sprintfa(ds, "This certificate's hash algorithm is not accepted " ++ "(%s).\n", hash); + } + +-static void Tls_get_expiration_str(X509 *cert, char *buf, uint_t buflen) ++/* ++ * Generate dialog msg when public key algorithm (RSA, ECDSA) is not accepted. ++ */ ++static void Tls_cert_bad_pk_alg(const mbedtls_x509_crt *cert, Dstr *ds) + { +- ASN1_TIME *exp_date = X509_get_notAfter(cert); +- BIO *b = BIO_new(BIO_s_mem()); +- int rc = ASN1_TIME_print(b, exp_date); ++ const char *type_str = mbedtls_pk_get_name(&cert->pk); + +- if (rc > 0) { +- rc = BIO_gets(b, buf, buflen); ++ dStr_sprintfa(ds, "This certificate's public key algorithm is not accepted " ++ "(%s).\n", type_str); ++} ++ ++/* ++ * Generate dialog msg when the public key is not acceptable. As of 2016, ++ * this was triggered by RSA keys below 2048 bits, if I recall correctly. ++ */ ++static void Tls_cert_bad_key(const mbedtls_x509_crt *cert, Dstr *ds) { ++ int key_bits = mbedtls_pk_get_bitlen(&cert->pk); ++ const char *type_str = mbedtls_pk_get_name(&cert->pk); ++ ++ dStr_sprintfa(ds, "This certificate's key is not accepted, which generally " ++ "means it's too weak (%d-bit %s).\n", key_bits, type_str); ++} ++ ++/* ++ * Make a dialog msg containing warnings about problems with the certificate. ++ */ ++static char *Tls_make_bad_cert_msg(const mbedtls_x509_crt *cert,uint32_t flags) ++{ ++ static const struct certerr { ++ int val; ++ void (*cert_err_fn)(const mbedtls_x509_crt *cert, Dstr *ds); ++ } cert_error [] = { ++ { MBEDTLS_X509_BADCERT_EXPIRED, Tls_cert_expired}, ++ { MBEDTLS_X509_BADCERT_CN_MISMATCH, Tls_cert_cn_mismatch}, ++ { MBEDTLS_X509_BADCERT_NOT_TRUSTED, Tls_cert_trust_chain_failed}, ++ { MBEDTLS_X509_BADCERT_FUTURE, Tls_cert_not_valid_yet}, ++ { MBEDTLS_X509_BADCERT_BAD_MD, Tls_cert_bad_hash}, ++ { MBEDTLS_X509_BADCERT_BAD_PK, Tls_cert_bad_pk_alg}, ++ { MBEDTLS_X509_BADCERT_BAD_KEY, Tls_cert_bad_key} ++ }; ++ const uint_t ncert_errors = sizeof(cert_error) /sizeof(cert_error[0]); ++ char *ret; ++ Dstr *ds = dStr_new(NULL); ++ uint_t u; ++ ++ for (u = 0; u < ncert_errors; u++) { ++ if (flags & cert_error[u].val) { ++ flags &= ~cert_error[u].val; ++ cert_error[u].cert_err_fn(cert, ds); ++ } + } +- if (rc <= 0) { +- strcpy(buf, "(unknown)"); +- buf[buflen-1] = '\0'; ++ if (flags) ++ dStr_sprintfa(ds, "Unknown certificate error(s): flag value 0x%04x", ++ flags); ++ ret = ds->str; ++ dStr_free(ds, 0); ++ return ret; ++} ++ ++static int Tls_cert_auth_cmp(const void *v1, const void *v2) ++{ ++ const CertAuth_t *c1 = (CertAuth_t *)v1, *c2 = (CertAuth_t *)v2; ++ ++ return strcmp(c1->name, c2->name); ++} ++ ++static int Tls_cert_auth_cmp_by_name(const void *v1, const void *v2) ++{ ++ const CertAuth_t *c = (CertAuth_t *)v1; ++ const char *name = (char *)v2; ++ ++ return strcmp(c->name, name); ++} ++ ++/* ++ * Keep account of on whose authority we are trusting servers. ++ */ ++static void Tls_update_cert_authorities_data(const mbedtls_x509_crt *cert, ++ Server_t *srv) ++{ ++ const uint_t buflen = 1024; ++ char buf[buflen]; ++ const mbedtls_x509_crt *last = cert; ++ ++ while (last->next) ++ last = last->next; ++ ++ mbedtls_x509_dn_gets(buf, buflen, &last->issuer); ++ ++ CertAuth_t *ca = dList_find_custom(cert_authorities, buf, ++ Tls_cert_auth_cmp_by_name); ++ if (!ca) { ++ ca = dNew(CertAuth_t, 1); ++ ca->name = dStrdup(buf); ++ ca->servers = dList_new(16); ++ dList_insert_sorted(cert_authorities, ca, Tls_cert_auth_cmp); + } +- BIO_free(b); ++ dList_append(ca->servers, srv); + } + + /* +@@ -807,196 +709,53 @@ + * to do. + * Return: -1 if connection should be canceled, or 0 if it should continue. + */ +-static int Tls_examine_certificate(SSL *ssl, Server_t *srv) ++static int Tls_examine_certificate(mbedtls_ssl_context *ssl, Server_t *srv) + { +- X509 *remote_cert; +- long st; +- const uint_t buflen = 4096; +- char buf[buflen], *cn, *msg; ++ const mbedtls_x509_crt *cert; ++ uint32_t st; + int choice = -1, ret = -1; + char *title = dStrconcat("Dillo TLS security warning: ",srv->hostname,NULL); + +- remote_cert = SSL_get_peer_certificate(ssl); +- if (remote_cert == NULL){ ++ cert = mbedtls_ssl_get_peer_cert(ssl); ++ if (cert == NULL){ + /* Inform user that remote system cannot be trusted */ + choice = a_Dialog_choice(title, +- "The remote system is not presenting a certificate. " +- "This site cannot be trusted. Sending data is not safe.", ++ "No certificate received from this site. Can't verify who it is.", + "Continue", "Cancel", NULL); + + /* Abort on anything but "Continue" */ + if (choice == 1){ + ret = 0; + } +- } else if (Tls_check_cert_strength(ssl, srv, &choice) && +- Tls_check_cert_hostname(remote_cert, srv->hostname, &choice)) { +- /* Figure out if (and why) the remote system can't be trusted */ +- st = SSL_get_verify_result(ssl); +- switch (st) { +- case X509_V_OK: ++ } else { ++ /* check the certificate */ ++ st = mbedtls_ssl_get_verify_result(ssl); ++ if (st == 0) { ++ if (srv->cert_status == CERT_STATUS_RECEIVING) { ++ /* first connection to server */ ++#if 0 ++ Tls_print_cert_chain(cert); ++#endif ++ Tls_update_cert_authorities_data(cert, srv); ++ } + ret = 0; +- break; +- case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: +- /* Either self signed and untrusted */ +- /* Extract CN from certificate name information */ +- if ((cn = strstr(remote_cert->name, "/CN=")) == NULL) { +- strcpy(buf, "(no CN given)"); +- } else { +- char *cn_end; ++ } else if (st == 0xFFFFFFFF) { ++ /* "result is not available (eg because the handshake was aborted too ++ * early)" is what the documentation says. Maybe it's only what ++ * happens if you call get_verify_result() too early or when the ++ * handshake failed. But just in case... ++ */ ++ MSG_ERR("mbedtls_ssl_get_verify_result: result is not available"); ++ } else { ++ char *dialog_warning_msg = Tls_make_bad_cert_msg(cert, st); + +- cn += 4; +- +- if ((cn_end = strstr(cn, "/")) == NULL ) +- cn_end = cn + strlen(cn); +- +- strncpy(buf, cn, (size_t) (cn_end - cn)); +- buf[cn_end - cn] = '\0'; +- } +- msg = dStrconcat("The remote certificate is self-signed and " +- "untrusted. For address: ", buf, NULL); +- choice = a_Dialog_choice(title, +- msg, "Continue", "Cancel", "Save Certificate", NULL); +- dFree(msg); +- +- switch (choice){ +- case 1: +- ret = 0; +- break; +- case 2: +- break; +- case 3: +- /* Save certificate to a file */ +- Tls_save_certificate_home(remote_cert); +- ret = 0; +- break; +- default: +- break; +- } +- break; +- case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: +- case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: +- choice = a_Dialog_choice(title, +- "The issuer for the remote certificate cannot be found. " +- "The authenticity of the remote certificate cannot be trusted.", +- "Continue", "Cancel", NULL); +- ++ choice = a_Dialog_choice(title, dialog_warning_msg, "Continue", ++ "Cancel", NULL); + if (choice == 1) { + ret = 0; + } +- break; +- +- case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: +- case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: +- case X509_V_ERR_CERT_SIGNATURE_FAILURE: +- case X509_V_ERR_CRL_SIGNATURE_FAILURE: +- choice = a_Dialog_choice(title, +- "The remote certificate signature could not be read " +- "or is invalid and should not be trusted", +- "Continue", "Cancel", NULL); +- +- if (choice == 1) { +- ret = 0; +- } +- break; +- case X509_V_ERR_CERT_NOT_YET_VALID: +- case X509_V_ERR_CRL_NOT_YET_VALID: +- choice = a_Dialog_choice(title, +- "Part of the remote certificate is not yet valid. " +- "Certificates usually have a range of dates over which " +- "they are to be considered valid, and the certificate " +- "presented has a starting validity after today's date " +- "You should be cautious about using this site", +- "Continue", "Cancel", NULL); +- +- if (choice == 1) { +- ret = 0; +- } +- break; +- case X509_V_ERR_CERT_HAS_EXPIRED: +- case X509_V_ERR_CRL_HAS_EXPIRED: +- Tls_get_expiration_str(remote_cert, buf, buflen); +- msg = dStrconcat("The remote certificate expired on: ", buf, +- ". This site can no longer be trusted.", NULL); +- +- choice = a_Dialog_choice(title, msg, "Continue", "Cancel", NULL); +- if (choice == 1) { +- ret = 0; +- } +- dFree(msg); +- break; +- case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: +- case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: +- case X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: +- case X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: +- choice = a_Dialog_choice(title, +- "There was an error in the certificate presented. " +- "Some of the certificate data was improperly formatted " +- "making it impossible to determine if the certificate " +- "is valid. You should not trust this certificate.", +- "Continue", "Cancel", NULL); +- if (choice == 1) { +- ret = 0; +- } +- break; +- case X509_V_ERR_INVALID_CA: +- case X509_V_ERR_INVALID_PURPOSE: +- case X509_V_ERR_CERT_UNTRUSTED: +- case X509_V_ERR_CERT_REJECTED: +- case X509_V_ERR_KEYUSAGE_NO_CERTSIGN: +- choice = a_Dialog_choice(title, +- "One of the certificates in the chain is being used " +- "incorrectly (possibly due to configuration problems " +- "with the remote system. The connection should not " +- "be trusted", +- "Continue", "Cancel", NULL); +- if (choice == 1) { +- ret = 0; +- } +- break; +- case X509_V_ERR_SUBJECT_ISSUER_MISMATCH: +- case X509_V_ERR_AKID_SKID_MISMATCH: +- case X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: +- choice = a_Dialog_choice(title, +- "Some of the information presented by the remote system " +- "does not match other information presented. " +- "This may be an attempt to eavesdrop on communications", +- "Continue", "Cancel", NULL); +- if (choice == 1) { +- ret = 0; +- } +- break; +- case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: +- Tls_get_issuer_name(Tls_get_end_of_chain(ssl), buf, buflen); +- msg = dStrconcat("Certificate chain led to a self-signed certificate " +- "instead of a trusted root. Name: ", buf , NULL); +- choice = a_Dialog_choice(title, msg, "Continue", "Cancel", NULL); +- if (choice == 1) { +- ret = 0; +- } +- dFree(msg); +- break; +- case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: +- Tls_get_issuer_name(Tls_get_end_of_chain(ssl), buf, buflen); +- msg = dStrconcat("The issuer certificate of an untrusted certificate " +- "cannot be found. Issuer: ", buf, NULL); +- choice = a_Dialog_choice(title, msg, "Continue", "Cancel", NULL); +- if (choice == 1) { +- ret = 0; +- } +- dFree(msg); +- break; +- default: /* Need to add more options later */ +- snprintf(buf, 80, +- "The remote certificate cannot be verified (code %ld)", st); +- choice = a_Dialog_choice(title, +- buf, "Continue", "Cancel", NULL); +- /* abort on anything but "Continue" */ +- if (choice == 1){ +- ret = 0; +- } ++ dFree(dialog_warning_msg); + } +- X509_free(remote_cert); +- remote_cert = 0; + } + dFree(title); + +@@ -1005,10 +764,7 @@ + } else if (choice == 1) { + srv->cert_status = CERT_STATUS_USER_ACCEPTED; /* clicked Continue */ + } else { +- /* 2 for Cancel, or 0 when window closed. Treating 0 as meaning 'No' is +- * probably not exactly correct, but adding complexity to handle this +- * obscure case does not seem justifiable. +- */ ++ /* 2 for Cancel, or 0 when window closed. */ + srv->cert_status = CERT_STATUS_BAD; + } + return ret; +@@ -1041,13 +797,9 @@ + a_IOwatch_remove_fd(c->fd, -1); + dClose(c->fd); + } +- if (!SSL_in_init(c->ssl)) { +- /* openssl 1.0.2f does not like shutdown being called during +- * handshake, resulting in ssl_undefined_function in the error queue. +- */ +- SSL_shutdown(c->ssl); +- } +- SSL_free(c->ssl); ++ mbedtls_ssl_close_notify(c->ssl); ++ mbedtls_ssl_free(c->ssl); ++ dFree(c->ssl); + + a_Url_free(c->url); + Tls_fd_map_remove_entry(c->fd); +@@ -1057,6 +809,88 @@ + } + + /* ++ * Print a message about the fatal alert. ++ * ++ * The values have gaps, and a few are never fatal error values, and some may ++ * never be sent to clients, but let's go ahead and translate every value that ++ * we recognize. ++ */ ++static void Tls_fatal_error_msg(int error_type) ++{ ++ const char *errmsg; ++ ++ if (error_type == MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY) ++ errmsg = "close notify"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE) ++ errmsg = "unexpected message received"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC) ++ errmsg = "record received with incorrect MAC"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_DECRYPTION_FAILED) { ++ /* last used in TLS 1.1 */ ++ errmsg = "decryption failed"; ++ } else if (error_type == MBEDTLS_SSL_ALERT_MSG_RECORD_OVERFLOW) ++ errmsg = "\"A TLSCiphertext record was received that had a length more " ++ "than 2^14+2048 bytes, or a record decrypted to a TLSCompressed" ++ " record with more than 2^14+1024 bytes.\""; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_DECOMPRESSION_FAILURE) ++ errmsg = "\"decompression function received improper input\""; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE) ++ errmsg = "\"sender was unable to negotiate an acceptable set of security" ++ " parameters given the options available\""; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_NO_CERT) ++ errmsg = "no cert (an obsolete alert last used in SSL3)"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_BAD_CERT) ++ errmsg = "bad certificate"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT) ++ errmsg = "certificate of unsupported type"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_CERT_REVOKED) ++ errmsg = "certificate revoked by its signer"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_CERT_EXPIRED) ++ errmsg = "certificate expired or not currently valid"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN) ++ errmsg = "certificate error of an unknown sort"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER) ++ errmsg = "illegal parameter in handshake"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA) ++ errmsg = "unknown CA"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED) ++ errmsg = "access denied"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR) ++ errmsg = "decode error"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_DECRYPT_ERROR) ++ errmsg = "decrypt error"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_EXPORT_RESTRICTION) { ++ /* last used in TLS 1.0 */ ++ errmsg = "export restriction"; ++ } else if (error_type == MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION) ++ errmsg = "protocol version is recognized but not supported"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_INSUFFICIENT_SECURITY) ++ errmsg = "server requires ciphers more secure than those supported by " ++ "the client"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR) ++ errmsg = "internal error (not the client's fault)"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK) ++ errmsg = "inappropriate fallback"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_USER_CANCELED) ++ errmsg = "\"handshake is being canceled for some reason unrelated to a " ++ "protocol failure\""; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION) ++ errmsg = "no renegotiation"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT) ++ errmsg = "unsupported ext"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME) ++ errmsg = "unrecognized name"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY) ++ errmsg = "unknown psk identity"; ++ else if (error_type == MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL) ++ errmsg = "no application protocol"; ++ else errmsg = "unknown alert value"; ++ ++ MSG("mbedtls_ssl_handshake() received TLS fatal alert %d (%s)\n", ++ error_type, errmsg); ++} ++ ++/* + * Connect, set a callback if it's still not completed. If completed, check + * the certificate and report back to http. + */ +@@ -1071,71 +905,63 @@ + return; + } + +- assert(!ERR_get_error()); ++ if (conn->ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER) { ++ ret = mbedtls_ssl_handshake(conn->ssl); + +- ret = SSL_connect(conn->ssl); +- +- if (ret <= 0) { +- int err1_ret = SSL_get_error(conn->ssl, ret); +- if (err1_ret == SSL_ERROR_WANT_READ || +- err1_ret == SSL_ERROR_WANT_WRITE) { +- int want = err1_ret == SSL_ERROR_WANT_READ ? DIO_READ : DIO_WRITE; ++ if (ret == MBEDTLS_ERR_SSL_WANT_READ || ++ ret == MBEDTLS_ERR_SSL_WANT_WRITE) { ++ int want = ret == MBEDTLS_ERR_SSL_WANT_READ ? DIO_READ : DIO_WRITE; + + _MSG("iowatching fd %d for tls -- want %s\n", fd, +- err1_ret == SSL_ERROR_WANT_READ ? "read" : "write"); ++ ret == MBEDTLS_ERR_SSL_WANT_READ ? "read" : "write"); + a_IOwatch_remove_fd(fd, -1); + a_IOwatch_add_fd(fd, want, Tls_connect_cb, INT2VOIDP(connkey)); + ongoing = TRUE; + failed = FALSE; +- } else if (err1_ret == SSL_ERROR_SYSCALL || err1_ret == SSL_ERROR_SSL) { +- unsigned long err2_ret = ERR_get_error(); ++ } else if (ret == 0) { ++ Server_t *srv = dList_find_sorted(servers, conn->url, ++ Tls_servers_by_url_cmp); ++#if 0 ++ if (srv->cert_status == CERT_STATUS_RECEIVING) { ++ /* Making first connection with the server. Show cipher used. */ ++ mbedtls_ssl_context *ssl = conn->ssl; ++ const char *version = mbedtls_ssl_get_version(ssl), ++ *cipher = mbedtls_ssl_get_ciphersuite(ssl); + +- if (err2_ret) { +- do { +- MSG("SSL_connect() failed: %s\n", +- ERR_error_string(err2_ret, NULL)); +- } while ((err2_ret = ERR_get_error())); +- } else { +- /* nothing in the error queue */ +- if (ret == 0) { +- MSG("TLS connect error: \"an EOF was observed that violates " +- "the protocol\"\n"); +- /* +- * I presume we took too long on our side and the server grew +- * impatient. +- */ +- } else if (ret == -1) { +- MSG("TLS connect error: %s\n", dStrerror(errno)); +- +- /* If the following can happen, I'll add code to handle it, but +- * I don't want to add code blindly if it isn't getting used +- */ +- assert(errno != EAGAIN && errno != EINTR); +- } else { +- MSG_ERR("According to the man page for SSL_get_error(), this " +- "was not a possibility (ret %d).\n", ret); +- } ++ MSG("%s: %s, cipher %s\n", URL_AUTHORITY(conn->url), version, ++ cipher); + } ++#endif ++ if (srv->cert_status == CERT_STATUS_USER_ACCEPTED || ++ (Tls_examine_certificate(conn->ssl, srv) != -1)) { ++ failed = FALSE; ++ } ++ } else if (ret == MBEDTLS_ERR_NET_SEND_FAILED) { ++ MSG("mbedtls_ssl_handshake() send failed. Server may not be accepting" ++ " connections.\n"); ++ } else if (ret == MBEDTLS_ERR_NET_CONNECT_FAILED) { ++ MSG("mbedtls_ssl_handshake() connect failed.\n"); ++ } else if (ret == MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE) { ++ /* Paul Bakker, the mbed tls guy, says "beware, this might change in ++ * future versions" and "ssl->in_msg[1] is not going to change anytime ++ * soon, unless there are radical changes". It seems to be the best of ++ * the alternatives. ++ */ ++ Tls_fatal_error_msg(conn->ssl->in_msg[1]); ++ } else if (ret == MBEDTLS_ERR_SSL_INVALID_RECORD) { ++ MSG("mbedtls_ssl_handshake() failed upon receiving 'an invalid " ++ "record'.\n"); ++ } else if (ret == MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE) { ++ MSG("mbedtls_ssl_handshake() failed: 'The requested feature is not " ++ "available.'\n"); ++ } else if (ret == MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE) { ++ MSG("mbedtls_ssl_handshake() failed: 'Processing of the " ++ "ServerKeyExchange handshake message failed.'\n"); ++ } else if (ret == MBEDTLS_ERR_SSL_CONN_EOF) { ++ MSG("mbedtls_ssl_handshake() failed: 'Read EOF. Connection closed " ++ "by server.\n"); + } else { +- MSG("SSL_get_error() returned %d on a connect.\n", err1_ret); +- } +- } else { +- Server_t *srv = dList_find_sorted(servers, conn->url, +- Tls_servers_by_url_cmp); +- +- if (srv->cert_status == CERT_STATUS_RECEIVING) { +- /* Making first connection with the server. Show cipher used. */ +- SSL *ssl = conn->ssl; +- const char *version = SSL_get_version(ssl); +- const SSL_CIPHER *cipher = SSL_get_current_cipher(ssl); +- +- MSG("%s: %s, cipher %s\n", URL_AUTHORITY(conn->url), version, +- SSL_CIPHER_get_name(cipher)); +- } +- +- if (srv->cert_status == CERT_STATUS_USER_ACCEPTED || +- (Tls_examine_certificate(conn->ssl, srv) != -1)) { +- failed = FALSE; ++ MSG("mbedtls_ssl_handshake() failed with error -0x%04x\n", -ret); + } + } + +@@ -1150,7 +976,7 @@ + if (failed) { + Tls_close_by_key(connkey); + } +- a_IOwatch_remove_fd(fd, DIO_READ|DIO_WRITE); ++ a_IOwatch_remove_fd(fd, -1); + a_Http_connect_done(fd, failed ? FALSE : TRUE); + } else { + MSG("Connection disappeared. Too long with a popup popped up?\n"); +@@ -1168,47 +994,36 @@ + */ + void a_Tls_handshake(int fd, const DilloUrl *url) + { +- SSL *ssl; ++ mbedtls_ssl_context *ssl = dNew0(mbedtls_ssl_context, 1); + bool_t success = TRUE; + int connkey = -1; ++ int ret; + +- if (!ssl_context) ++ if (!ssl_enabled) + success = FALSE; + + if (success && Tls_user_said_no(url)) { + success = FALSE; + } + +- assert(!ERR_get_error()); +- +- if (success && !(ssl = SSL_new(ssl_context))) { +- unsigned long err_ret = ERR_get_error(); +- do { +- MSG("SSL_new() failed: %s\n", ERR_error_string(err_ret, NULL)); +- } while ((err_ret = ERR_get_error())); ++ if (success && (ret = mbedtls_ssl_setup(ssl, &ssl_conf))) { ++ MSG("mbedtls_ssl_setup failed %d\n", ret); + success = FALSE; + } + + /* assign TLS connection to this file descriptor */ +- if (success && !SSL_set_fd(ssl, fd)) { +- unsigned long err_ret = ERR_get_error(); +- do { +- MSG("SSL_set_fd() failed: %s\n", ERR_error_string(err_ret, NULL)); +- } while ((err_ret = ERR_get_error())); ++ if (success) { ++ Conn_t *conn = Tls_conn_new(fd, url, ssl); ++ connkey = Tls_make_conn_key(conn); ++ mbedtls_ssl_set_bio(ssl, &conn->fd, mbedtls_net_send, mbedtls_net_recv, ++ NULL); ++ } ++ ++ if (success && (ret = mbedtls_ssl_set_hostname(ssl, URL_HOST(url)))) { ++ MSG("mbedtls_ssl_set_hostname failed %d\n", ret); + success = FALSE; + } + +- if (success) +- connkey = Tls_conn_new(fd, url, ssl); +- +-#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME +- /* Server Name Indication. From the openssl changelog, it looks like this +- * came along in 2010. +- */ +- if (success && !a_Url_host_is_ip(URL_HOST(url))) +- SSL_set_tlsext_host_name(ssl, URL_HOST(url)); +-#endif +- + if (!success) { + a_Tls_reset_server_state(url); + a_Http_connect_done(fd, success); +@@ -1223,7 +1038,22 @@ + int a_Tls_read(void *conn, void *buf, size_t len) + { + Conn_t *c = (Conn_t*)conn; +- return SSL_read(c->ssl, buf, len); ++ int ret = mbedtls_ssl_read(c->ssl, buf, len); ++ ++ if (ret < 0) { ++ if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) { ++ /* treat it as EOF */ ++ ret = 0; ++ } else if (ret == MBEDTLS_ERR_SSL_WANT_READ) { ++ ret = -1; ++ errno = EAGAIN; /* already happens to be set, but let's make sure */ ++ } else if (ret == MBEDTLS_ERR_NET_CONN_RESET) { ++ MSG("READ failed: TLS connection reset by server.\n"); ++ } else { ++ MSG("READ failed with -0x%04x: an mbed tls error.\n", -ret); ++ } ++ } ++ return ret; + } + + /* +@@ -1232,7 +1062,12 @@ + int a_Tls_write(void *conn, void *buf, size_t len) + { + Conn_t *c = (Conn_t*)conn; +- return SSL_write(c->ssl, buf, len); ++ int ret = mbedtls_ssl_write(c->ssl, buf, len); ++ ++ if (ret < 0) { ++ MSG("WRITE failed with -0x%04x: an mbed tls error\n", -ret); ++ } ++ return ret; + } + + void a_Tls_close_by_fd(int fd) +@@ -1245,6 +1080,57 @@ + } + } + ++static void Tls_cert_authorities_print_summary() ++{ ++ const int ca_len = dList_length(cert_authorities); ++ int i, j; ++ ++ for (i = 0; i < ca_len; i++) { ++ CertAuth_t *ca = (CertAuth_t *)dList_nth_data(cert_authorities, i); ++ const int servers_len = ca->servers ? dList_length(ca->servers) : 0; ++ char *ca_name = strstr(ca->name, "CN="); ++ ++ if (!ca_name) ++ ca_name = strstr(ca->name, "OU="); ++ ++ if (ca_name) ++ ca_name += 3; ++ else ++ ca_name = ca->name; ++ ++ for (j = 0; j < servers_len; j++) { ++ Server_t *s = dList_nth_data(ca->servers, j); ++ ++ MSG("%s - %s:%d\n", ca_name, s->hostname, s->port); ++ } ++ } ++ ++} ++ ++/* ++ * Free mbed tls's chain of certificates and free our data tracking which ++ * CAs caused us to trust which servers. ++ */ ++static void Tls_cert_authorities_freeall() ++{ ++ if (cacerts.next) ++ mbedtls_x509_crt_free(cacerts.next); ++ ++ if (cert_authorities) { ++ CertAuth_t *ca; ++ int i, n = dList_length(cert_authorities); ++ ++ for (i = 0; i < n; i++) { ++ ca = (CertAuth_t *) dList_nth_data(cert_authorities, i); ++ dFree(ca->name); ++ if (ca->servers) ++ dList_free(ca->servers); ++ dFree(ca); ++ } ++ dList_free(cert_authorities); ++ } ++} ++ + static void Tls_servers_freeall() + { + if (servers) { +@@ -1275,13 +1161,14 @@ + } + + /* +- * Clean up the OpenSSL library ++ * Clean up + */ + void a_Tls_freeall(void) + { +- if (ssl_context) +- SSL_CTX_free(ssl_context); ++ Tls_cert_authorities_print_summary(); ++ + Tls_fd_map_remove_all(); ++ Tls_cert_authorities_freeall(); + Tls_servers_freeall(); + } + diff --git a/old/test/mr-test.tgz b/old/test/mr-test.tgz Binary files differnew file mode 100644 index 0000000..bb44df9 --- /dev/null +++ b/old/test/mr-test.tgz diff --git a/old/test/msg_levels.diff b/old/test/msg_levels.diff new file mode 100644 index 0000000..f547cfb --- /dev/null +++ b/old/test/msg_levels.diff @@ -0,0 +1,899 @@ +diff -r a50076297212 src/IO/dpi.c +--- a/src/IO/dpi.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/IO/dpi.c Fri Apr 26 22:17:38 2013 +0000 +@@ -356,9 +356,9 @@ + if (execl(path1, "dpid", (char*)NULL) == -1) { + dFree(path1); + if (execlp("dpid", "dpid", (char*)NULL) == -1) { +- MSG("Dpi_start_dpid (child): %s\n", dStrerror(errno)); ++ MSG_WARN("Dpi_start_dpid (child): %s\n", dStrerror(errno)); + if (Dpi_blocking_write(st_pipe[1], "ERROR", 5) == -1) { +- MSG("Dpi_start_dpid (child): can't write to pipe.\n"); ++ MSG_WARN("Dpi_start_dpid (child): can't write to pipe.\n"); + } + dClose(st_pipe[1]); + _exit (EXIT_FAILURE); +@@ -367,7 +367,7 @@ + } + } else if (pid < 0) { + /* The fork failed. Report failure. */ +- MSG("Dpi_start_dpid: %s\n", dStrerror(errno)); ++ MSG_WARN("Dpi_start_dpid: %s\n", dStrerror(errno)); + /* close the unused pipe */ + dClose(st_pipe[0]); + dClose(st_pipe[1]); +@@ -375,7 +375,7 @@ + /* This is the parent process, check our child status... */ + dClose(st_pipe[1]); + if ((answer = Dpi_blocking_read(st_pipe[0])) != NULL) { +- MSG("Dpi_start_dpid: can't start dpid\n"); ++ MSG_WARN("Dpi_start_dpid: can't start dpid\n"); + dFree(answer); + } else { + ret = 0; +@@ -449,9 +449,10 @@ + if (Dpi_read_comm_keys(&dpid_port) != -1) { + sin.sin_port = htons(dpid_port); + if ((sock_fd = Dpi_make_socket_fd()) == -1) { +- MSG("Dpi_check_dpid_ids: sock_fd=%d %s\n", sock_fd, dStrerror(errno)); ++ MSG_INFO("Dpi_check_dpid_ids: sock_fd=%d %s\n", sock_fd, ++ dStrerror(errno)); + } else if (connect(sock_fd, (struct sockaddr *)&sin, sin_sz) == -1) { +- MSG("Dpi_check_dpid_ids: %s\n", dStrerror(errno)); ++ MSG_INFO("Dpi_check_dpid_ids: %s\n", dStrerror(errno)); + } else { + dClose(sock_fd); + ret = 1; +@@ -547,7 +548,7 @@ + sin.sin_port = htons(dpid_port); + if ((sock_fd = Dpi_make_socket_fd()) == -1 || + connect(sock_fd, (struct sockaddr *)&sin, sin_sz) == -1) { +- MSG("Dpi_get_server_port: %s\n", dStrerror(errno)); ++ MSG_WARN("Dpi_get_server_port: %s\n", dStrerror(errno)); + } else { + ok = 1; + } +@@ -559,7 +560,7 @@ + _MSG("[%s]\n", request); + + if (Dpi_blocking_write(sock_fd, request, strlen(request)) == -1) { +- MSG("Dpi_get_server_port: %s\n", dStrerror(errno)); ++ MSG_WARN("Dpi_get_server_port: %s\n", dStrerror(errno)); + } else { + ok = 1; + } +@@ -569,7 +570,7 @@ + /* Get the reply */ + ok = 0; + if ((rply = Dpi_blocking_read(sock_fd)) == NULL) { +- MSG("Dpi_get_server_port: can't read server port from dpid.\n"); ++ MSG_WARN("Dpi_get_server_port: can't read server port from dpid.\n"); + } else { + ok = 1; + } +@@ -622,7 +623,7 @@ + if ((sock_fd = Dpi_make_socket_fd()) == -1) { + perror("[dpi::socket]"); + } else if (connect(sock_fd, (void*)&sin, sizeof(sin)) == -1) { +- MSG("[dpi::connect] errno:%d %s\n", errno, dStrerror(errno)); ++ MSG_WARN("[dpi::connect] errno:%d %s\n", errno, dStrerror(errno)); + + /* send authentication Key (the server closes sock_fd on auth error) */ + } else if (!(cmd = a_Dpip_build_cmd("cmd=%s msg=%s", "auth", SharedKey))) { +diff -r a50076297212 src/IO/http.c +--- a/src/IO/http.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/IO/http.c Fri Apr 26 22:17:38 2013 +0000 +@@ -393,7 +393,7 @@ + for (i = 0; (dh = dList_nth_data(S->addr_list, i)); ++i) { + if ((S->SockFD = socket(dh->af, SOCK_STREAM, IPPROTO_TCP)) < 0) { + S->Err = errno; +- MSG("Http_connect_socket ERROR: %s\n", dStrerror(errno)); ++ MSG_WARN("Http_connect_socket ERROR: %s\n", dStrerror(errno)); + continue; + } + /* set NONBLOCKING and close on exec. */ +@@ -438,7 +438,7 @@ + if (status == -1 && errno != EINPROGRESS) { + S->Err = errno; + dClose(S->SockFD); +- MSG("Http_connect_socket ERROR: %s\n", dStrerror(S->Err)); ++ MSG_WARN("Http_connect_socket ERROR: %s\n", dStrerror(S->Err)); + } else { + a_Chain_bcb(OpSend, Info, &S->SockFD, "FD"); + a_Chain_fcb(OpSend, Info, &S->SockFD, "FD"); +diff -r a50076297212 src/auth.c +--- a/src/auth.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/auth.c Fri Apr 26 22:17:38 2013 +0000 +@@ -180,7 +180,7 @@ + token_size++; + } + if (token_size == 0) { +- MSG("Auth_parse_token_value: missing auth token\n"); ++ MSG_WARN("Auth_parse_token_value: missing auth token\n"); + return 0; + } + beyond_token = *auth; +@@ -195,11 +195,11 @@ + break; + case '\0': + case ',': +- MSG("Auth_parse_token_value: missing auth token value\n"); ++ MSG_WARN("Auth_parse_token_value: missing auth token value\n"); + return 0; + break; + default: +- MSG("Auth_parse_token_value: garbage after auth token\n"); ++ MSG_WARN("Auth_parse_token_value: garbage after auth token\n"); + return 0; + break; + } +@@ -233,8 +233,8 @@ + auth_parse->realm = strdup(value); + return 0; /* end parsing */ + } else +- MSG("Auth_parse_basic_challenge_cb: Ignoring unknown parameter: %s = " +- "'%s'\n", token, value); ++ MSG_WARN("Auth_parse_basic_challenge_cb: Ignoring unknown parameter: " ++ "%s = '%s'\n", token, value); + return 1; + } + +@@ -257,7 +257,7 @@ + else if (dStrAsciiCasecmp("false", value) == 0) + auth_parse->stale = 0; + else { +- MSG("%s: Invalid stale value: %s\n", fn, value); ++ MSG_WARN("%s: Invalid stale value: %s\n", fn, value); + return 0; + } + } else if (strcmp("algorithm", token) == 0) { +@@ -265,11 +265,11 @@ + auth_parse->algorithm = MD5; + else if (strcmp("MD5-sess", value) == 0) { + /* auth_parse->algorithm = MD5SESS; */ +- MSG("%s: MD5-sess algorithm disabled (not tested because 'not " +- "correctly implemented yet' in Apache 2.2)\n", fn); ++ MSG_WARN("%s: MD5-sess algorithm disabled (not tested because 'not " ++ "correctly implemented yet' in Apache 2.2)\n", fn); + return 0; + } else { +- MSG("%s: Unknown algorithm: %s\n", fn, value); ++ MSG_WARN("%s: Unknown algorithm: %s\n", fn, value); + return 0; + } + } else if (strcmp("qop", token) == 0) { +@@ -282,10 +282,10 @@ + if (len == 8 && strncmp("auth-int", value, 8) == 0) { + /* auth_parse->qop = AUTHINT; */ + /* Keep searching; maybe we'll find an "auth" yet. */ +- MSG("%s: auth-int qop disabled (not tested because 'not " +- "implemented yet' in Apache 2.2)\n", fn); ++ MSG_WARN("%s: auth-int qop disabled (not tested because 'not " ++ "implemented yet' in Apache 2.2)\n", fn); + } else { +- MSG("%s: Unknown qop value in %s\n", fn, value); ++ MSG_WARN("%s: Unknown qop value in %s\n", fn, value); + } + value += len; + while (*value == ' ' || *value == '\t') +@@ -296,7 +296,7 @@ + value++; + } + } else { +- MSG("%s: Ignoring unknown parameter: %s = '%s'\n", fn, token, value); ++ MSG_WARN("%s: Ignoring unknown parameter: %s = '%s'\n", fn, token,value); + } + return 1; + } +@@ -322,14 +322,14 @@ + if (auth_parse->realm) { + auth_parse->ok = 1; + } else { +- MSG("Auth_parse_challenge_args: missing Basic auth realm\n"); ++ MSG_WARN("Auth_parse_challenge_args: missing Basic auth realm\n"); + return; + } + } else if (auth_parse->type == DIGEST) { + if (auth_parse->realm && auth_parse->nonce) { + auth_parse->ok = 1; + } else { +- MSG("Auth_parse_challenge_args: Digest challenge incomplete\n"); ++ MSG_WARN("Auth_parse_challenge_args: Digest challenge incomplete\n"); + return; + } + } +@@ -481,7 +481,7 @@ + else if (realm->type == DIGEST) + ret = a_Digest_authorization_hdr(realm, url, request_uri); + else +- MSG("a_Auth_get_auth_str() got an unknown realm type: %i.\n", ++ MSG_WARN("a_Auth_get_auth_str() got an unknown realm type: %i.\n", + realm->type); + } + return ret; +@@ -600,12 +600,12 @@ + if (realm->qop != QOPNOTSET) + realm->cnonce = a_Digest_create_cnonce(); + if (!a_Digest_compute_digest(realm, user, password)) { +- MSG("Auth_do_auth_dialog_cb: a_Digest_compute_digest failed.\n"); ++ MSG_WARN("Auth_do_auth_dialog_cb: a_Digest_compute_digest failed.\n"); + dList_remove_fast(host->realms, realm); + Auth_realm_delete(realm); + } + } else { +- MSG("Auth_do_auth_dialog_cb: Unknown auth type: %i\n", ++ MSG_WARN("Auth_do_auth_dialog_cb: Unknown auth type: %i\n", + realm->type); + } + dStrshred((char *)password); +diff -r a50076297212 src/bw.c +--- a/src/bw.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/bw.c Fri Apr 26 22:17:38 2013 +0000 +@@ -231,7 +231,7 @@ + if (len == 1) + doc = dList_nth_data(bw->Docs, 0); + else if (len > 1) +- MSG("a_Bw_get_current_doc() multiple docs not implemented\n"); ++ MSG_WARN("a_Bw_get_current_doc() multiple docs not implemented\n"); + + return doc; + } +diff -r a50076297212 src/cache.c +--- a/src/cache.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/cache.c Fri Apr 26 22:17:38 2013 +0000 +@@ -678,8 +678,8 @@ + + if (!a_Domain_permit(entry->Url, location_url)) { + /* don't redirect; just show body like usual (if any) */ +- MSG("Redirection not followed from %s to %s\n", +- URL_HOST(entry->Url), URL_STR(location_url)); ++ MSG_INFO("Redirection not followed from %s to %s\n", ++ URL_HOST(entry->Url), URL_STR(location_url)); + a_Url_free(location_url); + } else { + entry->Flags |= CA_Redirect; +@@ -692,8 +692,8 @@ + dStrAsciiCasecmp(URL_SCHEME(location_url), "dpi") == 0 && + dStrAsciiCasecmp(URL_SCHEME(entry->Url), "dpi") != 0) { + /* Forbid dpi GET and POST from non dpi-generated urls */ +- MSG("Redirection Denied! '%s' -> '%s'\n", +- URL_STR(entry->Url), URL_STR(location_url)); ++ MSG_INFO("Redirection Denied! '%s' -> '%s'\n", ++ URL_STR(entry->Url), URL_STR(location_url)); + a_Url_free(location_url); + } else { + entry->Location = location_url; +@@ -760,7 +760,8 @@ + } + } + if (i >= dList_length(ClientQueue)) { +- MSG("Cache: cookies not accepted from '%s'\n", URL_STR(entry->Url)); ++ MSG_INFO("Cache: cookies not accepted from '%s'\n", ++ URL_STR(entry->Url)); + } + + for (i = 0; (data = dList_nth_data(Cookies, i)); ++i) +@@ -907,8 +908,8 @@ + (entry->ExpectedSize != entry->TransferSize)) { + MSG_HTTP("Content-Length does NOT match message body at\n" + "%s\n", URL_STR_(entry->Url)); +- MSG("Expected size: %d, Transfer size: %d\n", +- entry->ExpectedSize, entry->TransferSize); ++ MSG_WARN("Expected size: %d, Transfer size: %d\n", ++ entry->ExpectedSize, entry->TransferSize); + } + if (!entry->TransferSize && !(entry->Flags & CA_Redirect) && + (entry->Flags & WEB_RootUrl)) { +@@ -939,7 +940,7 @@ + } + } else if (Op == IOAbort) { + /* unused */ +- MSG("a_Cache_process_dbuf Op = IOAbort; not implemented!\n"); ++ MSG_WARN("a_Cache_process_dbuf Op = IOAbort; not implemented!\n"); + } + } + +@@ -1181,7 +1182,7 @@ + if (st == -1) { + /* MIME type is not viewable */ + if (ClientWeb->flags & WEB_RootUrl) { +- MSG("Content-Type '%s' not viewable.\n", curr_type); ++ MSG_WARN("Content-Type '%s' not viewable.\n", curr_type); + /* prepare a download offer... */ + AbortEntry = OfferDownload = TRUE; + } else { +diff -r a50076297212 src/capi.c +--- a/src/capi.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/capi.c Fri Apr 26 22:17:38 2013 +0000 +@@ -250,10 +250,10 @@ + } + + if (!allow) { +- MSG("a_Capi_dpi_verify_request: Permission Denied!\n"); +- MSG(" URL_STR : %s\n", URL_STR(url)); ++ MSG_INFO("a_Capi_dpi_verify_request: Permission Denied!\n"); ++ MSG_INFO(" URL_STR : %s\n", URL_STR(url)); + if (URL_FLAGS(url) & URL_Post) { +- MSG(" URL_DATA: %s\n", dStr_printable(URL_DATA(url), 1024)); ++ MSG_INFO(" URL_DATA: %s\n", dStr_printable(URL_DATA(url), 1024)); + } + } + return allow; +@@ -576,7 +576,7 @@ + a_Capi_ccc(OpSend, 1, BCK, conn->InfoSend, dbuf, NULL); + dFree(dbuf); + } else { +- MSG(" ERROR: [a_Capi_dpi_send_data] No open connection found\n"); ++ MSG_ERR("[a_Capi_dpi_send_data] No open connection found\n"); + } + } + +diff -r a50076297212 src/cookies.c +--- a/src/cookies.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/cookies.c Fri Apr 26 22:17:38 2013 +0000 +@@ -86,16 +86,16 @@ + if (init_str) { + rc = write(fd, init_str, strlen(init_str)); + if (rc == -1) { +- MSG("Cookies: Could not write initial string to file %s: %s\n", +- filename, dStrerror(errno)); ++ MSG_WARN("Cookies: Could not write initial string to file %s: " ++ "%s\n", filename, dStrerror(errno)); + } + } + dClose(fd); + +- MSG("Cookies: Created file: %s\n", filename); ++ MSG_INFO("Cookies: Created file: %s\n", filename); + F_in = fopen(filename, "r"); + } else { +- MSG("Cookies: Could not create file: %s!\n", filename); ++ MSG_WARN("Cookies: Could not create file: %s!\n", filename); + } + } + +@@ -258,8 +258,8 @@ + line[0] = '\0'; + rc = fgets(line, LINE_MAXLEN, stream); + if (!rc && ferror(stream)) { +- MSG("Cookies1: Error while reading rule from cookiesrc: %s\n", +- dStrerror(errno)); ++ MSG_WARN("Cookies1: Error while reading rule from cookiesrc: %s\n", ++ dStrerror(errno)); + fclose(stream); + return 2; /* bail out */ + } +@@ -292,8 +292,8 @@ + else if (dStrAsciiCasecmp(rule, "DENY") == 0) + cc.action = COOKIE_DENY; + else { +- MSG("Cookies: rule '%s' for domain '%s' is not recognised.\n", +- rule, domain); ++ MSG_WARN("Cookies: rule '%s' for domain '%s' is not recognised.\n", ++ rule, domain); + continue; + } + +diff -r a50076297212 src/css.cc +--- a/src/css.cc Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/css.cc Fri Apr 26 22:17:38 2013 +0000 +@@ -539,7 +539,8 @@ + if ((order == CSS_PRIMARY_AUTHOR || + order == CSS_PRIMARY_AUTHOR_IMPORTANT) && + !rule->isSafe ()) { +- MSG_WARN ("Ignoring unsafe author style that might reveal browsing history\n"); ++ MSG_INFO("Ignoring unsafe author style that might reveal browsing " ++ "history\n"); + delete rule; + } else { + sheet[order].addRule (rule); +diff -r a50076297212 src/cssparser.cc +--- a/src/cssparser.cc Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/cssparser.cc Fri Apr 26 22:17:38 2013 +0000 +@@ -28,7 +28,7 @@ + using namespace dw::core::style; + + #define DEBUG_MSG(A, B, ...) _MSG(B, __VA_ARGS__) +-#define MSG_CSS(A, ...) MSG(A, __VA_ARGS__) ++#define MSG_CSS(A, ...) MSG_WARN(A, __VA_ARGS__) + #define DEBUG_TOKEN_LEVEL 0 + #define DEBUG_PARSE_LEVEL 0 + #define DEBUG_CREATE_LEVEL 0 +diff -r a50076297212 src/decode.c +--- a/src/decode.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/decode.c Fri Apr 26 22:17:38 2013 +0000 +@@ -116,7 +116,7 @@ + zs->total_out = 0; + zs->total_in = 0; + } else if (rc == Z_DATA_ERROR) { +- MSG_ERR("gzip decompression error\n"); ++ MSG_WARN("gzip decompression error\n"); + } + } + return output; +@@ -235,7 +235,7 @@ + dc->free = Decode_gzip_free; + dc->leftover = NULL; /* not used */ + } else { +- MSG("Content-Encoding '%s' not recognized.\n", format); ++ MSG_WARN("Content-Encoding '%s' not recognized.\n", format); + } + } + return dc; +diff -r a50076297212 src/dicache.c +--- a/src/dicache.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/dicache.c Fri Apr 26 22:17:38 2013 +0000 +@@ -323,7 +323,7 @@ + DicEntry = a_Dicache_get_entry(url, version); + dReturn_if_fail ( DicEntry != NULL ); + if (DicEntry->State < DIC_SetParms) { +- MSG("a_Dicache_new_scan before DIC_SetParms\n"); ++ MSG_ERR("a_Dicache_new_scan before DIC_SetParms\n"); + exit(1); + } + a_Bitvec_clear(DicEntry->BitVec); +diff -r a50076297212 src/digest.c +--- a/src/digest.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/digest.c Fri Apr 26 22:17:38 2013 +0000 +@@ -74,7 +74,7 @@ + dStr_free(a0, 1); + dStr_free(ha0, 1); + } else { +- MSG("a_Digest_create_auth: Unknown algorithm.\n"); ++ MSG_WARN("a_Digest_create_auth: Unknown algorithm.\n"); + return 0; + } + +@@ -111,7 +111,7 @@ + dStr_free(hentity, 1); + dStr_free(a2, 1); + } else { +- MSG("a_Digest_create_auth: Unknown qop value.\n"); ++ MSG_WARN("a_Digest_create_auth: Unknown qop value.\n"); + return NULL; + } + result = dStr_new(NULL); +diff -r a50076297212 src/dns.c +--- a/src/dns.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/dns.c Fri Apr 26 22:17:38 2013 +0000 +@@ -300,16 +300,16 @@ + if (error != 0) { + dns_server[channel].status = error; + if (error == EAI_NONAME) +- MSG("DNS error: HOST_NOT_FOUND\n"); ++ MSG_INFO("DNS error: HOST_NOT_FOUND\n"); + else if (error == EAI_AGAIN) +- MSG("DNS error: TRY_AGAIN\n"); ++ MSG_INFO("DNS error: TRY_AGAIN\n"); + #ifdef EAI_NODATA + /* Some FreeBSD don't have this anymore */ + else if (error == EAI_NODATA) +- MSG("DNS error: NO_ADDRESS\n"); ++ MSG_INFO("DNS error: NO_ADDRESS\n"); + #endif + else if (h_errno == EAI_FAIL) +- MSG("DNS error: NO_RECOVERY\n"); ++ MSG_WARN("DNS error: NO_RECOVERY\n"); + } else { + Dns_note_hosts(hosts, res0); + dns_server[channel].status = 0; +diff -r a50076297212 src/domain.c +--- a/src/domain.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/domain.c Fri Apr 26 22:17:38 2013 +0000 +@@ -47,11 +47,11 @@ + char *tok2 = strtok(NULL, delim); + + if (strtok(NULL, delim) != NULL) { +- MSG("Domain: Ignoring extraneous text at end of line %u.\n", ++ MSG_WARN("Domain: Ignoring extraneous text at end of line %u.\n", + lineno); + } + if (!tok2) { +- MSG("Domain: Not enough fields in line %u.\n", lineno); ++ MSG_WARN("Domain: Not enough fields in line %u.\n", lineno); + } else { + if (dStrAsciiCasecmp(tok1, "default") == 0) { + if (dStrAsciiCasecmp(tok2, "deny") == 0) { +@@ -61,7 +61,8 @@ + default_deny = FALSE; + MSG("Domain: Default accept.\n"); + } else { +- MSG("Domain: Default action \"%s\" not recognised.\n", tok2); ++ MSG_WARN("Domain: Default action \"%s\" not recognised.\n", ++ tok2); + } + } else { + a_List_add(exceptions, num_exceptions, num_exceptions_max); +@@ -145,7 +146,7 @@ + } + + if (ret == FALSE) +- MSG("Domain: DENIED from %s to %s.\n", source_host, dest_host); ++ MSG_INFO("Domain: DENIED from %s to %s.\n", source_host, dest_host); + + return ret; + } +diff -r a50076297212 src/form.cc +--- a/src/form.cc Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/form.cc Fri Apr 26 22:17:38 2013 +0000 +@@ -507,13 +507,14 @@ + if (form->method != DILLO_HTML_METHOD_POST) { + valid = false; + BUG_MSG("Forms with file input MUST use HTTP POST method\n"); +- MSG("File input ignored in form not using HTTP POST method\n"); ++ MSG_INFO("File input ignored in form not using HTTP POST " ++ "method\n"); + } else if (form->content_type != DILLO_HTML_ENC_MULTIPART) { + valid = false; + BUG_MSG("Forms with file input MUST use multipart/form-data" + " encoding\n"); +- MSG("File input ignored in form not using multipart/form-data" +- " encoding\n"); ++ MSG_INFO("File input ignored in form not using multipart/form-data" ++ " encoding\n"); + } + } + if (valid) { +@@ -588,7 +589,7 @@ + const char *attrbuf; + + if (html->InFlags & IN_FORM) { +- MSG("<isindex> inside <form> not handled.\n"); ++ MSG_WARN("<isindex> inside <form> not handled.\n"); + return; + } + +@@ -1040,7 +1041,7 @@ + if (input) { + input->activate (this, num_entry_fields, event); + } else { +- MSG("DilloHtmlForm::eventHandler: ERROR, input not found!\n"); ++ MSG_ERR("DilloHtmlForm::eventHandler: input not found!\n"); + } + } + } +@@ -1120,7 +1121,7 @@ + dFree(action_str); + } + } else { +- MSG("DilloHtmlForm::buildQueryUrl: Method unknown\n"); ++ MSG_ERR("DilloHtmlForm::buildQueryUrl: Method unknown\n"); + } + + return new_url; +@@ -1811,7 +1812,7 @@ + dStr_append_l(file, file_data->str, file_data->len); + dList_append(values, file); + } else { +- MSG("FORM file input \"%s\" not loaded.\n", filename); ++ MSG_WARN("FORM file input \"%s\" not loaded.\n", filename); + } + } + } +@@ -2031,7 +2032,7 @@ + HT2TB(html)->addWidget (button, html->styleEngine->style ()); + } + if (!button) +- MSG("Html_input_image: unable to create image submit.\n"); ++ MSG_WARN("Html_input_image: unable to create image submit.\n"); + return button; + } + +diff -r a50076297212 src/gif.c +--- a/src/gif.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/gif.c Fri Apr 26 22:17:38 2013 +0000 +@@ -681,7 +681,7 @@ + case 2: /* End code... consume remaining data chunks..? */ + goto error; /* Could clean up better? */ + default: +- MSG("Gif_decode: error!\n"); ++ MSG_WARN("Gif_decode: error!\n"); + goto error; + } + } +@@ -808,8 +808,8 @@ + /* check max image size */ + if (gif->Width <= 0 || gif->Height <= 0 || + gif->Width > IMAGE_MAX_AREA / gif->Height) { +- MSG("Gif_do_img_desc: suspicious image size request %u x %u\n", +- gif->Width, gif->Height); ++ MSG_WARN("Gif_do_img_desc: suspicious image size request %u x %u\n", ++ gif->Width, gif->Height); + gif->state = 999; + return 0; + } +@@ -935,7 +935,7 @@ + + default: /* Unknown */ + /* gripe and complain */ +- MSG ("gif.c::GIF_Block: Error, 0x%x found\n", *(buf-1)); ++ MSG_WARN ("gif.c::GIF_Block: Error, 0x%x found\n", *(buf-1)); + gif->state = 999; + return Size + 1; + } +diff -r a50076297212 src/html.cc +--- a/src/html.cc Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/html.cc Fri Apr 26 22:17:38 2013 +0000 +@@ -2003,7 +2003,8 @@ + dFree(width_ptr); + dFree(height_ptr); + width_ptr = height_ptr = NULL; +- MSG("a_Html_image_attrs: suspicious image size request %d x %d\n", w, h); ++ MSG_WARN("a_Html_image_attrs: suspicious image size request %d x %d\n", ++ w, h); + } else { + if (CSS_LENGTH_TYPE(l_w) != CSS_LENGTH_TYPE_AUTO) + html->styleEngine->setNonCssHint (CSS_PROPERTY_WIDTH, +diff -r a50076297212 src/jpeg.c +--- a/src/jpeg.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/jpeg.c Fri Apr 26 22:17:38 2013 +0000 +@@ -292,9 +292,9 @@ + if (jpeg->cinfo.image_width <= 0 || jpeg->cinfo.image_height <= 0 || + jpeg->cinfo.image_width > + IMAGE_MAX_AREA / jpeg->cinfo.image_height) { +- MSG("Jpeg_write: suspicious image size request %u x %u\n", +- (uint_t)jpeg->cinfo.image_width, +- (uint_t)jpeg->cinfo.image_height); ++ MSG_WARN("Jpeg_write: suspicious image size request %u x %u\n", ++ (uint_t)jpeg->cinfo.image_width, ++ (uint_t)jpeg->cinfo.image_height); + jpeg->state = DILLO_JPEG_ERROR; + return; + } +diff -r a50076297212 src/keys.cc +--- a/src/keys.cc Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/keys.cc Fri Apr 26 22:17:38 2013 +0000 +@@ -315,7 +315,7 @@ + + // Get command code + if ((symcode = getCmdCode(commandName)) == KEYS_INVALID) { +- MSG("Keys::parseKey: Invalid command name: '%s'\n", commandName); ++ MSG_WARN("Keys::parseKey: Invalid command name: '%s'\n", commandName); + return; + } + +@@ -326,7 +326,7 @@ + ++key; + modstr = dStrndup(key, p - key); + if ((st = getModifier(modstr)) == -1) { +- MSG("Keys::parseKey unknown modifier: %s\n", modstr); ++ MSG_WARN("Keys::parseKey unknown modifier: %s\n", modstr); + } else { + keymod |= st; + } +@@ -346,7 +346,7 @@ + /* keysym */ + keycode = strtol(key, NULL, 0x10); + } else if ((st = getKeyCode(keystr)) == -1) { +- MSG("Keys::parseKey unknown keyname: %s\n", keystr); ++ MSG_WARN("Keys::parseKey unknown keyname: %s\n", keystr); + } else { + keycode = st; + } +@@ -383,8 +383,8 @@ + _MSG("Keys::parse: keycomb=%s, command=%s\n", keycomb, command); + parseKey(keycomb, command); + } else if (st < 0) { +- MSG("Keys::parse: Syntax error in keysrc line %d: " +- "keycomb=\"%s\" command=\"%s\"\n", lineno, keycomb, command); ++ MSG_WARN("Keys::parse: Syntax error in keysrc line %d: " ++ "keycomb=\"%s\" command=\"%s\"\n", lineno, keycomb, command); + } + + dFree(line); +diff -r a50076297212 src/misc.c +--- a/src/misc.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/misc.c Fri Apr 26 22:17:38 2013 +0000 +@@ -413,7 +413,7 @@ + } + *label = buf; + if (ret == -1) +- MSG("Invalid search_url: \"%s\"\n", source); ++ MSG_WARN("Invalid search_url: \"%s\"\n", source); + return ret; + } + +diff -r a50076297212 src/msg.h +--- a/src/msg.h Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/msg.h Fri Apr 26 22:17:38 2013 +0000 +@@ -8,20 +8,22 @@ + * You can disable any MSG* macro by adding the '_' prefix. + */ + #define _MSG(...) ++#define _MSG_INFO(...) + #define _MSG_WARN(...) + #define _MSG_HTTP(...) + +-#define MSG_INNARDS(prefix, ...) \ +- D_STMT_START { \ +- if (prefs.show_msg){ \ +- printf(prefix __VA_ARGS__); \ +- fflush (stdout); \ +- } \ ++#define MSG_INNARDS(level, prefix, ...) \ ++ D_STMT_START { \ ++ if (prefs.show_msg && level >= prefs.msg_level_min){ \ ++ printf(prefix __VA_ARGS__); \ ++ fflush (stdout); \ ++ } \ + } D_STMT_END + +-#define MSG(...) MSG_INNARDS("", __VA_ARGS__) +-#define MSG_WARN(...) MSG_INNARDS("** WARNING **: ", __VA_ARGS__) +-#define MSG_ERR(...) MSG_INNARDS("** ERROR **: ", __VA_ARGS__) +-#define MSG_HTTP(...) MSG_INNARDS("HTTP warning: ", __VA_ARGS__) ++#define MSG(...) MSG_INNARDS(1, "", __VA_ARGS__) ++#define MSG_INFO(...) MSG_INNARDS(2, "", __VA_ARGS__) ++#define MSG_WARN(...) MSG_INNARDS(3, "** WARNING **: ", __VA_ARGS__) ++#define MSG_ERR(...) MSG_INNARDS(4, "** ERROR **: ", __VA_ARGS__) ++#define MSG_HTTP(...) MSG_INNARDS(3, "HTTP warning: ", __VA_ARGS__) + + #endif /* __MSG_H__ */ +diff -r a50076297212 src/paths.cc +--- a/src/paths.cc Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/paths.cc Fri Apr 26 22:17:38 2013 +0000 +@@ -38,20 +38,20 @@ + oldWorkingDir = dGetcwd(); + rc = chdir("/tmp"); + if (rc == -1) { +- MSG("paths: error changing directory to /tmp: %s\n", +- dStrerror(errno)); ++ MSG_WARN("paths: error changing directory to /tmp: %s\n", ++ dStrerror(errno)); + } + + path = dStrconcat(dGethomedir(), "/.dillo", NULL); + if (stat(path, &st) == -1) { + if (errno == ENOENT) { +- MSG("paths: creating directory %s.\n", path); ++ MSG_INFO("paths: creating directory %s.\n", path); + if (mkdir(path, 0700) < 0) { +- MSG("paths: error creating directory %s: %s\n", +- path, dStrerror(errno)); ++ MSG_WARN("paths: error creating directory %s: %s\n", ++ path, dStrerror(errno)); + } + } else { +- MSG("Dillo: error reading %s: %s\n", path, dStrerror(errno)); ++ MSG_WARN("Dillo: error reading %s: %s\n", path, dStrerror(errno)); + } + } + +@@ -83,14 +83,14 @@ + char *path = dStrconcat(dGethomedir(), "/.dillo/", rcFile, NULL); + + if (!(fp = fopen(path, "r"))) { +- MSG("paths: Cannot open file '%s': %s\n", path, dStrerror(errno)); ++ MSG_INFO("paths: Cannot open file '%s': %s\n", path, dStrerror(errno)); + + char *path2 = dStrconcat(DILLO_SYSCONF, rcFile, NULL); + if (!(fp = fopen(path2, "r"))) { +- MSG("paths: Cannot open file '%s': %s\n", path2, dStrerror(errno)); +- MSG("paths: Using internal defaults...\n"); ++ MSG_INFO("paths: Cannot open file '%s': %s\n",path2,dStrerror(errno)); ++ MSG_INFO("paths: Using internal defaults...\n"); + } else { +- MSG("paths: Using %s\n", path2); ++ MSG_INFO("paths: Using %s\n", path2); + } + dFree(path2); + } +diff -r a50076297212 src/png.c +--- a/src/png.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/png.c Fri Apr 26 22:17:38 2013 +0000 +@@ -102,7 +102,7 @@ + { + DilloPng *png; + +- MSG("Png_error_handling: %s\n", msg); ++ MSG_WARN("Png_error_handling: %s\n", msg); + png = png_get_error_ptr(png_ptr); + + png->error = 1; +@@ -132,8 +132,8 @@ + /* check max image size */ + if (png->width == 0 || png->height == 0 || + png->width > IMAGE_MAX_AREA / png->height) { +- MSG("Png_datainfo_callback: suspicious image size request %lu x %lu\n", +- (ulong_t) png->width, (ulong_t) png->height); ++ MSG_WARN("Png_datainfo_callback: suspicious image size request " ++ "%lu x %lu\n", (ulong_t) png->width, (ulong_t) png->height); + Png_error_handling(png_ptr, "Aborting..."); + return; /* not reached */ + } +@@ -272,8 +272,8 @@ + break; + } + default: +- MSG("Png_datarow_callback: unexpected number of channels=%d pass=%d\n", +- png->channels, pass); ++ MSG_ERR("Png_datarow_callback: unexpected number of channels=%d " ++ "pass=%d\n", png->channels, pass); + abort(); + } + } +@@ -284,7 +284,7 @@ + + _MSG("Png_dataend_callback:\n"); + if (!info_ptr) +- MSG("Png_dataend_callback: info_ptr = NULL\n"); ++ MSG_WARN("Png_dataend_callback: info_ptr = NULL\n"); + + png = png_get_progressive_ptr(png_ptr); + png->state = IS_finished; +diff -r a50076297212 src/prefs.c +--- a/src/prefs.c Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/prefs.c Fri Apr 26 22:17:38 2013 +0000 +@@ -68,6 +68,7 @@ + prefs.limit_text_width = FALSE; + prefs.load_images=TRUE; + prefs.load_stylesheets=TRUE; ++ prefs.msg_level_min = 2; + prefs.middle_click_drags_page = TRUE; + prefs.middle_click_opens_new_tab = TRUE; + prefs.right_click_closes_tab = FALSE; +diff -r a50076297212 src/prefs.h +--- a/src/prefs.h Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/prefs.h Fri Apr 26 22:17:38 2013 +0000 +@@ -99,6 +99,7 @@ + bool_t search_url_idx; + Dlist *search_urls; + char *save_dir; ++ int msg_level_min; + bool_t show_msg; + bool_t show_extra_warnings; + bool_t middle_click_drags_page; +diff -r a50076297212 src/prefsparser.cc +--- a/src/prefsparser.cc Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/prefsparser.cc Fri Apr 26 22:17:38 2013 +0000 +@@ -83,6 +83,7 @@ + PREFS_BOOL }, + { "middle_click_opens_new_tab", &prefs.middle_click_opens_new_tab, + PREFS_BOOL }, ++ { "msg_level_min", &prefs.msg_level_min, PREFS_INT32 }, + { "right_click_closes_tab", &prefs.right_click_closes_tab, PREFS_BOOL }, + { "no_proxy", &prefs.no_proxy, PREFS_STRING }, + { "panel_size", &prefs.panel_size, PREFS_PANEL_SIZE }, +@@ -139,7 +140,7 @@ + } + + if (!node) { +- MSG("prefs: {%s} is not a recognized token.\n", name); ++ MSG_WARN("prefs: {%s} is not a recognized token.\n", name); + return -1; + } + +@@ -151,7 +152,7 @@ + case PREFS_COLOR: + *(int32_t *)node->pref = a_Color_parse(value, *(int32_t*)node->pref,&st); + if (st == 1) +- MSG("prefs: Color '%s' not recognized.\n", value); ++ MSG_WARN("prefs: Color '%s' not recognized.\n", value); + break; + case PREFS_STRING: + dFree(*(char **)node->pref); +@@ -232,8 +233,8 @@ + _MSG("prefsparser: name=%s, value=%s\n", name, value); + parseOption(name, value); + } else if (st < 0) { +- MSG_ERR("prefsparser: Syntax error in dillorc:" +- " name=\"%s\" value=\"%s\"\n", name, value); ++ MSG_WARN("prefsparser: Syntax error in dillorc:" ++ " name=\"%s\" value=\"%s\"\n", name, value); + } + + dFree(line); +diff -r a50076297212 src/ui.cc +--- a/src/ui.cc Fri Apr 26 16:42:23 2013 +0000 ++++ b/src/ui.cc Fri Apr 26 22:17:38 2013 +0000 +@@ -243,8 +243,8 @@ + a_UIcmd_open_urlstr(bw, urlstr); + dFree(urlstr); + } else { +- MSG("Can't read local help file at \"%s\"." +- " Getting remote help...\n", path); ++ MSG_INFO("Can't read local help file at \"%s\"." ++ " Getting remote help...\n", path); + a_UIcmd_open_urlstr(bw, "http://www.dillo.org/dillo3-help.html"); + } + dFree(path); diff --git a/old/test/msqldoc.tgz b/old/test/msqldoc.tgz Binary files differnew file mode 100644 index 0000000..28dc7b3 --- /dev/null +++ b/old/test/msqldoc.tgz diff --git a/old/test/norow.html b/old/test/norow.html new file mode 100644 index 0000000..ccf1edb --- /dev/null +++ b/old/test/norow.html @@ -0,0 +1,12 @@ +<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> +<html> +<head><title>cell with no row</title> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8" > +</head> +<body> +<table> + <td>cell +</table> +</body> +</html> + diff --git a/old/test/ph1.png b/old/test/ph1.png Binary files differnew file mode 100644 index 0000000..945775e --- /dev/null +++ b/old/test/ph1.png diff --git a/old/test/ph2.png b/old/test/ph2.png Binary files differnew file mode 100644 index 0000000..4b4f290 --- /dev/null +++ b/old/test/ph2.png diff --git a/old/test/public_suffix.diff b/old/test/public_suffix.diff new file mode 100644 index 0000000..fbe7950 --- /dev/null +++ b/old/test/public_suffix.diff @@ -0,0 +1,341 @@ +Just making a backup. I just started testing and it appears to be +functioning, but it hasn't been cleaned up or anything yet. + +diff -r 96f19eb5687f dpi/cookies.c +--- a/dpi/cookies.c Fri Jan 15 19:23:04 2010 +0000 ++++ b/dpi/cookies.c Sat Jan 16 02:38:26 2010 +0000 +@@ -100,6 +100,13 @@ + Dlist *dlist; + } CookieNode; + ++/* TODO Probably combine these two using "key" */ ++ ++typedef struct { ++ char *tld; ++ Dlist *list; ++} CookieSuffixNode; ++ + typedef struct { + char *name; + char *value; +@@ -112,6 +119,12 @@ + } CookieData_t; + + typedef struct { ++ bool_t exception; ++ bool_t wildcard; ++ char *name; ++} CookiesPSRule; ++ ++typedef struct { + Dsh *sh; + int status; + } ClientInfo; +@@ -137,6 +150,8 @@ + "# This is a generated file! Do not edit.\n" + "# [domain TRUE path secure expiry_time name value]\n\n"; + ++static Dlist *Cookies_public_suffixes; ++static char *Cookies_public_suffix_filename; + + /* + * Forward declarations +@@ -157,6 +172,13 @@ + return dStrcasecmp(n1->domain, n2->domain); + } + ++static int Cookies_suffix_node_cmp(const void *v1, const void *v2) ++{ ++ const CookieSuffixNode *n1 = v1, *n2 = v2; ++ ++ return dStrcasecmp(n1->tld, n2->tld); ++} ++ + /* + * Compare function for searching a cookie node by domain + */ +@@ -168,6 +190,14 @@ + return dStrcasecmp(node->domain, domain); + } + ++static int Cookies_suffix_node_by_tld_cmp(const void *v1, const void *v2) ++{ ++ const CookieSuffixNode *node = v1; ++ const char *tld = v2; ++ ++ return dStrcasecmp(node->tld, tld); ++} ++ + /* + * Return a file pointer. If the file doesn't exist, try to create it, + * with the optional 'init_str' as its content. +@@ -215,6 +245,107 @@ + dFree(cookie); + } + ++static char *Cookies_get_tld(const char *host) ++{ ++ char *tld; ++ uint_t after, start; ++ ++ if (host) { ++ after = strlen(host); ++ if (after > 0 && host[after - 1] == '.') ++ after--; ++ start = after; ++ while (start > 0 && host[start - 1] != '.') ++ start--; ++ tld = dStrndup(host + start, after - start); ++ } else { ++ tld = dStrdup(""); ++ } ++ return tld; ++} ++ ++static void Cookies_get_public_suffix_list() ++{ ++ FILE *stream; ++ char line[LINE_MAXLEN]; ++ int rule_count = 0; ++ ++ dReturn_if_fail(Cookies_public_suffix_filename); ++ ++ if (!(stream = fopen(Cookies_public_suffix_filename, "r"))) { ++ MSG("Cannot read public suffix list \"%s\"\n", ++ Cookies_public_suffix_filename); ++ return; ++ } ++ MSG("Reading public suffix list \"%s\"\n", Cookies_public_suffix_filename); ++ ++ while (!feof(stream)) { ++ line[0] = '\0'; ++ if (!fgets(line, LINE_MAXLEN, stream) && ferror(stream)) { ++ MSG("Error while reading public suffix file \"%s\": %s\n", ++ Cookies_public_suffix_filename, dStrerror(errno)); ++ break; /* bail out */ ++ } ++ ++ /* Remove leading and trailing whitespaces */ ++ dStrstrip(line); ++ ++ if (!*line || (line[0] == '/' && line[1] == '/')) ++ continue; ++ ++ CookieSuffixNode *tld_node; ++ CookiesPSRule *rule; ++ char *suffix; ++ char *tld = Cookies_get_tld(line); ++ ++ if (rule_count++ == 0) ++ Cookies_public_suffixes = dList_new(250); ++ ++ tld_node = dList_find_sorted(Cookies_public_suffixes, tld, ++ Cookies_suffix_node_by_tld_cmp); ++ if (!tld_node) { ++ tld_node = dNew(CookieSuffixNode, 1); ++ tld_node->tld = tld; ++ tld_node->list = dList_new(5); ++ dList_insert_sorted(Cookies_public_suffixes, tld_node, ++ Cookies_suffix_node_cmp); ++ } else { ++ dFree(tld); ++ } ++ rule = dNew0(CookiesPSRule, 1); ++ suffix = line; ++ if (*suffix == '!') { ++ rule->exception = TRUE; ++ suffix++; ++ } ++ if (*suffix == '*') { ++ rule->wildcard = TRUE; ++ suffix++; ++ if (*suffix != '.') ++ MSG("WARNING: Dillo assumes that . follows * (rule \"%s\")\n", ++ line); ++ if (strchr(suffix, '*')) ++ MSG("WARNING: Dillo assumes only one * (rule \"%s\")\n", line); ++ } ++ ++ rule->name = dStrdup(suffix); ++ ++ dList_append(tld_node->list, rule); ++ } ++ ++ if (feof(stream)) { ++ /* all is well */ ++ ++ /* TODO We should consider a file with suspiciously few rules to be an ++ * error case as well. ++ */ ++ MSG("%d rules read from public suffix list\n", rule_count); ++ } else { ++ /* TODO Tear down what we've built. */ ++ } ++ fclose(stream); ++} ++ + /* + * Initialize the cookies module + * (The 'disabled' variable is writeable only within Cookies_init) +@@ -331,6 +462,7 @@ + Cookies_add_cookie(cookie); + } + } ++ Cookies_get_public_suffix_list(); + } + + /* +@@ -873,6 +1005,67 @@ + } + } + ++static bool_t Cookies_is_public_suffix(const char *d) ++{ ++ char *tld, *domain; ++ uint_t domain_len; ++ CookieSuffixNode *node; ++ int i; ++ bool_t ret; ++ ++ dReturn_val_if_fail(d, TRUE); ++ ++ domain = dStrdup(*d == '.' ? d + 1 : d); ++ domain_len = strlen(domain); ++ if (domain_len && domain[domain_len - 1] == '.') ++ domain[--domain_len] = '\0'; ++ ++ tld = Cookies_get_tld(domain); ++ node = dList_find_sorted(Cookies_public_suffixes, tld, ++ Cookies_suffix_node_by_tld_cmp); ++ dFree(tld); ++ ++ if (!node) { ++ /* Perhaps we could use the dots-counting code in this case */ ++ MSG("Warning: unrecognised tld \"%s\"\n", tld); ++ dFree(domain); ++ return TRUE; ++ } ++ ++ ret = FALSE; ++ ++ for (i = 0; i < dList_length(node->list); i++) { ++ const CookiesPSRule *rule = dList_nth_data(node->list, i); ++ ++ /* BUG: We have to learn to handle punycode, unfortunately, since the ++ * stupid list insists upon having non-ascii domains. If it's possible, ++ * I'd like to put de-punycoded rules in the list. ++ */ ++ if (!dStrcasecmp(domain, rule->name)) { ++ if (rule->exception) { ++ ret = FALSE; ++ MSG("Public suffix specifically allows %s\n", rule->name); ++ break; ++ } else { ++ ret = TRUE; ++ MSG("Public suffix has a rule to disallow %s\n", rule->name); ++ } ++ } else if (rule->wildcard) { ++ uint_t rule_len = strlen(rule->name); ++ ++ if (domain_len > rule_len && ++ !dStrcasecmp(domain + domain_len - rule_len, rule->name) && ++ strchr(domain, '.') >= domain + domain_len - rule_len) { ++ ret = TRUE; ++ MSG("Public suffix has a wildcard rule to disallow *%s\n", ++ rule->name); ++ } ++ } ++ } ++ dFree(domain); ++ return ret; ++} ++ + /* + * Based on the host, how many internal dots do we need in a cookie domain + * to make it valid? e.g., "org" is not on the list, so dillo.org is a safe +@@ -887,20 +1080,9 @@ + uint_t ret = 1; + + if (host) { +- int start, after, tld_len; ++ char *tld = Cookies_get_tld(host); + +- /* We may be able to trust the format of the host string more than +- * I am here. Trailing dots and no dots are real possibilities, though. +- */ +- after = strlen(host); +- if (after > 0 && host[after - 1] == '.') +- after--; +- start = after; +- while (start > 0 && host[start - 1] != '.') +- start--; +- tld_len = after - start; +- +- if (tld_len > 0) { ++ if (*tld) { + /* These TLDs were chosen by examining the current publicsuffix list + * in January 2010 and picking out those where it was simplest for + * them to describe the situation by beginning with a "*.[tld]" rule. +@@ -914,14 +1096,14 @@ + uint_t i, tld_num = sizeof(tlds) / sizeof(tlds[0]); + + for (i = 0; i < tld_num; i++) { +- if (strlen(tlds[i]) == (uint_t) tld_len && +- !dStrncasecmp(tlds[i], host + start, tld_len)) { +- MSG("TLD code matched %s\n", tlds[i]); ++ if (!dStrcasecmp(tlds[i], tld)) { ++ MSG("TLD code matched %s\n", tld); + ret++; + break; + } + } + } ++ dFree(tld); + } + return ret; + } +@@ -947,18 +1129,21 @@ + if (!Cookies_domain_matches(host, cookie->domain)) + return FALSE; + +- internal_dots = 0; +- for (i = 1; i < strlen(cookie->domain) - 1; i++) { +- if (cookie->domain[i] == '.') +- internal_dots++; +- } ++ if (Cookies_public_suffixes) { ++ if (Cookies_is_public_suffix(cookie->domain)) ++ return FALSE; ++ } else { ++ /* fall back on our dot-counting heuristics */ ++ internal_dots = 0; ++ for (i = 1; i < strlen(cookie->domain) - 1; i++) { ++ if (cookie->domain[i] == '.') ++ internal_dots++; ++ } + +- /* All of this dots business is a weak hack. +- * TODO: accept the publicsuffix.org list as an optional external file. +- */ +- if (internal_dots < Cookies_internal_dots_required(host)) { +- MSG("not enough dots in %s\n", cookie->domain); +- return FALSE; ++ if (internal_dots < Cookies_internal_dots_required(host)) { ++ MSG("not enough dots in %s\n", cookie->domain); ++ return FALSE; ++ } + } + + MSG("host %s and domain %s is all right\n", host, cookie->domain); +@@ -1187,6 +1372,11 @@ + rule[j++] = line[i++]; + rule[j] = '\0'; + ++ if (!dStrcasecmp(domain, "public_suffix_file")) { ++ Cookies_public_suffix_filename = dStrdup(rule); ++ continue; ++ } ++ + if (dStrcasecmp(rule, "ACCEPT") == 0) + cc.action = COOKIE_ACCEPT; + else if (dStrcasecmp(rule, "ACCEPT_SESSION") == 0) diff --git a/old/test/redraws.html b/old/test/redraws.html new file mode 100644 index 0000000..780b3c7 --- /dev/null +++ b/old/test/redraws.html @@ -0,0 +1,67 @@ +<head> +<style id=gstyle>body{color:#000;margin:3px 0}body,#leftnav,#tbdi,#hidden_modes,#hmp{background:#fff}#gb{font:13px/27px Arial,sans-serif;height:30px}#gbz,#gbg{position:absolute;white-space:nowrap;top:0;height:30px;z-index:1000}#gbz{left:0;padding-left:4px}#gbg{right:0;padding-right:5px}#gbs{background:#fff;left:0;position:absolute;visibility:hidden;z-index:998}#gbx3,#gbx4{background-color:#2d2d2d;background-image:none;_background-image:none;background-position:0 -138px;background-repeat:repeat-x;border-bottom:1px solid #000;font-size:24px;height:29px;_height:30px;opacity:1;filter:alpha(opacity=100);position:absolute;top:0;width:100%;z-index:990}#gbx3{left:0}#gbx4{right:0}.gbtcb{position:absolute;visibility:hidden}#gbz .gbtcb{right:0}#gbg .gbtcb{left:0}.gbxx{display:none !important}.gbm{position:absolute;z-index:999;top:-999px;visibility:hidden;text-align:left;border:1px solid #bebebe;background:#fff;-moz-box-shadow:-1px 1px 1px #ccc;-webkit-box-shadow:0 1px 5px #ccc;box-shadow:0 1px 5px #ccc}.gbrtl .gbm{-moz-box-shadow:1px 1px 1px #ccc}.gbto .gbm{visibility:visible;top:29px!important}#gbs{top:29px!important}#gbz .gbm{left:0}#gbg .gbm{right:0}.gbxms{background-color:#ccc;display:block;position:absolute;z-index:1;top:-1px;left:-2px;right:-2px;bottom:-2px;opacity:.4;-moz-border-radius:3px;filter:progid:DXImageTransform.Microsoft.Blur(pixelradius=5);*opacity:1;*top:-2px;*left:-5px;*right:5px;*bottom:4px;-ms-filter:"progid:DXImageTransform.Microsoft.Blur(pixelradius=5)";opacity:1\0/;top:-4px\0/;left:-6px\0/;right:5px\0/;bottom:4px\0/}.gbma{position:relative;top:-1px;border-style:solid dashed dashed;border-color:transparent;border-top-color:#c0c0c0;display:-moz-inline-box;display:inline-block;font-size:0;height:0;line-height:0;width:0;border-width:3px 3px 0;padding-top:1px;left:4px}#gbztms1,#gbi4m1,#gbi4s,#gbi4t{zoom:1}.gbtc,.gbmc,.gbmcc{display:block;list-style:none;margin:0;padding:0}.gbmc{background:#fff;padding:10px 0;position:relative;z-index:2;zoom:1}.gbt{position:relative;display:-moz-inline-box;display:inline-block;line-height:27px;padding:0;vertical-align:top}.gbt{*display:inline}.gbto{box-shadow:0 1px 5px #ccc;-moz-box-shadow:0 1px 5px #ccc;-webkit-box-shadow:0 1px 5px #ccc}.gbzt,.gbgt{cursor:pointer;display:block;text-decoration:none !important}.gbts{border-left:1px solid transparent;border-right:1px solid transparent;display:block;*display:inline-block;padding:0 5px;position:relative;z-index:1000}.gbts{*display:inline}.gbto .gbts{background:#fff;border-color:#bebebe;color:#36c;padding-bottom:1px;padding-top:2px}.gbz0l .gbts{color:#fff;font-weight:bold}.gbtsa{padding-right:9px}#gbz .gbzt,#gbz .gbgt,#gbg .gbgt{color:#ccc!important}.gbtb2{display:block;border-top:2px solid transparent}.gbto .gbzt .gbtb2,.gbto .gbgt .gbtb2{border-top-width:0}.gbtb .gbts{background:url(https://ssl.gstatic.com/gb/images/b_8d5afc09.png);_background:url(https://ssl.gstatic.com/gb/images/b8_3615d64d.png);background-position:-27px -22px;border:0;font-size:0;padding:29px 0 0;*padding:27px 0 0;width:1px}.gbzt-hvr,.gbzt:focus,.gbgt-hvr,.gbgt:focus{background-color:#4c4c4c;background-image:none;_background-image:none;background-position:0 -102px;background-repeat:repeat-x;outline:none;text-decoration:none !important}.gbpdjs .gbto .gbm{min-width:99%}.gbz0l .gbtb2{border-top-color:#dd4b39!important}#gbi4s,#gbi4s1{font-weight:bold}#gbg6.gbgt-hvr,#gbg6.gbgt:focus{background-color:transparent;background-image:none}.gbg4a{font-size:0;line-height:0}.gbg4a .gbts{padding:27px 5px 0;*padding:25px 5px 0}.gbto .gbg4a .gbts{padding:29px 5px 1px;*padding:27px 5px 1px}#gbi4i,#gbi4id{left:5px;border:0;height:24px;position:absolute;top:1px;width:24px}.gbto #gbi4i,.gbto #gbi4id{top:3px}.gbi4p{display:block;width:24px}#gbi4id,#gbmpid{background:url(https://ssl.gstatic.com/gb/images/b_8d5afc09.png);_background:url(https://ssl.gstatic.com/gb/images/b8_3615d64d.png)}#gbi4id{background-position:-29px -54px}#gbmpid{background-position:-58px 0px}#gbmpi,#gbmpid{border:none;display:inline-block;margin:10px 20px;height:48px;width:48px}#gbmpi,#gbmpid{*display:inline}#gbg5{font-size:0}#gbgs5{padding:5px !important}.gbto #gbgs5{padding:7px 5px 6px !important}#gbi5{background:url(https://ssl.gstatic.com/gb/images/b_8d5afc09.png);_background:url(https://ssl.gstatic.com/gb/images/b8_3615d64d.png);background-position:0 0;display:block;font-size:0;height:17px;width:16px}.gbto #gbi5{background-position:-6px -22px}#gbgf .gbmt,.gbn .gbmt,.gbn .gbmt:visited,.gbnd .gbmt,.gbnd .gbmt:visited{color:#dd8e27 !important}.gbf .gbmt,.gbf .gbmt:visited{color:#900 !important}.gbmt,.gbml1,.gbmt:visited,.gbml1:visited{color:#36c !important;display:block;text-decoration:none !important}.gbml1{display:inline-block;margin:0 10px;padding:0 10px}.gbml1{*display:inline}.gbml1-hvr,.gbml1:focus{background:#eff3fb;outline:none}#gbpm .gbml1{display:inline;margin:0;padding:0;white-space:nowrap}#gbpm .gbml1-hvr,#gbpm .gbml1:focus{background:none;text-decoration:underline !important}.gbmt{padding:0 20px}.gbmt-hvr,.gbmt:focus{background:#eff3fb;cursor:pointer;outline:0 solid black;text-decoration:none !important}.gbm0l,.gbm0l:visited{color:#000 !important;font-weight:bold}.gbmh{border-top:1px solid #e5e5e5;font-size:0;margin:10px 0}#gbd4 .gbmh{margin:0}.gbmtc{padding:0;margin:0;line-height:27px}.GBMCC:last-child:after,#GBMPAL:last-child:after{content:'\0A\0A';white-space:pre;position:absolute}#gbd4 .gbpc,#gbmpas .gbmt{line-height:17px}#gbd4 .gbpgs .gbmtc{line-height:27px}#gbmpas .gbmt{padding-bottom:10px;padding-top:10px}#gbmple .gbmt,#gbmpas .gbmt{font-size:15px}#gbd4 .gbpc{display:inline-block;margin:6px 0 10px;margin-right:50px;vertical-align:top}#gbd4 .gbpc{*display:inline}.gbpc .gbps,.gbpc .gbps2{display:block;margin:0 20px}#gbmplp.gbps{margin:0 10px}.gbpc .gbps{color:#000;font-weight:bold}.gbpc .gbps2{font-size:13px}.gbpc .gbpd{margin-bottom:5px}.gbpd .gbmt,.gbmpmtd .gbmt{color:#666 !important}.gbmpme,.gbps2{color:#666;display:block;font-size:11px}.gbp0 .gbps2,.gbmpmta .gbmpme{font-weight:bold}#gbmpp{display:none}#gbd4 .gbmcc{margin-top:5px}.gbpmc{background:#edfeea}.gbpmc .gbmt{padding:10px 20px}#gbpm{*border-collapse:collapse;border-spacing:0;margin:0;white-space:normal}#gbpm .gbmt{border-top:none;color:#666 !important;font:11px Arial,sans-serif}#gbpms{*white-space:nowrap}.gbpms2{font-weight:bold;white-space:nowrap}#gbmpal{*border-collapse:collapse;border-spacing:0;margin:0;white-space:nowrap}.gbmpala,.gbmpalb{font:13px Arial,sans-serif;line-height:27px;padding:10px 20px 0;white-space:nowrap}.gbmpala{padding-left:0;text-align:left}.gbmpalb{padding-right:0;text-align:right}.gbp0 .gbps,.gbmpmta .gbmpmn{color:#000;display:inline-block;font-weight:bold;padding-right:34px;position:relative}.gbp0 .gbps,.gbmpmta .gbmpmn{*display:inline}.gbmpmtc,.gbp0i{background:url(https://ssl.gstatic.com/gb/images/b_8d5afc09.png);_background:url(https://ssl.gstatic.com/gb/images/b8_3615d64d.png);background-position:0 -54px;position:absolute;height:21px;width:24px;right:0;top:-3px}a.gb1,a.gb2,a.gb3,.link{color:#2200C1!important}.ts{border-collapse:collapse}.ts td{padding:0}.ti,.bl,#res h3{display:inline}.ti{display:inline-table}#tads a.mblink,#tads a.mblink b,#tadsto a.mblink,#tadsto a.mblink b,#rhs a.mblink,#rhs a.mblink b{color:#2200C1!important}#tads .ch,#tadsto .ch,#rhs .ch{margin-top:5px;}a:link,.w,#prs a:visited,#prs a:active,.q:active,.q:visited,.kl:active{color:#2200C1}.mblink:visited,a:visited{color:#551a8b}.vst:link{color:#551a8b}.cur,.b{font-weight:bold}.j{width:42em;font-size:82%}.s{max-width:42em}.sl{font-size:82%}.hd{position:absolute;width:1px;height:1px;top:-1000em;overflow:hidden}.f,.f a:link,.m,.c h2,#mbEnd h2,#tads h2,#tadsto h2,.descbox{color:#666}.a,cite,cite a:link,cite a:visited,.cite,.cite:link,#mbEnd cite b,#tads cite b,#tadsto cite b,#ans>i,.bc a:link{color:#0e774a;font-style:normal}.ng{color:#c11}h1,ol,ul,li{margin:0;padding:0}li.g,body,html,.std,.c h2,#mbEnd h2,h1{font-size:small;font-family:arial,sans-serif}.c h2,#mbEnd h2,h1{font-weight:normal}.clr{clear:both;margin:0 8px}.blk a{color:#000}#nav a{display:block}#nav .i{color:#a90a08;font-weight:bold}.csb,.ss,.play_icon,.mini_play_icon,.micon,.licon,.close_btn,#tbp,.mbi,.inline_close_btn{background:url(https://www.dillo.org/images/nav_logo83.png) no-repeat;overflow:hidden}.csb,.ss{background-position:0 0;height:40px;display:block}.ss{background-position:0 -91px;position:absolute;left:0;top:0}.cps{height:18px;overflow:hidden;width:114px}.mbi{background-position:-153px -70px;display:inline-block;float:left;height:13px;margin-right:3px;margin-top:1px;width:13px}#nav td{padding:0;text-align:center}.ch{cursor:pointer}h3,.med{font-size:medium;font-weight:normal;padding:0;margin:0}.e{margin:2px 0 .75em}.slk div{padding-left:12px;text-indent:-10px}.fc{margin-top:.5em;padding-left:16px}#mbEnd cite{text-align:left}#rhs_block{margin-bottom:-20px}#bsf,.blk{border-top:1px solid #6b90da;background:#f0f7f9}#bsf{border-bottom:1px solid #6b90da}#cnt{clear:both}#res{padding-right:1em;margin:0 16px}.c{background:#fff8e7;margin:0 8px}.c li{padding:0 3px 0 8px;margin:0}#mbEnd li{margin:1em 0;padding:0}.xsm{font-size:x-small}ol li{list-style:none}#ncm ul li{list-style-type:disc}.sm li{margin:0}.gl,#foot a,.nobr{white-space:nowrap}#mbEnd .med{white-space:normal}.sl,.r{display:inline;font-weight:normal;margin:0}.r{font-size:medium}h4.r{font-size:small}.mr{margin-top:6px}h3.tbpr{margin-top:.4em;margin-bottom:1.2em}img.tbpr{border:0px;width:15px;height:15px;margin-right:3px}.jsb{display:block}.nojsb{display:none}.nwd{font-size:10px;padding:16px;text-align:center}#ss-box{background:#fff;border:1px solid;border-color:#c9d7f1 #36c #36c #a2bae7;left:0;margin-top:.1em;position:absolute;visibility:hidden;z-index:101}#ss-box a{display:block;padding:.2em .31em;text-decoration:none}#ss-box a:hover{background:#558be3;color:#fff!important}a.ss-selected{color:#000!important;font-weight:bold}a.ss-unselected{color:#4273db!important}.ss-selected .mark{display:inline}.ss-unselected .mark{visibility:hidden}#ss-barframe{background:#fff;left:0;position:absolute;visibility:hidden;z-index:100}.ri_cb{left:0;margin:6px;position:absolute;top:0;z-index:1}.ri_sp{display:-moz-inline-box;display:inline-block;text-align:center;vertical-align:top;margin-bottom:6px}.ri_of{opacity:0.40;}.ri_sp img{vertical-align:bottom}#vsrs,#vsrsr,#vspci,.vspib{background:url(https://www.dillo.org/images/nav_logo83.png) no-repeat}#vspb{box-shadow:0 4px 16px rgba(0,0,0,0.2);-moz-box-shadow:0 4px 16px rgba(0,0,0,0.2);border:1px solid #ccc;background-color:#fff;display:none;padding:15px;position:absolute;top:0;visibility:hidden;z-index:110}#vspb.vspbv{padding-left:5px;padding-right:6px;padding-bottom:18px}#vsrs,#vsrsr{height:30px;position:absolute;width:17px}#vsrs{background-position:0 -212px;left:-16px}#vsrsr{background-position:-50px -212px;right:-16px;display:none}#vspc{background-color:#fff;border:none;padding:0;position:absolute;top:15px}.vspbv #vspc{top:25px}#vspci{background-position:-71px -111px;border-bottom:5px solid #fff;border-left:5px solid #fff;cursor:pointer;height:16px;position:absolute;right:7px;top:7px;width:16px;z-index:16}.vspbv #vspci{right:4px;top:5px}.vspbv #vsic, #vsvpc{display:none}.vspbv #vsvpc{display:block}.vsvsn{left:3px;position:absolute;top:-20px}.vsvsnd{width:20px;height:16px}.vsvsndon{background:transparent url(https://www.dillo.org/test/images/video/audio_icons.png) no-repeat scroll -57px 0}.vsvsndon:hover{background:transparent url(https://www.dillo.org/test/images/video/audio_icons.png) no-repeat scroll -38px 0}.vsvsndoff{background-image:url(https://www.dillo.org/test/images/video/audio_icons.png)}.vsvsndoff:hover{background:transparent url(https://www.dillo.org/test/images/video/audio_icons.png) no-repeat scroll -19px 0}#vsvsna:focus{outline:none}.vsvptbl{margin-top:-2px}#vsic{overflow:hidden;z-index:-1}#vsli{border:none;display:block;left:50%;margin-left:-11px;width: 22px;height: 22px;position:absolute;top:50%;visibility:hidden}#vsm{font-size:16px;left:0;overflow:hidden;padding:10px;position:absolute;right:0;text-align:center;top:30%}#vsi,.vsi{border:none;display:block}#vsia{text-decoration:none}.vsbb{background-color:rgba(255, 245, 64, 0.2);border:4px solid #ff7f27;opacity:0.8;position:absolute;z-index:14}.vstb{-moz-box-shadow:1px 1px 3px rgba(0,0,0,0.4);background-color:#fff;border:1px solid #ff7f27;color:#000;font-size:12px;left:-4px;overflow:hidden;padding:5px;position:absolute;right:-4px;text-overflow:ellipsis;z-index:15}a .vstb em, a .vstb b{text-decoration:none}div.vsc{display:inline-block;position:relative;width:100%}div.vsta{display:block}div.vsta{z-index:0}.vspi{bottom:-5px;left:-8px;position:absolute;right:-8px;top:-5px;z-index:-1}.vscl .vspi{left:-6px}.vsgv .vspi{right:7px;top:1px}.vsgb .vspi{bottom:0;top:-1px}.nulead .vspi{left:-6px;top:-3px;bottom:-4px}.nusec .vspi{left:-6px;top:-4px;bottom:-4px}.nurich .vspi{left:-6px;top:-4px;bottom:0}.vspib{background-position:-19px -213px;border:0;padding-right:0;cursor:pointer;display:inline;height:13px;margin-left:5px;margin-right:3px;vertical-align:6px;width:13px}.vsgv .vspib{margin-top:2px}.vspib::-moz-focus-inner{border:none}.vsc .ws,.vsc .wsa{margin-right:0}div.vsc:hover .vspib,#cnt.vse .vspib{background-position:-35px -213px}#cnt.vsh #ires div.vsc:hover>.vspi,#ires div.vso>.vspi,#cnt.vsh #rhs div.vsc:hover>.vspi,#rhs div.vso>.vspi{background:#ebf2fc;border:1px solid #cddcf9}#cnt.vsh #tads div.vsc:hover>.vspi,#tads div.vso>.vspi,#cnt.vsh #tadsto div.vsc:hover>.vspi,#tadsto div.vso>.vspi{background:#fbf3d4;border:1px solid #eddca6}div.vsc:hover #nqsbq,div.vso #nqsbq{background-color:#fff}div.fade>#center_col div.vsc:hover>.vspi{background:none !important;border:none !important}#gog{background:none}.tl{position:relative}.mbl{margin-top:7px}.vpvfl{vertical-align:bottom}.vshid{display:none}.vsinfo{font-size:small;position:absolute;bottom:5px}.so{margin-top:4px;position:relative;white-space:normal}.so img{border:0;vertical-align:top}.son{position:relative}.so .soh{background-color:#FFFFD2;border:1px solid #FDF0BF;color:#000;display:none;font-size:8pt;padding:3px;position:absolute;white-space:nowrap;z-index:10}.soi{background:#ebeff9;line-height:22px;padding:0 4px;position:static;vertical-align:middle}.soi a{white-space:nowrap}.soi img{margin-top:-3px;vertical-align:middle}.soi .lsbb{display:inline-block;height:20px;margin-bottom:4px}.soi .lsb{background-repeat:repeat-x;font-size:small;height:20px;padding:0 5px}#rhs_block .so{display:block}.siw{display:inline-block;position:relative}.sia{background-color:#fff;border-top-right-radius:3px;bottom:0;font-size:11px;padding-left:2px;position:absolute}.sia .f,.sia a.fl:link,.sia a.fl:visited{color:#fff!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sia img{border-right:3px solid #fff}.siap{vertical-align:bottom}.ps-map{float:left}.ps-map img{border:1px solid #00c}a.tiny-pin,a.tiny-pin:link,a.tiny-pin:hover{text-decoration:none;color:#36c}a.tiny-pin:hover span{text-decoration:underline}.tiny-pin table{vertical-align:middle}.tiny-pin p{background-image:url(https://www.dillo.org/images/nav_logo83.png);background-position:-117px -91px;height:15px;margin:0;padding:0;top:-1px;overflow:hidden;position:relative;width:9px;}.pspa-price{font-size:medium;font-weight:bold}.pspa-call-price{font-size:small;font-weight:bold}.pspa-store-avail{color:#282}.pspa-out-of-stock{color:#c11}li.ppl{margin-bottom:11px;padding:6px;position:relative}#ppldir #ppldone, #ppldir #pplundo, #ppldir #pplcancel{color:#00f;cursor:pointer;text-decoration:underline}#ppldir{background:rgb(247,243,181);display:none;line-height:1.5em;outline:1px solid rgb(255,185,23);padding:6px 4px 6px 6px;position:absolute;width:90%;z-index:20}#ppldir.working{display:block}.pplclustered .pplclusterhide{visibility:hidden}.pplclustered .pplfeedback, .pplclustered .pplclusterdrop{display:none !important}.pplfeedback{right:5px;background:rgba(235, 242, 252, 1.0);border:1px solid #afafaf;color:#333 !important;cursor:pointer;display:none;font-size:1.0em;float:right;margin-top:5px;margin-right:5px;opacity:1.0;padding:5px 10px;position:absolute;text-decoration:none;top:5px;vertical-align:middle;white-space:nowrap}.pplfeedback:active{}li.ppl:hover .pplfeedback{opacity:1.0}.pplclustered:hover{border:0px;background-color:'' !important;margin-left:0px !important}li.ppl:hover{background-color:#ebf2fc;border:1px solid #cddcf9;padding:5px}.pplselected{background-color:#EBF2FC}.ppldragging{background-color:#B2D2FF}li.g.ppld{margin-bottom:0px;padding:3px}li.g.ppld:hover{padding:2px}.ppl_thumb_src{color:#767676;font-size:0.8em;line-height:1.3em;overflow:hidden;text-overflow:ellipsis;padding:0;text-align:center;width:70px}a.pplatt:link{color:#767676;text-decoration:none}a.pplatt:hover{color:#767676;text-decoration:underline}li.ppl:hover .pplfeedback{display:block}.ppl_thy{color:#767676;margin-left:3px}.ppl_crc{margin:35px 10px 0px 0px;display:none}.fbbtn{margin-left:5px;width:35px}.son:hover .soh{display:block;left: 0pxtop: 24px;}.bili {vertical-align:top;display:inline-block;overflow:hidden;margin-top:0px;margin-right:6px;margin-bottom:6px;margin-left:0px;}.bilir {margin:0px 0px 6px 0px;}.bia {display:block;}.rg_il,.rg_ilbg,.rg_ils{bottom:0;color:#fff;font-size:11px;line-height:100%;padding-right:1px;position:absolute}.rg_il,.rg_ilbg{right:0}.rg_ilbg{background:#000;opacity:0.4;z-index:0}.rg_il{z-index:1}.rg_ils{background:#fff;-webkit-border-top-right-radius:1px;-moz-border-radius-topright:1px;border-top-right-radius:1px;left:0;white-space:nowrap;z-index:1}.rg_ils div.f{color:#fff}.rg_ils div.f a{color:#36c}.rg_h,.rg_hp,.rg_hv{display:none;position:fixed;visibility:hidden}.rg_h {height:0px;left:0px;top:0px;width:0px;}.rg_hv{background:#fff;border:1px solid #ccc;-moz-box-shadow:0 4px 16px rgba(0,0,0,0.2);-webkit-box-shadow:0 4px 16px rgba(0,0,0,0.2);-ms-box-shadow:0 4px 16px rgba(0,0,0,0.2);box-shadow:0 4px 16px rgba(0,0,0,0.2);margin:-8px;padding:8px;background-color:#fff;visibility:visible}.rg_hp,.rg_hv,#rg_hp.v{display:block;z-index:5000}#rg_hp{-moz-box-shadow:0px 2px 4px rgba(0,0,0,0.2);-webkit-box-shadow:0px 2px 4px rgba(0,0,0,0.2);box-shadow:0px 2px 4px rgba(0,0,0,0.2);display:none;opacity:.7;position:fixed}#rg_hpl{cursor:pointer;display:block;height:100%;outline-color:-moz-use-text-color;outline-style:none;outline-width:medium;width:100%}.rg_hi {border:0;display:block;margin:0 auto 4px}.rg_hx {opacity:0.5}.rg_hx:hover {opacity:1}.rg_hn,.rg_hr,.rg_ht,.rg_ha{margin:0 1px -1px;padding-bottom:1px;overflow:hidden}.rg_ht{font-size:123%;line-height:120%;max-height:1.2em;word-wrap:break-word}.rg_hn{line-height:120%;max-height:2.4em}.rg_hr{color:#0E774A;white-space:nowrap}.rg_ha{color:#777;white-space:nowrap}a.rg_hal{color:#36c;text-decoration:none}a:hover.rg_hal {text-decoration:underline}.uh_h,.uh_hp,.uh_hv{display:none;position:fixed;visibility:hidden}.uh_h {height:0px;left:0px;top:0px;width:0px;}.uh_hv{background:#fff;border:1px solid #ccc;-moz-box-shadow:0 4px 16px rgba(0,0,0,0.2);-webkit-box-shadow:0 4px 16px rgba(0,0,0,0.2);-ms-box-shadow:0 4px 16px rgba(0,0,0,0.2);box-shadow:0 4px 16px rgba(0,0,0,0.2);margin:-8px;padding:8px;background-color:#fff;visibility:visible}.uh_hp,.uh_hv,#uh_hp.v{display:block;z-index:5000}#uh_hp{-moz-box-shadow:0px 2px 4px rgba(0,0,0,0.2);-webkit-box-shadow:0px 2px 4px rgba(0,0,0,0.2);box-shadow:0px 2px 4px rgba(0,0,0,0.2);display:none;opacity:.7;position:fixed}#uh_hpl{cursor:pointer;display:block;height:100%;outline-color:-moz-use-text-color;outline-style:none;outline-width:medium;width:100%}.uh_hi {border:0;display:block;margin:0 auto 4px}.uh_hx {opacity:0.5}.uh_hx:hover {opacity:1}.uh_hn,.uh_hr,.uh_ht,.uh_ha{margin:0 1px -1px;padding-bottom:1px;overflow:hidden}.uh_ht{font-size:123%;line-height:120%;max-height:1.2em;word-wrap:break-word}.uh_hn{line-height:120%;max-height:2.4em}.uh_hr{color:#0E774A;white-space:nowrap}.uh_ha{color:#777;white-space:nowrap}a.uh_hal{color:#36c;text-decoration:none}a:hover.uh_hal {text-decoration:underline}.speaker-icon-listen-off{background:url(https://ssl.gstatic.com/dictionary/static/images/icons/1/pronunciation.png);opacity:0.55;filter:alpha(opacity=55);border:1px solid transparent;display:inline-block;float:none;height:16px;vertical-align:bottom;width:16px}.speaker-icon-listen-off:hover{opacity:1.0;filter:alpha(opacity=100);cursor:pointer;}.speaker-icon-listen-on{background:url(https://ssl.gstatic.com/dictionary/static/images/icons/1/pronunciation.png);opacity:1.0;filter:alpha(opacity=100);border:1px solid transparent;display:inline-block;float:none;height:16px;vertical-align:bottom;width:16px}.speaker-icon-listen-on:hover{opacity:1.0;filter:alpha(opacity=100);cursor:pointer;}.irg{margin-bottom:10px;position:relative;width:100%}.irg h2{display:inline-block;font-size:16px;font-weight:normal;margin:0}.irg p{font-size:85%;margin:0}.irg-inner a{text-decoration:none}.irg-inner a:hover{text-decoration:underline}.irg-inner p{font-size:small;margin:0;padding-top:1px}.irg-column{display:inline-block;float:left;padding-right:16px;white-space:nowrap}.imrg{margin-bottom:26px;position:relative;width:100%}ul.lsnip{font-size:90%}table.tsnip{font-size:90%;border-spacing:0;border-collapse:collapse;border-style:hidden;margin:2px 0 0}table.tsnip td,table.tsnip th{padding:0 10px 0 0;border-top:1px solid #ddd;margin:0;line-height:15px;text-align:left}table.tsnip th{color:#777;font-weight:normal}.rsw-remove-inactive{visibility:hidden}.rsw-remove-active{background:url("https://www.dillo.org/images/nav_logo83.png") no-repeat scroll -124px -230px transparent;height:7px;width:7px}.rsw-remove-active:hover{background-position:-132px -230px}.rsw-starred,.rsw-half-starred,.rsw-unstarred{background:url("https://www.dillo.org/images/nav_logo83.png") no-repeat scroll transparent;float:left;overflow:hidden;position:relative;height:13px;width:13px}.rsw-unstarred{background-position:-68px -230px}.rsw-starred{background-position:-110px -230px}.rsw-half-starred{background-position:-82px -230px}.rsw-angry-active,.rsw-angry-inactive,.rsw-happy-active,.rsw-happy-inactive{background:url("https://www.dillo.org/images/nav_logo83.png") no-repeat scroll transparent;height:12px;width:12px}.rsw-angry-active{background-position:-76px -243px}.rsw-angry-inactive{background-position:-102px -243px}.rsw-angry-inactive:hover{background-position:-89px -243px}.rsw-happy-active{background-position:-88px -111px}.rsw-happy-inactive{background-position:-63px -243px}.rsw-happy-inactive:hover{background-position:-50px -243px}.comment-box-tip{color:#666}.comment-box-readonly-quoted{font-style:italic}.mbl{margin:1em 0 0}em{font-weight:bold;font-style:normal}li.w0 .ws,td.w0 .ws{opacity:0.5}li.w0:hover .ws,td.w0:hover .ws{opacity:1}ol,ul,li{border:0;margin:0;padding:0}li{line-height:1.2}li.g{margin-top:0;margin-bottom:20px}.ibk,#productbox .fmg{display:-moz-inline-box;display:inline-block;*display:inline;vertical-align:top;zoom:1}.tsw{width:595px}#cnt{margin-left:14px;min-width:817px;margin-left:0;max-width:1181px;padding-top:17px;}#cnt.big{max-width:1219px}@media only screen and (min-width:1222px){#cnt{max-width:1219px}}.gbh{top:24px}#gbar{margin-left:8px;height:20px}#guser{margin-right:8px;padding-bottom:5px!important}#rhs{width:254px}.mbi{margin-bottom:-1px}.uc{margin-left:224px}#center_col,#foot{margin-left:176px;margin-right:254px;padding:0 8px;padding:0 8px 0 8px}.big #center_col,.big #foot{margin-left:212px;padding:0 8px}@media only screen and (min-width:1222px){#center_col,#foot{margin-left:212px;padding:0 8px}}#subform_ctrl{font-size:11px;min-height:14px;z-index:99;margin-right:349px;position:relative;}#subform_ctrl a.gl{color:#36c}#center_col{clear:both}#brs p{margin:0;padding-top:5px}.brs_col{display:inline-block;float:left;font-size:small;white-space:nowrap;padding-right:16px;margin-top:-1px;padding-bottom:1px}#tads,#tadsto,#tadsb{margin-bottom:11px!important}#tads li,#tadsto li,#tadsb li{padding:1px 0}#tads li.taf,#tadsb li.taf,#tadsto li.taf{padding:1px 0 0}#tads li.tam,#tadsb li.tam,#tadsto li.tam{padding:20px 0 0}#tads li.tal,#tadsb li.tal,#tadsto li.tal{padding:20px 0 1px}#res{border:0;margin:0;padding:0 8px}#ires{padding-top:6px}.mbl{margin-top:10px}.play_icon{background-position:;height:px;margin-left:64px;margin-top:44px;width:px}#leftnav li{display:block}.micon,.licon,.close_btn,.inline_close_btn{border:0}#leftnav h2{font-size:small;color:#767676;font-weight:normal;margin:8px 0 0;padding-left:8px;width:167px}#tbbc dfn{padding:4px}#tbbc.bigger .std{font-size:154%;font-weight:bold;text-decoration:none}.close_btn{background-position:-138px -84px;float:right;height:14px;width:14px}.inline_close_btn{display:inline-block;vertical-align:text_bottom;background-position:-138px -84px;height:14px;width:14px}.videobox{padding-bottom:3px}#leftnav a{text-decoration:none}#leftnav a:hover{text-decoration:underline}.mitem,#showmodes{border-bottom:1px solid transparent;line-height:29px;opacity:1.0;padding-left:15px}.mitem:hover,#showmodes:hover,#showmodes:hover{opacity:1.0;background-color:#eee}#ms a:hover{text-decoration:none}.mitem>.kl,#ms>.kl{color:#333;display:block}.msel{color:#d14836;cursor:pointer}.mitem>.kl,#ms>.kl,.msel{font-size:15px}.micon{float:left;height:19px;margin-top:6px;margin-right:9px;outline:none;width:19px}#showmodes .micon{background:none}.licon{background-position:-153px -99px;float:left;height:14px;margin-right:3px;width:14px}.open #showmodes .micon{background-position:-132px -114px}.open .msm,.msl{display:none}.open .msl{display:inline}.open #hidden_modes,.open #hmp{display:block}#swr li{border:0;font-size:13px;line-height:1.2;margin:0 0 4px;margin-right:8px;}#tbd,#atd{display:block;min-height:1px}.tbt{font-size:13px;line-height:1.2}.tbnow{white-space:nowrap}.tbou,.tbos,.tbots,.tbotu{margin-right:8px;padding-left:16px;padding-bottom:3px;text-indent:-8px}.tbos,.tbots{font-weight:bold}#leftnav .tbots a{color:#000!important;cursor:default;text-decoration:none}.tbst{margin-top:8px}#season_{margin-top:8px}#iszlt_sel.tbcontrol_vis{margin-left:0}.tbpc,.tbpo,.lcsc,.lcso{font-size:13px}.tbpc,.tbo .tbpo,.lco .lcsc{display:inline}.tbo .tbpc,.tbpo,.lco .lcso,.lcsc,#set_location_section{display:none}.lco #set_location_section{display:block}.lcot{margin:0 8px;}.tbo #tbp,.lco .licon,.obsmo #obsmti{background-position:-138px -99px!important}#prc_opt label,#prc_ttl{display:block;font-weight:normal;margin-right:2px;white-space:nowrap}#cdr_opt,#loc_opt,#prc_opt{padding-left:8px;text-indent:0}#prc_opt{margin-top:-20px}.tbou #cdr_frm,.tbou #cloc_frm {display:none}#cdr_frm,#cdr_min,#cdr_max{color:rgb(102, 102, 102);width:88%}#cdr_opt label{display:block;font-weight:normal;margin-right:2px;white-space:nowrap}.gb-button,.gb-button-hilite {border: solid 1px #aaa;border-radius: 2px;cursor: pointer;display: -moz-inline-box;display: inline-block;font: normal normal normal 13px/140% 'arial', 'sans-serif';margin: 0 0 4px 0;outline: none;padding: 1px 10px;position: relative;text-decoration: none !important;vertical-align: middle;text-align: center;user-select: none;text-shadow: none;white-space: nowrap;width: 80px;-webkit-border-radius: 3px;-webkit-user-select: none;-moz-border-radius: 3px;-moz-user-select: none;}* html .gb-button,* html .gb-button-hilite {display: inline;margin-bottom: 0;}* html input.gb-button,* html input.gb-button-hilite {padding: 0;height: 23px;}*:first-child+html .gb-button,*:first-child+html .gb-button-hilite {display: inline;margin-bottom: 0;}*:first-child+html input.gb-button,*:first-child+html input.gb-button-hilite {padding: 0;height: 23px;}.gb-button {background: #f0f0f0;background-image: -webkit-gradient(linear, 0% 25%, 0% 75%, from(#F9F9F9), to(#E3E3E3));background-image: -moz-linear-gradient(center top, #F9F9F9 25%, #E3E3E3 75%);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9, endColorstr=#E3E3E3);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#F9F9F9, endColorstr=#E3E3E3)";border-color: #ccc #ccc #a0a0a0 #ccc;color: #000 !important;text-shadow: 0 0 1px #eee;-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);box-shadow: inset inset 0 1px 1px rgba(0,0,0,0.1);}.gb-button:active {background: #E3E3E3;background-image: -webkit-gradient(linear, 0% 25%, 0% 75%, from(#E3E3E3), to(#F9F9F9));background-image: -moz-linear-gradient(center top, #E3E3E3 25%, #F9F9F9 75%);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#E3E3E3, endColorstr=#F9F9F9);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#E3E3E3, endColorstr=#F9F9F9)";}.gb-button:hover {border-color: #666 #666 #444 #666;}.gb-button-hilite {background: #3d79d0;background-image: -webkit-gradient(linear, 0% 25%, 0% 75%, from(#4c91e8), to(#336ac1));background-image: -moz-linear-gradient(center top, #4c91e8 25%, #336ac1 75%);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4c91e8, endColorstr=#336ac1);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4c91e8, endColorstr=#336ac1)";border-color: #2525ea #2525ea #151596 #2525ea;color: #fff !important;font-weight: bold;-moz-box-shadow: inset 0 1px 1px rgba(255,255,255,0.5);-webkit-box-shadow: inset 0 1px 1px rgba(255,255,255,0.5);box-shadow: inset 0 1px 1px rgba(255,255,255,0.5);}.gb-button-hilite:active {background: #336ac1;background-image: -webkit-gradient(linear, 0% 25%, 0% 75%, from(#336ac1), to(#4c91e8));background-image: -moz-linear-gradient(center top, #336ac1 25%, #4c91e8 75%);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#336ac1, endColorstr=#4c91e8);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#336ac1, endColorstr=#4c91e8)";}.gb-button-hilite:hover {border-color: #0f0f68 #0f0f68 #08083a #0f0f68;}.rhss{margin:0 0 32px;margin-left:8px}#mbEnd{margin:0 0 32px;margin-left:8px}#mbEnd h2{color:#767676}#mbEnd li{margin:20px 8px 0 0}a:link,.w,.q:active,.q:visited,.tbotu{color:#2200C1;cursor:pointer}a.fl:link,.fl a,.flt,a.flt,.gl a:link,a.mblink,.mblink b{color:#36c}.osl a,.gl a,#tsf a,a.mblink,a.gl,a.fl,.slk a,.bc a,.flt,a.flt u,.oslk a,#tads .ac a,#rhs .ac a,.blg a,#appbar a{text-decoration:none}.osl a:hover,.gl a:hover,#tsf a:hover,a.mblink:hover,a.gl:hover,a.fl:hover,.slk a:hover,.bc a:hover,.flt:hover,a.flt:hover u,.oslk a:hover,.tbotu:hover,#tads .ac a:hover,#rhs .ac a:hover,.blg a:hover,#appbar a:hover{text-decoration:underline}#ss-box a:hover{text-decoration:none}#tads .mblink,#tadsto .mblink,#rhs .mblink{text-decoration:underline}.hpn,.osl{color:#767676}div#gbi,div#gbg{border-color:#a2bff0 #558be3 #558be3 #a2bff0}div#gbi a.gb2:hover,div#gbg a.gb2:hover,.mi:hover{background-color:#558be3}#guser a.gb2:hover,.mi:hover,.mi:hover *{color:#fff!important}#guser{color:#000}#imagebox_big img{margin:5px!important}#productbox .fmg{margin-top:7px;padding-right:4px;text-align:left}#productbox .lfmg{padding-right:0}#productbox .fmp,#productbox .fml,#productbox .fmm{padding-top:3px}#foot .ftl{margin-right:12px}#foot a.slink{text-decoration:none;color:#36c}#fll a,#bfl a{color:#36c;margin:0 12px;text-decoration:none}.kqfl #fll a{margin:0 24px 0 0 !important}#foot a:hover{text-decoration:underline}#foot a.slink:visited{color:#551a8b}#blurbbox_bottom{color:#767676}.stp{margin:7px 0 17px}.ssp{margin:.33em 0 17px}#mss {margin:.33em 0 0;padding:0;display:table}.mss_col {display:inline-block;float:left;font-size:small;white-space:nowrap;padding-right:16px;}#mss p{margin:0;padding-top:5px}#gsr a:active,a.fl:active,.fl a:active,.gl a:active{color:#c11}.sfcc{max-width:1181px;min-width:817px}.big .sfcc{max-width:1219px}@media only screen and (min-width:1222px){.sfcc{max-width:1219px}}.ksfcccl{max-width:1219px}.ksfccl{font-size:11px;margin-right:258px;position:relative;z-index:99}.big .ksfccl{margin-right:260px;}@media only screen and (min-width:1222px){.ksfccl{margin-right:260px;}} .ksfccl .gl{color:#36c;display:block}#sform{height:33px!important}#topstuff .sp_cnt, #topstuff .ssp {padding-top:6px;}#ires h3,#res h3,#tads h3,#tadsb h3,#mbEnd h3{font-size:medium}.nrtd li{margin:7px 0 0 0}.osl{margin-top:4px}.osi{background:url(https://www.dillo.org/images/nav_logo83.png) no-repeat;background-position:-115px -244px;float:left;height:10px;margin:3px 5px 0 0;width:10px}.slk{margin-top:6px!important}a.nlrl:link, a.nlrl:visited{color:#000}a.nlrl:hover, a.lrln:active{color:#36C}.st,.ac{line-height:1.24}.kv,.kvs{display:block;margin-bottom:2px}.kvs{margin-top:2px}.kvm{display:block;margin-bottom:1px}.kt{border-spacing: 2px 1px}.kb{display:block;margin-bottom:1px;margin-top:-1px}.kpbb,.ksb{-moz-border-radius:2px;-moz-user-select:none;border-radius:2px;cursor:pointer;font-family:arial;font-size:11px;font-weight:bold;height:28px;line-height:26px;margin:2px 0;min-width:54px;padding:0 8px;text-align:center}.ksb{background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-color:#f5f5f5;background-image:linear-gradient(top,#f5f5f5,#f1f1f1);border:1px solid #dcdcdc;border:1px solid rgba(0, 0, 0, 0.1);color:#555}.kpbb:hover,.ksb:hover{box-shadow:0 1px 1px rgba(0,0,0,0.1)}.ksb:hover{background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-color:#f8f8f8;background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #c6c6c6;color:#333}.ksb:active{background-image:-moz-linear-gradient(top,#f6f6f6,#f1f1f1);-mox-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);background-color:#f6f6f6;background-image:linear-gradient(top,#f6f6f6,#f1f1f1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.ksb.sbm{min-width:35px;height:20px;line-height:18px}.ksb.sbf{min-width:35px;height:21px;line-height:21px}.sbc,.sbm.sbc,.sbf.sbc{padding:0 2px;min-width:30px}#arcntc{margin-bottom:26px}.tbt{margin-left:35px;margin-bottom:28px}#tbpi.pt.pi{margin-top:-20px}#tbpi.pi{margin-top:0}.tbo #tbpi.pt,.tbo #tbpi{margin-top:-20px}#tbpi.pt{margin-top:8px}#tbpi{margin-top:0}#tbrt{margin-top:-20px}.lnsep{border-bottom:1px solid #efefef;margin-bottom:14px;margin-left:35px;margin-right:4px;margin-top:14px}.tbos,.tbots,.tbotu{color:#d14836}#lc a,.tbou > a.q,#tbpi,#tbtro,.tbt label,#prc_opt,#set_location_section a,.tbtctlabel,#swr a{color:#666}.th{border:0px solid transparent;}#resultStats{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#leftnav{margin-left:0}#subform_ctrl{margin-left:193px;}.big #leftnav{margin-left:28px}.big #subform_ctrl{padding-right:2px;margin-left:229px;}@media only screen and (min-width:1222px){#leftnav{margin-left:28px}#subform_ctrl{padding-right:2px;margin-left:229px;}} .obsmo #obsmtxt, #obsltxt{display:none}.obsmo #obsltxt{display:inline}#obsmtc a{text-decoration:none}#obsmtc a:hover{text-decoration:underline}.authorship_aff{color:gray;display:block;}.authorship_link{color:#2b65ec;text-decoration:none;}.authorship_link:hover{cursor:pointer;text-decoration:underline;}.authorship_note{color:black;display:block;}.authorship_popup{background-color:white;border:solid #888888 1px;box-shadow:2px 2px 3px #cbc8c8;float:left;font-size:12px;left:0;padding:2px;position:absolute;text-align:left;text-decoration:none;top:1.2em;width:325px;z-index:300;-moz-box-shadow:2px 2px 3px #cbc8c8;-webkit-box-shadow:2px 2px 3px #cbc8c8;}.authorship_popup a:hover{cursor:pointer}.authorship_slk{color:#2b65ec;display:block;text-decoration:none;}.authorship_table{vertical-align:top}.authorship_title{color:#7a5dc7;display:block;font-size:13px;font-weight:bold}</style> +</head> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<body> +<div id="center_col"> + <table> + <tr> + <td> + <div> + <button></button> + </div> + <div> + words words words words words words words words words words words + words words words words words words words words words words words + words words words words words words words words words words words + words words words words words words words words words words words + <span class=gl>And words in a span</span> + <button></button> + </div> + </td> + </table> +</div> + +</body> diff --git a/old/test/rowspan.html b/old/test/rowspan.html new file mode 100644 index 0000000..33a8102 --- /dev/null +++ b/old/test/rowspan.html @@ -0,0 +1,166 @@ +<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Test</title> +</head> + +<body leftmargin="0" topmargin="0"> +<h2>Table rowspan test</h2> + +rowspan=3, no-apportion, span cell first/last<br> +(1-2-3/A-B-C) +<table> +<tr> + <td> + <table cellpadding="0" cellspacing="0" border=0> + <tr> <td rowspan="3" bgcolor=teal>1<br>2<br>3</td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td rowspan="3" bgcolor=teal>1<br>2<br>3</td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td rowspan="3" bgcolor=teal>1<br>2</td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td rowspan="3" bgcolor=teal>1</td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td rowspan="3" bgcolor=teal></td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=0> + <tr> <td bgcolor=cyan>A</td> + <td rowspan="3" bgcolor=teal>1<br>2<br>3</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td bgcolor=cyan>A</td> + <td rowspan="3" bgcolor=teal>1<br>2<br>3</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> +</table> + +rowspan=3, apportion, span cell first/last<br> +(1-2-3-4-5/A?-B?-C?) +<table> +<tr> + <td> + <table cellpadding="0" cellspacing="0" border=0> + <tr> <td rowspan="3" bgcolor=teal>1<br>2<br>3<br>4<br>5</td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td rowspan="3" bgcolor=teal>1<br>2<br>3<br>4<br>5</td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=0> + <tr> <td bgcolor=cyan>A</td> + <td rowspan="3" bgcolor=teal>1<br>2<br>3<br>4<br>5</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td bgcolor=cyan>A</td> + <td rowspan="3" bgcolor=teal>1<br>2<br>3<br>4<br>5</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td bgcolor=cyan></td> + <td rowspan="3" bgcolor=teal>1<br>2<br>3<br>4<br>5</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td bgcolor=cyan>A</td> + <td rowspan="3" bgcolor=teal>1<br>2<br>3<br>4<br>5</td> + <tr> <td bgcolor=cyan></td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td bgcolor=cyan>A</td> + <td rowspan="3" bgcolor=teal>1<br>2<br>3<br>4<br>5</td> + <tr> <td bgcolor=cyan>B</td> + <tr> <td bgcolor=cyan></td> + </table> + <td> + <table cellpadding="10" cellspacing="0" border=1> + <tr> <td rowspan="3" bgcolor=teal>1<br>2<br>3<br>4<br>5</td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan></td> + <tr> <td bgcolor=cyan>C</td> + </table> + <td> + <table cellpadding="10" cellspacing="10" border=1> + <tr> <td rowspan="3" bgcolor=teal>1<br>2<br>3<br>4<br>5</td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan></td> + <tr> <td bgcolor=cyan>C</td> + </table> +</table> + +rowspan=3, apportion, span cell first/last<br> +(1-2-3-4-5-6-7-8-9-10/A-B-C-D-E-F) +<table> + <tr> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td bgcolor=cyan>A</td> + <td rowspan="3" bgcolor=teal> + 1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10</td> + <tr> <td bgcolor=cyan>B<br>C</td> + <tr> <td bgcolor=cyan>D<br>E<br>F</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=0> + <tr> <td rowspan="3" bgcolor=teal> + 1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10</td> + <td bgcolor=cyan>A</td> + <tr> <td bgcolor=cyan>B<br>C</td> + <tr> <td bgcolor=cyan>D<br>E<br>F</td> + </table> + <td> + <table cellpadding="0" cellspacing="0" border=1> + <tr> <td bgcolor=cyan>A</td> + <td rowspan="3" bgcolor=teal> + 1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10</td> + <tr> <td bgcolor=cyan>B<br>C<br>D<br>E</td> + <tr> <td bgcolor=cyan>F</td> + </table> +</table> + +</body> +</html> diff --git a/old/test/sd3.html b/old/test/sd3.html new file mode 100644 index 0000000..b2048f9 --- /dev/null +++ b/old/test/sd3.html @@ -0,0 +1,6 @@ +<a href="https://www.dillo.org/test/ht">Hi <strong><em><u>there <div>here +<a href="https://www.dillo.org/test/h">Hey <a href="https://www.dillo.org/test/y">you</a> +<a href="https://www.dillo.org/test/s">Say <strong><a href="https://www.dillo.org/test/o">one.</a></a> + +<p><strong><a href="https://www.dillo.org/test/strong">bold</a></strong></p> + diff --git a/old/test/style.css b/old/test/style.css new file mode 100644 index 0000000..0e968d3 --- /dev/null +++ b/old/test/style.css @@ -0,0 +1,48 @@ + +/* Default body format */ +body +{ + background: rgb(200,200,230); + color: rgb(0,0,0); + font-family: Vera-sans,Sans-serif; + font-size: 100%; + margin: 2em; +} + + +/* Headlines */ +h1 +{ + font-size: 250%; +} + +h2 +{ + font-size: 150%; +} + + +/* Element class formats */ + +.top, .content +{ + font-size: 1em; + padding: 0.5em 1.5em; + border: 1px solid rgb(0,0,0); + margin: 0em; +} + +.top +{ + background-color: rgb(210,250,210); +} + +.content +{ + background-color: rgb(240,240,240); + border-top-width: 0em; + margin-bottom: 1em; +} + + +/* EOF */ diff --git a/old/test/tables/MList.html b/old/test/tables/MList.html new file mode 100644 index 0000000..4a1045e --- /dev/null +++ b/old/test/tables/MList.html @@ -0,0 +1,293 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <title> Dillo Web Browser :: + + Mailing Lists + +</title> +</head> + +<body bgcolor="white"> + +<table border="0" cellpadding="5" cellspacing="5" width="100%"> + <tr valign="top"> + <td bgcolor="#eeddaa"> + <table width="100%" cellspacing="0" cellpadding="0"> + <tr><td bgcolor="#d0c090" colspan="2"><b>Dillo</b></td></tr> + <tr> + <td> </td> + <td width="100%"> + <hr><img src="https://www.dillo.org/birthday.gif" alt="birthday"> + <a href="https://www.dillo.org/6years.html">6 years!</a><hr> + <small> + <a href="../../index.html">Home</a><br> + <a href="../../A_goals.html">Achieved Goals</a><br> + <a href="../../Plans.html">Current Plans</a><br> + <a href="https://www.dillo.org/ChangeLog.html">ChangeLog</a><br> + <a href="../../screenshots/index.html">Screenshots</a><br> + <a href="../../download.html">Download</a><br> + <a href="../../MList.html">Mailing List</a><br> + <a href="../../FAQ.html" title="Frequently asked questions">FAQ</a><br> + <a href="../../Compatibility.html">Compatibility</a><br> + <a href="../../funding/funding.html">Funding</a> + <img src="https://www.dillo.org/ball_gray.png" alt="*"><br> + <a href="../../donations.html">Donate</a> + <img src="https://www.dillo.org/new_small.gif" alt="*"><br> + <a href="../../fosdem2005/index.html">Fosdem 2005</a><br> + <a href="https://www.dillo.org/lsm2005/">LSM 2005</a><br> + </small> + </td> + </tr> + </table> + + <hr> + + <table width="100%" cellspacing="0" cellpadding="0"> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track Engine</b></td></tr> + <tr> + <td> </td> + <td width="100%"> + <small> + <a href="../../bugtrack/Dbugtrack.html">Bug Track Intro</a><br> + <a href="../../bugtrack/Dquery.html">View Entries</a><br> + <a href="../../bugtrack/Dinsert.html">Bug Insertion</a><br> + <a href="../../bugtrack/Dvolunteer.html">Volunteering</a><br> + </small> + </td> + </tr> + </table> + + <hr> + + <table width="100%" cellspacing="0" cellpadding="0"> + <tr><td bgcolor="#d0c090" colspan="2"><b>Developers</b></td></tr> + <tr> + <td> </td> + <td width="100%"> + <small> + <a href="../../developer.html">New Developer Info</a><br> + <a href="../../NC_design.html">Naming&Coding</a><br> + <a href="../../dpi1.html">Dpi1 Spec</a><br> + <a href="../../CSS.html">CSS Spec</a><br> + <a href="https://www.dillo.org/cvs.html">CVS</a><br> + <a href="../../D_authors.html">Authors</a><br> + <a href="../../authors/jcid-email.html">Security contact</a> + </small> + </td> + </tr> + </table> + + <hr> + + <table width="100%" cellspacing="0" cellpadding="0"> + <tr><td bgcolor="#d0c090" colspan="2"><b>Users</b></td></tr> + <tr> + <td> </td> + <td width="100%"> + <small> + <a href="../../dillo-help.html">Help</a><br> + <a href="../../Icons/index.html">Icons</a><br> + <a href="../../help/bug_meter.html">Bug meter</a><br> + </small> + </td> + </tr> + </table> + + <hr> + + <table width="100%" cellspacing="0" cellpadding="0"> + <tr><td bgcolor="#d0c090" colspan="2"><b>Related</b></td></tr> + <tr> + <td> </td> + <td width="100%"> + <small> + <a href="../../press.html">Dillo in the Press!</a><br> + <a href="../../interview.html">Interview</a><br> + <a href="../../interview.es.html">Entrevista</a> + <img src="../../chile.png" alt="*"><br> + <a href="../../Links.html">Links</a><br> + <a href="../../logos/logos.html">Art</a><br> + </small> + </td> + </tr> + </table> + + <hr> + + <table width="100%"> + <tr><td bgcolor="#d0c090"><b>Hosted at:</b></td></tr> + </table> + <center> + <table border='1' bgcolor='#d0c090'> + <tr><td> + <a href="http://auriga.wearlab.de/"> + <img src="https://www.dillo.org/wearlab.png" alt="[wearLab] @TZI" width="87" height="33"></a></td></tr> + </table> + </center> + + <p> + <hr> + + <table width="100%" cellspacing="0" cellpadding="0"> + <tr> + <td> </td> + <td width="100%"> + <small> + <a href="https://www.dillo.org/stats/">Site Statistics</a><br> + <a href="../../authors/jviksell-email.html">Webmaster</a> + </small> + </td> + </tr> + </table> + + <hr> + + <center> + <a href="http://www.anybrowser.org/campaign/"> + <img src="https://www.dillo.org/AnyBrowser.gif" width="88" height="31" + alt="* Best viewed with any browser"></a> + </center> + + </td> + + <td valign="top" align="left" width="100%"> + + <img src="https://www.dillo.org/main-small.jpg" alt="The Dillo Web Browser" width="250" height="97"> + <hr> + + + + + <TABLE width="100%" BGCOLOR="#99CCFF" CELLSPACING="4" CELLPADDING="5"> + <TR> + <TD> + <B><FONT COLOR="#000000">Dillo-dev -- + Mailing list for developers of Dillo</FONT></B> + </TD> + <TD> + <table> + <tr><td> + <a href="http://sourceforge.net/mailarchive/forum.php?forum_id=6557" + >[Old Archives]</a> + <a href="http://lists.auriga.wearlab.de/pipermail/dillo-dev/" + >[Archives]</a> + </td></tr><tr><td align='center'> + <a +href="http://lists.auriga.wearlab.de/cgi-bin/mailman/listinfo/dillo-dev" + >[Subscribe]</a> + <a +href='../../search/index.html' + >[Search]</a> + </td></tr> + </table> + </TD> + </TR> + </TABLE> + + <TABLE BORDER="0" CELLSPACING="4" CELLPADDING="5"> + + <tr> + <td colspan="2"> <p> </td> + </tr> + + <tr> + <TD COLSPAN="2" WIDTH="100%" BGCOLOR="#FFF0D0"> + <B><FONT COLOR="#000000"> Please read carefully before posting: + </FONT></B> + </TD> + </TR> + + <tr> <td colspan="2"> + <P> + This mailing list has a long tradition of polite, respectful, +technically skilled and cooperative email interchange, and, +<em>we love it that way!</em> + <P> + Back in the old days when I was at the university, a memorable +teacher told us that the toughest problem of gathering a working +team of highly skilled to brilliant-considered individuals was +that those guy's egos were bigger than a whole cathedral, and +that they would avoid cooperating with each other in the pursue +of demonstrating that they were the best overall, and that they +could undertake the whole task without the aid of anyone! + <P> + He was right... + <P> + I had come to observe that really brilliant or knowledgeable +people (up to geniuses), don't behave that way. They know what +they're worth, and thus doesn't have to demonstrate anything. + <P> + Even more, the latter ones are the most cooperative, +encouraging and open to share their valuable knowledge, when it +comes to help their colleagues to improve their skills. + <P> + The excellent news is that being a genius is not a requirement +for adopting that working spirit; <em>and so we did!</em> + <P> + </TR> + + <tr> + <TD COLSPAN="2" WIDTH="100%" BGCOLOR="#FFF0D0"> + <B><FONT COLOR="#000000"> Tips: + </FONT></B> + </TD> + </TR> + + <tr> <td colspan="2"> + <p> + <dl> + <dt><strong>Releases</strong> + <dd> + If you just don't want to miss the next release announcement, +there's a freshmeat +<a href="http://freshmeat.net/subscribe/1902/">facility</a> +just for that. + <dt><strong>Low traffic</strong> + <dd> + We have a lot of subscribers, but the traffic is low. I +beleive that's one of the main reasons for that! The other one is +that having to be concise, tends to improve the quality of the +post. + <dt><strong>Being concise</strong> + <dd> + Please don't brainstorm to the list. Document yourself and +try to sort your mind before you let others know what you think. + <dt><strong>Positive feedback</strong> + <dd> + Thanks-for posts are very welcomed. I receive a lot of them, +and sometimes I wish they'd be sent directly to the mailing list +with a view to let every developer enjoy his share. + <dt><strong>Where to send patches</strong> + <dd> + If they're on dillo widget, send them to <a href="../../authors/sgeerken-email.html">Sebastian</a>, and +everything else to <a href="../../authors/jcid-email.html">me</a>. If your patch is small and you need to +share it for advice, send it to the mailing list. If it's +<em>big</em>, let the mailing list know and either set an URL +with it, or email directly to interested people. + <dt><strong>Offensive posts</strong> + <dd> + You're strongly encouraged NOT to answer any unpolite or +unrespectful post. This silent exclusion will gently invite the +poster to reconsider his writtings or leave the list. + </dl> + </tr> + </table> + + <hr><small><strong> --by Jcid</strong></small> + + + <hr> + <br> + + </td> + + </tr> +</table> + + +</body> +</html> + diff --git a/old/test/tables/heise.html b/old/test/tables/heise.html new file mode 100644 index 0000000..125d52d --- /dev/null +++ b/old/test/tables/heise.html @@ -0,0 +1,876 @@ + + + + + + + +<html> +<head> + +<!-- Site Navigation Bar --> + +<link rel="copyright" title="Heise Zeitschriften Verlag" href="https://www.dillo.org/kontakt/impressum.shtml"> +<link rel="start" title="Start" href="../../index.html"> +<link rel="author" title="Kontakt" href="mailto:kontakt%40heise.de?subject=heise%20online"> + +<link rel="alternate" type="application/atom+xml" title="Aktuelle News von heise online" href="http://www.heise.de/newsticker/heise-atom.xml"> +<link rel="alternate" type="application/rss+xml" title="Aktuelle News von heise online (für ältere RSS-Reader)" href="http://www.heise.de/newsticker/heise.rdf"> + + + + + +<!-- Allgemeines Standard-Stylesheet --> +<link href="https://www.dillo.org/stil/standard.css" rel="stylesheet" type="text/css" media="screen, projection, print"> + +<!-- heise online Standard-Stylesheet --> +<link href="https://www.dillo.org/stil/ho/standard.css" rel="stylesheet" type="text/css" media="screen, projection, print"> + +<!-- heise online weitere Stylesheets --> + +<link href="https://www.dillo.org/stil/ho/news.css" rel="stylesheet" type="text/css" media="screen, projection, print"> + + + + + + +<!-- Allgemeines Druck-Stylesheet --> +<link href="https://www.dillo.org/stil/drucken.css" rel="stylesheet" type="text/css" media="print"> + +<!-- heise online Druck-Stylesheet --> +<link href="https://www.dillo.org/stil/ho/drucken.css" rel="stylesheet" type="text/css" media="print"> + + +<!-- Seitenname --> +<title>heise online</title> +<script type="text/javascript" language="javascript" src="https://www.dillo.org/support/js3.js?1"> </script> + +<!-- Keywords, Description --> +<!-- Keywords --> + +<meta name="keywords" content=" heise online, c't, iX, Technology Review, Telepolis, heise mobil, heise Security, heise jobs, heise Kiosk, Newsticker"> + + +<!-- Description --> + + +<meta name="description" content="heise online - News"> + + + + + +<!-- Copyright --> +<meta NAME="copyright" CONTENT="Heise Zeitschriften Verlag"> + + +<!-- Staendige Aktualisierung --> + +<meta http-equiv="expires" content="900"> + + +<!-- Favicon --> +<link href="https://www.dillo.org/favicon.ico" rel="shortcut icon"> + +<!-- js Foren-Scrollposition --> + + +<!-- nicht in Frames --> +<base target="_top"> +</head> + +<!-- Body --> + +<body bgcolor="#FFFFFF" text="#000000" link="#003399" vlink="#666666" alink="#3366cc" +leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> + +<!-- allgemeine obere Navigation --> +<table border="0" cellspacing="0" cellpadding="0" width="100%" class="druck"> + <tr> + <td align="center" bgcolor="#eeeeee"> + <table cellpadding="2" cellspacing="2" border="0"> + <tr> + <td><a href="../../index.html" title="heise online" class="navi_oben_ho">heise online</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/ct/" title="c't" class="navi_oben_ct">c't</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/ix/" title="iX" class="navi_oben_ix">iX</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/tr/" title="Technology Review" class="navi_oben_tr">Technology Review</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/tp/" title="Telepolis" class="navi_oben_tp">Telepolis</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/mobil/" title="heise mobil" class="navi_oben_mob">mobil</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/security/" title="heise Security" class="navi_oben_sec">Security</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/netze/" title="heise Netze" class="navi_oben_net">Netze</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/open/" title="heise open" class="navi_oben_op">Open Source</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/resale/" title="heise resale" class="navi_oben_res">heise resale</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/autos/" title="heise Autos" class="navi_oben_aut">Autos</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/ct/tv/" title="ctmagazin.tv" class="navi_oben_tv">c't-TV</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/jobs/" title="heise jobs" class="navi_oben_job">Jobs</a></td> + <td><b class="trenner">·</b></td> + <td><a href="https://www.dillo.org/kiosk/" title="Zeitschriften-Archiv" class="navi_oben_kio">Kiosk</a></td> + </tr> + </table> + </td> + </tr> + + <tr> + <td bgcolor="#999999"><img src="https://www.dillo.org/icons/ho/1pix.gif" width="1" height="1" hspace="375" alt=""></td> + </tr> + +</table> + + + + +<div class="leaderboard"> + <table border="0"> + <tr align="center"> + + <td><!--OAS AD="Top"--> +<!-- www.heise.de/Homepage@Top --></td> + </tr> +</table> + +</div> + +<div class="full_content"> +<table border="0" cellspacing="0" cellpadding="0" width="100%"> + <tr> + <!-- 1. Spalte --> + <td valign="top" width="141" class="druck"> + <!-- Logo, Navigation links --> + <table border="0" cellspacing="0" cellpadding="0" width="100%"> + <tr> + + <td><a href="../../index.html"><img src="https://www.dillo.org/icons/ho/heise.gif" alt="heise online" width="137" height="60" border="0" vspace="5" hspace="4"></a></td> + + </tr> + + <tr> + <td class="rand_links" bgcolor="#cccccc" valign="top"> + + + + + <p id="navi_login"><!-- login_ho --> + <script type="text/javascript" src="https://www.dillo.org/support/lib/login_ho.js"></script> + + <noscript> + + + + + + <a href="https://www.dillo.org/userdb/sso?rm=show_login&dirid=1&objekt=/newsticker/">Einloggen</a> | + <a href="https://www.dillo.org/userdb/sso?rm=do_logout&dirid=1">Ausloggen</a> + + + + + + </noscript> +</p><!-- /login_ho --> + + + + + + <!-- Suchen nach--> +<form name="myform" action="https://www.dillo.org/bin/callurl" class="suchen_nach"> + <select name="2" onchange="self.location=this.options[this.selectedIndex].value; return true;"> + <option value="" selected>Suche ...</option> + <option value="/newsticker/suche">News</option> + <option value="/ct/inhverz/suche">c't-Artikel</option> + <option value="/ix/iXInhalt/suche">iX-Artikel</option> + <option value="/tr/suche">Technology Review</option> + <option value="/tp/deutsch/html/such.html">Telepolis-Art.</option> + <option value="/software/">Software</option> + <option value="/ct/softlink_erlaeuterung.shtml">c't-Soft-Link</option> + <option value="/ct/treiber/">Treiber</option> + <option value="/ct/tv/suche">c't-TV</option> + <option value="/ct/adressen/">Firmenkontakt</option> + <option value="/heisejobs/">Jobs</option> + </select> + <noscript> + <input type="submit" name="test" value=" Go "> + </noscript> +</form> + + + + <p class="navi_links_news"> + <a href="https://www.dillo.org/newsticker/" class="navi_links">7-Tage-News</a><br> + <a href="https://www.dillo.org/newsticker/archiv/" class="navi_links">News-Archiv</a><br> + <a href="https://www.dillo.org/newsticker/pda/" class="navi_links">News unterwegs</a><br> + <a href="https://www.dillo.org/newsletter/" class="navi_links">Newsletter</a><br> + <a href="https://www.dillo.org/news-extern/" class="navi_links">News einbinden</a><br> +</p> + + + <p class="navi_links_dienste"> + <a href="https://www.dillo.org/telefontarife/" class="navi_links">Telefontarife</a><br> + <a href="https://www.dillo.org/internettarife/" class="navi_links">Internettarife</a><br> + <a href="https://www.dillo.org/imonitor/" class="navi_links">Internetstörungen</a><br> +</p> + + <p class="navi_links_dienste_zwei"> + <a href="https://www.dillo.org/software/" class="navi_links">Software/Download</a><br> + <a href="https://www.dillo.org/itmarkt/" class="navi_links">IT-Markt</a><br> + <a href="http://www.heisetreff.de/" class="navi_links">heisetreff</a><br> +</p> + <p class="navi_links_user"> + <a href="https://www.dillo.org/foren/" class="navi_links">Leserforum</a><br> + <!-- <a href="/chat/" class="navi_links">Chat-Events</a><br> --> + <a href="https://www.dillo.org/english/" class="navi_links">English Pages</a><br> +</p> + <p class="navi_links_kontakt"> + <a href="https://www.dillo.org/abo/" class="navi_links">Abo & Heft</a><br> + <a href="https://www.dillo.org/events/" class="navi_links">Veranstaltungen</a><br> + <a href="https://www.dillo.org/kontakt/" class="navi_links">Kontakt</a><br> + <a href="https://www.dillo.org/mediadaten/" class="navi_links">Mediadaten</a><br> +</p> + + <div align="center" class="contentbanner"> + <table border="0"> + <tr align="center"> + + <td><!--OAS AD="Left"--> +<a href="http://oas.wwwheise.de/RealMedia/ads/click_lx.ads/www.heise.de/Homepage/835731488/Left/OasDefault/137x60/711357_netze_cont.gif/3230302e32392e3136302e3134" target="_blank"><img src="http://oas.wwwheise.de/RealMedia/ads/Creatives/OasDefault/137x60/711357_netze_cont.gif" alt="" border="0"></A><img src="http://oas.wwwheise.de/RealMedia/ads/adstream_lx.ads/www.heise.de/Homepage/835731488/Left/OasDefault/137x60/711357_netze_cont.gif/3230302e32392e3136302e3134?_RM_EMPTY_" width="1" height="1"></td> + </tr> +</table> + + </div> + + <!-- ONLINE-MARKT --> + <h4 class="kasten_markt_titel">ONLINE-MARKT</h4> + +<table border="0" cellspacing="0" cellpadding="5" width="100%" class="kasten_markt"> + <tr> + <td> + <div class="werbung" align="right">Werbung</div> + + <!-- SManager - Position 1-4 --> + + <form method="GET" action="http://www.heise.de/preisvergleich/" name="sform">
+<p class="kasten_markt">
+<b><a href="http://www.heise.de/preisvergleich/" style="font-family: Arial, Helvetica, Verdana, sans-serif; margin: 0; color: #990000;">Preisvergleich</a></b><br>
+<input type="text" name="fs" size="15" style="font-size: 80%; margin: 2px 0;"><br>
+<select name="in" style="font-size: 80%; margin: 2px 0;">
+ <option value="">in allen Kategorien</option>
+ <option value="1">in Hardware</option>
+ <option value="2">in Software</option>
+ <option value="3">in Games</option>
+ <option value="4">in Video/Foto/TV</option>
+ <option value="5">in Telefon & Co</option>
+ <option value="6">in Audio/HIFI</option>
+ <option value="7">in DVD</option>
+ <option value="8">in Haushalt</option>
+</select><br>
+<input type="image" width="65" height="22" alt="Suchen" src="http://geizhals.at/suchen.gif" border="0" style=" margin: 2px 0;">
+</p>
+</form>
+ +<div class="microsites">
+<p class="microsite_titel">
+ <img src="https://www.dillo.org/icons/ho/heise_min.gif" alt="heise oline" width="30" height="30" style="float: left; margin-right: 3px;">
+ <b>Unternehmens-<br>
+ informationen</b><br>
+</p>
+<p class="microsite_link">
+ BCC:<br>
+ <b><a href="http://www.heise.de/netze/sub/bcc/">Managed Network Services</a></b>
+</p>
+<p class="microsite_link">
+ toplink:<br>
+ <b><a href="http://www.heise.de/news/sub/toplink/">VoIP für Unternehmen</a></b>
+</p>
+</div>
+ +<!-- IT-Markt --> +<p class="kasten_markt"> + <a href="https://www.dillo.org/itmarkt/"><img src="https://www.dillo.org/icons/itmarkt/itmarkt_logo_klein.gif" alt="IT-Markt" width="70" height="35" border="0" vspace="3"></a><br> + <span class="size80">Anbieter in Ihrer Region<br> + Beispiel: + <b>Magdeburg</b></span><br> + <a href="https://www.dillo.org/itmarkt/detail/detail_info/4251414a43514d437346395659513d3d/">project: syntropy GmbH</a><br> + +</p> + + + + + + + <!-- heisetreff --> + <p class="kasten_markt" style="padding-top: 0px;"> + <a href="http://www.heisetreff.de/"><img src="https://www.dillo.org/icons/ho/treff_logo.gif" alt="" border="0" vspace="8"></a><br> + <span style="font-size: 0.9em"><a href="http://www.heisetreff.de/" style="font-weight: bold">Kleinanzeigen</a> und <a href="http://www.heisetreff.de/v/" style="font-weight: bold">Veranstaltungen</a></span> + </p> + + <!-- MittelstandsWiki --> + <p class="kasten_markt" style="margin-top: -0.5em; margin-bottom: -0.5em;"> + <b><a title="MittelstandsWiki" href="http://www.mittelstandswiki.de/" target="_blank">MittelstandsWiki</a></b><br> + <span class="size80"><a title="MittelstandsBlog" href="http://www.mittelstandsblog.de/" target="_blank">News</a>, <a title="ITK Journal" href="http://itk.mittelstandswiki.de" target="_blank">IT</a>, <a title="Pressezentrum" href="http://kmu.mittelstandswiki.de" target="_blank">Pressezentrum</a> und <a title="Pro Journal" href="http://pro.mittelstandswiki.de/" target="_blank">Fakten</a> für Unternehmen</span> + </p> + + + <!-- eMedia --> + <p class="kasten_markt"> + <b><a href="http://www.emedia.de/" target="_blank">eMedia.de</a></b><br> + <span class="size80">Fachbücher, Edutainment, <br> + c't- und iX-Archiv-CDs</span><br> + + <a href="http://www.emedia.de/cd-shop" target="_blank"><img src="https://www.dillo.org/emedia/bilder/2004/ctdvd_8389.gif" alt="" width="110" height="120" border="0"></a><br>
+<b class="size80"><a href="http://www.emedia.de/cd-shop" target="_blank">c't-Archiv auf DVD<br> 1983 bis 1989</a></b> + + + + </p> + <!-- Sonderhefte --> + + <p class="kasten_markt">
+ <a href="https://www.dillo.org/kiosk/special/ct/08/02/"><img src="https://www.dillo.org/icons/ho/ct/special0208.gif"
+ alt="" border="0" vspace="5" width="85"></a><br>
+ <span class="size80">c't special</span><br>
+ <b><a href="https://www.dillo.org/kiosk/special/ct/08/02/">Netzwerke</a></b></p> +<p class="kasten_markt">
+ <a href="https://www.dillo.org/kiosk/special/ct/08/01/"><img src="https://www.dillo.org/icons/ho/ct/special0108.gif"
+ alt="" border="0" vspace="5" width="85"></a><br>
+ <span class="size80">c't special</span><br>
+ <b><a href="https://www.dillo.org/kiosk/special/ct/08/01/">Digitale Fotografie</a></b></p> + + + + <!-- Loseblattwerke --> + <p class="kasten_markt"> + <a href="https://www.dillo.org/kiosk/loseblattwerke/"><img src="https://www.dillo.org/kiosk/loseblattwerke/online-recht/loseblattwerke-online-recht-ein-leitfaden-fuer-die-praxis.gif" alt="Online-Recht - Ein Leitfaden für die Praxis" border="0" vspace="5" width="100" height="100"></a><br> + <span class="size80">Loseblattwerke</span><br> + + <b><a href="https://www.dillo.org/kiosk/loseblattwerke/">Online-Recht –<br>Ein Leitfaden für die Praxis</a></b></p> + + <!-- dpunkt.foto --> + <p> + <a href="http://www.fotoespresso.de/" target="_blank"><img src="https://www.dillo.org/icons/ho/fotoespresso.gif" alt="" width="137" height="55" border="0" vspace="10"></a> + </p> + + + + + + + </td> + </tr> +</table> + + + + + + + <div align="center" class="sales"> + <table border="0"> + <tr align="center"> + + <td><!--OAS AD="Left2"--> +<a href="http://oas.wwwheise.de/RealMedia/ads/click_lx.ads/www.heise.de/Homepage/178174061/Left2/OasDefault/137x200/ct_kalender_2008_sales.gif/3230302e32392e3136302e3134" target="_blank"><img src="http://oas.wwwheise.de/RealMedia/ads/Creatives/OasDefault/137x200/ct_kalender_2008_sales.gif" alt="" border="0"></A><img src="http://oas.wwwheise.de/RealMedia/ads/adstream_lx.ads/www.heise.de/Homepage/178174061/Left2/OasDefault/137x200/ct_kalender_2008_sales.gif/3230302e32392e3136302e3134?_RM_EMPTY_" width="1" height="1"></td> + </tr> +</table> + + </div> + + + </td> + </tr> +</table> + + + </td> + + <!-- 2. Spalte --> + <td valign="top"> + <!-- oberer Banner --> + + <div class="heiseadvert"> + <table border="0"> + <tr> + <td valign="middle" align="left" nowrap> + <table cellpadding="2" cellspacing="0" border="0"> + <tr> + + <td><!--OAS AD="TopLeft"--> +<!-- www.heise.de/Homepage@TopLeft --></td> + <td><!--OAS AD="Top1"--> +<a href="http://oas.wwwheise.de/RealMedia/ads/click_lx.ads/www.heise.de/Homepage/462304984/Top1/OasDefault/468x60/ixworkshop_syst_prodl_468.gif/3230302e32392e3136302e3134" target="_blank"><img src="http://oas.wwwheise.de/RealMedia/ads/Creatives/OasDefault/468x60/ixworkshop_syst_prodl_468.gif" alt="" border="0"></A><img src="http://oas.wwwheise.de/RealMedia/ads/adstream_lx.ads/www.heise.de/Homepage/462304984/Top1/OasDefault/468x60/ixworkshop_syst_prodl_468.gif/3230302e32392e3136302e3134?_RM_EMPTY_" width="1" height="1"></td> + <td><!--OAS AD="TopRight"--> +<!-- www.heise.de/Homepage@TopRight --></td> + <td><!--OAS AD="Middle"--> +<a href="http://oas.wwwheise.de/RealMedia/ads/click_lx.ads/www.heise.de/Homepage/546525088/Middle/OasDefault/1x1-bei-he-zaehler-hp/zaehler.gif/3230302e32392e3136302e3134" target="_blank"><img src="http://oas.wwwheise.de/RealMedia/ads/Creatives/OasDefault/1x1-bei-he-zaehler-hp/zaehler.gif" WIDTH=1 HEIGHT=1 alt="" border="0"></A><img src="http://oas.wwwheise.de/RealMedia/ads/adstream_lx.ads/www.heise.de/Homepage/546525088/Middle/OasDefault/1x1-bei-he-zaehler-hp/zaehler.gif/3230302e32392e3136302e3134?_RM_EMPTY_" width="1" height="1"></td> + </tr> + </table> + </td> + </tr> + </table> + + </div> + <!-- Mittelteil --> + <table border="0" cellspacing="0" cellpadding="0" width="100%"> + <tr class="druck"> + <td width="13" class="rand_oben"><img src="https://www.dillo.org/icons/ho/1pix.gif" width="1" height="1" hspace="6" alt=""></td> + <td width="100%" class="rand_oben"><img src="https://www.dillo.org/icons/ho/1pix.gif" width="1" height="1" hspace="200" alt=""></td> + <td width="7" class="rand_oben"><img src="https://www.dillo.org/icons/ho/1pix.gif" width="1" height="1" hspace="3" alt=""></td> + <td class="rand_oben2"><img src="https://www.dillo.org/icons/ho/1pix.gif" width="1" height="1" hspace="70" alt=""></td> + <td width="7" class="rund"><img src="https://www.dillo.org/icons/ho/1pix.gif" width="1" height="1" hspace="3" alt="" vspace="5"></td> + <td width="1" valign="top" rowspan="2" class="wallpaper"> + + <div class="skyscraper"> + <table border="0"> + <tr align="center"> + + <td><!--OAS AD="Left1"--> +<!-- www.heise.de/Homepage@Left1 --></td> + </tr> +</table> + + </div> + </td> + </tr> + <tr> + <td class="druck"></td> + <td width="100%" valign="top"> + + <HEISETEXT> + + + + +<!-- Logo --> +<table border="0" cellspacing="0" cellpadding="0" width="100%"> + <tr> + <td width="120"><a href="https://www.dillo.org/newsticker/"><img src="https://www.dillo.org/icons/ho/news_logo.gif" alt="news" width="120" height="30" border="0"></a></td> + +<!-- *** tmpl *** --> + <td width="100%" nowrap valign="bottom"><b class="size120">Meldungen des Tages</b></td> + <td align="right" valign="bottom">15.01.2008</td> + + + + </tr> +</table> + + +<!-- Liste der Meldungen --> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101841">Deutsches Glücksspielmonopol erneut unter Beschuss</a></h3> +<p>Der europäische Verband der Glücksspiel- und Wettbranche (EGBA) hat bei der EU-Kommission Beschwerde gegen das im Lotto-Staatsvertrag festgeschriebene Verbot von Internet-Wetten und -Glücksspielen in Deutschland eingereicht. <a href="https://www.dillo.org/newsticker/meldung/101841">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101839">Kanadischer Mobilfunker Telus überlegt Wechsel von CDMA zu GSM</a></h3> +<p>Trotz Umbaukosten von einer halben Milliarde kanadischer Dollar könnte sich der Umstieg für Telus lohnen: Den Betrag nimmt der konkurrierende GSM-Anbieter Rogers Wireless jedes Jahr allein über Roaming-Leistungen für Kanada-Besucher ein. <a href="https://www.dillo.org/newsticker/meldung/101839">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101840">Macworld: Apple bringt "das dünnste Notebook der Welt" [2. Update]</a></h3> +<p>Das "MacBook air" ist an der dünnsten Stelle 0,4 und an der dicksten Stelle 1,9 cm dick und mal wieder ein Augenschmaus. Es wiegt 1,3 Kilogramm. <a href="https://www.dillo.org/newsticker/meldung/101840">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101838">Marktforscher empfehlen OOXML gegenüber ODF</a></h3> +<p>Analysten der Burton Group gehen davon aus, dass sich Microsofts Dokumentenformat gegenüber dem offenen ISO-Standard mittelfristig durchsetzt, da letzterer komplexen Unternehmensanforderungen nicht gewachsen sei. <a href="https://www.dillo.org/newsticker/meldung/101838">mehr...</a></p> +<table border="0" cellspacing="0" cellpadding="0" align="center" class="druck"><tr><td><!--OAS AD="Middle1"--> +<span style="font-family: Arial, Helvetica, sans-serif; color: Black; font-size:7pt; font-weight: normal; text-align: left;">Anzeige</span><br>
+
+<SCRIPT language='JavaScript1.1' SRC="http://ad.de.doubleclick.net/adj/N2256.DE_Heise.de/B2664477.3;sz=300x250;ord=2008.01.15.22.40.06?">
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="http://ad.de.doubleclick.net/jump/N2256.DE_Heise.de/B2664477.3;sz=300x250;ord=2008.01.15.22.40.06?">
+<IMG SRC="http://ad.de.doubleclick.net/ad/N2256.DE_Heise.de/B2664477.3;sz=300x250;ord=2008.01.15.22.40.06?" BORDER=0 WIDTH=300 HEIGHT=250 ALT="Click Here"></A>
+</NOSCRIPT>
+
+
+<IMG SRC="http://oas.wwwheise.de/RealMedia/ads/adstream_lx.ads/www.heise.de/Homepage/443499469/Middle1/OasDefault/hp05_03hp_08/hp05_03hp_08_script.html/3230302e32392e3136302e3134?_RM_EMPTY_" WIDTH="1" HEIGHT="1" alt=""></td></tr></table> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101837">Macworld: Filme ausleihen mit iTunes</a></h3> +<p>Wie erwartet, erweitert Apple heute in den USA den iTunes Store um die Möglichkeit, Filme auszuleihen. Die Streaming-Box Apple TV erfährt dafür ein Firmware-Update. <a href="https://www.dillo.org/newsticker/meldung/101837">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101836">Bericht: USA wollen Internetkontrolle deutlich ausbauen</a></h3> +<p>Laut einem Magazinbericht arbeitet US-Geheimdienstkoordinator Mike McConnell an einem Plan, der den Diensten eine Kontrolle sämtlicher E-Mails, Dateiübertragungen oder Suchanfragen ermöglichen soll. <a href="https://www.dillo.org/newsticker/meldung/101836">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101826">Studie: Opteron-Server effizienter als Xeons mit Fully-Buffered-DIMMs</a></h3> +<p>AMD verweist auf eine Untersuchung einer Beratungsfirma, nach der Server mit Intels Quad-Core-Xeons zwar etwas schneller arbeiten als etwa gleich teure Quad-Core-Opteron-Systeme, aber mehr Leistung aufnehmen. <a href="https://www.dillo.org/newsticker/meldung/101826">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101819">Affe bewegt Roboter durch Gedanken</a></h3> +<p>Mit seinen Gedankenimpulsen hat ein Affe in einem US-Labor einen Roboter in Japan zum Laufen gebracht. Die verantwortlichen Forscher erhoffen sich von dem Experiment Erkenntnisse für die sie mentale Steuerung zum Beispiel von Exo-Prothesen. <a href="https://www.dillo.org/newsticker/meldung/101819">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101835">Macworld: Neue Firmware für iPhone und iPod Touch, SDK für Drittentwickler</a></h3> +<p>Noch heute sollen Software-Updates für iPhone und iPod Touch mit einigen interessanten neuen Funktionen erscheinen. <a href="https://www.dillo.org/newsticker/meldung/101835">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101820">Intel: Neue Stromsparklassen für Mobilprozessoren</a></h3> +<p>Branchenberichten zufolge wird Intel mit den nächsten Mobilplattform Montevina neue TDP-Klassen für seine Mobilprozessoren einführen. <a href="https://www.dillo.org/newsticker/meldung/101820">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101829">Geschäft mit Überwachungs-Flugdrohnen boomt</a></h3> +<p>Bei den Olympischen Spielen in Peking sollen sie zum Einsatz kommen, Sachsen will sie als Mittel zur Bekämpfung von gewalttätigen Fußballfans nutzen: Mit Kameras ausgestattete Hightech-Minihubschrauber, die kaum etwas unbeobachtet lassen. <a href="https://www.dillo.org/newsticker/meldung/101829">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101834">Macworld: Fünf Millionen Leoparden, externe Backup-Platte in WLAN-Router</a></h3> +<p>Auf der Eröffnungsrede zur Macworld in San Francisco freute sich Steve Jobs über ein außergewöhnliches Jahr für Apple und kündigte einen praktischen WLAN-Router mit Platte an, der Macs als unkompliziertes Backup-Endgerät zur Verfügung steht. <a href="https://www.dillo.org/newsticker/meldung/101834">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101823">Externe Festplatten mit RFID-Zugriffsschutz und Datenverschlüsselung</a></h3> +<p>Die USB-Festplattengehäuse für 2,5"-Festplatten von easyNova und Sharkoon bieten eine Zugriffskontrolle per RFID und verschlüsseln Daten mit 128-Bit-AES. <a href="https://www.dillo.org/newsticker/meldung/101823">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101832">W3C verabschiedet Anfragesprache SPARQL</a></h3> +<p>Mit der "SPARQL Query Language for RDF" als Recommendation hat das World Wide Web Consortium eine Sprachspezifikation verabschiedet, die den Zugriff auf RDF-Daten, das W3C-Framework fürs semantische Web, realisieren soll. <a href="https://www.dillo.org/newsticker/meldung/101832">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101822">Umsatz des deutschen Halbleitermarkts schrumpft 2007 um vier Prozent</a></h3> +<p>Als Grund für den Umsatzrückgang weist der Elektronikverband ZVEI auf den starken Euro-Kurs hin. Die Auftragslage sei dagegen stabil. <a href="https://www.dillo.org/newsticker/meldung/101822">mehr...</a></p> +<table border="0" cellspacing="0" cellpadding="0" align="center" class="druck"><tr><td><!--OAS AD="Middle3"--> +<span style="font-family: Arial, Helvetica, sans-serif; color: Black; font-size:7pt; font-weight: normal; text-align: left;">Anzeige</span><br>
+<script type='text/javascript'><!--//<![CDATA[
+ var m3_u = (location.protocol=='https:'?'https://click.just4business.de/www/delivery/ajs.php':'http://click.just4business.de/www/delivery/ajs.php');
+ var m3_r = Math.floor(Math.random()*99999999999);
+ if (!document.MAX_used) document.MAX_used = ',';
+ document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
+ document.write ("?zoneid=1");
+ document.write ('&cb=' + m3_r);
+ if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
+ document.write ("&loc=" + escape(window.location));
+ if (document.referrer) document.write ("&referer=" + escape(document.referrer));
+ if (document.context) document.write ("&context=" + escape(document.context));
+ if (document.mmm_fo) document.write ("&mmm_fo=1");
+ document.write ("'><\/scr"+"ipt>");
+//]]>--></script>
+<IMG SRC="http://oas.wwwheise.de/RealMedia/ads/adstream_lx.ads/www.heise.de/Homepage/414419848/Middle3/OasDefault/miwiki_promo05_42hp_07/mwiki_promo05_42hp_07_neu.html/3230302e32392e3136302e3134?_RM_EMPTY_" WIDTH="1" HEIGHT="1" alt=""></td></tr></table> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101831">EMI bestätigt Stellenabbau</a></h3> +<p>Das britische Major-Label EMI kündigt eine umfassende Restrukturierung an und will unter anderem mit einem massiven Stellenabbau rund 200 Millionen Pfund jährlich einsparen. <a href="https://www.dillo.org/newsticker/meldung/101831">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101830">Kontrollvakuum bei Europol befürchtet</a></h3> +<p>Die Liberalen im EU-Parlament schlagen Alarm: Sollte die geplante Befugniserweiterung der europäischen Polizeibehörde diese Woche freigegeben werden, stünden die Eurocops nicht unter parlamentarischer oder gerichtlicher Aufsicht. <a href="https://www.dillo.org/newsticker/meldung/101830">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101828">Emtec kündigt Austausch fehlerhafter USB-Sticks an</a></h3> +<p>Betroffene USB-Sticks aus der C150-Serie, die "einen Produktionsfehler" aufweisen, will der Hersteller problemlos umtauschen. Die entsprechenden Chargen würden zurückgerufen und künftig eine verbesserte Qualitätssicherung eingeführt. <a href="https://www.dillo.org/newsticker/meldung/101828">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101827">Massive Kritik an Schließung des Bochumer Nokia-Werks</a></h3> +<p>Politiker und Branchenkenner kritisieren die Entscheidung des finnischen Handyherstellers, das Werk in Bochum zu schließen. <a href="https://www.dillo.org/newsticker/meldung/101827">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101813">EMC bietet Speicher-Array mit Flash-Disks</a></h3> +<p>Das High-End-Speichersystem Symmetrix DMX-4 des amerikanischen Storage-Herstellers speichert Daten auf Wunsch nicht nur auf Fibre-Channel- und Serial-ATA-Festplatten, sondern auch auf Flash-Disks. <a href="https://www.dillo.org/newsticker/meldung/101813">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101816">Microsoft will das Einkaufserlebnis anreichern</a></h3> +<p>Der Softwarekonzern ist an einem Projekt beteiligt, bei dem Einkaufswagen mit LC-Displays bestückt werden. Diese sollen den Kunden beim Einkaufen helfen und ihnen Werbung nahe bringen. <a href="https://www.dillo.org/newsticker/meldung/101816">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101815">Beiträge für Samba-Konferenz gesucht</a></h3> +<p>Für die im April in Göttingen stattfindende Samba Experience läuft noch bis Ende Januar der Call for Papers. <a href="https://www.dillo.org/newsticker/meldung/101815">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101810">Open-Source-Infodienst Ohloh gibt eigene Quellen frei</a></h3> +<p>Das Open-Source-Netzwerk, das Informationen über Projekte sammelt und bereitstellt, will die Quelltexte der eigenen Technik in der kommenden Zeit unter die GPL stellen. <a href="https://www.dillo.org/newsticker/meldung/101810">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101807">Hama ruft manipulierte USB-Sticks zurück [Update]</a></h3> +<p>Der Importeur hat alle Lagerbestände überprüft. Dabei tauchte weitere manipulierte Ware auf. Datenfressende USB-Speicher finden sich jetzt auch in den Regalen der großen Elektromärkte Saturn und Media Markt. <a href="https://www.dillo.org/newsticker/meldung/101807">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101795">MySpace und 49 US-Generalstaatsanwälte einigen sich auf Sicherheitsprinzipien</a></h3> +<p>Die Vereinbarung zwischen dem Online-Sozialnetzwerk und fast allen US-Bundesstaaten sieht unter anderem den Einsatz von Werkzeugen zur Alters- und Identitätsverifikation vor. <a href="https://www.dillo.org/newsticker/meldung/101795">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101805">Erste falsche Anti-Spyware-Lösung für den Mac</a></h3> +<p>Für Windows-Nutzer ein lange bekanntes Ärgernis, für Mac-Nutzer ein Novum: Eine Anti-Spyware, die nur Falschmeldungen produziert und an das Geld der Anwender will. <a href="https://www.dillo.org/newsticker/meldung/101805">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101803">T-Systems betreibt Netz für Deutsche Rentenversicherung</a></h3> +<p>Der Auftrag enthält die Vernetzung von 700 Standorten der Rentenversicherung und von 4000 Außendienstmitarbeitern sowie von sechs Rechenzentren, in denen die Rentendaten deutscher Bürger bearbeitet werden. <a href="https://www.dillo.org/newsticker/meldung/101803">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101811">Debatte um fragwürdige Methoden im Domaingeschäft</a></h3> +<p>"Tasting" und "Frontrunning" sorgen für Unruhe in der Domain-Branche, die einen Vertrauensverlust fürchtet. Experten streiten, ob die fragwürdigen Praktiken eher die Ausnahme oder die Regel sind. <a href="https://www.dillo.org/newsticker/meldung/101811">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101809">Xerox gibt sich ein neues Gesicht</a></h3> +<p>Mit einer gründlich renovierten Corporate Identity startet der traditionsreiche Hersteller in das Jahr 2008. Der Fokus auf Innovationen und Kundennähe soll sich im Erscheinungsbild von Xerox widerspiegeln, auch auf der CeBIT. <a href="https://www.dillo.org/newsticker/meldung/101809">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101796">Toshiba startet HD-DVD-Schlussverkauf in den USA</a></h3> +<p>Nur wenige Tage, nachdem Warner die HD DVD fallengelassen hat, senkt Toshiba die Preise seiner HD-DVD-Player drastisch. Kaum teurer als herkömmliche DVD-Player soll unter anderem die Upscaling-Option für DVDs in den Vordergrund gestellt werden. <a href="https://www.dillo.org/newsticker/meldung/101796">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101806">Bericht: US-Carrier Sprint Nextel plant weitere Entlassungen</a></h3> +<p>Der neue Chef des mit Gewinnrückgang und Kundenschwund kämpfenden Mobilfunkanbieters plant einem Bericht zufolge die Straffung der Organisation und weitere Entlassungen. <a href="https://www.dillo.org/newsticker/meldung/101806">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101791">Externes Serial ATA soll angeschlossene Geräte mit Strom versorgen</a></h3> +<p>Mit der Fertigung einer Spezifikation für Power over eSATA treibt die Serial ATA International Organization (SATA-IO) die Entwicklung der externen Serial-ATA-Schnittstelle voran. <a href="https://www.dillo.org/newsticker/meldung/101791">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101799">Ungewollte Fernkonfiguration für Heim-Router [Update]</a></h3> +<p>Mittels Cross-Site-Scripting-Lücken lassen sich Heim-Router über das UPnP-Interface von Außen umkonfigurieren. Dies funktioniert nicht nur über JavaScript, sondern auch über ActionScript in Flash-Applets. <a href="https://www.dillo.org/newsticker/meldung/101799">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101775">Österreichs Unternehmen wollen per E-Mail werben, aber keinen Spam bekommen</a></h3> +<p>72,6 Prozent der Unternehmen würden laut einer Umfrage gerne den "Erstkontakt" mit potenziellen Kunden und Geschäftspartnern vorzugsweise per E-Mail aufnehmen. Dabei weiß nicht einmal die Hälfte der Betriebe über die gesetzlichen Regeln Bescheid. <a href="https://www.dillo.org/newsticker/meldung/101775">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101797">Nokia verlagert Handy-Produktion von Deutschland nach Rumänien, Ungarn und Finnland</a></h3> +<p>Nur für rund 280 der insgesamt 2300 Mitarbeiter in zwei zum Verkauf stehenden Betriebseinheiten besteht laut Nokia derzeit konkrete Aussicht auf eine Weiterbeschäftigung. <a href="https://www.dillo.org/newsticker/meldung/101797">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101783">Freie Projektmanagement-Software OpenProj entwächst Beta-Stadium</a></h3> +<p>Die freie Projektverwaltung will eine günstige Alternative zum MS Project sein. <a href="https://www.dillo.org/newsticker/meldung/101783">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101786">Samsung steigert Umsatz und Gewinn</a></h3> +<p>Der südkoreanische Elektronikkonzern hat im vierten Quartal 2007 17,48 Billionen Won umgesetzt, 5 Prozent mehr als im Vergleichsquartal 2006. <a href="https://www.dillo.org/newsticker/meldung/101786">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101781">USA wollen mit Verbündeten internationale biometrische Datenbank einrichten</a></h3> +<p>An dem vom FBI initiierten Projekt "Server in the Sky" sollen die Daten von Terroristen, Kriminellen und Verdächtigen ausgetauscht werden. <a href="https://www.dillo.org/newsticker/meldung/101781">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101784">Online-Werbespezialist kritisiert profiloptimierte Reklame in sozialen Netzwerken</a></h3> +<p>Nugg.ad-Vorstand Stephan Noller glaubt, dass sich die Vermarkter nur begrenzt für genau abgestimmte Werbung interessieren. <a href="https://www.dillo.org/newsticker/meldung/101784">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101780">Nokia-Werk Bochum wird geschlossen [Update]</a></h3> +<p>Von der Verlagerung der Produktion nach Osteuropa sind 2300 Beschäftigte betroffen. <a href="https://www.dillo.org/newsticker/meldung/101780">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101779">Unternehmen investierten voriges Jahr 1,1 Milliarden Euro in Online-Werbung</a></h3> +<p>Im Laufe des vergangenen Jahres haben sich die Online-Bruttowerbeaufwendungen in Deutschland von 210 Millionen Euro im ersten Quartal auf 393 Millionen Euro im Schlussviertel gesteigert. <a href="https://www.dillo.org/newsticker/meldung/101779">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101772">Drupal-CMS schließt Sicherheitslücken</a></h3> +<p>Die Entwickler des quelloffenen Content-Management-Systems Drupal schließen mit neuen Versionen Cross-Site-Scripting-Lücken. Ein Zusatzmodul erlaubt sogar das Ausführen von fremdem Code auf dem Server. <a href="https://www.dillo.org/newsticker/meldung/101772">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101776">Schwachstelle in Such-Seite des Bundeskriminalamts</a></h3> +<p>Die Seite wies eine SQL-Injection-Lücke auf, über die ein Angreifer möglicherweise Zugriff auf die zugrunde liegende Datenbank gehabt hat. Das BKA hat den Server vorerst komplett vom Netz genommen. <a href="https://www.dillo.org/newsticker/meldung/101776">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101778">Ranghoher Polizist verteidigt österreichisches Sicherheitspolizeigesetz</a></h3> +<p>Im Kampf gegen die organisierte Kriminialität liege die Polizei zurück, sagte der im Bundeskriminalamt für Computer- und Netzwerkkriminalität zuständige Polizist, Chefinspektor Ernst Österreicher. <a href="https://www.dillo.org/newsticker/meldung/101778">mehr...</a></p> +<h3 class="anriss"> <a href="https://www.dillo.org/newsticker/meldung/101771">Cognos-Aktionäre stimmen Übernahme durch IBM zu</a></h3> +<p>Nach der Zustimmung der Aktionäre des Unternehmen müssen nun noch die kanadischen Gerichte ihren Segen geben. <a href="https://www.dillo.org/newsticker/meldung/101771">mehr...</a></p> + + +<!-- Überblick --> +<h4 align="right"> +Weitere Meldungen im News-<a href="https://www.dillo.org/newsticker/" class="weitere">Überblick</a> +</h4> + + +<!-- Newstipps --> +<p align="right" class="size80"> +Fehlt eine wichtige Nachricht? Geben Sie uns <a href="mailto:newstips@heise.de" class="weitere">Bescheid</a>! +</p> + + +<img src="https://www.dillo.org/icons/ho/00on.gif" border="0" width="1" height="1" alt=""> +<noscript> +<img src="https://www.dillo.org/icons/ho/00off.gif" border="0" width="1" height="1" alt=""> +</noscript> + + + </HEISETEXT> + + <div class="adbottom"> + <table align="center" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td><!--OAS AD="Bottom"--> +<!-- www.heise.de/Homepage@Bottom --></td> + </tr> +</table> + + </div> + + </td> + <td class="druck"></td> + <td valign="top" colspan="2" class="druck"> + <!-- Kaesten --> + + <table border="0" cellspacing="0" cellpadding="0" width="100%" class="rand_rechts"> + <tr> + <td> + + <!-- START+7TAGE --> + + <h4 class="umfrage_titel" align="center"><img src="https://www.dillo.org/ct/icons/umfrage.gif" width="130" height="20" alt="c't-Umfrage"></h4>
+<p class="umfrage_rand" align="center">
+<b><a href="https://www.dillo.org/ct/leserbefragung/notebook/" class="lk_blau">Notebook- Service</a></b><br>
+<b class="size80">Stimmt der Support?
+Wie verlief die Reparatur?</b></p> +<!-- Kein snippet fuer diesen Platz: 9(9) --> + + + + + + + + + <!-- ALLE ANDEREN --> + + <div class="teaser"> + + + +<!-- Reihenfolge fuer Dienstag --> + + <p> + <a href="https://www.dillo.org/tr/artikel/101257"><img src="https://www.dillo.org/bilder/101257/102/0" alt="" border="0" vspace="8"></a><br> + <b class="size80">Technology Review</b><br> + <a href="https://www.dillo.org/tr/artikel/101257"><b>Hallo, Roboterdino!</b></a><br> + <span class="size80">Update für verspielte Geeks: Der Nachfolger des populären Kuschelroboters Furby ist jetzt verfügbar.</span> + </p> + + + + + + <p> + <a href="https://www.dillo.org/autos/artikel/4992"><img src="https://www.dillo.org/autos/bilder/4992/2" alt="" border="0" vspace="8"></a><br> + <b class="size80">heise Autos</b><br> + <a href="https://www.dillo.org/autos/artikel/4992"><b>Alu auf Eschenholz</b></a><br> + <span class="size80">Wir haben im englischen Malvern Link beim Morgan-Bau zugesehen</span> + </p> + + + + + <p> + <a href="https://www.dillo.org/mobil/artikel/101477"><img src="https://www.dillo.org/bilder/101477/102/0" alt="" border="0" vspace="8"></a><br> + <b class="size80">heise mobil</b><br> + <a href="https://www.dillo.org/mobil/artikel/101477"><b>Berühr mich!</b></a><br> + <span class="size80">iPhone-Konkurrent Samsung "Qbowl"</span> + </p> + + + + + <p>
+<a href="https://www.dillo.org/software/download/special/unsere_besten_2/15_1"><img src="https://www.dillo.org/software/specials/besten2_eee.jpg" alt="" border="0" vspace="8"></a><br>
+<b class="size80">Software-Verzeichnis</b><br>
+<b><a href="https://www.dillo.org/software/download/special/unsere_besten_2/15_1">Unsere Besten (2)</a></b><br>
+<span class="size80">Themen-Special: Office, Sicherheit, Systemsoftware</span>
+</p> + + + + + <p> <a href="https://www.dillo.org/ix/artikel/2008/01/152/">
+<img src="https://www.dillo.org/ix/bilder/surfer_ho.gif" alt="surfer" border="0" vspace="8" width="86" height="100"></a><br>
+<b class="size80">iX 1/2008:</b><br>
+<a href="https://www.dillo.org/ix/artikel/2008/01/152/"><b>Internet-Infos</b></a><br>
+<span class="size80">Der Traum vom Fliegen
+</span></p> + + + +<p> +<a href="https://www.dillo.org/ct/"><img src="https://www.dillo.org/ct/08/02/118/aufmacher_ho.gif" alt="c't-Aufmacher" border="0" vspace="8" width="100" height="100"></a><br> +<b class="size80">c't 2/2008:</b><br> +<a href="https://www.dillo.org/ct/#1"><b>Effektive Spam-Abwehr</b></a><br> +<span class="size80">Den E-Mail-Kollaps verhindern</span></p> + + + <p> + <a href="https://www.dillo.org/security/artikel/101145"><img src="https://www.dillo.org/bilder/101145/102/0" alt="" border="0" vspace="8"></a><br> + <b class="size80">heise Security</b><br> + <a href="https://www.dillo.org/security/artikel/101145"><b>2008 durch die Glaskugel</b></a><br> + <span class="size80">Der Rückblick auf die wichtigsten Ereignisse des kommenden Jahres.</span> + </p> + + + + + <p> + <a href="https://www.dillo.org/open/artikel/101630"><img src="https://www.dillo.org/bilder/101630/102/0" alt="" border="0" vspace="8"></a><br> + <b class="size80">heise open</b><br> + <a href="https://www.dillo.org/open/artikel/101630"><b>Open Source 2008</b></a><br> + <span class="size80">Trends, Voraussagen, Herausforderungen</span> + </p> + + + +<p> +<a href="https://www.dillo.org/tp/default.html"><img src="https://www.dillo.org/tp/r4/icons/heise/wissenschaft.gif" border="0" vspace="8"></a><br> +<a href="https://www.dillo.org/tp/blogs/3/101717"><b> Lebensspanne um das Zehnfache verlängert</b></a><br> +<span class="size80">Durch Veränderung von zwei Genen wird das Altern bei Hefezellen ausgebremst.</span> +</p> + + <p>
+ <a href="https://www.dillo.org/resale/artikel/100325"><img src="https://www.dillo.org/resale/icons/teaser/paragraph.gif" alt="" border="0" vspace="5" width="125" height="80"></a><br>
+ <b class="size80">heise resale</b><br>
+ <a href="https://www.dillo.org/resale/artikel/100325"><b>Verloren im Belehrungs-<br>dschungel</b></a><br>
+ <span class="size80">Neuer Muster-<br>Widerrufstext</span>
+</p> + + + + + <p> + <a href="https://www.dillo.org/netze/artikel/99963"><img src="https://www.dillo.org/bilder/99963/102/0" alt="" border="0" vspace="8"></a><br> + <b class="size80">heise Netze</b><br> + <a href="https://www.dillo.org/netze/artikel/99963"><b>TR-069 erklärt</b></a><br> + <span class="size80">Wie Router fast allein<BR>ins Netz finden</span> + </p> + + + + + + + </div> + + + + <!-- NEWSBEREICH, NICHT MELDUNG --> + +<h4 class="kasten_news_titel">Top-Meldungen</h4> + + + + + <p class="kasten_news"> + <a href="https://www.dillo.org/newsticker/meldung/101797">Nokia verlagert Handy-Produktion von Deutschland nach Rumänien, Ungarn und Finnland</a> + </p> + + <p class="kasten_news"> + <a href="https://www.dillo.org/newsticker/meldung/101714">Bericht: Premiere setzt auf neues Verschlüsselungssystem [Update]</a> + </p> + + <p class="kasten_news"> + <a href="https://www.dillo.org/newsticker/meldung/101674">TV-Fernbedienung lässt Züge entgleisen</a> + </p> + + <p class="kasten_news"> + <a href="https://www.dillo.org/newsticker/meldung/101641">Präparierte Webseite schaltet Firewall im Router aus</a> + </p> + + + + <h4 class="kasten_software_titel"><a href="https://www.dillo.org/software/">Neu zum Download</a></h4> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/jamwiki/50835" title="Auf Java basierende Wiki-Engine mit optionaler Datenbank und Wikipedia-kompatibler Syntax; bietet zahlreiche Funktionen von MediaWiki und unterstützt nahezu jeden Anwendungsserver, der mit JDK 1.4 oder höher läuft">JAMWiki</a> +</p> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/free_uninstaller/50842" title="Ersetzt die in Windows integrierte Software-Deinstallation und bietet erweiterte Funktionen wie das Anzeigen verschiedener Informationen zum betreffenden Programm, das Entfernen ungültiger Einträge aus der Liste aller Programme sowie das Hervorheben von Systemprogrammen durch eine andere Farbe">Free Uninstaller</a> +</p> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/photo_lux_image_viewer/23649" title="Bildbetrachter und -editor für alle gängigen Bildformate; wertet EXIF- und IPTC-Informationen aus und erzeugt Slideshows">Photo-Lux Image Viewer</a> +</p> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/exporttopdf_.net_assembly/50775" title=".NET-Komponente für Entwickler zur PDF-Konvertierung; unterstützt als Datenquellen unter anderem CSV, Excel, Access, MDB sowie das DataTable-Objekt in .NET">ExportToPDF .NET ass...</a> +</p> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/smartserialmail/17734" title="Verschickt E-Mails an eine Liste von Empfängern, HTML und Text-Format sind möglich; die Mails werden über bis zu 64 Verbindungen gleichzeitig versandt">SmartSerialMail</a> +</p> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/lotusnotesrecovery/33207" title="Versucht den Inhalt und die Metadaten beschädigter oder gelöschter NSF-Dateien zu retten; kann keine Applets, Style-Sheets, OLE-Objekte oder Datei-Anhänge wiederherstellen">LotusNotesRecovery</a> +</p> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/access_lock/14049" title="Sperrt den per Passwort Zugang zum Desktop">Access Lock</a> +</p> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/open_video_joiner/19962" title="Verbindet mehrere Video-Dateien zu einer einzigen; unterstützt MPEG-, AVI-, ASF- und WMV-Dateien">Open Video Joiner</a> +</p> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/omnifocus/50845" title="Einfache Projekt- und Aufgabenplanung nach der GTD-Methode (Getting Things Done); speichert Gedanken und Aufgaben direkt ab, verwaltet sie und überführt sie in To-do-Items, die unter anderem mit iCal synchronisiert werden können">OmniFocus</a> +</p> +<p class="kasten_software"> +<a href="https://www.dillo.org/software/download/quicktunes/50887" title="Bietet einen Schnellzugriff auf und die Steuerung von iTunes via Menüleiste, ohne das Hauptfenster öffnen oder schließen zu müssen, und zeigt Infos zum aktuellen Song in der Leiste an; als Besonderheit sagt das Tool vor dem Abspielen den Interpreten und Titel des Liedes an">QuickTunes</a> +</p> +<p class="kasten_software"><strong><a href="https://www.dillo.org/software/">20.880 Programme im Software-Verzeichnis</a></strong></p> + + + + + </td> + </tr> +</table> + + + </td> + </tr> + </table> + </td> + </tr> +</table> +</div> + +<div style="display: inline;"><img src="https://www.dillo.org/defeckerellyinesteetshygolingshetrica/" width="1" height="1" alt=""></div> + +<!-- IVW-Pixel --> + +<div style="display: inline;"><img src="https://www.dillo.org/ivw-bin/ivw/CP/" width="1" height="1" alt=""></div> +<script type="text/javascript"> <!-- +var IVW="<div style=\"display: inline;\"><img src=\"http://heise.ivwbox.de/cgi-bin/ivw/CP/homepage;/?r="; +document.write(IVW + "&d=" + (Math.random()*100000) + "\" width=\"1\" height=\"1\" alt=\"\"></div>"); +// --> +</script> +<noscript> +<div style="display: inline;"><img src="http://heise.ivwbox.de/cgi-bin/ivw/CP/homepage;/?r=&d=89971.7110682335" width="1" height="1" alt=""></div> +</noscript> +<script type="text/javascript"> <!-- +window.onunload=function() {}; +// --> +</script> + + + +<p id="navi_bottom"> + Copyright © 2008 <a href="http://www.heise-medien.de/zeitschriften/" title="Heise Zeitschriften Verlag">Heise Zeitschriften Verlag</a><br> + <span class="international"> + International: <a href="http://www.heise-security.co.uk/" title="heise Security UK">heise Security UK</a>, <a href="http://www.heise-online.pl/" title="heise online Polska">heise online Polska</a>, <a href="http://www.heise-online.pl/security/" title="heise Security Polska">heise Security Polska</a> + </span> + <span class="rechts"> + + <a href="https://www.dillo.org/privacy/" title="Datenschutzhinweis heise online">Datenschutzhinweis</a> + <a href="https://www.dillo.org/kontakt/impressum.shtml" title="Impressum heise online">Impressum</a> + <a href="https://www.dillo.org/kontakt/" title="Kontakt heise online">Kontakt</a> + + <a href="http://www.plusline.de">Hosted by Plus.line</a> + </span> +</p> + +</body> +</html> + diff --git a/old/test/tables/index.html b/old/test/tables/index.html new file mode 100644 index 0000000..ffc1224 --- /dev/null +++ b/old/test/tables/index.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/tables</title> + </head> + <body> +<h1>Index of /test/tables</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=D.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="MList.html">MList.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">8.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="heise.html">heise.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 46K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz.html">luz.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz5.html">luz5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">945 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="m.html">m.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.1.html">per.1.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">740 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.2.html">per.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">491 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.3.html">per.3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">790 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.4.html">per.4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">324 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.5.html">per.5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">320 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.6.html">per.6.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">597 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.7.html">per.7.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">763 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.bak.html">per.bak.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">549 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.html">per.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">180 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per1.html">per1.html</a></td><td align="right">2008-01-19 14:47 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per2.html">per2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per3.html">per3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per4.html">per4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">5.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="rbowline.png">rbowline.png</a></td><td align="right">2008-01-19 14:28 </td><td align="right">319 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t.html">t.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">390 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/compressed.gif" alt="[ ]"></td><td><a href="tables-tst.tar.gz">tables-tst.tar.gz</a></td><td align="right">2008-01-19 15:05 </td><td align="right"> 30K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test6.2.html">test6.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">2.4K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/tables/index.html?C=D;O=A.html b/old/test/tables/index.html?C=D;O=A.html new file mode 100644 index 0000000..860dbff --- /dev/null +++ b/old/test/tables/index.html?C=D;O=A.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/tables</title> + </head> + <body> +<h1>Index of /test/tables</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=D.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="MList.html">MList.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">8.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="heise.html">heise.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 46K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz.html">luz.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz5.html">luz5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">945 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="m.html">m.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.1.html">per.1.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">740 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.2.html">per.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">491 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.3.html">per.3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">790 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.4.html">per.4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">324 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.5.html">per.5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">320 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.6.html">per.6.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">597 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.7.html">per.7.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">763 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.bak.html">per.bak.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">549 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.html">per.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">180 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per1.html">per1.html</a></td><td align="right">2008-01-19 14:47 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per2.html">per2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per3.html">per3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per4.html">per4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">5.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="rbowline.png">rbowline.png</a></td><td align="right">2008-01-19 14:28 </td><td align="right">319 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t.html">t.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">390 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/compressed.gif" alt="[ ]"></td><td><a href="tables-tst.tar.gz">tables-tst.tar.gz</a></td><td align="right">2008-01-19 15:05 </td><td align="right"> 30K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test6.2.html">test6.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">2.4K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/tables/index.html?C=D;O=D.html b/old/test/tables/index.html?C=D;O=D.html new file mode 100644 index 0000000..9aa9b29 --- /dev/null +++ b/old/test/tables/index.html?C=D;O=D.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/tables</title> + </head> + <body> +<h1>Index of /test/tables</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test6.2.html">test6.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">2.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/compressed.gif" alt="[ ]"></td><td><a href="tables-tst.tar.gz">tables-tst.tar.gz</a></td><td align="right">2008-01-19 15:05 </td><td align="right"> 30K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t.html">t.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">390 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="rbowline.png">rbowline.png</a></td><td align="right">2008-01-19 14:28 </td><td align="right">319 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per4.html">per4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">5.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per3.html">per3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per2.html">per2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per1.html">per1.html</a></td><td align="right">2008-01-19 14:47 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.html">per.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">180 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.bak.html">per.bak.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">549 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.7.html">per.7.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">763 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.6.html">per.6.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">597 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.5.html">per.5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">320 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.4.html">per.4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">324 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.3.html">per.3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">790 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.2.html">per.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">491 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.1.html">per.1.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">740 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="m.html">m.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz5.html">luz5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">945 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz.html">luz.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="heise.html">heise.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 46K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="MList.html">MList.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">8.6K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/tables/index.html?C=M;O=A.html b/old/test/tables/index.html?C=M;O=A.html new file mode 100644 index 0000000..caf3724 --- /dev/null +++ b/old/test/tables/index.html?C=M;O=A.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/tables</title> + </head> + <body> +<h1>Index of /test/tables</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=D.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="heise.html">heise.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 46K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz.html">luz.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz5.html">luz5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">945 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.1.html">per.1.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">740 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.2.html">per.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">491 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.3.html">per.3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">790 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.4.html">per.4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">324 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.5.html">per.5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">320 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.6.html">per.6.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">597 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.7.html">per.7.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">763 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.bak.html">per.bak.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">549 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.html">per.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">180 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per2.html">per2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per3.html">per3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per4.html">per4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">5.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="rbowline.png">rbowline.png</a></td><td align="right">2008-01-19 14:28 </td><td align="right">319 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t.html">t.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">390 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test6.2.html">test6.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">2.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="MList.html">MList.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">8.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="m.html">m.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per1.html">per1.html</a></td><td align="right">2008-01-19 14:47 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/compressed.gif" alt="[ ]"></td><td><a href="tables-tst.tar.gz">tables-tst.tar.gz</a></td><td align="right">2008-01-19 15:05 </td><td align="right"> 30K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/tables/index.html?C=M;O=D.html b/old/test/tables/index.html?C=M;O=D.html new file mode 100644 index 0000000..ea0d74e --- /dev/null +++ b/old/test/tables/index.html?C=M;O=D.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/tables</title> + </head> + <body> +<h1>Index of /test/tables</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/compressed.gif" alt="[ ]"></td><td><a href="tables-tst.tar.gz">tables-tst.tar.gz</a></td><td align="right">2008-01-19 15:05 </td><td align="right"> 30K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per1.html">per1.html</a></td><td align="right">2008-01-19 14:47 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="m.html">m.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="MList.html">MList.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">8.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test6.2.html">test6.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">2.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t.html">t.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">390 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="rbowline.png">rbowline.png</a></td><td align="right">2008-01-19 14:28 </td><td align="right">319 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per4.html">per4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">5.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per3.html">per3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per2.html">per2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.html">per.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">180 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.bak.html">per.bak.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">549 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.7.html">per.7.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">763 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.6.html">per.6.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">597 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.5.html">per.5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">320 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.4.html">per.4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">324 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.3.html">per.3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">790 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.2.html">per.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">491 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.1.html">per.1.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">740 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz5.html">luz5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">945 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz.html">luz.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="heise.html">heise.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 46K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/tables/index.html?C=N;O=A.html b/old/test/tables/index.html?C=N;O=A.html new file mode 100644 index 0000000..ffc1224 --- /dev/null +++ b/old/test/tables/index.html?C=N;O=A.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/tables</title> + </head> + <body> +<h1>Index of /test/tables</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=D.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="MList.html">MList.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">8.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="heise.html">heise.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 46K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz.html">luz.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz5.html">luz5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">945 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="m.html">m.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.1.html">per.1.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">740 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.2.html">per.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">491 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.3.html">per.3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">790 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.4.html">per.4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">324 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.5.html">per.5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">320 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.6.html">per.6.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">597 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.7.html">per.7.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">763 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.bak.html">per.bak.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">549 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.html">per.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">180 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per1.html">per1.html</a></td><td align="right">2008-01-19 14:47 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per2.html">per2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per3.html">per3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per4.html">per4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">5.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="rbowline.png">rbowline.png</a></td><td align="right">2008-01-19 14:28 </td><td align="right">319 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t.html">t.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">390 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/compressed.gif" alt="[ ]"></td><td><a href="tables-tst.tar.gz">tables-tst.tar.gz</a></td><td align="right">2008-01-19 15:05 </td><td align="right"> 30K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test6.2.html">test6.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">2.4K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/tables/index.html?C=N;O=D.html b/old/test/tables/index.html?C=N;O=D.html new file mode 100644 index 0000000..9aa9b29 --- /dev/null +++ b/old/test/tables/index.html?C=N;O=D.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/tables</title> + </head> + <body> +<h1>Index of /test/tables</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test6.2.html">test6.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">2.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/compressed.gif" alt="[ ]"></td><td><a href="tables-tst.tar.gz">tables-tst.tar.gz</a></td><td align="right">2008-01-19 15:05 </td><td align="right"> 30K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t.html">t.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">390 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="rbowline.png">rbowline.png</a></td><td align="right">2008-01-19 14:28 </td><td align="right">319 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per4.html">per4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">5.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per3.html">per3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per2.html">per2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per1.html">per1.html</a></td><td align="right">2008-01-19 14:47 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.html">per.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">180 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.bak.html">per.bak.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">549 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.7.html">per.7.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">763 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.6.html">per.6.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">597 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.5.html">per.5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">320 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.4.html">per.4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">324 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.3.html">per.3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">790 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.2.html">per.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">491 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.1.html">per.1.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">740 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="m.html">m.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz5.html">luz5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">945 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz.html">luz.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="heise.html">heise.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 46K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="MList.html">MList.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">8.6K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/tables/index.html?C=S;O=A.html b/old/test/tables/index.html?C=S;O=A.html new file mode 100644 index 0000000..272b3fa --- /dev/null +++ b/old/test/tables/index.html?C=S;O=A.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/tables</title> + </head> + <body> +<h1>Index of /test/tables</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=D.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.html">per.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">180 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="rbowline.png">rbowline.png</a></td><td align="right">2008-01-19 14:28 </td><td align="right">319 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.5.html">per.5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">320 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.4.html">per.4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">324 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t.html">t.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">390 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.2.html">per.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">491 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.bak.html">per.bak.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">549 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.6.html">per.6.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">597 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.1.html">per.1.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">740 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.7.html">per.7.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">763 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.3.html">per.3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">790 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz5.html">luz5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">945 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per1.html">per1.html</a></td><td align="right">2008-01-19 14:47 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test6.2.html">test6.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">2.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per2.html">per2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per3.html">per3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="m.html">m.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per4.html">per4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">5.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="MList.html">MList.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">8.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/compressed.gif" alt="[ ]"></td><td><a href="tables-tst.tar.gz">tables-tst.tar.gz</a></td><td align="right">2008-01-19 15:05 </td><td align="right"> 30K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz.html">luz.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="heise.html">heise.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 46K</td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/tables/index.html?C=S;O=D.html b/old/test/tables/index.html?C=S;O=D.html new file mode 100644 index 0000000..4bce259 --- /dev/null +++ b/old/test/tables/index.html?C=S;O=D.html @@ -0,0 +1,36 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> + <head> + <title>Index of /test/tables</title> + </head> + <body> +<h1>Index of /test/tables</h1> + <table> + <tr><th valign="top"><img src="../../icons/blank.gif" alt="[ICO]"></th><th><a href="index.html%3FC=N%3BO=A.html">Name</a></th><th><a href="index.html%3FC=M%3BO=A.html">Last modified</a></th><th><a href="index.html%3FC=S%3BO=A.html">Size</a></th><th><a href="index.html%3FC=D%3BO=A.html">Description</a></th></tr> + <tr><th colspan="5"><hr></th></tr> +<tr><td valign="top"><img src="../../icons/back.gif" alt="[PARENTDIR]"></td><td><a href="../../test.html">Parent Directory</a></td><td> </td><td align="right"> - </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="heise.html">heise.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 46K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz.html">luz.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right"> 34K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/compressed.gif" alt="[ ]"></td><td><a href="tables-tst.tar.gz">tables-tst.tar.gz</a></td><td align="right">2008-01-19 15:05 </td><td align="right"> 30K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="MList.html">MList.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">8.6K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per4.html">per4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">5.7K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="m.html">m.html</a></td><td align="right">2008-01-19 14:31 </td><td align="right">4.2K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per3.html">per3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per2.html">per2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">3.0K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="test6.2.html">test6.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">2.4K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per1.html">per1.html</a></td><td align="right">2008-01-19 14:47 </td><td align="right">2.3K</td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="luz5.html">luz5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">945 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.3.html">per.3.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">790 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.7.html">per.7.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">763 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.1.html">per.1.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">740 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.6.html">per.6.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">597 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.bak.html">per.bak.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">549 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.2.html">per.2.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">491 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="t.html">t.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">390 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.4.html">per.4.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">324 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.5.html">per.5.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">320 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/image2.gif" alt="[IMG]"></td><td><a href="rbowline.png">rbowline.png</a></td><td align="right">2008-01-19 14:28 </td><td align="right">319 </td><td> </td></tr> +<tr><td valign="top"><img src="../../icons/text.gif" alt="[TXT]"></td><td><a href="per.html">per.html</a></td><td align="right">2008-01-19 14:28 </td><td align="right">180 </td><td> </td></tr> + <tr><th colspan="5"><hr></th></tr> +</table> +</body></html> diff --git a/old/test/tables/luz.html b/old/test/tables/luz.html new file mode 100644 index 0000000..d97a3ed --- /dev/null +++ b/old/test/tables/luz.html @@ -0,0 +1,775 @@ +<html> +<head> +<meta name="generator" content= +"HTML Tidy for Linux/x86 (vers 1 September 2005), see www.w3.org"> +<title>sanacion 1</title> +<meta http-equiv="Content-Type" content= +"text/html; charset=us-ascii"> +</head> +<body bgcolor="#FFCC99" link="#FF6600" vlink="#FF6600" alink= +"#FF6600" leftmargin="0" topmargin="0" marginwidth="0" +marginheight="0"> +<table width="700" border="0" align="center" cellspacing="10" +bgcolor="#FCB772"> +<tr> +<td height="499" colspan="2" valign="top"> +<table id="Table_01" width="700" height="495" border="0" +cellpadding="0" cellspacing="0"> +<tr> +<td height="495"> +<table id="Table_01" width="700" height="496" border="0" +cellpadding="0" cellspacing="0"> +<tr> +<td valign="top"> +<table id="Table_01" width="700" height="496" border="0" +cellpadding="0" cellspacing="0"> +<tr> +<td colspan="8" valign="top"> +<table width="700" height="520" border="0" cellpadding="0" +cellspacing="0" background="https://www.dillo.org/test/tables/mail_sem1_b_01.jpg"> +<tr> +<td colspan="2" http-equiv="Content-Type" content= +"text/html; charset=ISO-8859-1"><img src= +"cid:166477B6B128$8214FDEB$9EA5E9E9@maxprog" alt= +"Seminario de sanación 1" width="700" height="468"></td> +</tr> +<tr> +<td width="337" height="20" align="center"> +<p http-equiv="Content-Type" content= +"text/html; charset=ISO-8859-1"><img src= +"cid:123043D0F7EC$6E23CAC6$AB4CE583@maxprog" width="336" height= +"52"></p> +</td> +<td width="363" align="right"> +<p><a name="inicio" id="inicio"></a><a href= +"mailto:chile@luzdorada.com"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>e-mail: +chile@luzdorada.com</strong></font></a></p> +<p><strong><a href="http://www.desarrolloluzdorada.com" target= +"_blank"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">www.desarrolloluzdorada.com</font></a></strong></p> +</td> +</tr> +</table> +</td> +</tr> +<tr> +<td colspan="8"> </td> +</tr> +<tr> +<td><a href="luz.html#sanar"><img src= +"cid:113921A6A448$17113579$5DD39F54@maxprog" alt="" width="198" +height="35" border="0"></a></td> +<td colspan="2"><a href="luz.html#temas"><img src= +"cid:601636D28DA5$4CC3A034$7E2A1FB3@maxprog" alt="" width="120" +height="35" border="0"></a></td> +<td colspan="2"><a href="luz.html#testi"><img src= +"cid:910578F99BAB$3DBCC95D$CAAFA21C@maxprog" alt="" width="87" +height="35" border="0"></a></td> +<td><a href="luz.html#linkaura"><img src= +"cid:988467EFF0F2$3BB48165$C85DD340@maxprog" alt="" width="54" +height="35" border="0"></a></td> +<td><a href="luz.html#colores"><img src= +"cid:15726556E780$C81C3324$255A2B16@maxprog" alt="" width="174" +height="35" border="0"></a></td> +<td><a href="luz.html#contacto"><img src= +"cid:899782ADAD43$A5DC6EE3$E2393ABE@maxprog" alt="" width="67" +height="35" border="0"></a></td> +</tr> +<tr> +<td><img src="https://www.dillo.org/test/tables/images/spacer.gif" width="198" height="1" alt= +""></td> +<td><img src="https://www.dillo.org/test/tables/images/spacer.gif" width="55" height="1" alt=""></td> +<td><img src="https://www.dillo.org/test/tables/images/spacer.gif" width="65" height="1" alt=""></td> +<td><img src="https://www.dillo.org/test/tables/images/spacer.gif" width="41" height="1" alt=""></td> +<td><img src="https://www.dillo.org/test/tables/images/spacer.gif" width="46" height="1" alt=""></td> +<td><img src="https://www.dillo.org/test/tables/images/spacer.gif" width="54" height="1" alt=""></td> +<td><img src="https://www.dillo.org/test/tables/images/spacer.gif" width="174" height="1" alt= +""></td> +<td><img src="https://www.dillo.org/test/tables/images/spacer.gif" width="67" height="1" alt=""></td> +</tr> +</table> +</td> +</tr> +</table> +</td> +</tr> +</table> +</td> +</tr> +<tr> +<td height="26" colspan="2" valign="top" bgcolor="#FCB772"> +<table width="702" height="314" border="0" align="left" +cellspacing="10" bgcolor="#FCB772"> +<tr> +<td width="249" height="292" rowspan="2" valign="top" bgcolor= +"#FCB772"> +<p align="left"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Luz Dorada es un centro de +medicina alternativa que atiende desde el año 2001 personas +con diferentes problemas ( a nivel espiritual, mental, emocional y +físico) con excelentes resultados</font></strong></p> +<p align="left"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Lo más importante es +que también hace Capacitaciones o Seminarios de Sanación, +donde tú puedes aprender la técnica, sanarte a ti , a +otras personas y también a distancia.</font></strong></p> +<p align="left"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">A través del programa +de sanación Luz Dorada se</font></strong></p> +<p align="left"> </p> +</td> +<td width="200" height="242" valign="top" bgcolor="#FCB772"> +<div align="center"><img src= +"cid:910938DF57B6$2AE778BB$C9A535CD@maxprog" width="200" height= +"240"></div> +</td> +<td width="207" height="292" rowspan="2" valign="top" bgcolor= +"#FCB772"> +<p align="right"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">enseña a los +estudiantes la terapia energética creada por el sociólogo +Harold Moskovitz, Desarrollo Luz Dorada, la que busca provocar un +cambio en el campo energético humano.</font></strong></p> +<p align="right"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">El 12 y 13 de Enero tenemos +en Calendario el primer Seminario de Sanación<br> +Nivel 1 del año 2008 en Santiago.</font></strong></p> +<p align="right"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Donde tú puedes +aprender la técnica</font></strong></p> +</td> +</tr> +<tr> +<td height="34" valign="top" bgcolor="#FF9900"> +<div align="center"> +<p><font color="#FFFFFF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>Foto del Aura antes +y después de una sanación</strong></font></p> +</div> +</td> +</tr> +</table> +</td> +</tr> +<tr> +<td height="26" colspan="2" valign="top" bgcolor="#FF9900"> +<p align="center"><strong><a name="sanar"></a></strong></p> +</td> +</tr> +<tr> +<td height="65" colspan="2" bgcolor="#FEDEB4"> +<p align="center"> </p> +<p align="center"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">¿Qué es sanar por +medio de Luz Dorada?</font></strong></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Es una técnica para +limpiar el campo electromagnético del cuerpo o aura y la +energía central o chakras.</font></p> +<p> </p> +</td> +</tr> +<tr> +<td height="65" colspan="2" bgcolor="#FEDEB4"> +<p align="center"> </p> +<p align="center"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">¿Por qué me sirve +aprender a sanar?</font></strong></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Estas técnicas son +fáciles de aprender, sin embargo son muy poderosas y pueden +hacer que las personas cambien su realidad a nivel molecular, que +es la base de salud y rejuvenecimiento.</font></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Los estudiantes aprenden +los fundamentos del método de sanación de imponer las +manos: Se enseña como limpiar el campo del cuerpo humano (el +aura) y los centros de energía del cuerpo humano (los chakras) +para soltar del cuerpo los bloqueos de energía que causan +enfermedad y dolor; como tener acceso a y trabajar con maestros de +sanación poderosos; como limpiarse de la energía de otras +personas para mantener un espacio neutral para poder sanar; y como +llenarse de la energía de fuerza vital de una manera conciente +para crear una conección con el planeta y con su propia +información superior. Se enseña brevemente sobre lo que +es la Karma, las leyes de Karma, y la experiencia de una +sanación kármica.</font></p> +<p align="right"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><a name="menu"></a><a href= +"luz.html#inicio">volver</a></font></strong></p> +<p align="center"><font color="#FFFFFF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong><a name= +"temas"></a></strong></font></p> +</td> +</tr> +<tr> +<td height="26" colspan="2" bgcolor="#FF9933"> +<div align="center"><font color="#FFFFFF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>Temas a +Incluir</strong></font></div> +</td> +</tr> +<tr> +<td width="389" height="182" valign="top" bgcolor="#FEDEB4"> +<p> </p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">1. Qué es el aura +definición y practica.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">2. Qué son lo chakras +definición y practicas.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">3. Cómo es el proceso +de manifestación de las enfermedades.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">4. Por qué nosotros +somos creadores de nuestra vida.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">5. Qué es el +Karma.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">6. Técnicas de +autosanación y sanación a terceros.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">7. Cómo realizar +sanaciones a distancia.</font></strong></p> +</td> +<td width="326" valign="top" bgcolor="#FEDEB4"> +<p> </p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">8. Qué és Fluir +Energía y cómo hacerlo.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">9. Deshacerse de recuerdos +y hábitos dolorosos.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">10. La desintegración +de imágenes negativas y energías estancadas que crean +enfermedades.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">11. Crear una mente y un +cuerpo sano.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">12. Crear una realidad +exitosa y positiva.</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">13. Como guiar a los +niños o sus propios hijos para no dejarles patrones de +emociones.</font></strong></p> +<p align="right"><strong><a name= +"testi"></a></strong><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><a href= +"luz.html#inicio">volver</a></font></strong></p> +<div align="right"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><a name="menu"></a><a href= +"luz.html#menu"></a></font></strong></div> +</td> +</tr> +<tr> +<td height="25" colspan="2" valign="top" bgcolor="#FF9900"> +<p align="center"><strong><font color="#FFFFFF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Lea algunos de los +testimonios de nuestros alumnos</font></strong></p> +</td> +</tr> +<tr> +<td height="86" colspan="2" valign="top" bordercolor="#FFFFE1"> +<table width="680" height="765" border="0" align="center" +cellpadding="0" cellspacing="20"> +<tr> +<td height="173" colspan="2" valign="top" bgcolor="#FEDEB4"> +<blockquote> +<p align="center"><strong><font color="#663333" size="3" face= +"Verdana, Arial, Helvetica, sans-serif"><img src= +"cid:74581314E89A$D26C81F6$F0BC90B2@maxprog" width="200" height= +"150" vspace="5"><br> +Andrea R, Chile,<br> +Paciente con Cancer de Útero.<br> +Se le realizo una sanación a distancia.</font></strong></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Su hermana Alma le fue +diagnosticada en el 2005 un tumor en el ovario izquierdo. El parte +médico dice:”ovario izquierdo ocupado por masa quistica +multi-tabicada de 50 por 28 por 49 mm, casi como una pelota de +golf.</font></p> +<p align="left"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>El siguiente +fragmento de una entrevista en vivo explica como Andrea sanó a +su hermana por medio de sanaciones a distancia:</strong></font></p> +<p align="left"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><em><strong>-¿Cuánto +tiempo tuviste haciendo la sanación a +distancia?</strong></em><br> +En total fueron cinco sesiones que se hicieron. Al día +siguiente que ella me llama yo le hago la primera sesión y +como ella estaba muy asustada se la realicé lo más +rápido posible.<br> +Entonces yo la llamé y le pido que para la siguiente +sanación tome mucho líquido.<br> +<br> +<em><strong>-Hay un informe que dice que se redujo en un +50%.</strong></em><br> +A la mitad.<br> +<br> +<em><strong>-A la mitad en este momento.</strong></em><br> +Claro<br> +<br> +<strong><em>-¿Después dos sanaciones?</em></strong><br> +Si, después de dos sanaciones, claro. Después de +las sanaciones a distancia se redujo hasta la mitad: 5 a +2,5</font></p> +<p align="left"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong><em>-¿Su +hermana volvió al médico?</em></strong><br> +Si, después tres semanas volvió al médico y se +redujo a la mitad. Tengo el estudio del médico que vio eso, +reducido a la mitad.</font></p> +<p align="left"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Andrea +R</font></strong><br></p> +</blockquote> +</td> +</tr> +<tr> +<td width="350" height="174" valign="top" bgcolor="#FEDEB4"> +<blockquote> +<p align="center"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><br> +Madeleine Valero,</font> <font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Chile, Alumna de +Sanación 1. Realizó sanaciones.</font></strong></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">“Con respecto al +Seminario, les puedo decir que como experiencia personal, te abre +la puerta a cambiar aspectos de tu vida que te bloquean o no te +hacen ser feliz, empiezas a verte desde cuando eras niño hasta +ahora, con esto recuerdas como era tu crianza desde niño y de +acuerdo a eso como te ha influido ahora en tu vida.</font></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Con respecto a la +técnica les puedo decir que funciona, yo a mi abuela le hice +sanación en sus rodillas, ella sufre de artrosis, nunca anduvo +con bastón, pero después se acentuó más su +dolor y empezó a usar. Un día fue a mi casa y la vi muy +mal andaba a penas, caminaba muy lento.</font></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Le hice una Sanación +al otro día se pudo levantar sin dolor hizo todas sus cosas +sin problemas, hasta el día de hoy no siente dolor y su +rodilla está más deshinchada. La Sanación depende +mucho de cuánto esté dispuesta la persona a soltar las +cargas emocionales que tiene, es por eso que hay casos +increíbles de personas que se sanan tan rápido (con 1 +sanación, como tan bien hay otras que tienen más +resistencia a ver sus problemas y le cuesta un poquito más +sanar), también le hice Sanación a una persona enferma de +Cáncer, la cual después de la sanación estuvo 3 +días sin Morfina.”</font></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Madeleine +Valero</font></strong><br> +<br></p> +</blockquote> +</td> +<td width="270" valign="top" bgcolor="#FEDEB4"> +<blockquote> +<p align="center"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><br> +Aida C Castro, Panamá, Alumna de Sanación 1. Experiencia +con autosanaciones</font></strong></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Respetado señor Harold +Moskovitz: Deseo hablar de mis experiencias a través de mi +estadía en el seminario que usted dicta. Soy una persona con +bastantes problemas de salud. Arteria obstruída, úlcera +péptica, rodillas operadas de menisco (ambas) con artrosis, +padezco de dolores en las piernas, horribles. Pero en estos +días no he tomado pastillas para el dolor y he sentido una +tremenda mejoría a la vez que todo lo demás. Me he +sentido muy bien, alegre, dispuesta y con fuerza.</font></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Quiero agradecerle sus +enseñanzas y rogarle que venga pronto a Panamá para +nuestra alegría.</font></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">De Ud.</font></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>Aida C +Castro</strong></font></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Apdo 6-1806 Panamá Rep +de Panamá</font></p> +</blockquote> +</td> +</tr> +<tr> +<td height="84" valign="top" bgcolor="#FEDEB4"> +<blockquote> +<p align="center"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><br> +Ingrid Riffo, Chile, Alumna de Sanación 1, Experiencia con las +sanaciones</font></strong></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Desde que tomé el +seminario he tenido más confianza. El momento en que me +sentí más segura, fue cuando le hice una sanación a +una hermana que tenía artrosis. Gracias a que ella confió +en mi, aceptó la sanación. En la primera sanación +ella dejó de cojear, uno de los malestares que ella tenía +era que cojeaba si estaba senada y se paraba cojeaba, al momento de +caminar era igual que cuando iba con bultos o bolsas.</font></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Fue algo maravilloso cuando +le hice la primera sanación, ella inmediatamente se paró +y no cojeó, fué una emoción muy grande. Al otro +día le hice una segunda sanación y me contO que estaba +bien de su rodilla, sólo sintió un poco delicado pero era +a raíz de la sanación. En la tercera sanación ella +quedó mucho mejor y se sentía muy bien.</font></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><a name="linkaura" id= +"linkaura"></a>Ingrid Riffo</font></strong></p> +</blockquote> +<p align="right"> </p> +</td> +<td height="84" valign="top" bgcolor="#FEDEB4"> +<blockquote> +<p align="center"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><br> +Thelma B. Alvarado Isaza, Panama, Alumna de Sanación 1. +Experiencia con el seminario y sanaciones.</font></strong></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Al iniciar el desarrollo de +la sanación “Luz Dorada” en septiembre de 1999; +acudí al primer nivel con múltiples quistes en los +ovarios, endometriosis, y fibroma uterino, adjunto diagnostico de +antes de la sanación que así lo comprueba y después +de sanación Luz Dorada, la endometriosis y los quistes +desaparecieron. Todavía tengo el fibroma pero confió que +también desaparecerá. Estoy segura que poco a poco fui +siendo sanada gracias a Dios (cristo) ser supremo y a la +sanación Luz Dorada.</font></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Gracias por siempre +Harold</font></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Thelma +Alvarado</font></strong></p> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><a name="menu"></a><a href= +"luz.html#inicio">volv</a><a href="luz.html#inicio">er</a></font></strong></p> +</blockquote> +</td> +</tr> +<tr> +<td colspan="2" valign="top" bgcolor="#FEDEB4"> +<p align="center"> </p> +</td> +</tr> +</table> +</td> +</tr> +<tr> +<td height="21" colspan="2" align="left" valign="top" bgcolor= +"#FF9900"> +<div align="center"><strong><font color="#FFFFFF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">El +Aura</font></strong></div> +</td> +</tr> +<tr> +<td height="283" colspan="2" align="left" valign="top" bgcolor= +"#FCB772"> +<p align="center" class="MsoNormal"> </p> +<p align="center"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">El aura refleja aspectos +sobre la conciencia, el cual incluye lo emocional, y lo +físico. Los estados mentales y químicos, las hormonas o +desequilibrios causados por drogas. Somos seres de luz, de +frecuencias de luz vibracional. Esta luz es tu aura. Al cambiar la +frecuencia de tu luz, cambia los colores en tu aura. Tu aura es tu +energía, o sea tu conciencia que crea tu estado físico, +emocional, mental, y energético. Al cambiar tu aura, cambia tu +vida. Cada color tiene un sentido distinto dependiendo de donde +existe en tu aura. El aura tiene siete capas. Cada capa representa +un aspecto distinto de ti. El significado del color del aura +depende de su brillantez u oscuridad. No hay color bueno ni malo. +Cada pensamiento, sentimiento, emoción y sensación +física tiene su color. Hay muchos colores en el aura de las +personas. Cada vez que tienes un pensamiento o sentimiento, este se +manifiesta como un nivel específico vibracional de luz que se +expresa en un color.</font></strong></p> +<p align="right"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><a href= +"luz.html#inicio">volv</a><a href="luz.html#inicio">er</a></font></strong></p> +<p align="center"><span style= +"font-family:Arial; font-size:9.0pt;"><font color="#FFFFFF" size= +"2" face="Verdana, Arial, Helvetica, sans-serif"><strong><a name= +"colores"></a></strong></font> </span></p> +</td> +</tr> +<tr> +<td height="19" colspan="2" align="left" valign="top" bgcolor= +"#FF9900"> +<p class="unnamed11" align="center" style="text-align:center;"> +<font color="#FFFFFF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>Una guía para +entender los colores del Aura</strong></font></p> +</td> +</tr> +<tr bgcolor="#FEDEB4"> +<td colspan="2" align="left" valign="top"> +<p align="left" class="cuerpotexto"></p> +<table width="680" height="852" border="0" align="center" +cellpadding="0" cellspacing="10"> +<tr> +<td width="680" height="832"> +<p align="left" class="cuerpotexto"><font color="#FF0000" size="2" +face= +"Verdana, Arial, Helvetica, sans-serif"><strong>ROJO</strong>:</font><font color="#663333" +size="2" face="Verdana, Arial, Helvetica, sans-serif">Color de +vitalidad física, salud, y pasión. Rojo vivo puede +representar cólera o el uso de ésta para crear cambio. Un +rojo oscuro o color ladrillo significa frustración. El rojo +turbio indica que la persona es testaruda u obstinada.</font></p> +<p><strong><font color="#FF6633" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">ANARANJADO:</font></strong> +<font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Color de sanación, ya +que es un color de cambio. Si hay una gran cantidad de color +anaranjado en su aura significa que la persona es un sanador +natural o se está sanando física, emocional, mental o +espiritualmente por si mismo. Si ud. tiene un color anaranjado muy +vivo en su aura, su auto- estima es elevada y tiene capacidad de +crear resultados positivos. Un anaranjado pardo significa duda o +falta del auto-estima.</font></p> +<p><strong><font color="#FFCC00" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">AMARILLO: +</font></strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Es uno de los colores que +con mayor facilidad se puede observar y denota el estado +intelectual de la consciencia. El amarillo con blanco refiere a la +preocupación por el futuro, mientras que el amarillo con +café habla de confusión mental por el futuro.</font></p> +<p><strong><font color="#33CC00" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">VERDE: +</font></strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Color de alta afinidad +entre el cuerpo y el ánima; el color verde esmeralda es el +color del corazón. Verde vivo representa el desarrollo y el +cambio y la capacidad de sanarse a si mismo y a otras personas. +Verde oscuro muestra que la persona está pasando por un +período de gran desarrollo emocional; verde aceituna indica +envidia; verde marino representa su capacidad de cambiar, de ir con +la corriente y ser muy creativo.</font></p> +<p><strong><font color="#0033CC" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">AZUL:</font></strong> +<font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Color de la +comunicación. El azul cielo o vivo en su aura indica su +capacidad psíquica. Los clarividentes o psíquicos tienen +azul vivo en su campo energético. Azul oscuro indica la falta +de comunicación o la tristeza. Azul muy oscuro indica +depresión.</font></p> +<table width="180" height="112" border="0" align="center" +cellpadding="0" cellspacing="0"> +<tr> +<td width="180"><img src= +"cid:587426ABC543$111AAAED$4DE8B98F@maxprog" width="176" height= +"188"></td> +</tr> +</table> +<p> </p> +<p align="justify"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>COLORES DEL +AMOR:</strong></font></p> +<p><strong><font color="#FF3399" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">FUCSIA:</font></strong> +<font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Color de la pasión. +Cuando la persona es un amante activo y expresa su amor +efusivamente<strong>.</strong></font></p> +<p><font color="#FF9966" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>COLOR DE +DURAZNO:</strong></font> <font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Color que indica amor +tierno.</font></p> +<p><strong><font color="#FF99CC" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">ROSADO:</font></strong> +<font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Color que representa a una +persona feliz y amorosa, con afinidad y auto-estima</font></p> +<p><strong><font color="#CC33CC" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">ROSA FUCSIA (LILA +ROJIZO):</font></strong> <font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Este color significa +enamoramiento. Rosa fuerte anuncia, ‘estoy +enamorado’.</font></p> +<table width="137" height="121" border="0" align="center" +cellpadding="0" cellspacing="0"> +<tr> +<td><img src="cid:250299BFE2F2$28BDB2DA$2F357119@maxprog" width= +"198" height="208"></td> +</tr> +</table> +<p><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">OTROS +COLORES:</font></strong></p> +<p><strong><font color="#01B4C2" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">AZUL +TURQUESA:</font></strong> <font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Proceso de desarrollo y +cambios rápidos.</font></p> +<p><strong><font color="#CF8AFD" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">LAVANDA / ALHUCEMA (LILA +AZULADA):</font></strong> <font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Indica que su energía +y espiritualidad se manifiestan en el tiempo y espacio +presente.</font></p> +<p class="Estilo1"><font size="2" face= +"Verdana, Arial, Helvetica, sans-serif">MORADO:</font> <font color= +"#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Color de una persona +religiosa, con ideas rígidas y moralistas sobre si mismo y +otras personas. Una idea o sentido de espiritualidad en tiempos +anteriores. También puede indicar una vida anterior +real.</font></p> +<p class="Estilo2"><font size="2" face= +"Verdana, Arial, Helvetica, sans-serif">VIOLETA:</font> +<font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Indica que la persona tiene +mucha programación moralista, ideas fijas del bien y el +mal.</font></p> +<p><font color="#999999" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>PLATEADO: +</strong></font><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Color del poder personal y +del poder universal. Plateado vivo en su aura indica que la persona +está conciente de su propio poder y que se ha adueñado de +él.</font></p> +<p><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>DORADO:</strong> +Color del éxito, de la luz del sol. Representa capacidad de +cambiar rápidamente y de hacer entrar información +superior. Dorado significa un vibración muy alta y la +capacidad de procesar información y experiencias fácil y +rápidamente. Dorado es el color de la energía del Ser +Supremo que se manifiesta en este planeta.</font></p> +<p><strong><font color="#FFFFFF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">BLANCO:</font></strong> +<font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Combinación de todos +los colores. Tiene una vibración muy alta. Las personas tienen +blanco en su aura cuando tienen información muy superior o +están asustados, se están protegiendo o cuando están +fuera de sus cuerpos. Blanco lechoso indica que una persona ha +estado enferma por mucho tiempo.</font></p> +<p><strong><font color="#95D5FF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">CELESTE:</font></strong> +<font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Brillo celestial que indica +información de un nivel muy superior. Es más alto que +dorado, pero más bajo que el blanco. El brillo celestial en +realidad es una dimensión de vibración diferente y es muy +raro que una persona lo presente en su aura.</font></p> +<p><strong><font color="#999999" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">GRIS:</font></strong> +<font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Aparece en su aura cuando +se siente deprimido o sin poder. Gris es el color de la apatía +y puede indicar una enfermedad seria como el +cáncer.</font></p> +<p><strong><font color="#000000" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">NEGRO:</font></strong> +<font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Representa falta de +energía o información. Negro también puede +significar magia negra o mucha negatividad.</font></p> +<p align="right"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><a name="menu"></a><a href= +"luz.html#inicio">volver</a></font></strong></p> +</td> +</tr> +</table> +<div align="right"></div> +</td> +</tr> +<tr> +<td colspan="2" align="left" valign="top" bgcolor="#FF9900"> +<div align="center"><strong><font color="#FFFFFF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><a name= +"contacto"></a>Contacto</font></strong></div> +</td> +</tr> +<tr> +<td height="310" align="left" valign="top" bgcolor="#FEDEB4"> +<p align="center"> </p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>EL SEMINARIO SE +IMPARTIRÁ EL DIA SÁBADO Y DOMINGO DE 9AM A +8PM.</strong></font></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Se hace entrega de un +manual y un certificado de participación al final del +curso.</font></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Es importante que reserves +tu<br> +cupo con un abono de $10.000.- que puedes depositar o dejar<br> +directamente en nuestras oficinas.</font></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">También puedes abonar +a este número de cuenta:<br> +Banco Santander Santiago, cta nº 04-66551-1, a nombre de +Servicios de Capacitación Luz Dorada Ltda.<br> +Manda el comprobante del depósito al fax (2) 484 8700 con +nombre completo del participante y teléfonos para +confirmación.</font></p> +</td> +<td height="310" valign="top" bgcolor="#FEDEB4"> +<p align="center"> </p> +<p align="center"><font color="#663333" size="3" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>¡Si estás +interesado comunícate con nosotros!</strong></font></p> +<p align="center"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">DESARROLLO LUZ +DORADA</font></strong></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Bucarest 215, Providencia, +Santiago de Chile<br> +<strong>Telefono:</strong> (2) 484 8700</font></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">11 Norte 835, Viña del +Mar, Chile</font><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">,<br> +<strong>Telefonos:</strong><br> +(32) 247 9697- (32) 247 8487</font></p> +<p align="center"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><strong>Email: <a href= +"mailto:chile@luzdorada.com">chile@luzdorada.com</a> <a href= +"https://www.dillo.org/test/tables/chile@luzdorada.com"></a></strong></font></p> +<p align="center"><strong><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><a href= +"http://www.desarrolloluzdorada.com">www.desarrolloluzdorada.com</a></font></strong></p> +<p align="right"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><font color="#663333" size= +"2" face="Verdana, Arial, Helvetica, sans-serif"><strong><a href= +"luz.html#inicio">volver</a> <a name="menu"></a></strong></font></font></p> +<p align="right"><font color="#663333" size="2" face= +"Verdana, Arial, Helvetica, sans-serif"><br></font></p> +</td> +</tr> +<tr> +<td height="21" colspan="2" align="left" valign="top"> +<div align="center"><font color="#FFFFFF" size="2" face= +"Verdana, Arial, Helvetica, sans-serif">Si no desea recibir +noticias nuestras, por favor envíe un mail a +<strong>remove@luzdorada.com</strong> indicando ¡Deseo ser +removido de su lista! en el cuerpo del mensaje y será removido +de nuestra base de datos, gracias.</font></div> +</td> +</tr> +</table> +</body> +</html> diff --git a/old/test/tables/luz5.html b/old/test/tables/luz5.html new file mode 100644 index 0000000..04db5ef --- /dev/null +++ b/old/test/tables/luz5.html @@ -0,0 +1,38 @@ +<html> +<head> +<meta name="generator" content= +"HTML Tidy for Linux/x86 (vers 1 September 2005), see www.w3.org"> +<title>sanacion 1</title> +<meta http-equiv="Content-Type" content= +"text/html; charset=us-ascii"> +</head> +<body bgcolor="#FFCC99" link="#FF6600" vlink="#FF6600" alink= +"#FF6600" leftmargin="0" topmargin="0" marginwidth="0" +marginheight="0"> + + +<table width="700" border="0" align="center" cellspacing="10" + bgcolor="#FCB772" border="1"> + +<tr bgcolor="#FEDEB4"> + <td colspan="1" align="left" valign="top"> + <table width="680" border="1" align="center" + cellpadding="0" cellspacing="10"> + <tr> + <td bgcolor="#eeeeee" width="680"> + <p><strong><font color="#33CC00" size="2" face= + "Verdana, Arial, Helvetica, sans-serif">VERDE: + </font></strong><font color="#663333" size="2" face= + "Verdana, Arial, Helvetica, sans-serif">Color de alta afinidad + </font></p> + </td> + </tr> + </table> + </td> +</tr> + +</table> + + +</body> +</html> diff --git a/old/test/tables/m.html b/old/test/tables/m.html new file mode 100644 index 0000000..fb96f41 --- /dev/null +++ b/old/test/tables/m.html @@ -0,0 +1,176 @@ +<html><head> +One row with colspan=2, a very long worg and four normal words +<table border='1'> + <tr> + <td colspan="2"> + {aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} + bbbbb + cccccc + dddddddd + eeeeee + </td> + </tr> +</table> + +<br> + +A colspan=2 cell with a single space, a long cell with width=100%,<br> ++ a an average row that's scaled proportionally. +<table border="1" cellspacing="4" cellpadding="5"> + <tr> + <td colspan="2"> <p> </td> + </tr> + <tr> + <td colspan="2" width="100%" bgcolor="#fff0d0"> + <B>Please read carefully before posting: </B> + </TD> + </TR> + <tr><td>11<td>22222222 +</table> + +<br> + +Very long colspan=2 cell followed by a couple thin cells: +<table border='1'> + <tr> + <td colspan="2"> + {aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa} + bbbbb + cccccc + dddddddd + eeeeee + </td> + </tr> + <tr><td>1<td>2 +</table> + +<br> + +No widths (first cell has colspan=2). Weigthed apportion. +<table cellspacing="0" cellpadding="0" border=1> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track Engine</b></td></tr> + <tr> + <td> </td> + <td> + <small> + <a href="../../bugtrack/Dbugtrack.html">Bug Track Intro</a><br> + </small> +</table> + +No width, link's cell has width=100% +<table cellspacing="0" cellpadding="0" border=1> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track Engine</b></td></tr> + <tr> + <td> </td> + <td width="100%"> + <small> + <a href="../../bugtrack/Dbugtrack.html">Bug Track Intro</a><br> + </small> +</table> + +<br> + +<table border=1> +<tr> +<td> + No width + <table border=1 bgcolor=lightblue> + <tr> + <td> + <table cellspacing="0" cellpadding="0" border=1> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track Engine</b></td></tr> + <tr> + <td> </td> + <td width="100%"> + <small> + Width = 100% + </small> + </table> + <td width="100%">Cell 100% + </table> +<td> + No width + <table border=1> + <tr> + <td> + <table cellspacing="0" cellpadding="0" border=1> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track Engine</b></td></tr> + <tr> + <td> </td> + <td> + <small> + <a href="../../bugtrack/Dbugtrack.html">Bug Track Intro</a><br> + </small> + </table> + <td width="100%">Cell 100% + </table> +</table> + +<br> + +No widths. This table has AUTO Length +<table cellspacing="0" cellpadding="0" border=1> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track</b></td></tr> + <tr> + <td> </td> + <td> + <small> + <a href="../../bugtrack/Dbugtrack.html">Bug Track Intro</a><br> + <a href="../../bugtrack/Dquery.html">View Entries</a><br> + <a href="../../bugtrack/Dinsert.html">Bug Insertion</a><br> + <a href="../../bugtrack/Dvolunteer.html">Volunteering</a><br> + </small> +</table> + +<br> + +No table width, the large cell has width=100%. +<table cellspacing="0" cellpadding="0" border=1> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track Engine</b></td></tr> + <tr> + <td> </td> + <td width="100%"> + <small> + Bug Track Intro + </small> +</table> + +No table width, the large cell has width=80%. +<table cellspacing="0" cellpadding="0" border=1> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track Engine</b></td></tr> + <tr> + <td> </td> + <td width="80%"> + <small> + Bug Track Intro + </small> +</table> + +No table width, the large cell has width=20%. +<table cellspacing="0" cellpadding="0" border=1> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track Engine</b></td></tr> + <tr> + <td> </td> + <td width="20%"> + <small> + Bug Track Intro + </small> +</table> + +<br> + +Table width = 100%, the large cell has width=100%. +<table width="100%" cellspacing="0" cellpadding="0" border=1> + <tr><td bgcolor="#d0c090" colspan="2" nowrap><b>Bug Track Engine</b></td></tr> + <tr> + <td> </td> + <td width="100%"> + <small> + Bug Track Intro + </small> +</table> + +<br> + +</html> + diff --git a/old/test/tables/per.1.html b/old/test/tables/per.1.html new file mode 100644 index 0000000..94f6444 --- /dev/null +++ b/old/test/tables/per.1.html @@ -0,0 +1,33 @@ +<html> +<body> + +<table border=1 cellspacing=10 bgcolor=lightblue> +<TR><TD>Cell</TD><TD COLSPAN=2 ROWSPAN=2> + +<table border=1 cellspacing=0 bgcolor=lightgreen> + <TR> + <TD>Cell</TD> + <TD COLSPAN=2 ROWSPAN=2> Cell, and stuff to test out table cell layout. This + should be long enough for testing. </TD></TR> + <TR><TD>Cell</TD></TR> + <TR> + <TD>Cell</TD> + <TD> Cell, and stuff to test out table cell layout. + This should be long enough for testing.</TD><TD>Cell</TD></TR> +</table> + +</TD></TR> +<TR><TD>Cell</TD></TR> +<TR><TD>Cell</TD><TD> + Cell, and stuff to test out table cell layout. + This should be long enough for testing. + </TD><TD>Cell</TD></TR> +</table> + +<br> +<br> + + <a href="https://www.dillo.org/test/tables/www.loc.gov">www.loc.gov</a> +</body> +</html> + diff --git a/old/test/tables/per.2.html b/old/test/tables/per.2.html new file mode 100644 index 0000000..86ece2c --- /dev/null +++ b/old/test/tables/per.2.html @@ -0,0 +1,38 @@ +<html> +<body> + The absolute cell will be resized (same as Firefox). + <table border=1> + <tr> + <td width=400 bgcolor=lightgreen>ABS=400 + <td>1<td>2 2<td>3 3 3<td>4 4 4 4<td>5 5 5 5 5 + </table> +<!-- +--> + + <h3> width = auto + <table border=1> + <tr> + <td>word<td>1<td>2 2<td>3 3 3 + </table> + + <table border=1> + <tr> + <td>word<td>1<td>2 2 + </table> + <table width=200 border=1> + <tr><td>ABS=200 + </table> + +<br> +<br> + +</body> +</html> + + +<br> +<br> + +</body> +</html> + diff --git a/old/test/tables/per.3.html b/old/test/tables/per.3.html new file mode 100644 index 0000000..df8576c --- /dev/null +++ b/old/test/tables/per.3.html @@ -0,0 +1,33 @@ +<html> +<body> +<h3>colspan=2,cellspacing=100</h3> +This table will not resize to one word because the cellspacing is +larger than its minimum word size. +<table border=1 cellspacing=100 bgcolor=lightgreen> + <TR> + <TD colspan=2> Cell, and stuff to test out table cell layout. This + should be long enough for testing. </TD></TR> +</table> + +<br> This table has cell(min,max) < cellspacing +<table border=1 cellspacing=100 bgcolor=lightgreen> + <TR> + <TD colspan=2>C</TD></TR> +</table> + +<br> This table has cell(min,max) < cellspacing +<table border=1 cellspacing=100 bgcolor=lightgreen> + <TR> + <TD colspan=3>A</TD></TR> + <tr><td>1<td>2<td>3 +</table> + +<br> This table has colspan=100 +<table border=1 cellspacing=4 bgcolor=lightgreen> + <TR> + <TD colspan=100>A</TD></TR> +</table> + +</body> +</html> + diff --git a/old/test/tables/per.4.html b/old/test/tables/per.4.html new file mode 100644 index 0000000..452cf22 --- /dev/null +++ b/old/test/tables/per.4.html @@ -0,0 +1,18 @@ +<html> +<body> + +<table border=1 bgcolor=lightgreen> + <TR> + <TD colspan=2> Cell, and stuff to test out table cell layout. This + should be long enough for testing. </TD> + <TR> + <TD> Cell, and stuff to test out table cell layout. This + should be long enough for testing. </TD> + <td>Cell +</TR> + +</table> + +</body> +</html> + diff --git a/old/test/tables/per.5.html b/old/test/tables/per.5.html new file mode 100644 index 0000000..3fb2074 --- /dev/null +++ b/old/test/tables/per.5.html @@ -0,0 +1,20 @@ +<html> +<body> + +Resize to a small width: +<table border=1 cellspacing=10 bgcolor=lightgreen> + <TR> + <TD>Cell</TD> + <TD ROWSPAN=3> + Cell, and stuff to test out table cell layout. This + should be long enough for testing. </TD></TR> + <TR><TD>Cell</TD></TR> + <TR><TD>Cell</TD></TR> +</table> + +<br> +<br> + +</body> +</html> + diff --git a/old/test/tables/per.6.html b/old/test/tables/per.6.html new file mode 100644 index 0000000..c4a5590 --- /dev/null +++ b/old/test/tables/per.6.html @@ -0,0 +1,34 @@ +<html> +<body> + +Resize to a small width: +<table border=1 cellspacing=50 bgcolor=lightgreen> + <TR> + <TD colspan=4> + Cell, and stuff to test out table cell layout. This + should be long enough for testing, but here's some more + just in case it's needed. + <TR> + <TD>1 22 + <TD>a bb ccc dddd + <TD>a bb ccc dddd + <TD>1 22 333 4444 55555 +</table> +<br> +<table border=1 cellspacing=50 bgcolor=lightgreen> + <TR> + <TD colspan=4> + This_is_a_cell_with_a_very_long_word_inside. + <TR> + <TD>1 22 + <TD>a bb ccc dddd + <TD>a bb ccc dddd + <TD>1 22 333 4444 55555 +</table> + +<br> +<br> + +</body> +</html> + diff --git a/old/test/tables/per.7.html b/old/test/tables/per.7.html new file mode 100644 index 0000000..97e8f7e --- /dev/null +++ b/old/test/tables/per.7.html @@ -0,0 +1,30 @@ +<html> +<head> +<title>Test 6</title> +</head> + +<body> + +<table border=1> + <tr><td colspan=2>Cell, and stuff to test out table cell layout. + This should be long enough for testing. + <tr><td>Cell 1<td> +<table border=1> + <tr><td colspan=2>Cell, and stuff to test out table cell layout. + This should be long enough for testing. + <tr><td>Cell 2<td> +<table border=1> + <tr><td colspan=2>Cell, and stuff to test out table cell layout. + This should be long enough for testing. + <tr><td>Cell 3<td> +<table border=1> + <tr><td colspan=2>Cell, and stuff to test out table cell layout. + This should be long enough for testing. + <tr><td>Cell 4<td>Last Cell +</table> +</table> +</table> +</table> +</body> +</html> + diff --git a/old/test/tables/per.bak.html b/old/test/tables/per.bak.html new file mode 100644 index 0000000..68d5547 --- /dev/null +++ b/old/test/tables/per.bak.html @@ -0,0 +1,32 @@ +<html><head><title></title></head><body> + +<table border=1> +<tr> + <td width=500 bgcolor=silver><b>Width = 500</b><br> + <td> + <table border=1> + <tr> + <td width="10%">10% + <td width="40%">40% + <td>some extra text here + </table> +</table> + + width=100%<br> + <table width="100%" border=1> + <tr> + <td width="10%">10% + <td width="40%">40% + <td>some extra text here + </table> + + width=AUTO<br> + <table border=1> + <tr> + <td width="10%">10% + <td width="40%">40% + <td>some extra text here + </table> + +</body></html> + diff --git a/old/test/tables/per.html b/old/test/tables/per.html new file mode 100644 index 0000000..6dfd676 --- /dev/null +++ b/old/test/tables/per.html @@ -0,0 +1,12 @@ +<html> +<body> +<br> This table has cell(min,max) < cellspacing + +<table width=800 border=1 bgcolor=lightgreen> + <TR> + <TD width=800 colspan=2>C</TD></TR> +</table> + +</body> +</html> + diff --git a/old/test/tables/per1.html b/old/test/tables/per1.html new file mode 100644 index 0000000..f1b390b --- /dev/null +++ b/old/test/tables/per1.html @@ -0,0 +1,106 @@ +<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> +<html><body> + <h2>Absolute/Percentage tables</h2> + <img src="rbowline.png" alt="img"> + <table width=500 border=1> + <tr> + <td><b>Width=500</b> + </table> + + <table width=500 border=1> + <tr> + <td width="10%">10% + <td width="15%">15% + <td>some extra text + </table> + <table width=500 border=1> + <tr> + <td width="25%">25% + <td>some extra text + </table> + <table width=500 border=4> + <tr> + <td width="25%">25% + <td>border=4 + </table> + + <table width=500 cellspacing=10 border=1> + <tr> + <td width="25%">25% + <td>1 + <td>22 + <td>333 + <td>4444 + <td>55555 + </table> + <table width=500 cellpadding=10 border=1> + <tr> + <td width="25%">25% + <td>1 + <td>22 + <td>333 + <td>4444 + <td>55555 + </table> + <table width=500 cellspacing=10 cellpadding=10 border=1> + <tr> + <td width="25%">25% + <td>1 + <td>22 + <td>333 + <td>4444 + <td>55555 + </table> + + <h2>Absolute/Auto tables</h2> + <img src="rbowline.png" alt="img"> + <table width=500 border=1> + <tr> + <td>1 + <td>2 2 2 2 + <td>333 + </table> + <table width=500 border=1> + <tr> + <td>111111111111111 + <td>2 2 2 2 2 2 2 2 2 2 2 + <td>333 + </table> + <table width=500 border=1> + <tr> + <td>111111111111111 + <td>2 2 2 2 2 2 2 2 2 2 2 + 2 2 2 2 2 2 2 2 2 2 2 2 2 + <td>333 + </table> + + <h2>Absolute/Absolute tables</h2> + <img src="rbowline.png" alt="img"><br> + Fit columns: + <table width=500 border=1> + <td width='100' bgcolor=lightgreen> abs=100 + <td width='400' bgcolor=lightgreen> abs=400 + </table> + Wider columns: + <table width=500 border=1> + <td width='100' bgcolor=lightgreen>100 + <td width='800' bgcolor=lightgreen>800 + </table> + Narrow columns: + <table width=500 border=1> + <td width='100' bgcolor=lightgreen>100 + <td width='200' bgcolor=lightgreen>200 + </table> + <table width=500 border=1> + <td width='100' bgcolor=lightgreen>100_but-with-a-long-word + <td width='400' bgcolor=lightgreen>400 + </table> + <table width=500 border=1> + <tr> + <td width='100' bgcolor=lightgreen>100_but-with-a-long-word + <td width='100' bgcolor=lightgreen>100_but-with-a-long-word + <td width='100' bgcolor=lightgreen>100_but-with-a-long-word + <td width='100'>100 + </table> + +</body></html> diff --git a/old/test/tables/per2.html b/old/test/tables/per2.html new file mode 100644 index 0000000..8653ec6 --- /dev/null +++ b/old/test/tables/per2.html @@ -0,0 +1,188 @@ +<html><head><title></title></head><body> + +<table border=1> +<tr> + <td bgcolor=silver><b>Width = 500</b><br> + <table width=500 border=1> + <tr> + <td width="25%">25% + <td>some extra text + </table> + <table width=500 border=1> + <tr> + <td width="25%">25% + <td>1 + <td>22 + <td>333 + </table> + + <br> + <table width=500 border=1> + <tr> + <td width="50%">50% + <td>some extra text + </table> + + <br> + <table width=500 border=1> + <tr> + <td width="100%">100% + <td>some extra text + </table> + + <br> + <table width=500 border=1> + <tr> + <td width="200%">200% + <td>some extra text + </table> + + <br> + <table width=500 border=1> + <tr> + <td width="10%">10% + <td width="40%">40% + <td>some extra text + </table> + <td bgcolor=lightblue><b>Width = AUTO</b><br> + <table _idth=500 border=1> + <tr> + <td width="25%">25% + <td>some extra text + </table> + <table _idth=500 border=1> + <tr> + <td width="25%">25% + <td>1 + <td>22 + <td>333 + </table> + + <br> + <table _idth=500 border=1> + <tr> + <td width="50%">50% + <td>some extra text + </table> + + <br> + <table _idth=500 border=1> + <tr> + <td width="100%">100% + <td>some extra text + </table> + + <br> + <table _idth=500 border=1> + <tr> + <td width="200%">200% + <td>some extra text + </table> + + <br> + <table _idth=500 border=1> + <tr> + <td width="10%">10% + <td width="40%">40% + <td>some extra text + </table> + </tr> +</table> + + +<br> +<table width=500 border=1> +<tr> + <td width="100%">100% + <td width="100%">100% + <td>some extra text +</table> + +<br> +<table width=500 border=1> +<tr> + <td width="50%">50% + <td width="100%">100% + <td width="200%">200% + <td>some extra text +</table> +<table width=500 border=1> +<tr> + <td width="50%">50% + <td width="50%">50% + <td bgcolor=olive>200% + <td>some extra text +</table> + +<br> +<table width=500 border=1> +<tr> + <td width="30%">30% + <td width="70%">70% + <td width="30%">30% + <td width="200%">200% + <td width="200%">200% + <td>some extra text +</table> + +<br> +<table width=500 border=1> +<tr> + <td width="50%">50% + <td width="50%">50% + <td width="200%">200% + <td width="200%">200% + <td width="200%">200% + <td>some extra text +</table> +<table width=500 border=1> +<tr> + <td width="50%">50% + <td width="50%">50% + <td bgcolor=olive>200% + <td bgcolor=olive>200% + <td bgcolor=olive>200% + <td>some extra text +</table> +<table width=500 border=1> +<tr> + <td width="90%">90% + <td>very-long-word + <td>some-extra-text +</table> +<table width=500 border=1> +<tr> + <td width="25%">25% + <td>very-long-word + <td>some-extra-text +</table> + +<h2>Other tests:</h2> +<table border=1> +<tr> + <td bgcolor=silver>Hola + <td bgcolor=teal>Auto +</table> + +<br> +<table border=1> +<tr> + <td bgcolor=silver> + <table width=500 border=1> + <tr> + <td>word1 + <td>word2 + </table> + <td bgcolor=lightblue>Cell +</table> + +<br> +<table width=500 border=3> +<tr> + <td width="50%">50%</td> + <td>other text here</td> +</tr> +</table> + +</body></html> + diff --git a/old/test/tables/per3.html b/old/test/tables/per3.html new file mode 100644 index 0000000..c62073e --- /dev/null +++ b/old/test/tables/per3.html @@ -0,0 +1,154 @@ +<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Test</title> +</head> + +<body leftmargin="0" topmargin="0"> + <h2 align=center>Auto/Percentage tables</h2> + + <h3>100% in columns</h3> + <table border=1> + <tr> <td width='10%'>(10%) + <td width='20%'>20% + <td width='70%'>70% + </table> + <br> + <table border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>(10%) + </table> + <br> + <table border=1> + <tr> <td width='10%'>10% + <td width='20%'>20% + <td width='70%'>70% + </table> + <br> + <table border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <tr> <td colspan="2" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 + <td>B + </table> + + <h3>100% in columns, with extra auto column</h3> + <table border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <td> e x + <tr> <td colspan="2" bgcolor=cyan>1 2 3 4 5 6 7 8 9 10 + <td colspan="2">B + </table> + + <h3>100% in columns, with extra abs column</h3> + <table border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <td width='100' bgcolor=lightgreen> abs=100 + <tr> <td colspan="2" bgcolor=cyan>1 2 3 4 5 6 7 8 9 10 + <td colspan="2">B + </table> + + <h3>Less than 100% in columns</h3> + <table border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + </table> + <br> + <table border=1> + <tr> <td width='50%' bgcolor=lightblue>50% + <td width='20%'>20% + </table> + <br> + <table border=1> + <tr> <td width='100' bgcolor=lightgreen>ABS=100 + <td width='50%' bgcolor=lightblue>50% + <td width='20%'>20% + </table> + <br> + <table border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + </table> + + <h3>Less than 100% in columns with extra column</h3> + <table border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td> e x + </table> + <br> + <table border=1> + <tr> <td width='50%' bgcolor=lightblue>50% + <td width='20%'>20% + <td> e x + </table> + <br> + <table border=1> + <tr> <td width='50%' bgcolor=lightblue>50% + <td width='10%'>10% + <td> e x + </table> + <br> + <table border=1> + <tr> + <td width="80%">80% + <td>very-long-word + <td>some-extra-text + </table> + <br> + <table border=1> + <tr> + <td width="25%">25% + <td>very-long-word + <td>some-extra-text + </table> + + <h3>More than 100% in columns</h3> + <table border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + </table> + + <h3>More than 100% in columns with extra column</h3> + <table border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + <td> e x + </table> + + <h2 align=center>Auto/Auto tables</h2> + + <h3>sumMin = sumMax</h3> + <table border=1> + <tr> <td>1<td>22<td>333<td>4444<td>55555 + </table> + + <h3>ABS column</h3> + <table border=1> + <tr> + <td width=300 bgcolor=lightgreen>ABS=300 + <td>1<td>22<td>333<td>4444<td>55555 + </table> + <br> + <table border=1> + <tr> + <td width=300 bgcolor=lightgreen>ABS=300 + <td>1<td>2 2<td>3 3 3<td>4 4 4 4<td>5 5 5 5 5 + </table> + +<br> +<br> +</body> +</html> diff --git a/old/test/tables/per4.html b/old/test/tables/per4.html new file mode 100644 index 0000000..e34eee2 --- /dev/null +++ b/old/test/tables/per4.html @@ -0,0 +1,235 @@ +<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Test</title> +</head> + +<body leftmargin="0" topmargin="0"> + <h2 align=center>Percentage/Percentage tables</h2> + + <h3>100% in columns</h3> + width=100% with td width in percentage<br> + <table width='100%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <tr> <td colspan="2" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 + <td>B + </table> + + width=80% with td width in percentage<br> + <table width='80%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <tr> <td colspan="2" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 + <td>B + </table> + + width=50% with td width in percentage<br> + <table width='50%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <tr> <td colspan="2" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 + <td>B + </table> + + width=200% with td width in percentage<br> + <table width='200%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <tr> <td colspan="2" bgcolor=teal>1 2 3 4 5 6 7 8 9 10 + <td>B + </table> + <hr> + <h3>100% in columns, with extra auto column</h3> + width=100% with td width in percentage<br> + <table width='100%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <td> e x + <tr> <td colspan="2" bgcolor=cyan>1 2 3 4 5 6 7 8 9 10 + <td colspan="2">B + </table> + + width=80% with td width in percentage<br> + <table width='80%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <td> e x + <tr> <td colspan="2" bgcolor=cyan>1 2 3 4 5 6 7 8 9 10 + <td colspan="2">B + </table> + + width=50% with td width in percentage<br> + <table width='50%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <td> e x + <tr> <td colspan="2" bgcolor=cyan>1 2 3 4 5 6 7 8 9 10 + <td colspan="2">B + </table> + + width=200% with td width in percentage<br> + <table width='200%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td width='10%'>10% + <td> e x + <tr> <td colspan="2" bgcolor=cyan>1 2 3 4 5 6 7 8 9 10 + <td colspan="2">B + </table> + + <h3>Less than 100% in columns</h3> + width=100% + <table width='100%' border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + </table> + width=100% + <table width='100%' border=1> + <tr> <td width='50%' bgcolor=lightblue>50% + <td width='20%'>20% + </table> + width=100% + <table width='100%' border=1> + <tr> <td width='100' bgcolor=lightgreen>ABS=100 + <td width='50%' bgcolor=lightblue>50% + <td width='20%'>20% + </table> + width=80% + <table width='80%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + </table> + width=50% + <table width='50%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + </table> + width=200% + <table width='200%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + </table> + + <h3>Less than 100% in columns with extra column</h3> + width=100% + <table width='100%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td> e x + </table> + width=100% + <table width='100%' border=1> + <tr> <td width='50%' bgcolor=lightblue>50% + <td width='20%'>20% + <td> e x + </table> + width=80% + <table width='80%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td> e x + </table> + width=50% + <table width='50%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td> e x + </table> + width=200% + <table width='200%' border=1> + <tr> <td width='70%'>70% + <td width='20%'>20% + <td> e x + </table> + + width=80% + <table width='80%' border=1> + <tr> + <td width="90%">90% + <td>very-long-word + <td>some-extra-text + </table> + width=80% + <table width='80%' border=1> + <tr> + <td width="25%">25% + <td>very-long-word + <td>some-extra-text + </table> + + <h3>More than 100% in columns</h3> + width=100% + <table width='100%' border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + </table> + width=80% + <table width='80%' border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + </table> + width=50% + <table width='50%' border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + </table> + width=200% + <table width='200%' border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + </table> + + <h3>More than 100% in columns with extra column</h3> + width=100% + <table width='100%' border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + <td> e x + </table> + width=80% + <table width='80%' border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + <td> e x + </table> + width=50% + <table width='50%' border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + <td> e x + </table> + width=200% + <table width='200%' border=1> + <tr> <td width='50%'>50% + <td width='20%'>20% + <td width='20%'>20% + <td width='50%'>50% + <td> e x + </table> + +</body> +</html> diff --git a/old/test/tables/rbowline.png b/old/test/tables/rbowline.png Binary files differnew file mode 100644 index 0000000..507d4f9 --- /dev/null +++ b/old/test/tables/rbowline.png diff --git a/old/test/tables/t.html b/old/test/tables/t.html new file mode 100644 index 0000000..27c9690 --- /dev/null +++ b/old/test/tables/t.html @@ -0,0 +1,27 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + +<head> <title>Achieved Goals</title> </head> + +<body> + +<table border='1'> + <tr> + <td> + <table border=1> + <tr><td>w1 + </table> + </td> +</table> + +<br> +<table border='1'> <tr><td>w1 </table> + +1<b>2</b>3 <br> +1 <b>2</b> 3 <br> +1<i><b> 2 </b></i>3 <br> +1 <i><b> 2 </b></i> 3 <br> + +</body> +</html> + diff --git a/old/test/tables/tables-tst.tar.gz b/old/test/tables/tables-tst.tar.gz Binary files differnew file mode 100644 index 0000000..6d796f3 --- /dev/null +++ b/old/test/tables/tables-tst.tar.gz diff --git a/old/test/tables/test6.2.html b/old/test/tables/test6.2.html new file mode 100644 index 0000000..c78d533 --- /dev/null +++ b/old/test/tables/test6.2.html @@ -0,0 +1,67 @@ +<html> +<head> +<title>Test 6</title> + +<style> +PRE { color:red; } +</style> +<meta name="crc" content=1567940029> +</head> + +<body> +<h1>Example 6: Table Stress Test</h1> +<PRE>Resize document for maximum effect</PRE> + +<br> +<h2>Auto-width tables with spans nested 8 levels deep</h2> +<table cellspacing=10 border=1 bgcolor=red> + <TR><TD>Cell</TD><TD COLSPAN=2 ROWSPAN=2> +<table cellspacing=10 border=1 bgcolor=lightblue> + <TR><TD>Cell</TD><TD COLSPAN=2 ROWSPAN=2> +<table cellspacing=10 border=1 bgcolor=lightgreen> + <TR><TD>Cell</TD><TD COLSPAN=2 ROWSPAN=2> +<table cellspacing=10 border=1> + <TR><TD>Cell</TD><TD COLSPAN=2 ROWSPAN=2> +<table cellspacing=10 border=1 bgcolor=orange> + <TR><TD>Cell</TD><TD COLSPAN=2 ROWSPAN=2> +<table cellspacing=10 border=1 bgcolor=red> + <TR><TD>Cell</TD><TD COLSPAN=2 ROWSPAN=2> +<table cellspacing=10 border=1 bgcolor=lightblue> + <TR><TD>Cell</TD><TD COLSPAN=2 ROWSPAN=2> +<table cellspacing=10 border=1 bgcolor=lightgreen> + <TR><TD>Cell</TD><TD COLSPAN=2 ROWSPAN=2> Cell, and stuff to test out table cell layout. This should be long enough for testing.</TD></TR> +<TR><TD>Cell</TD></TR> +<TR><TD>Cell</TD><TD> Cell, and stuff to test out table cell layout. This should be long enough for testing.</TD><TD>Cell</TD></TR> +</table> +</TD></TR> +<TR><TD>Cell</TD></TR> +<TR><TD>Cell</TD><TD> Cell, and stuff to test out table cell layout. This should be long enough for testing.</TD><TD>Cell</TD></TR> +</table> +</TD></TR> +<TR><TD>Cell</TD></TR> +<TR><TD>Cell</TD><TD> Cell, and stuff to test out table cell layout. This should be long enough for testing.</TD><TD>Cell</TD></TR> +</table> +</TD></TR> +<TR><TD>Cell</TD></TR> +<TR><TD>Cell</TD><TD> Cell, and stuff to test out table cell layout. This should be long enough for testing.</TD><TD>Cell</TD></TR> +</table> +</TD></TR> +<TR><TD>Cell</TD></TR> +<TR><TD>Cell</TD><TD> Cell, and stuff to test out table cell layout. This should be long enough for testing.</TD><TD>Cell</TD></TR> +</table> +</TD></TR> +<TR><TD>Cell</TD></TR> +<TR><TD>Cell</TD><TD> Cell, and stuff to test out table cell layout. This should be long enough for testing.</TD><TD>Cell</TD></TR> +</table> +</TD></TR> +<TR><TD>Cell</TD></TR> +<TR><TD>Cell</TD><TD> Cell, and stuff to test out table cell layout. This should be long enough for testing.</TD><TD>Cell</TD></TR> +</table> +</TD></TR> +<TR><TD>Cell</TD></TR> +<TR><TD>Cell</TD><TD> Cell, and stuff to test out table cell layout. This should be long enough for testing.</TD><TD>Cell</TD></TR> +</table> + +</body> +</html> + diff --git a/old/test/vertical-align.patch b/old/test/vertical-align.patch new file mode 100644 index 0000000..99aa39d --- /dev/null +++ b/old/test/vertical-align.patch @@ -0,0 +1,435 @@ +diff -r e21306fce501 dw/textblock.cc +--- a/dw/textblock.cc Sun Dec 20 19:02:02 2009 +0000 ++++ b/dw/textblock.cc Tue Dec 22 00:59:00 2009 +0000 +@@ -329,6 +329,48 @@ + //DBG_MSG_END (widget); + } + ++/* ++ * Determine the Y offset for a word of the given style and dimensions ++ * in the line. ++ */ ++int Textblock::wordYOffsetLine(Line *line, int ascent, int descent, ++ core::style::Style *style) ++{ ++ int y = 0; ++ ++ if (style->valign == core::style::VALIGN_TOP) { ++ MSG("valign top\n"); ++ } else if (style->valign == core::style::VALIGN_TEXT_TOP) { ++ y = line->ascent - style->font->ascent; ++ MSG("valign text-top\n"); ++ } else if (style->valign == core::style::VALIGN_MIDDLE) { ++ /* It is supposed to be centered at xHeight/2, i.e., something more ++ * like the "center of mass" than the midpoint of the Line. ++ */ ++ y = line->ascent - (style->font->ascent - style->font->descent + ++ (ascent + descent)) / 2; ++ MSG("valign middle\n"); ++ } else { ++ y = line->ascent - ascent; ++ ++ if (style->valign == core::style::VALIGN_BASELINE) { ++ } else if (style->valign == core::style::VALIGN_BOTTOM) { ++ y += line->descent - descent; ++ MSG("valign bottom\n"); ++ } else if (style->valign == core::style::VALIGN_TEXT_BOTTOM) { ++ y += style->font->descent - descent; ++ MSG("valign text-bottom\n"); ++ } else if (style->valign == core::style::VALIGN_SUPER) { ++ y -= style->font->ascent / 2; ++ MSG("valign super\n"); ++ } else if (style->valign == core::style::VALIGN_SUB) { ++ y += style->font->ascent / 3; ++ MSG("valign sub\n"); ++ } ++ } ++ return y; ++} ++ + + void Textblock::sizeAllocateImpl (core::Allocation *allocation) + { +@@ -359,17 +401,10 @@ + case core::Content::WIDGET: + /** \todo Justification within the line is done here. */ + childAllocation.x = xCursor + allocation->x; +- /* align=top: +- childAllocation.y = line->top + allocation->y; +- */ +- +- /* align=bottom (base line) */ +- /* Commented lines break the n2 and n3 test cases at +- * http://www.dillo.org/test/img/ */ +- childAllocation.y = +- lineYOffsetCanvasAllocation (line, allocation) +- + (line->ascent - word->size.ascent); +- // - word->content.widget->getStyle()->margin.top; ++ childAllocation.y = lineYOffsetCanvasAllocation(line, allocation) + ++ wordYOffsetLine(line, word->size.ascent, ++ word->size.descent, ++ word->style); + childAllocation.width = word->size.width; + childAllocation.ascent = word->size.ascent; + // + word->content.widget->getStyle()->margin.top; +@@ -861,6 +896,90 @@ + } + + /* ++ * Update the line's ascent and descent to accommodate the word. ++ */ ++void Textblock::calcLineAscentDescent(const Word *word, Line *line, ++ int lineIndex) ++{ ++ int wordAscent; ++ int wordDescent; ++ ++ switch (word->style->valign) { ++ case core::style::VALIGN_BASELINE: ++ wordAscent = word->size.ascent; ++ wordDescent = word->size.descent; ++ break; ++ case core::style::VALIGN_SUPER: ++ wordAscent = word->size.ascent + word->style->font->ascent / 2; ++ wordDescent = word->size.descent; ++ break; ++ case core::style::VALIGN_SUB: ++ wordAscent = word->size.ascent; ++ wordDescent = word->size.descent + word->style->font->ascent / 3; ++ break; ++ case core::style::VALIGN_TOP: ++ case core::style::VALIGN_BOTTOM: ++ { ++ /* \todo This needs to be more sophisticated, since a word later in ++ * the line could provide more room, but for now let's stretch out the ++ * line if we need more room. ++ */ ++ int extra = word->size.ascent + word->size.descent - ++ (line->ascent + line->descent); ++ ++ wordAscent = line->ascent; ++ wordDescent = line->descent; ++ ++ if (extra > 0) { ++ int extraDescent = extra * word->size.descent / ++ (word->size.ascent + word->size.descent); ++ wordDescent += extraDescent; ++ wordAscent += extra - extraDescent; ++ } ++ break; ++ } ++ case core::style::VALIGN_MIDDLE: ++ wordAscent = (word->style->font->ascent - word->style->font->descent + ++ word->size.ascent + word->size.descent) / 2; ++ wordDescent = word->size.ascent + word->size.descent - wordAscent; ++ break; ++ case core::style::VALIGN_TEXT_TOP: ++ wordAscent = word->style->font->ascent; ++ wordDescent = word->size.ascent + word->size.descent - wordAscent; ++ break; ++ case core::style::VALIGN_TEXT_BOTTOM: ++ wordDescent = word->style->font->descent; ++ wordAscent = word->size.ascent + word->size.descent - wordDescent; ++ break; ++ default: ++ misc::assertNotReached (); ++ } ++ line->ascent = misc::max (line->ascent, wordAscent); ++ line->descent = misc::max (line->descent, wordDescent); ++ ++ if (word->content.type == core::Content::WIDGET) { ++ line->marginDescent = ++ misc::max (line->marginDescent, ++ wordDescent + ++ word->content.widget->getStyle()->margin.bottom); ++ ++ /* If the widget is not in the first line of the paragraph, its top ++ * margin may make the line higher. ++ */ ++ if (lineIndex > 0) { ++ /* Here, we know already what the break and the bottom margin ++ * contributed to the space before this line. ++ */ ++ line->ascent = ++ misc::max (line->ascent, ++ wordAscent ++ + word->content.widget->getStyle()->margin.top); ++ } ++ } else ++ line->marginDescent = misc::max (line->marginDescent, line->descent); ++} ++ ++/* + * This method is called in two cases: (i) when a word is added (by + * Dw_page_add_word), and (ii) when a page has to be (partially) + * rewrapped. It does word wrap, and adds new lines, if necessary. +@@ -948,41 +1067,7 @@ + } + + lastLine->lastWord = wordIndex; +- lastLine->ascent = misc::max (lastLine->ascent, (int) word->size.ascent); +- lastLine->descent = misc::max (lastLine->descent, (int) word->size.descent); +- +- //DBG_OBJ_ARRSET_NUM (page, "lines.%d.ascent", page->num_lines - 1, +- // lastLine->ascent); +- //DBG_OBJ_ARRSET_NUM (page, "lines.%d.descent", page->num_lines - 1, +- // lastLine->descent); +- +- if (word->content.type == core::Content::WIDGET) { +- lastLine->marginDescent = +- misc::max (lastLine->marginDescent, +- word->size.descent + +- word->content.widget->getStyle()->margin.bottom); +- +- //DBG_OBJ_ARRSET_NUM (page, "lines.%d.descent", page->num_lines - 1, +- // lastLine->descent); +- +- /* If the widget is not in the first line of the paragraph, its top +- * margin may make the line higher. +- */ +- if (lines->size () > 1) { +- /* Here, we know already what the break and the bottom margin +- * contributed to the space before this line. +- */ +- lastLine->ascent = +- misc::max (lastLine->ascent, +- word->size.ascent +- + word->content.widget->getStyle()->margin.top); +- +- //DBG_OBJ_ARRSET_NUM (page, "lines.%d.ascent", page->num_lines - 1, +- // lastLine->ascent); +- } +- } else +- lastLine->marginDescent = +- misc::max (lastLine->marginDescent, lastLine->descent); ++ calcLineAscentDescent(word, lastLine, lines->size() - 1); + + getWordExtremes (word, &wordExtremes); + lastSpace = (wordIndex > 0) ? words->getRef(wordIndex - 1)->origSpace : 0; +@@ -1216,23 +1301,23 @@ + */ + void Textblock::decorateText(core::View *view, core::style::Style *style, + core::style::Color::Shading shading, +- int x, int yBase, int width) ++ int x, int y, int width) + { +- int y; ++ int y2; + +- if (style->textDecoration & core::style::TEXT_DECORATION_UNDERLINE) { +- y = yBase + 1; +- view->drawLine (style->color, shading, x, y, x + width - 1, y); +- } + if (style->textDecoration & core::style::TEXT_DECORATION_OVERLINE) { +- y = yBase - style->font->ascent + 1; +- view->drawLine (style->color, shading, x, y, x + width - 1, y); ++ y2 = y + 1; ++ view->drawLine (style->color, shading, x, y2, x + width - 1, y2); + } + if (style->textDecoration & core::style::TEXT_DECORATION_LINE_THROUGH) { + int height = 1 + style->font->xHeight / 10; + +- y = yBase + (style->font->descent - style->font->ascent) / 2; +- view->drawRectangle (style->color, shading, true, x, y, width, height); ++ y2 = y + (style->font->ascent + style->font->descent) / 2; ++ view->drawRectangle (style->color, shading, true, x, y2, width, height); ++ } ++ if (style->textDecoration & core::style::TEXT_DECORATION_UNDERLINE) { ++ y2 = y + style->font->ascent + 1; ++ view->drawLine (style->color, shading, x, y2, x + width - 1, y2); + } + } + +@@ -1240,34 +1325,27 @@ + * Draw a word of text. + */ + void Textblock::drawText(int wordIndex, core::View *view,core::Rectangle *area, +- int xWidget, int yWidgetBase) ++ int xWidget, int yWidget) + { + Word *word = words->getRef(wordIndex); + int xWorld = allocation.x + xWidget; + core::style::Style *style = word->style; +- int yWorldBase; +- +- /* Adjust the text baseline if the word is <SUP>-ed or <SUB>-ed. */ +- if (style->valign == core::style::VALIGN_SUB) +- yWidgetBase += style->font->ascent / 3; +- else if (style->valign == core::style::VALIGN_SUPER) { +- yWidgetBase -= style->font->ascent / 2; +- } +- yWorldBase = yWidgetBase + allocation.y; ++ int yWorld = yWidget + allocation.y; + + /* Draw background (color, image), when given. */ + if (style->hasBackground ()) + drawBox ( +- view, style, area, xWidget, yWidgetBase - style->font->ascent, ++ view, style, area, xWidget, yWidget, + word->size.width, style->font->ascent + style->font->descent, false); + + view->drawText (style->font, style->color, +- core::style::Color::SHADING_NORMAL, xWorld, yWorldBase, +- word->content.text, strlen (word->content.text)); ++ core::style::Color::SHADING_NORMAL, xWorld, ++ yWorld + style->font->ascent, word->content.text, ++ strlen (word->content.text)); + + if (style->textDecoration) + decorateText(view, style, core::style::Color::SHADING_NORMAL, xWorld, +- yWorldBase, word->size.width); ++ yWorld, word->size.width); + + for (int layer = 0; layer < core::HIGHLIGHT_NUM_LAYERS; layer++) { + if (hlStart[layer].index <= wordIndex && +@@ -1303,18 +1381,18 @@ + /* Draw background for highlighted text. */ + view->drawRectangle ( + wordBgColor, core::style::Color::SHADING_INVERSE, true, xStart, +- yWorldBase - style->font->ascent, width, +- style->font->ascent + style->font->descent); ++ yWorld, width, style->font->ascent + style->font->descent); + + /* Highlight the text. */ + view->drawText (style->font, style->color, + core::style::Color::SHADING_INVERSE, xStart, +- yWorldBase, word->content.text + firstCharIdx, ++ yWorld + style->font->ascent, ++ word->content.text + firstCharIdx, + lastCharIdx - firstCharIdx); + + if (style->textDecoration) + decorateText(view, style, core::style::Color::SHADING_INVERSE, +- xStart, yWorldBase, width); ++ xStart, yWorld, width); + } + } + } +@@ -1324,22 +1402,14 @@ + * Draw a space. + */ + void Textblock::drawSpace(int wordIndex, core::View *view, +- core::Rectangle *area, int xWidget, int yWidgetBase) ++ core::Rectangle *area, int xWidget, int yWidget) + { + Word *word = words->getRef(wordIndex); + int xWorld = allocation.x + xWidget; +- int yWorldBase; ++ int yWorld = allocation.y + yWidget; + core::style::Style *style = word->spaceStyle; + bool highlight = false; + +- /* Adjust the space baseline if it is <SUP>-ed or <SUB>-ed */ +- if (style->valign == core::style::VALIGN_SUB) +- yWidgetBase += style->font->ascent / 3; +- else if (style->valign == core::style::VALIGN_SUPER) { +- yWidgetBase -= style->font->ascent / 2; +- } +- yWorldBase = allocation.y + yWidgetBase; +- + for (int layer = 0; layer < core::HIGHLIGHT_NUM_LAYERS; layer++) { + if (hlStart[layer].index <= wordIndex && + hlEnd[layer].index > wordIndex) { +@@ -1355,13 +1425,13 @@ + + view->drawRectangle ( + spaceBgColor, core::style::Color::SHADING_INVERSE, true, xWorld, +- yWorldBase - style->font->ascent, word->effSpace, ++ yWorld, word->effSpace, + style->font->ascent + style->font->descent); + } else { + /* Draw space background (color, image), when given. */ + if (style->hasBackground ()) + drawBox ( +- view, style, area, xWidget, yWidgetBase - style->font->ascent, ++ view, style, area, xWidget, yWidget, + word->effSpace, style->font->ascent + style->font->descent, false); + } + if (style->textDecoration) { +@@ -1369,7 +1439,7 @@ + core::style::Color::SHADING_INVERSE : + core::style::Color::SHADING_NORMAL; + +- decorateText(view, style, shading, xWorld, yWorldBase, word->effSpace); ++ decorateText(view, style, shading, xWorld, yWorld, word->effSpace); + } + } + +@@ -1382,7 +1452,7 @@ + void Textblock::drawLine (Line *line, core::View *view, core::Rectangle *area) + { + int xWidget = lineXOffsetWidget(line); +- int yWidgetBase = lineYOffsetWidget (line) + line->ascent; ++ int yWidget = lineYOffsetWidget (line); + + /* Here's an idea on how to optimize this routine to minimize the number + * of drawing calls: +@@ -1400,6 +1470,7 @@ + if (xWidget + word->size.width + word->effSpace >= area->x) { + if (word->content.type == core::Content::TEXT || + word->content.type == core::Content::WIDGET) { ++ int yOffset; + + if (word->size.width > 0) { + if (word->content.type == core::Content::WIDGET) { +@@ -1409,14 +1480,20 @@ + if (child->intersects (area, &childArea)) + child->draw (view, &childArea); + } else { +- drawText(wordIndex, view, area, xWidget, yWidgetBase); ++ yOffset = wordYOffsetLine(line, word->style->font->ascent, ++ word->style->font->descent, ++ word->style); ++ drawText(wordIndex, view, area, xWidget, yWidget + yOffset); + } + } + if (word->effSpace > 0 && wordIndex < line->lastWord && + words->getRef(wordIndex + 1)->content.type != + core::Content::BREAK) { ++ yOffset = wordYOffsetLine(line, word->spaceStyle->font->ascent, ++ word->spaceStyle->font->descent, ++ word->spaceStyle); + drawSpace(wordIndex, view, area, xWidget + word->size.width, +- yWidgetBase); ++ yWidget + yOffset); + } + + } +@@ -1582,17 +1659,8 @@ + size->width = layout->textWidth (style->font, text, len); + size->ascent = style->font->ascent; + size->descent = style->font->descent; +- +- /* In case of a sub or super script we increase the word's height and +- * potentially the line's height. +- */ +- if (style->valign == core::style::VALIGN_SUB) +- size->descent += (size->ascent / 3); +- else if (style->valign == core::style::VALIGN_SUPER) +- size->ascent += (size->ascent / 2); + } + +- + /** + * Add a word to the page structure. Stashes the argument pointer in + * the page data structure so that it will be deallocated on destroy. +diff -r e21306fce501 dw/textblock.hh +--- a/dw/textblock.hh Sun Dec 20 19:02:02 2009 +0000 ++++ b/dw/textblock.hh Tue Dec 22 00:59:00 2009 +0000 +@@ -260,6 +260,7 @@ + void markChange (int ref); + void justifyLine (Line *line, int availWidth); + void addLine (int wordInd, bool newPar); ++ void calcLineAscentDescent (const Word *word, Line *line, int lineIndex); + void calcWidgetSize (core::Widget *widget, core::Requisition *size); + void rewrap (); + void decorateText(core::View *view, core::style::Style *style, +@@ -339,6 +340,8 @@ + { + return lineYOffsetCanvas (lines->getRef (lineIndex)); + } ++ int wordYOffsetLine(Line *line, int ascent, int descent, ++ core::style::Style *style); + + bool sendSelectionEvent (core::SelectionState::EventType eventType, + core::MousePositionEvent *event); diff --git a/old/test/weirdChars.jpg b/old/test/weirdChars.jpg Binary files differnew file mode 100644 index 0000000..714c822 --- /dev/null +++ b/old/test/weirdChars.jpg diff --git a/old/test/weird_pre.html b/old/test/weird_pre.html new file mode 100644 index 0000000..29fc232 --- /dev/null +++ b/old/test/weird_pre.html @@ -0,0 +1,92 @@ +<HTML> +<HEAD> +<TITLE>from mSQL 2.0 User Guide</TITLE> +</HEAD> +<BODY TEXT="#000000" LINK="#0000ff" VLINK="#800080" BGCOLOR="#ffffff"> + +<B><FONT SIZE=3><P ALIGN="JUSTIFY">Step 1</B></FONT><FONT SIZE=2>		Unpack the software distribution using gunzip and tar</P><DIR> +<DIR> +<DIR> +<DIR> +<DIR> + +</FONT><FONT FACE="Helvetica-Narrow" SIZE=1><P>gunzip msql-2.0-rel.tar.gz</P> +<P>tar –xvf msql-2.0-rel.tar</P> +</FONT><FONT FACE="Helvetica-Narrow" SIZE=1><P> </P> +</FONT><B><I><FONT FACE="Helvetica-Narrow" SIZE=1><P>Or</P> +</B></I><P>gzcat msql-2.0-rel.tar.gz | tar –xvf –</P></DIR> +</DIR> +</DIR> +</DIR> +</DIR> + +</FONT><B><FONT SIZE=3><P ALIGN="JUSTIFY">Step 2</B></FONT><FONT SIZE=2>		Create a target directory for your hardware platform</P><DIR> +<DIR> +<DIR> +<DIR> +<DIR> + +</FONT><FONT FACE="Helvetica-Narrow" SIZE=1><P>cd msql-2.0-rel</P> +<P>make target</P> +<P> </P></DIR> +</DIR> +</DIR> +</DIR> +</DIR> + +</FONT><B><FONT SIZE=3><P ALIGN="JUSTIFY">Step 3</B></FONT><FONT SIZE=2>		Configure the compilation process</P><DIR> +<DIR> +<DIR> +<DIR> +<DIR> + +</FONT><FONT FACE="Helvetica-Narrow" SIZE=1><P>cd targets/YourTargetDirectory</P> +<P>./setup</P> +<P> </P></DIR> +</DIR> +</DIR> +</DIR> +</DIR> + +</FONT><B><FONT SIZE=3><P ALIGN="JUSTIFY">Step 4</B></FONT><FONT SIZE=2>		Check the default values of INST_DIR and CC in the site.mm file</P> +<P ALIGN="JUSTIFY"> </P> +</FONT><B><FONT SIZE=3><P ALIGN="JUSTIFY">Step 5</B></FONT><FONT SIZE=2>		Compile the software</P><DIR> +<DIR> +<DIR> +<DIR> +<DIR> + +</FONT><FONT FACE="Helvetica-Narrow" SIZE=1><P>make all</P> +<P> </P></DIR> +</DIR> +</DIR> +</DIR> +</DIR> + +</FONT><B><FONT SIZE=3><P ALIGN="JUSTIFY">Step 6</B></FONT><FONT SIZE=2>		Install the software</P><DIR> +<DIR> +<DIR> +<DIR> +<DIR> + +</FONT><FONT FACE="Helvetica-Narrow" SIZE=1><P>make install</P></DIR> +</DIR> +</DIR> +</DIR> +</DIR> + +</FONT><B><FONT SIZE=3><P ALIGN="JUSTIFY">Step 7</B></FONT><FONT SIZE=2>		Configure the software by editing the msql.conf file in the installation directory</P> +<P ALIGN="JUSTIFY"> </P> +<P ALIGN="JUSTIFY"> </P></DIR> + +</FONT><B><FONT SIZE=3><P ALIGN="JUSTIFY">Step 8</B></FONT><FONT SIZE=2>Last +<P><b>we</b>are<u>together</u> +<p>look		at						us <-- should be separated with a +single space +<p> look at us <-- should be separated with +2 spaces +<p> look at us <-- should +be separated with 3 spaces + +</BODY> +</HTML> diff --git a/old/test/xmp2.png b/old/test/xmp2.png Binary files differnew file mode 100644 index 0000000..a9826ff --- /dev/null +++ b/old/test/xmp2.png |