mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-03-31 16:45:27 +00:00
use local namespaces
This commit is contained in:
parent
d8f692d807
commit
496b0036ff
1 changed files with 47 additions and 49 deletions
|
|
@ -13,11 +13,6 @@ use tag::Tag;
|
||||||
|
|
||||||
use super::{ItemAction, WindowAction};
|
use super::{ItemAction, WindowAction};
|
||||||
use crate::app::browser::window::action::Position;
|
use crate::app::browser::window::action::Position;
|
||||||
use ggemtext::line::{
|
|
||||||
code::{self, *},
|
|
||||||
header::{Header, Level},
|
|
||||||
link::Link,
|
|
||||||
};
|
|
||||||
use gtk::{
|
use gtk::{
|
||||||
EventControllerMotion, GestureClick, TextBuffer, TextTag, TextView, TextWindowType,
|
EventControllerMotion, GestureClick, TextBuffer, TextTag, TextView, TextWindowType,
|
||||||
UriLauncher, Window, WrapMode,
|
UriLauncher, Window, WrapMode,
|
||||||
|
|
@ -102,10 +97,11 @@ impl Gemini {
|
||||||
// Disable multiline format on at least one closing tag not found
|
// Disable multiline format on at least one closing tag not found
|
||||||
// gemini://bbs.geminispace.org/s/Gemini/26031
|
// gemini://bbs.geminispace.org/s/Gemini/26031
|
||||||
let is_multiline_enabled = {
|
let is_multiline_enabled = {
|
||||||
|
use ggemtext::line::code::{self};
|
||||||
let mut t: usize = 0;
|
let mut t: usize = 0;
|
||||||
for l in gemtext.lines() {
|
for l in gemtext.lines() {
|
||||||
if (l.starts_with(code::TAG) || l.ends_with(code::TAG))
|
if (l.starts_with(code::TAG) || l.ends_with(code::TAG))
|
||||||
&& inline::Gemtext::as_value(l).is_none()
|
&& code::inline::Gemtext::as_value(l).is_none()
|
||||||
{
|
{
|
||||||
t += 1;
|
t += 1;
|
||||||
}
|
}
|
||||||
|
|
@ -117,7 +113,7 @@ impl Gemini {
|
||||||
for line in gemtext.lines() {
|
for line in gemtext.lines() {
|
||||||
// Is inline code
|
// Is inline code
|
||||||
{
|
{
|
||||||
if let Some(code) = inline::Gemtext::as_value(line) {
|
if let Some(code) = ggemtext::line::code::inline::Gemtext::as_value(line) {
|
||||||
// Try auto-detect code syntax for given `value` @TODO optional
|
// Try auto-detect code syntax for given `value` @TODO optional
|
||||||
match syntax.highlight(code, None) {
|
match syntax.highlight(code, None) {
|
||||||
Ok(highlight) => {
|
Ok(highlight) => {
|
||||||
|
|
@ -157,6 +153,7 @@ impl Gemini {
|
||||||
|
|
||||||
// Is multiline code
|
// Is multiline code
|
||||||
if is_multiline_enabled {
|
if is_multiline_enabled {
|
||||||
|
use ggemtext::line::code::Multiline;
|
||||||
match multiline {
|
match multiline {
|
||||||
None => {
|
None => {
|
||||||
// Open tag found
|
// Open tag found
|
||||||
|
|
@ -240,26 +237,31 @@ impl Gemini {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is header
|
// Is header
|
||||||
if let Some(header) = Header::parse(line) {
|
{
|
||||||
buffer.insert_with_tags(
|
use ggemtext::line::{Header, header::Level};
|
||||||
&mut buffer.end_iter(),
|
if let Some(header) = Header::parse(line) {
|
||||||
&header.value,
|
buffer.insert_with_tags(
|
||||||
&[match header.level {
|
&mut buffer.end_iter(),
|
||||||
Level::H1 => &tag.h1,
|
&header.value,
|
||||||
Level::H2 => &tag.h2,
|
&[match header.level {
|
||||||
Level::H3 => &tag.h3,
|
Level::H1 => &tag.h1,
|
||||||
}],
|
Level::H2 => &tag.h2,
|
||||||
);
|
Level::H3 => &tag.h3,
|
||||||
buffer.insert(&mut buffer.end_iter(), NEW_LINE);
|
}],
|
||||||
|
);
|
||||||
|
buffer.insert(&mut buffer.end_iter(), NEW_LINE);
|
||||||
|
|
||||||
if title.is_none() {
|
if title.is_none() {
|
||||||
title = Some(header.value.clone());
|
title = Some(header.value.clone());
|
||||||
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is link
|
// Is link
|
||||||
if let Some(link) = Link::from(line, Some(base), Some(&TimeZone::local())) {
|
if let Some(link) =
|
||||||
|
ggemtext::line::Link::from(line, Some(base), Some(&TimeZone::local()))
|
||||||
|
{
|
||||||
let mut alt = Vec::new();
|
let mut alt = Vec::new();
|
||||||
|
|
||||||
if link.uri.scheme() != base.scheme() {
|
if link.uri.scheme() != base.scheme() {
|
||||||
|
|
@ -297,38 +299,34 @@ impl Gemini {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is list
|
// Is list
|
||||||
{
|
|
||||||
use ggemtext::line::list::Gemtext;
|
if let Some(value) = ggemtext::line::list::Gemtext::as_value(line) {
|
||||||
if let Some(value) = line.as_value() {
|
buffer.insert_with_tags(
|
||||||
buffer.insert_with_tags(
|
&mut buffer.end_iter(),
|
||||||
&mut buffer.end_iter(),
|
&format!("• {value}"),
|
||||||
&format!("• {value}"),
|
&[&tag.list],
|
||||||
&[&tag.list],
|
);
|
||||||
);
|
buffer.insert(&mut buffer.end_iter(), NEW_LINE);
|
||||||
buffer.insert(&mut buffer.end_iter(), NEW_LINE);
|
continue;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is quote
|
// Is quote
|
||||||
{
|
|
||||||
use ggemtext::line::quote::Gemtext;
|
if let Some(quote) = ggemtext::line::quote::Gemtext::as_value(line) {
|
||||||
if let Some(quote) = line.as_value() {
|
// Show quote indicator if last line is not quote (to prevent duplicates)
|
||||||
// Show quote indicator if last line is not quote (to prevent duplicates)
|
if !is_line_after_quote {
|
||||||
if !is_line_after_quote {
|
// Show only if the icons resolved for default `Display`
|
||||||
// Show only if the icons resolved for default `Display`
|
if let Some(ref icon) = icon {
|
||||||
if let Some(ref icon) = icon {
|
buffer.insert_paintable(&mut buffer.end_iter(), &icon.quote);
|
||||||
buffer.insert_paintable(&mut buffer.end_iter(), &icon.quote);
|
buffer.insert(&mut buffer.end_iter(), NEW_LINE);
|
||||||
buffer.insert(&mut buffer.end_iter(), NEW_LINE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
buffer.insert_with_tags(&mut buffer.end_iter(), quote, &[&tag.quote]);
|
|
||||||
buffer.insert(&mut buffer.end_iter(), NEW_LINE);
|
|
||||||
is_line_after_quote = true;
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
is_line_after_quote = false;
|
|
||||||
}
|
}
|
||||||
|
buffer.insert_with_tags(&mut buffer.end_iter(), quote, &[&tag.quote]);
|
||||||
|
buffer.insert(&mut buffer.end_iter(), NEW_LINE);
|
||||||
|
is_line_after_quote = true;
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
is_line_after_quote = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nothing match custom tags above,
|
// Nothing match custom tags above,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue