Falcon_Converter::parse_element PHP Метод

parse_element() защищенный Метод

This is a huge glorified switch statement, which is the easiest way to handle giant numbers of elements like this. Some elements have their handlers split off into separate methods.
protected parse_element ( DOMElement $element ) : string
$element DOMElement Element to parse
Результат string Text representation of the element
    protected function parse_element($element)
    {
        switch ($element->tagName) {
            // Outlining
            case 'section':
            case 'article':
            case 'aside':
            case 'div':
            case 'span':
                return $this->parse_children($element);
                // Block
            // Block
            case 'h1':
            case 'h2':
            case 'h3':
            case 'h4':
            case 'h5':
            case 'h6':
                return "\n" . $this->heading($element) . "\n";
            case 'blockquote':
                return $this->blockquote($element) . "\n";
            case 'dt':
                return "\n\n" . $this->parse_children($element) . "\n";
            case 'dd':
                return '- ' . $this->parse_children($element) . "\n";
            case 'dl':
                return $this->parse_children($element) . "\n";
            case 'p':
                return $this->parse_children($element) . "\n";
            case 'pre':
                return "\n" . $this->indent($this->parse_children($element)) . "\n";
            case 'address':
                return "--\n" . $this->parse_children($element) . "\n--\n\n";
                // Lists
            // Lists
            case 'ul':
                array_push($this->list_stack, -1);
                $text = $this->indent($this->parse_children($element)) . "\n";
                array_pop($this->list_stack);
                return $text;
            case 'ol':
                array_push($this->list_stack, 0);
                $text = $this->indent($this->parse_children($element)) . "\n";
                array_pop($this->list_stack);
                return $text;
            case 'li':
                // Ordered list
                if (end($this->list_stack) >= 0) {
                    $this->list_stack[count($this->list_stack) - 1]++;
                    return $this->list_stack[count($this->list_stack) - 1] . '. ' . trim($this->parse_children($element));
                } else {
                    return '* ' . trim($this->parse_children($element));
                }
                // Tables
            // Tables
            case 'table':
                $table = $this->table($element);
                return $table;
            case 'tbody':
            case 'thead':
            case 'tr':
            case 'td':
            case 'th':
                return $this->parse_children($element);
                // Inline
            // Inline
            case 'a':
                $number = count($this->links);
                $this->links[] = $element->getAttribute('href');
                return $this->parse_children($element) . ' [' . $number . ']';
            case 'acronym':
            case 'abbr':
                return $this->parse_children($element) . ' (' . $element->getAttribute('title') . ')';
            case 'cite':
                return '-- ' . $this->parse_children($element);
            case 'code':
            case 'kbd':
            case 'tt':
            case 'var':
                return '`' . $this->parse_children($element) . '`';
            case 'em':
            case 'i':
                return '*' . $this->parse_children($element) . '*';
            case 'strong':
            case 'b':
                return '**' . $this->parse_children($element) . '**';
            case 'u':
            case 'ins':
                return '_' . $this->parse_children($element) . '_';
            case 'q':
                return '"' . $this->parse_children($element) . '"';
            case 'sub':
                return '_' . $this->parse_children($element);
            case 'sup':
                return '^' . $this->parse_children($element);
            case 'del':
            case 'strike':
            case 's':
                return '~~' . $this->parse_children($element) . '~~';
                // Ignored inline tags
            // Ignored inline tags
            case 'small':
            case 'big':
                return $this->parse_children($element);
                // Visual
            // Visual
            case 'br':
                return '';
            case 'hr':
                return '----';
        }
        return $this->document->saveHTML($element);
    }