#include "fastfetch.h" #define FF_FONT_MODULE_NAME "Font" #define FF_FONT_NUM_FORMAT_ARGS 21 void ffPrintFont(FFinstance* instance) { #ifdef __ANDROID__ ffPrintError(instance, FF_FONT_MODULE_NAME, 0, &instance->config.font, "Font detection is not supported on Android"); return; #endif const FFDisplayServerResult* wmde = ffConnectDisplayServer(instance); if(ffStrbufIgnCaseCompS(&wmde->wmProtocolName, "TTY") == 0) { ffPrintError(instance, FF_FONT_MODULE_NAME, 0, &instance->config.font, "Font isn't supported in TTY"); return; } const FFstrbuf* plasmaRaw = &ffDetectPlasma(instance)->font; const FFstrbuf* gtk2Raw = &ffDetectGTK2(instance)->font; const FFstrbuf* gtk3Raw = &ffDetectGTK3(instance)->font; const FFstrbuf* gtk4Raw = &ffDetectGTK4(instance)->font; if(plasmaRaw->length == 0 && gtk2Raw->length == 0 && gtk3Raw->length == 0 && gtk4Raw->length == 0) { ffPrintError(instance, FF_FONT_MODULE_NAME, 0, &instance->config.font, "No fonts found"); return; } FFfont plasma; ffFontInitQt(&plasma, plasmaRaw->chars); FFfont gtk2; ffFontInitPango(>k2, gtk2Raw->chars); FFfont gtk3; ffFontInitPango(>k3, gtk3Raw->chars); FFfont gtk4; ffFontInitPango(>k4, gtk4Raw->chars); FFstrbuf gtk; ffStrbufInitA(>k, 64); ffParseGTK(>k, >k2.pretty, >k3.pretty, >k4.pretty); if(instance->config.font.outputFormat.length == 0) { ffPrintLogoAndKey(instance, FF_FONT_MODULE_NAME, 0, &instance->config.font.key); if(plasma.pretty.length > 0) { ffStrbufWriteTo(&plasma.pretty, stdout); fputs(" [Plasma]", stdout); if(gtk.length > 0) fputs(", ", stdout); } ffStrbufPutTo(>k, stdout); } else { ffPrintFormat(instance, FF_FONT_MODULE_NAME, 0, &instance->config.font, FF_FONT_NUM_FORMAT_ARGS, (FFformatarg[]){ {FF_FORMAT_ARG_TYPE_STRBUF, plasmaRaw}, {FF_FORMAT_ARG_TYPE_STRBUF, &plasma.name}, {FF_FORMAT_ARG_TYPE_STRBUF, &plasma.size}, {FF_FORMAT_ARG_TYPE_LIST, &plasma.styles}, {FF_FORMAT_ARG_TYPE_STRBUF, &plasma.pretty}, {FF_FORMAT_ARG_TYPE_STRBUF, gtk2Raw}, {FF_FORMAT_ARG_TYPE_STRBUF, >k2.name}, {FF_FORMAT_ARG_TYPE_STRBUF, >k2.size}, {FF_FORMAT_ARG_TYPE_LIST, >k2.styles}, {FF_FORMAT_ARG_TYPE_STRBUF, >k2.pretty}, {FF_FORMAT_ARG_TYPE_STRBUF, gtk3Raw}, {FF_FORMAT_ARG_TYPE_STRBUF, >k3.name}, {FF_FORMAT_ARG_TYPE_STRBUF, >k3.size}, {FF_FORMAT_ARG_TYPE_LIST, >k3.styles}, {FF_FORMAT_ARG_TYPE_STRBUF, >k3.pretty}, {FF_FORMAT_ARG_TYPE_STRBUF, gtk4Raw}, {FF_FORMAT_ARG_TYPE_STRBUF, >k4.name}, {FF_FORMAT_ARG_TYPE_STRBUF, >k4.size}, {FF_FORMAT_ARG_TYPE_LIST, >k4.styles}, {FF_FORMAT_ARG_TYPE_STRBUF, >k4.pretty}, {FF_FORMAT_ARG_TYPE_STRBUF, >k} }); } ffFontDestroy(&plasma); ffFontDestroy(>k2); ffFontDestroy(>k3); ffFontDestroy(>k4); ffStrbufDestroy(>k); }