]> jfr.im git - irc/quakenet/qwebirc.git/blame - js/ui/colour.js
Use compiled versions.
[irc/quakenet/qwebirc.git] / js / ui / colour.js
CommitLineData
da4b5be7 1function Colourise(line, entity) {\r
c3efd9cc
CP
2 var fg;\r
3 var bg;\r
4 var underline = false;\r
5 var bold = false;\r
6\r
7 var out = [];\r
8 var xline = line.split("");\r
9 var element = document.createElement("span");\r
10\r
bed65087
CP
11 entity.addClass("colourline");\r
12 \r
da4b5be7 13 function isNum(x) {\r
c3efd9cc
CP
14 return x >= '0' && x <= '9';\r
15 }\r
16\r
da4b5be7
CP
17 function parseColours(xline, i) {\r
18 if(!isNum(xline[i + 1])) {\r
c3efd9cc
CP
19 fg = undefined;\r
20 bg = undefined;\r
21 return i;\r
22 }\r
23 i++;\r
da4b5be7 24 if(isNum(xline[i + 1])) {\r
e2757a91 25 fg = parseInt(xline[i] + xline[i + 1]);\r
c3efd9cc
CP
26 i++;\r
27 } else {\r
e2757a91 28 fg = parseInt(xline[i]);\r
c3efd9cc
CP
29 }\r
30 if(xline[i + 1] != ",")\r
31 return i;\r
da4b5be7 32 if(!isNum(xline[i + 2]))\r
c3efd9cc
CP
33 return i;\r
34 i+=2;\r
35 \r
da4b5be7 36 if(isNum(xline[i + 1])) {\r
e2757a91 37 bg = parseInt(xline[i] + xline[i + 1]);\r
c3efd9cc
CP
38 i++;\r
39 } else {\r
e2757a91 40 bg = parseInt(xline[i]);\r
c3efd9cc
CP
41 }\r
42 return i;\r
43 }\r
44\r
da4b5be7 45 function emitEndToken() {\r
c3efd9cc
CP
46 if(out.length > 0) {\r
47 element.appendChild(document.createTextNode(out.join("")));\r
48 entity.appendChild(element);\r
49 out = [];\r
50 }\r
51 element = document.createElement("span");\r
52 } \r
da4b5be7 53 function emitStartToken() {\r
c3efd9cc 54 classes = []\r
f2e09167 55 if(fg != undefined)\r
c3efd9cc 56 classes.push("Xc" + fg);\r
f2e09167 57 if(bg != undefined)\r
c3efd9cc
CP
58 classes.push("Xbc" + bg);\r
59 if(bold)\r
60 classes.push("Xb");\r
61 if(underline)\r
62 classes.push("Xu");\r
63 element.className = classes.join(" ");\r
64 }\r
65 \r
66 for(i=0;i<xline.length;i++) {\r
67 var lc = xline[i];\r
68 if(lc == "\x02") {\r
da4b5be7 69 emitEndToken();\r
c3efd9cc
CP
70\r
71 bold = !bold;\r
da4b5be7
CP
72 \r
73 emitStartToken();\r
c3efd9cc 74 } else if(lc == "\x1F") {\r
da4b5be7 75 emitEndToken();\r
c3efd9cc
CP
76\r
77 underline = !underline;\r
da4b5be7
CP
78 \r
79 emitStartToken();\r
c3efd9cc 80 } else if(lc == "\x0F") {\r
da4b5be7
CP
81 emitEndToken();\r
82 \r
c3efd9cc
CP
83 fg = undefined;\r
84 bg = undefined;\r
85 underline = false;\r
86 bold = false;\r
87 } else if(lc == "\x03") {\r
da4b5be7 88 emitEndToken();\r
c3efd9cc 89 \r
da4b5be7 90 i = parseColours(xline, i);\r
e2757a91
CP
91 if(bg > 15)\r
92 bg = undefined;\r
93 if(fg > 15)\r
94 fg = undefined;\r
da4b5be7
CP
95 \r
96 emitStartToken();\r
c3efd9cc
CP
97 } else {\r
98 out.push(lc);\r
99 }\r
100 }\r
101 \r
da4b5be7 102 emitEndToken();\r
c3efd9cc 103}