Про канонический алгоритм парсинга Markdown и подобного
От: Shmj Ниоткуда  
Дата: 13.01.25 10:26
Оценка:
Вроде классически для разбора таких текстов как Markdown применяют типа конечный автомат:

  Скрытый текст
TextSpan markdown2TextSpan(String markdownText) {
  final spans = <TextSpan>[];
  final buffer = StringBuffer();

  int asteriskCount = 0;
  bool isItalic = false;
  bool isBold = false;

  for (int i = 0; i < markdownText.length; i++) {
    final char = markdownText[i];

    if ("*" == char) {
      if (asteriskCount < 2) {
        asteriskCount++;
        continue;
      }

      buffer.write(char);
      continue;
    }

    if (asteriskCount > 0) {
      if (buffer.isNotEmpty) {
        spans.add(_buildTextSpan(buffer.toString(), isItalic, isBold));
      }

      if (1 ==  asteriskCount) isItalic = !isItalic;
      if (2 ==  asteriskCount) isBold = !isBold;

      buffer.clear();
      asteriskCount = 0;
    }

    buffer.write(char);
  }

  if (buffer.isNotEmpty) {
    spans.add(_buildTextSpan(buffer.toString(), isItalic, isBold));
  }

  return TextSpan(children: spans);
}


Но это не точно, голова сейчас не работает — могут быть ошибки тут.

Дал задание GPT — он сначала решил с помощью хитровумных регулярных выражений. Минус такого подхода — регулярки сложно поддерживать, если будут добавляться новые теги. В таком алгоритме как у меня все намного проще.

Попросил без регулярных выражений — он начал как бы заглядывать вперед, делать i+1 и т.д. Т.е. не понял как сделать проще. Когда попросил без i+1 — то он такого наворотил, раз в 5 больше кода и ошибку там найти стало не реально.

Вопрос у меня такой — где-то описан этот алгоритм парсинга? Узнаете ли вы его?
=сначала спроси у GPT=
Отредактировано 13.01.2025 10:31 Shmj . Предыдущая версия . Еще …
Отредактировано 13.01.2025 10:27 Shmj . Предыдущая версия .
Отредактировано 13.01.2025 10:26 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.