blob: 53d496d10bcd12f46fa7936fb6d06e9ab6e6b191 [file] [log] [blame]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import '../ast.dart';
import '../block_parser.dart';
import '../patterns.dart';
import 'block_syntax.dart';
import 'setext_header_syntax.dart';
/// Parses paragraphs of regular text.
class ParagraphSyntax extends BlockSyntax {
@override
RegExp get pattern => dummyPattern;
@override
bool canEndBlock(BlockParser parser) => false;
const ParagraphSyntax();
@override
bool canParse(BlockParser parser) => true;
@override
Node? parse(BlockParser parser) {
final childLines = <String>[parser.current.content];
parser.advance();
var interruptedBySetextHeading = false;
// Eat until we hit something that ends a paragraph.
while (!parser.isDone) {
final syntax = interruptedBy(parser);
if (syntax != null) {
interruptedBySetextHeading = syntax is SetextHeaderSyntax;
break;
}
childLines.add(parser.current.content);
parser.advance();
}
// It is not a paragraph, but a setext heading.
if (interruptedBySetextHeading) {
return null;
}
final contents = UnparsedContent(childLines.join('\n').trimRight());
return Element('p', [contents]);
}
}