onMatchEnd method

bool onMatchEnd(
  1. InlineParser parser,
  2. Match match,
  3. TagState state
)

Implementation

bool onMatchEnd(InlineParser parser, Match match, TagState state) {
  final runLength = match.group(0)!.length;
  final matchStart = parser.pos;
  final matchEnd = parser.pos + runLength - 1;
  final openingRunLength = state.endPos - state.startPos;
  final delimiterRun = _DelimiterRun.tryParse(parser, matchStart, matchEnd);

  if (openingRunLength == 1 && runLength == 1) {
    parser.addNode(Element('em', state.children));
  } else if (openingRunLength == 1 && runLength > 1) {
    parser
      ..addNode(Element('em', state.children))
      ..pos = parser.pos - (runLength - 1)
      ..start = parser.pos;
  } else if (openingRunLength > 1 && runLength == 1) {
    parser
      ..openTag(TagState(state.startPos, state.endPos - 1, this, delimiterRun))
      ..addNode(Element('em', state.children));
  } else if (openingRunLength == 2 && runLength == 2) {
    parser.addNode(Element('strong', state.children));
  } else if (openingRunLength == 2 && runLength > 2) {
    parser
      ..addNode(Element('strong', state.children))
      ..pos = parser.pos - (runLength - 2)
      ..start = parser.pos;
  } else if (openingRunLength > 2 && runLength == 2) {
    parser
      ..openTag(TagState(state.startPos, state.endPos - 2, this, delimiterRun))
      ..addNode(Element('strong', state.children));
  } else if (openingRunLength > 2 && runLength > 2) {
    parser
      ..openTag(TagState(state.startPos, state.endPos - 2, this, delimiterRun))
      ..addNode(Element('strong', state.children))
      ..pos = parser.pos - (runLength - 2)
      ..start = parser.pos;
  }

  return true;
}