parseDimension function

double parseDimension(
  1. String dimension,
  2. RenderContext context
)

Parses dimension strings (e.g., "1cm", "10pt", "-5mm")

Implementation

double parseDimension(String dimension, RenderContext context) {
  final dim = dimension.trim();
  if (dim.isEmpty) return 0.0;

  int numEnd = 0;
  while (numEnd < dim.length && (dim[numEnd].contains(RegExp(r'[0-9.\-]')))) {
    numEnd++;
  }

  final value = double.tryParse(dim.substring(0, numEnd)) ?? 0.0;
  final unit = dim.substring(numEnd).trim().toLowerCase();

  switch (unit) {
    case "pt":
      return value;
    case "px":
      return value;
    case "mm":
      return value * 3.78;
    case "cm":
      return value * 37.8;
    case "in":
      return value * 96.0;
    case "em":
      return context.fontSize * value;
    case "ex":
      return context.fontSize * 0.5 * value;
    case "mu":
      return context.fontSize * value / 18.0;
    case "bp":
      return value * 1.00375;
    case "pc":
      return value * 12.0;
    case "dd":
      return value * 1.07;
    case "cc":
      return value * 12.84;
    case "sp":
      return value / 65536.0;
    default:
      return value;
  }
}