1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
<?php
namespace SMW\MediaWiki;
use Parser;
use StripState;
/**
* @license GNU GPL v2+
* @since 3.0
*
* @author mwjames
*/
class StripMarkerDecoder {
/**
* @var StripState
*/
private $stripState;
/**
* @var boolean
*/
private $isSupported = false;
/**
* @since 3.0
*
* @param StripState $stripState
*/
public function __construct( StripState $stripState ) {
$this->stripState = $stripState;
}
/**
* @since 3.0
*
* @param boolean $decoderState
*/
public function isSupported( $isSupported ) {
$this->isSupported = $isSupported;
}
/**
* @since 3.0
*
* @return boolean
*/
public function canUse() {
return $this->isSupported;
}
/**
* @since 3.0
*
* @param string $text
*
* @return boolean
*/
public function hasStripMarker( $text ) {
return strpos( $text, Parser::MARKER_SUFFIX );
}
/**
* @since 3.0
*
* @param string $value
*
* @return boolean
*/
public function decode( $value ) {
$hasStripMarker = false;
if ( $this->canUse() ) {
$hasStripMarker = $this->hasStripMarker( $value );
}
if ( $hasStripMarker ) {
$value = $this->unstrip( $value );
}
return $value;
}
/**
* @since 3.0
*
* @return text
*/
public function unstrip( $text ) {
// Escape the text case to avoid any HTML elements
// cause an issue during parsing
return str_replace(
[ '<', '>', ' ', '[', '{', '=', "'", ':', "\n" ],
[ '<', '>', ' ', '[', '{', '=', ''', ':', "<br />" ],
$this->doUnstrip( $text )
);
}
public function doUnstrip( $text ) {
if ( ( $value = $this->stripState->unstripNoWiki( $text ) ) !== '' && !$this->hasStripMarker( $value ) ) {
return $this->addNoWikiToUnstripValue( $value );
}
if ( ( $value = $this->stripState->unstripGeneral( $text ) ) !== '' && !$this->hasStripMarker( $value ) ) {
return $value;
}
return $this->doUnstrip( $value );
}
private function addNoWikiToUnstripValue( $text ) {
return '<nowiki>' . $text . '</nowiki>';
}
}
|