aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-06-19 09:17:36 +0000
committerFuwn <[email protected]>2024-06-19 09:17:36 +0000
commit6d92ea622bfc98a831a9b94f19896fe0c215f794 (patch)
tree34a8341128580cc190caecb16e9c62e2eb1f72ec /src
parentfeat(germ): bump version (diff)
downloadgerm-0.4.2.tar.xz
germ-0.4.2.zip
fix(ast): parse preformatted gemtext as preformatted contentv0.4.2
Diffstat (limited to 'src')
-rw-r--r--src/ast/container.rs12
-rw-r--r--src/lib.rs44
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 {
diff --git a/src/lib.rs b/src/lib.rs
index b7156a1..aa193f1 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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.";