# File lib/html5/html5parser/in_body_phase.rb, line 137
    def startTagListItem(name, attributes)
      endTagP('p') if in_scope?('p')
      stopNames = {'li' => ['li'], 'dd' => ['dd', 'dt'], 'dt' => ['dd', 'dt']}
      stopName = stopNames[name]

      @tree.open_elements.reverse.each_with_index do |node, i|
        if stopName.include?(node.name)
          poppedNodes = (0..i).collect { @tree.open_elements.pop }
          if i >= 1
            parse_error(
                i == 1 ? "missing-end-tag" : "missing-end-tags",
                {"name" => poppedNodes[0..-1].collect{|n| n.name}.join(", ")})

          end
          break
        end

        # Phrasing elements are all non special, non scoping, non
        # formatting elements
        break if ((SPECIAL_ELEMENTS + SCOPING_ELEMENTS).include?(node.name) && !%w[address div].include?(node.name))
      end

      # Always insert an <li> element.
      @tree.insert_element(name, attributes)
    end