forked from stuartwakefield/shjs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsh_main.min.js
More file actions
11 lines (10 loc) · 2.12 KB
/
sh_main.min.js
File metadata and controls
11 lines (10 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
/*
SHJS - Syntax Highlighting in JavaScript
Copyright (C) 2007, 2008 gnombat@users.sourceforge.net
License: http://shjs.sourceforge.net/doc/gplv3.html
*/
this.sh_languages||(this.sh_languages={});function sh_isEmailAddress(a){return/^mailto:/.test(a)?!1:-1!==a.indexOf("@")}function sh_setHref(a,d,b){b=b.substring(a[d-2].pos,a[d-1].pos);2<=b.length&&"<"===b.charAt(0)&&">"===b.charAt(b.length-1)&&(b=b.substr(1,b.length-2));sh_isEmailAddress(b)&&(b="mailto:"+b);a[d-2].node.href=b}
function sh_highlightString(a,d){var b=document.createElement("a"),w=document.createElement("span"),l=[],r=0,h=[],k=0,g=null,p=function(e,c){var f=e.length;if(0!==f){if(!c){var d=h.length;0!==d&&(d=h[d-1],d[3]||(c=d[1]))}g!==c&&(g&&(l[r++]={pos:k},"sh_url"===g&&sh_setHref(l,r,a)),c&&(d="sh_url"===c?b.cloneNode(!1):w.cloneNode(!1),d.className=c,l[r++]={node:d,pos:k}));k+=f;g=c}},c=/\r\n|\r|\n/g;c.lastIndex=0;for(var x=a.length;k<x;){var y=k,t,u;u=c.exec(a);null===u?u=t=x:(t=u.index,u=c.lastIndex);
t=a.substring(y,t);for(var z=[];;){var m=k-y,e;e=h.length;e=0===e?0:h[e-1][2];var s=d[e],v=s.length,f=z[e];f||(f=z[e]=[]);e=null;for(var A=-1,q=0;q<v;q++){var n;q<f.length&&(null===f[q]||m<=f[q].index)?n=f[q]:(n=s[q][0],n.lastIndex=m,n=n.exec(t),f[q]=n);if(null!==n&&(null===e||n.index<e.index)&&(e=n,A=q,n.index===m))break}if(null===e){p(t.substring(m),null);break}else{e.index>m&&p(t.substring(m,e.index),null);m=s[A];s=m[1];if(s instanceof Array)for(f=0;f<s.length;f++)v=e[f+1],p(v,s[f]);else v=e[0],
p(v,s);switch(m[2]){case -1:break;case -2:h.pop();break;case -3:h.length=0;break;default:h.push(m)}}}g&&(l[r++]={pos:k},"sh_url"===g&&sh_setHref(l,r,a),g=null);k=u}return l}function sh_insertTags(a,d){for(var b=document,w=document.createDocumentFragment(),l=0,r=a.length,h=0,k=d.length,g=w;h<k||l<r;){var p,c;l<r?(p=a[l],c=p.pos):c=k;c<=h?(p.node?(c=p.node,g.appendChild(c),g=c):g=g.parentNode,l++):(g.appendChild(b.createTextNode(d.substring(h,c))),h=c)}return w}
function sh_highlightElement(a,d){a.classList.add("sh_sourceCode");for(var b=sh_highlightString(a.textContent,d),b=sh_insertTags(b,a.textContent);a.hasChildNodes();)a.removeChild(a.firstChild);a.appendChild(b)};