PageSourceSearch

https://www.w3schools.com/lib/w3codecolor.js

js w3schools.com collected 2026-09-24 08:23:59 UTC 33,900 bytes, 704 lines download raw bytes

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("&gt;");
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 + ">&lt;</span>" + result.substring(4);
159    if (result.substr(result.length - 4, 4) == "&gt;") {
160      result = result.substring(0, result.length - 4) + "<span class='tagcolor' style=color:" + tagcolor + ">&gt;</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) == "&nbsp;") {
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) != "&nbsp;" && result.substr(result.length - 4, 4) != "&lt;" && result.substr(result.length - 4, 4) != "&gt;" && result.substr(result.length - 5, 5) != "&amp;") {
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 + ">&lt;" + rest.substr(4, 4) + "</span>" + rest.substring(8);
528    if (rest.substr(rest.length - 5, 5) == "?&gt;") {
529      rest = rest.substring(0, rest.length - 5) + "<span class='phptagcolor' style=color:" + phptagcolor + ">?&gt;</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.