139 lines
4.6 KiB
Python
139 lines
4.6 KiB
Python
"""
|
|
Terminal-friendly color schemes for financial statement display.
|
|
Provides better contrast and readability in various terminal environments.
|
|
"""
|
|
|
|
from typing import Dict
|
|
|
|
# Default scheme - the current implementation
|
|
DEFAULT_SCHEME = {
|
|
"abstract_item": "bold cyan",
|
|
"total_item": "bold",
|
|
"regular_item": "",
|
|
"low_confidence_item": "dim",
|
|
"positive_value": "green",
|
|
"negative_value": "red",
|
|
"total_value_prefix": "bold yellow",
|
|
"separator": "dim",
|
|
"company_name": "bold green",
|
|
"statement_type": "bold blue",
|
|
"panel_border": "blue",
|
|
"empty_value": "dim",
|
|
}
|
|
|
|
# High contrast scheme - better for terminals with poor dim text support
|
|
HIGH_CONTRAST_SCHEME = {
|
|
"abstract_item": "bold bright_cyan",
|
|
"total_item": "bold bright_white",
|
|
"regular_item": "white",
|
|
"low_confidence_item": "bright_black", # Usually renders as gray
|
|
"positive_value": "bright_green",
|
|
"negative_value": "bright_red",
|
|
"total_value_prefix": "bold bright_yellow",
|
|
"separator": "bright_black",
|
|
"company_name": "bold bright_green",
|
|
"statement_type": "bold bright_blue",
|
|
"panel_border": "bright_blue",
|
|
"empty_value": "bright_black",
|
|
}
|
|
|
|
# Professional scheme - emphasizes important items without dim text
|
|
PROFESSIONAL_SCHEME = {
|
|
"abstract_item": "bold blue",
|
|
"total_item": "bold bright_white",
|
|
"regular_item": "",
|
|
"low_confidence_item": "italic", # Use italic instead of dim
|
|
"positive_value": "green",
|
|
"negative_value": "red",
|
|
"total_value_prefix": "bold",
|
|
"separator": "blue",
|
|
"company_name": "bold bright_white",
|
|
"statement_type": "bold blue",
|
|
"panel_border": "white",
|
|
"empty_value": "bright_black",
|
|
}
|
|
|
|
# Minimal scheme - focuses on structure over color
|
|
MINIMAL_SCHEME = {
|
|
"abstract_item": "bold",
|
|
"total_item": "bold bright_white",
|
|
"regular_item": "",
|
|
"low_confidence_item": "italic",
|
|
"positive_value": "",
|
|
"negative_value": "red", # Keep red for negative values
|
|
"total_value_prefix": "bold",
|
|
"separator": "white",
|
|
"company_name": "bold",
|
|
"statement_type": "bold",
|
|
"panel_border": "white",
|
|
"empty_value": "bright_black",
|
|
}
|
|
|
|
# Color-blind friendly scheme
|
|
ACCESSIBLE_SCHEME = {
|
|
"abstract_item": "bold blue",
|
|
"total_item": "bold bright_white underline", # Use underline for emphasis
|
|
"regular_item": "",
|
|
"low_confidence_item": "italic",
|
|
"positive_value": "blue", # Avoid green/red
|
|
"negative_value": "magenta", # Avoid green/red
|
|
"total_value_prefix": "bold underline",
|
|
"separator": "white",
|
|
"company_name": "bold bright_white",
|
|
"statement_type": "bold blue",
|
|
"panel_border": "white",
|
|
"empty_value": "bright_black",
|
|
}
|
|
|
|
# SEC filing style - mimics actual printed filings
|
|
FILING_SCHEME = {
|
|
"abstract_item": "bold", # Major sections (ASSETS, LIABILITIES) - just bold
|
|
"total_item": "bold", # Subtotals - bold only
|
|
"regular_item": "", # Regular items - no styling
|
|
"low_confidence_item": "dim", # Low confidence items - dimmed
|
|
"positive_value": "", # Positive values - no color (like printed filings)
|
|
"negative_value": "", # Negative values - no color (parentheses show negative)
|
|
"total_value_prefix": "bold", # Total values - bold only
|
|
"separator": "dim", # Table separators - dimmed
|
|
"company_name": "bold", # Company name - just bold
|
|
"statement_type": "bold", # Statement title - just bold
|
|
"panel_border": "white", # Panel borders - white
|
|
"empty_value": "dim", # Empty values - dimmed
|
|
}
|
|
|
|
# Available schemes
|
|
SCHEMES: Dict[str, Dict[str, str]] = {
|
|
"default": DEFAULT_SCHEME,
|
|
"high_contrast": HIGH_CONTRAST_SCHEME,
|
|
"professional": PROFESSIONAL_SCHEME,
|
|
"minimal": MINIMAL_SCHEME,
|
|
"accessible": ACCESSIBLE_SCHEME,
|
|
"filing": FILING_SCHEME,
|
|
}
|
|
|
|
def get_color_scheme(scheme_name: str = "professional") -> Dict[str, str]:
|
|
"""
|
|
Get a color scheme by name.
|
|
|
|
Args:
|
|
scheme_name: Name of the scheme (default, high_contrast, professional, minimal, accessible, filing)
|
|
|
|
Returns:
|
|
Dictionary of style mappings
|
|
"""
|
|
return SCHEMES.get(scheme_name, PROFESSIONAL_SCHEME)
|
|
|
|
# Environment variable support
|
|
import os
|
|
|
|
|
|
def get_current_scheme() -> Dict[str, str]:
|
|
"""
|
|
Get the current color scheme based on environment variable or default.
|
|
|
|
Environment variable: EDGAR_FINANCIALS_COLOR_SCHEME
|
|
Values: default, high_contrast, professional, minimal, accessible, filing
|
|
"""
|
|
scheme_name = os.environ.get("EDGAR_FINANCIALS_COLOR_SCHEME", "professional")
|
|
return get_color_scheme(scheme_name)
|