module.exports = grammar({
name: "plain",
extras: ($) => [
/[ \t]/, ],
rules: {
document: ($) => repeat($._item),
_item: ($) =>
choice(
$.fenced_code_block,
prec(1, $.list), $.paragraph,
prec(-1, $.paragraph_break), $.any_char
),
paragraph: ($) =>
prec.right(
seq(
repeat1(choice($.text_line, $.newline)),
optional($.paragraph_break)
)
),
list: ($) => prec.right(3, seq(
$.list_item,
repeat(choice(
seq($.newline, $.list_item),
seq($.paragraph_break, $.list_item)
)),
optional(choice($.newline, $.paragraph_break))
)),
fenced_code_block: ($) =>
prec.right(
seq(
token(seq("```", repeat(choice(/[^`]/, /`[^`]/, /``[^`]/)), "```")),
optional(choice($.newline, $.paragraph_break))
)
),
paragraph_break: ($) => /\r?\n\r?\n+/,
newline: ($) => /\r?\n/,
text_line: ($) => choice($.text_content),
text_content: ($) => /[^-*0-9\r\n][^\r\n]*/,
list_item: ($) => token(seq(
choice("-", "*", /\d+\./),
/[ \t]+/,
/[^\r\n]+/
)),
any_char: ($) => /./,
},
});