blob: 1ccd5da2f5c9663ce159e9c2ad937c569dcf45be [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 'patterns.dart';
/// A [Line] is a sequence of zero or more characters other than line feed
/// (`U+000A`) or carriage return (`U+000D`), followed by a line ending or by
/// the end of file.
// See https://spec.commonmark.org/0.30/#line.
class Line {
/// A sequence of zero or more characters other than the line ending.
final String content;
/// How many spaces of a tab that remains after part of it has been consumed.
// See: https://spec.commonmark.org/0.30/#example-6
// We cannot simply expand the `tabRemaining` to spaces, for example
//
// `>\t\tfoo`
//
// If we expand the 2 space width `tabRemaining` from blockquote block into 2
// spaces, so the string segment for the indented code block is:
//
// ` \tfoo`,
//
// then the output will be:
// ```html
// <pre><code>foo
// </code></pre>
// ```
// instead of the expected:
// ```html
// <pre><code> foo
// </code></pre>
// ```
final int? tabRemaining;
// A line containing no characters, or a line containing only spaces
// (`U+0020`) or tabs (`U+0009`), is called a blank line.
// https://spec.commonmark.org/0.30/#blank-line
final bool isBlankLine;
Line(
this.content, {
this.tabRemaining,
}) : isBlankLine = emptyPattern.hasMatch(content);
}