warnings
[mdref/mdref] / index.php
index 93454eceddd5abfb2dd306e4bb90420805fb4cc7..5c4b909b5057fe201b23b09978d73c0a785222dd 100644 (file)
--- a/index.php
+++ b/index.php
@@ -62,7 +62,25 @@ function head($file, $lines = 1) {
        return $ld;
 }
 
-function ns($file) {
+function ns($path) {
+       $ns = "";
+       $parts = explode("/", $path);
+       $upper = ctype_upper($path[0]);
+       for ($i = 0; $i < count($parts); ++$i) {
+               if (!strlen($parts[$i]) || $parts[$i] === ".") {
+                       continue;
+               }
+               if (strlen($ns)) {
+                       if ($upper && !ctype_upper($parts[$i][0])) {
+                               $ns .= "::";
+                       } else {
+                               $ns .= "\\";
+                       }
+               }
+               $ns .= $parts[$i];
+               $upper = ctype_upper($parts[$i][0]);
+       }
+       return $ns;
        return str_replace("/", "\\", str_replace("//", "/", trim($file, "/.")));
 }
 
@@ -73,9 +91,9 @@ function urlpath($dir, $file) {
 function ls($dir) {
        $dir = rtrim(is_dir($dir) ? $dir : dirname($dir) ."/". basename($dir, ".md"), "/");
        printf("<ul>\n");
-       printf("<li>&lArr; <a href=/>Home</a></li>\n");
+       printf("<li>&lArr; <a href=>Home</a></li>\n");
        if ($dir !== "." && ($dn = dirname($dir)) !== ".") {
-               printf("<li>&uArr; <a href=/%s>%s</a></li>\n", 
+               printf("<li>&uArr; <a href=%s>%s</a></li>\n", 
                        urlpath($dir, ".."),
                        ns($dn));
        }
@@ -83,36 +101,15 @@ function ls($dir) {
                if ($dir !== ".") {
                        printf("<ul>\n<li>&nbsp; %s</li>\n", ns($dir));
                }
-               printf("<ul>\n");
-               foreach (scandir($dir) as $file) {
-                       /* ignore dot-files */
-                       if ($file{0} === ".") {
-                               continue;
+               if (($glob = glob("$dir/[_a-zA-Z]*.md"))) {
+                       printf("<ul>\n");
+                       foreach ($glob as $file) {
+                               printf("<li>&rArr; <a href=\"%s\">%s</a></li>\n", 
+                                       urlpath($dir, $file),
+                                       ns("$dir/".basename($file, ".md")));
                        }
-                       
-                       $path = "$dir/$file";
-                       
-                       if (is_file($path)) {
-                               $pi = pathinfo($path);
-                               /* ignore files not ending in .md */
-                               if (!isset($pi["extension"]) || $pi["extension"] != "md") {
-                                       continue;
-                               }
-                               if (!is_dir("$dir/".$pi["filename"])) {
-                                       continue;
-                               }
-                       } else {
-                               /* ignore directories where an companying file exists */
-                               if (is_file("$path.md")) {
-                                       continue;
-                               }
-                       }
-                       
-                       printf("<li>&rArr; <a href=\"/%s\">%s</a></li>\n", 
-                               urlpath($dir, $file),
-                               ns("$dir/".basename($file, ".md")));
+                       printf("</ul>\n");
                }
-               printf("</ul>\n");
                if ($dir !== ".") {
                        printf("</ul>\n");
                }
@@ -129,29 +126,24 @@ function ml($file) {
        if ($pi["extension"] !== "md") {
                return;
        }
-       if (!ctype_upper($pi["filename"][0])) {
-               return;
-       }
        $dir = $pi["dirname"] . "/" . $pi["filename"];
-       if (is_dir($dir)) {
-               printf("<h2>Methods:</h2>\n");
+       if (($glob = glob("$dir/[_a-z]*.md"))) {
+       printf("<h2>%s:</h2>\n", !ctype_upper($pi["filename"][0]) ?
+               "Functions" : "Methods");
                printf("<ul>\n");
-               foreach (scandir($dir) as $file) {
-                       if (!is_file("$dir/$file") || ctype_upper($file{0})) {
-                               continue;
-                       }
-                       printf("<li><h3><a href=\"/%s\">%s</a></h3><p>%s</p><p>%s</p></li>\n",
+               foreach ($glob as $file) {
+                       printf("<li><h3><a href=\"%s\">%s</a></h3><p>%s</p><p>%s</p></li>\n",
                                urlpath($dir, $file),
                                basename($file, ".md"),
-                               @end(head("$dir/$file", 3)),
-                               join(" ", cut(head("$dir/$file"), ["f"=>"1-"]))
+                               @end(head($file, 3)),
+                               join(" ", cut(head($file), ["f"=>"1-"]))
                        );
                }
                printf("</ul>\n");
        }
 }
 
-function md($file) {
+function md($file, $res) {
        $file = rtrim($file, "/");
        if (is_file($file) || is_file($file .= ".md")) {
                $pi = pathinfo($file);
@@ -160,8 +152,8 @@ function md($file) {
                case "md":
                        $r = fopen($file, "r");
                        $md = MarkdownDocument::createFromStream($r);
-                       $md->compile(MarkdownDocument::AUTOLINK);
-                       print str_replace("<br/>","<br />",$md->getHtml());
+                       $md->compile(MarkdownDocument::AUTOLINK|MarkdownDocument::TOC);
+                       print $md->getHtml();
                        fclose($r);
                        ml($file);
                        break;
@@ -171,23 +163,19 @@ function md($file) {
                        break;
                }
        } else {
-               http\Env::setResponseCode(404);
+               $res->setResponseCode(404);
                printf("<h1>Not Found</h1>\n");
                printf("<blockquote><p>Sorry, I could not find <code>%s/%s</code>.</p></blockquote>", dirname($file), basename($file, ".md"));
        }
 }
 
-function index($pn) {
-       ?>
-       <?php
-}
-
-chdir($_SERVER["DOCUMENT_ROOT"]);
+chdir(__DIR__);
 $t = ["css"=>"text/css", "js"=>"application/javascript"];
 $r = new http\Env\Request;
 $u = new http\Url($r->getRequestUrl());
 $s = new http\Env\Response;
-$p = ".". $u->path;
+$b = dirname($_SERVER["SCRIPT_NAME"]);
+$p = ".". substr($u->path, strlen($b));
 
 switch($p) {
 case "./index.php":
@@ -208,11 +196,9 @@ ob_start($s);
 <head>
        <meta charset="utf-8">
        <title><?=ns($p)?></title>
-       <link rel="stylesheet" href="/index.css">
+       <base href="<?=$b?>/">
+       <link rel="stylesheet" href="index.css">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
-       <?php if (!extension_loaded("discount") || !getenv("DISCOUNT")) : ?>
-       <script src="/markdown.js"></script>
-       <?php endif; ?>
 </head>
 <body>
        <div class="sidebar">
@@ -229,15 +215,31 @@ ob_start($s);
                        ob_end_flush();
                ?></pre>
        <?php else: ?>
-               <?php if (!md($p)): ?>
-               <?php endif; ?>
+               <?php md($p, $s); ?>
        <?php endif; ?>
+       
+       <div id="disqus_thread"></div>
+       
        <footer>
-               <a href="/VERSION">Version</a>
-               <a href="/AUTHORS">Authors</a>
-               <a href="/LICENSE">License</a>
+               <a href="VERSION">Version</a>
+               <a href="AUTHORS">Authors</a>
+               <a href="LICENSE">License</a>
+               <?php if ($p !== "./") : ?>
+               <a href="https://github.com/m6w6/mdref/edit/master/<?=trim($p,"/")?>.md">Edit</a>
+               <?php endif; ?>
        </footer>
-       <script src="/index.js"></script>
+       <script src="index.js"></script>
+       <?php if ($_SERVER["SERVER_NAME"] != "localhost") : ?>
+    <script>
+        var disqus_shortname = 'mdref';
+        var disqus_identifier = '<?=$p?>';
+        (function() {
+            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+            dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+        })();
+    </script>
+    <?php endif; ?>
 </body>
 </html>
 <?php