mirror of
https://github.com/YGGverse/ggemtext.git
synced 2026-03-31 17:15:33 +00:00
handle Code::multiline_continue_from result
This commit is contained in:
parent
7f6c459065
commit
8c00d4bf89
6 changed files with 50 additions and 8 deletions
|
|
@ -54,9 +54,9 @@ match Code::inline_from("```inline```") {
|
||||||
``` rust
|
``` rust
|
||||||
match Code::multiline_begin_from("```alt") {
|
match Code::multiline_begin_from("```alt") {
|
||||||
Some(mut multiline) => {
|
Some(mut multiline) => {
|
||||||
Code::multiline_continue_from(&mut multiline, "line 1");
|
assert!(Code::multiline_continue_from(&mut multiline, "line 1").is_ok());
|
||||||
Code::multiline_continue_from(&mut multiline, "line 2");
|
assert!(Code::multiline_continue_from(&mut multiline, "line 2").is_ok());
|
||||||
Code::multiline_continue_from(&mut multiline, "```"); // complete
|
assert!(Code::multiline_continue_from(&mut multiline, "```").is_ok()); // complete
|
||||||
|
|
||||||
assert!(multiline.completed);
|
assert!(multiline.completed);
|
||||||
assert_eq!(multiline.alt, Some("alt".into()));
|
assert_eq!(multiline.alt, Some("alt".into()));
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
|
pub mod error;
|
||||||
pub mod inline;
|
pub mod inline;
|
||||||
pub mod multiline;
|
pub mod multiline;
|
||||||
|
|
||||||
|
pub use error::Error;
|
||||||
use inline::Inline;
|
use inline::Inline;
|
||||||
use multiline::Multiline;
|
use multiline::Multiline;
|
||||||
|
|
||||||
|
|
@ -19,7 +21,10 @@ impl Code {
|
||||||
Multiline::begin_from(line)
|
Multiline::begin_from(line)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn multiline_continue_from(this: &mut Multiline, line: &str) {
|
pub fn multiline_continue_from(this: &mut Multiline, line: &str) -> Result<(), Error> {
|
||||||
Multiline::continue_from(this, line)
|
match Multiline::continue_from(this, line) {
|
||||||
|
Ok(()) => Ok(()),
|
||||||
|
Err(e) => Err(Error::Multiline(e)),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
16
src/line/code/error.rs
Normal file
16
src/line/code/error.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
use std::fmt::{Display, Formatter, Result};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum Error {
|
||||||
|
Multiline(crate::line::code::multiline::Error),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for Error {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> Result {
|
||||||
|
match self {
|
||||||
|
Self::Multiline(e) => {
|
||||||
|
write!(f, "Multiline error: {e}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
pub mod error;
|
||||||
|
pub use error::Error;
|
||||||
|
|
||||||
use glib::GString;
|
use glib::GString;
|
||||||
|
|
||||||
pub struct Multiline {
|
pub struct Multiline {
|
||||||
|
|
@ -28,10 +31,10 @@ impl Multiline {
|
||||||
|
|
||||||
/// Continue preformatted buffer from line,
|
/// Continue preformatted buffer from line,
|
||||||
/// set `completed` as True on close tag found
|
/// set `completed` as True on close tag found
|
||||||
pub fn continue_from(&mut self, line: &str) {
|
pub fn continue_from(&mut self, line: &str) -> Result<(), Error> {
|
||||||
// Make sure buffer not completed yet
|
// Make sure buffer not completed yet
|
||||||
if self.completed {
|
if self.completed {
|
||||||
panic!("Could not continue as completed") // @TODO handle
|
return Err(Error::Completed);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Line contain close tag
|
// Line contain close tag
|
||||||
|
|
@ -42,5 +45,7 @@ impl Multiline {
|
||||||
// Append data to the buffer, trim close tag on exists
|
// Append data to the buffer, trim close tag on exists
|
||||||
self.buffer
|
self.buffer
|
||||||
.push(GString::from(line.trim_end_matches("```")));
|
.push(GString::from(line.trim_end_matches("```")));
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
16
src/line/code/multiline/error.rs
Normal file
16
src/line/code/multiline/error.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
use std::fmt::{Display, Formatter, Result};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum Error {
|
||||||
|
Completed,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for Error {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> Result {
|
||||||
|
match self {
|
||||||
|
Self::Completed => {
|
||||||
|
write!(f, "Could not continue as completed!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -50,7 +50,7 @@ fn gemtext() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(ref mut result) => {
|
Some(ref mut result) => {
|
||||||
Code::multiline_continue_from(result, line);
|
assert!(Code::multiline_continue_from(result, line).is_ok());
|
||||||
if result.completed {
|
if result.completed {
|
||||||
code_multiline.push(code_multiline_buffer.take().unwrap());
|
code_multiline.push(code_multiline_buffer.take().unwrap());
|
||||||
code_multiline_buffer = None;
|
code_multiline_buffer = None;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue