Copie de Tumblr sur Shaarli
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

79 Zeilen
1.9 KiB

  1. <?php
  2. namespace League\HTMLToMarkdown\Converter;
  3. use League\HTMLToMarkdown\Configuration;
  4. use League\HTMLToMarkdown\ConfigurationAwareInterface;
  5. use League\HTMLToMarkdown\ElementInterface;
  6. class HeaderConverter implements ConverterInterface, ConfigurationAwareInterface
  7. {
  8. const STYLE_ATX = 'atx';
  9. const STYLE_SETEXT = 'setext';
  10. /**
  11. * @var Configuration
  12. */
  13. protected $config;
  14. /**
  15. * @param Configuration $config
  16. */
  17. public function setConfig(Configuration $config)
  18. {
  19. $this->config = $config;
  20. }
  21. /**
  22. * @param ElementInterface $element
  23. *
  24. * @return string
  25. */
  26. public function convert(ElementInterface $element)
  27. {
  28. $level = (int) substr($element->getTagName(), 1, 1);
  29. $style = $this->config->getOption('header_style', self::STYLE_SETEXT);
  30. if (($level === 1 || $level === 2) && !$element->isDescendantOf('blockquote') && $style === self::STYLE_SETEXT) {
  31. return $this->createSetextHeader($level, $element->getValue());
  32. } else {
  33. return $this->createAtxHeader($level, $element->getValue());
  34. }
  35. }
  36. /**
  37. * @return string[]
  38. */
  39. public function getSupportedTags()
  40. {
  41. return array('h1', 'h2', 'h3', 'h4', 'h5', 'h6');
  42. }
  43. /**
  44. * @param int $level
  45. * @param string $content
  46. *
  47. * @return string
  48. */
  49. private function createSetextHeader($level, $content)
  50. {
  51. $length = (function_exists('mb_strlen')) ? mb_strlen($content, 'utf-8') : strlen($content);
  52. $underline = ($level === 1) ? '=' : '-';
  53. return $content . "\n" . str_repeat($underline, $length) . "\n\n";
  54. }
  55. /**
  56. * @param int $level
  57. * @param string $content
  58. *
  59. * @return string
  60. */
  61. private function createAtxHeader($level, $content)
  62. {
  63. $prefix = str_repeat('#', $level) . ' ';
  64. return $prefix . $content . "\n\n";
  65. }
  66. }