src/language-vue/parser-vue.js/parse
function parse(text /*, parsers, opts*/) {
  const rootObj = {
    tag: "root",
    attrs: [],
    unary: false,
    start: 0,
    contentStart: 0,
    contentEnd: text.length,
    end: text.length,
    children: [],
    comments: []
  };
  const objStack = [rootObj];
  let obj = rootObj;
  parseHTML(text, {
    start: function(tag, attrs, unary, start, end) {
      const newObj = {
        tag,
        attrs,
        unary,
        start,
        children: []
      };
      obj.children.push(newObj);
      if (unary) {
        newObj.end = end;
      } else {
        newObj.contentStart = end;
        objStack.push(newObj);
        obj = newObj;
      }
    },
    end: function(tag, start, end) {
      objStack.pop();
      obj.contentEnd = start;
      obj.end = end;
      obj = objStack[objStack.length - 1];
    }
  });
  return rootObj;
}