generateDropCap method

DropCap? generateDropCap(
  1. ChantContext ctxt
)

Implementation

DropCap? generateDropCap(ChantContext ctxt) {
  if (dropCap != null) return dropCap;
  if (spans.isEmpty || ctxt.specialCharMap.containsKey(spans[0].text)) {
    return null;
  }

  final dropCapSpan = spans[0].clone();
  dropCapSpan.text = dropCapSpan.text.substring(0, 1).toUpperCase();
  final dropCapLowerCase = dropCapSpan.text.toLowerCase();
  if (dropCapSpan.text == dropCapLowerCase) return null;
  if (dropCapSpan.activeTags.contains('sc')) {
    dropCapSpan.text = dropCapLowerCase;
  }
  dropCapSpan.propertyArray.add({'line-height': 1.0});

  final generatedDropCap = DropCap(ctxt, '', sourceIndex);
  generatedDropCap.spans = [dropCapSpan];
  final match = RegExp(
    r'^(?:<\/?[^>]+>)*.?(?:<\/[^>]+>)*',
  ).firstMatch(sourceGabc);
  final dropCapSourceGabcLength = match?.group(0)?.length ?? 0;
  generatedDropCap.sourceGabc = sourceGabc.substring(
    0,
    dropCapSourceGabcLength,
  );
  sourceIndex += generatedDropCap.sourceGabc.length;
  sourceGabc = sourceGabc.substring(dropCapSourceGabcLength);

  spans[0].text = spans[0].text.substring(1);
  text = text.substring(1);
  centerStartIndex -= 1;

  dropCap = generatedDropCap;
  return generatedDropCap;
}