pub fn find_close(htm: &str, tag: impl AsRef<str>) -> usize {
let tag = tag.as_ref();
let mut stack = 0;
let htm = htm.to_lowercase();
let mut iter = htm.char_indices();
while let Some((_, c)) = iter.next() {
if c == '<' {
while let Some((_, c)) = iter.next() {
if c.is_whitespace() {
continue;
}
if c == '/' {
let mut t = String::new();
for (pos, c) in iter.by_ref() {
if c == '>' {
if t.trim() == tag {
if stack == 0 {
return pos + 1;
}
stack -= 1;
}
break;
}
t.push(c);
}
} else {
let mut t = String::from(c);
for (_, c) in iter.by_ref() {
if c == '>' {
if t.trim() == tag {
stack += 1;
}
break;
}
t.push(c);
}
}
break;
}
}
}
0
}