Files
baijiahao_data_crawl/venv/Lib/site-packages/mitmproxy/tools/console/palettes.py
“shengyudong” 322ac74336 2025-12-25 upload
2025-12-25 11:16:59 +08:00

547 lines
18 KiB
Python

# Low-color themes should ONLY use the standard foreground and background
# colours listed here:
#
# http://urwid.org/manual/displayattributes.html
#
from __future__ import annotations
from collections.abc import Mapping
from collections.abc import Sequence
class Palette:
_fields = [
"background",
"title",
# Status bar & heading
"heading",
"heading_key",
"heading_inactive",
# Help
"key",
"head",
"text",
# Options
"option_selected",
"option_active",
"option_active_selected",
"option_selected_key",
# List and Connections
"method_get",
"method_post",
"method_delete",
"method_other",
"method_head",
"method_put",
"method_http2_push",
"scheme_http",
"scheme_https",
"scheme_ws",
"scheme_wss",
"scheme_tcp",
"scheme_udp",
"scheme_dns",
"scheme_quic",
"scheme_other",
"url_punctuation",
"url_domain",
"url_filename",
"url_extension",
"url_query_key",
"url_query_value",
"content_none",
"content_text",
"content_script",
"content_media",
"content_data",
"content_raw",
"content_other",
"focus",
"code_200",
"code_300",
"code_400",
"code_500",
"code_other",
"error",
"warn",
"alert",
"header",
"highlight",
"intercept",
"replay",
"mark",
# Contentview Syntax Highlighting
"name",
"string",
"number",
"boolean",
"comment",
"error",
# TCP flow details
"from_client",
"to_client",
# Grid Editor
"focusfield",
"focusfield_error",
"field_error",
"editfield",
# Commander
"commander_command",
"commander_invalid",
"commander_hint",
]
_fields.extend(["gradient_%02d" % i for i in range(100)])
high: Mapping[str, Sequence[str]] | None = None
low: Mapping[str, Sequence[str]]
def palette(self, transparent: bool):
lst: list[Sequence[str | None]] = []
highback, lowback = None, None
if not transparent:
if self.high and self.high.get("background"):
highback = self.high["background"][1]
lowback = self.low["background"][1]
for i in self._fields:
if transparent and i == "background":
lst.append(["background", "default", "default"])
else:
v: list[str | None] = [i]
low = list(self.low[i])
if lowback and low[1] == "default":
low[1] = lowback
v.extend(low)
if self.high and i in self.high:
v.append(None)
high: list[str | None] = list(self.high[i])
if highback and high[1] == "default":
high[1] = highback
v.extend(high)
elif highback and self.low[i][1] == "default":
high = [None, low[0], highback]
v.extend(high)
lst.append(tuple(v))
return lst
def gen_gradient(palette, cols):
for i in range(100):
palette["gradient_%02d" % i] = (cols[i * len(cols) // 100], "default")
def gen_rgb_gradient(palette, cols):
parts = len(cols) - 1
for i in range(100):
p = i / 100
idx = int(p * parts)
t0 = cols[idx]
t1 = cols[idx + 1]
pp = p * parts % 1
t = (
round(t0[0] + (t1[0] - t0[0]) * pp),
round(t0[1] + (t1[1] - t0[1]) * pp),
round(t0[2] + (t1[2] - t0[2]) * pp),
)
palette["gradient_%02d" % i] = ("#%x%x%x" % t, "default")
class LowDark(Palette):
"""
Low-color dark background
"""
low = dict(
background=("white", "black"),
title=("white,bold", "default"),
# Status bar & heading
heading=("white", "dark blue"),
heading_key=("light cyan", "dark blue"),
heading_inactive=("dark gray", "light gray"),
# Help
key=("light cyan", "default"),
head=("white,bold", "default"),
text=("light gray", "default"),
# Options
option_selected=("black", "light gray"),
option_selected_key=("light cyan", "light gray"),
option_active=("light red", "default"),
option_active_selected=("light red", "light gray"),
# List and Connections
method_get=("light green", "default"),
method_post=("brown", "default"),
method_delete=("light red", "default"),
method_head=("dark cyan", "default"),
method_put=("dark red", "default"),
method_other=("dark magenta", "default"),
method_http2_push=("dark gray", "default"),
scheme_http=("dark cyan", "default"),
scheme_https=("dark green", "default"),
scheme_ws=("brown", "default"),
scheme_wss=("dark magenta", "default"),
scheme_tcp=("dark magenta", "default"),
scheme_udp=("dark magenta", "default"),
scheme_dns=("dark blue", "default"),
scheme_quic=("brown", "default"),
scheme_other=("dark magenta", "default"),
url_punctuation=("light gray", "default"),
url_domain=("white", "default"),
url_filename=("dark cyan", "default"),
url_extension=("light gray", "default"),
url_query_key=("white", "default"),
url_query_value=("light gray", "default"),
content_none=("dark gray", "default"),
content_text=("light gray", "default"),
content_script=("dark green", "default"),
content_media=("light blue", "default"),
content_data=("brown", "default"),
content_raw=("dark red", "default"),
content_other=("dark magenta", "default"),
focus=("yellow", "default"),
code_200=("dark green", "default"),
code_300=("light blue", "default"),
code_400=("light red", "default"),
code_500=("light red", "default"),
code_other=("dark red", "default"),
alert=("light magenta", "default"),
warn=("brown", "default"),
error=("light red", "default"),
header=("dark cyan", "default"),
highlight=("white,bold", "default"),
intercept=("brown", "default"),
replay=("light green", "default"),
mark=("light red", "default"),
# Contentview Syntax Highlighting
name=("dark green", "default"),
string=("dark blue", "default"),
number=("light magenta", "default"),
boolean=("dark magenta", "default"),
comment=("dark gray", "default"),
# TCP flow details
from_client=("light blue", "default"),
to_client=("light red", "default"),
# Grid Editor
focusfield=("black", "light gray"),
focusfield_error=("dark red", "light gray"),
field_error=("dark red", "default"),
editfield=("white", "default"),
commander_command=("white,bold", "default"),
commander_invalid=("light red", "default"),
commander_hint=("dark gray", "default"),
)
gen_gradient(
low,
["light red", "yellow", "light green", "dark green", "dark cyan", "dark blue"],
)
class Dark(LowDark):
high = dict(
heading_inactive=("g58", "g11"),
intercept=("#f60", "default"),
option_selected=("g85", "g45"),
option_selected_key=("light cyan", "g50"),
option_active_selected=("light red", "g50"),
)
class LowLight(Palette):
"""
Low-color light background
"""
low = dict(
background=("black", "white"),
title=("dark magenta", "default"),
# Status bar & heading
heading=("white", "black"),
heading_key=("dark blue", "black"),
heading_inactive=("black", "light gray"),
# Help
key=("dark blue", "default"),
head=("black", "default"),
text=("dark gray", "default"),
# Options
option_selected=("black", "light gray"),
option_selected_key=("dark blue", "light gray"),
option_active=("light red", "default"),
option_active_selected=("light red", "light gray"),
# List and Connections
method_get=("dark green", "default"),
method_post=("brown", "default"),
method_head=("dark cyan", "default"),
method_put=("light red", "default"),
method_delete=("dark red", "default"),
method_other=("light magenta", "default"),
method_http2_push=("light gray", "default"),
scheme_http=("dark cyan", "default"),
scheme_https=("light green", "default"),
scheme_ws=("brown", "default"),
scheme_wss=("light magenta", "default"),
scheme_tcp=("light magenta", "default"),
scheme_udp=("light magenta", "default"),
scheme_dns=("light blue", "default"),
scheme_quic=("brown", "default"),
scheme_other=("light magenta", "default"),
url_punctuation=("dark gray", "default"),
url_domain=("dark gray", "default"),
url_filename=("black", "default"),
url_extension=("dark gray", "default"),
url_query_key=("light blue", "default"),
url_query_value=("dark blue", "default"),
content_none=("black", "default"),
content_text=("dark gray", "default"),
content_script=("light green", "default"),
content_media=("light blue", "default"),
content_data=("brown", "default"),
content_raw=("light red", "default"),
content_other=("light magenta", "default"),
focus=("black", "default"),
code_200=("dark green", "default"),
code_300=("light blue", "default"),
code_400=("dark red", "default"),
code_500=("dark red", "default"),
code_other=("light red", "default"),
error=("light red", "default"),
warn=("brown", "default"),
alert=("light magenta", "default"),
header=("dark blue", "default"),
highlight=("black,bold", "default"),
intercept=("brown", "default"),
replay=("dark green", "default"),
mark=("dark red", "default"),
# Contentview Syntax Highlighting
name=("dark green", "default"),
string=("dark blue", "default"),
number=("light magenta", "default"),
boolean=("dark magenta", "default"),
comment=("dark gray", "default"),
# TCP flow details
from_client=("dark blue", "default"),
to_client=("dark red", "default"),
# Grid Editor
focusfield=("black", "light gray"),
focusfield_error=("dark red", "light gray"),
field_error=("dark red", "black"),
editfield=("black", "default"),
commander_command=("dark magenta", "default"),
commander_invalid=("light red", "default"),
commander_hint=("light gray", "default"),
)
gen_gradient(
low,
["light red", "yellow", "light green", "dark green", "dark cyan", "dark blue"],
)
class Light(LowLight):
high = dict(
background=("black", "g100"),
heading=("g99", "#08f"),
heading_key=("#0ff,bold", "#08f"),
heading_inactive=("g35", "g85"),
replay=("#0a0,bold", "default"),
option_selected=("black", "g85"),
option_selected_key=("dark blue", "g85"),
option_active_selected=("light red", "g85"),
)
# Solarized palette in Urwid-style terminal high-colour offsets
# See: http://ethanschoonover.com/solarized
sol_base03 = "h234"
sol_base02 = "h235"
sol_base01 = "h240"
sol_base00 = "h241"
sol_base0 = "h244"
sol_base1 = "h245"
sol_base2 = "h254"
sol_base3 = "h230"
sol_yellow = "h136"
sol_orange = "h166"
sol_red = "h160"
sol_magenta = "h125"
sol_violet = "h61"
sol_blue = "h33"
sol_cyan = "h37"
sol_green = "h64"
class SolarizedLight(LowLight):
high = dict(
background=(sol_base00, sol_base3),
title=(sol_cyan, "default"),
text=(sol_base00, "default"),
# Status bar & heading
heading=(sol_base2, sol_base02),
heading_key=(sol_blue, sol_base03),
heading_inactive=(sol_base03, sol_base1),
# Help
key=(
sol_blue,
"default",
),
head=(sol_base00, "default"),
# Options
option_selected=(sol_base03, sol_base2),
option_selected_key=(sol_blue, sol_base2),
option_active=(sol_orange, "default"),
option_active_selected=(sol_orange, sol_base2),
# List and Connections
method_get=(sol_green, "default"),
method_post=(sol_orange, "default"),
method_head=(sol_cyan, "default"),
method_put=(sol_red, "default"),
method_delete=(sol_red, "default"),
method_other=(sol_magenta, "default"),
method_http2_push=("light gray", "default"),
scheme_http=(sol_cyan, "default"),
scheme_https=("light green", "default"),
scheme_ws=(sol_orange, "default"),
scheme_wss=("light magenta", "default"),
scheme_tcp=("light magenta", "default"),
scheme_udp=("light magenta", "default"),
scheme_dns=("light blue", "default"),
scheme_quic=(sol_orange, "default"),
scheme_other=("light magenta", "default"),
url_punctuation=("dark gray", "default"),
url_domain=("dark gray", "default"),
url_filename=("black", "default"),
url_extension=("dark gray", "default"),
url_query_key=(sol_blue, "default"),
url_query_value=("dark blue", "default"),
focus=(sol_base01, "default"),
code_200=(sol_green, "default"),
code_300=(sol_blue, "default"),
code_400=(
sol_orange,
"default",
),
code_500=(sol_red, "default"),
code_other=(sol_magenta, "default"),
error=(sol_red, "default"),
warn=(sol_orange, "default"),
alert=(sol_magenta, "default"),
header=(sol_blue, "default"),
highlight=(sol_base01, "default"),
intercept=(
sol_red,
"default",
),
replay=(
sol_green,
"default",
),
mark=(sol_base01, "default"),
# Contentview Syntax Highlighting
name=(sol_green, "default"),
string=(sol_cyan, "default"),
number=(sol_blue, "default"),
boolean=(sol_magenta, "default"),
comment=(sol_base1, "default"),
# TCP flow details
from_client=(sol_blue, "default"),
to_client=(sol_red, "default"),
# Grid Editor
focusfield=(sol_base00, sol_base2),
focusfield_error=(sol_red, sol_base2),
field_error=(sol_red, "default"),
editfield=(sol_base01, "default"),
commander_command=(sol_cyan, "default"),
commander_invalid=(sol_orange, "default"),
commander_hint=(sol_base1, "default"),
)
class SolarizedDark(LowDark):
high = dict(
background=(sol_base2, sol_base03),
title=(sol_blue, "default"),
text=(sol_base1, "default"),
# Status bar & heading
heading=(sol_base2, sol_base01),
heading_key=(sol_blue + ",bold", sol_base01),
heading_inactive=(sol_base1, sol_base02),
# Help
key=(
sol_blue,
"default",
),
head=(sol_base2, "default"),
# Options
option_selected=(sol_base03, sol_base00),
option_selected_key=(sol_blue, sol_base00),
option_active=(sol_orange, "default"),
option_active_selected=(sol_orange, sol_base00),
# List and Connections
focus=(sol_base1, "default"),
method_get=(sol_green, "default"),
method_post=(sol_orange, "default"),
method_delete=(sol_red, "default"),
method_head=(sol_cyan, "default"),
method_put=(sol_red, "default"),
method_other=(sol_magenta, "default"),
method_http2_push=(sol_base01, "default"),
url_punctuation=("h242", "default"),
url_domain=("h252", "default"),
url_filename=("h132", "default"),
url_extension=("h96", "default"),
url_query_key=("h37", "default"),
url_query_value=("h30", "default"),
content_none=(sol_base01, "default"),
content_text=(sol_base1, "default"),
content_media=(sol_blue, "default"),
code_200=(sol_green, "default"),
code_300=(sol_blue, "default"),
code_400=(
sol_orange,
"default",
),
code_500=(sol_red, "default"),
code_other=(sol_magenta, "default"),
error=(sol_red, "default"),
warn=(sol_orange, "default"),
alert=(sol_magenta, "default"),
header=(sol_blue, "default"),
highlight=(sol_base01, "default"),
intercept=(
sol_red,
"default",
),
replay=(
sol_green,
"default",
),
mark=(sol_base01, "default"),
# Contentview Syntax Highlighting
name=(sol_green, "default"),
string=(sol_cyan, "default"),
number=(sol_blue, "default"),
boolean=(sol_magenta, "default"),
comment=(sol_base00, "default"),
# TCP flow details
from_client=(sol_blue, "default"),
to_client=(sol_red, "default"),
# Grid Editor
focusfield=(sol_base0, sol_base02),
focusfield_error=(sol_red, sol_base02),
field_error=(sol_red, "default"),
editfield=(sol_base1, "default"),
commander_command=(sol_blue, "default"),
commander_invalid=(sol_orange, "default"),
commander_hint=(sol_base00, "default"),
)
gen_rgb_gradient(
high, [(15, 0, 0), (15, 15, 0), (0, 15, 0), (0, 15, 15), (0, 0, 15)]
)
DEFAULT = "dark"
palettes = {
"lowlight": LowLight(),
"lowdark": LowDark(),
"light": Light(),
"dark": Dark(),
"solarized_light": SolarizedLight(),
"solarized_dark": SolarizedDark(),
}