codekingpro/portable-devtools
114k
1# Low-color themes should ONLY use the standard foreground and background2# colours listed here:3#4# http://urwid.org/manual/displayattributes.html5#6from __future__ import annotations7 8from collections.abc import Mapping9from collections.abc import Sequence10 11 12class Palette:13 _fields = [14 "background",15 "title",16 # Status bar & heading17 "heading",18 "heading_key",19 "heading_inactive",20 # Help21 "key",22 "head",23 "text",24 # Options25 "option_selected",26 "option_active",27 "option_active_selected",28 "option_selected_key",29 # List and Connections30 "method_get",31 "method_post",32 "method_delete",33 "method_other",34 "method_head",35 "method_put",36 "method_http2_push",37 "scheme_http",38 "scheme_https",39 "scheme_ws",40 "scheme_wss",41 "scheme_tcp",42 "scheme_udp",43 "scheme_dns",44 "scheme_quic",45 "scheme_other",46 "url_punctuation",47 "url_domain",48 "url_filename",49 "url_extension",50 "url_query_key",51 "url_query_value",52 "content_none",53 "content_text",54 "content_script",55 "content_media",56 "content_data",57 "content_raw",58 "content_other",59 "focus",60 "code_200",61 "code_300",62 "code_400",63 "code_500",64 "code_other",65 "error",66 "warn",67 "alert",68 "header",69 "highlight",70 "intercept",71 "replay",72 "mark",73 # Contentview Syntax Highlighting74 "name",75 "string",76 "number",77 "boolean",78 "comment",79 "error",80 # TCP flow details81 "from_client",82 "to_client",83 # Grid Editor84 "focusfield",85 "focusfield_error",86 "field_error",87 "editfield",88 # Commander89 "commander_command",90 "commander_invalid",91 "commander_hint",92 ]93 _fields.extend(["gradient_%02d" % i for i in range(100)])94 high: Mapping[str, Sequence[str]] | None = None95 low: Mapping[str, Sequence[str]]96 97 def palette(self, transparent: bool):98 lst: list[Sequence[str | None]] = []99 highback, lowback = None, None100 if not transparent:101 if self.high and self.high.get("background"):102 highback = self.high["background"][1]103 lowback = self.low["background"][1]104 105 for i in self._fields:106 if transparent and i == "background":107 lst.append(["background", "default", "default"])108 else:109 v: list[str | None] = [i]110 low = list(self.low[i])111 if lowback and low[1] == "default":112 low[1] = lowback113 v.extend(low)114 if self.high and i in self.high:115 v.append(None)116 high: list[str | None] = list(self.high[i])117 if highback and high[1] == "default":118 high[1] = highback119 v.extend(high)120 elif highback and self.low[i][1] == "default":121 high = [None, low[0], highback]122 v.extend(high)123 lst.append(tuple(v))124 return lst125 126 127def gen_gradient(palette, cols):128 for i in range(100):129 palette["gradient_%02d" % i] = (cols[i * len(cols) // 100], "default")130 131 132def gen_rgb_gradient(palette, cols):133 parts = len(cols) - 1134 for i in range(100):135 p = i / 100136 idx = int(p * parts)137 t0 = cols[idx]138 t1 = cols[idx + 1]139 pp = p * parts % 1140 t = (141 round(t0[0] + (t1[0] - t0[0]) * pp),142 round(t0[1] + (t1[1] - t0[1]) * pp),143 round(t0[2] + (t1[2] - t0[2]) * pp),144 )145 palette["gradient_%02d" % i] = ("#%x%x%x" % t, "default")146 147 148class LowDark(Palette):149 """150 Low-color dark background151 """152 153 low = dict(154 background=("white", "black"),155 title=("white,bold", "default"),156 # Status bar & heading157 heading=("white", "dark blue"),158 heading_key=("light cyan", "dark blue"),159 heading_inactive=("dark gray", "light gray"),160 # Help161 key=("light cyan", "default"),162 head=("white,bold", "default"),163 text=("light gray", "default"),164 # Options165 option_selected=("black", "light gray"),166 option_selected_key=("light cyan", "light gray"),167 option_active=("light red", "default"),168 option_active_selected=("light red", "light gray"),169 # List and Connections170 method_get=("light green", "default"),171 method_post=("brown", "default"),172 method_delete=("light red", "default"),173 method_head=("dark cyan", "default"),174 method_put=("dark red", "default"),175 method_other=("dark magenta", "default"),176 method_http2_push=("dark gray", "default"),177 scheme_http=("dark cyan", "default"),178 scheme_https=("dark green", "default"),179 scheme_ws=("brown", "default"),180 scheme_wss=("dark magenta", "default"),181 scheme_tcp=("dark magenta", "default"),182 scheme_udp=("dark magenta", "default"),183 scheme_dns=("dark blue", "default"),184 scheme_quic=("brown", "default"),185 scheme_other=("dark magenta", "default"),186 url_punctuation=("light gray", "default"),187 url_domain=("white", "default"),188 url_filename=("dark cyan", "default"),189 url_extension=("light gray", "default"),190 url_query_key=("white", "default"),191 url_query_value=("light gray", "default"),192 content_none=("dark gray", "default"),193 content_text=("light gray", "default"),194 content_script=("dark green", "default"),195 content_media=("light blue", "default"),196 content_data=("brown", "default"),197 content_raw=("dark red", "default"),198 content_other=("dark magenta", "default"),199 focus=("yellow", "default"),200 code_200=("dark green", "default"),201 code_300=("light blue", "default"),202 code_400=("light red", "default"),203 code_500=("light red", "default"),204 code_other=("dark red", "default"),205 alert=("light magenta", "default"),206 warn=("brown", "default"),207 error=("light red", "default"),208 header=("dark cyan", "default"),209 highlight=("white,bold", "default"),210 intercept=("brown", "default"),211 replay=("light green", "default"),212 mark=("light red", "default"),213 # Contentview Syntax Highlighting214 name=("dark green", "default"),215 string=("dark blue", "default"),216 number=("light magenta", "default"),217 boolean=("dark magenta", "default"),218 comment=("dark gray", "default"),219 # TCP flow details220 from_client=("light blue", "default"),221 to_client=("light red", "default"),222 # Grid Editor223 focusfield=("black", "light gray"),224 focusfield_error=("dark red", "light gray"),225 field_error=("dark red", "default"),226 editfield=("white", "default"),227 commander_command=("white,bold", "default"),228 commander_invalid=("light red", "default"),229 commander_hint=("dark gray", "default"),230 )231 gen_gradient(232 low,233 ["light red", "yellow", "light green", "dark green", "dark cyan", "dark blue"],234 )235 236 237class Dark(LowDark):238 high = dict(239 heading_inactive=("g58", "g11"),240 intercept=("#f60", "default"),241 option_selected=("g85", "g45"),242 option_selected_key=("light cyan", "g50"),243 option_active_selected=("light red", "g50"),244 )245 246 247class LowLight(Palette):248 """249 Low-color light background250 """251 252 low = dict(253 background=("black", "white"),254 title=("dark magenta", "default"),255 # Status bar & heading256 heading=("white", "black"),257 heading_key=("dark blue", "black"),258 heading_inactive=("black", "light gray"),259 # Help260 key=("dark blue", "default"),261 head=("black", "default"),262 text=("dark gray", "default"),263 # Options264 option_selected=("black", "light gray"),265 option_selected_key=("dark blue", "light gray"),266 option_active=("light red", "default"),267 option_active_selected=("light red", "light gray"),268 # List and Connections269 method_get=("dark green", "default"),270 method_post=("brown", "default"),271 method_head=("dark cyan", "default"),272 method_put=("light red", "default"),273 method_delete=("dark red", "default"),274 method_other=("light magenta", "default"),275 method_http2_push=("light gray", "default"),276 scheme_http=("dark cyan", "default"),277 scheme_https=("light green", "default"),278 scheme_ws=("brown", "default"),279 scheme_wss=("light magenta", "default"),280 scheme_tcp=("light magenta", "default"),281 scheme_udp=("light magenta", "default"),282 scheme_dns=("light blue", "default"),283 scheme_quic=("brown", "default"),284 scheme_other=("light magenta", "default"),285 url_punctuation=("dark gray", "default"),286 url_domain=("dark gray", "default"),287 url_filename=("black", "default"),288 url_extension=("dark gray", "default"),289 url_query_key=("light blue", "default"),290 url_query_value=("dark blue", "default"),291 content_none=("black", "default"),292 content_text=("dark gray", "default"),293 content_script=("light green", "default"),294 content_media=("light blue", "default"),295 content_data=("brown", "default"),296 content_raw=("light red", "default"),297 content_other=("light magenta", "default"),298 focus=("black", "default"),299 code_200=("dark green", "default"),300 code_300=("light blue", "default"),301 code_400=("dark red", "default"),302 code_500=("dark red", "default"),303 code_other=("light red", "default"),304 error=("light red", "default"),305 warn=("brown", "default"),306 alert=("light magenta", "default"),307 header=("dark blue", "default"),308 highlight=("black,bold", "default"),309 intercept=("brown", "default"),310 replay=("dark green", "default"),311 mark=("dark red", "default"),312 # Contentview Syntax Highlighting313 name=("dark green", "default"),314 string=("dark blue", "default"),315 number=("light magenta", "default"),316 boolean=("dark magenta", "default"),317 comment=("dark gray", "default"),318 # TCP flow details319 from_client=("dark blue", "default"),320 to_client=("dark red", "default"),321 # Grid Editor322 focusfield=("black", "light gray"),323 focusfield_error=("dark red", "light gray"),324 field_error=("dark red", "black"),325 editfield=("black", "default"),326 commander_command=("dark magenta", "default"),327 commander_invalid=("light red", "default"),328 commander_hint=("light gray", "default"),329 )330 gen_gradient(331 low,332 ["light red", "yellow", "light green", "dark green", "dark cyan", "dark blue"],333 )334 335 336class Light(LowLight):337 high = dict(338 background=("black", "g100"),339 heading=("g99", "#08f"),340 heading_key=("#0ff,bold", "#08f"),341 heading_inactive=("g35", "g85"),342 replay=("#0a0,bold", "default"),343 option_selected=("black", "g85"),344 option_selected_key=("dark blue", "g85"),345 option_active_selected=("light red", "g85"),346 )347 348 349# Solarized palette in Urwid-style terminal high-colour offsets350# See: http://ethanschoonover.com/solarized351sol_base03 = "h234"352sol_base02 = "h235"353sol_base01 = "h240"354sol_base00 = "h241"355sol_base0 = "h244"356sol_base1 = "h245"357sol_base2 = "h254"358sol_base3 = "h230"359sol_yellow = "h136"360sol_orange = "h166"361sol_red = "h160"362sol_magenta = "h125"363sol_violet = "h61"364sol_blue = "h33"365sol_cyan = "h37"366sol_green = "h64"367 368 369class SolarizedLight(LowLight):370 high = dict(371 background=(sol_base00, sol_base3),372 title=(sol_cyan, "default"),373 text=(sol_base00, "default"),374 # Status bar & heading375 heading=(sol_base2, sol_base02),376 heading_key=(sol_blue, sol_base03),377 heading_inactive=(sol_base03, sol_base1),378 # Help379 key=(380 sol_blue,381 "default",382 ),383 head=(sol_base00, "default"),384 # Options385 option_selected=(sol_base03, sol_base2),386 option_selected_key=(sol_blue, sol_base2),387 option_active=(sol_orange, "default"),388 option_active_selected=(sol_orange, sol_base2),389 # List and Connections390 method_get=(sol_green, "default"),391 method_post=(sol_orange, "default"),392 method_head=(sol_cyan, "default"),393 method_put=(sol_red, "default"),394 method_delete=(sol_red, "default"),395 method_other=(sol_magenta, "default"),396 method_http2_push=("light gray", "default"),397 scheme_http=(sol_cyan, "default"),398 scheme_https=("light green", "default"),399 scheme_ws=(sol_orange, "default"),400 scheme_wss=("light magenta", "default"),401 scheme_tcp=("light magenta", "default"),402 scheme_udp=("light magenta", "default"),403 scheme_dns=("light blue", "default"),404 scheme_quic=(sol_orange, "default"),405 scheme_other=("light magenta", "default"),406 url_punctuation=("dark gray", "default"),407 url_domain=("dark gray", "default"),408 url_filename=("black", "default"),409 url_extension=("dark gray", "default"),410 url_query_key=(sol_blue, "default"),411 url_query_value=("dark blue", "default"),412 focus=(sol_base01, "default"),413 code_200=(sol_green, "default"),414 code_300=(sol_blue, "default"),415 code_400=(416 sol_orange,417 "default",418 ),419 code_500=(sol_red, "default"),420 code_other=(sol_magenta, "default"),421 error=(sol_red, "default"),422 warn=(sol_orange, "default"),423 alert=(sol_magenta, "default"),424 header=(sol_blue, "default"),425 highlight=(sol_base01, "default"),426 intercept=(427 sol_red,428 "default",429 ),430 replay=(431 sol_green,432 "default",433 ),434 mark=(sol_base01, "default"),435 # Contentview Syntax Highlighting436 name=(sol_green, "default"),437 string=(sol_cyan, "default"),438 number=(sol_blue, "default"),439 boolean=(sol_magenta, "default"),440 comment=(sol_base1, "default"),441 # TCP flow details442 from_client=(sol_blue, "default"),443 to_client=(sol_red, "default"),444 # Grid Editor445 focusfield=(sol_base00, sol_base2),446 focusfield_error=(sol_red, sol_base2),447 field_error=(sol_red, "default"),448 editfield=(sol_base01, "default"),449 commander_command=(sol_cyan, "default"),450 commander_invalid=(sol_orange, "default"),451 commander_hint=(sol_base1, "default"),452 )453 454 455class SolarizedDark(LowDark):456 high = dict(457 background=(sol_base2, sol_base03),458 title=(sol_blue, "default"),459 text=(sol_base1, "default"),460 # Status bar & heading461 heading=(sol_base2, sol_base01),462 heading_key=(sol_blue + ",bold", sol_base01),463 heading_inactive=(sol_base1, sol_base02),464 # Help465 key=(466 sol_blue,467 "default",468 ),469 head=(sol_base2, "default"),470 # Options471 option_selected=(sol_base03, sol_base00),472 option_selected_key=(sol_blue, sol_base00),473 option_active=(sol_orange, "default"),474 option_active_selected=(sol_orange, sol_base00),475 # List and Connections476 focus=(sol_base1, "default"),477 method_get=(sol_green, "default"),478 method_post=(sol_orange, "default"),479 method_delete=(sol_red, "default"),480 method_head=(sol_cyan, "default"),481 method_put=(sol_red, "default"),482 method_other=(sol_magenta, "default"),483 method_http2_push=(sol_base01, "default"),484 url_punctuation=("h242", "default"),485 url_domain=("h252", "default"),486 url_filename=("h132", "default"),487 url_extension=("h96", "default"),488 url_query_key=("h37", "default"),489 url_query_value=("h30", "default"),490 content_none=(sol_base01, "default"),491 content_text=(sol_base1, "default"),492 content_media=(sol_blue, "default"),493 code_200=(sol_green, "default"),494 code_300=(sol_blue, "default"),495 code_400=(496 sol_orange,497 "default",498 ),499 code_500=(sol_red, "default"),500 code_other=(sol_magenta, "default"),501 error=(sol_red, "default"),502 warn=(sol_orange, "default"),503 alert=(sol_magenta, "default"),504 header=(sol_blue, "default"),505 highlight=(sol_base01, "default"),506 intercept=(507 sol_red,508 "default",509 ),510 replay=(511 sol_green,512 "default",513 ),514 mark=(sol_base01, "default"),515 # Contentview Syntax Highlighting516 name=(sol_green, "default"),517 string=(sol_cyan, "default"),518 number=(sol_blue, "default"),519 boolean=(sol_magenta, "default"),520 comment=(sol_base00, "default"),521 # TCP flow details522 from_client=(sol_blue, "default"),523 to_client=(sol_red, "default"),524 # Grid Editor525 focusfield=(sol_base0, sol_base02),526 focusfield_error=(sol_red, sol_base02),527 field_error=(sol_red, "default"),528 editfield=(sol_base1, "default"),529 commander_command=(sol_blue, "default"),530 commander_invalid=(sol_orange, "default"),531 commander_hint=(sol_base00, "default"),532 )533 gen_rgb_gradient(534 high, [(15, 0, 0), (15, 15, 0), (0, 15, 0), (0, 15, 15), (0, 0, 15)]535 )536 537 538DEFAULT = "dark"539palettes = {540 "lowlight": LowLight(),541 "lowdark": LowDark(),542 "light": Light(),543 "dark": Dark(),544 "solarized_light": SolarizedLight(),545 "solarized_dark": SolarizedDark(),546}547 