ferencd@0: // deals with increasing the
    tags, by trying to identify lines starting with spaces/tabs ferencd@0: pub fn deal_with_list_nesting(orig_ip: &String, olist_space_count: &mut i8, olist_count: &mut i8, html_lines: &mut Vec, i: i8, open_tag: &str, close_tag: &str) { ferencd@0: let mut start = "\t"; ferencd@0: if orig_ip.starts_with(" ") { ferencd@0: start = " "; ferencd@0: } ferencd@0: let mut current_space_count:i8 = i; ferencd@0: let mut oip_cp = &orig_ip[start.len() ..]; ferencd@0: ferencd@0: while oip_cp.starts_with(start) { ferencd@0: oip_cp = &oip_cp[start.len() ..]; ferencd@0: current_space_count += 1; ferencd@0: } ferencd@0: ferencd@0: if *olist_space_count != current_space_count { ferencd@0: if *olist_space_count < current_space_count { ferencd@0: *olist_count += 1; ferencd@0: html_lines.push(open_tag.to_string()); ferencd@0: } else { ferencd@0: *olist_count -= 1; ferencd@0: html_lines.push(close_tag.to_string()); ferencd@0: } ferencd@0: *olist_space_count = current_space_count; ferencd@0: } ferencd@0: } ferencd@0: ferencd@0: // closes the opened lists with the given close tag ferencd@0: pub fn close_opened_lists(html_lines: &mut Vec, list_nest_count: &mut i8, list_space_count: &mut i8, close_tag: &str) { ferencd@0: println!("For {} nestcount={}",close_tag, list_nest_count); ferencd@0: while *list_nest_count > 0 { ferencd@0: html_lines.push(close_tag.to_string()); ferencd@0: *list_nest_count -= 1; ferencd@0: } ferencd@0: *list_space_count = 0; ferencd@0: } ferencd@0: ferencd@0: // deals with some list, checks lines that start with the given start_checker ferencd@0: pub fn deal_with_list(mut html_lines: &mut Vec, mut list_nest_count: &mut i8, ferencd@0: mut list_space_count: &mut i8, orig_ip: &String, ferencd@0: tip:&str, list_start_checker: C, ferencd@0: open_tag: &str, close_tag: &str, list_delim_char: char) ferencd@0: where C: Fn(&str, isize) -> bool ferencd@0: { ferencd@0: let mut cidxc:isize = 0; ferencd@0: if list_start_checker(tip, cidxc) { ferencd@0: println!("list start: {}", tip); ferencd@0: while list_start_checker(tip, cidxc) { ferencd@0: println!("list start: {}, {}", tip, cidxc); ferencd@0: cidxc = cidxc + 1; ferencd@0: } ferencd@0: if tip.chars().nth(cidxc.try_into().unwrap()).unwrap() == list_delim_char { ferencd@0: // this is indeed starting a list ferencd@0: if list_delim_char == '.' { // ordered list ferencd@0: let nr = tip[..cidxc.try_into().unwrap()].to_string().parse::().unwrap(); ferencd@0: if nr == 1 { ferencd@0: if *list_nest_count == 0 { // the very first list ferencd@0: *list_nest_count = 1; ferencd@0: html_lines.push(open_tag.to_string()); ferencd@0: } else { // see if we start with a tab or not ferencd@0: resolve_list_entry(&mut html_lines, &mut list_nest_count, &mut list_space_count, orig_ip, open_tag, close_tag) ferencd@0: } ferencd@0: } else { ferencd@0: // the number is not one. try to see if it is a different list or continues ferencd@0: resolve_list_entry(&mut html_lines, &mut list_nest_count, &mut list_space_count, orig_ip, open_tag, close_tag) ferencd@0: } ferencd@0: } else { // unordered list ferencd@0: if *list_nest_count == 0 { // the very first list ferencd@0: *list_nest_count = 1; ferencd@0: html_lines.push(open_tag.to_string()); ferencd@0: } else { ferencd@0: resolve_list_entry(&mut html_lines, &mut list_nest_count, &mut list_space_count, orig_ip, open_tag, close_tag) ferencd@0: } ferencd@0: } ferencd@0: } else { ferencd@0: close_opened_lists(&mut html_lines, &mut list_nest_count, &mut list_space_count, close_tag); ferencd@0: } ferencd@0: } else { ferencd@0: close_opened_lists(&mut html_lines, &mut list_nest_count, &mut list_space_count, close_tag); ferencd@0: } ferencd@0: } ferencd@0: ferencd@0: // closes the
      tags opened ferencd@0: pub fn insert_list_entry(list_counter: &mut i8, tip: &str, inted: &mut String, list_start_checker:C, sep_char: char) ferencd@0: where C: Fn(&str, isize) -> bool ferencd@0: { ferencd@0: if *list_counter != 0 { ferencd@0: let mut cidxc = 0; ferencd@0: if list_start_checker(inted, cidxc) { ferencd@0: while list_start_checker(tip, cidxc) { ferencd@0: cidxc = cidxc + 1; ferencd@0: } ferencd@0: if tip.chars().nth(cidxc.try_into().unwrap()).unwrap() == sep_char { ferencd@0: cidxc += 1; ferencd@0: } ferencd@0: *inted = "
    1. ".to_owned() + &inted[cidxc.try_into().unwrap()..].trim(); ferencd@0: } else { ferencd@0: *inted = "
    2. ".to_owned() + &inted; ferencd@0: } ferencd@0: } ferencd@0: } ferencd@0: ferencd@0: // resolves a list entry ferencd@0: pub fn resolve_list_entry(mut html_lines: &mut Vec, mut olist_count: &mut i8, mut olist_space_count: &mut i8, orig_ip: &String, open_tag: &str, close_tag: &str) ferencd@0: { ferencd@0: if orig_ip.starts_with("\t") || orig_ip.starts_with(" ") { ferencd@0: deal_with_list_nesting(orig_ip, &mut olist_space_count, &mut olist_count, &mut html_lines, 1, open_tag, close_tag); ferencd@0: } else { // maybe we slipped back one ol ferencd@0: while *olist_count > 1 { ferencd@0: *olist_count -= 1; ferencd@0: html_lines.push(close_tag.to_string()); ferencd@0: } ferencd@0: } ferencd@0: }