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);
}