diff options
| author | Fuwn <[email protected]> | 2024-06-19 09:17:36 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-06-19 09:17:36 +0000 |
| commit | 6d92ea622bfc98a831a9b94f19896fe0c215f794 (patch) | |
| tree | 34a8341128580cc190caecb16e9c62e2eb1f72ec /src | |
| parent | feat(germ): bump version (diff) | |
| download | germ-6d92ea622bfc98a831a9b94f19896fe0c215f794.tar.xz germ-6d92ea622bfc98a831a9b94f19896fe0c215f794.zip | |
fix(ast): parse preformatted gemtext as preformatted contentv0.4.2
Diffstat (limited to 'src')
| -rw-r--r-- | src/ast/container.rs | 12 | ||||
| -rw-r--r-- | src/lib.rs | 44 |
2 files changed, 50 insertions, 6 deletions
diff --git a/src/ast/container.rs b/src/ast/container.rs index 1e6c63f..c8ef58c 100644 --- a/src/ast/container.rs +++ b/src/ast/container.rs @@ -190,7 +190,7 @@ impl Ast { // Match the first character of the Gemtext line to understand the line // type match line.get(0..1).unwrap_or("") { - "=" => { + "=" if !*in_preformatted => { // If the Gemtext line starts with an "=" ("=>"), it is a link line, // so splitting it up should be easy enough. let line = line.get(2..).unwrap(); @@ -211,7 +211,7 @@ impl Ast { break; } - "#" => { + "#" if !*in_preformatted => { // If the Gemtext line starts with an "#", it is a heading, so let's // find out how deep it goes. let level = @@ -234,7 +234,7 @@ impl Ast { break; } - "*" => { + "*" if !*in_preformatted => { // If the Gemtext line starts with an asterisk, it is a list item, so // let's enter a list context. if !*in_list { @@ -249,7 +249,7 @@ impl Ast { break; } } - ">" => { + ">" if !*in_preformatted => { // If the Gemtext line starts with an ">", it is a blockquote, so // let's just clip off the line identifier. nodes.push(Node::Blockquote( @@ -259,8 +259,8 @@ impl Ast { break; } "`" => { - // If the Gemtext line starts with a backtick, it is a list item, so - // let's enter a preformatted text context. + // If the Gemtext line starts with a backtick, it's a preformatted + // toggle, so let's enter a preformatted text context. *in_preformatted = !*in_preformatted; if *in_preformatted { @@ -38,3 +38,47 @@ #[cfg(feature = "meta")] pub mod meta; #[cfg(feature = "quick")] pub mod quick; + +#[cfg(feature = "example-gemtext")] +pub const EXAMPLE_GEMTEXT: &str = r"```This is alt-text +Here goes the pre-formatted text. + +This continues the pre-formatted text on a new line after a blank line. +``` + +# This is a heading + +This is some text. + +This is more text after a blank line. + +* This is a single list item. +* This is the next list item. + +* This is a new list. +* This is the next item on the new list. + +## This is a sub-heading + +> This is a blockquote. + +### This is a sub-sub-heading. + +=> gemini://gem.rest/ This is a link to GemRest +=> /somewhere + +```This is a preformatted block containing inner Gemtext. +=> gemini://fuwn.me/ This is a link. + +* This is a list item. + +> This is a blockquote. + +# This is a heading. + +## This is a sub-heading. + +### This is a sub-sub-heading. +``` + +That was a link without text."; |