case "ArrayObject":
case "ArrayIterator":
case "RecursiveArrayIterator":
+ case "SeekableIterator":
case "SplObserver":
case "SplSubject":
case "SplObjectStorage":
+ case "JsonSerializable":
return "<code>";
// keywords
return "<a href=\"" + s.replace(/::|\\/g, "/") + "\">";
}
}
- if (-1 !== (j = s.indexOf("\\")) && s.substr(j+1,1) !== "n") {
- return "<a href=\"" + s.replace(/\\/g, "/").replace(/::|$/, "#") + "\">";
+ if (-1 !== (j = s.lastIndexOf("\\")) && s.substr(j+1,1) !== "n") {
+ t = s.substring(j+1);
+ if (!mdref.is_constant(t) || s.match(/\\/).length <= 1) {
+ return "<a href=\"" + s.replace(/\\/g, "/").replace(/::/, "#") + "\">";
+ }
+ return "<a href=\"" + s.substring(0,j).replace(/\\/g, "/") + "#" + t + "\">";
}
switch (s.toLowerCase()) {
return "<span class=\"constant\">";
}
},
- node: function node(s, nn) {
- // mdref.log("node", s);
- var t;
- if ((t = mdref.type(s, nn))) {
- return $(t).text(s);
- }
- return document.createTextNode(s);
- },
wrap: function wrap(n, nn) {
var $n = $(n)
var a = [];
$n.text().split(/([^a-zA-Z0-9_\\\$:]+)/).forEach(function(v) {
- a.push(mdref.node(v, nn));
+ var t;
+
+ if ((t = mdref.type(v.replace(/:$/, ""), nn))) {
+ a.push($(t).text(v));
+ } else if (a.length && a[a.length-1].nodeName === "#text") {
+ /* if we already have a text node and the next is also gonna be a text
+ * node, then join them, becuase chrome v30+ or something eats whitespace
+ * for breakfast, lunch and dinner!
+ */
+ a[a.length-1].textContent += v;
+ } else {
+ a.push(document.createTextNode(v));
+ }
});
$n.replaceWith(a);
},
case "A":
case "BR":
case "HR":
+ case "EM":
+ case "CODE":
+ case "SPAN":
break;
case "#text":
mdref.wrap(n, e.nodeName);
}
};
- $("h1,h2,h3,h4,h5,h6,p,li,code").each(mdref.walk);
+ $("h1,h2,h3,h4,h5,h6,p,li,code,td").each(mdref.walk);
$(window).on("hashchange", mdref.hashchange);
mdref.hashchange();
});