use local namespaces

This commit is contained in:
yggverse 2025-03-17 02:29:49 +02:00
parent d8f692d807
commit 496b0036ff

View file

@ -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,