diff options
| author | Philipp A | 2018-12-02 14:57:55 +0100 |
|---|---|---|
| committer | Philipp A | 2018-12-02 14:57:55 +0100 |
| commit | 04e8c55fc345264deea85e23502e640ae6d6aea2 (patch) | |
| tree | 8470196f24ba1ebd5ba915a625b998a60381a7ae /src | |
| parent | 41d8db517b19abf74ac3e3ea0b76633bd5a7f2db (diff) | |
| download | rust-rst-04e8c55fc345264deea85e23502e640ae6d6aea2.tar.bz2 | |
Organized grammar a bit
Diffstat (limited to 'src')
| -rw-r--r-- | src/rst.pest | 72 |
1 files changed, 39 insertions, 33 deletions
diff --git a/src/rst.pest b/src/rst.pest index 562eac6..e1e14ee 100644 --- a/src/rst.pest +++ b/src/rst.pest @@ -38,30 +38,11 @@ hanging_block = _{ // | plain } +// Substitution definition. A block type substitution_def = { ".." ~ PUSH(" "+) ~ "|" ~ substitution_name ~ "|" ~ " "+ ~ inline_dirblock ~ DROP } substitution_name = { !" " ~ (!(" "|"|") ~ ANY)+ ~ (" "+ ~ (!(" "|"|") ~ ANY)+)* } inline_dirblock = _{ image } // TODO: | replace -// Directives: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#directives -// .. name:: arguments ~ :options: ~ blank_line+ ~ content -// Everything except for the first argument has to be indented -// Directives with options can have these or specific ones: -common_option = { "class" | "name" } - -// Image. A block type - -image_directive = _{ ".." ~ PUSH(" "+) ~ image ~ DROP } -image = { ^"image::" ~ line ~ image_opt_block? } -image_opt_block = _{ PEEK[..-1] ~ PUSH(" " ~ POP) ~ ":" ~ image_option ~ ":" ~ line } //TODO: merge with other directives? -image_option = { common_option | "alt" | "height" | "width" | "scale" | "align" | "target" } - -// Admonition. A block type. The generic one has a title - -admonition = { ".." ~ PUSH(" "+) ~ ^"admonition::" ~ line ~ blank_line* ~ admonition_content? ~ DROP } -admonition_gen = { ".." ~ PUSH(" "+) ~ admonition_type ~ "::" ~ (blank_line | line) ~ blank_line* ~ admonition_content? ~ DROP } -admonition_type = { ^"attention" | ^"caution" | ^"danger" | ^"error" | ^"hint" | ^"important" | ^"note" | ^"tip" | ^"warning" } -admonition_content = _{ PEEK[..-1] ~ PUSH(" " ~ POP) ~ hanging_block ~ block* } //TODO: merge with other directives? - // Target. A block type target = { target_qu | target_uq } target_uq = _{ ".. _" ~ target_name_uq ~ ":" ~ (" " ~ link_target)? ~ " "* ~ NEWLINE } @@ -71,7 +52,6 @@ target_name_qu = { ( !( ":"|"`") ~ !NEWLINE ~ ANY )* } link_target = { nonspacechar+ } // Title. A block type -// TODO: a bug prevents them from being merged to a single “title” rule title = { PUSH(adornments) ~ NEWLINE ~ PEEK[..-1] ~ " "* ~ line ~ PEEK[..-1] ~ POP | line ~ PEEK[..] ~ adornments ~ NEWLINE @@ -82,14 +62,43 @@ bullet_list = { bullet_item ~ (PEEK[..] ~ bullet_item)* } bullet_item = { bullet_marker ~ PUSH(" "+) ~ line ~ blank_line* ~ blist_body? ~ DROP } blist_body = _{ PEEK[..-1] ~ PUSH(" " ~ POP) ~ hanging_block ~ block* } - // paragraph. A block type. paragraph = { line ~ (PEEK[..] ~ line)* } + + +/* Directives: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#directives + * .. name:: arguments ~ :options: ~ blank_line+ ~ content + * Everything except for the first argument has to be indented + */ + + +// Directives with options can have these or specific ones: +common_option = { "class" | "name" } + +// Image. A directive + +image_directive = _{ ".." ~ PUSH(" "+) ~ image ~ DROP } +image = { ^"image::" ~ line ~ image_opt_block? } +image_opt_block = _{ PEEK[..-1] ~ PUSH(" " ~ POP) ~ ":" ~ image_option ~ ":" ~ line } //TODO: merge with other directives? +image_option = { common_option | "alt" | "height" | "width" | "scale" | "align" | "target" } + +// Admonition. A directive. The generic one has a title + +admonition = { ".." ~ PUSH(" "+) ~ ^"admonition::" ~ line ~ blank_line* ~ admonition_content? ~ DROP } +admonition_gen = { ".." ~ PUSH(" "+) ~ admonition_type ~ "::" ~ (blank_line | line) ~ blank_line* ~ admonition_content? ~ DROP } +admonition_type = { ^"attention" | ^"caution" | ^"danger" | ^"error" | ^"hint" | ^"important" | ^"note" | ^"tip" | ^"warning" } +admonition_content = _{ PEEK[..-1] ~ PUSH(" " ~ POP) ~ hanging_block ~ block* } //TODO: merge with other directives? + // TODO: use inlines here line = { !marker ~ !blank_line ~ (!NEWLINE ~ ANY)+ ~ NEWLINE } blank_line = _{ !marker ~ " "* ~ NEWLINE } -// character classes + +/* + * character classes + */ + + bullet_marker = _{ "+" | "*" | "-" } adornments = { // recommended @@ -105,22 +114,19 @@ adornments = { } nonspacechar = _{ !(" " | NEWLINE) ~ ANY } -// lookaheads. do not use in another position -marker = _{ (bullet_marker | "..") ~ " " } +/* + * lookaheads. do not use in another position + */ +marker = _{ (bullet_marker | "..") ~ " " } -// image = { -// ".. image:: " ~ source ~ blank_line ~ -// ( -// (sp ~ ":alt:" ~ sp ~ target_name_uq ~ blank_line) | -// (sp ~ ":target:" ~ sp ~ source ~ blank_line) | -// (sp ~ ":align:" ~ sp ~ source ~ blank_line) -// )* -// } +//################################################################################# + + // code_block = { // ".. code" ~ "-block"? ~ ":: " ~ source ~ blank_line ~ |
