Converter::encode()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 2
nop 4
dl 0
loc 11
ccs 6
cts 6
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Pilipinews\Common;
4
5
use League\HTMLToMarkdown\Environment;
6
use League\HTMLToMarkdown\Converter\CodeConverter;
7
use League\HTMLToMarkdown\Converter\CommentConverter;
8
use League\HTMLToMarkdown\Converter\ConverterInterface;
9
use League\HTMLToMarkdown\Converter\DefaultConverter;
10
use League\HTMLToMarkdown\Converter\DivConverter;
11
use League\HTMLToMarkdown\Converter\HardBreakConverter;
12
use League\HTMLToMarkdown\Converter\HorizontalRuleConverter;
13
use League\HTMLToMarkdown\Converter\PreformattedConverter;
14
use League\HTMLToMarkdown\Converter\TextConverter;
15
use League\HTMLToMarkdown\HtmlConverter;
16
use Pilipinews\Common\Converters\BlockquoteConverter;
17
use Pilipinews\Common\Converters\EmphasisConverter;
18
use Pilipinews\Common\Converters\HeaderConverter;
19
use Pilipinews\Common\Converters\ImageConverter;
20
use Pilipinews\Common\Converters\LinkConverter;
21
use Pilipinews\Common\Converters\ListBlockConverter;
22
use Pilipinews\Common\Converters\ListItemConverter;
23
use Pilipinews\Common\Converters\ParagraphConverter;
24
use Pilipinews\Common\Converters\TableBlockConverter;
25
use Pilipinews\Common\Converters\TableDataConverter;
26
use Pilipinews\Common\Converters\TableRowConverter;
27
28
/**
29
 * Converter
30
 *
31
 * @package Pilipinews
32
 * @author  Rougin Gutib <[email protected]>
33
 */
34
class Converter extends HtmlConverter
35
{
36
    /**
37
     * Initializes the converter instance
38
     */
39 15
    public function __construct()
40
    {
41 15
        $environment = new Environment;
42
43 15
        $environment->addConverter(new BlockquoteConverter);
44 15
        $environment->addConverter(new CodeConverter);
45 15
        $environment->addConverter(new CommentConverter);
46 15
        $environment->addConverter(new DivConverter);
47 15
        $environment->addConverter(new EmphasisConverter);
48 15
        $environment->addConverter(new HardBreakConverter);
49 15
        $environment->addConverter(new HeaderConverter);
50 15
        $environment->addConverter(new HorizontalRuleConverter);
51 15
        $environment->addConverter(new ImageConverter);
52 15
        $environment->addConverter(new LinkConverter);
53 15
        $environment->addConverter(new ListBlockConverter);
54 15
        $environment->addConverter(new ListItemConverter);
55 15
        $environment->addConverter(new ParagraphConverter);
56 15
        $environment->addConverter(new PreformattedConverter);
57 15
        $environment->addConverter(new TextConverter);
58 15
        $environment->addConverter(new TableBlockConverter);
59 15
        $environment->addConverter(new TableDataConverter);
60 15
        $environment->addConverter(new TableRowConverter);
61
62 15
        $environment->getConfig()->setOption('bold_style', '');
63 15
        $environment->getConfig()->setOption('header_style', 'atx');
64 15
        $environment->getConfig()->setOption('italic_style', '');
65 15
        $environment->getConfig()->setOption('strip_tags', true);
66 15
        $environment->getConfig()->setOption('suppress_errors', true);
67 15
        $environment->getConfig()->setOption('hard_break', true);
68
69 15
        parent::__construct($environment);
70 15
    }
71
72
    /**
73
     * Parses the HTML into Markdown format.
74
     *
75
     * @param  string $html
76
     * @return string
77
     */
78 15
    public function convert($html)
79
    {
80 15
        $html = parent::convert((string) $html);
81
82 15
        $html = $this->encode('--', '-', $html, false);
83 15
        $html = $this->encode('\#', '#', $html);
84 15
        $html = $this->encode('\*', '*', $html);
85 15
        $html = $this->encode('\_', '_', $html);
86 15
        $html = $this->encode('•', '*', $html);
87 15
        $html = $this->encode('…', '...', $html);
88
89 15
        $html = $this->encode('\[', '[', (string) $html);
90 15
        $html = $this->encode('\]', ']', (string) $html);
91 15
        $html = str_replace(array('—', '–', '\-'), '-', $html);
92 15
        $html = str_replace(array('“', '”'), '"', $html);
93 15
        $html = str_replace(array('’', '‘'), "'", $html);
94 15
        $html = str_replace("\n\n\n", "\n\n", $html);
95 15
        $html = str_replace("\n ", "\n", (string) $html);
96
97 15
        $html = htmlspecialchars_decode($html);
98
99 15
        return str_replace('\.', '.', (string) $html);
100
    }
101
102
    /**
103
     * Converts the specified string.
104
     *
105
     * @param  string  $from
106
     * @param  string  $text
107
     * @param  string  $html
108
     * @param  boolean $whole
109
     * @return string
110
     */
111 15
    protected function encode($from, $text, $html, $whole = true)
112
    {
113 15
        $html = str_replace($from . ' ', $text . ' ', $html);
114
115 15
        $html = str_replace(' ' . $from, ' ' . $text, $html);
116
117 15
        $html = str_replace('>' . $from, '>' . $text, $html);
118
119 15
        $html = str_replace($from . '<', $text . '<', $html);
120
121 15
        return $whole ? str_replace($from, $text, $html) : $html;
122
    }
123
}
124