From 1d82d8219b4018cfe02ec871a900059470666a35 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 10 Jul 2020 15:26:16 -0400 Subject: Add IRC colors and implement nick coloring --- Makefile | 4 +- color.css | 304 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ html.c | 23 ++++- 3 files changed, 328 insertions(+), 3 deletions(-) create mode 100644 color.css diff --git a/Makefile b/Makefile index 56f5f15..cd9f014 100644 --- a/Makefile +++ b/Makefile @@ -26,8 +26,8 @@ ${OBJS}: server.h server.o: default.css.h -default.css.h: default.css - file2c < default.css > $@ +default.css.h: default.css color.css + cat default.css color.css | file2c > $@ test: .test diff --git a/color.css b/color.css new file mode 100644 index 0000000..f51630c --- /dev/null +++ b/color.css @@ -0,0 +1,304 @@ +:root { + --irc00: #ffffff; + --irc01: #000000; + --irc02: #00007f; + --irc03: #009300; + --irc04: #ff0000; + --irc05: #7f0000; + --irc06: #9c009c; + --irc07: #fc7f00; + --irc08: #ffff00; + --irc09: #00fc00; + --irc10: #009393; + --irc11: #00ffff; + --irc12: #0000fc; + --irc13: #ff00ff; + --irc14: #7f7f7f; + --irc15: #d2d2d2; + --irc16: #470000; + --irc17: #472100; + --irc18: #474700; + --irc19: #324700; + --irc20: #004700; + --irc21: #00472c; + --irc22: #004747; + --irc23: #002747; + --irc24: #000047; + --irc25: #2e0047; + --irc26: #470047; + --irc27: #47002a; + --irc28: #740000; + --irc29: #743a00; + --irc30: #747400; + --irc31: #517400; + --irc32: #007400; + --irc33: #007449; + --irc34: #007474; + --irc35: #004074; + --irc36: #000074; + --irc37: #4b0074; + --irc38: #740074; + --irc39: #740045; + --irc40: #b50000; + --irc41: #b56300; + --irc42: #b5b500; + --irc43: #7db500; + --irc44: #00b500; + --irc45: #00b571; + --irc46: #00b5b5; + --irc47: #0063b5; + --irc48: #0000b5; + --irc49: #7500b5; + --irc50: #b500b5; + --irc51: #b5006b; + --irc52: #ff0000; + --irc53: #ff8c00; + --irc54: #ffff00; + --irc55: #b2ff00; + --irc56: #00ff00; + --irc57: #00ffa0; + --irc58: #00ffff; + --irc59: #008cff; + --irc60: #0000ff; + --irc61: #a500ff; + --irc62: #ff00ff; + --irc63: #ff0098; + --irc64: #ff5959; + --irc65: #ffb459; + --irc66: #ffff71; + --irc67: #cfff60; + --irc68: #6fff6f; + --irc69: #65ffc9; + --irc70: #6dffff; + --irc71: #59b4ff; + --irc72: #5959ff; + --irc73: #c459ff; + --irc74: #ff66ff; + --irc75: #ff59bc; + --irc76: #ff9c9c; + --irc77: #ffd39c; + --irc78: #ffff9c; + --irc79: #e2ff9c; + --irc80: #9cff9c; + --irc81: #9cffdb; + --irc82: #9cffff; + --irc83: #9cd3ff; + --irc84: #9c9cff; + --irc85: #dc9cff; + --irc86: #ff9cff; + --irc87: #ff94d3; + --irc88: #000000; + --irc89: #131313; + --irc90: #282828; + --irc91: #363636; + --irc92: #4d4d4d; + --irc93: #656565; + --irc94: #818181; + --irc95: #9f9f9f; + --irc96: #bcbcbc; + --irc97: #e2e2e2; + --irc98: #ffffff; + --irc99: inherit; +} + +.fg00 { color: var(--irc00); } +.fg01 { color: var(--irc01); } +.fg02 { color: var(--irc02); } +.fg03 { color: var(--irc03); } +.fg04 { color: var(--irc04); } +.fg05 { color: var(--irc05); } +.fg06 { color: var(--irc06); } +.fg07 { color: var(--irc07); } +.fg08 { color: var(--irc08); } +.fg09 { color: var(--irc09); } +.fg10 { color: var(--irc10); } +.fg11 { color: var(--irc11); } +.fg12 { color: var(--irc12); } +.fg13 { color: var(--irc13); } +.fg14 { color: var(--irc14); } +.fg15 { color: var(--irc15); } +.fg16 { color: var(--irc16); } +.fg17 { color: var(--irc17); } +.fg18 { color: var(--irc18); } +.fg19 { color: var(--irc19); } +.fg20 { color: var(--irc20); } +.fg21 { color: var(--irc21); } +.fg22 { color: var(--irc22); } +.fg23 { color: var(--irc23); } +.fg24 { color: var(--irc24); } +.fg25 { color: var(--irc25); } +.fg26 { color: var(--irc26); } +.fg27 { color: var(--irc27); } +.fg28 { color: var(--irc28); } +.fg29 { color: var(--irc29); } +.fg30 { color: var(--irc30); } +.fg31 { color: var(--irc31); } +.fg32 { color: var(--irc32); } +.fg33 { color: var(--irc33); } +.fg34 { color: var(--irc34); } +.fg35 { color: var(--irc35); } +.fg36 { color: var(--irc36); } +.fg37 { color: var(--irc37); } +.fg38 { color: var(--irc38); } +.fg39 { color: var(--irc39); } +.fg40 { color: var(--irc40); } +.fg41 { color: var(--irc41); } +.fg42 { color: var(--irc42); } +.fg43 { color: var(--irc43); } +.fg44 { color: var(--irc44); } +.fg45 { color: var(--irc45); } +.fg46 { color: var(--irc46); } +.fg47 { color: var(--irc47); } +.fg48 { color: var(--irc48); } +.fg49 { color: var(--irc49); } +.fg50 { color: var(--irc50); } +.fg51 { color: var(--irc51); } +.fg52 { color: var(--irc52); } +.fg53 { color: var(--irc53); } +.fg54 { color: var(--irc54); } +.fg55 { color: var(--irc55); } +.fg56 { color: var(--irc56); } +.fg57 { color: var(--irc57); } +.fg58 { color: var(--irc58); } +.fg59 { color: var(--irc59); } +.fg60 { color: var(--irc60); } +.fg61 { color: var(--irc61); } +.fg62 { color: var(--irc62); } +.fg63 { color: var(--irc63); } +.fg64 { color: var(--irc64); } +.fg65 { color: var(--irc65); } +.fg66 { color: var(--irc66); } +.fg67 { color: var(--irc67); } +.fg68 { color: var(--irc68); } +.fg69 { color: var(--irc69); } +.fg70 { color: var(--irc70); } +.fg71 { color: var(--irc71); } +.fg72 { color: var(--irc72); } +.fg73 { color: var(--irc73); } +.fg74 { color: var(--irc74); } +.fg75 { color: var(--irc75); } +.fg76 { color: var(--irc76); } +.fg77 { color: var(--irc77); } +.fg78 { color: var(--irc78); } +.fg79 { color: var(--irc79); } +.fg80 { color: var(--irc80); } +.fg81 { color: var(--irc81); } +.fg82 { color: var(--irc82); } +.fg83 { color: var(--irc83); } +.fg84 { color: var(--irc84); } +.fg85 { color: var(--irc85); } +.fg86 { color: var(--irc86); } +.fg87 { color: var(--irc87); } +.fg88 { color: var(--irc88); } +.fg89 { color: var(--irc89); } +.fg90 { color: var(--irc90); } +.fg91 { color: var(--irc91); } +.fg92 { color: var(--irc92); } +.fg93 { color: var(--irc93); } +.fg94 { color: var(--irc94); } +.fg95 { color: var(--irc95); } +.fg96 { color: var(--irc96); } +.fg97 { color: var(--irc97); } +.fg98 { color: var(--irc98); } +.fg99 { color: var(--irc99); } + +.bg00 { background-color: var(--irc00); } +.bg01 { background-color: var(--irc01); } +.bg02 { background-color: var(--irc02); } +.bg03 { background-color: var(--irc03); } +.bg04 { background-color: var(--irc04); } +.bg05 { background-color: var(--irc05); } +.bg06 { background-color: var(--irc06); } +.bg07 { background-color: var(--irc07); } +.bg08 { background-color: var(--irc08); } +.bg09 { background-color: var(--irc09); } +.bg10 { background-color: var(--irc10); } +.bg11 { background-color: var(--irc11); } +.bg12 { background-color: var(--irc12); } +.bg13 { background-color: var(--irc13); } +.bg14 { background-color: var(--irc14); } +.bg15 { background-color: var(--irc15); } +.bg16 { background-color: var(--irc16); } +.bg17 { background-color: var(--irc17); } +.bg18 { background-color: var(--irc18); } +.bg19 { background-color: var(--irc19); } +.bg20 { background-color: var(--irc20); } +.bg21 { background-color: var(--irc21); } +.bg22 { background-color: var(--irc22); } +.bg23 { background-color: var(--irc23); } +.bg24 { background-color: var(--irc24); } +.bg25 { background-color: var(--irc25); } +.bg26 { background-color: var(--irc26); } +.bg27 { background-color: var(--irc27); } +.bg28 { background-color: var(--irc28); } +.bg29 { background-color: var(--irc29); } +.bg30 { background-color: var(--irc30); } +.bg31 { background-color: var(--irc31); } +.bg32 { background-color: var(--irc32); } +.bg33 { background-color: var(--irc33); } +.bg34 { background-color: var(--irc34); } +.bg35 { background-color: var(--irc35); } +.bg36 { background-color: var(--irc36); } +.bg37 { background-color: var(--irc37); } +.bg38 { background-color: var(--irc38); } +.bg39 { background-color: var(--irc39); } +.bg40 { background-color: var(--irc40); } +.bg41 { background-color: var(--irc41); } +.bg42 { background-color: var(--irc42); } +.bg43 { background-color: var(--irc43); } +.bg44 { background-color: var(--irc44); } +.bg45 { background-color: var(--irc45); } +.bg46 { background-color: var(--irc46); } +.bg47 { background-color: var(--irc47); } +.bg48 { background-color: var(--irc48); } +.bg49 { background-color: var(--irc49); } +.bg50 { background-color: var(--irc50); } +.bg51 { background-color: var(--irc51); } +.bg52 { background-color: var(--irc52); } +.bg53 { background-color: var(--irc53); } +.bg54 { background-color: var(--irc54); } +.bg55 { background-color: var(--irc55); } +.bg56 { background-color: var(--irc56); } +.bg57 { background-color: var(--irc57); } +.bg58 { background-color: var(--irc58); } +.bg59 { background-color: var(--irc59); } +.bg60 { background-color: var(--irc60); } +.bg61 { background-color: var(--irc61); } +.bg62 { background-color: var(--irc62); } +.bg63 { background-color: var(--irc63); } +.bg64 { background-color: var(--irc64); } +.bg65 { background-color: var(--irc65); } +.bg66 { background-color: var(--irc66); } +.bg67 { background-color: var(--irc67); } +.bg68 { background-color: var(--irc68); } +.bg69 { background-color: var(--irc69); } +.bg70 { background-color: var(--irc70); } +.bg71 { background-color: var(--irc71); } +.bg72 { background-color: var(--irc72); } +.bg73 { background-color: var(--irc73); } +.bg74 { background-color: var(--irc74); } +.bg75 { background-color: var(--irc75); } +.bg76 { background-color: var(--irc76); } +.bg77 { background-color: var(--irc77); } +.bg78 { background-color: var(--irc78); } +.bg79 { background-color: var(--irc79); } +.bg80 { background-color: var(--irc80); } +.bg81 { background-color: var(--irc81); } +.bg82 { background-color: var(--irc82); } +.bg83 { background-color: var(--irc83); } +.bg84 { background-color: var(--irc84); } +.bg85 { background-color: var(--irc85); } +.bg86 { background-color: var(--irc86); } +.bg87 { background-color: var(--irc87); } +.bg88 { background-color: var(--irc88); } +.bg89 { background-color: var(--irc89); } +.bg90 { background-color: var(--irc90); } +.bg91 { background-color: var(--irc91); } +.bg92 { background-color: var(--irc92); } +.bg93 { background-color: var(--irc93); } +.bg94 { background-color: var(--irc94); } +.bg95 { background-color: var(--irc95); } +.bg96 { background-color: var(--irc96); } +.bg97 { background-color: var(--irc97); } +.bg98 { background-color: var(--irc98); } +.bg99 { background-color: var(--irc99); } diff --git a/html.c b/html.c index 9f929e6..c1e4b15 100644 --- a/html.c +++ b/html.c @@ -237,15 +237,36 @@ static enum kcgi_err eventContext(struct khtmlreq *html, struct Event event) { return error; } +static int hash(const char *str) { + if (*str == '~') str++; + uint32_t hash = 0; + for (; *str; ++str) { + hash = (hash << 5) | (hash >> 27); + hash ^= *str; + hash *= 0x27220A95; + } + return 2 + hash % 74; +} + static enum kcgi_err eventNick(struct khtmlreq *html, struct Event event) { + char color[sizeof("fg99")]; + snprintf(color, sizeof(color), "fg%02d", hash(event.user)); + char *mask = NULL; asprintf(&mask, "%s!%s@%s", event.nick, event.user, event.host); if (!mask) err(EX_OSERR, "asprintf"); + enum kcgi_err error = 0 || khtml_attr(html, KELEM_TD, KATTR_CLASS, "nick", KATTR__MAX) - || khtml_attr(html, KELEM_SPAN, KATTR_TITLE, mask, KATTR__MAX) + || khtml_attr( + html, KELEM_SPAN, + KATTR_CLASS, color, + KATTR_TITLE, mask, + KATTR__MAX + ) || khtml_puts(html, event.nick) || khtml_closeelem(html, 2); + free(mask); return error; } -- cgit 1.4.1