aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php
diff options
context:
space:
mode:
authorMario Vavti <mario@mariovavti.com>2017-08-16 10:32:35 +0200
committerMario Vavti <mario@mariovavti.com>2017-08-16 10:32:35 +0200
commit4a7384bc0ce1893a432bf4b7d67bca23796fe9db (patch)
tree5623c66a3f66445284529d6207e4ab4a2edb2810 /vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php
parentc664a4bdcd1bd578f5ec3c2884f7c97e9f68d2d7 (diff)
parent90bc21f2d560d879d7eaf05a85af6d6dca53ebac (diff)
downloadvolse-hubzilla-4a7384bc0ce1893a432bf4b7d67bca23796fe9db.tar.gz
volse-hubzilla-4a7384bc0ce1893a432bf4b7d67bca23796fe9db.tar.bz2
volse-hubzilla-4a7384bc0ce1893a432bf4b7d67bca23796fe9db.zip
Merge branch '2.6RC'2.6
Diffstat (limited to 'vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php')
-rw-r--r--vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php124
1 files changed, 124 insertions, 0 deletions
diff --git a/vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php b/vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php
new file mode 100644
index 000000000..cf852bfcf
--- /dev/null
+++ b/vendor/league/html-to-markdown/src/Converter/ParagraphConverter.php
@@ -0,0 +1,124 @@
+<?php
+
+namespace League\HTMLToMarkdown\Converter;
+
+use League\HTMLToMarkdown\ElementInterface;
+
+class ParagraphConverter implements ConverterInterface
+{
+ /**
+ * @param ElementInterface $element
+ *
+ * @return string
+ */
+ public function convert(ElementInterface $element)
+ {
+ $value = $element->getValue();
+
+ $markdown = '';
+
+ $lines = preg_split('/\r\n|\r|\n/', $value);
+ foreach ($lines as $line) {
+ /*
+ * Some special characters need to be escaped based on the position that they appear
+ * The following function will deal with those special cases.
+ */
+ $markdown .= $this->escapeSpecialCharacters($line);
+ $markdown .= "\n";
+ }
+
+ return trim($markdown) !== '' ? rtrim($markdown) . "\n\n" : '';
+ }
+
+ /**
+ * @return string[]
+ */
+ public function getSupportedTags()
+ {
+ return array('p');
+ }
+
+ /**
+ * @param string $line
+ *
+ * @return string
+ */
+ private function escapeSpecialCharacters($line)
+ {
+ $line = $this->escapeFirstCharacters($line);
+ $line = $this->escapeOtherCharacters($line);
+ $line = $this->escapeOtherCharactersRegex($line);
+
+ return $line;
+ }
+
+ /**
+ * @param string $line
+ *
+ * @return string
+ */
+ private function escapeFirstCharacters($line)
+ {
+ $escapable = array(
+ '>',
+ '- ',
+ '+ ',
+ '--',
+ '~~~',
+ '---',
+ '- - -'
+ );
+
+ foreach ($escapable as $i) {
+ if (strpos(ltrim($line), $i) === 0) {
+ // Found a character that must be escaped, adding a backslash before
+ return '\\' . ltrim($line);
+ }
+ }
+
+ return $line;
+ }
+
+ /**
+ * @param string $line
+ *
+ * @return string
+ */
+ private function escapeOtherCharacters($line)
+ {
+ $escapable = array(
+ '<!--'
+ );
+
+ foreach ($escapable as $i) {
+ if (strpos($line, $i) !== false) {
+ // Found an escapable character, escaping it
+ $line = substr_replace($line, '\\', strpos($line, $i), 0);
+ }
+ }
+
+ return $line;
+ }
+
+ /**
+ * @param string $line
+ *
+ * @return string
+ */
+ private function escapeOtherCharactersRegex($line)
+ {
+ $regExs = array(
+ // Match numbers ending on ')' or '.' that are at the beginning of the line.
+ '/^[0-9]+(?=\)|\.)/'
+ );
+
+ foreach ($regExs as $i) {
+ if (preg_match($i, $line, $match)) {
+ // Matched an escapable character, adding a backslash on the string before the offending character
+ $line = substr_replace($line, '\\', strlen($match[0]), 0);
+ }
+ }
+
+ return $line;
+ }
+}