typos
[mdref/mdref] / index.js
index d3326803fedcbd42455f5cebdc2654caf3197a16..feaf66e439f9a8286f859980bdc553544ae6f2cb 100644 (file)
--- a/index.js
+++ b/index.js
@@ -1,5 +1,13 @@
+function log() {
+       // console.log.apply(console, arguments);
+}
+
 function is_constant(s) {
-       return s.length > 1 && s.toUpperCase(s) === s;
+       s = s.replace(/v\d+(_\d+)?$/, "");
+       if (s.length < 2) {
+               return false;
+       }
+       return s.toUpperCase(s) === s;
 }
 
 function is_variable(s) {
@@ -8,9 +16,9 @@ function is_variable(s) {
 
 var is_in_string = false;
 
-function type(s) {
+function type(s, nn) {
        var i, j, t;
-       console.log("type", s);
+       //log("type", s);
        // nothing
        if (!s.match(/[a-zA-Z]/)) {
                return;
@@ -23,18 +31,40 @@ function type(s) {
        case "int":
        case "float":
        case "string":
+       case "resource":
        case "array":
        case "object":
        case "callable":
        case "mixed":
+       // Zend/SPL
+       case "stdClass":
+       case "Exception":
+       case "ErrorException":
+       case "Closure":
+       case "Generator":
+       case "Countable":
+       case "Serializable":
+       case "Traversable":
+       case "Iterator":
+       case "IteratorAggregate":
+       case "ArrayAccess":
+       case "ArrayObject":
+       case "ArrayIterator":
+       case "RecursiveArrayIterator":
+       case "SplObserver":
+       case "SplSubject":
+       case "SplObjectStorage":
                return "<code>";
                
        // keywords
+       case "extends":
+       case "implements":
+               if (nn === "H1") {
+                       return "<br>&nbsp;<em>";
+               }
        case "class":
        case "interface":
        case "namespace":
-       case "extends":
-       case "implements":
        case "public":
        case "protected":
        case "private":
@@ -54,11 +84,11 @@ function type(s) {
                t = s.substring(i+2);
                if (!is_constant(t) && !is_variable(t)) {
                        // methods
-                       return "<a href=\"/" + s.replace(/::|\\/g, "/") + "\">";
+                       return "<a href=\"" + s.replace(/::|\\/g, "/") + "\">";
                }
        }
-       if (-1 !== (j = s.indexOf("\\"))) {
-               return "<a href=\"/" + s.replace(/\\/g, "/").replace(/::|$/, "#") + "\">";
+       if (-1 !== (j = s.indexOf("\\")) && s.substr(j+1,1) !== "n") {
+               return "<a href=\"" + s.replace(/\\/g, "/").replace(/::|$/, "#") + "\">";
        }
        
        switch (s.toLowerCase()) {
@@ -80,27 +110,27 @@ function type(s) {
        }
 }
 
-function node(s) {
-       //console.log("node", s);
+function node(s, nn) {
+       //log("node", s);
        
        var t;
        
-       if ((t = type(s))) {
+       if ((t = type(s, nn))) {
                return $(t).text(s);
        }
        return document.createTextNode(s);
 }
-function wrap(n) {
+function wrap(n, nn) {
        var $n = $(n)
        var a = [];
 
        $n.text().split(/([^a-zA-Z0-9_\\\$:]+)/).forEach(function(v) {
-               a.push(node(v));
+               a.push(node(v, nn));
        });
        $n.replaceWith(a);
 }
 function walk(i, e) {
-       console.log("walk", i, e);
+       log("walk", i, e);
 
        $.each($.makeArray(e.childNodes), function(i, n) {
                switch (n.nodeName) {
@@ -109,7 +139,7 @@ function walk(i, e) {
                case "HR":
                        break;
                case "#text":
-                       wrap(n);
+                       wrap(n, e.nodeName);
                        break;
                default:
                        walk(-1, n);
@@ -121,10 +151,10 @@ function walk(i, e) {
 function blink(c) {
        var $c = $(c);
        
-       $c.fadeOut("slow").queue(function(next) {
+       $c.fadeOut("fast").queue(function(next) {
                this.style.color = "red";
                next();
-       }).fadeIn("fast").fadeOut("fast").queue(function(next) {
+       }).fadeIn("fast").fadeOut("slow").queue(function(next) {
                this.style.color = "";
                next();
        }).fadeIn("slow");