resolveStyle static method

TextStyle resolveStyle(
  1. Map<UInlineAttr, Object?> active,
  2. TextStyle base,
  3. ColorScheme cs
)

Turns a map of active attributes into a TextStyle on top of base.

Implementation

static TextStyle resolveStyle(Map<UInlineAttr, Object?> active, TextStyle base, ColorScheme cs) {
  final bool link = active.containsKey(UInlineAttr.link);
  final bool inlineCode = active.containsKey(UInlineAttr.code);
  final List<TextDecoration> decos = <TextDecoration>[
    if (active.containsKey(UInlineAttr.underline) || link) TextDecoration.underline,
    if (active.containsKey(UInlineAttr.strikethrough)) TextDecoration.lineThrough,
  ];
  final int? color = active[UInlineAttr.color] as int?;
  final int? highlight = active[UInlineAttr.highlight] as int?;
  final double? size = active[UInlineAttr.fontSize] as double?;
  final bool sup = active.containsKey(UInlineAttr.superscript);
  final bool sub = active.containsKey(UInlineAttr.subscript);
  // Sub/superscript are approximated with a smaller font plus a baseline shift.
  final double? resolvedSize = sup || sub ? (size ?? base.fontSize ?? 16) * 0.72 : size;
  return base.copyWith(
    fontWeight: active.containsKey(UInlineAttr.bold) ? FontWeight.bold : null,
    fontStyle: active.containsKey(UInlineAttr.italic) ? FontStyle.italic : null,
    decoration: decos.isEmpty ? null : TextDecoration.combine(decos),
    decorationColor: link
        ? cs.primary
        : color != null
        ? Color(color)
        : null,
    color: link
        ? cs.primary
        : color != null
        ? Color(color)
        : (inlineCode ? cs.error : null),
    backgroundColor: highlight != null ? Color(highlight) : (inlineCode ? cs.surfaceContainerHighest : null),
    fontSize: resolvedSize,
    fontFamily: active.containsKey(UInlineAttr.fontFamily) ? active[UInlineAttr.fontFamily] as String? : (inlineCode ? "monospace" : null),
    height: sup || sub ? 1.0 : null,
    textBaseline: TextBaseline.alphabetic,
  );
}