applyFunction method

void applyFunction({
  1. required AwsFormatOptionMD formatOption,
})

Implementation

void applyFunction({
  required AwsFormatOptionMD formatOption,
}) {
  if (kDebugMode) {
    print('applyFunction');
  }
  var baseOffset = 0;
  var extentOffset = 0;
  switch (formatOption) {
    case AwsFormatOptionMD.formatStartEnd:
      newText = '$beforeText$newText$afterText';
      controller.text = newText;

      if (textApplyOption == AwsTextApplyOptionMD.selectionHasCharacter ||
          textApplyOption ==
              AwsTextApplyOptionMD.outsideSelectionHasCharacter) {
        baseOffset = selection.start - character!.length;
        extentOffset = selection.end - character!.length;
      } else if (textApplyOption == AwsTextApplyOptionMD.noneAddNew) {
        baseOffset = selection.start + character!.length;
        extentOffset = selection.end + character!.length;
        if (newLine != null) {
          baseOffset += 2;
          extentOffset += 2;
        }
      }
      break;
    case AwsFormatOptionMD.formatStart:
      newText = '$beforeText$newText$afterText';
      controller.text = newText;
      if (textApplyOption == AwsTextApplyOptionMD.selectionHasCharacter ||
          textApplyOption ==
              AwsTextApplyOptionMD.outsideSelectionHasCharacter) {
        baseOffset = selection.start - character!.length;
        extentOffset = selection.end - character!.length;
      } else if (textApplyOption == AwsTextApplyOptionMD.noneAddNew) {
        baseOffset = selection.start + character!.length;
        extentOffset = selection.end + character!.length;
      }
      break;
    case AwsFormatOptionMD.formatList:
      var lines = newText.split('\n');
      var index = 0;
      for (var i = 0; i < lines.length; i++) {
        if (lines[i].isNotEmpty) {
          index++;
        }
      }
      if (textApplyOption == AwsTextApplyOptionMD.selectionHasCharacter ||
          textApplyOption ==
              AwsTextApplyOptionMD.outsideSelectionHasCharacter) {
        if (orderedList == true) {
          baseOffset = selection.end - 3 * index;
          extentOffset = selection.end - 3 * index;
        } else {
          baseOffset = selection.end - 2 * index;
          extentOffset = selection.end - 2 * index;
        }
      } else if (textApplyOption == AwsTextApplyOptionMD.noneAddNew) {
        if (orderedList == true) {
          baseOffset = selection.end + 3 * index;
          extentOffset = selection.end + 3 * index;
        } else {
          baseOffset = selection.end + 2 * index;
          extentOffset = selection.end + 2 * index;
        }
      }
      newText = '$beforeText$newText$afterText';
      controller.text = newText;
      break;
    case AwsFormatOptionMD.formatAddNew:
      newText = '$beforeText$newText$afterText';
      controller.text = newText;

      if (textApplyOption == AwsTextApplyOptionMD.selectionHasCharacter ||
          textApplyOption ==
              AwsTextApplyOptionMD.outsideSelectionHasCharacter) {
        baseOffset = selection.start - character!.length;
        extentOffset = selection.start - character!.length;
      } else if (textApplyOption == AwsTextApplyOptionMD.noneAddNew) {
        baseOffset = selection.start + character!.length;
        extentOffset = selection.start + character!.length;
      }
      break;
    default:
      break;
  }

  if (baseOffset >= controller.text.length) {
    baseOffset = controller.text.length;
  }
  if (extentOffset >= controller.text.length) {
    extentOffset = controller.text.length;
  }
  if (baseOffset <= 0) baseOffset = 0;
  if (extentOffset <= 0) extentOffset = 0;
  controller.selection = TextSelection(
    baseOffset: baseOffset,
    extentOffset: extentOffset,
  );
}