use super::Element;
pub(crate) mod base_parsers;
mod desktop_subset;
pub mod find_range;
pub mod hashtag_content_char_ranges;
mod markdown_elements;
mod text_elements;
pub(crate) fn parse_only_text(input: &str) -> std::vec::Vec<Element> {
let mut result = Vec::new();
let mut remaining = input;
while !remaining.is_empty() {
if let Ok((rest, element)) = text_elements::parse_text_element(remaining, None) {
remaining = rest;
result.push(element);
} else if let Ok((rest, element)) = text_elements::text(remaining) {
result.push(element);
remaining = rest;
} else {
result.push(Element::Text(remaining));
break;
}
}
result
}
pub(crate) fn parse_all(input: &str) -> std::vec::Vec<Element> {
let mut result = Vec::new();
let mut remaining = input;
while !remaining.is_empty() {
if let Ok((rest, element)) = markdown_elements::parse_element(remaining, None) {
remaining = rest;
result.push(element);
} else if let Ok((rest, element)) = markdown_elements::markdown_text(remaining) {
result.push(element);
remaining = rest;
} else {
result.push(Element::Text(remaining));
break;
}
}
result
}
pub(crate) fn parse_desktop_set(input: &str) -> std::vec::Vec<Element> {
let mut result = Vec::new();
let mut remaining = input;
while !remaining.is_empty() {
if let Ok((rest, element)) = desktop_subset::parse_element(remaining, None) {
remaining = rest;
result.push(element);
} else if let Ok((rest, element)) = desktop_subset::desktopset_text(remaining) {
result.push(element);
remaining = rest;
} else {
result.push(Element::Text(remaining));
break;
}
}
result
}