getFontSet method

({Font bold, Font boldItalic, Font italic, Font regular}) getFontSet(
  1. String fontFamily,
  2. String? styleName
)

Returns the set of 4 fonts (regular, bold, italic, bold-italic) for a given font family.

Implementation

({pw.Font regular, pw.Font bold, pw.Font italic, pw.Font boldItalic})
    getFontSet(String fontFamily, String? styleName) {
  final lower = fontFamily.toLowerCase();
  final isCode = styleName == 'code';

  // Explicit DejaVu Sans mapping (bundled fallback)
  if (lower.contains('dejavu')) {
    return (
      regular: sansRegular ?? pw.Font.helvetica(),
      bold: sansBold ?? pw.Font.helveticaBold(),
      italic: sansItalic ?? pw.Font.helveticaOblique(),
      boldItalic: sansBoldItalic ?? pw.Font.helveticaBoldOblique(),
    );
  }

  if (isCode || lower.contains('courier') || lower.contains('mono') || lower.contains('consolas')) {
    return (
      regular: monoRegular ?? pw.Font.courier(),
      bold: monoBold ?? pw.Font.courierBold(),
      italic: monoRegular ?? pw.Font.courierOblique(), // Mono has no italic
      boldItalic: monoBold ?? pw.Font.courierBoldOblique(),
    );
  }

  if (lower.contains('times') || lower.contains('georgia') || lower.contains('serif') ||
      lower.contains('garamond') || lower.contains('palatino')) {
    return (
      regular: serifRegular ?? pw.Font.times(),
      bold: serifBold ?? pw.Font.timesBold(),
      italic: serifItalic ?? pw.Font.timesItalic(),
      boldItalic: serifBoldItalic ?? pw.Font.timesBoldItalic(),
    );
  }

  // Default: sans-serif (DejaVu Sans, Helvetica, Roboto, Noto Sans, etc.)
  return (
    regular: sansRegular ?? pw.Font.helvetica(),
    bold: sansBold ?? pw.Font.helveticaBold(),
    italic: sansItalic ?? pw.Font.helveticaOblique(),
    boldItalic: sansBoldItalic ?? pw.Font.helveticaBoldOblique(),
  );
}