Advertisement
Guest User

Untitled

a guest
Jan 19th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.80 KB | None | 0 0
  1. fn buildTree(tokens: Vec<String>) -> Vec<DomElement> {
  2.     let mut elements: Vec<DomElement> = vec![];
  3.     let mut openTags: Vec<String> = vec![];
  4.  
  5.     let mut parent: Option<DomElement> = None;
  6.  
  7.     for token in tokens {
  8.         let tagName = getTagName(&token);
  9.         let tagType = getTagType(&token, &tagName);
  10.         let nodeType = getNodeType(&token, &tagName);
  11.  
  12.         match tagType {
  13.             TagType::Closing => match &parent {
  14.                 Some(item) => {
  15.                     let openTagIndex = &openTags.iter().rev().position(|s| s == &tagName);
  16.                     match openTagIndex {
  17.                         Some(index) => {
  18.                             if item.tagName == tagName.to_string() {
  19.                                 parent = Some((*item.parentNode.clone()).unwrap())
  20.                             } else {
  21.                                 let openingElement = getOpeningTag(&tagName, &Some(item.clone()));
  22.                                 match openingElement {
  23.                                     Some(el) => parent = Some((*el.parentNode).unwrap()),
  24.                                     None => {}
  25.                                 }
  26.                             }
  27.  
  28.                             openTags.remove(*index);
  29.                         }
  30.                         None => {}
  31.                     }
  32.                 }
  33.                 None => {}
  34.             },
  35.             _ => {
  36.                 let mut element = DomElement::new(nodeType);
  37.  
  38.                 match &parent {
  39.                     Some(item) => {
  40.                         element.parentNode = Box::from(parent);
  41.                     }
  42.                     None => {
  43.                         elements.push(element);
  44.                     }
  45.                 }
  46.             }
  47.         }
  48.     }
  49.  
  50.     return elements;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement