var PR_keywords = {}; (function () { var CPP_KEYWORDS = "abstract bool break case catch char class const " + "const_cast continue default delete deprecated dllexport dllimport do " + "double dynamic_cast else enum explicit extern false float for friend " + "goto if inline int long mutable naked namespace new noinline noreturn " + "nothrow novtable operator private property protected public register " + "reinterpret_cast return selectany short signed sizeof static " + "static_cast struct switch template this thread throw true try typedef " + "typeid typename union unsigned using declaration, directive uuid " + "virtual void volatile while typeof"; var CSHARP_KEYWORDS = "as base by byte checked decimal delegate descending " + "event finally fixed foreach from group implicit in interface internal " + "into is lock null object out override orderby params readonly ref sbyte " + "sealed stackalloc string select uint ulong unchecked unsafe ushort var"; var JAVA_KEYWORDS = "package synchronized boolean implements import throws " + "instanceof transient extends final strictfp native super"; var JSCRIPT_KEYWORDS = "debugger export function with NaN Infinity"; var PERL_KEYWORDS = "require sub unless until use elsif BEGIN END"; var PYTHON_KEYWORDS = "and assert def del elif except exec global lambda " + "not or pass print raise yield False True None"; var RUBY_KEYWORDS = "then end begin rescue ensure module when undef next " + "redo retry alias defined"; var SH_KEYWORDS = "done fi"; var KEYWORDS = [CPP_KEYWORDS, CSHARP_KEYWORDS, JAVA_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS, PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS]; for (var k = 0; k < KEYWORDS.length; k++) { var kw = KEYWORDS[k].split(' '); for (var i = 0; i < kw.length; i++) { if (kw[i]) { PR_keywords[kw[i]] = true;}
}
}
}).call(this); var PR_STRING = 'str'; var PR_KEYWORD = 'kwd'; var PR_COMMENT = 'com'; var PR_TYPE = 'typ'; var PR_LITERAL = 'lit'; var PR_PUNCTUATION = 'pun'; var PR_PLAIN = 'pln'; var PR_TAG = 'tag'; var PR_DECLARATION = 'dec'; var PR_SOURCE = 'src'; var PR_ATTRIB_NAME = 'atn'; var PR_ATTRIB_VALUE = 'atv'; var PR_TAB_WIDTH = 8; function PR_TokenEnd(end, style) { if (undefined === style) { throw new Error('BAD');}
if ('number' != typeof(end)) { throw new Error('BAD');}
this.end = end; this.style = style;}
PR_TokenEnd.prototype.toString = function () { return '[PR_TokenEnd ' + this.end + (this.style ? ':' + this.style : '') + ']';}; function PR_Token(token, style) { if (undefined === style) { throw new Error('BAD');}
this.token = token; this.style = style;}
PR_Token.prototype.toString = function () { return '[PR_Token ' + this.token + (this.style ? ':' + this.style : '') + ']';}; function PR_DecodeHelper() { this.next = 0; this.ch = '\0';}
var PR_NAMED_ENTITIES = { 'lt': '<', 'gt': '>', 'quot': '"', 'apos': "'", 'amp': '&'
}; PR_DecodeHelper.prototype.decode = function (s, i) { var next = i + 1; var ch = s.charAt(i); if ('&' === ch) { var semi = s.indexOf(';', next); if (semi >= 0 && semi < next + 4) { var entityName = s.substring(next, semi); var decoded = null; if (entityName.charAt(0) === '#') { var ch1 = entityName.charAt(1); var charCode; if (ch1 === 'x' || ch1 === 'X') { charCode = parseInt(entityName.substring(2), 16);} else { charCode = parseInt(entityName.substring(1), 10);}
if (!isNaN(charCode)) { decoded = String.fromCharCode(charCode);}
}
if (!decoded) { decoded = PR_NAMED_ENTITIES[entityName.toLowerCase()];}
if (decoded) { ch = decoded; next = semi + 1;} else { next = i + 1; ch = '\0';}
}
}
this.next = next; this.ch = ch; return this.ch;}; function PR_isWordChar(ch) { return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');}
function PR_isIdentifierStart(ch) { return PR_isWordChar(ch) || ch == '_' || ch == '$' || ch == '@';}
function PR_isIdentifierPart(ch) { return PR_isIdentifierStart(ch) || PR_isDigitChar(ch);}
function PR_isSpaceChar(ch) { return "\t \r\n".indexOf(ch) >= 0;}
function PR_isDigitChar(ch) { return ch >= '0' && ch <= '9';}
function PR_trim(s) { var i = 0, j = s.length - 1; while (i <= j && PR_isSpaceChar(s.charAt(i))) { ++i;}
while (j > i && PR_isSpaceChar(s.charAt(j))) { --j;}
return s.substring(i, j + 1);}
function PR_startsWith(s, prefix) { return s.length >= prefix.length && prefix == s.substring(0, prefix.length);}
function PR_endsWith(s, suffix) { return s.length >= suffix.length &&
suffix == s.substring(s.length - suffix.length, s.length);}
var REGEXP_PRECEDER_PATTERN = (function () { var preceders = [ "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=", "&=", "(", "*", "*=", "+=", ",", "-=", "->", "/", "/=", ":", "::", ";", "<", "<<", "<<=", "<=", "=", "==", "===", ">", ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[", "^", "^=", "^^", "^^=", "{", "|", "|=", "||", "||=", "~", "break", "case", "continue", "delete", "do", "else", "finally", "instanceof", "return", "throw", "try", "typeof" ]; var pattern = '(?:' + '(?:(?:^|[^0-9\.])\\.{1,3})|' + '(?:(?:^|[^\\+])\\+)|' + '(?:(?:^|[^\\-])-)'
; for (var i = 0; i < preceders.length; ++i) { var preceder = preceders[i]; if (PR_isWordChar(preceder.charAt(0))) { pattern += '|\\b' + preceder;} else { pattern += '|' + preceder.replace(/([^=<>:&])/g, '\\$1');}
}
pattern += ')\\s*$'; return new RegExp(pattern);})(); function PR_prefixMatch(chars, len, prefix) { if (len < prefix.length) { return false;}
for (var i = 0, n = prefix.length; i < n; ++i) { if (prefix.charAt(i) != chars[i]) { return false;}
}
return true;}
function PR_attribToHtml(str) { return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/\"/g, '&quot;')
.replace(/\xa0/, '&nbsp;');}
function PR_textToHtml(str) { return str.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/\xa0/g, '&nbsp;');}
function PR_isRawContent(node) { return 'XMP' == node.tagName;}
var PR_innerHtmlWorks = null; function PR_getInnerHtml(node) { if (null == PR_innerHtmlWorks) { var testNode = document.createElement('PRE'); testNode.appendChild( document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />')); PR_innerHtmlWorks = !/</.test(testNode.innerHTML);}
if (PR_innerHtmlWorks) { var content = node.innerHTML; if (PR_isRawContent(node)) { content = PR_textToHtml(content);}
return content;}
var out = []; for (var child = node.firstChild; child; child = child.nextSibling) { PR_normalizedHtml(child, out);}
return out.join('');}
function PR_normalizedHtml(node, out) { switch (node.nodeType) { case 1:
var name = node.tagName.toLowerCase(); out.push('\074', name); for (var i = 0; i < node.attributes.length; ++i) { var attr = node.attributes[i]; if (!attr.specified) { continue;}
out.push(' '); PR_normalizedHtml(attr, out);}
out.push('>'); for (var child = node.firstChild; child; child = child.nextSibling) { PR_normalizedHtml(child, out);}
if (node.firstChild || !/^(?:br|link|img)$/.test(name)) { out.push('<\/', name, '>');}
break; case 2:
out.push(node.name.toLowerCase(), '="', PR_attribToHtml(node.value), '"'); break; case 3: case 4:
out.push(PR_textToHtml(node.nodeValue)); break;}
}
function PR_expandTabs(chunks, tabWidth) { var SPACES = '                '; var charInLine = 0; var decodeHelper = new PR_DecodeHelper(); var chunksOut = []
for (var chunkIndex = 0; chunkIndex < chunks.length; ++chunkIndex) { var chunk = chunks[chunkIndex]; if (chunk.style == null) { chunksOut.push(chunk); continue;}
var s = chunk.token; var pos = 0; var out = []; for (var charIndex = 0, n = s.length; charIndex < n; charIndex = decodeHelper.next) { decodeHelper.decode(s, charIndex); var ch = decodeHelper.ch; switch (ch) { case '\t':
out.push(s.substring(pos, charIndex)); var nSpaces = tabWidth - (charInLine % tabWidth); charInLine += nSpaces; for (; nSpaces >= 0; nSpaces -= SPACES.length) { out.push(SPACES.substring(0, nSpaces));}
pos = decodeHelper.next; break; case '\n': case '\r':
charInLine = 0; break; default: ++charInLine;}
}
out.push(s.substring(pos)); chunksOut.push(new PR_Token(out.join(''), chunk.style));}
return chunksOut
}
function PR_chunkify(s) { var chunkPattern = /(?:[^<]+|<\/?[a-zA-Z][^>]*>|<)/g; var matches = s.match(chunkPattern); var chunks = []; if (matches) { var lastChunk = null; for (var i = 0, n = matches.length; i < n; ++i) { var chunkText = matches[i]; var style; if (chunkText.length < 2 || chunkText.charAt(0) !== '<') { if (lastChunk && lastChunk.style === PR_PLAIN) { lastChunk.token += chunkText; continue;}
style = PR_PLAIN;} else { style = null;}
lastChunk = new PR_Token(chunkText, style); chunks.push(lastChunk);}
}
return chunks;}
function PR_splitChunks(chunks, tokenEnds) { var tokens = []; var ci = 0; var posAbs = 0; var posChunk = 0; var chunk = new PR_Token('', null); for (var ei = 0, ne = tokenEnds.length, lastEnd = 0; ei < ne; ++ei) { var tokenEnd = tokenEnds[ei]; var end = tokenEnd.end; if (end === lastEnd) { continue;}
var tokLen = end - posAbs; var remainingInChunk = chunk.token.length - posChunk; while (remainingInChunk <= tokLen) { if (remainingInChunk > 0) { tokens.push( new PR_Token(chunk.token.substring(posChunk, chunk.token.length), null == chunk.style ? null : tokenEnd.style));}
posAbs += remainingInChunk; posChunk = 0; if (ci < chunks.length) { chunk = chunks[ci++];}
tokLen = end - posAbs; remainingInChunk = chunk.token.length - posChunk;}
if (tokLen) { tokens.push( new PR_Token(chunk.token.substring(posChunk, posChunk + tokLen), tokenEnd.style)); posAbs += tokLen; posChunk += tokLen;}
}
return tokens;}
function PR_splitMarkup(chunks) { var tokenEnds = []; var state = 0; var k = 0; var tokenStart = -1; var tokenChars = new Array(12); var tokenCharsI = 0; var endScriptTag = null; var decodeHelper = new PR_DecodeHelper(); for (var ci = 0, nc = chunks.length; ci < nc; ++ci) { var chunk = chunks[ci]; if (PR_PLAIN != chunk.style) { k += chunk.token.length; continue;}
var s = chunk.token; var pos = 0; for (var i = 0, n = s.length; i < n; ) { decodeHelper.decode(s, i); var ch = decodeHelper.ch; var next = decodeHelper.next; var tokenStyle = null; switch (state) { case 0:
if ('<' == ch) { state = 1;}
break; case 1:
tokenCharsI = 0; if ('/' == ch) { state = 7;} else if (null == endScriptTag) { if ('!' == ch) { state = 2;} else if (PR_isWordChar(ch)) { state = 8;} else if ('?' == ch) { state = 9;} else if ('%' == ch) { state = 11;} else if ('<' != ch) { state = 0;}
} else if ('<' != ch) { state = 0;}
break; case 2:
if ('-' == ch) { state = 4;} else if (PR_isWordChar(ch)) { state = 3;} else if ('<' == ch) { state = 1;} else { state = 0;}
break; case 3:
if ('>' == ch) { state = 0; tokenStyle = PR_DECLARATION;}
break; case 4:
if ('-' == ch) { state = 5;}
break; case 5:
if ('-' == ch) { state = 6;}
break; case 6:
if ('>' == ch) { state = 0; tokenStyle = PR_COMMENT;} else if ('-' == ch) { state = 6;} else { state = 4;}
break; case 7:
if (PR_isWordChar(ch)) { state = 8;} else if ('<' == ch) { state = 1;} else { state = 0;}
break; case 8:
if ('>' == ch) { state = 0; tokenStyle = PR_TAG;}
break; case 9:
if ('?' == ch) { state = 10;}
break; case 10:
if ('>' == ch) { state = 0; tokenStyle = PR_SOURCE;} else if ('?' != ch) { state = 9;}
break; case 11:
if ('%' == ch) { state = 12;}
break; case 12:
if ('>' == ch) { state = 0; tokenStyle = PR_SOURCE;} else if ('%' != ch) { state = 11;}
break;}
if (tokenCharsI < tokenChars.length) { tokenChars[tokenCharsI++] = ch.toLowerCase();}
if (1 == state) { tokenStart = k + i;}
i = next; if (tokenStyle != null) { if (null != tokenStyle) { if (endScriptTag) { if (PR_prefixMatch(tokenChars, tokenCharsI, endScriptTag)) { endScriptTag = null;}
} else { if (PR_prefixMatch(tokenChars, tokenCharsI, 'script')) { endScriptTag = '/script';} else if (PR_prefixMatch(tokenChars, tokenCharsI, 'style')) { endScriptTag = '/style';} else if (PR_prefixMatch(tokenChars, tokenCharsI, 'xmp')) { endScriptTag = '/xmp';}
}
if (endScriptTag && tokenCharsI && '/' == tokenChars[0]) { tokenStyle = null;}
}
if (null != tokenStyle) { tokenEnds.push(new PR_TokenEnd(tokenStart, PR_PLAIN)); tokenEnds.push(new PR_TokenEnd(k + next, tokenStyle));}
}
}
k += chunk.token.length;}
tokenEnds.push(new PR_TokenEnd(k, PR_PLAIN)); return tokenEnds;}
function PR_splitStringAndCommentTokens(chunks) { var tokenEnds = []; var state = 0; var delim = -1; var k = 0; var lookBehind = []; var lastCh = ''; for (var ci = 0, nc = chunks.length; ci < nc; ++ci) { var chunk = chunks[ci]; var s = chunk.token; if (PR_PLAIN == chunk.style) { var decodeHelper = new PR_DecodeHelper(); var last = -1; var next; for (var i = 0, n = s.length; i < n; last = i, i = next) { decodeHelper.decode(s, i); var ch = decodeHelper.ch; next = decodeHelper.next; if (0 == state) { if (ch == '"' || ch == '\'' || ch == '`') { tokenEnds.push(new PR_TokenEnd(k + i, PR_PLAIN)); state = 1; delim = ch;} else if (ch == '/') { state = 3;} else if (ch == '#') { state = 4; tokenEnds.push(new PR_TokenEnd(k + i, PR_PLAIN));}
} else if (1 == state) { if (ch == delim) { state = 0; tokenEnds.push(new PR_TokenEnd(k + next, PR_STRING));} else if (ch == '\\') { state = 2;}
} else if (2 == state) { state = 1;} else if (3 == state) { if (ch == '/') { state = 4; tokenEnds.push(new PR_TokenEnd(k + last, PR_PLAIN));} else if (ch == '*') { state = 5; tokenEnds.push(new PR_TokenEnd(k + last, PR_PLAIN));} else { if ((!lookBehind.length || REGEXP_PRECEDER_PATTERN.test(lookBehind.join('')))) { state = 1; delim = '/'; tokenEnds.push(new PR_TokenEnd(k + last, PR_PLAIN));} else { state = 0; next = i; continue;}
}
} else if (4 == state) { if (ch == '\r' || ch == '\n') { state = 0; tokenEnds.push(new PR_TokenEnd(k + i, PR_COMMENT));}
} else if (5 == state) { if (ch == '*') { state = 6;}
} else if (6 == state) { if (ch == '/') { state = 0; tokenEnds.push(new PR_TokenEnd(k + next, PR_COMMENT)); continue;} else if (ch != '*') { state = 5;}
}
if (3 > state || state > 6) { var isSpace = PR_isSpaceChar(ch); if (!(lastCh === ' ' && isSpace)) { if (lookBehind.length > 16) { lookBehind.shift();}
lastCh = isSpace ? ' ' : ch; lookBehind.push(lastCh);}
}
}
}
k += s.length;}
var endTokenType; switch (state) { case 1: case 2:
endTokenType = PR_STRING; break; case 4: case 5: case 6:
endTokenType = PR_COMMENT; break; default:
endTokenType = PR_PLAIN; break;}
tokenEnds.push(new PR_TokenEnd(k, endTokenType)); return PR_splitChunks(chunks, tokenEnds);}
function PR_splitNonStringNonCommentToken(s, outlist) { var pos = 0; var state = 0; var decodeHelper = new PR_DecodeHelper(); var next; for (var i = 0; i <= s.length; i = next) { if (i == s.length) { nstate = -2; next = i + 1;} else { decodeHelper.decode(s, i); next = decodeHelper.next; var ch = decodeHelper.ch; var nstate = state; switch (state) { case 0:
if (PR_isIdentifierStart(ch)) { nstate = 1;} else if (PR_isDigitChar(ch)) { nstate = 2;} else if (!PR_isSpaceChar(ch)) { nstate = 3;}
if (nstate && pos < i) { var t = s.substring(pos, i); outlist.push(new PR_Token(t, PR_PLAIN)); pos = i;}
break; case 1:
if (!PR_isIdentifierPart(ch)) { nstate = -1;}
break; case 2:
if (!(PR_isDigitChar(ch) || PR_isWordChar(ch) || ch == '_')) { nstate = -1;}
break; case 3:
if (PR_isIdentifierStart(ch) || PR_isDigitChar(ch) || PR_isSpaceChar(ch)) { nstate = -1;}
break;}
}
if (nstate != state) { if (nstate < 0) { if (i > pos) { var t = s.substring(pos, i); var wordDecodeHelper = new PR_DecodeHelper(); wordDecodeHelper.decode(t, 0); var ch0 = wordDecodeHelper.ch; var isSingleCharacter = wordDecodeHelper.next == t.length; var style; if (PR_isIdentifierStart(ch0)) { if (PR_keywords[t]) { style = PR_KEYWORD;} else if (ch0 === '@') { style = PR_LITERAL;} else { var isType = false; if (ch0 >= 'A' && ch0 <= 'Z') { for (var j = wordDecodeHelper.next; j < t.length; j = wordDecodeHelper.next) { wordDecodeHelper.decode(t, j); var ch1 = wordDecodeHelper.ch; if (ch1 >= 'a' && ch1 <= 'z') { isType = true; break;}
}
if (!isType && !isSingleCharacter &&
t.substring(t.length - 2) == '_t') { isType = true;}
}
style = isType ? PR_TYPE : PR_PLAIN;}
} else if (PR_isDigitChar(ch0)) { style = PR_LITERAL;} else if (!PR_isSpaceChar(ch0)) { style = PR_PUNCTUATION;} else { style = PR_PLAIN;}
pos = i; outlist.push(new PR_Token(t, style));}
state = 0; if (nstate == -1) { next = i; continue;}
}
state = nstate;}
}
}
function PR_tokenizeMarkup(chunks) { if (!(chunks && chunks.length)) { return chunks;}
var tokenEnds = PR_splitMarkup(chunks); return PR_splitChunks(chunks, tokenEnds);}
function PR_splitTagAttributes(tokens) { var tokensOut = []; var state = 0; var stateStyle = PR_TAG; var delim = null; var decodeHelper = new PR_DecodeHelper(); for (var ci = 0; ci < tokens.length; ++ci) { var tok = tokens[ci]; if (PR_TAG == tok.style) { var s = tok.token; var start = 0; for (var i = 0; i < s.length; ) { decodeHelper.decode(s, i); var ch = decodeHelper.ch; var next = decodeHelper.next; var emitEnd = null; var nextStyle = null; if (ch == '>') { if (PR_TAG != stateStyle) { emitEnd = i; nextStyle = PR_TAG;}
} else { switch (state) { case 0:
if ('<' == ch) { state = 1;}
break; case 1:
if (PR_isSpaceChar(ch)) { state = 2;}
break; case 2:
if (!PR_isSpaceChar(ch)) { nextStyle = PR_ATTRIB_NAME; emitEnd = i; state = 3;}
break; case 3:
if ('=' == ch) { emitEnd = i; nextStyle = PR_TAG; state = 5;} else if (PR_isSpaceChar(ch)) { emitEnd = i; nextStyle = PR_TAG; state = 4;}
break; case 4:
if ('=' == ch) { state = 5;} else if (!PR_isSpaceChar(ch)) { emitEnd = i; nextStyle = PR_ATTRIB_NAME; state = 3;}
break; case 5:
if ('"' == ch || '\'' == ch) { emitEnd = i; nextStyle = PR_ATTRIB_VALUE; state = 6; delim = ch;} else if (!PR_isSpaceChar(ch)) { emitEnd = i; nextStyle = PR_ATTRIB_VALUE; state = 7;}
break; case 6:
if (ch == delim) { emitEnd = next; nextStyle = PR_TAG; state = 2;}
break; case 7:
if (PR_isSpaceChar(ch)) { emitEnd = i; nextStyle = PR_TAG; state = 2;}
break;}
}
if (emitEnd) { if (emitEnd > start) { tokensOut.push( new PR_Token(s.substring(start, emitEnd), stateStyle)); start = emitEnd;}
stateStyle = nextStyle;}
i = next;}
if (s.length > start) { tokensOut.push(new PR_Token(s.substring(start, s.length), stateStyle));}
} else { if (tok.style) { state = 0; stateStyle = PR_TAG;}
tokensOut.push(tok);}
}
return tokensOut;}
function PR_splitSourceNodes(tokens) { var tokensOut = []; var endScriptTag = null; var decodeHelper = new PR_DecodeHelper(); var sourceChunks = null; for (var ci = 0, nc = tokens.length; ; ++ci) { var tok; if (ci < nc) { tok = tokens[ci]; if (null == tok.style) { tokens.push(tok); continue;}
} else if (!endScriptTag) { break;} else { tok = new PR_Token('', null);}
var s = tok.token; if (null == endScriptTag) { if (PR_SOURCE == tok.style) { if ('<' == decodeHelper.decode(s, 0)) { decodeHelper.decode(s, decodeHelper.next); if ('%' == decodeHelper.ch || '?' == decodeHelper.ch) { endScriptTag = decodeHelper.ch; tokensOut.push(new PR_Token(s.substring(0, decodeHelper.next), PR_TAG)); s = s.substring(decodeHelper.next, s.length);}
}
} else if (PR_TAG == tok.style) { if ('<' == decodeHelper.decode(s, 0) &&
'/' != s.charAt(decodeHelper.next)) { var tagContent = s.substring(decodeHelper.next).toLowerCase(); if (PR_startsWith(tagContent, 'script') || PR_startsWith(tagContent, 'style') || PR_startsWith(tagContent, 'xmp')) { endScriptTag = '/';}
}
}
}
if (null != endScriptTag) { var endTok = null; if (PR_SOURCE == tok.style) { if (endScriptTag == '%' || endScriptTag == '?') { var pos = s.lastIndexOf(endScriptTag); if (pos >= 0 && '>' == decodeHelper.decode(s, pos + 1) &&
s.length == decodeHelper.next) { endTok = new PR_Token(s.substring(pos, s.length), PR_TAG); s = s.substring(0, pos);}
}
if (null == sourceChunks) { sourceChunks = [];}
sourceChunks.push(new PR_Token(s, PR_PLAIN));} else if (PR_PLAIN == tok.style) { if (null == sourceChunks) { sourceChunks = [];}
sourceChunks.push(tok);} else if (PR_TAG == tok.style) { if ('<' == decodeHelper.decode(tok.token, 0) &&
tok.token.length > decodeHelper.next &&
'/' == decodeHelper.decode(tok.token, decodeHelper.next)) { endTok = tok;} else { tokensOut.push(tok);}
} else if (ci >= nc) { endTok = tok;} else { if (sourceChunks) { sourceChunks.push(tok);} else { tokensOut.push(tok);}
}
if (endTok) { if (sourceChunks) { var sourceTokens = PR_lexSource(sourceChunks); tokensOut.push(new PR_Token('<span class=embsrc>', null)); for (var si = 0, ns = sourceTokens.length; si < ns; ++si) { tokensOut.push(sourceTokens[si]);}
tokensOut.push(new PR_Token('</span>', null)); sourceChunks = null;}
if (endTok.token) { tokensOut.push(endTok);}
endScriptTag = null;}
} else { tokensOut.push(tok);}
}
return tokensOut;}
function PR_splitAttributeQuotes(tokens) { var firstPlain = null, lastPlain = null; for (var i = 0; i < tokens.length; ++i) { if (PR_PLAIN == tokens[i].style) { firstPlain = i; break;}
}
for (var i = tokens.length; --i >= 0;) { if (PR_PLAIN == tokens[i].style) { lastPlain = i; break;}
}
if (null == firstPlain) { return tokens;}
var decodeHelper = new PR_DecodeHelper(); var fs = tokens[firstPlain].token; var fc = decodeHelper.decode(fs, 0); if ('"' != fc && '\'' != fc) { return tokens;}
var fpos = decodeHelper.next; var ls = tokens[lastPlain].token; var lpos = ls.lastIndexOf('&'); if (lpos < 0) { lpos = ls.length - 1;}
var lc = decodeHelper.decode(ls, lpos); if (lc != fc || decodeHelper.next != ls.length) { lc = null; lpos = ls.length;}
var tokensOut = []; for (var i = 0; i < firstPlain; ++i) { tokensOut.push(tokens[i]);}
tokensOut.push(new PR_Token(fs.substring(0, fpos), PR_ATTRIB_VALUE)); if (lastPlain == firstPlain) { tokensOut.push(new PR_Token(fs.substring(fpos, lpos), PR_PLAIN));} else { tokensOut.push(new PR_Token(fs.substring(fpos, fs.length), PR_PLAIN)); for (var i = firstPlain + 1; i < lastPlain; ++i) { tokensOut.push(tokens[i]);}
if (lc) { tokens.push(new PR_Token(ls.substring(0, lpos), PR_PLAIN));} else { tokens.push(tokens[lastPlain]);}
}
if (lc) { tokensOut.push(new PR_Token(ls.substring(lpos, ls.length), PR_PLAIN));}
for (var i = lastPlain + 1; i < tokens.length; ++i) { tokensOut.push(tokens[i]);}
return tokensOut;}
function PR_splitSourceAttributes(tokens) { var tokensOut = []; var sourceChunks = null; var inSource = false; var name = ''; for (var ci = 0, nc = tokens.length; ci < nc; ++ci) { var tok = tokens[ci]; var outList = tokensOut; if (PR_TAG == tok.style) { if (inSource) { inSource = false; name = ''; if (sourceChunks) { tokensOut.push(new PR_Token('<span class=embsrc>', null)); var sourceTokens = PR_lexSource(PR_splitAttributeQuotes(sourceChunks)); for (var si = 0, ns = sourceTokens.length; si < ns; ++si) { tokensOut.push(sourceTokens[si]);}
tokensOut.push(new PR_Token('</span>', null)); sourceChunks = null;}
} else if (name && tok.token.indexOf('=') >= 0) { var nameLower = name.toLowerCase(); if (PR_startsWith(nameLower, 'on') || 'style' == nameLower) { inSource = true;}
} else { name = '';}
} else if (PR_ATTRIB_NAME == tok.style) { name += tok.token;} else if (PR_ATTRIB_VALUE == tok.style) { if (inSource) { if (null == sourceChunks) { sourceChunks = [];}
outList = sourceChunks; tok = new PR_Token(tok.token, PR_PLAIN);}
} else { if (sourceChunks) { outList = sourceChunks;}
}
outList.push(tok);}
return tokensOut;}
function PR_lexSource(chunks) { var tokens = PR_splitStringAndCommentTokens(chunks); var tokensOut = []; for (var i = 0; i < tokens.length; ++i) { var tok = tokens[i]; if (PR_PLAIN === tok.style) { PR_splitNonStringNonCommentToken(tok.token, tokensOut); continue;}
tokensOut.push(tok);}
return tokensOut;}
function PR_lexMarkup(chunks) { var tokensOut = PR_tokenizeMarkup(chunks); tokensOut = PR_splitTagAttributes(tokensOut); tokensOut = PR_splitSourceNodes(tokensOut); tokensOut = PR_splitSourceAttributes(tokensOut); return tokensOut;}
function PR_lexOne(html) { var chunks = PR_expandTabs(PR_chunkify(html), PR_TAB_WIDTH); var isMarkup = false; for (var i = 0; i < chunks.length; ++i) { if (PR_PLAIN == chunks[i].style) { if (PR_startsWith(PR_trim(chunks[i].token), '&lt;')) { for (var j = chunks.length; --j >= 0;) { if (PR_PLAIN == chunks[j].style) { isMarkup = PR_endsWith(PR_trim(chunks[j].token), '&gt;'); break;}
}
}
break;}
}
return isMarkup ? PR_lexMarkup(chunks) : PR_lexSource(chunks);}
function prettyPrintOne(s) { try { var tokens = PR_lexOne(s); var out = []; var lastStyle = null; for (var i = 0; i < tokens.length; i++) { var t = tokens[i]; if (t.style != lastStyle) { if (lastStyle != null) { out.push('</span>');}
if (t.style != null) { out.push('<span class=', t.style, '>');}
lastStyle = t.style;}
var html = t.token; if (null != t.style) { html = html
.replace(/(\r\n?|\n| ) /g, '$1&nbsp;')
.replace(/\r\n?|\n/g, '<br>');}
out.push(html);}
if (lastStyle != null) { out.push('</span>');}
return out.join('');} catch (e) { if ('console' in window) { console.log(e); console.trace();}
return s;}
}
function prettyPrint() { var codeSegments = [ document.getElementsByTagName('pre'), document.getElementsByTagName('code'), document.getElementsByTagName('xmp') ]; var elements = []; for (var i = 0; i < codeSegments.length; ++i) { for (var j = 0; j < codeSegments[i].length; ++j) { elements.push(codeSegments[i][j]);}
}
codeSegments = null; var k = 0; function doWork() { var endTime = new Date().getTime() + 250; for (; k < elements.length && new Date().getTime() < endTime; k++) { var cs = elements[k]; if (cs.className && cs.className.indexOf('prettyprint') >= 0) { var nested = false; for (var p = cs.parentNode; p != null; p = p.parentNode) { if ((p.tagName == 'pre' || p.tagName == 'code' || p.tagName == 'xmp') &&
p.className && p.className.indexOf('prettyprint') >= 0) { nested = true; break;}
}
if (!nested) { var content = PR_getInnerHtml(cs); content = content.replace(/(?:\r\n?|\n)$/, ''); var newContent = prettyPrintOne(content); if (!PR_isRawContent(cs)) { cs.innerHTML = newContent;} else { var pre = document.createElement('PRE'); for (var i = 0; i < cs.attributes.length; ++i) { var a = cs.attributes[i]; if (a.specified) { pre.setAttribute(a.name, a.value);}
}
pre.innerHTML = newContent; cs.parentNode.replaceChild(pre, cs);}
}
}
}
if (k < elements.length) { setTimeout(doWork, 250);}
}
doWork();}
