diff options
author | nobody <nobody@zotlabs.com> | 2021-06-17 14:57:47 -0700 |
---|---|---|
committer | nobody <nobody@zotlabs.com> | 2021-06-17 14:57:47 -0700 |
commit | efda8aac1d7d90fd7eda4a449332eedf74342951 (patch) | |
tree | 3373c0579168776cccda5224b6b33ce59fa9b274 /vendor/league/html-to-markdown/src/Converter/TableConverter.php | |
parent | 686530c1873f98d724355bf3f456243b1b7fdadd (diff) | |
parent | a84cec4acddf6804a88fcda52e4437c91785dfb2 (diff) | |
download | volse-hubzilla-efda8aac1d7d90fd7eda4a449332eedf74342951.tar.gz volse-hubzilla-efda8aac1d7d90fd7eda4a449332eedf74342951.tar.bz2 volse-hubzilla-efda8aac1d7d90fd7eda4a449332eedf74342951.zip |
Merge branch 'dev' of https://framagit.org/hubzilla/core into dev
Diffstat (limited to 'vendor/league/html-to-markdown/src/Converter/TableConverter.php')
-rw-r--r-- | vendor/league/html-to-markdown/src/Converter/TableConverter.php | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/vendor/league/html-to-markdown/src/Converter/TableConverter.php b/vendor/league/html-to-markdown/src/Converter/TableConverter.php new file mode 100644 index 000000000..2e63e9a5b --- /dev/null +++ b/vendor/league/html-to-markdown/src/Converter/TableConverter.php @@ -0,0 +1,113 @@ +<?php + +declare(strict_types=1); + +namespace League\HTMLToMarkdown\Converter; + +use League\HTMLToMarkdown\Configuration; +use League\HTMLToMarkdown\ConfigurationAwareInterface; +use League\HTMLToMarkdown\ElementInterface; +use League\HTMLToMarkdown\PreConverterInterface; + +class TableConverter implements ConverterInterface, PreConverterInterface, ConfigurationAwareInterface +{ + /** @var Configuration */ + protected $config; + + public function setConfig(Configuration $config): void + { + $this->config = $config; + } + + /** @var array<string, string> */ + private static $alignments = [ + 'left' => ':--', + 'right' => '--:', + 'center' => ':-:', + ]; + + /** @var array<int, string>|null */ + private $columnAlignments = []; + + /** @var string|null */ + private $caption = null; + + public function preConvert(ElementInterface $element): void + { + $tag = $element->getTagName(); + // Only table cells and caption are allowed to contain content. + // Remove all text between other table elements. + if ($tag === 'th' || $tag === 'td' || $tag === 'caption') { + return; + } + + foreach ($element->getChildren() as $child) { + if ($child->isText()) { + $child->setFinalMarkdown(''); + } + } + } + + public function convert(ElementInterface $element): string + { + $value = $element->getValue(); + + switch ($element->getTagName()) { + case 'table': + $this->columnAlignments = []; + if ($this->caption) { + $side = $this->config->getOption('table_caption_side'); + if ($side === 'top') { + $value = $this->caption . "\n" . $value; + } elseif ($side === 'bottom') { + $value .= $this->caption; + } + + $this->caption = null; + } + + return $value . "\n"; + case 'caption': + $this->caption = \trim($value); + + return ''; + case 'tr': + $value .= "|\n"; + if ($this->columnAlignments !== null) { + $value .= '|' . \implode('|', $this->columnAlignments) . "|\n"; + + $this->columnAlignments = null; + } + + return $value; + case 'th': + case 'td': + if ($this->columnAlignments !== null) { + $align = $element->getAttribute('align'); + + $this->columnAlignments[] = self::$alignments[$align] ?? '---'; + } + + $value = \str_replace("\n", ' ', $value); + $value = \str_replace('|', $this->config->getOption('table_pipe_escape') ?? '\|', $value); + + return '| ' . \trim($value) . ' '; + case 'thead': + case 'tbody': + case 'tfoot': + case 'colgroup': + case 'col': + return $value; + default: + return ''; + } + } + + /** + * @return string[] + */ + public function getSupportedTags(): array + { + return ['table', 'tr', 'th', 'td', 'thead', 'tbody', 'tfoot', 'colgroup', 'col', 'caption']; + } +} |