blob: 49f4eda2723f6d47b3500cee94ee685b5c8b4b93 [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 'paragraph_syntax.dart';
/// Parses setext-style headers.
class SetextHeaderSyntax extends BlockSyntax {
@override
RegExp get pattern => setextPattern;
const SetextHeaderSyntax();
@override
bool canParse(BlockParser parser) {
final lastSyntax = parser.currentSyntax;
if (parser.setextHeadingDisabled || lastSyntax is! ParagraphSyntax) {
return false;
}
return pattern.hasMatch(parser.current.content);
}
@override
Node? parse(BlockParser parser) {
final lines = parser.linesToConsume;
if (lines.length < 2) {
return null;
}
// Remove the last line which is a marker.
lines.removeLast();
final marker = parser.current.content.trim();
final level = (marker[0] == '=') ? '1' : '2';
final content = lines.map((e) => e.content).join('\n').trimRight();
parser.advance();
return Element('h$level', [UnparsedContent(content)]);
}
}