| @@ -1,4 +1,6 @@ | |||
| import matplotlib.pyplot as plt | |||
| from fontTools.ttLib import TTFont | |||
| from matplotlib.font_manager import findSystemFonts | |||
| from core.tools.errors import ToolProviderCredentialValidationError | |||
| from core.tools.provider.builtin.chart.tools.line import LinearChartTool | |||
| @@ -6,6 +8,37 @@ from core.tools.provider.builtin_tool_provider import BuiltinToolProviderControl | |||
| # use a business theme | |||
| plt.style.use('seaborn-v0_8-darkgrid') | |||
| plt.rcParams['axes.unicode_minus'] = False | |||
| def init_fonts(): | |||
| fonts = findSystemFonts() | |||
| popular_unicode_fonts = [ | |||
| 'Arial Unicode MS', 'DejaVu Sans', 'DejaVu Sans Mono', 'DejaVu Serif', 'FreeMono', 'FreeSans', 'FreeSerif', | |||
| 'Liberation Mono', 'Liberation Sans', 'Liberation Serif', 'Noto Mono', 'Noto Sans', 'Noto Serif', 'Open Sans', | |||
| 'Roboto', 'Source Code Pro', 'Source Sans Pro', 'Source Serif Pro', 'Ubuntu', 'Ubuntu Mono' | |||
| ] | |||
| supported_fonts = [] | |||
| for font_path in fonts: | |||
| try: | |||
| font = TTFont(font_path) | |||
| # get family name | |||
| family_name = font['name'].getName(1, 3, 1).toUnicode() | |||
| if family_name in popular_unicode_fonts: | |||
| supported_fonts.append(family_name) | |||
| except: | |||
| pass | |||
| plt.rcParams['font.family'] = 'sans-serif' | |||
| # sort by order of popular_unicode_fonts | |||
| for font in popular_unicode_fonts: | |||
| if font in supported_fonts: | |||
| plt.rcParams['font.sans-serif'] = font | |||
| break | |||
| init_fonts() | |||
| class ChartProvider(BuiltinToolProviderController): | |||
| def _validate_credentials(self, credentials: dict) -> None: | |||