blob: 36fe5b464322482eb85b5973df7629624e18b76b [file] [edit]
//! This is a temporary hack to include the frontmatter grammar until it is
//! stabilized.
//!
//! This should be removed once FRONTMATTER is added to the Reference.
use crate::{Grammar, parser};
use diagnostics::Diagnostics;
use std::path::Path;
pub fn load_grammar_with_frontmatter(diag: &mut Diagnostics) -> Grammar {
let mut grammar = super::load_grammar(diag);
parser::parse_grammar(FRONTMATTER, &mut grammar, "lexer", Path::new("")).unwrap();
grammar
}
static FRONTMATTER: &str = "⊥ -> CHAR* CHAR
error -> ^ // Should be a hard error.
@root FRONTMATTER ->
WHITESPACE_ONLY_LINE*
!FRONTMATTER_INVALID
FRONTMATTER_MAIN
WHITESPACE_ONLY_LINE -> (!LF WHITESPACE)* LF
FRONTMATTER_INVALID -> (!LF WHITESPACE)+ `---` error
FRONTMATTER_MAIN ->
`-`{n:3..=255} ^ FRONTMATTER_REST
FRONTMATTER_REST ->
FRONTMATTER_FENCE_START
FRONTMATTER_LINE*
FRONTMATTER_FENCE_END
FRONTMATTER_FENCE_START ->
MAYBE_INFOSTRING_OR_WS LF
FRONTMATTER_FENCE_END ->
`-`{n} HORIZONTAL_WHITESPACE* ( LF | EOF )
FRONTMATTER_LINE -> !`-`{n} ~[LF CR]* LF
MAYBE_INFOSTRING_OR_WS ->
HORIZONTAL_WHITESPACE* INFOSTRING? HORIZONTAL_WHITESPACE*
INFOSTRING -> (XID_Start | `_`) ( XID_Continue | `-` | `.` )*
HORIZONTAL_WHITESPACE ->
U+0009 // Horizontal tab, `'\t'`
| U+0020 // Space, `' '`
";