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