diff options
Diffstat (limited to 'blog/sbs_1')
-rw-r--r-- | blog/sbs_1/bloglist.php | 77 | ||||
-rw-r--r-- | blog/sbs_1/bloglista.php | 202 | ||||
-rw-r--r-- | blog/sbs_1/blogreader.php | 90 | ||||
-rw-r--r-- | blog/sbs_1/blossom.png | bin | 140486 -> 0 bytes | |||
-rw-r--r-- | blog/sbs_1/dbloglist.php | 75 | ||||
-rw-r--r-- | blog/sbs_1/dblogreader.php | 90 | ||||
-rw-r--r-- | blog/sbs_1/decryptor.js | 73 | ||||
-rw-r--r-- | blog/sbs_1/extras.css | 50 | ||||
-rw-r--r-- | blog/sbs_1/footnoter.js | 24 | ||||
-rw-r--r-- | blog/sbs_1/simple_html_dom.php | 975 |
10 files changed, 0 insertions, 1656 deletions
diff --git a/blog/sbs_1/bloglist.php b/blog/sbs_1/bloglist.php deleted file mode 100644 index 32e59b7..0000000 --- a/blog/sbs_1/bloglist.php +++ /dev/null @@ -1,77 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta http-equiv="expires" content="Friday 24 October 1997 09:30 GMT"> -<meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Chrisoft::Blog</title> - <link rel=stylesheet href='../common.css' type='text/css'> - <link rel=stylesheet href='extras.css' type='text/css'> - <script type="text/javascript"> -function ol() -{ -if( navigator.userAgent.match(/Android/i) - || navigator.userAgent.match(/webOS/i) - || navigator.userAgent.match(/iPhone/i) - || navigator.userAgent.match(/iPad/i) - || navigator.userAgent.match(/iPod/i) - || navigator.userAgent.match(/BlackBerry/i) - || navigator.userAgent.match(/Windows Phone/i) - ) - document.getElementById("tab").style.width="96%"; -} - </script> -</head> -<body onload="ol()"> - <table id="tab" border="0" style="width:70%;margin:auto;"> - <tr> - <td class="CTitle" style="font-size:2em;" colspan="2"> - <a href="../">Chrisoft</a>::Blog - </td> - </tr> - <tr> - <td class="TText" colspan="2" style="padding:10px;"> - <div style="font-size:200%">Deprecated. The new blog system is available <a href="/blog">here</a>.</div> - WARNING: You've entered the dangerous zone.<br> - I occasionally empty the trash in my brain here...<br> - Browse with care!<br> - Most posts are in Chinese... - </td> - </tr> - <tr><td class="TText" colspan="2"> - <?php - $files=scandir("/var/www/html/blog/content",1); - for($i=0,$c=count($files);$i<$c;$i++) - { - if(!(strstr($files[$i],"txt")))continue; - if(strstr($files[$i],"swp"))continue; - $fn=sprintf("/var/www/html/blog/content/%s",$files[$i]); - $handle=fopen($fn, "r"); - $title="";$date="";$tags=""; - if($handle) - { - $title=fgets($handle,4096); - $date=fgets($handle,4096); - $tags=fgets($handle,4096); - fclose($handle); - } - if(!strstr($tags,"devel")) - { - echo "<tr><td class=\"TText\" style=\"width:50%;\">"; - $cur=sprintf("<a href=\"./blogreader.php?p=%s\">%s</a>",substr($files[$i],0,strlen($files[$i])-4),$title); - echo $cur; - echo "</td><td class=\"TText\" style=\"width:50%;\">"; - echo $date; - echo "</td></tr>"; - } - } - ?> - </td></tr> - <tr> - <td class="TText" colspan="2" style="padding:10px;text-align:center;"> - Proudly powered by SBS <reduced>(the stupid blogging system)</reduced>.<br> - Content licensed under CC BY-SA 4.0. - </td> - </tr> - </table> -</body> diff --git a/blog/sbs_1/bloglista.php b/blog/sbs_1/bloglista.php deleted file mode 100644 index bb762b7..0000000 --- a/blog/sbs_1/bloglista.php +++ /dev/null @@ -1,202 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta http-equiv="expires" content="Friday 24 October 1997 09:30 GMT"> - <title>Chrisoft::Blog</title> - <link rel=stylesheet href='../common.css' type='text/css'> - <link rel=stylesheet href='extras.css' type='text/css'> - <style type="text/css"> - div#button - { - display:table; - position:fixed; - top:50%; - margin-top:-3.5em; - width:4em; - height:7em; - text-align:center; - font-weight:bold; - background-color:rgba(255,204,255,0.5); - color:#EE8899; - } - div#button:hover - { - background-color:rgba(255,220,255,0.7); - color:#FF66CC; - } - </style> - <script type="text/javascript"> - var titles=[],dates=[],links=[],elems=[],oldelems=[],xs=[],ys=[]; - var numPost=5; - var startIdx=0; - var dragging=null; - var xp=0,yp=0,xe=0,ye=0; - function chk(tx,ty) - { - for(var i=0;i<xs.length;++i) - if(Math.hypot(tx-xs[i],ty-ys[i])<100)return 1; - return 0; - } - function dragInit(e) - { - dragging=e;xe=xp-dragging.offsetLeft;ye=yp-dragging.offsetTop; - e.style.transition="none"; - } - function onMove(e) - { - xp=document.all?window.event.clientX:e.pageX; - yp=document.all?window.event.clientY:e.pageY; - if(dragging!==null) - { - dragging.style.left=(xp-xe)+'px'; - dragging.style.top=(yp-ye)+'px'; - } - } - function initTile(obj,inv) - { - var t=0; - t=Math.random()*window.innerHeight; - obj.style.top=t.toString()+'px'; - t=window.innerWidth+Math.random()*window.innerWidth*0.7+window.innerWidth*0.1; - if(inv==1)t-=2*window.innerWidth; - obj.style.left=t.toString()+'px'; - t=Math.random()*360; - obj.style.transform='rotate('+t.toString()+'deg)'; - } - function launchTileIn(obj) - { - var tx=0,ty=0; - obj.style.transition="all 0.5s ease-out"; - do{ - tx=Math.random()*window.innerHeight*0.35+window.innerHeight*0.35; - ty=Math.random()*window.innerWidth*0.6+window.innerWidth*0.1; - }while(chk(tx,ty)==1); - obj.style.top=tx.toString()+'px'; - obj.style.left=ty.toString()+'px'; - xs.push(tx);ys.push(ty); - tx=Math.random()*90-45; - obj.style.transform='rotate('+tx.toString()+'deg)'; - } - function launchTileOut(obj,inv) - { - var t=0; - obj.style.transition="all 0.5s ease-in"; - t=Math.random()*window.innerHeight; - obj.style.top=t.toString()+'px'; - t=0-obj.offsetWidth-Math.random()*window.innerWidth; - if(inv==1)t=window.innerWidth-t; - obj.style.left=t.toString()+'px'; - t=Math.random()*90-45; - obj.style.transform='rotate('+t.toString()+'deg)'; - } - function createTile(id) - { - var e=document.createElement("table"); - e.className="TText"; - e.style.position="fixed"; - e.style.cursor="move"; - e.style.boxShadow="1px 1px 1px 1px #333333"; - e.innerHTML="<tr><td><a href=\""+links[id]+"\">"+titles[id]+"</a></td></tr><tr><td>"+dates[id]+"</td></tr>"; - e.onmousedown=function(){dragInit(e);return false;}; - elems.push(e); - document.getElementsByTagName("body")[0].appendChild(e); - return e; - } - function createGroup(inv) - { - xs.length=ys.length=0; - for(var i=0;i<numPost;++i) - { - if(startIdx+i>=titles.length)break; - var e=createTile(startIdx+i); - initTile(e,inv); - } - setTimeout( - function(){for(var i=0;i<elems.length;++i)launchTileIn(elems[i]);} - ,500); - } - function lastGroup() - { - if(startIdx-numPost<0)return; - oldelems=elems.slice(0);elems.length=0; - for(var i=0;i<oldelems.length;++i)launchTileOut(oldelems[i],1); - setTimeout( - function(){for(var i=0;i<oldelems.length;++i)oldelems[i].remove();} - ,500); - startIdx-=numPost; - createGroup(1); - } - function nextGroup() - { - if(startIdx+numPost>=titles.length)return; - oldelems=elems.slice(0);elems.length=0; - for(var i=0;i<oldelems.length;++i)launchTileOut(oldelems[i],0); - setTimeout( - function(){for(var i=0;i<oldelems.length;++i)oldelems[i].remove();} - ,500); - startIdx+=numPost; - createGroup(0); - } - function onWheel(e) - { - var wdelta=e.wheelDelta||-e.detail; - if(wdelta<0)nextGroup(); - if(wdelta>0)lastGroup(); - } - function init() - { - document.addEventListener("mousewheel",onWheel,false); - document.addEventListener("DOMMouseScroll",onWheel,false); - document.onmousemove=onMove; - document.onmouseup=function(){dragging=null;}; - createGroup(); - } - </script> -</head> -<body onload="init();"> - <table border="0" style="width:70%;margin:auto;"> - <tr> - <td class="CTitle" style="font-size:2em;" colspan="2"> - <a href="../">Chrisoft</a>::Blog - </td> - </tr> - <tr> - <td class="TText" colspan="2" style="padding:10px;"> - WARNING: You've entered the dangerous zone.<br> - I occasionally empty the trash in my brain here...<br> - Browse with care!<br> - Most posts are in Chinese... - </td> - </tr> - </table> - <div onmousedown="lastGroup();" id="button" style="left:0;"> - <span style="display:table-cell;vertical-align:middle;"><</span> - </div> - <div onmousedown="nextGroup();" id="button" style="right:0;"> - <span style="display:table-cell;vertical-align:middle;">></span> - </div> - <script type="text/javascript"> - <?php - $files=scandir("/var/www/html/blog/content",1); - for($i=0,$c=count($files);$i<$c;$i++) - { - if(!(strstr($files[$i],"txt")))continue; - if(strstr($files[$i],"swp"))continue; - $fn=sprintf("/var/www/html/blog/content/%s",$files[$i]); - $handle=fopen($fn, "r"); - $title="";$date=""; - if($handle) - { - $title=fgets($handle,4096); - $date=fgets($handle,4096); - fclose($handle); - } - $title=substr($title,0,strlen($title)-1); - $date=substr($date,0,strlen($date)-1); - $cur=sprintf("links.push(\"./blogreader.php?p=%s\");titles.push(\"%s\");dates.push(\"%s\");\n",substr($files[$i],0,strlen($files[$i])-4),$title,$date); - echo $cur; - } - ?> - </script> -</body> diff --git a/blog/sbs_1/blogreader.php b/blog/sbs_1/blogreader.php deleted file mode 100644 index 5f55cc7..0000000 --- a/blog/sbs_1/blogreader.php +++ /dev/null @@ -1,90 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta http-equiv="expires" content="Friday 24 October 1997 09:30 GMT"> -<meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Chrisoft::Blog</title> - <link rel=stylesheet href='../common.css' type='text/css'> - <link rel=stylesheet href='extras.css' type='text/css'> - <script type="text/javascript" src="footnoter.js"></script> - <script type="text/javascript" src="decryptor.js"></script> - <script type="text/javascript"> -function ol() -{ -if( navigator.userAgent.match(/Android/i) - || navigator.userAgent.match(/webOS/i) - || navigator.userAgent.match(/iPhone/i) - || navigator.userAgent.match(/iPad/i) - || navigator.userAgent.match(/iPod/i) - || navigator.userAgent.match(/BlackBerry/i) - || navigator.userAgent.match(/Windows Phone/i) - ) - document.getElementById("tab").style.width="96%"; - footnoter(); -} - </script> -</head> -<body onload="ol()"> - <table id="tab" border="0" style="width:70%;margin:auto;"> - <tr> - <td class="CTitle" style="font-size:2em;"> - <a href="../">Chrisoft</a>::<a href="./bloglist.php">Blog</a> - </td> - </tr> - <tr> - <td class="TText"> - <?php - require_once("simple_html_dom.php"); - $path=sprintf("/var/www/html/blog/content/%s.txt",$_GET["p"]); - $file=fopen($path,"r"); - if(!$file) - {echo "Invalid parameter...";exit;} - $str=fgets($file,4096); - echo "<div style=\"text-align:center;font-size:1.7em\">".$str."</div><br>"; - $str=fgets($file,4096); - echo "<div style=\"text-align:center;\">".$str."</div><br>"; - $str=fgets($file,4096); - $str=fread($file,262144); - $html=str_get_html($str); - $encrypted=$html->find("encrypted"); - for($i=0;$i<count($encrypted);++$i) - { - $key=$html->find("encrypted",$i)->key; - $html->find("encrypted",$i)->key=null; - $cont=$html->find("encrypted",$i)->innertext; - $html->find("encrypted",$i)->innertext="Encrypted content here. Click <a href=\"javascript:void(0)\" onclick=\"decryptui(".$i.")\">here</a> to decrypt."; - $contarr=str_split($cont); - $lcont=count($contarr); - $keyarr=str_split($key); - $lkey=count($keyarr); - $hash=5381; - for($j=0;$j<$lcont;++$j) - { - $hash=(($hash<<5)+$hash)+ord($contarr[$j]); - $hash&=0xFFFFFFFF; - $contarr[$j]^=$keyarr[$j%$lkey]; - } - $retstr=''; - array_walk($contarr,function($value)use(&$retstr){$retstr.=chr(ord($value));}); - $html->find("encrypted",$i)->encont=base64_encode($retstr); - $html->find("encrypted",$i)->hash=$hash; - $html->find("encrypted",$i)->id="encrypted".$i; - } - echo $html; - fclose($file); - ?> - </td> - </tr> - <tr><td><hr><reduced id="notediv"></reduced></td></tr> - </table> - <div id="decryptui" style="display:none;opacity:0;color:white;z-index:10;position:fixed;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4);transition:opacity 0.5s;"> - <div class="TText" style="padding:20px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background-color:rgba(0,0,0,0.6);"> - <span id="keyhint"></span><br><br> - Key: <input id="keyinp" type="text"><br><br> - <button id="btndecrypt" onclick="decryptor(decid,document.getElementById('keyinp').value);" style="position:absolute;left:20px;">Decrypt</button> - <button onclick="hidedecryptui();" style="position:absolute;right:20px;">Cancel</button> - </form> - </div> - </body> -</html> diff --git a/blog/sbs_1/blossom.png b/blog/sbs_1/blossom.png Binary files differdeleted file mode 100644 index 6f2c304..0000000 --- a/blog/sbs_1/blossom.png +++ /dev/null diff --git a/blog/sbs_1/dbloglist.php b/blog/sbs_1/dbloglist.php deleted file mode 100644 index c2bd137..0000000 --- a/blog/sbs_1/dbloglist.php +++ /dev/null @@ -1,75 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta http-equiv="expires" content="Friday 24 October 1997 09:30 GMT"> -<meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Chrisoft::Development Blog</title> - <link rel=stylesheet href='../common.css' type='text/css'> - <link rel=stylesheet href='extras.css' type='text/css'> - <script type="text/javascript"> -function ol() -{ -if( navigator.userAgent.match(/Android/i) - || navigator.userAgent.match(/webOS/i) - || navigator.userAgent.match(/iPhone/i) - || navigator.userAgent.match(/iPad/i) - || navigator.userAgent.match(/iPod/i) - || navigator.userAgent.match(/BlackBerry/i) - || navigator.userAgent.match(/Windows Phone/i) - ) - document.getElementById("tab").style.width="96%"; -} - </script> -</head> -<body onload="ol()"> - <table id="tab" border="0" style="width:70%;margin:auto;"> - <tr> - <td class="CTitle" style="font-size:2em;" colspan="2"> - <a href="../">Chrisoft</a>::Development Blog - </td> - </tr> - <tr> - <td class="TText" colspan="2" style="padding:10px;"> - <div style="font-size:200%">Deprecated. The new blog system is available <a href="/blog">here</a>.</div> - Development blog.<br> - Most posts here are in English... - </td> - </tr> - <tr><td class="TText" colspan="2"> - <?php - $files=scandir("/var/www/html/blog/content",1); - for($i=0,$c=count($files);$i<$c;$i++) - { - if(!(strstr($files[$i],"txt")))continue; - if(strstr($files[$i],"swp"))continue; - $fn=sprintf("/var/www/html/blog/content/%s",$files[$i]); - $handle=fopen($fn, "r"); - $title="";$date="";$tags=""; - if($handle) - { - $title=fgets($handle,4096); - $date=fgets($handle,4096); - $tags=fgets($handle,4096); - fclose($handle); - } - if(strstr($tags,"devel")) - { - echo "<tr><td class=\"TText\" style=\"width:50%;\">"; - $cur=sprintf("<a href=\"./dblogreader.php?p=%s\">%s</a>",substr($files[$i],0,strlen($files[$i])-4),$title); - echo $cur; - echo "</td><td class=\"TText\" style=\"width:50%;\">"; - echo $date; - echo "</td></tr>"; - } - } - ?> - </td></tr> - <tr> - <td class="TText" colspan="2" style="padding:10px;text-align:center;"> - Proudly powered by SBS <reduced>(the stupid blogging system)</reduced>.<br> - Content licensed under CC BY-SA 4.0. - </td> - </tr> - </table> -</body> diff --git a/blog/sbs_1/dblogreader.php b/blog/sbs_1/dblogreader.php deleted file mode 100644 index d252c19..0000000 --- a/blog/sbs_1/dblogreader.php +++ /dev/null @@ -1,90 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -<meta http-equiv="expires" content="Friday 24 October 1997 09:30 GMT"> -<meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Chrisoft::Development Blog</title> - <link rel=stylesheet href='../common.css' type='text/css'> - <link rel=stylesheet href='extras.css' type='text/css'> - <script type="text/javascript" src="footnoter.js"></script> - <script type="text/javascript" src="decryptor.js"></script> - <script type="text/javascript"> -function ol() -{ -if( navigator.userAgent.match(/Android/i) - || navigator.userAgent.match(/webOS/i) - || navigator.userAgent.match(/iPhone/i) - || navigator.userAgent.match(/iPad/i) - || navigator.userAgent.match(/iPod/i) - || navigator.userAgent.match(/BlackBerry/i) - || navigator.userAgent.match(/Windows Phone/i) - ) - document.getElementById("tab").style.width="96%"; - footnoter(); -} - </script> -</head> -<body onload="ol()"> - <table id="tab" border="0" style="width:70%;margin:auto;"> - <tr> - <td class="CTitle" style="font-size:2em;"> - <a href="../">Chrisoft</a>::<a href="./dbloglist.php">Development Blog</a> - </td> - </tr> - <tr> - <td class="TText"> - <?php - require_once("simple_html_dom.php"); - $path=sprintf("/var/www/html/blog/content/%s.txt",$_GET["p"]); - $file=fopen($path,"r"); - if(!$file) - {echo "Invalid parameter...";exit;} - $str=fgets($file,4096); - echo "<div style=\"text-align:center;font-size:1.7em\">".$str."</div><br>"; - $str=fgets($file,4096); - echo "<div style=\"text-align:center;\">".$str."</div><br>"; - $str=fgets($file,4096); - $str=fread($file,262144); - $html=str_get_html($str); - $encrypted=$html->find("encrypted"); - for($i=0;$i<count($encrypted);++$i) - { - $key=$html->find("encrypted",$i)->key; - $html->find("encrypted",$i)->key=null; - $cont=$html->find("encrypted",$i)->innertext; - $html->find("encrypted",$i)->innertext="Encrypted content here. Click <a href=\"javascript:void(0)\" onclick=\"decryptui(".$i.")\">here</a> to decrypt."; - $contarr=str_split($cont); - $lcont=count($contarr); - $keyarr=str_split($key); - $lkey=count($keyarr); - $hash=5381; - for($j=0;$j<$lcont;++$j) - { - $hash=(($hash<<5)+$hash)+ord($contarr[$j]); - $hash&=0xFFFFFFFF; - $contarr[$j]^=$keyarr[$j%$lkey]; - } - $retstr=''; - array_walk($contarr,function($value)use(&$retstr){$retstr.=chr(ord($value));}); - $html->find("encrypted",$i)->encont=base64_encode($retstr); - $html->find("encrypted",$i)->hash=$hash; - $html->find("encrypted",$i)->id="encrypted".$i; - } - echo $html; - fclose($file); - ?> - </td> - </tr> - <tr><td><hr><reduced id="notediv"></reduced></td></tr> - </table> - <div id="decryptui" style="display:none;opacity:0;color:white;z-index:10;position:fixed;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4);transition:opacity 0.5s;"> - <div class="TText" style="padding:20px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background-color:rgba(0,0,0,0.6);"> - <span id="keyhint"></span><br><br> - Key: <input id="keyinp" type="text"><br><br> - <button id="btndecrypt" onclick="decryptor(decid,document.getElementById('keyinp').value);" style="position:absolute;left:20px;">Decrypt</button> - <button onclick="hidedecryptui();">Cancel</button> - </form> - </div> - </body> -</html> diff --git a/blog/sbs_1/decryptor.js b/blog/sbs_1/decryptor.js deleted file mode 100644 index dcd64e3..0000000 --- a/blog/sbs_1/decryptor.js +++ /dev/null @@ -1,73 +0,0 @@ -//License: Expat(MIT) -//Chrisoft Xiong 2017 -// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt -function Utf8ArrayToStr(array){ - var out,i,len,c; - var char2,char3; - out=""; - len=array.length; - i=0; - while(i<len){ - c=array[i++]; - switch(c>>4) - { - case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7: - // 0xxxxxxx - out+=String.fromCharCode(c); - break; - case 12:case 13: - // 110x xxxx 10xx xxxx - char2=array[i++]; - out+=String.fromCharCode(((c&0x1F)<<6)|(char2&0x3F)); - break; - case 14: - // 1110 xxxx 10xx xxxx 10xx xxxx - char2=array[i++]; - char3=array[i++]; - out+=String.fromCharCode(((c&0x0F)<<12)| - ((char2&0x3F)<<6)| - ((char3&0x3F)<<0)); - break; - } - } - return out; -} -var decid; -function decryptui(id) -{ - document.getElementById("decryptui").style.display="block"; - document.getElementById("keyinp").focus(); - setTimeout(function(){document.getElementById("decryptui").style.opacity="1";},20); - decid=id; - document.getElementById("keyhint").innerHTML="Hint: "+document.getElementById("encrypted"+id).getAttribute("hint"); - document.getElementById("keyinp").onkeypress=function(e){if(e.keyCode==13)document.getElementById('btndecrypt').click();} -} -function hidedecryptui() -{ - document.getElementById("decryptui").style.opacity="0"; - setTimeout(function(){ - document.getElementById("decryptui").style.display="none"; - document.getElementById("keyinp").value=""; - },500); -} -function decryptor(id,key) -{ - var e=document.getElementById("encrypted"+id); - var cont=e.getAttribute("encont"); - var bc=atob(cont); - var b=new Array(bc.length); - for(var i=0;i<bc.length;++i)b[i]=bc.charCodeAt(i); - var lkey=key.length; - var u8arr=new Uint8Array(b); - var hash=5381; - for(var i=0;i<u8arr.length;++i){u8arr[i]^=key.charCodeAt(i%lkey);hash=(hash*33)+u8arr[i];hash%=4294967296;} - if(hash!=parseInt(e.getAttribute("hash"))) - { - alert("The decryption key you have entered could be wrong, please try again."); - return; - } - //e.innerHTML=new TextDecoder("utf-8").decode(u8arr); - e.innerHTML=Utf8ArrayToStr(u8arr); - footnoter(); - hidedecryptui(); -} diff --git a/blog/sbs_1/extras.css b/blog/sbs_1/extras.css deleted file mode 100644 index 6409ebe..0000000 --- a/blog/sbs_1/extras.css +++ /dev/null @@ -1,50 +0,0 @@ -.CTitle { - color: #fff; -} -.TText { - color: #fff; -} -body { - background: #000; - background-image: url(blossom.png); -} -table { - background: rgba(0,0,0,0.8); -} -p { - text-indent: 2em; -} -note, .note { - vertical-align: super; - font-size: 60%; -} -reduced, .reduced { - font-size: 75%; -} -blockquote { - padding: 1em; - margin-left:4em;margin-right:4em; -} -enlarged, .enlarged { - font-size: 125%; -} -button { - border:none; - color:white; - padding:0.5em 2em; - text-align:center; - background-color:#C6C; - -webkit-transition-duration:0.4s; - transition-duration:0.4s; -} -button:hover { - background-color:#E9E; -} -input { - border: none; - border-bottom: 2px solid #C6C; - outline: none !important; - background-color: rgba(0,0,0,0) !important; - color: white; -} - diff --git a/blog/sbs_1/footnoter.js b/blog/sbs_1/footnoter.js deleted file mode 100644 index a1b2d8b..0000000 --- a/blog/sbs_1/footnoter.js +++ /dev/null @@ -1,24 +0,0 @@ -//License: MIT -//Chrisoft Xiong 2017 -var starting=0; -function footnoter() -{ - var footnotes=document.body.getElementsByTagName("footnote"); - for(var i=0;i<footnotes.length;++i) - { - var s=footnotes[i].innerHTML; - footnotes[i].innerHTML="";//IE is stupid - var a=document.createElement("a"); - a.setAttribute("id","n"+(starting+i+1)); - a.setAttribute("href","#note"+(starting+i+1)); - a.setAttribute("class","note"); - a.innerHTML="["+(starting+i+1)+"]"; - footnotes[i].parentNode.insertBefore(a,footnotes[i]); - var span=document.createElement("span"); - span.setAttribute("class","TText"); - span.innerHTML="<a id=\"note"+(starting+i+1)+"\" href=\"#n"+(starting+i+1)+"\">["+(starting+i+1)+"]</a>: "+s+"<br>"; - document.getElementById("notediv").appendChild(span); - } - starting+=footnotes.length; - while(footnotes.length)footnotes[0].remove(); -} diff --git a/blog/sbs_1/simple_html_dom.php b/blog/sbs_1/simple_html_dom.php deleted file mode 100644 index 19e5f66..0000000 --- a/blog/sbs_1/simple_html_dom.php +++ /dev/null @@ -1,975 +0,0 @@ -<?php -/******************************************************************************* -Version: 1.11 ($Rev: 175 $) -Website: http://sourceforge.net/projects/simplehtmldom/ -Author: S.C. Chen <me578022@gmail.com> -Acknowledge: Jose Solorzano (https://sourceforge.net/projects/php-html/) -Contributions by: - Yousuke Kumakura (Attribute filters) - Vadim Voituk (Negative indexes supports of "find" method) - Antcs (Constructor with automatically load contents either text or file/url) -Licensed under The MIT License -Redistributions of files must retain the above copyright notice. -*******************************************************************************/ - -define('HDOM_TYPE_ELEMENT', 1); -define('HDOM_TYPE_COMMENT', 2); -define('HDOM_TYPE_TEXT', 3); -define('HDOM_TYPE_ENDTAG', 4); -define('HDOM_TYPE_ROOT', 5); -define('HDOM_TYPE_UNKNOWN', 6); -define('HDOM_QUOTE_DOUBLE', 0); -define('HDOM_QUOTE_SINGLE', 1); -define('HDOM_QUOTE_NO', 3); -define('HDOM_INFO_BEGIN', 0); -define('HDOM_INFO_END', 1); -define('HDOM_INFO_QUOTE', 2); -define('HDOM_INFO_SPACE', 3); -define('HDOM_INFO_TEXT', 4); -define('HDOM_INFO_INNER', 5); -define('HDOM_INFO_OUTER', 6); -define('HDOM_INFO_ENDSPACE',7); - -// helper functions -// ----------------------------------------------------------------------------- -// get html dom form file -function file_get_html() { - $dom = new simple_html_dom; - $args = func_get_args(); - $dom->load(call_user_func_array('file_get_contents', $args), true); - return $dom; -} - -// get html dom form string -function str_get_html($str, $lowercase=true) { - $dom = new simple_html_dom; - $dom->load($str, $lowercase); - return $dom; -} - -// dump html dom tree -function dump_html_tree($node, $show_attr=true, $deep=0) { - $lead = str_repeat(' ', $deep); - echo $lead.$node->tag; - if ($show_attr && count($node->attr)>0) { - echo '('; - foreach($node->attr as $k=>$v) - echo "[$k]=>\"".$node->$k.'", '; - echo ')'; - } - echo "\n"; - - foreach($node->nodes as $c) - dump_html_tree($c, $show_attr, $deep+1); -} - -// get dom form file (deprecated) -function file_get_dom() { - $dom = new simple_html_dom; - $args = func_get_args(); - $dom->load(call_user_func_array('file_get_contents', $args), true); - return $dom; -} - -// get dom form string (deprecated) -function str_get_dom($str, $lowercase=true) { - $dom = new simple_html_dom; - $dom->load($str, $lowercase); - return $dom; -} - -// simple html dom node -// ----------------------------------------------------------------------------- -class simple_html_dom_node { - public $nodetype = HDOM_TYPE_TEXT; - public $tag = 'text'; - public $attr = array(); - public $children = array(); - public $nodes = array(); - public $parent = null; - public $_ = array(); - private $dom = null; - - function __construct($dom) { - $this->dom = $dom; - $dom->nodes[] = $this; - } - - function __destruct() { - $this->clear(); - } - - function __toString() { - return $this->outertext(); - } - - // clean up memory due to php5 circular references memory leak... - function clear() { - $this->dom = null; - $this->nodes = null; - $this->parent = null; - $this->children = null; - } - - // dump node's tree - function dump($show_attr=true) { - dump_html_tree($this, $show_attr); - } - - // returns the parent of node - function parent() { - return $this->parent; - } - - // returns children of node - function children($idx=-1) { - if ($idx===-1) return $this->children; - if (isset($this->children[$idx])) return $this->children[$idx]; - return null; - } - - // returns the first child of node - function first_child() { - if (count($this->children)>0) return $this->children[0]; - return null; - } - - // returns the last child of node - function last_child() { - if (($count=count($this->children))>0) return $this->children[$count-1]; - return null; - } - - // returns the next sibling of node - function next_sibling() { - if ($this->parent===null) return null; - $idx = 0; - $count = count($this->parent->children); - while ($idx<$count && $this!==$this->parent->children[$idx]) - ++$idx; - if (++$idx>=$count) return null; - return $this->parent->children[$idx]; - } - - // returns the previous sibling of node - function prev_sibling() { - if ($this->parent===null) return null; - $idx = 0; - $count = count($this->parent->children); - while ($idx<$count && $this!==$this->parent->children[$idx]) - ++$idx; - if (--$idx<0) return null; - return $this->parent->children[$idx]; - } - - // get dom node's inner html - function innertext() { - if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; - if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - - $ret = ''; - foreach($this->nodes as $n) - $ret .= $n->outertext(); - return $ret; - } - - // get dom node's outer text (with tag) - function outertext() { - if ($this->tag==='root') return $this->innertext(); - - // trigger callback - if ($this->dom->callback!==null) - call_user_func_array($this->dom->callback, array($this)); - - if (isset($this->_[HDOM_INFO_OUTER])) return $this->_[HDOM_INFO_OUTER]; - if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - - // render begin tag - $ret = $this->dom->nodes[$this->_[HDOM_INFO_BEGIN]]->makeup(); - - // render inner text - if (isset($this->_[HDOM_INFO_INNER])) - $ret .= $this->_[HDOM_INFO_INNER]; - else { - foreach($this->nodes as $n) - $ret .= $n->outertext(); - } - - // render end tag - if(isset($this->_[HDOM_INFO_END]) && $this->_[HDOM_INFO_END]!=0) - $ret .= '</'.$this->tag.'>'; - return $ret; - } - - // get dom node's plain text - function text() { - if (isset($this->_[HDOM_INFO_INNER])) return $this->_[HDOM_INFO_INNER]; - switch ($this->nodetype) { - case HDOM_TYPE_TEXT: return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - case HDOM_TYPE_COMMENT: return ''; - case HDOM_TYPE_UNKNOWN: return ''; - } - if (strcasecmp($this->tag, 'script')===0) return ''; - if (strcasecmp($this->tag, 'style')===0) return ''; - - $ret = ''; - foreach($this->nodes as $n) - $ret .= $n->text(); - return $ret; - } - - function xmltext() { - $ret = $this->innertext(); - $ret = str_ireplace('<![CDATA[', '', $ret); - $ret = str_replace(']]>', '', $ret); - return $ret; - } - - // build node's text with tag - function makeup() { - // text, comment, unknown - if (isset($this->_[HDOM_INFO_TEXT])) return $this->dom->restore_noise($this->_[HDOM_INFO_TEXT]); - - $ret = '<'.$this->tag; - $i = -1; - - foreach($this->attr as $key=>$val) { - ++$i; - - // skip removed attribute - if ($val===null || $val===false) - continue; - - $ret .= $this->_[HDOM_INFO_SPACE][$i][0]; - //no value attr: nowrap, checked selected... - if ($val===true) - $ret .= $key; - else { - switch($this->_[HDOM_INFO_QUOTE][$i]) { - case HDOM_QUOTE_DOUBLE: $quote = '"'; break; - case HDOM_QUOTE_SINGLE: $quote = '\''; break; - default: $quote = ''; - } - $ret .= $key.$this->_[HDOM_INFO_SPACE][$i][1].'='.$this->_[HDOM_INFO_SPACE][$i][2].$quote.$val.$quote; - } - } - $ret = $this->dom->restore_noise($ret); - return $ret . $this->_[HDOM_INFO_ENDSPACE] . '>'; - } - - // find elements by css selector - function find($selector, $idx=null) { - $selectors = $this->parse_selector($selector); - if (($count=count($selectors))===0) return array(); - $found_keys = array(); - - // find each selector - for ($c=0; $c<$count; ++$c) { - if (($levle=count($selectors[0]))===0) return array(); - if (!isset($this->_[HDOM_INFO_BEGIN])) return array(); - - $head = array($this->_[HDOM_INFO_BEGIN]=>1); - - // handle descendant selectors, no recursive! - for ($l=0; $l<$levle; ++$l) { - $ret = array(); - foreach($head as $k=>$v) { - $n = ($k===-1) ? $this->dom->root : $this->dom->nodes[$k]; - $n->seek($selectors[$c][$l], $ret); - } - $head = $ret; - } - - foreach($head as $k=>$v) { - if (!isset($found_keys[$k])) - $found_keys[$k] = 1; - } - } - - // sort keys - ksort($found_keys); - - $found = array(); - foreach($found_keys as $k=>$v) - $found[] = $this->dom->nodes[$k]; - - // return nth-element or array - if (is_null($idx)) return $found; - else if ($idx<0) $idx = count($found) + $idx; - return (isset($found[$idx])) ? $found[$idx] : null; - } - - // seek for given conditions - protected function seek($selector, &$ret) { - list($tag, $key, $val, $exp, $no_key) = $selector; - - // xpath index - if ($tag && $key && is_numeric($key)) { - $count = 0; - foreach ($this->children as $c) { - if ($tag==='*' || $tag===$c->tag) { - if (++$count==$key) { - $ret[$c->_[HDOM_INFO_BEGIN]] = 1; - return; - } - } - } - return; - } - - $end = (!empty($this->_[HDOM_INFO_END])) ? $this->_[HDOM_INFO_END] : 0; - if ($end==0) { - $parent = $this->parent; - while (!isset($parent->_[HDOM_INFO_END]) && $parent!==null) { - $end -= 1; - $parent = $parent->parent; - } - $end += $parent->_[HDOM_INFO_END]; - } - - for($i=$this->_[HDOM_INFO_BEGIN]+1; $i<$end; ++$i) { - $node = $this->dom->nodes[$i]; - $pass = true; - - if ($tag==='*' && !$key) { - if (in_array($node, $this->children, true)) - $ret[$i] = 1; - continue; - } - - // compare tag - if ($tag && $tag!=$node->tag && $tag!=='*') {$pass=false;} - // compare key - if ($pass && $key) { - if ($no_key) { - if (isset($node->attr[$key])) $pass=false; - } - else if (!isset($node->attr[$key])) $pass=false; - } - // compare value - if ($pass && $key && $val && $val!=='*') { - $check = $this->match($exp, $val, $node->attr[$key]); - // handle multiple class - if (!$check && strcasecmp($key, 'class')===0) { - foreach(explode(' ',$node->attr[$key]) as $k) { - $check = $this->match($exp, $val, $k); - if ($check) break; - } - } - if (!$check) $pass = false; - } - if ($pass) $ret[$i] = 1; - unset($node); - } - } - - protected function match($exp, $pattern, $value) { - switch ($exp) { - case '=': - return ($value===$pattern); - case '!=': - return ($value!==$pattern); - case '^=': - return preg_match("/^".preg_quote($pattern,'/')."/", $value); - case '$=': - return preg_match("/".preg_quote($pattern,'/')."$/", $value); - case '*=': - if ($pattern[0]=='/') - return preg_match($pattern, $value); - return preg_match("/".$pattern."/i", $value); - } - return false; - } - - protected function parse_selector($selector_string) { - // pattern of CSS selectors, modified from mootools - $pattern = "/([\w-:\*]*)(?:\#([\w-]+)|\.([\w-]+))?(?:\[@?(!?[\w-]+)(?:([!*^$]?=)[\"']?(.*?)[\"']?)?\])?([\/, ]+)/is"; - preg_match_all($pattern, trim($selector_string).' ', $matches, PREG_SET_ORDER); - $selectors = array(); - $result = array(); - //print_r($matches); - - foreach ($matches as $m) { - $m[0] = trim($m[0]); - if ($m[0]==='' || $m[0]==='/' || $m[0]==='//') continue; - // for borwser grnreated xpath - if ($m[1]==='tbody') continue; - - list($tag, $key, $val, $exp, $no_key) = array($m[1], null, null, '=', false); - if(!empty($m[2])) {$key='id'; $val=$m[2];} - if(!empty($m[3])) {$key='class'; $val=$m[3];} - if(!empty($m[4])) {$key=$m[4];} - if(!empty($m[5])) {$exp=$m[5];} - if(!empty($m[6])) {$val=$m[6];} - - // convert to lowercase - if ($this->dom->lowercase) {$tag=strtolower($tag); $key=strtolower($key);} - //elements that do NOT have the specified attribute - if (isset($key[0]) && $key[0]==='!') {$key=substr($key, 1); $no_key=true;} - - $result[] = array($tag, $key, $val, $exp, $no_key); - if (trim($m[7])===',') { - $selectors[] = $result; - $result = array(); - } - } - if (count($result)>0) - $selectors[] = $result; - return $selectors; - } - - function __get($name) { - if (isset($this->attr[$name])) return $this->attr[$name]; - switch($name) { - case 'outertext': return $this->outertext(); - case 'innertext': return $this->innertext(); - case 'plaintext': return $this->text(); - case 'xmltext': return $this->xmltext(); - default: return array_key_exists($name, $this->attr); - } - } - - function __set($name, $value) { - switch($name) { - case 'outertext': return $this->_[HDOM_INFO_OUTER] = $value; - case 'innertext': - if (isset($this->_[HDOM_INFO_TEXT])) return $this->_[HDOM_INFO_TEXT] = $value; - return $this->_[HDOM_INFO_INNER] = $value; - } - if (!isset($this->attr[$name])) { - $this->_[HDOM_INFO_SPACE][] = array(' ', '', ''); - $this->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE; - } - $this->attr[$name] = $value; - } - - function __isset($name) { - switch($name) { - case 'outertext': return true; - case 'innertext': return true; - case 'plaintext': return true; - } - //no value attr: nowrap, checked selected... - return (array_key_exists($name, $this->attr)) ? true : isset($this->attr[$name]); - } - - function __unset($name) { - if (isset($this->attr[$name])) - unset($this->attr[$name]); - } - - // camel naming conventions - function getAllAttributes() {return $this->attr;} - function getAttribute($name) {return $this->__get($name);} - function setAttribute($name, $value) {$this->__set($name, $value);} - function hasAttribute($name) {return $this->__isset($name);} - function removeAttribute($name) {$this->__set($name, null);} - function getElementById($id) {return $this->find("#$id", 0);} - function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);} - function getElementByTagName($name) {return $this->find($name, 0);} - function getElementsByTagName($name, $idx=null) {return $this->find($name, $idx);} - function parentNode() {return $this->parent();} - function childNodes($idx=-1) {return $this->children($idx);} - function firstChild() {return $this->first_child();} - function lastChild() {return $this->last_child();} - function nextSibling() {return $this->next_sibling();} - function previousSibling() {return $this->prev_sibling();} -} - -// simple html dom parser -// ----------------------------------------------------------------------------- -class simple_html_dom { - public $root = null; - public $nodes = array(); - public $callback = null; - public $lowercase = false; - protected $pos; - protected $doc; - protected $char; - protected $size; - protected $cursor; - protected $parent; - protected $noise = array(); - protected $token_blank = " \t\r\n"; - protected $token_equal = ' =/>'; - protected $token_slash = " />\r\n\t"; - protected $token_attr = ' >'; - // use isset instead of in_array, performance boost about 30%... - protected $self_closing_tags = array('img'=>1, 'br'=>1, 'input'=>1, 'meta'=>1, 'link'=>1, 'hr'=>1, 'base'=>1, 'embed'=>1, 'spacer'=>1); - protected $block_tags = array('root'=>1, 'body'=>1, 'form'=>1, 'div'=>1, 'span'=>1, 'table'=>1); - protected $optional_closing_tags = array( - 'tr'=>array('tr'=>1, 'td'=>1, 'th'=>1), - 'th'=>array('th'=>1), - 'td'=>array('td'=>1), - 'li'=>array('li'=>1), - 'dt'=>array('dt'=>1, 'dd'=>1), - 'dd'=>array('dd'=>1, 'dt'=>1), - 'dl'=>array('dd'=>1, 'dt'=>1), - 'p'=>array('p'=>1), - 'nobr'=>array('nobr'=>1), - ); - - function __construct($str=null) { - if ($str) { - if (preg_match("/^http:\/\//i",$str) || is_file($str)) - $this->load_file($str); - else - $this->load($str); - } - } - - function __destruct() { - $this->clear(); - } - - // load html from string - function load($str, $lowercase=true) { - // prepare - $this->prepare($str, $lowercase); - // strip out comments - $this->remove_noise("'<!--(.*?)-->'is"); - // strip out cdata - $this->remove_noise("'<!\[CDATA\[(.*?)\]\]>'is", true); - // strip out <style> tags - $this->remove_noise("'<\s*style[^>]*[^/]>(.*?)<\s*/\s*style\s*>'is"); - $this->remove_noise("'<\s*style\s*>(.*?)<\s*/\s*style\s*>'is"); - // strip out <script> tags - $this->remove_noise("'<\s*script[^>]*[^/]>(.*?)<\s*/\s*script\s*>'is"); - $this->remove_noise("'<\s*script\s*>(.*?)<\s*/\s*script\s*>'is"); - // strip out preformatted tags - $this->remove_noise("'<\s*(?:code)[^>]*>(.*?)<\s*/\s*(?:code)\s*>'is"); - // strip out server side scripts - $this->remove_noise("'(<\?)(.*?)(\?>)'s", true); - // strip smarty scripts - $this->remove_noise("'(\{\w)(.*?)(\})'s", true); - - // parsing - while ($this->parse()); - // end - $this->root->_[HDOM_INFO_END] = $this->cursor; - } - - // load html from file - function load_file() { - $args = func_get_args(); - $this->load(call_user_func_array('file_get_contents', $args), true); - } - - // set callback function - function set_callback($function_name) { - $this->callback = $function_name; - } - - // remove callback function - function remove_callback() { - $this->callback = null; - } - - // save dom as string - function save($filepath='') { - $ret = $this->root->innertext(); - if ($filepath!=='') file_put_contents($filepath, $ret); - return $ret; - } - - // find dom node by css selector - function find($selector, $idx=null) { - return $this->root->find($selector, $idx); - } - - // clean up memory due to php5 circular references memory leak... - function clear() { - foreach($this->nodes as $n) {$n->clear(); $n = null;} - if (isset($this->parent)) {$this->parent->clear(); unset($this->parent);} - if (isset($this->root)) {$this->root->clear(); unset($this->root);} - unset($this->doc); - unset($this->noise); - } - - function dump($show_attr=true) { - $this->root->dump($show_attr); - } - - // prepare HTML data and init everything - protected function prepare($str, $lowercase=true) { - $this->clear(); - $this->doc = $str; - $this->pos = 0; - $this->cursor = 1; - $this->noise = array(); - $this->nodes = array(); - $this->lowercase = $lowercase; - $this->root = new simple_html_dom_node($this); - $this->root->tag = 'root'; - $this->root->_[HDOM_INFO_BEGIN] = -1; - $this->root->nodetype = HDOM_TYPE_ROOT; - $this->parent = $this->root; - // set the length of content - $this->size = strlen($str); - if ($this->size>0) $this->char = $this->doc[0]; - } - - // parse html content - protected function parse() { - if (($s = $this->copy_until_char('<'))==='') - return $this->read_tag(); - - // text - $node = new simple_html_dom_node($this); - ++$this->cursor; - $node->_[HDOM_INFO_TEXT] = $s; - $this->link_nodes($node, false); - return true; - } - - // read tag info - protected function read_tag() { - if ($this->char!=='<') { - $this->root->_[HDOM_INFO_END] = $this->cursor; - return false; - } - $begin_tag_pos = $this->pos; - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - - // end tag - if ($this->char==='/') { - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - $this->skip($this->token_blank_t); - $tag = $this->copy_until_char('>'); - - // skip attributes in end tag - if (($pos = strpos($tag, ' '))!==false) - $tag = substr($tag, 0, $pos); - - $parent_lower = strtolower($this->parent->tag); - $tag_lower = strtolower($tag); - - if ($parent_lower!==$tag_lower) { - if (isset($this->optional_closing_tags[$parent_lower]) && isset($this->block_tags[$tag_lower])) { - $this->parent->_[HDOM_INFO_END] = 0; - $org_parent = $this->parent; - - while (($this->parent->parent) && strtolower($this->parent->tag)!==$tag_lower) - $this->parent = $this->parent->parent; - - if (strtolower($this->parent->tag)!==$tag_lower) { - $this->parent = $org_parent; // restore origonal parent - if ($this->parent->parent) $this->parent = $this->parent->parent; - $this->parent->_[HDOM_INFO_END] = $this->cursor; - return $this->as_text_node($tag); - } - } - else if (($this->parent->parent) && isset($this->block_tags[$tag_lower])) { - $this->parent->_[HDOM_INFO_END] = 0; - $org_parent = $this->parent; - - while (($this->parent->parent) && strtolower($this->parent->tag)!==$tag_lower) - $this->parent = $this->parent->parent; - - if (strtolower($this->parent->tag)!==$tag_lower) { - $this->parent = $org_parent; // restore origonal parent - $this->parent->_[HDOM_INFO_END] = $this->cursor; - return $this->as_text_node($tag); - } - } - else if (($this->parent->parent) && strtolower($this->parent->parent->tag)===$tag_lower) { - $this->parent->_[HDOM_INFO_END] = 0; - $this->parent = $this->parent->parent; - } - else - return $this->as_text_node($tag); - } - - $this->parent->_[HDOM_INFO_END] = $this->cursor; - if ($this->parent->parent) $this->parent = $this->parent->parent; - - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return true; - } - - $node = new simple_html_dom_node($this); - $node->_[HDOM_INFO_BEGIN] = $this->cursor; - ++$this->cursor; - $tag = $this->copy_until($this->token_slash); - - // doctype, cdata & comments... - if (isset($tag[0]) && $tag[0]==='!') { - $node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until_char('>'); - - if (isset($tag[2]) && $tag[1]==='-' && $tag[2]==='-') { - $node->nodetype = HDOM_TYPE_COMMENT; - $node->tag = 'comment'; - } else { - $node->nodetype = HDOM_TYPE_UNKNOWN; - $node->tag = 'unknown'; - } - - if ($this->char==='>') $node->_[HDOM_INFO_TEXT].='>'; - $this->link_nodes($node, true); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return true; - } - - // text - if ($pos=strpos($tag, '<')!==false) { - $tag = '<' . substr($tag, 0, -1); - $node->_[HDOM_INFO_TEXT] = $tag; - $this->link_nodes($node, false); - $this->char = $this->doc[--$this->pos]; // prev - return true; - } - - if (!preg_match("/^[\w-:]+$/", $tag)) { - $node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until('<>'); - if ($this->char==='<') { - $this->link_nodes($node, false); - return true; - } - - if ($this->char==='>') $node->_[HDOM_INFO_TEXT].='>'; - $this->link_nodes($node, false); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return true; - } - - // begin tag - $node->nodetype = HDOM_TYPE_ELEMENT; - $tag_lower = strtolower($tag); - $node->tag = ($this->lowercase) ? $tag_lower : $tag; - - // handle optional closing tags - if (isset($this->optional_closing_tags[$tag_lower]) ) { - while (isset($this->optional_closing_tags[$tag_lower][strtolower($this->parent->tag)])) { - $this->parent->_[HDOM_INFO_END] = 0; - $this->parent = $this->parent->parent; - } - $node->parent = $this->parent; - } - - $guard = 0; // prevent infinity loop - $space = array($this->copy_skip($this->token_blank), '', ''); - - // attributes - do { - if ($this->char!==null && $space[0]==='') break; - $name = $this->copy_until($this->token_equal); - if($guard===$this->pos) { - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - continue; - } - $guard = $this->pos; - - // handle endless '<' - if($this->pos>=$this->size-1 && $this->char!=='>') { - $node->nodetype = HDOM_TYPE_TEXT; - $node->_[HDOM_INFO_END] = 0; - $node->_[HDOM_INFO_TEXT] = '<'.$tag . $space[0] . $name; - $node->tag = 'text'; - $this->link_nodes($node, false); - return true; - } - - // handle mismatch '<' - if($this->doc[$this->pos-1]=='<') { - $node->nodetype = HDOM_TYPE_TEXT; - $node->tag = 'text'; - $node->attr = array(); - $node->_[HDOM_INFO_END] = 0; - $node->_[HDOM_INFO_TEXT] = substr($this->doc, $begin_tag_pos, $this->pos-$begin_tag_pos-1); - $this->pos -= 2; - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - $this->link_nodes($node, false); - return true; - } - - if ($name!=='/' && $name!=='') { - $space[1] = $this->copy_skip($this->token_blank); - $name = $this->restore_noise($name); - if ($this->lowercase) $name = strtolower($name); - if ($this->char==='=') { - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - $this->parse_attr($node, $name, $space); - } - else { - //no value attr: nowrap, checked selected... - $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_NO; - $node->attr[$name] = true; - if ($this->char!='>') $this->char = $this->doc[--$this->pos]; // prev - } - $node->_[HDOM_INFO_SPACE][] = $space; - $space = array($this->copy_skip($this->token_blank), '', ''); - } - else - break; - } while($this->char!=='>' && $this->char!=='/'); - - $this->link_nodes($node, true); - $node->_[HDOM_INFO_ENDSPACE] = $space[0]; - - // check self closing - if ($this->copy_until_char_escape('>')==='/') { - $node->_[HDOM_INFO_ENDSPACE] .= '/'; - $node->_[HDOM_INFO_END] = 0; - } - else { - // reset parent - if (!isset($this->self_closing_tags[strtolower($node->tag)])) $this->parent = $node; - } - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return true; - } - - // parse attributes - protected function parse_attr($node, $name, &$space) { - $space[2] = $this->copy_skip($this->token_blank); - switch($this->char) { - case '"': - $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_DOUBLE; - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - $node->attr[$name] = $this->restore_noise($this->copy_until_char_escape('"')); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - break; - case '\'': - $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_SINGLE; - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - $node->attr[$name] = $this->restore_noise($this->copy_until_char_escape('\'')); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - break; - default: - $node->_[HDOM_INFO_QUOTE][] = HDOM_QUOTE_NO; - $node->attr[$name] = $this->restore_noise($this->copy_until($this->token_attr)); - } - } - - // link node's parent - protected function link_nodes(&$node, $is_child) { - $node->parent = $this->parent; - $this->parent->nodes[] = $node; - if ($is_child) - $this->parent->children[] = $node; - } - - // as a text node - protected function as_text_node($tag) { - $node = new simple_html_dom_node($this); - ++$this->cursor; - $node->_[HDOM_INFO_TEXT] = '</' . $tag . '>'; - $this->link_nodes($node, false); - $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return true; - } - - protected function skip($chars) { - $this->pos += strspn($this->doc, $chars, $this->pos); - $this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - } - - protected function copy_skip($chars) { - $pos = $this->pos; - $len = strspn($this->doc, $chars, $pos); - $this->pos += $len; - $this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - if ($len===0) return ''; - return substr($this->doc, $pos, $len); - } - - protected function copy_until($chars) { - $pos = $this->pos; - $len = strcspn($this->doc, $chars, $pos); - $this->pos += $len; - $this->char = ($this->pos<$this->size) ? $this->doc[$this->pos] : null; // next - return substr($this->doc, $pos, $len); - } - - protected function copy_until_char($char) { - if ($this->char===null) return ''; - - if (($pos = strpos($this->doc, $char, $this->pos))===false) { - $ret = substr($this->doc, $this->pos, $this->size-$this->pos); - $this->char = null; - $this->pos = $this->size; - return $ret; - } - - if ($pos===$this->pos) return ''; - $pos_old = $this->pos; - $this->char = $this->doc[$pos]; - $this->pos = $pos; - return substr($this->doc, $pos_old, $pos-$pos_old); - } - - protected function copy_until_char_escape($char) { - if ($this->char===null) return ''; - - $start = $this->pos; - while(1) { - if (($pos = strpos($this->doc, $char, $start))===false) { - $ret = substr($this->doc, $this->pos, $this->size-$this->pos); - $this->char = null; - $this->pos = $this->size; - return $ret; - } - - if ($pos===$this->pos) return ''; - - if ($this->doc[$pos-1]==='\\') { - $start = $pos+1; - continue; - } - - $pos_old = $this->pos; - $this->char = $this->doc[$pos]; - $this->pos = $pos; - return substr($this->doc, $pos_old, $pos-$pos_old); - } - } - - // remove noise from html content - protected function remove_noise($pattern, $remove_tag=false) { - $count = preg_match_all($pattern, $this->doc, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE); - - for ($i=$count-1; $i>-1; --$i) { - $key = '___noise___'.sprintf('% 3d', count($this->noise)+100); - $idx = ($remove_tag) ? 0 : 1; - $this->noise[$key] = $matches[$i][$idx][0]; - $this->doc = substr_replace($this->doc, $key, $matches[$i][$idx][1], strlen($matches[$i][$idx][0])); - } - - // reset the length of content - $this->size = strlen($this->doc); - if ($this->size>0) $this->char = $this->doc[0]; - } - - // restore noise to html content - function restore_noise($text) { - while(($pos=strpos($text, '___noise___'))!==false) { - $key = '___noise___'.$text[$pos+11].$text[$pos+12].$text[$pos+13]; - if (isset($this->noise[$key])) - $text = substr($text, 0, $pos).$this->noise[$key].substr($text, $pos+14); - } - return $text; - } - - function __toString() { - return $this->root->innertext(); - } - - function __get($name) { - switch($name) { - case 'outertext': return $this->root->innertext(); - case 'innertext': return $this->root->innertext(); - case 'plaintext': return $this->root->text(); - } - } - - // camel naming conventions - function childNodes($idx=-1) {return $this->root->childNodes($idx);} - function firstChild() {return $this->root->first_child();} - function lastChild() {return $this->root->last_child();} - function getElementById($id) {return $this->find("#$id", 0);} - function getElementsById($id, $idx=null) {return $this->find("#$id", $idx);} - function getElementByTagName($name) {return $this->find($name, 0);} - function getElementsByTagName($name, $idx=-1) {return $this->find($name, $idx);} - function loadFile() {$args = func_get_args();$this->load(call_user_func_array('file_get_contents', $args), true);} -} -?>
\ No newline at end of file |