1function _w3CodeColorize(x, lang) { 2 var tagcolor = "#999"; //mediumblue 3 var tagnamecolor = "#905"; //brown 4 var attributecolor = "#005cc5"; //red 5 var attributevaluecolor = "green"; //mediumblue 6 var commentcolor = "slategray"; //green 7 var doctypecolor = "slategray"; //green 8 var cssselectorcolor = "#07a"; //brown 9 var csspropertycolor = "#d73a49"; //red 10 var csspropertyvaluecolor = "green"; //"mediumblue" 11 var cssdelimitercolor = "#999"; //black 12 var cssimportantcolor = "#d73a49"; //"#DD4A68"; //red 13 14 var tagcolor = "#999"; //mediumblue 15 var tagnamecolor = "#905"; //brown 16 var attributecolor = "green"; //"#690" //red 17 var attributevaluecolor = "#005cc5"; //mediumblue 18 var commentcolor = "slategray"; //green 19 var cssselectorcolor = "green"; //brown 20 var csspropertycolor = "#905"; //red 21 var csspropertyvaluecolor = "black"; //"mediumblue" 22 var cssdelimitercolor = "#999"; //black 23 var cssimportantcolor = "#d73a49"; //red 24 25 var cssselectorcolor = "#905"; //brown 26 var csspropertycolor = "#d73a49"; //red 27 var csspropertyvaluecolor = "#005cc5"; //"#07a"; //"mediumblue" 28 var cssdelimitercolor = "#999"; //black 29 var cssimportantcolor = "#d73a49"; //red 30 31 var doctypecolor = "slategray"; //green 32 33 var jscolor = "black"; 34 var jskeywordcolor = "#005cc5"; //"mediumblue"; 35 var jsstringcolor = "green"; //"brown"; 36 var jsstringtempcolor = "#f50"; //orange 37 var jsregexpcolor = "#e90"; //"#f50"; //orange 38 var jsnumbercolor = "#905"; //red 39 var jspropertycolor = "black"; 40 41 var javacolor = "black"; 42 var javakeywordcolor = "#005cc5"; //"mediumblue"; 43 var javastringcolor = "green"; //"brown"; 44 var javanumbercolor = "#905"; //"red"; 45 var javapropertycolor = "black"; 46 47 var kotlincolor = "black"; 48 var kotlinkeywordcolor = "mediumblue"; 49 var kotlinstringcolor = "brown"; 50 var kotlinnumbercolor = "red"; 51 var kotlinpropertycolor = "black"; 52 53 var phptagcolor = "#d73a49"; //red 54 var phpcolor = "black"; 55 var phpkeywordcolor = "#005cc5"; //mediumblue 56 var phpglobalcolor = "goldenrod"; 57 var phpstringcolor = "green"; //"brown 58 var phpnumbercolor = "#905"; //red 59 60 var pythoncolor = "black"; 61 var pythonkeywordcolor = "#005cc5"; //mediumblue 62 var pythonstringcolor = "green" //"#22863a"; //brown 63 var pythonnumbercolor = "#905"; //red 64 65 var angularstatementcolor = "#d73a49"; //red 66 67 var sqlcolor = "black"; 68 var sqlkeywordcolor = "#005cc5"; //mediumblue 69 var sqlstringcolor = "green"; //brown 70 var sqlnumbercolor = "#905"; // 71 72 if (!lang) { lang = "html"; } 73 if (lang == "html") { return htmlMode(x); } 74 if (lang == "css") { return cssMode(x); } 75 if (lang == "js") { return jsMode(x); } 76 if (lang == "java") { return javaMode(x); } 77 if (lang == "kotlin") { return kotlinMode(x); } 78 if (lang == "php") { return phpMode(x); } 79 if (lang == "sql") { return sqlMode(x); } 80 if (lang == "python") { return pythonMode(x); } 81 return x; 82 function extract(str, start, end, func, repl) { 83 var s, e, d = "", a = []; 84 while (str.search(start) > -1) { 85 s = str.search(start); 86 e = str.indexOf(end, s); 87 if (e == -1) { e = str.length; } 88 if (repl) { 89 a.push(func(str.substring(s, e + (end.length)))); 90 str = str.substring(0, s) + repl + str.substr(e + (end.length)); 91 } else { 92 d += str.substring(0, s); 93 d += func(str.substring(s, e + (end.length))); 94 str = str.substr(e + (end.length)); 95 } 96 } 97 this.rest = d + str; 98 this.arr = a; 99 } 100 function htmlMode(txt) { 101 var rest = txt, done = "", php, comment, dctype, angular, startpos, endpos, note, i; 102 php = new extract(rest, "<\\?php", "?>", phpMode, "W3PHPPOS"); 103 rest = php.rest; 104 comment = new extract(rest, "<!--", "-->", commentMode, "W3HTMLCOMMENTPOS"); 105 rest = comment.rest; 106 dctype = new extract(rest, "<!DOCTYPE", ">", doctypeMode, "W3HTMLDOCTYPEPOS"); 107 rest = dctype.rest; 108 while (rest.indexOf("<") > -1) { 109 note = ""; 110 startpos = rest.indexOf("<"); 111 if (rest.substr(startpos, 9).toUpperCase() == "<STYLE") { note = "css"; } 112 if (rest.substr(startpos, 10).toUpperCase() == "<SCRIPT") { note = "javascript"; } 113 endpos = rest.indexOf(">", startpos); 114 if (endpos == -1) { endpos = rest.length; } 115 done += rest.substring(0, startpos); 116 done += tagMode(rest.substring(startpos, endpos + 4)); 117 rest = rest.substr(endpos + 4); 118 if (note == "css") { 119 endpos = rest.indexOf("</style>"); 120 if (endpos > -1) { 121 done += cssMode(rest.substring(0, endpos)); 122 rest = rest.substr(endpos); 123 } 124 } 125 if (note == "javascript") { 126 endpos = rest.indexOf("</script>"); 127 if (endpos > -1) { 128 done += jsMode(rest.substring(0, endpos)); 129 rest = rest.substr(endpos); 130 } 131 } 132 } 133 rest = done + rest; 134 angular = new extract(rest, "{{", "}}", angularMode); 135 rest = angular.rest; 136 for (i = 0; i < dctype.arr.length; i++) { 137 rest = rest.replace("W3HTMLDOCTYPEPOS", dctype.arr[i]); 138 } 139 for (i = 0; i < comment.arr.length; i++) { 140 rest = rest.replace("W3HTMLCOMMENTPOS", comment.arr[i]); 141 } 142 for (i = 0; i < php.arr.length; i++) { 143 rest = rest.replace("W3PHPPOS", php.arr[i]); 144 } 145 return rest; 146 } 147 function tagMode(txt) { 148 var rest = txt, done = "", startpos, endpos, result; 149 while (rest.search(/(\s|<br>)/) > -1) { 150 startpos = rest.search(/(\s|<br>)/); 151 endpos = rest.indexOf(">"); 152 if (endpos == -1) { endpos = rest.length; } 153 done += rest.substring(0, startpos); 154 done += attributeMode(rest.substring(startpos, endpos)); 155 rest = rest.substr(endpos); 156 } 157 result = done + rest; 158 result = "<span class='tagcolor' style=color:" + tagcolor + "><</span>" + result.substring(4); 159 if (result.substr(result.length - 4, 4) == ">") { 160 result = result.substring(0, result.length - 4) + "<span class='tagcolor' style=color:" + tagcolor + ">></span>"; 161 } 162 return "<span class='tagnamecolor' style=color:" + tagnamecolor + ">" + result + "</span>"; 163 } 164 function attributeMode(txt) { 165 var rest = txt, done = "", startpos, endpos, singlefnuttpos, doublefnuttpos, spacepos; 166 while (rest.indexOf("=") > -1) { 167 endpos = -1; 168 startpos = rest.indexOf("="); 169 singlefnuttpos = rest.indexOf("'", startpos); 170 doublefnuttpos = rest.indexOf('"', startpos); 171 spacepos = rest.indexOf(" ", startpos + 2); 172 if (spacepos > -1 && (spacepos < singlefnuttpos || singlefnuttpos == -1) && (spacepos < doublefnuttpos || doublefnuttpos == -1)) { 173 endpos = rest.indexOf(" ", startpos); 174 } else if (doublefnuttpos > -1 && (doublefnuttpos < singlefnuttpos || singlefnuttpos == -1) && (doublefnuttpos < spacepos || spacepos == -1)) { 175 endpos = rest.indexOf('"', rest.indexOf('"', startpos) + 1); 176 } else if (singlefnuttpos > -1 && (singlefnuttpos < doublefnuttpos || doublefnuttpos == -1) && (singlefnuttpos < spacepos || spacepos == -1)) { 177 endpos = rest.indexOf("'", rest.indexOf("'", startpos) + 1); 178 } 179 if (!endpos || endpos == -1 || endpos < startpos) { endpos = rest.length; } 180 done += rest.substring(0, startpos); 181 done += attributeValueMode(rest.substring(startpos, endpos + 1)); 182 rest = rest.substr(endpos + 1); 183 } 184 return "<span class='attributecolor' style=color:" + attributecolor + ">" + done + rest + "</span>"; 185 } 186 function attributeValueMode(txt) { 187 return "<span class='attributevaluecolor' style=color:" + attributevaluecolor + ">" + txt + "</span>"; 188 } 189 function angularMode(txt) { 190 return "<span class='angularstatementcolor' style=color:" + angularstatementcolor + ">" + txt + "</span>"; 191 } 192 function commentMode(txt) { 193 return "<span class='commentcolor' style=color:" + commentcolor + ">" + txt + "</span>"; 194 } 195 function doctypeMode(txt) { 196 return "<span class='doctypecolor' style=color:" + doctypecolor + ">" + txt + "</span>"; 197 } 198 function cssMode(txt) { 199 var rest = txt, done = "", s, e, comment, i, midz, c, cc; 200 comment = new extract(rest, /\/\*/, "*/", commentMode, "W3CSSCOMMENTPOS"); 201 rest = comment.rest; 202 while (rest.search("{") > -1) { 203 s = rest.search("{"); 204 midz = rest.substr(s + 1); 205 cc = 1; 206 c = 0; 207 for (i = 0; i < midz.length; i++) { 208 if (midz.substr(i, 1) == "{") { cc++; c++ } 209 if (midz.substr(i, 1) == "}") { cc--; } 210 if (cc == 0) { break; } 211 } 212 if (cc != 0) { c = 0; } 213 e = s; 214 for (i = 0; i <= c; i++) { 215 e = rest.indexOf("}", e + 1); 216 } 217 if (e == -1) { e = rest.length; } 218 done += rest.substring(0, s + 1); 219 done += cssPropertyMode(rest.substring(s + 1, e)); 220 rest = rest.substr(e); 221 } 222 rest = done + rest; 223 rest = rest.replace(/{/g, "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">
223{</span>"); 224 rest = rest.replace(/}/g, "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">}</span>"); 225 for (i = 0; i < comment.arr.length; i++) { 226 rest = rest.replace("W3CSSCOMMENTPOS", comment.arr[i]); 227 } 228 return "<span class='cssselectorcolor' style=color:" + cssselectorcolor + ">" + rest + "</span>"; 229 } 230 function cssPropertyMode(txt) { 231 var rest = txt, done = "", s, e, n, loop; 232 if (rest.indexOf("{") > -1) { return cssMode(rest); } 233 while (rest.search(":") > -1) { 234 s = rest.search(":"); 235 loop = true; 236 n = s; 237 while (loop == true) { 238 loop = false; 239 e = rest.indexOf(";", n); 240 if (rest.substring(e - 5, e + 1) == " ") { 241 loop = true; 242 n = e + 1; 243 } 244 } 245 if (e == -1) { e = rest.length; } 246 done += rest.substring(0, s); 247 done += cssPropertyValueMode(rest.substring(s, e + 1)); 248 rest = rest.substr(e + 1); 249 } 250 return "<span class='csspropertycolor' style=color:" + csspropertycolor + ">" + done + rest + "</span>"; 251 } 252 function cssPropertyValueMode(txt) { 253 var rest = txt, done = "", s; 254 rest = "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">:</span>" + rest.substring(1); 255 while (rest.search(/!important/i) > -1) { 256 s = rest.search(/!important/i); 257 done += rest.substring(0, s); 258 done += cssImportantMode(rest.substring(s, s + 10)); 259 rest = rest.substr(s + 10); 260 } 261 result = done + rest; 262 if (result.substr(result.length - 1, 1) == ";" && result.substr(result.length - 6, 6) != " " && result.substr(result.length - 4, 4) != "<" && result.substr(result.length - 4, 4) != ">" && result.substr(result.length - 5, 5) != "&") { 263 result = result.substring(0, result.length - 1) + "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">;</span>"; 264 } 265 return "<span class='csspropertyvaluecolor' style=color:" + csspropertyvaluecolor + ">" + result + "</span>"; 266 } 267 function cssImportantMode(txt) { 268 return "<span class='cssimportantcolor' style=color:" + cssimportantcolor + ";font-weight:bold;>" + txt + "</span>"; 269 } 270 function jsMode(txt) { 271 var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y; 272 for (i = 0; i < rest.length; i++) { 273 cc = rest.substr(i, 1); 274 if (cc == "\\") { 275 esc.push(rest.substr(i, 2)); 276 cc = "W3JSESCAPE"; 277 i++; 278 } 279 tt += cc; 280 } 281 rest = tt; 282 y = 1; 283 while (y == 1) { 284 regexppos = getRegExpPos(rest, jsRegExpMode); 285 sfnuttpos = getPos(rest, "'", "'", jsStringMode); 286 dfnuttpos = getPos(rest, '"', '"', jsStringMode); 287 bfnuttpos = getPos(rest, '`', '`', jsStringTempMode); 288 compos = getPos(rest, /\/\*/, "*/", commentMode); 289 comlinepos = getPos(rest, /\/\//, "<br>", commentMode); 290 numpos = getNumPos(rest, jsNumberMode); 291 keywordpos = getKeywordPos("js", rest, jsKeywordMode); 292 dotpos = getDotPos(rest, jsPropertyMode); 293 if (Math.max(numpos[0], regexppos[0], sfnuttpos[0], dfnuttpos[0], bfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) { break; } 294 mypos = getMinPos(numpos, regexppos, sfnuttpos, dfnuttpos, bfnuttpos, compos, comlinepos, keywordpos, dotpos); 295 if (mypos[0] == -1) { break; } 296 if (mypos[0] > -1) { 297 done += rest.substring(0, mypos[0]); 298 done += mypos[2](rest.substring(mypos[0], mypos[1])); 299 rest = rest.substr(mypos[1]); 300 } 301 } 302 rest = done + rest; 303 for (i = 0; i < esc.length; i++) { 304 rest = rest.replace("W3JSESCAPE", esc[i]); 305 } 306 return "<span class='jscolor' style=color:" + jscolor + ">" + rest + "</span>"; 307 } 308 function jsRegExpMode(txt) { 309 return "<span class='jsregexpcolor' style=color:" + jsregexpcolor + ">" + txt + "</span>"; 310 } 311 function jsStringMode(txt) { 312 return "<span class='jsstringcolor' style=color:" + jsstringcolor + ">" + txt + "</span>"; 313 } 314 function jsStringTempMode(txt) { 315 return "<span class='jsstringtempcolor' style=color:" + jsstringtempcolor + ">" + txt + "</span>"; 316 } 317 function jsKeywordMode(txt) { 318 return "<span class='jskeywordcolor' style=color:" + jskeywordcolor + ">" + txt + "</span>"; 319 } 320 function jsNumberMode(txt) { 321 return "<span class='jsnumbercolor' style=color:" + jsnumbercolor + ">" + txt + "</span>"; 322 } 323 function jsPropertyMode(txt) { 324 return "<span class='jspropertycolor' style=color:" + jspropertycolor + ">" + txt + "</span>"; 325 } 326 function getRegExpPos(txt, func) { 327 var pos1, cc, pos2 = 0, mArr, i, len, patt, modOK = false;
328 pos1 = txt.search(/\/.+?\//); 329 if (pos1 > -1) { 330 len = txt.match(/\/.+?\//)[0].length; 331 patt = /\W/g; 332 cc = txt.match(/\/.+?\//)[0]; 333 pos2 = cc.length; 334 mArr = ["img", "igm", "mig", "mgi", "gim", "gmi", "im", "ig", "mi", "mg", "gi", "gm", "i", "m", "g", "d", "gs", "y", "u", "v", "s"]; 335 for (i = 0; i < mArr.length; i++) { 336 re = new RegExp(`\\b^${mArr[i]}\\b`, 'gi'); 337 if (txt.substr(pos1 + pos2).search(re) > -1) { 338 modOK = true; 339 pos2 = pos2 + mArr[i].length; 340 } 341 } 342 //console.log(txt.substr(pos1 + len - 2,1)); 343 //console.log((txt.substr(pos1 + len - 2,1)!= "<")); 344 if ((cc.indexOf("<br>") == -1 && txt.substr(pos1 + len, 1) != "/" && txt.substr(pos1 + len, 1).match(patt) && txt.substr(pos1 - 1, 1).match(patt) && txt.substr(pos1 - 1, 1) != "/") || modOK == true && txt.substr(pos1 + len - 2, 1) != "<") { 345 } else { 346 pos1 = -1; 347 pos2 = 0; 348 } 349 } 350 return [pos1, pos1 + pos2, func]; 351 } 352 function getDotPos(txt, func) { 353 var x, i, j, s, e, arr = [".", "<", " ", ";", "(", "+", ")", "[", "]", ",", "&", ":", "{", "}", "/", "-", "*", "|", "%"]; 354 s = txt.indexOf("."); 355 if (s > -1) { 356 x = txt.substr(s + 1); 357 for (j = 0; j < x.length; j++) { 358 cc = x[j]; 359 for (i = 0; i < arr.length; i++) { 360 if (cc.indexOf(arr[i]) > -1) { 361 e = j; 362 return [s + 1, e + s + 1, func]; 363 } 364 } 365 } 366 } 367 return [-1, -1, func]; 368 } 369 function getMinPos() { 370 var i, arr = []; 371 for (i = 0; i < arguments.length; i++) { 372 if (arguments[i][0] > -1) { 373 if (arr.length == 0 || arguments[i][0] < arr[0]) { arr = arguments[i]; } 374 } 375 } 376 if (arr.length == 0) { arr = arguments[i]; } 377 return arr; 378 } 379 function javaMode(txt) { 380 var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y; 381 for (i = 0; i < rest.length; i++) { 382 cc = rest.substr(i, 1); 383 if (cc == "\\") { 384 esc.push(rest.substr(i, 2)); 385 cc = "W3JSESCAPE"; 386 i++; 387 } 388 tt += cc; 389 } 390 rest = tt; 391 y = 1; 392 while (y == 1) { 393 sfnuttpos = getPos(rest, "'", "'", javaStringMode); 394 dfnuttpos = getPos(rest, '"', '"', javaStringMode); 395 compos = getPos(rest, /\/\*/, "*/", commentMode); 396 comlinepos = getPos(rest, /\/\//, "<br>", commentMode); 397 numpos = getNumPos(rest, javaNumberMode); 398 keywordpos = getKeywordPos("java", rest, javaKeywordMode); 399 dotpos = getDotPos(rest, javaPropertyMode); 400 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) { break; } 401 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, dotpos); 402 if (mypos[0] == -1) { break; } 403 if (mypos[0] > -1) { 404 done += rest.substring(0, mypos[0]); 405 done += mypos[2](rest.substring(mypos[0], mypos[1])); 406 rest = rest.substr(mypos[1]); 407 } 408 } 409 rest = done + rest; 410 for (i = 0; i < esc.length; i++) { 411 rest = rest.replace("W3JSESCAPE", esc[i]); 412 } 413 return "<span class='javacolor' style=color:" + javacolor + ">" + rest + "</span>"; 414 } 415 function javaStringMode(txt) { 416 return "<span class='javastringcolor' style=color:" + javastringcolor + ">" + txt + "</span>"; 417 } 418 function javaKeywordMode(txt) { 419 return "<span class='javakeywordcolor' style=color:" + javakeywordcolor + ">" + txt + "</span>"; 420 } 421 function javaNumberMode(txt) { 422 return "<span class='javanumbercolor' style=color:" + javanumbercolor + ">" + txt + "</span>"; 423 } 424 function javaPropertyMode(txt) { 425 return "<span class='javapropertycolor' style=color:" + javapropertycolor + ">" + txt + "</span>"; 426 } 427 function kotlinMode(txt) { 428 var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y; 429 for (i = 0; i < rest.length; i++) { 430 cc = rest.substr(i, 1); 431 if (cc == "\\") { 432 esc.push(rest.substr(i, 2)); 433 cc = "W3JSESCAPE"; 434 i++; 435 } 436 tt += cc; 437 } 438 rest = tt; 439 y = 1; 440 while (y == 1) { 441 sfnuttpos = getPos(rest, "'", "'", kotlinStringMode); 442 dfnuttpos = getPos(rest, '"', '"', kotlinStringMode); 443 compos = getPos(rest, /\/\*/, "*/", commentMode); 444 comlinepos = getPos(rest, /\/\//, "<br>", commentMode); 445 numpos = getNumPos(rest, kotlinNumberMode); 446 keywordpos = getKeywordPos("kotlin", rest, kotlinKeywordMode); 447 dotpos = getDotPos(rest, kotlinPropertyMode); 448 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) { break; } 449 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, dotpos); 450 if (mypos[0] == -1) { break; } 451 if (mypos[0] > -1) { 452 done += rest.substring(0, mypos[0]); 453 done += mypos[2](rest.substring(mypos[0], mypos[1])); 454 rest = rest.substr(mypos[1]); 455 } 456 } 457 rest = done + rest; 458 for (i = 0; i < esc.length; i++) { 459 rest = rest.replace("W3JSESCAPE", esc[i]); 460 } 461 return "<span class='kotlincolor' style=color:" + kotlincolor + ">" + rest + "</span>"; 462 } 463 function kotlinStringMode(txt) { 464 return "<span class='kotlinstringcolor' style=color:" + kotlinstringcolor + ">" + txt + "</span>"; 465 } 466 function kotlinKeywordMode(txt) { 467 return "<span class='kotlinkeywordcolor' style=color:" + kotlinkeywordcolor + ">" + txt + "</span>"; 468 } 469 function kotlinNumberMode(txt) { 470 return "<span class='kotlinnumbercolor' style=color:" + kotlinnumbercolor + ">" + txt + "</span>"; 471 } 472 function kotlinPropertyMode(txt) { 473 return "<span class='kotlinpropertycolor' style=color:" + kotlinpropertycolor + ">" + txt + "</span>"; 474 } 475 function sqlMode(txt) { 476 var rest = txt, y, done = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos; 477 y = 1; 478 while (y == 1) { 479 sfnuttpos = getPos(rest, "'", "'", sqlStringMode); 480 dfnuttpos = getPos(rest, '"', '"', sqlStringMode); 481 compos = getPos(rest, /\/\*/, "*/", commentMode); 482 comlinepos = getPos(rest, /--/, "<br>", commentMode); 483 numpos = getNumPos(rest, sqlNumberMode); 484 keywordpos = getKeywordPos("sql", rest, sqlKeywordMode); 485 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0]) == -1) { break; } 486 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos); 487 if (mypos[0] == -1) { break; } 488 if (mypos[0] > -1) { 489 done += rest.substring(0, mypos[0]); 490 done += mypos[2](rest.substring(mypos[0], mypos[1])); 491 rest = rest.substr(mypos[1]); 492 } 493 } 494 rest = done + rest; 495 return "<span class='sqlcolor' style=color:" + sqlcolor + ">" + rest + "</span>"; 496 } 497 function sqlStringMode(txt) {
498 return "<span class='sqlstringcolor' style=color:" + sqlstringcolor + ">" + txt + "</span>"; 499 } 500 function sqlKeywordMode(txt) { 501 return "<span class='sqlkeywordcolor' style=color:" + sqlkeywordcolor + ">" + txt + "</span>"; 502 } 503 function sqlNumberMode(txt) { 504 return "<span class='sqlnumbercolor' style=color:" + sqlnumbercolor + ">" + txt + "</span>"; 505 } 506 function phpMode(txt) { 507 var rest = txt, done = "", sfnuttpos, dfnuttpos, compos, comlinepos, comhashpos, keywordpos, mypos, y; 508 y = 1; 509 while (y == 1) { 510 sfnuttpos = getPos(rest, "'", "'", phpStringMode); 511 dfnuttpos = getPos(rest, '"', '"', phpStringMode); 512 compos = getPos(rest, /\/\*/, "*/", commentMode); 513 comlinepos = getPos(rest, /\/\//, "<br>", commentMode); 514 comhashpos = getPos(rest, "#", "<br>", commentMode); 515 numpos = getNumPos(rest, phpNumberMode); 516 keywordpos = getKeywordPos("php", rest, phpKeywordMode); 517 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], comhashpos[0], keywordpos[0]) == -1) { break; } 518 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, comhashpos, keywordpos); 519 if (mypos[0] == -1) { break; } 520 if (mypos[0] > -1) { 521 done += rest.substring(0, mypos[0]); 522 done += mypos[2](rest.substring(mypos[0], mypos[1])); 523 rest = rest.substr(mypos[1]); 524 } 525 } 526 rest = done + rest; 527 rest = "<span class='phptagcolor' style=color:" + phptagcolor + "><" + rest.substr(4, 4) + "</span>" + rest.substring(8); 528 if (rest.substr(rest.length - 5, 5) == "?>") { 529 rest = rest.substring(0, rest.length - 5) + "<span class='phptagcolor' style=color:" + phptagcolor + ">?></span>"; 530 } 531 return "<span class='phpcolor' style=color:" + phpcolor + ">" + rest + "</span>"; 532 } 533 function phpStringMode(txt) { 534 return "<span class='phpstringcolor' style=color:" + phpstringcolor + ">" + txt + "</span>"; 535 } 536 function phpNumberMode(txt) { 537 return "<span class='phpnumbercolor' style=color:" + phpnumbercolor + ">" + txt + "</span>"; 538 } 539 function phpKeywordMode(txt) { 540 var glb = ["$GLOBALS", "$_SERVER", "$_REQUEST", "$_POST", "$_GET", "$_FILES", "$_ENV", "$_COOKIE", "$_SESSION"]; 541 if (glb.indexOf(txt.toUpperCase()) > -1) { 542 if (glb.indexOf(txt) > -1) { 543 return "<span class='phpglobalcolor' style=color:" + phpglobalcolor + ">" + txt + "</span>"; 544 } else { 545 return txt; 546 } 547 } else { 548 return "<span class='phpkeywordcolor' style=color:" + phpkeywordcolor + ">" + txt + "</span>"; 549 } 550 } 551 function pythonMode(txt) { 552 var rest = txt, done = "", sfnuttpos, dfnuttpos, compos, comlinepos, comhashpos, keywordpos, mypos, y; 553 y = 1; 554 while (y == 1) { 555 sfnuttpos = getPos(rest, "'", "'", pythonStringMode); 556 dfnuttpos = getPos(rest, '"', '"', pythonStringMode); 557 compos = getPos(rest, /\/\*/, "*/", commentMode); 558 comhashpos = getPos(rest, "#", "<br>", commentMode); 559 numpos = getNumPos(rest, pythonNumberMode); 560 keywordpos = getKeywordPos("python", rest, pythonKeywordMode); 561 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comhashpos[0], keywordpos[0]) == -1) { break; } 562 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comhashpos, keywordpos); 563 if (mypos[0] == -1) { break; } 564 if (mypos[0] > -1) { 565 done += rest.substring(0, mypos[0]); 566 done += mypos[2](rest.substring(mypos[0], mypos[1])); 567 rest = rest.substr(mypos[1]); 568 } 569 } 570 rest = done + rest; 571 return "<span class='pythoncolor' style=color:" + pythoncolor + ">" + rest + "</span>"; 572 } 573 function pythonStringMode(txt) { 574 return "<span class='pythonstringcolor' style=color:" + pythonstringcolor + ">" + txt + "</span>"; 575 } 576 function pythonNumberMode(txt) { 577 return "<span class='pythonnumbercolor' style=color:" + pythonnumbercolor + ">" + txt + "</span>"; 578 } 579 function pythonKeywordMode(txt) { 580 return "<span class='pythonkeywordcolor' style=color:" + pythonkeywordcolor + ">" + txt + "</span>"; 581 } 582 function getKeywordPos(typ, txt, func) { 583 var words, i, pos, rpos = -1, rpos2 = -1, patt; 584 if (typ == "js") { 585 words = ["abstract", "arguments", "async", "await", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "debugger", "default", "delete", 586 "do", "double", "else", "enum", "eval", "event", "export", "extends", "false", "final", "finally", "float", "for", "function", "goto", "if", "implements", "import", 587 "in", "instanceof", "int", "interface", "let", "long", "NaN", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", 588 "super", "switch", "synchronized", "then", "this", "throw", "throws", "transient", "true", "try", "typeof", "undefined", "var", "void", "volatile", "while", "with", "yield"]; 589 } else if (typ == "java") { 590 words = ["abstract", "arguments", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "debugger", "default", "delete", 591 "do", "double", "else", "enum", "eval", "event", "export", "extends", "false", "final", "finally", "float", "for", "function", "goto", "if", "implements", "import", 592 "in", "instanceof", "int", "interface", "let", "long", "NaN", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", 593 "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "typeof", "var", "void", "volatile", "while", "with", "yield", 594 "String"]; 595 } else if (typ == "kotlin") { 596 words = ['package', 'as', 'typealias', 'class', 'interface', 'this', 'super', 'val', 'operator', 'var', 'fun', 'for', 'is', 'in', 'This', 'throw', 'return', 597 'annotation', 'break', 'continue', 'object', 'if', 'else', 'while', 'do', 'try', 'when', '!in', '!is', 'as?', 'file', 'import', 'where', 'by', 'get', 'set', 598 'abstract', 'enum', 'open', 'inner', 'override', 'private', 'public', 'internal', 'protected', 'catch', 'finally', 'out', 'final', 'vararg', 'reified', 599 'dynamic', 'companion', 'constructor', 'init', 'sealed', 'field', 'property', 'receiver', 'param', 'sparam', 'lateinit', 'data', 'inline', 'noinline', 600 'tailrec', 'external', 'annotation', 'crossinline', 'const', 'operator', 'infix', 'suspend', 'actual', 'expect', 'setparam', 'Boolean', 'Byte', 'Character', 601 'CharSequence', 'Class', 'ClassLoader', 'Cloneable', 'Comparable', 'Compiler', 'Double', 'Exception', 'Float', 'Integer', 'Long', 'Math', 'Number', 'Object', 602 'Package', 'Pair', 'Process', 'Runtime', 'Runnable', 'SecurityManager', 'Short', 'StackTraceElement', 'StrictMath', 'String', 'StringBuffer', 'System', 603 'Thread', 'ThreadGroup', 'ThreadLocal', 'Throwable', 'Triple', 'Void', 'Annotation', 'Any', 'BooleanArray', 'ByteArray', 'Char', 'CharArray', 604 'DeprecationLevel', 'DoubleArray', 'Enum', 'FloatArray', 'Function', 'Int', 'IntArray', 'Lazy', 'LazyThreadSafetyMode', 'LongArray', 'Nothing', 'ShortArray', 'Unit']; 605 } else if (typ == "php") { 606 words = ["$GLOBALS", "$_SERVER", "$_REQUEST", "$_POST", "$_GET", "$_FILES", "$_ENV", "$_COOKIE", "$_SESSION", 607 "__halt_compiler", "abstract", "and", "array", "as", "break", "callable", "case", "catch", "class", "clone", "const", "continue", "declare", "default", 608 "die", "do", "echo", "else", "elseif", "empty", "enddeclare", "endfor", "endforeach", "endif", "endswitch", "endwhile", "eval", "exit", "extends", "final", "for", 609 "foreach", "function", "global", "goto", "if", "implements", "include", "include_once", "instanceof", "insteadof", "interface", "isset", "list", "n
609amespace", "new", 610 "or", "print", "private", "protected", "public", "require", "require_once", "return", "static", "switch", "throw", "trait", "try", "unset", "use", "var", "while", "xor"]; 611 } else if (typ == "sql") { 612 words = ["ADD", "EXTERNAL", "PROCEDURE", "ALL", "FETCH", "PUBLIC", "ALTER", "FILE", "RAISERROR", "AND", "FILLFACTOR", "READ", "ANY", "READTEXT", "AS", "FOREIGN", 613 "RECONFIGURE", "ASC", "FREETEXT", "REFERENCES", "AUTHORIZATION", "FREETEXTTABLE", "REPLICATION", "BACKUP", "FROM", "RESTORE", "BEGIN", "FULL", "RESTRICT", "BETWEEN", 614 "FUNCTION", "RETURN", "BREAK", "GOTO", "REVERT", "BROWSE", "GRANT", "REVOKE", "BULK", "GROUP", "RIGHT", "BY", "HAVING", "ROLLBACK", "CASCADE", "HOLDLOCK", "ROWCOUNT", 615 "CASE", "IDENTITY", "ROWGUIDCOL", "CHECK", "IDENTITY_INSERT", "RULE", "CHECKPOINT", "IDENTITYCOL", "SAVE", "CLOSE", "IF", "SCHEMA", "CLUSTERED", "IN", 616 "SECURITYAUDIT", "COALESCE", "INDEX", "SELECT", "COLLATE", "INNER", "SEMANTICKEYPHRASETABLE", "COLUMN", "INSERT", "SEMANTICSIMILARITYDETAILSTABLE", "COMMIT", 617 "INTERSECT", "SEMANTICSIMILARITYTABLE", "COMPUTE", "INTO", "SESSION_USER", "CONSTRAINT", "IS", "SET", "CONTAINS", "JOIN", "SETUSER", "CONTAINSTABLE", "KEY", 618 "SHUTDOWN", "CONTINUE", "KILL", "SOME", "CONVERT", "LEFT", "STATISTICS", "CREATE", "LIKE", "SYSTEM_USER", "CROSS", "LINENO", "TABLE", "CURRENT", "LOAD", "TABLESAMPLE", 619 "CURRENT_DATE", "MERGE", "TEXTSIZE", "CURRENT_TIME", "NATIONAL", "THEN", "CURRENT_TIMESTAMP", "NOCHECK", "TO", "CURRENT_USER", "NONCLUSTERED", "TOP", "CURSOR", 620 "NOT", "TRAN", "DATABASE", "NULL", "TRANSACTION", "DBCC", "NULLIF", "TRIGGER", "DEALLOCATE", "OF", "TRUNCATE", "DECLARE", "OFF", "TRY_CONVERT", "DEFAULT", "OFFSETS", 621 "TSEQUAL", "DELETE", "ON", "UNION", "DENY", "OPEN", "UNIQUE", "DESC", "OPENDATASOURCE", "UNPIVOT", "DISK", "OPENQUERY", "UPDATE", "DISTINCT", "OPENROWSET", 622 "UPDATETEXT", "DISTRIBUTED", "OPENXML", "USE", "DOUBLE", "OPTION", "USER", "DROP", "OR", "VALUES", "DUMP", "ORDER", "VARYING", "ELSE", "OUTER", "VIEW", "END", 623 "OVER", "WAITFOR", "ERRLVL", "PERCENT", "WHEN", "ESCAPE", "PIVOT", "WHERE", "EXCEPT", "PLAN", "WHILE", "EXEC", "PRECISION", "WITH", "EXECUTE", "PRIMARY", 624 "WITHIN GROUP", "EXISTS", "PRINT", "WRITETEXT", "EXIT", "PROC", "LIMIT", "MODIFY", "COUNT", "REPLACE"]; 625 } else if (typ == "python") { 626 words = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "False", "finally", "for", "from", "global", "if", "import", 627 "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in", "abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", 628 "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr", 629 "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max", 630 "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "print", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", 631 "sorted", "staticmethod", "str", "sum", "super", "tuple", "True", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"]; 632 } 633 for (i = 0; i < words.length; i++) { 634 if (typ == "php" || typ == "sql") { 635 pos = txt.toLowerCase().indexOf(words[i].toLowerCase()); 636 } else { 637 pos = txt.indexOf(words[i]); 638 } 639 if (pos > -1) { 640 patt = /\W/g; 641 if (txt.substr(pos + words[i].length, 1).match(patt) && txt.substr(pos - 1, 1).match(patt)) { 642 if (pos > -1 && (rpos == -1 || pos < rpos)) { 643 rpos = pos; 644 rpos2 = rpos + words[i].length; 645 } 646 } 647 } 648 } 649 return [rpos, rpos2, func]; 650 } 651 function getPos(txt, start, end, func) { 652 var s, e; 653 s = txt.search(start); 654 e = txt.indexOf(end, s + (end.length)); 655 if (e == -1) { e = txt.length; } 656 return [s, e + (end.length), func]; 657 } 658 function getNumPos(txt, func) { 659 var arr = ["<br>", " ", ";", "(", "+", ")", "[", "]", ",", "&", ":", "{", "}", "/", "-", "*", "|", "%", "="], i, j, c, startpos = 0, endpos, word; 660 for (i = 0; i < txt.length; i++) { 661 for (j = 0; j < arr.length; j++) { 662 c = txt.substr(i, arr[j].length); 663 if (c == arr[j]) { 664 if (c == "-" && (txt.substr(i - 1, 1) == "e" || txt.substr(i - 1, 1) == "E")) { 665 continue; 666 } 667 endpos = i; 668 if (startpos < endpos) { 669 word = txt.substring(startpos, endpos); 670 //console.log(word + " " + isNaN(word)); 671 if (!isNaN(word)) { return [startpos, endpos, func]; } 672 } 673 i += arr[j].length; 674 startpos = i; 675 i -= 1; 676 break; 677 } 678 } 679 } 680 return [-1, -1, func]; 681 } 682}; 683 684var w3CodeColorInitialized = false;
685 686function w3CodeColor() { 687 if (w3CodeColorInitialized) { return; } 688 w3CodeColorInitialized = true; 689 690 var x, i, j, k, l, modes = ["html", "js", "java", "css", "sql", "python"]; 691 if (!document.getElementsByClassName) { return; } 692 k = modes.length; 693 for (j = 0; j < k; j++) { 694 x = document.getElementsByClassName(modes[j] + "High"); 695 l = x.length; 696 for (i = 0; i < l; i++) { 697 // if (modes[j] == "react") { 698 // codemirrorize(x[i]); 699 // } else { 700 x[i].innerHTML = _w3CodeColorize(x[i].innerHTML + " ", modes[j]); 701 // } 702 } 703 } 704};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.