GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( da7a20...3096de )
by Hannes
09:34 queued 03:44
created
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php 2 patches
Doc Comments   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -53,8 +53,8 @@  discard block
 block discarded – undo
53 53
 
54 54
     /**
55 55
      * Sets default column and row size for textareas in sub-printers
56
-     * @param $cols Integer columns of textarea, null to use default
57
-     * @param $rows Integer rows of textarea, null to use default
56
+     * @param integer $cols Integer columns of textarea, null to use default
57
+     * @param integer $rows Integer rows of textarea, null to use default
58 58
      */
59 59
     public function setTextareaDimensions($cols = null, $rows = null)
60 60
     {
@@ -84,7 +84,7 @@  discard block
 block discarded – undo
84 84
 
85 85
     /**
86 86
      * Returns HTML output for a configuration form
87
-     * @param HTMLPurifier_Config|array $config Configuration object of current form state, or an array
87
+     * @param HTMLPurifier_Config $config Configuration object of current form state, or an array
88 88
      *        where [0] has an HTML namespace and [1] is being rendered.
89 89
      * @param array|bool $allowed Optional namespace(s) and directives to restrict form to.
90 90
      * @param bool $render_controls
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -71,7 +71,7 @@  discard block
 block discarded – undo
71 71
      */
72 72
     public static function getCSS()
73 73
     {
74
-        return file_get_contents(HTMLPURIFIER_PREFIX . '/HTMLPurifier/Printer/ConfigForm.css');
74
+        return file_get_contents(HTMLPURIFIER_PREFIX.'/HTMLPurifier/Printer/ConfigForm.css');
75 75
     }
76 76
 
77 77
     /**
@@ -79,7 +79,7 @@  discard block
 block discarded – undo
79 79
      */
80 80
     public static function getJavaScript()
81 81
     {
82
-        return file_get_contents(HTMLPURIFIER_PREFIX . '/HTMLPurifier/Printer/ConfigForm.js');
82
+        return file_get_contents(HTMLPURIFIER_PREFIX.'/HTMLPurifier/Printer/ConfigForm.js');
83 83
     }
84 84
 
85 85
     /**
@@ -107,7 +107,7 @@  discard block
 block discarded – undo
107 107
         $all = array();
108 108
         foreach ($allowed as $key) {
109 109
             list($ns, $directive) = $key;
110
-            $all[$ns][$directive] = $config->get($ns . '.' . $directive);
110
+            $all[$ns][$directive] = $config->get($ns.'.'.$directive);
111 111
         }
112 112
 
113 113
         $ret = '';
@@ -163,7 +163,7 @@  discard block
 block discarded – undo
163 163
             if (!$this->compress || (strlen($directive) < $this->compress)) {
164 164
                 $directive_disp = $directive;
165 165
             } else {
166
-                $directive_disp = substr($directive, 0, $this->compress - 2) . '...';
166
+                $directive_disp = substr($directive, 0, $this->compress - 2).'...';
167 167
                 $attr['title'] = $directive;
168 168
             }
169 169
 
@@ -251,14 +251,14 @@  discard block
 block discarded – undo
251 251
             'type' => 'checkbox',
252 252
             'value' => '1',
253 253
             'class' => 'null-toggle',
254
-            'name' => "$name" . "[Null_$ns.$directive]",
254
+            'name' => "$name"."[Null_$ns.$directive]",
255 255
             'id' => "$name:Null_$ns.$directive",
256 256
             'onclick' => "toggleWriteability('$name:$ns.$directive',checked)" // INLINE JAVASCRIPT!!!!
257 257
         );
258 258
         if ($this->obj instanceof HTMLPurifier_Printer_ConfigForm_bool) {
259 259
             // modify inline javascript slightly
260 260
             $attr['onclick'] =
261
-                "toggleWriteability('$name:Yes_$ns.$directive',checked);" .
261
+                "toggleWriteability('$name:Yes_$ns.$directive',checked);".
262 262
                 "toggleWriteability('$name:No_$ns.$directive',checked)";
263 263
         }
264 264
         if ($value === null) {
@@ -327,7 +327,7 @@  discard block
 block discarded – undo
327 327
                 case HTMLPurifier_VarParser::HASH:
328 328
                     $nvalue = '';
329 329
                     foreach ($value as $i => $v) {
330
-                        $nvalue .= "$i:$v" . PHP_EOL;
330
+                        $nvalue .= "$i:$v".PHP_EOL;
331 331
                     }
332 332
                     $value = $nvalue;
333 333
                     break;
@@ -340,7 +340,7 @@  discard block
 block discarded – undo
340 340
             $value = serialize($value);
341 341
         }
342 342
         $attr = array(
343
-            'name' => "$name" . "[$ns.$directive]",
343
+            'name' => "$name"."[$ns.$directive]",
344 344
             'id' => "$name:$ns.$directive"
345 345
         );
346 346
         if ($value === null) {
@@ -407,7 +407,7 @@  discard block
 block discarded – undo
407 407
 
408 408
         $attr = array(
409 409
             'type' => 'radio',
410
-            'name' => "$name" . "[$ns.$directive]",
410
+            'name' => "$name"."[$ns.$directive]",
411 411
             'id' => "$name:Yes_$ns.$directive",
412 412
             'value' => '1'
413 413
         );
@@ -426,7 +426,7 @@  discard block
 block discarded – undo
426 426
 
427 427
         $attr = array(
428 428
             'type' => 'radio',
429
-            'name' => "$name" . "[$ns.$directive]",
429
+            'name' => "$name"."[$ns.$directive]",
430 430
             'id' => "$name:No_$ns.$directive",
431 431
             'value' => '0'
432 432
         );
Please login to merge, or discard this patch.
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/MakeWellFormed.php 4 patches
Doc Comments   +3 added lines, -1 removed lines patch added patch discarded remove patch
@@ -528,9 +528,10 @@  discard block
 block discarded – undo
528 528
      * being the current one) will be deleted.
529 529
      *
530 530
      * @param HTMLPurifier_Token|array|int|bool $token Token substitution value
531
-     * @param HTMLPurifier_Injector|int $injector Injector that performed the substitution; default is if
531
+     * @param integer $injector Injector that performed the substitution; default is if
532 532
      *        this is not an injector related operation.
533 533
      * @throws HTMLPurifier_Exception
534
+     * @return HTMLPurifier_Token
534 535
      */
535 536
     protected function processToken($token, $injector = -1)
536 537
     {
@@ -577,6 +578,7 @@  discard block
 block discarded – undo
577 578
      * Inserts a token before the current token. Cursor now points to
578 579
      * this token.  You must reprocess after this.
579 580
      * @param HTMLPurifier_Token $token
581
+     * @return HTMLPurifier_Token
580 582
      */
581 583
     private function insertBefore($token)
582 584
     {
Please login to merge, or discard this patch.
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -151,8 +151,8 @@
 block discarded – undo
151 151
 
152 152
         // isset is in loop because $tokens size changes during loop exec
153 153
         for (;;
154
-             // only increment if we don't need to reprocess
155
-             $reprocess ? $reprocess = false : $token = $zipper->next($token)) {
154
+                // only increment if we don't need to reprocess
155
+                $reprocess ? $reprocess = false : $token = $zipper->next($token)) {
156 156
 
157 157
             // check for a rewind
158 158
             if (is_int($i)) {
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -82,10 +82,10 @@
 block discarded – undo
82 82
         $stack = array();
83 83
 
84 84
         // member variables
85
-        $this->stack =& $stack;
86
-        $this->tokens =& $tokens;
87
-        $this->token =& $token;
88
-        $this->zipper =& $zipper;
85
+        $this->stack = & $stack;
86
+        $this->tokens = & $tokens;
87
+        $this->token = & $token;
88
+        $this->zipper = & $zipper;
89 89
         $this->config = $config;
90 90
         $this->context = $context;
91 91
 
Please login to merge, or discard this patch.
Braces   +3 added lines, -1 removed lines patch added patch discarded remove patch
@@ -162,7 +162,9 @@
 block discarded – undo
162 162
                 $rewind_offset = $this->injectors[$i]->getRewindOffset();
163 163
                 if (is_int($rewind_offset)) {
164 164
                     for ($j = 0; $j < $rewind_offset; $j++) {
165
-                        if (empty($zipper->front)) break;
165
+                        if (empty($zipper->front)) {
166
+                            break;
167
+                        }
166 168
                         $token = $zipper->prev($token);
167 169
                         // indicate that other injectors should not process this token,
168 170
                         // but we need to reprocess it
Please login to merge, or discard this patch.
vendor/michelf/php-markdown/Michelf/Markdown.php 4 patches
Doc Comments   +16 added lines patch added patch discarded remove patch
@@ -25,6 +25,9 @@  discard block
 block discarded – undo
25 25
 
26 26
 	### Simple Function Interface ###
27 27
 
28
+	/**
29
+	 * @param string $text
30
+	 */
28 31
 	public static function defaultTransform($text) {
29 32
 	#
30 33
 	# Initialize the parser and return the result of its transform method.
@@ -931,6 +934,10 @@  discard block
 block discarded – undo
931 934
 
932 935
 	protected $list_level = 0;
933 936
 
937
+	/**
938
+	 * @param string $list_str
939
+	 * @param string $marker_any_re
940
+	 */
934 941
 	protected function processListItems($list_str, $marker_any_re) {
935 942
 	#
936 943
 	#	Process the contents of a single ordered or unordered list, splitting it
@@ -1034,6 +1041,9 @@  discard block
 block discarded – undo
1034 1041
 	}
1035 1042
 
1036 1043
 
1044
+	/**
1045
+	 * @param string $code
1046
+	 */
1037 1047
 	protected function makeCodeSpan($code) {
1038 1048
 	#
1039 1049
 	# Create a code span markup for $code. Called from handleSpanToken.
@@ -1311,6 +1321,9 @@  discard block
 block discarded – undo
1311 1321
 	}
1312 1322
 
1313 1323
 
1324
+	/**
1325
+	 * @return string
1326
+	 */
1314 1327
 	protected function encodeAttribute($text) {
1315 1328
 	#
1316 1329
 	# Encode text for a double-quoted HTML attribute. This function
@@ -1551,6 +1564,9 @@  discard block
 block discarded – undo
1551 1564
 	# hanlde UTF-8 if the default function does not exist.
1552 1565
 	protected $utf8_strlen = 'mb_strlen';
1553 1566
 	
1567
+	/**
1568
+	 * @param string $text
1569
+	 */
1554 1570
 	protected function detab($text) {
1555 1571
 	#
1556 1572
 	# Replace tabs with the appropriate amount of space.
Please login to merge, or discard this patch.
Indentation   +1159 added lines, -1159 removed lines patch added patch discarded remove patch
@@ -19,193 +19,193 @@  discard block
 block discarded – undo
19 19
 
20 20
 class Markdown implements MarkdownInterface {
21 21
 
22
-	### Version ###
22
+    ### Version ###
23 23
 
24
-	const  MARKDOWNLIB_VERSION  =  "1.5.0";
24
+    const  MARKDOWNLIB_VERSION  =  "1.5.0";
25 25
 
26
-	### Simple Function Interface ###
26
+    ### Simple Function Interface ###
27 27
 
28
-	public static function defaultTransform($text) {
29
-	#
30
-	# Initialize the parser and return the result of its transform method.
31
-	# This will work fine for derived classes too.
32
-	#
33
-		# Take parser class on which this function was called.
34
-		$parser_class = \get_called_class();
28
+    public static function defaultTransform($text) {
29
+    #
30
+    # Initialize the parser and return the result of its transform method.
31
+    # This will work fine for derived classes too.
32
+    #
33
+        # Take parser class on which this function was called.
34
+        $parser_class = \get_called_class();
35 35
 
36
-		# try to take parser from the static parser list
37
-		static $parser_list;
38
-		$parser =& $parser_list[$parser_class];
36
+        # try to take parser from the static parser list
37
+        static $parser_list;
38
+        $parser =& $parser_list[$parser_class];
39 39
 
40
-		# create the parser it not already set
41
-		if (!$parser)
42
-			$parser = new $parser_class;
40
+        # create the parser it not already set
41
+        if (!$parser)
42
+            $parser = new $parser_class;
43 43
 
44
-		# Transform text using parser.
45
-		return $parser->transform($text);
46
-	}
44
+        # Transform text using parser.
45
+        return $parser->transform($text);
46
+    }
47 47
 
48
-	### Configuration Variables ###
48
+    ### Configuration Variables ###
49 49
 
50
-	# Change to ">" for HTML output.
51
-	public $empty_element_suffix = " />";
52
-	public $tab_width = 4;
50
+    # Change to ">" for HTML output.
51
+    public $empty_element_suffix = " />";
52
+    public $tab_width = 4;
53 53
 	
54
-	# Change to `true` to disallow markup or entities.
55
-	public $no_markup = false;
56
-	public $no_entities = false;
54
+    # Change to `true` to disallow markup or entities.
55
+    public $no_markup = false;
56
+    public $no_entities = false;
57 57
 	
58
-	# Predefined urls and titles for reference links and images.
59
-	public $predef_urls = array();
60
-	public $predef_titles = array();
61
-
62
-	# Optional filter function for URLs
63
-	public $url_filter_func = null;
64
-
65
-	# Optional header id="" generation callback function.
66
-	public $header_id_func = null;
67
-
68
-	# Class attribute to toggle "enhanced ordered list" behaviour
69
-	# setting this to true will allow ordered lists to start from the index
70
-	# number that is defined first.  For example:
71
-	# 2. List item two
72
-	# 3. List item three
73
-	# 
74
-	# becomes
75
-	# <ol start="2">
76
-	# <li>List item two</li>
77
-	# <li>List item three</li>
78
-	# </ol>
79
-	public $enhanced_ordered_list = false;
80
-
81
-	### Parser Implementation ###
82
-
83
-	# Regex to match balanced [brackets].
84
-	# Needed to insert a maximum bracked depth while converting to PHP.
85
-	protected $nested_brackets_depth = 6;
86
-	protected $nested_brackets_re;
58
+    # Predefined urls and titles for reference links and images.
59
+    public $predef_urls = array();
60
+    public $predef_titles = array();
61
+
62
+    # Optional filter function for URLs
63
+    public $url_filter_func = null;
64
+
65
+    # Optional header id="" generation callback function.
66
+    public $header_id_func = null;
67
+
68
+    # Class attribute to toggle "enhanced ordered list" behaviour
69
+    # setting this to true will allow ordered lists to start from the index
70
+    # number that is defined first.  For example:
71
+    # 2. List item two
72
+    # 3. List item three
73
+    # 
74
+    # becomes
75
+    # <ol start="2">
76
+    # <li>List item two</li>
77
+    # <li>List item three</li>
78
+    # </ol>
79
+    public $enhanced_ordered_list = false;
80
+
81
+    ### Parser Implementation ###
82
+
83
+    # Regex to match balanced [brackets].
84
+    # Needed to insert a maximum bracked depth while converting to PHP.
85
+    protected $nested_brackets_depth = 6;
86
+    protected $nested_brackets_re;
87 87
 	
88
-	protected $nested_url_parenthesis_depth = 4;
89
-	protected $nested_url_parenthesis_re;
88
+    protected $nested_url_parenthesis_depth = 4;
89
+    protected $nested_url_parenthesis_re;
90 90
 
91
-	# Table of hash values for escaped characters:
92
-	protected $escape_chars = '\`*_{}[]()>#+-.!';
93
-	protected $escape_chars_re;
91
+    # Table of hash values for escaped characters:
92
+    protected $escape_chars = '\`*_{}[]()>#+-.!';
93
+    protected $escape_chars_re;
94 94
 
95 95
 
96
-	public function __construct() {
97
-	#
98
-	# Constructor function. Initialize appropriate member variables.
99
-	#
100
-		$this->_initDetab();
101
-		$this->prepareItalicsAndBold();
96
+    public function __construct() {
97
+    #
98
+    # Constructor function. Initialize appropriate member variables.
99
+    #
100
+        $this->_initDetab();
101
+        $this->prepareItalicsAndBold();
102 102
 	
103
-		$this->nested_brackets_re = 
104
-			str_repeat('(?>[^\[\]]+|\[', $this->nested_brackets_depth).
105
-			str_repeat('\])*', $this->nested_brackets_depth);
103
+        $this->nested_brackets_re = 
104
+            str_repeat('(?>[^\[\]]+|\[', $this->nested_brackets_depth).
105
+            str_repeat('\])*', $this->nested_brackets_depth);
106 106
 	
107
-		$this->nested_url_parenthesis_re = 
108
-			str_repeat('(?>[^()\s]+|\(', $this->nested_url_parenthesis_depth).
109
-			str_repeat('(?>\)))*', $this->nested_url_parenthesis_depth);
107
+        $this->nested_url_parenthesis_re = 
108
+            str_repeat('(?>[^()\s]+|\(', $this->nested_url_parenthesis_depth).
109
+            str_repeat('(?>\)))*', $this->nested_url_parenthesis_depth);
110 110
 		
111
-		$this->escape_chars_re = '['.preg_quote($this->escape_chars).']';
111
+        $this->escape_chars_re = '['.preg_quote($this->escape_chars).']';
112 112
 		
113
-		# Sort document, block, and span gamut in ascendent priority order.
114
-		asort($this->document_gamut);
115
-		asort($this->block_gamut);
116
-		asort($this->span_gamut);
117
-	}
113
+        # Sort document, block, and span gamut in ascendent priority order.
114
+        asort($this->document_gamut);
115
+        asort($this->block_gamut);
116
+        asort($this->span_gamut);
117
+    }
118 118
 
119 119
 
120
-	# Internal hashes used during transformation.
121
-	protected $urls = array();
122
-	protected $titles = array();
123
-	protected $html_hashes = array();
120
+    # Internal hashes used during transformation.
121
+    protected $urls = array();
122
+    protected $titles = array();
123
+    protected $html_hashes = array();
124 124
 	
125
-	# Status flag to avoid invalid nesting.
126
-	protected $in_anchor = false;
125
+    # Status flag to avoid invalid nesting.
126
+    protected $in_anchor = false;
127 127
 	
128 128
 	
129
-	protected function setup() {
130
-	#
131
-	# Called before the transformation process starts to setup parser 
132
-	# states.
133
-	#
134
-		# Clear global hashes.
135
-		$this->urls = $this->predef_urls;
136
-		$this->titles = $this->predef_titles;
137
-		$this->html_hashes = array();
129
+    protected function setup() {
130
+    #
131
+    # Called before the transformation process starts to setup parser 
132
+    # states.
133
+    #
134
+        # Clear global hashes.
135
+        $this->urls = $this->predef_urls;
136
+        $this->titles = $this->predef_titles;
137
+        $this->html_hashes = array();
138 138
 		
139
-		$this->in_anchor = false;
140
-	}
139
+        $this->in_anchor = false;
140
+    }
141 141
 	
142
-	protected function teardown() {
143
-	#
144
-	# Called after the transformation process to clear any variable 
145
-	# which may be taking up memory unnecessarly.
146
-	#
147
-		$this->urls = array();
148
-		$this->titles = array();
149
-		$this->html_hashes = array();
150
-	}
151
-
152
-
153
-	public function transform($text) {
154
-	#
155
-	# Main function. Performs some preprocessing on the input text
156
-	# and pass it through the document gamut.
157
-	#
158
-		$this->setup();
142
+    protected function teardown() {
143
+    #
144
+    # Called after the transformation process to clear any variable 
145
+    # which may be taking up memory unnecessarly.
146
+    #
147
+        $this->urls = array();
148
+        $this->titles = array();
149
+        $this->html_hashes = array();
150
+    }
151
+
152
+
153
+    public function transform($text) {
154
+    #
155
+    # Main function. Performs some preprocessing on the input text
156
+    # and pass it through the document gamut.
157
+    #
158
+        $this->setup();
159 159
 	
160
-		# Remove UTF-8 BOM and marker character in input, if present.
161
-		$text = preg_replace('{^\xEF\xBB\xBF|\x1A}', '', $text);
160
+        # Remove UTF-8 BOM and marker character in input, if present.
161
+        $text = preg_replace('{^\xEF\xBB\xBF|\x1A}', '', $text);
162 162
 
163
-		# Standardize line endings:
164
-		#   DOS to Unix and Mac to Unix
165
-		$text = preg_replace('{\r\n?}', "\n", $text);
163
+        # Standardize line endings:
164
+        #   DOS to Unix and Mac to Unix
165
+        $text = preg_replace('{\r\n?}', "\n", $text);
166 166
 
167
-		# Make sure $text ends with a couple of newlines:
168
-		$text .= "\n\n";
167
+        # Make sure $text ends with a couple of newlines:
168
+        $text .= "\n\n";
169 169
 
170
-		# Convert all tabs to spaces.
171
-		$text = $this->detab($text);
170
+        # Convert all tabs to spaces.
171
+        $text = $this->detab($text);
172 172
 
173
-		# Turn block-level HTML blocks into hash entries
174
-		$text = $this->hashHTMLBlocks($text);
173
+        # Turn block-level HTML blocks into hash entries
174
+        $text = $this->hashHTMLBlocks($text);
175 175
 
176
-		# Strip any lines consisting only of spaces and tabs.
177
-		# This makes subsequent regexen easier to write, because we can
178
-		# match consecutive blank lines with /\n+/ instead of something
179
-		# contorted like /[ ]*\n+/ .
180
-		$text = preg_replace('/^[ ]+$/m', '', $text);
176
+        # Strip any lines consisting only of spaces and tabs.
177
+        # This makes subsequent regexen easier to write, because we can
178
+        # match consecutive blank lines with /\n+/ instead of something
179
+        # contorted like /[ ]*\n+/ .
180
+        $text = preg_replace('/^[ ]+$/m', '', $text);
181 181
 
182
-		# Run document gamut methods.
183
-		foreach ($this->document_gamut as $method => $priority) {
184
-			$text = $this->$method($text);
185
-		}
182
+        # Run document gamut methods.
183
+        foreach ($this->document_gamut as $method => $priority) {
184
+            $text = $this->$method($text);
185
+        }
186 186
 		
187
-		$this->teardown();
187
+        $this->teardown();
188 188
 
189
-		return $text . "\n";
190
-	}
189
+        return $text . "\n";
190
+    }
191 191
 	
192
-	protected $document_gamut = array(
193
-		# Strip link definitions, store in hashes.
194
-		"stripLinkDefinitions" => 20,
192
+    protected $document_gamut = array(
193
+        # Strip link definitions, store in hashes.
194
+        "stripLinkDefinitions" => 20,
195 195
 		
196
-		"runBasicBlockGamut"   => 30,
197
-		);
196
+        "runBasicBlockGamut"   => 30,
197
+        );
198 198
 
199 199
 
200
-	protected function stripLinkDefinitions($text) {
201
-	#
202
-	# Strips link definitions from text, stores the URLs and titles in
203
-	# hash references.
204
-	#
205
-		$less_than_tab = $this->tab_width - 1;
200
+    protected function stripLinkDefinitions($text) {
201
+    #
202
+    # Strips link definitions from text, stores the URLs and titles in
203
+    # hash references.
204
+    #
205
+        $less_than_tab = $this->tab_width - 1;
206 206
 
207
-		# Link defs are in the form: ^[id]: url "optional title"
208
-		$text = preg_replace_callback('{
207
+        # Link defs are in the form: ^[id]: url "optional title"
208
+        $text = preg_replace_callback('{
209 209
 							^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?:	# id = $1
210 210
 							  [ ]*
211 211
 							  \n?				# maybe *one* newline
@@ -227,46 +227,46 @@  discard block
 block discarded – undo
227 227
 							)?	# title is optional
228 228
 							(?:\n+|\Z)
229 229
 			}xm',
230
-			array($this, '_stripLinkDefinitions_callback'),
231
-			$text);
232
-		return $text;
233
-	}
234
-	protected function _stripLinkDefinitions_callback($matches) {
235
-		$link_id = strtolower($matches[1]);
236
-		$url = $matches[2] == '' ? $matches[3] : $matches[2];
237
-		$this->urls[$link_id] = $url;
238
-		$this->titles[$link_id] =& $matches[4];
239
-		return ''; # String that will replace the block
240
-	}
241
-
242
-
243
-	protected function hashHTMLBlocks($text) {
244
-		if ($this->no_markup)  return $text;
245
-
246
-		$less_than_tab = $this->tab_width - 1;
247
-
248
-		# Hashify HTML blocks:
249
-		# We only want to do this for block-level HTML tags, such as headers,
250
-		# lists, and tables. That's because we still want to wrap <p>s around
251
-		# "paragraphs" that are wrapped in non-block-level tags, such as anchors,
252
-		# phrase emphasis, and spans. The list of tags we're looking for is
253
-		# hard-coded:
254
-		#
255
-		# *  List "a" is made of tags which can be both inline or block-level.
256
-		#    These will be treated block-level when the start tag is alone on 
257
-		#    its line, otherwise they're not matched here and will be taken as 
258
-		#    inline later.
259
-		# *  List "b" is made of tags which are always block-level;
260
-		#
261
-		$block_tags_a_re = 'ins|del';
262
-		$block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'.
263
-						   'script|noscript|style|form|fieldset|iframe|math|svg|'.
264
-						   'article|section|nav|aside|hgroup|header|footer|'.
265
-						   'figure';
266
-
267
-		# Regular expression for the content of a block tag.
268
-		$nested_tags_level = 4;
269
-		$attr = '
230
+            array($this, '_stripLinkDefinitions_callback'),
231
+            $text);
232
+        return $text;
233
+    }
234
+    protected function _stripLinkDefinitions_callback($matches) {
235
+        $link_id = strtolower($matches[1]);
236
+        $url = $matches[2] == '' ? $matches[3] : $matches[2];
237
+        $this->urls[$link_id] = $url;
238
+        $this->titles[$link_id] =& $matches[4];
239
+        return ''; # String that will replace the block
240
+    }
241
+
242
+
243
+    protected function hashHTMLBlocks($text) {
244
+        if ($this->no_markup)  return $text;
245
+
246
+        $less_than_tab = $this->tab_width - 1;
247
+
248
+        # Hashify HTML blocks:
249
+        # We only want to do this for block-level HTML tags, such as headers,
250
+        # lists, and tables. That's because we still want to wrap <p>s around
251
+        # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
252
+        # phrase emphasis, and spans. The list of tags we're looking for is
253
+        # hard-coded:
254
+        #
255
+        # *  List "a" is made of tags which can be both inline or block-level.
256
+        #    These will be treated block-level when the start tag is alone on 
257
+        #    its line, otherwise they're not matched here and will be taken as 
258
+        #    inline later.
259
+        # *  List "b" is made of tags which are always block-level;
260
+        #
261
+        $block_tags_a_re = 'ins|del';
262
+        $block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'.
263
+                            'script|noscript|style|form|fieldset|iframe|math|svg|'.
264
+                            'article|section|nav|aside|hgroup|header|footer|'.
265
+                            'figure';
266
+
267
+        # Regular expression for the content of a block tag.
268
+        $nested_tags_level = 4;
269
+        $attr = '
270 270
 			(?>				# optional tag attributes
271 271
 			  \s			# starts with whitespace
272 272
 			  (?>
@@ -280,8 +280,8 @@  discard block
 block discarded – undo
280 280
 			  )*
281 281
 			)?	
282 282
 			';
283
-		$content =
284
-			str_repeat('
283
+        $content =
284
+            str_repeat('
285 285
 				(?>
286 286
 				  [^<]+			# content without tag
287 287
 				|
@@ -291,29 +291,29 @@  discard block
 block discarded – undo
291 291
 					  />
292 292
 					|
293 293
 					  >', $nested_tags_level).	# end of opening tag
294
-					  '.*?'.					# last level nested tag content
295
-			str_repeat('
294
+                        '.*?'.					# last level nested tag content
295
+            str_repeat('
296 296
 					  </\2\s*>	# closing nested tag
297 297
 					)
298 298
 				  |				
299 299
 					<(?!/\2\s*>	# other tags with a different name
300 300
 				  )
301 301
 				)*',
302
-				$nested_tags_level);
303
-		$content2 = str_replace('\2', '\3', $content);
304
-
305
-		# First, look for nested blocks, e.g.:
306
-		# 	<div>
307
-		# 		<div>
308
-		# 		tags for inner block must be indented.
309
-		# 		</div>
310
-		# 	</div>
311
-		#
312
-		# The outermost tags must start at the left margin for this to match, and
313
-		# the inner nested divs must be indented.
314
-		# We need to do this before the next, more liberal match, because the next
315
-		# match will start at the first `<div>` and stop at the first `</div>`.
316
-		$text = preg_replace_callback('{(?>
302
+                $nested_tags_level);
303
+        $content2 = str_replace('\2', '\3', $content);
304
+
305
+        # First, look for nested blocks, e.g.:
306
+        # 	<div>
307
+        # 		<div>
308
+        # 		tags for inner block must be indented.
309
+        # 		</div>
310
+        # 	</div>
311
+        #
312
+        # The outermost tags must start at the left margin for this to match, and
313
+        # the inner nested divs must be indented.
314
+        # We need to do this before the next, more liberal match, because the next
315
+        # match will start at the first `<div>` and stop at the first `</div>`.
316
+        $text = preg_replace_callback('{(?>
317 317
 			(?>
318 318
 				(?<=\n)			# Starting on its own line
319 319
 				|				# or
@@ -374,97 +374,97 @@  discard block
 block discarded – undo
374 374
 					
375 375
 			)
376 376
 			)}Sxmi',
377
-			array($this, '_hashHTMLBlocks_callback'),
378
-			$text);
379
-
380
-		return $text;
381
-	}
382
-	protected function _hashHTMLBlocks_callback($matches) {
383
-		$text = $matches[1];
384
-		$key  = $this->hashBlock($text);
385
-		return "\n\n$key\n\n";
386
-	}
377
+            array($this, '_hashHTMLBlocks_callback'),
378
+            $text);
379
+
380
+        return $text;
381
+    }
382
+    protected function _hashHTMLBlocks_callback($matches) {
383
+        $text = $matches[1];
384
+        $key  = $this->hashBlock($text);
385
+        return "\n\n$key\n\n";
386
+    }
387 387
 	
388 388
 	
389
-	protected function hashPart($text, $boundary = 'X') {
390
-	#
391
-	# Called whenever a tag must be hashed when a function insert an atomic 
392
-	# element in the text stream. Passing $text to through this function gives
393
-	# a unique text-token which will be reverted back when calling unhash.
394
-	#
395
-	# The $boundary argument specify what character should be used to surround
396
-	# the token. By convension, "B" is used for block elements that needs not
397
-	# to be wrapped into paragraph tags at the end, ":" is used for elements
398
-	# that are word separators and "X" is used in the general case.
399
-	#
400
-		# Swap back any tag hash found in $text so we do not have to `unhash`
401
-		# multiple times at the end.
402
-		$text = $this->unhash($text);
389
+    protected function hashPart($text, $boundary = 'X') {
390
+    #
391
+    # Called whenever a tag must be hashed when a function insert an atomic 
392
+    # element in the text stream. Passing $text to through this function gives
393
+    # a unique text-token which will be reverted back when calling unhash.
394
+    #
395
+    # The $boundary argument specify what character should be used to surround
396
+    # the token. By convension, "B" is used for block elements that needs not
397
+    # to be wrapped into paragraph tags at the end, ":" is used for elements
398
+    # that are word separators and "X" is used in the general case.
399
+    #
400
+        # Swap back any tag hash found in $text so we do not have to `unhash`
401
+        # multiple times at the end.
402
+        $text = $this->unhash($text);
403 403
 		
404
-		# Then hash the block.
405
-		static $i = 0;
406
-		$key = "$boundary\x1A" . ++$i . $boundary;
407
-		$this->html_hashes[$key] = $text;
408
-		return $key; # String that will replace the tag.
409
-	}
410
-
411
-
412
-	protected function hashBlock($text) {
413
-	#
414
-	# Shortcut function for hashPart with block-level boundaries.
415
-	#
416
-		return $this->hashPart($text, 'B');
417
-	}
418
-
419
-
420
-	protected $block_gamut = array(
421
-	#
422
-	# These are all the transformations that form block-level
423
-	# tags like paragraphs, headers, and list items.
424
-	#
425
-		"doHeaders"         => 10,
426
-		"doHorizontalRules" => 20,
404
+        # Then hash the block.
405
+        static $i = 0;
406
+        $key = "$boundary\x1A" . ++$i . $boundary;
407
+        $this->html_hashes[$key] = $text;
408
+        return $key; # String that will replace the tag.
409
+    }
410
+
411
+
412
+    protected function hashBlock($text) {
413
+    #
414
+    # Shortcut function for hashPart with block-level boundaries.
415
+    #
416
+        return $this->hashPart($text, 'B');
417
+    }
418
+
419
+
420
+    protected $block_gamut = array(
421
+    #
422
+    # These are all the transformations that form block-level
423
+    # tags like paragraphs, headers, and list items.
424
+    #
425
+        "doHeaders"         => 10,
426
+        "doHorizontalRules" => 20,
427 427
 		
428
-		"doLists"           => 40,
429
-		"doCodeBlocks"      => 50,
430
-		"doBlockQuotes"     => 60,
431
-		);
432
-
433
-	protected function runBlockGamut($text) {
434
-	#
435
-	# Run block gamut tranformations.
436
-	#
437
-		# We need to escape raw HTML in Markdown source before doing anything 
438
-		# else. This need to be done for each block, and not only at the 
439
-		# begining in the Markdown function since hashed blocks can be part of
440
-		# list items and could have been indented. Indented blocks would have 
441
-		# been seen as a code block in a previous pass of hashHTMLBlocks.
442
-		$text = $this->hashHTMLBlocks($text);
428
+        "doLists"           => 40,
429
+        "doCodeBlocks"      => 50,
430
+        "doBlockQuotes"     => 60,
431
+        );
432
+
433
+    protected function runBlockGamut($text) {
434
+    #
435
+    # Run block gamut tranformations.
436
+    #
437
+        # We need to escape raw HTML in Markdown source before doing anything 
438
+        # else. This need to be done for each block, and not only at the 
439
+        # begining in the Markdown function since hashed blocks can be part of
440
+        # list items and could have been indented. Indented blocks would have 
441
+        # been seen as a code block in a previous pass of hashHTMLBlocks.
442
+        $text = $this->hashHTMLBlocks($text);
443 443
 		
444
-		return $this->runBasicBlockGamut($text);
445
-	}
444
+        return $this->runBasicBlockGamut($text);
445
+    }
446 446
 	
447
-	protected function runBasicBlockGamut($text) {
448
-	#
449
-	# Run block gamut tranformations, without hashing HTML blocks. This is 
450
-	# useful when HTML blocks are known to be already hashed, like in the first
451
-	# whole-document pass.
452
-	#
453
-		foreach ($this->block_gamut as $method => $priority) {
454
-			$text = $this->$method($text);
455
-		}
447
+    protected function runBasicBlockGamut($text) {
448
+    #
449
+    # Run block gamut tranformations, without hashing HTML blocks. This is 
450
+    # useful when HTML blocks are known to be already hashed, like in the first
451
+    # whole-document pass.
452
+    #
453
+        foreach ($this->block_gamut as $method => $priority) {
454
+            $text = $this->$method($text);
455
+        }
456 456
 		
457
-		# Finally form paragraph and restore hashed blocks.
458
-		$text = $this->formParagraphs($text);
457
+        # Finally form paragraph and restore hashed blocks.
458
+        $text = $this->formParagraphs($text);
459 459
 
460
-		return $text;
461
-	}
460
+        return $text;
461
+    }
462 462
 	
463 463
 	
464
-	protected function doHorizontalRules($text) {
465
-		# Do Horizontal Rules:
466
-		return preg_replace(
467
-			'{
464
+    protected function doHorizontalRules($text) {
465
+        # Do Horizontal Rules:
466
+        return preg_replace(
467
+            '{
468 468
 				^[ ]{0,3}	# Leading space
469 469
 				([-*_])		# $1: First marker
470 470
 				(?>			# Repeated marker group
@@ -474,68 +474,68 @@  discard block
 block discarded – undo
474 474
 				[ ]*		# Tailing spaces
475 475
 				$			# End of line.
476 476
 			}mx',
477
-			"\n".$this->hashBlock("<hr$this->empty_element_suffix")."\n", 
478
-			$text);
479
-	}
480
-
481
-
482
-	protected $span_gamut = array(
483
-	#
484
-	# These are all the transformations that occur *within* block-level
485
-	# tags like paragraphs, headers, and list items.
486
-	#
487
-		# Process character escapes, code spans, and inline HTML
488
-		# in one shot.
489
-		"parseSpan"           => -30,
490
-
491
-		# Process anchor and image tags. Images must come first,
492
-		# because ![foo][f] looks like an anchor.
493
-		"doImages"            =>  10,
494
-		"doAnchors"           =>  20,
477
+            "\n".$this->hashBlock("<hr$this->empty_element_suffix")."\n", 
478
+            $text);
479
+    }
480
+
481
+
482
+    protected $span_gamut = array(
483
+    #
484
+    # These are all the transformations that occur *within* block-level
485
+    # tags like paragraphs, headers, and list items.
486
+    #
487
+        # Process character escapes, code spans, and inline HTML
488
+        # in one shot.
489
+        "parseSpan"           => -30,
490
+
491
+        # Process anchor and image tags. Images must come first,
492
+        # because ![foo][f] looks like an anchor.
493
+        "doImages"            =>  10,
494
+        "doAnchors"           =>  20,
495 495
 		
496
-		# Make links out of things like `<http://example.com/>`
497
-		# Must come after doAnchors, because you can use < and >
498
-		# delimiters in inline links like [this](<url>).
499
-		"doAutoLinks"         =>  30,
500
-		"encodeAmpsAndAngles" =>  40,
501
-
502
-		"doItalicsAndBold"    =>  50,
503
-		"doHardBreaks"        =>  60,
504
-		);
505
-
506
-	protected function runSpanGamut($text) {
507
-	#
508
-	# Run span gamut tranformations.
509
-	#
510
-		foreach ($this->span_gamut as $method => $priority) {
511
-			$text = $this->$method($text);
512
-		}
513
-
514
-		return $text;
515
-	}
496
+        # Make links out of things like `<http://example.com/>`
497
+        # Must come after doAnchors, because you can use < and >
498
+        # delimiters in inline links like [this](<url>).
499
+        "doAutoLinks"         =>  30,
500
+        "encodeAmpsAndAngles" =>  40,
501
+
502
+        "doItalicsAndBold"    =>  50,
503
+        "doHardBreaks"        =>  60,
504
+        );
505
+
506
+    protected function runSpanGamut($text) {
507
+    #
508
+    # Run span gamut tranformations.
509
+    #
510
+        foreach ($this->span_gamut as $method => $priority) {
511
+            $text = $this->$method($text);
512
+        }
513
+
514
+        return $text;
515
+    }
516 516
 	
517 517
 	
518
-	protected function doHardBreaks($text) {
519
-		# Do hard breaks:
520
-		return preg_replace_callback('/ {2,}\n/', 
521
-			array($this, '_doHardBreaks_callback'), $text);
522
-	}
523
-	protected function _doHardBreaks_callback($matches) {
524
-		return $this->hashPart("<br$this->empty_element_suffix\n");
525
-	}
526
-
527
-
528
-	protected function doAnchors($text) {
529
-	#
530
-	# Turn Markdown link shortcuts into XHTML <a> tags.
531
-	#
532
-		if ($this->in_anchor) return $text;
533
-		$this->in_anchor = true;
518
+    protected function doHardBreaks($text) {
519
+        # Do hard breaks:
520
+        return preg_replace_callback('/ {2,}\n/', 
521
+            array($this, '_doHardBreaks_callback'), $text);
522
+    }
523
+    protected function _doHardBreaks_callback($matches) {
524
+        return $this->hashPart("<br$this->empty_element_suffix\n");
525
+    }
526
+
527
+
528
+    protected function doAnchors($text) {
529
+    #
530
+    # Turn Markdown link shortcuts into XHTML <a> tags.
531
+    #
532
+        if ($this->in_anchor) return $text;
533
+        $this->in_anchor = true;
534 534
 		
535
-		#
536
-		# First, handle reference-style links: [link text] [id]
537
-		#
538
-		$text = preg_replace_callback('{
535
+        #
536
+        # First, handle reference-style links: [link text] [id]
537
+        #
538
+        $text = preg_replace_callback('{
539 539
 			(					# wrap whole match in $1
540 540
 			  \[
541 541
 				('.$this->nested_brackets_re.')	# link text = $2
@@ -549,12 +549,12 @@  discard block
 block discarded – undo
549 549
 			  \]
550 550
 			)
551 551
 			}xs',
552
-			array($this, '_doAnchors_reference_callback'), $text);
552
+            array($this, '_doAnchors_reference_callback'), $text);
553 553
 
554
-		#
555
-		# Next, inline-style links: [link text](url "optional title")
556
-		#
557
-		$text = preg_replace_callback('{
554
+        #
555
+        # Next, inline-style links: [link text](url "optional title")
556
+        #
557
+        $text = preg_replace_callback('{
558 558
 			(				# wrap whole match in $1
559 559
 			  \[
560 560
 				('.$this->nested_brackets_re.')	# link text = $2
@@ -576,94 +576,94 @@  discard block
 block discarded – undo
576 576
 			  \)
577 577
 			)
578 578
 			}xs',
579
-			array($this, '_doAnchors_inline_callback'), $text);
580
-
581
-		#
582
-		# Last, handle reference-style shortcuts: [link text]
583
-		# These must come last in case you've also got [link text][1]
584
-		# or [link text](/foo)
585
-		#
586
-		$text = preg_replace_callback('{
579
+            array($this, '_doAnchors_inline_callback'), $text);
580
+
581
+        #
582
+        # Last, handle reference-style shortcuts: [link text]
583
+        # These must come last in case you've also got [link text][1]
584
+        # or [link text](/foo)
585
+        #
586
+        $text = preg_replace_callback('{
587 587
 			(					# wrap whole match in $1
588 588
 			  \[
589 589
 				([^\[\]]+)		# link text = $2; can\'t contain [ or ]
590 590
 			  \]
591 591
 			)
592 592
 			}xs',
593
-			array($this, '_doAnchors_reference_callback'), $text);
594
-
595
-		$this->in_anchor = false;
596
-		return $text;
597
-	}
598
-	protected function _doAnchors_reference_callback($matches) {
599
-		$whole_match =  $matches[1];
600
-		$link_text   =  $matches[2];
601
-		$link_id     =& $matches[3];
602
-
603
-		if ($link_id == "") {
604
-			# for shortcut links like [this][] or [this].
605
-			$link_id = $link_text;
606
-		}
593
+            array($this, '_doAnchors_reference_callback'), $text);
594
+
595
+        $this->in_anchor = false;
596
+        return $text;
597
+    }
598
+    protected function _doAnchors_reference_callback($matches) {
599
+        $whole_match =  $matches[1];
600
+        $link_text   =  $matches[2];
601
+        $link_id     =& $matches[3];
602
+
603
+        if ($link_id == "") {
604
+            # for shortcut links like [this][] or [this].
605
+            $link_id = $link_text;
606
+        }
607 607
 		
608
-		# lower-case and turn embedded newlines into spaces
609
-		$link_id = strtolower($link_id);
610
-		$link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
608
+        # lower-case and turn embedded newlines into spaces
609
+        $link_id = strtolower($link_id);
610
+        $link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
611 611
 
612
-		if (isset($this->urls[$link_id])) {
613
-			$url = $this->urls[$link_id];
614
-			$url = $this->encodeURLAttribute($url);
612
+        if (isset($this->urls[$link_id])) {
613
+            $url = $this->urls[$link_id];
614
+            $url = $this->encodeURLAttribute($url);
615 615
 			
616
-			$result = "<a href=\"$url\"";
617
-			if ( isset( $this->titles[$link_id] ) ) {
618
-				$title = $this->titles[$link_id];
619
-				$title = $this->encodeAttribute($title);
620
-				$result .=  " title=\"$title\"";
621
-			}
616
+            $result = "<a href=\"$url\"";
617
+            if ( isset( $this->titles[$link_id] ) ) {
618
+                $title = $this->titles[$link_id];
619
+                $title = $this->encodeAttribute($title);
620
+                $result .=  " title=\"$title\"";
621
+            }
622 622
 		
623
-			$link_text = $this->runSpanGamut($link_text);
624
-			$result .= ">$link_text</a>";
625
-			$result = $this->hashPart($result);
626
-		}
627
-		else {
628
-			$result = $whole_match;
629
-		}
630
-		return $result;
631
-	}
632
-	protected function _doAnchors_inline_callback($matches) {
633
-		$whole_match	=  $matches[1];
634
-		$link_text		=  $this->runSpanGamut($matches[2]);
635
-		$url			=  $matches[3] == '' ? $matches[4] : $matches[3];
636
-		$title			=& $matches[7];
637
-
638
-		// if the URL was of the form <s p a c e s> it got caught by the HTML
639
-		// tag parser and hashed. Need to reverse the process before using the URL.
640
-		$unhashed = $this->unhash($url);
641
-		if ($unhashed != $url)
642
-			$url = preg_replace('/^<(.*)>$/', '\1', $unhashed);
643
-
644
-		$url = $this->encodeURLAttribute($url);
645
-
646
-		$result = "<a href=\"$url\"";
647
-		if (isset($title)) {
648
-			$title = $this->encodeAttribute($title);
649
-			$result .=  " title=\"$title\"";
650
-		}
623
+            $link_text = $this->runSpanGamut($link_text);
624
+            $result .= ">$link_text</a>";
625
+            $result = $this->hashPart($result);
626
+        }
627
+        else {
628
+            $result = $whole_match;
629
+        }
630
+        return $result;
631
+    }
632
+    protected function _doAnchors_inline_callback($matches) {
633
+        $whole_match	=  $matches[1];
634
+        $link_text		=  $this->runSpanGamut($matches[2]);
635
+        $url			=  $matches[3] == '' ? $matches[4] : $matches[3];
636
+        $title			=& $matches[7];
637
+
638
+        // if the URL was of the form <s p a c e s> it got caught by the HTML
639
+        // tag parser and hashed. Need to reverse the process before using the URL.
640
+        $unhashed = $this->unhash($url);
641
+        if ($unhashed != $url)
642
+            $url = preg_replace('/^<(.*)>$/', '\1', $unhashed);
643
+
644
+        $url = $this->encodeURLAttribute($url);
645
+
646
+        $result = "<a href=\"$url\"";
647
+        if (isset($title)) {
648
+            $title = $this->encodeAttribute($title);
649
+            $result .=  " title=\"$title\"";
650
+        }
651 651
 		
652
-		$link_text = $this->runSpanGamut($link_text);
653
-		$result .= ">$link_text</a>";
652
+        $link_text = $this->runSpanGamut($link_text);
653
+        $result .= ">$link_text</a>";
654 654
 
655
-		return $this->hashPart($result);
656
-	}
655
+        return $this->hashPart($result);
656
+    }
657 657
 
658 658
 
659
-	protected function doImages($text) {
660
-	#
661
-	# Turn Markdown image shortcuts into <img> tags.
662
-	#
663
-		#
664
-		# First, handle reference-style labeled images: ![alt text][id]
665
-		#
666
-		$text = preg_replace_callback('{
659
+    protected function doImages($text) {
660
+    #
661
+    # Turn Markdown image shortcuts into <img> tags.
662
+    #
663
+        #
664
+        # First, handle reference-style labeled images: ![alt text][id]
665
+        #
666
+        $text = preg_replace_callback('{
667 667
 			(				# wrap whole match in $1
668 668
 			  !\[
669 669
 				('.$this->nested_brackets_re.')		# alt text = $2
@@ -678,13 +678,13 @@  discard block
 block discarded – undo
678 678
 
679 679
 			)
680 680
 			}xs', 
681
-			array($this, '_doImages_reference_callback'), $text);
681
+            array($this, '_doImages_reference_callback'), $text);
682 682
 
683
-		#
684
-		# Next, handle inline images:  ![alt text](url "optional title")
685
-		# Don't forget: encode * and _
686
-		#
687
-		$text = preg_replace_callback('{
683
+        #
684
+        # Next, handle inline images:  ![alt text](url "optional title")
685
+        # Don't forget: encode * and _
686
+        #
687
+        $text = preg_replace_callback('{
688 688
 			(				# wrap whole match in $1
689 689
 			  !\[
690 690
 				('.$this->nested_brackets_re.')		# alt text = $2
@@ -707,76 +707,76 @@  discard block
 block discarded – undo
707 707
 			  \)
708 708
 			)
709 709
 			}xs',
710
-			array($this, '_doImages_inline_callback'), $text);
711
-
712
-		return $text;
713
-	}
714
-	protected function _doImages_reference_callback($matches) {
715
-		$whole_match = $matches[1];
716
-		$alt_text    = $matches[2];
717
-		$link_id     = strtolower($matches[3]);
718
-
719
-		if ($link_id == "") {
720
-			$link_id = strtolower($alt_text); # for shortcut links like ![this][].
721
-		}
722
-
723
-		$alt_text = $this->encodeAttribute($alt_text);
724
-		if (isset($this->urls[$link_id])) {
725
-			$url = $this->encodeURLAttribute($this->urls[$link_id]);
726
-			$result = "<img src=\"$url\" alt=\"$alt_text\"";
727
-			if (isset($this->titles[$link_id])) {
728
-				$title = $this->titles[$link_id];
729
-				$title = $this->encodeAttribute($title);
730
-				$result .=  " title=\"$title\"";
731
-			}
732
-			$result .= $this->empty_element_suffix;
733
-			$result = $this->hashPart($result);
734
-		}
735
-		else {
736
-			# If there's no such link ID, leave intact:
737
-			$result = $whole_match;
738
-		}
739
-
740
-		return $result;
741
-	}
742
-	protected function _doImages_inline_callback($matches) {
743
-		$whole_match	= $matches[1];
744
-		$alt_text		= $matches[2];
745
-		$url			= $matches[3] == '' ? $matches[4] : $matches[3];
746
-		$title			=& $matches[7];
747
-
748
-		$alt_text = $this->encodeAttribute($alt_text);
749
-		$url = $this->encodeURLAttribute($url);
750
-		$result = "<img src=\"$url\" alt=\"$alt_text\"";
751
-		if (isset($title)) {
752
-			$title = $this->encodeAttribute($title);
753
-			$result .=  " title=\"$title\""; # $title already quoted
754
-		}
755
-		$result .= $this->empty_element_suffix;
756
-
757
-		return $this->hashPart($result);
758
-	}
759
-
760
-
761
-	protected function doHeaders($text) {
762
-		# Setext-style headers:
763
-		#	  Header 1
764
-		#	  ========
765
-		#  
766
-		#	  Header 2
767
-		#	  --------
768
-		#
769
-		$text = preg_replace_callback('{ ^(.+?)[ ]*\n(=+|-+)[ ]*\n+ }mx',
770
-			array($this, '_doHeaders_callback_setext'), $text);
771
-
772
-		# atx-style headers:
773
-		#	# Header 1
774
-		#	## Header 2
775
-		#	## Header 2 with closing hashes ##
776
-		#	...
777
-		#	###### Header 6
778
-		#
779
-		$text = preg_replace_callback('{
710
+            array($this, '_doImages_inline_callback'), $text);
711
+
712
+        return $text;
713
+    }
714
+    protected function _doImages_reference_callback($matches) {
715
+        $whole_match = $matches[1];
716
+        $alt_text    = $matches[2];
717
+        $link_id     = strtolower($matches[3]);
718
+
719
+        if ($link_id == "") {
720
+            $link_id = strtolower($alt_text); # for shortcut links like ![this][].
721
+        }
722
+
723
+        $alt_text = $this->encodeAttribute($alt_text);
724
+        if (isset($this->urls[$link_id])) {
725
+            $url = $this->encodeURLAttribute($this->urls[$link_id]);
726
+            $result = "<img src=\"$url\" alt=\"$alt_text\"";
727
+            if (isset($this->titles[$link_id])) {
728
+                $title = $this->titles[$link_id];
729
+                $title = $this->encodeAttribute($title);
730
+                $result .=  " title=\"$title\"";
731
+            }
732
+            $result .= $this->empty_element_suffix;
733
+            $result = $this->hashPart($result);
734
+        }
735
+        else {
736
+            # If there's no such link ID, leave intact:
737
+            $result = $whole_match;
738
+        }
739
+
740
+        return $result;
741
+    }
742
+    protected function _doImages_inline_callback($matches) {
743
+        $whole_match	= $matches[1];
744
+        $alt_text		= $matches[2];
745
+        $url			= $matches[3] == '' ? $matches[4] : $matches[3];
746
+        $title			=& $matches[7];
747
+
748
+        $alt_text = $this->encodeAttribute($alt_text);
749
+        $url = $this->encodeURLAttribute($url);
750
+        $result = "<img src=\"$url\" alt=\"$alt_text\"";
751
+        if (isset($title)) {
752
+            $title = $this->encodeAttribute($title);
753
+            $result .=  " title=\"$title\""; # $title already quoted
754
+        }
755
+        $result .= $this->empty_element_suffix;
756
+
757
+        return $this->hashPart($result);
758
+    }
759
+
760
+
761
+    protected function doHeaders($text) {
762
+        # Setext-style headers:
763
+        #	  Header 1
764
+        #	  ========
765
+        #  
766
+        #	  Header 2
767
+        #	  --------
768
+        #
769
+        $text = preg_replace_callback('{ ^(.+?)[ ]*\n(=+|-+)[ ]*\n+ }mx',
770
+            array($this, '_doHeaders_callback_setext'), $text);
771
+
772
+        # atx-style headers:
773
+        #	# Header 1
774
+        #	## Header 2
775
+        #	## Header 2 with closing hashes ##
776
+        #	...
777
+        #	###### Header 6
778
+        #
779
+        $text = preg_replace_callback('{
780 780
 				^(\#{1,6})	# $1 = string of #\'s
781 781
 				[ ]*
782 782
 				(.+?)		# $2 = Header text
@@ -784,69 +784,69 @@  discard block
 block discarded – undo
784 784
 				\#*			# optional closing #\'s (not counted)
785 785
 				\n+
786 786
 			}xm',
787
-			array($this, '_doHeaders_callback_atx'), $text);
787
+            array($this, '_doHeaders_callback_atx'), $text);
788 788
 
789
-		return $text;
790
-	}
789
+        return $text;
790
+    }
791 791
 
792
-	protected function _doHeaders_callback_setext($matches) {
793
-		# Terrible hack to check we haven't found an empty list item.
794
-		if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1]))
795
-			return $matches[0];
792
+    protected function _doHeaders_callback_setext($matches) {
793
+        # Terrible hack to check we haven't found an empty list item.
794
+        if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1]))
795
+            return $matches[0];
796 796
 		
797
-		$level = $matches[2]{0} == '=' ? 1 : 2;
798
-
799
-		# id attribute generation
800
-		$idAtt = $this->_generateIdFromHeaderValue($matches[1]);
801
-
802
-		$block = "<h$level$idAtt>".$this->runSpanGamut($matches[1])."</h$level>";
803
-		return "\n" . $this->hashBlock($block) . "\n\n";
804
-	}
805
-	protected function _doHeaders_callback_atx($matches) {
806
-
807
-		# id attribute generation
808
-		$idAtt = $this->_generateIdFromHeaderValue($matches[2]);
809
-
810
-		$level = strlen($matches[1]);
811
-		$block = "<h$level$idAtt>".$this->runSpanGamut($matches[2])."</h$level>";
812
-		return "\n" . $this->hashBlock($block) . "\n\n";
813
-	}
814
-
815
-	protected function _generateIdFromHeaderValue($headerValue) {
816
-
817
-		# if a header_id_func property is set, we can use it to automatically
818
-		# generate an id attribute.
819
-		#
820
-		# This method returns a string in the form id="foo", or an empty string
821
-		# otherwise.
822
-		if (!is_callable($this->header_id_func)) {
823
-			return "";
824
-		}
825
-		$idValue = call_user_func($this->header_id_func, $headerValue);
826
-		if (!$idValue) return "";
827
-
828
-		return ' id="' . $this->encodeAttribute($idValue) . '"';
829
-
830
-	}
831
-
832
-	protected function doLists($text) {
833
-	#
834
-	# Form HTML ordered (numbered) and unordered (bulleted) lists.
835
-	#
836
-		$less_than_tab = $this->tab_width - 1;
837
-
838
-		# Re-usable patterns to match list item bullets and number markers:
839
-		$marker_ul_re  = '[*+-]';
840
-		$marker_ol_re  = '\d+[\.]';
841
-
842
-		$markers_relist = array(
843
-			$marker_ul_re => $marker_ol_re,
844
-			$marker_ol_re => $marker_ul_re,
845
-			);
846
-
847
-		foreach ($markers_relist as $marker_re => $other_marker_re) {
848
-			# Re-usable pattern to match any entirel ul or ol list:
849
-			$whole_list_re = '
797
+        $level = $matches[2]{0} == '=' ? 1 : 2;
798
+
799
+        # id attribute generation
800
+        $idAtt = $this->_generateIdFromHeaderValue($matches[1]);
801
+
802
+        $block = "<h$level$idAtt>".$this->runSpanGamut($matches[1])."</h$level>";
803
+        return "\n" . $this->hashBlock($block) . "\n\n";
804
+    }
805
+    protected function _doHeaders_callback_atx($matches) {
806
+
807
+        # id attribute generation
808
+        $idAtt = $this->_generateIdFromHeaderValue($matches[2]);
809
+
810
+        $level = strlen($matches[1]);
811
+        $block = "<h$level$idAtt>".$this->runSpanGamut($matches[2])."</h$level>";
812
+        return "\n" . $this->hashBlock($block) . "\n\n";
813
+    }
814
+
815
+    protected function _generateIdFromHeaderValue($headerValue) {
816
+
817
+        # if a header_id_func property is set, we can use it to automatically
818
+        # generate an id attribute.
819
+        #
820
+        # This method returns a string in the form id="foo", or an empty string
821
+        # otherwise.
822
+        if (!is_callable($this->header_id_func)) {
823
+            return "";
824
+        }
825
+        $idValue = call_user_func($this->header_id_func, $headerValue);
826
+        if (!$idValue) return "";
827
+
828
+        return ' id="' . $this->encodeAttribute($idValue) . '"';
829
+
830
+    }
831
+
832
+    protected function doLists($text) {
833
+    #
834
+    # Form HTML ordered (numbered) and unordered (bulleted) lists.
835
+    #
836
+        $less_than_tab = $this->tab_width - 1;
837
+
838
+        # Re-usable patterns to match list item bullets and number markers:
839
+        $marker_ul_re  = '[*+-]';
840
+        $marker_ol_re  = '\d+[\.]';
841
+
842
+        $markers_relist = array(
843
+            $marker_ul_re => $marker_ol_re,
844
+            $marker_ol_re => $marker_ul_re,
845
+            );
846
+
847
+        foreach ($markers_relist as $marker_re => $other_marker_re) {
848
+            # Re-usable pattern to match any entirel ul or ol list:
849
+            $whole_list_re = '
850 850
 				(								# $1 = whole list
851 851
 				  (								# $2
852 852
 					([ ]{0,'.$less_than_tab.'})	# $3 = number of spaces
@@ -873,96 +873,96 @@  discard block
 block discarded – undo
873 873
 				)
874 874
 			'; // mx
875 875
 			
876
-			# We use a different prefix before nested lists than top-level lists.
877
-			# See extended comment in _ProcessListItems().
876
+            # We use a different prefix before nested lists than top-level lists.
877
+            # See extended comment in _ProcessListItems().
878 878
 		
879
-			if ($this->list_level) {
880
-				$text = preg_replace_callback('{
879
+            if ($this->list_level) {
880
+                $text = preg_replace_callback('{
881 881
 						^
882 882
 						'.$whole_list_re.'
883 883
 					}mx',
884
-					array($this, '_doLists_callback'), $text);
885
-			}
886
-			else {
887
-				$text = preg_replace_callback('{
884
+                    array($this, '_doLists_callback'), $text);
885
+            }
886
+            else {
887
+                $text = preg_replace_callback('{
888 888
 						(?:(?<=\n)\n|\A\n?) # Must eat the newline
889 889
 						'.$whole_list_re.'
890 890
 					}mx',
891
-					array($this, '_doLists_callback'), $text);
892
-			}
893
-		}
894
-
895
-		return $text;
896
-	}
897
-	protected function _doLists_callback($matches) {
898
-		# Re-usable patterns to match list item bullets and number markers:
899
-		$marker_ul_re  = '[*+-]';
900
-		$marker_ol_re  = '\d+[\.]';
901
-		$marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
902
-		$marker_ol_start_re = '[0-9]+';
903
-
904
-		$list = $matches[1];
905
-		$list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol";
906
-
907
-		$marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
908
-
909
-		$list .= "\n";
910
-		$result = $this->processListItems($list, $marker_any_re);
911
-
912
-		$ol_start = 1;
913
-		if ($this->enhanced_ordered_list) {
914
-			# Get the start number for ordered list.
915
-			if ($list_type == 'ol') {
916
-				$ol_start_array = array();
917
-				$ol_start_check = preg_match("/$marker_ol_start_re/", $matches[4], $ol_start_array);
918
-				if ($ol_start_check){
919
-					$ol_start = $ol_start_array[0];
920
-				}
921
-			}
922
-		}
923
-
924
-		if ($ol_start > 1 && $list_type == 'ol'){
925
-			$result = $this->hashBlock("<$list_type start=\"$ol_start\">\n" . $result . "</$list_type>");
926
-		} else {
927
-			$result = $this->hashBlock("<$list_type>\n" . $result . "</$list_type>");
928
-		}
929
-		return "\n". $result ."\n\n";
930
-	}
931
-
932
-	protected $list_level = 0;
933
-
934
-	protected function processListItems($list_str, $marker_any_re) {
935
-	#
936
-	#	Process the contents of a single ordered or unordered list, splitting it
937
-	#	into individual list items.
938
-	#
939
-		# The $this->list_level global keeps track of when we're inside a list.
940
-		# Each time we enter a list, we increment it; when we leave a list,
941
-		# we decrement. If it's zero, we're not in a list anymore.
942
-		#
943
-		# We do this because when we're not inside a list, we want to treat
944
-		# something like this:
945
-		#
946
-		#		I recommend upgrading to version
947
-		#		8. Oops, now this line is treated
948
-		#		as a sub-list.
949
-		#
950
-		# As a single paragraph, despite the fact that the second line starts
951
-		# with a digit-period-space sequence.
952
-		#
953
-		# Whereas when we're inside a list (or sub-list), that line will be
954
-		# treated as the start of a sub-list. What a kludge, huh? This is
955
-		# an aspect of Markdown's syntax that's hard to parse perfectly
956
-		# without resorting to mind-reading. Perhaps the solution is to
957
-		# change the syntax rules such that sub-lists must start with a
958
-		# starting cardinal number; e.g. "1." or "a.".
891
+                    array($this, '_doLists_callback'), $text);
892
+            }
893
+        }
894
+
895
+        return $text;
896
+    }
897
+    protected function _doLists_callback($matches) {
898
+        # Re-usable patterns to match list item bullets and number markers:
899
+        $marker_ul_re  = '[*+-]';
900
+        $marker_ol_re  = '\d+[\.]';
901
+        $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
902
+        $marker_ol_start_re = '[0-9]+';
903
+
904
+        $list = $matches[1];
905
+        $list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol";
906
+
907
+        $marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
908
+
909
+        $list .= "\n";
910
+        $result = $this->processListItems($list, $marker_any_re);
911
+
912
+        $ol_start = 1;
913
+        if ($this->enhanced_ordered_list) {
914
+            # Get the start number for ordered list.
915
+            if ($list_type == 'ol') {
916
+                $ol_start_array = array();
917
+                $ol_start_check = preg_match("/$marker_ol_start_re/", $matches[4], $ol_start_array);
918
+                if ($ol_start_check){
919
+                    $ol_start = $ol_start_array[0];
920
+                }
921
+            }
922
+        }
923
+
924
+        if ($ol_start > 1 && $list_type == 'ol'){
925
+            $result = $this->hashBlock("<$list_type start=\"$ol_start\">\n" . $result . "</$list_type>");
926
+        } else {
927
+            $result = $this->hashBlock("<$list_type>\n" . $result . "</$list_type>");
928
+        }
929
+        return "\n". $result ."\n\n";
930
+    }
931
+
932
+    protected $list_level = 0;
933
+
934
+    protected function processListItems($list_str, $marker_any_re) {
935
+    #
936
+    #	Process the contents of a single ordered or unordered list, splitting it
937
+    #	into individual list items.
938
+    #
939
+        # The $this->list_level global keeps track of when we're inside a list.
940
+        # Each time we enter a list, we increment it; when we leave a list,
941
+        # we decrement. If it's zero, we're not in a list anymore.
942
+        #
943
+        # We do this because when we're not inside a list, we want to treat
944
+        # something like this:
945
+        #
946
+        #		I recommend upgrading to version
947
+        #		8. Oops, now this line is treated
948
+        #		as a sub-list.
949
+        #
950
+        # As a single paragraph, despite the fact that the second line starts
951
+        # with a digit-period-space sequence.
952
+        #
953
+        # Whereas when we're inside a list (or sub-list), that line will be
954
+        # treated as the start of a sub-list. What a kludge, huh? This is
955
+        # an aspect of Markdown's syntax that's hard to parse perfectly
956
+        # without resorting to mind-reading. Perhaps the solution is to
957
+        # change the syntax rules such that sub-lists must start with a
958
+        # starting cardinal number; e.g. "1." or "a.".
959 959
 		
960
-		$this->list_level++;
960
+        $this->list_level++;
961 961
 
962
-		# trim trailing blank lines:
963
-		$list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
962
+        # trim trailing blank lines:
963
+        $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
964 964
 
965
-		$list_str = preg_replace_callback('{
965
+        $list_str = preg_replace_callback('{
966 966
 			(\n)?							# leading line = $1
967 967
 			(^[ ]*)							# leading whitespace = $2
968 968
 			('.$marker_any_re.'				# list marker and space = $3
@@ -972,41 +972,41 @@  discard block
 block discarded – undo
972 972
 			(?:(\n+(?=\n))|\n)				# tailing blank line = $5
973 973
 			(?= \n* (\z | \2 ('.$marker_any_re.') (?:[ ]+|(?=\n))))
974 974
 			}xm',
975
-			array($this, '_processListItems_callback'), $list_str);
976
-
977
-		$this->list_level--;
978
-		return $list_str;
979
-	}
980
-	protected function _processListItems_callback($matches) {
981
-		$item = $matches[4];
982
-		$leading_line =& $matches[1];
983
-		$leading_space =& $matches[2];
984
-		$marker_space = $matches[3];
985
-		$tailing_blank_line =& $matches[5];
986
-
987
-		if ($leading_line || $tailing_blank_line || 
988
-			preg_match('/\n{2,}/', $item))
989
-		{
990
-			# Replace marker with the appropriate whitespace indentation
991
-			$item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
992
-			$item = $this->runBlockGamut($this->outdent($item)."\n");
993
-		}
994
-		else {
995
-			# Recursion for sub-lists:
996
-			$item = $this->doLists($this->outdent($item));
997
-			$item = preg_replace('/\n+$/', '', $item);
998
-			$item = $this->runSpanGamut($item);
999
-		}
1000
-
1001
-		return "<li>" . $item . "</li>\n";
1002
-	}
1003
-
1004
-
1005
-	protected function doCodeBlocks($text) {
1006
-	#
1007
-	#	Process Markdown `<pre><code>` blocks.
1008
-	#
1009
-		$text = preg_replace_callback('{
975
+            array($this, '_processListItems_callback'), $list_str);
976
+
977
+        $this->list_level--;
978
+        return $list_str;
979
+    }
980
+    protected function _processListItems_callback($matches) {
981
+        $item = $matches[4];
982
+        $leading_line =& $matches[1];
983
+        $leading_space =& $matches[2];
984
+        $marker_space = $matches[3];
985
+        $tailing_blank_line =& $matches[5];
986
+
987
+        if ($leading_line || $tailing_blank_line || 
988
+            preg_match('/\n{2,}/', $item))
989
+        {
990
+            # Replace marker with the appropriate whitespace indentation
991
+            $item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
992
+            $item = $this->runBlockGamut($this->outdent($item)."\n");
993
+        }
994
+        else {
995
+            # Recursion for sub-lists:
996
+            $item = $this->doLists($this->outdent($item));
997
+            $item = preg_replace('/\n+$/', '', $item);
998
+            $item = $this->runSpanGamut($item);
999
+        }
1000
+
1001
+        return "<li>" . $item . "</li>\n";
1002
+    }
1003
+
1004
+
1005
+    protected function doCodeBlocks($text) {
1006
+    #
1007
+    #	Process Markdown `<pre><code>` blocks.
1008
+    #
1009
+        $text = preg_replace_callback('{
1010 1010
 				(?:\n\n|\A\n?)
1011 1011
 				(	            # $1 = the code block -- one or more lines, starting with a space/tab
1012 1012
 				  (?>
@@ -1016,197 +1016,197 @@  discard block
 block discarded – undo
1016 1016
 				)
1017 1017
 				((?=^[ ]{0,'.$this->tab_width.'}\S)|\Z)	# Lookahead for non-space at line-start, or end of doc
1018 1018
 			}xm',
1019
-			array($this, '_doCodeBlocks_callback'), $text);
1020
-
1021
-		return $text;
1022
-	}
1023
-	protected function _doCodeBlocks_callback($matches) {
1024
-		$codeblock = $matches[1];
1025
-
1026
-		$codeblock = $this->outdent($codeblock);
1027
-		$codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
1028
-
1029
-		# trim leading newlines and trailing newlines
1030
-		$codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
1031
-
1032
-		$codeblock = "<pre><code>$codeblock\n</code></pre>";
1033
-		return "\n\n".$this->hashBlock($codeblock)."\n\n";
1034
-	}
1035
-
1036
-
1037
-	protected function makeCodeSpan($code) {
1038
-	#
1039
-	# Create a code span markup for $code. Called from handleSpanToken.
1040
-	#
1041
-		$code = htmlspecialchars(trim($code), ENT_NOQUOTES);
1042
-		return $this->hashPart("<code>$code</code>");
1043
-	}
1044
-
1045
-
1046
-	protected $em_relist = array(
1047
-		''  => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?![\.,:;]?\s)',
1048
-		'*' => '(?<![\s*])\*(?!\*)',
1049
-		'_' => '(?<![\s_])_(?!_)',
1050
-		);
1051
-	protected $strong_relist = array(
1052
-		''   => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?![\.,:;]?\s)',
1053
-		'**' => '(?<![\s*])\*\*(?!\*)',
1054
-		'__' => '(?<![\s_])__(?!_)',
1055
-		);
1056
-	protected $em_strong_relist = array(
1057
-		''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?![\.,:;]?\s)',
1058
-		'***' => '(?<![\s*])\*\*\*(?!\*)',
1059
-		'___' => '(?<![\s_])___(?!_)',
1060
-		);
1061
-	protected $em_strong_prepared_relist;
1019
+            array($this, '_doCodeBlocks_callback'), $text);
1020
+
1021
+        return $text;
1022
+    }
1023
+    protected function _doCodeBlocks_callback($matches) {
1024
+        $codeblock = $matches[1];
1025
+
1026
+        $codeblock = $this->outdent($codeblock);
1027
+        $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
1028
+
1029
+        # trim leading newlines and trailing newlines
1030
+        $codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
1031
+
1032
+        $codeblock = "<pre><code>$codeblock\n</code></pre>";
1033
+        return "\n\n".$this->hashBlock($codeblock)."\n\n";
1034
+    }
1035
+
1036
+
1037
+    protected function makeCodeSpan($code) {
1038
+    #
1039
+    # Create a code span markup for $code. Called from handleSpanToken.
1040
+    #
1041
+        $code = htmlspecialchars(trim($code), ENT_NOQUOTES);
1042
+        return $this->hashPart("<code>$code</code>");
1043
+    }
1044
+
1045
+
1046
+    protected $em_relist = array(
1047
+        ''  => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?![\.,:;]?\s)',
1048
+        '*' => '(?<![\s*])\*(?!\*)',
1049
+        '_' => '(?<![\s_])_(?!_)',
1050
+        );
1051
+    protected $strong_relist = array(
1052
+        ''   => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?![\.,:;]?\s)',
1053
+        '**' => '(?<![\s*])\*\*(?!\*)',
1054
+        '__' => '(?<![\s_])__(?!_)',
1055
+        );
1056
+    protected $em_strong_relist = array(
1057
+        ''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?![\.,:;]?\s)',
1058
+        '***' => '(?<![\s*])\*\*\*(?!\*)',
1059
+        '___' => '(?<![\s_])___(?!_)',
1060
+        );
1061
+    protected $em_strong_prepared_relist;
1062 1062
 	
1063
-	protected function prepareItalicsAndBold() {
1064
-	#
1065
-	# Prepare regular expressions for searching emphasis tokens in any
1066
-	# context.
1067
-	#
1068
-		foreach ($this->em_relist as $em => $em_re) {
1069
-			foreach ($this->strong_relist as $strong => $strong_re) {
1070
-				# Construct list of allowed token expressions.
1071
-				$token_relist = array();
1072
-				if (isset($this->em_strong_relist["$em$strong"])) {
1073
-					$token_relist[] = $this->em_strong_relist["$em$strong"];
1074
-				}
1075
-				$token_relist[] = $em_re;
1076
-				$token_relist[] = $strong_re;
1063
+    protected function prepareItalicsAndBold() {
1064
+    #
1065
+    # Prepare regular expressions for searching emphasis tokens in any
1066
+    # context.
1067
+    #
1068
+        foreach ($this->em_relist as $em => $em_re) {
1069
+            foreach ($this->strong_relist as $strong => $strong_re) {
1070
+                # Construct list of allowed token expressions.
1071
+                $token_relist = array();
1072
+                if (isset($this->em_strong_relist["$em$strong"])) {
1073
+                    $token_relist[] = $this->em_strong_relist["$em$strong"];
1074
+                }
1075
+                $token_relist[] = $em_re;
1076
+                $token_relist[] = $strong_re;
1077 1077
 				
1078
-				# Construct master expression from list.
1079
-				$token_re = '{('. implode('|', $token_relist) .')}';
1080
-				$this->em_strong_prepared_relist["$em$strong"] = $token_re;
1081
-			}
1082
-		}
1083
-	}
1078
+                # Construct master expression from list.
1079
+                $token_re = '{('. implode('|', $token_relist) .')}';
1080
+                $this->em_strong_prepared_relist["$em$strong"] = $token_re;
1081
+            }
1082
+        }
1083
+    }
1084 1084
 	
1085
-	protected function doItalicsAndBold($text) {
1086
-		$token_stack = array('');
1087
-		$text_stack = array('');
1088
-		$em = '';
1089
-		$strong = '';
1090
-		$tree_char_em = false;
1085
+    protected function doItalicsAndBold($text) {
1086
+        $token_stack = array('');
1087
+        $text_stack = array('');
1088
+        $em = '';
1089
+        $strong = '';
1090
+        $tree_char_em = false;
1091 1091
 		
1092
-		while (1) {
1093
-			#
1094
-			# Get prepared regular expression for seraching emphasis tokens
1095
-			# in current context.
1096
-			#
1097
-			$token_re = $this->em_strong_prepared_relist["$em$strong"];
1092
+        while (1) {
1093
+            #
1094
+            # Get prepared regular expression for seraching emphasis tokens
1095
+            # in current context.
1096
+            #
1097
+            $token_re = $this->em_strong_prepared_relist["$em$strong"];
1098 1098
 			
1099
-			#
1100
-			# Each loop iteration search for the next emphasis token. 
1101
-			# Each token is then passed to handleSpanToken.
1102
-			#
1103
-			$parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
1104
-			$text_stack[0] .= $parts[0];
1105
-			$token =& $parts[1];
1106
-			$text =& $parts[2];
1099
+            #
1100
+            # Each loop iteration search for the next emphasis token. 
1101
+            # Each token is then passed to handleSpanToken.
1102
+            #
1103
+            $parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
1104
+            $text_stack[0] .= $parts[0];
1105
+            $token =& $parts[1];
1106
+            $text =& $parts[2];
1107 1107
 			
1108
-			if (empty($token)) {
1109
-				# Reached end of text span: empty stack without emitting.
1110
-				# any more emphasis.
1111
-				while ($token_stack[0]) {
1112
-					$text_stack[1] .= array_shift($token_stack);
1113
-					$text_stack[0] .= array_shift($text_stack);
1114
-				}
1115
-				break;
1116
-			}
1108
+            if (empty($token)) {
1109
+                # Reached end of text span: empty stack without emitting.
1110
+                # any more emphasis.
1111
+                while ($token_stack[0]) {
1112
+                    $text_stack[1] .= array_shift($token_stack);
1113
+                    $text_stack[0] .= array_shift($text_stack);
1114
+                }
1115
+                break;
1116
+            }
1117 1117
 			
1118
-			$token_len = strlen($token);
1119
-			if ($tree_char_em) {
1120
-				# Reached closing marker while inside a three-char emphasis.
1121
-				if ($token_len == 3) {
1122
-					# Three-char closing marker, close em and strong.
1123
-					array_shift($token_stack);
1124
-					$span = array_shift($text_stack);
1125
-					$span = $this->runSpanGamut($span);
1126
-					$span = "<strong><em>$span</em></strong>";
1127
-					$text_stack[0] .= $this->hashPart($span);
1128
-					$em = '';
1129
-					$strong = '';
1130
-				} else {
1131
-					# Other closing marker: close one em or strong and
1132
-					# change current token state to match the other
1133
-					$token_stack[0] = str_repeat($token{0}, 3-$token_len);
1134
-					$tag = $token_len == 2 ? "strong" : "em";
1135
-					$span = $text_stack[0];
1136
-					$span = $this->runSpanGamut($span);
1137
-					$span = "<$tag>$span</$tag>";
1138
-					$text_stack[0] = $this->hashPart($span);
1139
-					$$tag = ''; # $$tag stands for $em or $strong
1140
-				}
1141
-				$tree_char_em = false;
1142
-			} else if ($token_len == 3) {
1143
-				if ($em) {
1144
-					# Reached closing marker for both em and strong.
1145
-					# Closing strong marker:
1146
-					for ($i = 0; $i < 2; ++$i) {
1147
-						$shifted_token = array_shift($token_stack);
1148
-						$tag = strlen($shifted_token) == 2 ? "strong" : "em";
1149
-						$span = array_shift($text_stack);
1150
-						$span = $this->runSpanGamut($span);
1151
-						$span = "<$tag>$span</$tag>";
1152
-						$text_stack[0] .= $this->hashPart($span);
1153
-						$$tag = ''; # $$tag stands for $em or $strong
1154
-					}
1155
-				} else {
1156
-					# Reached opening three-char emphasis marker. Push on token 
1157
-					# stack; will be handled by the special condition above.
1158
-					$em = $token{0};
1159
-					$strong = "$em$em";
1160
-					array_unshift($token_stack, $token);
1161
-					array_unshift($text_stack, '');
1162
-					$tree_char_em = true;
1163
-				}
1164
-			} else if ($token_len == 2) {
1165
-				if ($strong) {
1166
-					# Unwind any dangling emphasis marker:
1167
-					if (strlen($token_stack[0]) == 1) {
1168
-						$text_stack[1] .= array_shift($token_stack);
1169
-						$text_stack[0] .= array_shift($text_stack);
1170
-					}
1171
-					# Closing strong marker:
1172
-					array_shift($token_stack);
1173
-					$span = array_shift($text_stack);
1174
-					$span = $this->runSpanGamut($span);
1175
-					$span = "<strong>$span</strong>";
1176
-					$text_stack[0] .= $this->hashPart($span);
1177
-					$strong = '';
1178
-				} else {
1179
-					array_unshift($token_stack, $token);
1180
-					array_unshift($text_stack, '');
1181
-					$strong = $token;
1182
-				}
1183
-			} else {
1184
-				# Here $token_len == 1
1185
-				if ($em) {
1186
-					if (strlen($token_stack[0]) == 1) {
1187
-						# Closing emphasis marker:
1188
-						array_shift($token_stack);
1189
-						$span = array_shift($text_stack);
1190
-						$span = $this->runSpanGamut($span);
1191
-						$span = "<em>$span</em>";
1192
-						$text_stack[0] .= $this->hashPart($span);
1193
-						$em = '';
1194
-					} else {
1195
-						$text_stack[0] .= $token;
1196
-					}
1197
-				} else {
1198
-					array_unshift($token_stack, $token);
1199
-					array_unshift($text_stack, '');
1200
-					$em = $token;
1201
-				}
1202
-			}
1203
-		}
1204
-		return $text_stack[0];
1205
-	}
1206
-
1207
-
1208
-	protected function doBlockQuotes($text) {
1209
-		$text = preg_replace_callback('/
1118
+            $token_len = strlen($token);
1119
+            if ($tree_char_em) {
1120
+                # Reached closing marker while inside a three-char emphasis.
1121
+                if ($token_len == 3) {
1122
+                    # Three-char closing marker, close em and strong.
1123
+                    array_shift($token_stack);
1124
+                    $span = array_shift($text_stack);
1125
+                    $span = $this->runSpanGamut($span);
1126
+                    $span = "<strong><em>$span</em></strong>";
1127
+                    $text_stack[0] .= $this->hashPart($span);
1128
+                    $em = '';
1129
+                    $strong = '';
1130
+                } else {
1131
+                    # Other closing marker: close one em or strong and
1132
+                    # change current token state to match the other
1133
+                    $token_stack[0] = str_repeat($token{0}, 3-$token_len);
1134
+                    $tag = $token_len == 2 ? "strong" : "em";
1135
+                    $span = $text_stack[0];
1136
+                    $span = $this->runSpanGamut($span);
1137
+                    $span = "<$tag>$span</$tag>";
1138
+                    $text_stack[0] = $this->hashPart($span);
1139
+                    $$tag = ''; # $$tag stands for $em or $strong
1140
+                }
1141
+                $tree_char_em = false;
1142
+            } else if ($token_len == 3) {
1143
+                if ($em) {
1144
+                    # Reached closing marker for both em and strong.
1145
+                    # Closing strong marker:
1146
+                    for ($i = 0; $i < 2; ++$i) {
1147
+                        $shifted_token = array_shift($token_stack);
1148
+                        $tag = strlen($shifted_token) == 2 ? "strong" : "em";
1149
+                        $span = array_shift($text_stack);
1150
+                        $span = $this->runSpanGamut($span);
1151
+                        $span = "<$tag>$span</$tag>";
1152
+                        $text_stack[0] .= $this->hashPart($span);
1153
+                        $$tag = ''; # $$tag stands for $em or $strong
1154
+                    }
1155
+                } else {
1156
+                    # Reached opening three-char emphasis marker. Push on token 
1157
+                    # stack; will be handled by the special condition above.
1158
+                    $em = $token{0};
1159
+                    $strong = "$em$em";
1160
+                    array_unshift($token_stack, $token);
1161
+                    array_unshift($text_stack, '');
1162
+                    $tree_char_em = true;
1163
+                }
1164
+            } else if ($token_len == 2) {
1165
+                if ($strong) {
1166
+                    # Unwind any dangling emphasis marker:
1167
+                    if (strlen($token_stack[0]) == 1) {
1168
+                        $text_stack[1] .= array_shift($token_stack);
1169
+                        $text_stack[0] .= array_shift($text_stack);
1170
+                    }
1171
+                    # Closing strong marker:
1172
+                    array_shift($token_stack);
1173
+                    $span = array_shift($text_stack);
1174
+                    $span = $this->runSpanGamut($span);
1175
+                    $span = "<strong>$span</strong>";
1176
+                    $text_stack[0] .= $this->hashPart($span);
1177
+                    $strong = '';
1178
+                } else {
1179
+                    array_unshift($token_stack, $token);
1180
+                    array_unshift($text_stack, '');
1181
+                    $strong = $token;
1182
+                }
1183
+            } else {
1184
+                # Here $token_len == 1
1185
+                if ($em) {
1186
+                    if (strlen($token_stack[0]) == 1) {
1187
+                        # Closing emphasis marker:
1188
+                        array_shift($token_stack);
1189
+                        $span = array_shift($text_stack);
1190
+                        $span = $this->runSpanGamut($span);
1191
+                        $span = "<em>$span</em>";
1192
+                        $text_stack[0] .= $this->hashPart($span);
1193
+                        $em = '';
1194
+                    } else {
1195
+                        $text_stack[0] .= $token;
1196
+                    }
1197
+                } else {
1198
+                    array_unshift($token_stack, $token);
1199
+                    array_unshift($text_stack, '');
1200
+                    $em = $token;
1201
+                }
1202
+            }
1203
+        }
1204
+        return $text_stack[0];
1205
+    }
1206
+
1207
+
1208
+    protected function doBlockQuotes($text) {
1209
+        $text = preg_replace_callback('/
1210 1210
 			  (								# Wrap whole match in $1
1211 1211
 				(?>
1212 1212
 				  ^[ ]*>[ ]?			# ">" at the start of a line
@@ -1216,58 +1216,58 @@  discard block
 block discarded – undo
1216 1216
 				)+
1217 1217
 			  )
1218 1218
 			/xm',
1219
-			array($this, '_doBlockQuotes_callback'), $text);
1220
-
1221
-		return $text;
1222
-	}
1223
-	protected function _doBlockQuotes_callback($matches) {
1224
-		$bq = $matches[1];
1225
-		# trim one level of quoting - trim whitespace-only lines
1226
-		$bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq);
1227
-		$bq = $this->runBlockGamut($bq);		# recurse
1228
-
1229
-		$bq = preg_replace('/^/m', "  ", $bq);
1230
-		# These leading spaces cause problem with <pre> content, 
1231
-		# so we need to fix that:
1232
-		$bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx', 
1233
-			array($this, '_doBlockQuotes_callback2'), $bq);
1234
-
1235
-		return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
1236
-	}
1237
-	protected function _doBlockQuotes_callback2($matches) {
1238
-		$pre = $matches[1];
1239
-		$pre = preg_replace('/^  /m', '', $pre);
1240
-		return $pre;
1241
-	}
1242
-
1243
-
1244
-	protected function formParagraphs($text) {
1245
-	#
1246
-	#	Params:
1247
-	#		$text - string to process with html <p> tags
1248
-	#
1249
-		# Strip leading and trailing lines:
1250
-		$text = preg_replace('/\A\n+|\n+\z/', '', $text);
1251
-
1252
-		$grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
1253
-
1254
-		#
1255
-		# Wrap <p> tags and unhashify HTML blocks
1256
-		#
1257
-		foreach ($grafs as $key => $value) {
1258
-			if (!preg_match('/^B\x1A[0-9]+B$/', $value)) {
1259
-				# Is a paragraph.
1260
-				$value = $this->runSpanGamut($value);
1261
-				$value = preg_replace('/^([ ]*)/', "<p>", $value);
1262
-				$value .= "</p>";
1263
-				$grafs[$key] = $this->unhash($value);
1264
-			}
1265
-			else {
1266
-				# Is a block.
1267
-				# Modify elements of @grafs in-place...
1268
-				$graf = $value;
1269
-				$block = $this->html_hashes[$graf];
1270
-				$graf = $block;
1219
+            array($this, '_doBlockQuotes_callback'), $text);
1220
+
1221
+        return $text;
1222
+    }
1223
+    protected function _doBlockQuotes_callback($matches) {
1224
+        $bq = $matches[1];
1225
+        # trim one level of quoting - trim whitespace-only lines
1226
+        $bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq);
1227
+        $bq = $this->runBlockGamut($bq);		# recurse
1228
+
1229
+        $bq = preg_replace('/^/m', "  ", $bq);
1230
+        # These leading spaces cause problem with <pre> content, 
1231
+        # so we need to fix that:
1232
+        $bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx', 
1233
+            array($this, '_doBlockQuotes_callback2'), $bq);
1234
+
1235
+        return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
1236
+    }
1237
+    protected function _doBlockQuotes_callback2($matches) {
1238
+        $pre = $matches[1];
1239
+        $pre = preg_replace('/^  /m', '', $pre);
1240
+        return $pre;
1241
+    }
1242
+
1243
+
1244
+    protected function formParagraphs($text) {
1245
+    #
1246
+    #	Params:
1247
+    #		$text - string to process with html <p> tags
1248
+    #
1249
+        # Strip leading and trailing lines:
1250
+        $text = preg_replace('/\A\n+|\n+\z/', '', $text);
1251
+
1252
+        $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
1253
+
1254
+        #
1255
+        # Wrap <p> tags and unhashify HTML blocks
1256
+        #
1257
+        foreach ($grafs as $key => $value) {
1258
+            if (!preg_match('/^B\x1A[0-9]+B$/', $value)) {
1259
+                # Is a paragraph.
1260
+                $value = $this->runSpanGamut($value);
1261
+                $value = preg_replace('/^([ ]*)/', "<p>", $value);
1262
+                $value .= "</p>";
1263
+                $grafs[$key] = $this->unhash($value);
1264
+            }
1265
+            else {
1266
+                # Is a block.
1267
+                # Modify elements of @grafs in-place...
1268
+                $graf = $value;
1269
+                $block = $this->html_hashes[$graf];
1270
+                $graf = $block;
1271 1271
 //				if (preg_match('{
1272 1272
 //					\A
1273 1273
 //					(							# $1 = <div> tag
@@ -1303,79 +1303,79 @@  discard block
 block discarded – undo
1303 1303
 //
1304 1304
 //					$graf = $div_open . "\n" . $div_content . "\n" . $div_close;
1305 1305
 //				}
1306
-				$grafs[$key] = $graf;
1307
-			}
1308
-		}
1309
-
1310
-		return implode("\n\n", $grafs);
1311
-	}
1312
-
1313
-
1314
-	protected function encodeAttribute($text) {
1315
-	#
1316
-	# Encode text for a double-quoted HTML attribute. This function
1317
-	# is *not* suitable for attributes enclosed in single quotes.
1318
-	#
1319
-		$text = $this->encodeAmpsAndAngles($text);
1320
-		$text = str_replace('"', '&quot;', $text);
1321
-		return $text;
1322
-	}
1323
-
1324
-
1325
-	protected function encodeURLAttribute($url, &$text = null) {
1326
-	#
1327
-	# Encode text for a double-quoted HTML attribute containing a URL,
1328
-	# applying the URL filter if set. Also generates the textual
1329
-	# representation for the URL (removing mailto: or tel:) storing it in $text.
1330
-	# This function is *not* suitable for attributes enclosed in single quotes.
1331
-	#
1332
-		if ($this->url_filter_func)
1333
-			$url = call_user_func($this->url_filter_func, $url);
1334
-
1335
-		if (preg_match('{^mailto:}i', $url))
1336
-			$url = $this->encodeEntityObfuscatedAttribute($url, $text, 7);
1337
-		else if (preg_match('{^tel:}i', $url))
1338
-		{
1339
-			$url = $this->encodeAttribute($url);
1340
-			$text = substr($url, 4);
1341
-		}
1342
-		else
1343
-		{
1344
-			$url = $this->encodeAttribute($url);
1345
-			$text = $url;
1346
-		}
1347
-
1348
-		return $url;
1349
-	}
1306
+                $grafs[$key] = $graf;
1307
+            }
1308
+        }
1309
+
1310
+        return implode("\n\n", $grafs);
1311
+    }
1312
+
1313
+
1314
+    protected function encodeAttribute($text) {
1315
+    #
1316
+    # Encode text for a double-quoted HTML attribute. This function
1317
+    # is *not* suitable for attributes enclosed in single quotes.
1318
+    #
1319
+        $text = $this->encodeAmpsAndAngles($text);
1320
+        $text = str_replace('"', '&quot;', $text);
1321
+        return $text;
1322
+    }
1323
+
1324
+
1325
+    protected function encodeURLAttribute($url, &$text = null) {
1326
+    #
1327
+    # Encode text for a double-quoted HTML attribute containing a URL,
1328
+    # applying the URL filter if set. Also generates the textual
1329
+    # representation for the URL (removing mailto: or tel:) storing it in $text.
1330
+    # This function is *not* suitable for attributes enclosed in single quotes.
1331
+    #
1332
+        if ($this->url_filter_func)
1333
+            $url = call_user_func($this->url_filter_func, $url);
1334
+
1335
+        if (preg_match('{^mailto:}i', $url))
1336
+            $url = $this->encodeEntityObfuscatedAttribute($url, $text, 7);
1337
+        else if (preg_match('{^tel:}i', $url))
1338
+        {
1339
+            $url = $this->encodeAttribute($url);
1340
+            $text = substr($url, 4);
1341
+        }
1342
+        else
1343
+        {
1344
+            $url = $this->encodeAttribute($url);
1345
+            $text = $url;
1346
+        }
1347
+
1348
+        return $url;
1349
+    }
1350 1350
 	
1351 1351
 	
1352
-	protected function encodeAmpsAndAngles($text) {
1353
-	#
1354
-	# Smart processing for ampersands and angle brackets that need to 
1355
-	# be encoded. Valid character entities are left alone unless the
1356
-	# no-entities mode is set.
1357
-	#
1358
-		if ($this->no_entities) {
1359
-			$text = str_replace('&', '&amp;', $text);
1360
-		} else {
1361
-			# Ampersand-encoding based entirely on Nat Irons's Amputator
1362
-			# MT plugin: <http://bumppo.net/projects/amputator/>
1363
-			$text = preg_replace('/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/', 
1364
-								'&amp;', $text);
1365
-		}
1366
-		# Encode remaining <'s
1367
-		$text = str_replace('<', '&lt;', $text);
1368
-
1369
-		return $text;
1370
-	}
1371
-
1372
-
1373
-	protected function doAutoLinks($text) {
1374
-		$text = preg_replace_callback('{<((https?|ftp|dict|tel):[^\'">\s]+)>}i',
1375
-			array($this, '_doAutoLinks_url_callback'), $text);
1376
-
1377
-		# Email addresses: <[email protected]>
1378
-		$text = preg_replace_callback('{
1352
+    protected function encodeAmpsAndAngles($text) {
1353
+    #
1354
+    # Smart processing for ampersands and angle brackets that need to 
1355
+    # be encoded. Valid character entities are left alone unless the
1356
+    # no-entities mode is set.
1357
+    #
1358
+        if ($this->no_entities) {
1359
+            $text = str_replace('&', '&amp;', $text);
1360
+        } else {
1361
+            # Ampersand-encoding based entirely on Nat Irons's Amputator
1362
+            # MT plugin: <http://bumppo.net/projects/amputator/>
1363
+            $text = preg_replace('/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/', 
1364
+                                '&amp;', $text);
1365
+        }
1366
+        # Encode remaining <'s
1367
+        $text = str_replace('<', '&lt;', $text);
1368
+
1369
+        return $text;
1370
+    }
1371
+
1372
+
1373
+    protected function doAutoLinks($text) {
1374
+        $text = preg_replace_callback('{<((https?|ftp|dict|tel):[^\'">\s]+)>}i',
1375
+            array($this, '_doAutoLinks_url_callback'), $text);
1376
+
1377
+        # Email addresses: <[email protected]>
1378
+        $text = preg_replace_callback('{
1379 1379
 			<
1380 1380
 			(?:mailto:)?
1381 1381
 			(
@@ -1393,76 +1393,76 @@  discard block
 block discarded – undo
1393 1393
 			)
1394 1394
 			>
1395 1395
 			}xi',
1396
-			array($this, '_doAutoLinks_email_callback'), $text);
1397
-
1398
-		return $text;
1399
-	}
1400
-	protected function _doAutoLinks_url_callback($matches) {
1401
-		$url = $this->encodeURLAttribute($matches[1], $text);
1402
-		$link = "<a href=\"$url\">$text</a>";
1403
-		return $this->hashPart($link);
1404
-	}
1405
-	protected function _doAutoLinks_email_callback($matches) {
1406
-		$addr = $matches[1];
1407
-		$url = $this->encodeURLAttribute("mailto:$addr", $text);
1408
-		$link = "<a href=\"$url\">$text</a>";
1409
-		return $this->hashPart($link);
1410
-	}
1411
-
1412
-
1413
-	protected function encodeEntityObfuscatedAttribute($text, &$tail = null, $head_length = 0) {
1414
-	#
1415
-	#	Input: some text to obfuscate, e.g. "mailto:[email protected]"
1416
-	#
1417
-	#	Output: the same text but with most characters encoded as either a
1418
-	#		decimal or hex entity, in the hopes of foiling most address
1419
-	#		harvesting spam bots. E.g.:
1420
-	#
1421
-	#        &#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x66;o&#111;
1422
-	#        &#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;&#101;&#46;&#x63;&#111;
1423
-	#        &#x6d;
1424
-	#
1425
-	#	Note: the additional output $tail is assigned the same value as the
1426
-	#	ouput, minus the number of characters specified by $head_length.
1427
-	#
1428
-	#	Based by a filter by Matthew Wickline, posted to BBEdit-Talk.
1429
-	#   With some optimizations by Milian Wolff. Forced encoding of HTML
1430
-	#	attribute special characters by Allan Odgaard.
1431
-	#
1432
-		if ($text == "") return $tail = "";
1433
-
1434
-		$chars = preg_split('/(?<!^)(?!$)/', $text);
1435
-		$seed = (int)abs(crc32($text) / strlen($text)); # Deterministic seed.
1436
-
1437
-		foreach ($chars as $key => $char) {
1438
-			$ord = ord($char);
1439
-			# Ignore non-ascii chars.
1440
-			if ($ord < 128) {
1441
-				$r = ($seed * (1 + $key)) % 100; # Pseudo-random function.
1442
-				# roughly 10% raw, 45% hex, 45% dec
1443
-				# '@' *must* be encoded. I insist.
1444
-				# '"' and '>' have to be encoded inside the attribute
1445
-				if ($r > 90 && strpos('@"&>', $char) === false) /* do nothing */;
1446
-				else if ($r < 45) $chars[$key] = '&#x'.dechex($ord).';';
1447
-				else              $chars[$key] = '&#'.$ord.';';
1448
-			}
1449
-		}
1450
-
1451
-		$text = implode('', $chars);
1452
-		$tail = $head_length ? implode('', array_slice($chars, $head_length)) : $text;
1453
-
1454
-		return $text;
1455
-	}
1456
-
1457
-
1458
-	protected function parseSpan($str) {
1459
-	#
1460
-	# Take the string $str and parse it into tokens, hashing embeded HTML,
1461
-	# escaped characters and handling code spans.
1462
-	#
1463
-		$output = '';
1396
+            array($this, '_doAutoLinks_email_callback'), $text);
1397
+
1398
+        return $text;
1399
+    }
1400
+    protected function _doAutoLinks_url_callback($matches) {
1401
+        $url = $this->encodeURLAttribute($matches[1], $text);
1402
+        $link = "<a href=\"$url\">$text</a>";
1403
+        return $this->hashPart($link);
1404
+    }
1405
+    protected function _doAutoLinks_email_callback($matches) {
1406
+        $addr = $matches[1];
1407
+        $url = $this->encodeURLAttribute("mailto:$addr", $text);
1408
+        $link = "<a href=\"$url\">$text</a>";
1409
+        return $this->hashPart($link);
1410
+    }
1411
+
1412
+
1413
+    protected function encodeEntityObfuscatedAttribute($text, &$tail = null, $head_length = 0) {
1414
+    #
1415
+    #	Input: some text to obfuscate, e.g. "mailto:[email protected]"
1416
+    #
1417
+    #	Output: the same text but with most characters encoded as either a
1418
+    #		decimal or hex entity, in the hopes of foiling most address
1419
+    #		harvesting spam bots. E.g.:
1420
+    #
1421
+    #        &#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x66;o&#111;
1422
+    #        &#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;&#101;&#46;&#x63;&#111;
1423
+    #        &#x6d;
1424
+    #
1425
+    #	Note: the additional output $tail is assigned the same value as the
1426
+    #	ouput, minus the number of characters specified by $head_length.
1427
+    #
1428
+    #	Based by a filter by Matthew Wickline, posted to BBEdit-Talk.
1429
+    #   With some optimizations by Milian Wolff. Forced encoding of HTML
1430
+    #	attribute special characters by Allan Odgaard.
1431
+    #
1432
+        if ($text == "") return $tail = "";
1433
+
1434
+        $chars = preg_split('/(?<!^)(?!$)/', $text);
1435
+        $seed = (int)abs(crc32($text) / strlen($text)); # Deterministic seed.
1436
+
1437
+        foreach ($chars as $key => $char) {
1438
+            $ord = ord($char);
1439
+            # Ignore non-ascii chars.
1440
+            if ($ord < 128) {
1441
+                $r = ($seed * (1 + $key)) % 100; # Pseudo-random function.
1442
+                # roughly 10% raw, 45% hex, 45% dec
1443
+                # '@' *must* be encoded. I insist.
1444
+                # '"' and '>' have to be encoded inside the attribute
1445
+                if ($r > 90 && strpos('@"&>', $char) === false) /* do nothing */;
1446
+                else if ($r < 45) $chars[$key] = '&#x'.dechex($ord).';';
1447
+                else              $chars[$key] = '&#'.$ord.';';
1448
+            }
1449
+        }
1450
+
1451
+        $text = implode('', $chars);
1452
+        $tail = $head_length ? implode('', array_slice($chars, $head_length)) : $text;
1453
+
1454
+        return $text;
1455
+    }
1456
+
1457
+
1458
+    protected function parseSpan($str) {
1459
+    #
1460
+    # Take the string $str and parse it into tokens, hashing embeded HTML,
1461
+    # escaped characters and handling code spans.
1462
+    #
1463
+        $output = '';
1464 1464
 		
1465
-		$span_re = '{
1465
+        $span_re = '{
1466 1466
 				(
1467 1467
 					\\\\'.$this->escape_chars_re.'
1468 1468
 				|
@@ -1488,122 +1488,122 @@  discard block
 block discarded – undo
1488 1488
 				)
1489 1489
 				}xs';
1490 1490
 
1491
-		while (1) {
1492
-			#
1493
-			# Each loop iteration seach for either the next tag, the next 
1494
-			# openning code span marker, or the next escaped character. 
1495
-			# Each token is then passed to handleSpanToken.
1496
-			#
1497
-			$parts = preg_split($span_re, $str, 2, PREG_SPLIT_DELIM_CAPTURE);
1491
+        while (1) {
1492
+            #
1493
+            # Each loop iteration seach for either the next tag, the next 
1494
+            # openning code span marker, or the next escaped character. 
1495
+            # Each token is then passed to handleSpanToken.
1496
+            #
1497
+            $parts = preg_split($span_re, $str, 2, PREG_SPLIT_DELIM_CAPTURE);
1498 1498
 			
1499
-			# Create token from text preceding tag.
1500
-			if ($parts[0] != "") {
1501
-				$output .= $parts[0];
1502
-			}
1499
+            # Create token from text preceding tag.
1500
+            if ($parts[0] != "") {
1501
+                $output .= $parts[0];
1502
+            }
1503 1503
 			
1504
-			# Check if we reach the end.
1505
-			if (isset($parts[1])) {
1506
-				$output .= $this->handleSpanToken($parts[1], $parts[2]);
1507
-				$str = $parts[2];
1508
-			}
1509
-			else {
1510
-				break;
1511
-			}
1512
-		}
1504
+            # Check if we reach the end.
1505
+            if (isset($parts[1])) {
1506
+                $output .= $this->handleSpanToken($parts[1], $parts[2]);
1507
+                $str = $parts[2];
1508
+            }
1509
+            else {
1510
+                break;
1511
+            }
1512
+        }
1513 1513
 		
1514
-		return $output;
1515
-	}
1514
+        return $output;
1515
+    }
1516 1516
 	
1517 1517
 	
1518
-	protected function handleSpanToken($token, &$str) {
1519
-	#
1520
-	# Handle $token provided by parseSpan by determining its nature and 
1521
-	# returning the corresponding value that should replace it.
1522
-	#
1523
-		switch ($token{0}) {
1524
-			case "\\":
1525
-				return $this->hashPart("&#". ord($token{1}). ";");
1526
-			case "`":
1527
-				# Search for end marker in remaining text.
1528
-				if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm', 
1529
-					$str, $matches))
1530
-				{
1531
-					$str = $matches[2];
1532
-					$codespan = $this->makeCodeSpan($matches[1]);
1533
-					return $this->hashPart($codespan);
1534
-				}
1535
-				return $token; // return as text since no ending marker found.
1536
-			default:
1537
-				return $this->hashPart($token);
1538
-		}
1539
-	}
1540
-
1541
-
1542
-	protected function outdent($text) {
1543
-	#
1544
-	# Remove one level of line-leading tabs or spaces
1545
-	#
1546
-		return preg_replace('/^(\t|[ ]{1,'.$this->tab_width.'})/m', '', $text);
1547
-	}
1548
-
1549
-
1550
-	# String length function for detab. `_initDetab` will create a function to 
1551
-	# hanlde UTF-8 if the default function does not exist.
1552
-	protected $utf8_strlen = 'mb_strlen';
1518
+    protected function handleSpanToken($token, &$str) {
1519
+    #
1520
+    # Handle $token provided by parseSpan by determining its nature and 
1521
+    # returning the corresponding value that should replace it.
1522
+    #
1523
+        switch ($token{0}) {
1524
+            case "\\":
1525
+                return $this->hashPart("&#". ord($token{1}). ";");
1526
+            case "`":
1527
+                # Search for end marker in remaining text.
1528
+                if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm', 
1529
+                    $str, $matches))
1530
+                {
1531
+                    $str = $matches[2];
1532
+                    $codespan = $this->makeCodeSpan($matches[1]);
1533
+                    return $this->hashPart($codespan);
1534
+                }
1535
+                return $token; // return as text since no ending marker found.
1536
+            default:
1537
+                return $this->hashPart($token);
1538
+        }
1539
+    }
1540
+
1541
+
1542
+    protected function outdent($text) {
1543
+    #
1544
+    # Remove one level of line-leading tabs or spaces
1545
+    #
1546
+        return preg_replace('/^(\t|[ ]{1,'.$this->tab_width.'})/m', '', $text);
1547
+    }
1548
+
1549
+
1550
+    # String length function for detab. `_initDetab` will create a function to 
1551
+    # hanlde UTF-8 if the default function does not exist.
1552
+    protected $utf8_strlen = 'mb_strlen';
1553 1553
 	
1554
-	protected function detab($text) {
1555
-	#
1556
-	# Replace tabs with the appropriate amount of space.
1557
-	#
1558
-		# For each line we separate the line in blocks delemited by
1559
-		# tab characters. Then we reconstruct every line by adding the 
1560
-		# appropriate number of space between each blocks.
1554
+    protected function detab($text) {
1555
+    #
1556
+    # Replace tabs with the appropriate amount of space.
1557
+    #
1558
+        # For each line we separate the line in blocks delemited by
1559
+        # tab characters. Then we reconstruct every line by adding the 
1560
+        # appropriate number of space between each blocks.
1561 1561
 		
1562
-		$text = preg_replace_callback('/^.*\t.*$/m',
1563
-			array($this, '_detab_callback'), $text);
1564
-
1565
-		return $text;
1566
-	}
1567
-	protected function _detab_callback($matches) {
1568
-		$line = $matches[0];
1569
-		$strlen = $this->utf8_strlen; # strlen function for UTF-8.
1562
+        $text = preg_replace_callback('/^.*\t.*$/m',
1563
+            array($this, '_detab_callback'), $text);
1564
+
1565
+        return $text;
1566
+    }
1567
+    protected function _detab_callback($matches) {
1568
+        $line = $matches[0];
1569
+        $strlen = $this->utf8_strlen; # strlen function for UTF-8.
1570 1570
 		
1571
-		# Split in blocks.
1572
-		$blocks = explode("\t", $line);
1573
-		# Add each blocks to the line.
1574
-		$line = $blocks[0];
1575
-		unset($blocks[0]); # Do not add first block twice.
1576
-		foreach ($blocks as $block) {
1577
-			# Calculate amount of space, insert spaces, insert block.
1578
-			$amount = $this->tab_width - 
1579
-				$strlen($line, 'UTF-8') % $this->tab_width;
1580
-			$line .= str_repeat(" ", $amount) . $block;
1581
-		}
1582
-		return $line;
1583
-	}
1584
-	protected function _initDetab() {
1585
-	#
1586
-	# Check for the availability of the function in the `utf8_strlen` property
1587
-	# (initially `mb_strlen`). If the function is not available, create a 
1588
-	# function that will loosely count the number of UTF-8 characters with a
1589
-	# regular expression.
1590
-	#
1591
-		if (function_exists($this->utf8_strlen)) return;
1592
-		$this->utf8_strlen = create_function('$text', 'return preg_match_all(
1571
+        # Split in blocks.
1572
+        $blocks = explode("\t", $line);
1573
+        # Add each blocks to the line.
1574
+        $line = $blocks[0];
1575
+        unset($blocks[0]); # Do not add first block twice.
1576
+        foreach ($blocks as $block) {
1577
+            # Calculate amount of space, insert spaces, insert block.
1578
+            $amount = $this->tab_width - 
1579
+                $strlen($line, 'UTF-8') % $this->tab_width;
1580
+            $line .= str_repeat(" ", $amount) . $block;
1581
+        }
1582
+        return $line;
1583
+    }
1584
+    protected function _initDetab() {
1585
+    #
1586
+    # Check for the availability of the function in the `utf8_strlen` property
1587
+    # (initially `mb_strlen`). If the function is not available, create a 
1588
+    # function that will loosely count the number of UTF-8 characters with a
1589
+    # regular expression.
1590
+    #
1591
+        if (function_exists($this->utf8_strlen)) return;
1592
+        $this->utf8_strlen = create_function('$text', 'return preg_match_all(
1593 1593
 			"/[\\\\x00-\\\\xBF]|[\\\\xC0-\\\\xFF][\\\\x80-\\\\xBF]*/", 
1594 1594
 			$text, $m);');
1595
-	}
1596
-
1597
-
1598
-	protected function unhash($text) {
1599
-	#
1600
-	# Swap back in all the tags hashed by _HashHTMLBlocks.
1601
-	#
1602
-		return preg_replace_callback('/(.)\x1A[0-9]+\1/', 
1603
-			array($this, '_unhash_callback'), $text);
1604
-	}
1605
-	protected function _unhash_callback($matches) {
1606
-		return $this->html_hashes[$matches[0]];
1607
-	}
1595
+    }
1596
+
1597
+
1598
+    protected function unhash($text) {
1599
+    #
1600
+    # Swap back in all the tags hashed by _HashHTMLBlocks.
1601
+    #
1602
+        return preg_replace_callback('/(.)\x1A[0-9]+\1/', 
1603
+            array($this, '_unhash_callback'), $text);
1604
+    }
1605
+    protected function _unhash_callback($matches) {
1606
+        return $this->html_hashes[$matches[0]];
1607
+    }
1608 1608
 
1609 1609
 }
Please login to merge, or discard this patch.
Spacing   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -21,7 +21,7 @@  discard block
 block discarded – undo
21 21
 
22 22
 	### Version ###
23 23
 
24
-	const  MARKDOWNLIB_VERSION  =  "1.5.0";
24
+	const  MARKDOWNLIB_VERSION = "1.5.0";
25 25
 
26 26
 	### Simple Function Interface ###
27 27
 
@@ -35,7 +35,7 @@  discard block
 block discarded – undo
35 35
 
36 36
 		# try to take parser from the static parser list
37 37
 		static $parser_list;
38
-		$parser =& $parser_list[$parser_class];
38
+		$parser = & $parser_list[$parser_class];
39 39
 
40 40
 		# create the parser it not already set
41 41
 		if (!$parser)
@@ -186,7 +186,7 @@  discard block
 block discarded – undo
186 186
 		
187 187
 		$this->teardown();
188 188
 
189
-		return $text . "\n";
189
+		return $text."\n";
190 190
 	}
191 191
 	
192 192
 	protected $document_gamut = array(
@@ -235,7 +235,7 @@  discard block
 block discarded – undo
235 235
 		$link_id = strtolower($matches[1]);
236 236
 		$url = $matches[2] == '' ? $matches[3] : $matches[2];
237 237
 		$this->urls[$link_id] = $url;
238
-		$this->titles[$link_id] =& $matches[4];
238
+		$this->titles[$link_id] = & $matches[4];
239 239
 		return ''; # String that will replace the block
240 240
 	}
241 241
 
@@ -290,8 +290,8 @@  discard block
 block discarded – undo
290 290
 					(?>
291 291
 					  />
292 292
 					|
293
-					  >', $nested_tags_level).	# end of opening tag
294
-					  '.*?'.					# last level nested tag content
293
+					  >', $nested_tags_level).# end of opening tag
294
+					  '.*?'.# last level nested tag content
295 295
 			str_repeat('
296 296
 					  </\2\s*>	# closing nested tag
297 297
 					)
@@ -403,7 +403,7 @@  discard block
 block discarded – undo
403 403
 		
404 404
 		# Then hash the block.
405 405
 		static $i = 0;
406
-		$key = "$boundary\x1A" . ++$i . $boundary;
406
+		$key = "$boundary\x1A".++$i.$boundary;
407 407
 		$this->html_hashes[$key] = $text;
408 408
 		return $key; # String that will replace the tag.
409 409
 	}
@@ -596,9 +596,9 @@  discard block
 block discarded – undo
596 596
 		return $text;
597 597
 	}
598 598
 	protected function _doAnchors_reference_callback($matches) {
599
-		$whole_match =  $matches[1];
600
-		$link_text   =  $matches[2];
601
-		$link_id     =& $matches[3];
599
+		$whole_match = $matches[1];
600
+		$link_text   = $matches[2];
601
+		$link_id     = & $matches[3];
602 602
 
603 603
 		if ($link_id == "") {
604 604
 			# for shortcut links like [this][] or [this].
@@ -614,10 +614,10 @@  discard block
 block discarded – undo
614 614
 			$url = $this->encodeURLAttribute($url);
615 615
 			
616 616
 			$result = "<a href=\"$url\"";
617
-			if ( isset( $this->titles[$link_id] ) ) {
617
+			if (isset($this->titles[$link_id])) {
618 618
 				$title = $this->titles[$link_id];
619 619
 				$title = $this->encodeAttribute($title);
620
-				$result .=  " title=\"$title\"";
620
+				$result .= " title=\"$title\"";
621 621
 			}
622 622
 		
623 623
 			$link_text = $this->runSpanGamut($link_text);
@@ -630,10 +630,10 @@  discard block
 block discarded – undo
630 630
 		return $result;
631 631
 	}
632 632
 	protected function _doAnchors_inline_callback($matches) {
633
-		$whole_match	=  $matches[1];
634
-		$link_text		=  $this->runSpanGamut($matches[2]);
635
-		$url			=  $matches[3] == '' ? $matches[4] : $matches[3];
636
-		$title			=& $matches[7];
633
+		$whole_match = $matches[1];
634
+		$link_text = $this->runSpanGamut($matches[2]);
635
+		$url = $matches[3] == '' ? $matches[4] : $matches[3];
636
+		$title = & $matches[7];
637 637
 
638 638
 		// if the URL was of the form <s p a c e s> it got caught by the HTML
639 639
 		// tag parser and hashed. Need to reverse the process before using the URL.
@@ -646,7 +646,7 @@  discard block
 block discarded – undo
646 646
 		$result = "<a href=\"$url\"";
647 647
 		if (isset($title)) {
648 648
 			$title = $this->encodeAttribute($title);
649
-			$result .=  " title=\"$title\"";
649
+			$result .= " title=\"$title\"";
650 650
 		}
651 651
 		
652 652
 		$link_text = $this->runSpanGamut($link_text);
@@ -727,7 +727,7 @@  discard block
 block discarded – undo
727 727
 			if (isset($this->titles[$link_id])) {
728 728
 				$title = $this->titles[$link_id];
729 729
 				$title = $this->encodeAttribute($title);
730
-				$result .=  " title=\"$title\"";
730
+				$result .= " title=\"$title\"";
731 731
 			}
732 732
 			$result .= $this->empty_element_suffix;
733 733
 			$result = $this->hashPart($result);
@@ -740,17 +740,17 @@  discard block
 block discarded – undo
740 740
 		return $result;
741 741
 	}
742 742
 	protected function _doImages_inline_callback($matches) {
743
-		$whole_match	= $matches[1];
744
-		$alt_text		= $matches[2];
745
-		$url			= $matches[3] == '' ? $matches[4] : $matches[3];
746
-		$title			=& $matches[7];
743
+		$whole_match = $matches[1];
744
+		$alt_text = $matches[2];
745
+		$url = $matches[3] == '' ? $matches[4] : $matches[3];
746
+		$title = & $matches[7];
747 747
 
748 748
 		$alt_text = $this->encodeAttribute($alt_text);
749 749
 		$url = $this->encodeURLAttribute($url);
750 750
 		$result = "<img src=\"$url\" alt=\"$alt_text\"";
751 751
 		if (isset($title)) {
752 752
 			$title = $this->encodeAttribute($title);
753
-			$result .=  " title=\"$title\""; # $title already quoted
753
+			$result .= " title=\"$title\""; # $title already quoted
754 754
 		}
755 755
 		$result .= $this->empty_element_suffix;
756 756
 
@@ -800,7 +800,7 @@  discard block
 block discarded – undo
800 800
 		$idAtt = $this->_generateIdFromHeaderValue($matches[1]);
801 801
 
802 802
 		$block = "<h$level$idAtt>".$this->runSpanGamut($matches[1])."</h$level>";
803
-		return "\n" . $this->hashBlock($block) . "\n\n";
803
+		return "\n".$this->hashBlock($block)."\n\n";
804 804
 	}
805 805
 	protected function _doHeaders_callback_atx($matches) {
806 806
 
@@ -809,7 +809,7 @@  discard block
 block discarded – undo
809 809
 
810 810
 		$level = strlen($matches[1]);
811 811
 		$block = "<h$level$idAtt>".$this->runSpanGamut($matches[2])."</h$level>";
812
-		return "\n" . $this->hashBlock($block) . "\n\n";
812
+		return "\n".$this->hashBlock($block)."\n\n";
813 813
 	}
814 814
 
815 815
 	protected function _generateIdFromHeaderValue($headerValue) {
@@ -825,7 +825,7 @@  discard block
 block discarded – undo
825 825
 		$idValue = call_user_func($this->header_id_func, $headerValue);
826 826
 		if (!$idValue) return "";
827 827
 
828
-		return ' id="' . $this->encodeAttribute($idValue) . '"';
828
+		return ' id="'.$this->encodeAttribute($idValue).'"';
829 829
 
830 830
 	}
831 831
 
@@ -904,7 +904,7 @@  discard block
 block discarded – undo
904 904
 		$list = $matches[1];
905 905
 		$list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol";
906 906
 
907
-		$marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
907
+		$marker_any_re = ($list_type == "ul" ? $marker_ul_re : $marker_ol_re);
908 908
 
909 909
 		$list .= "\n";
910 910
 		$result = $this->processListItems($list, $marker_any_re);
@@ -915,18 +915,18 @@  discard block
 block discarded – undo
915 915
 			if ($list_type == 'ol') {
916 916
 				$ol_start_array = array();
917 917
 				$ol_start_check = preg_match("/$marker_ol_start_re/", $matches[4], $ol_start_array);
918
-				if ($ol_start_check){
918
+				if ($ol_start_check) {
919 919
 					$ol_start = $ol_start_array[0];
920 920
 				}
921 921
 			}
922 922
 		}
923 923
 
924
-		if ($ol_start > 1 && $list_type == 'ol'){
925
-			$result = $this->hashBlock("<$list_type start=\"$ol_start\">\n" . $result . "</$list_type>");
924
+		if ($ol_start > 1 && $list_type == 'ol') {
925
+			$result = $this->hashBlock("<$list_type start=\"$ol_start\">\n".$result."</$list_type>");
926 926
 		} else {
927
-			$result = $this->hashBlock("<$list_type>\n" . $result . "</$list_type>");
927
+			$result = $this->hashBlock("<$list_type>\n".$result."</$list_type>");
928 928
 		}
929
-		return "\n". $result ."\n\n";
929
+		return "\n".$result."\n\n";
930 930
 	}
931 931
 
932 932
 	protected $list_level = 0;
@@ -979,16 +979,16 @@  discard block
 block discarded – undo
979 979
 	}
980 980
 	protected function _processListItems_callback($matches) {
981 981
 		$item = $matches[4];
982
-		$leading_line =& $matches[1];
983
-		$leading_space =& $matches[2];
982
+		$leading_line = & $matches[1];
983
+		$leading_space = & $matches[2];
984 984
 		$marker_space = $matches[3];
985
-		$tailing_blank_line =& $matches[5];
985
+		$tailing_blank_line = & $matches[5];
986 986
 
987 987
 		if ($leading_line || $tailing_blank_line || 
988 988
 			preg_match('/\n{2,}/', $item))
989 989
 		{
990 990
 			# Replace marker with the appropriate whitespace indentation
991
-			$item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
991
+			$item = $leading_space.str_repeat(' ', strlen($marker_space)).$item;
992 992
 			$item = $this->runBlockGamut($this->outdent($item)."\n");
993 993
 		}
994 994
 		else {
@@ -998,7 +998,7 @@  discard block
 block discarded – undo
998 998
 			$item = $this->runSpanGamut($item);
999 999
 		}
1000 1000
 
1001
-		return "<li>" . $item . "</li>\n";
1001
+		return "<li>".$item."</li>\n";
1002 1002
 	}
1003 1003
 
1004 1004
 
@@ -1076,7 +1076,7 @@  discard block
 block discarded – undo
1076 1076
 				$token_relist[] = $strong_re;
1077 1077
 				
1078 1078
 				# Construct master expression from list.
1079
-				$token_re = '{('. implode('|', $token_relist) .')}';
1079
+				$token_re = '{('.implode('|', $token_relist).')}';
1080 1080
 				$this->em_strong_prepared_relist["$em$strong"] = $token_re;
1081 1081
 			}
1082 1082
 		}
@@ -1102,8 +1102,8 @@  discard block
 block discarded – undo
1102 1102
 			#
1103 1103
 			$parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
1104 1104
 			$text_stack[0] .= $parts[0];
1105
-			$token =& $parts[1];
1106
-			$text =& $parts[2];
1105
+			$token = & $parts[1];
1106
+			$text = & $parts[2];
1107 1107
 			
1108 1108
 			if (empty($token)) {
1109 1109
 				# Reached end of text span: empty stack without emitting.
@@ -1130,7 +1130,7 @@  discard block
 block discarded – undo
1130 1130
 				} else {
1131 1131
 					# Other closing marker: close one em or strong and
1132 1132
 					# change current token state to match the other
1133
-					$token_stack[0] = str_repeat($token{0}, 3-$token_len);
1133
+					$token_stack[0] = str_repeat($token{0}, 3 - $token_len);
1134 1134
 					$tag = $token_len == 2 ? "strong" : "em";
1135 1135
 					$span = $text_stack[0];
1136 1136
 					$span = $this->runSpanGamut($span);
@@ -1224,7 +1224,7 @@  discard block
 block discarded – undo
1224 1224
 		$bq = $matches[1];
1225 1225
 		# trim one level of quoting - trim whitespace-only lines
1226 1226
 		$bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq);
1227
-		$bq = $this->runBlockGamut($bq);		# recurse
1227
+		$bq = $this->runBlockGamut($bq); # recurse
1228 1228
 
1229 1229
 		$bq = preg_replace('/^/m', "  ", $bq);
1230 1230
 		# These leading spaces cause problem with <pre> content, 
@@ -1232,7 +1232,7 @@  discard block
 block discarded – undo
1232 1232
 		$bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx', 
1233 1233
 			array($this, '_doBlockQuotes_callback2'), $bq);
1234 1234
 
1235
-		return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
1235
+		return "\n".$this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
1236 1236
 	}
1237 1237
 	protected function _doBlockQuotes_callback2($matches) {
1238 1238
 		$pre = $matches[1];
@@ -1432,7 +1432,7 @@  discard block
 block discarded – undo
1432 1432
 		if ($text == "") return $tail = "";
1433 1433
 
1434 1434
 		$chars = preg_split('/(?<!^)(?!$)/', $text);
1435
-		$seed = (int)abs(crc32($text) / strlen($text)); # Deterministic seed.
1435
+		$seed = (int) abs(crc32($text) / strlen($text)); # Deterministic seed.
1436 1436
 
1437 1437
 		foreach ($chars as $key => $char) {
1438 1438
 			$ord = ord($char);
@@ -1468,7 +1468,7 @@  discard block
 block discarded – undo
1468 1468
 				|
1469 1469
 					(?<![`\\\\])
1470 1470
 					`+						# code span marker
1471
-			'.( $this->no_markup ? '' : '
1471
+			'.($this->no_markup ? '' : '
1472 1472
 				|
1473 1473
 					<!--    .*?     -->		# comment
1474 1474
 				|
@@ -1522,7 +1522,7 @@  discard block
 block discarded – undo
1522 1522
 	#
1523 1523
 		switch ($token{0}) {
1524 1524
 			case "\\":
1525
-				return $this->hashPart("&#". ord($token{1}). ";");
1525
+				return $this->hashPart("&#".ord($token{1}).";");
1526 1526
 			case "`":
1527 1527
 				# Search for end marker in remaining text.
1528 1528
 				if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm', 
@@ -1577,7 +1577,7 @@  discard block
 block discarded – undo
1577 1577
 			# Calculate amount of space, insert spaces, insert block.
1578 1578
 			$amount = $this->tab_width - 
1579 1579
 				$strlen($line, 'UTF-8') % $this->tab_width;
1580
-			$line .= str_repeat(" ", $amount) . $block;
1580
+			$line .= str_repeat(" ", $amount).$block;
1581 1581
 		}
1582 1582
 		return $line;
1583 1583
 	}
Please login to merge, or discard this patch.
Braces   +42 added lines, -32 removed lines patch added patch discarded remove patch
@@ -38,8 +38,9 @@  discard block
 block discarded – undo
38 38
 		$parser =& $parser_list[$parser_class];
39 39
 
40 40
 		# create the parser it not already set
41
-		if (!$parser)
42
-			$parser = new $parser_class;
41
+		if (!$parser) {
42
+					$parser = new $parser_class;
43
+		}
43 44
 
44 45
 		# Transform text using parser.
45 46
 		return $parser->transform($text);
@@ -241,7 +242,9 @@  discard block
 block discarded – undo
241 242
 
242 243
 
243 244
 	protected function hashHTMLBlocks($text) {
244
-		if ($this->no_markup)  return $text;
245
+		if ($this->no_markup) {
246
+		    return $text;
247
+		}
245 248
 
246 249
 		$less_than_tab = $this->tab_width - 1;
247 250
 
@@ -529,7 +532,9 @@  discard block
 block discarded – undo
529 532
 	#
530 533
 	# Turn Markdown link shortcuts into XHTML <a> tags.
531 534
 	#
532
-		if ($this->in_anchor) return $text;
535
+		if ($this->in_anchor) {
536
+		    return $text;
537
+		}
533 538
 		$this->in_anchor = true;
534 539
 		
535 540
 		#
@@ -623,8 +628,7 @@  discard block
 block discarded – undo
623 628
 			$link_text = $this->runSpanGamut($link_text);
624 629
 			$result .= ">$link_text</a>";
625 630
 			$result = $this->hashPart($result);
626
-		}
627
-		else {
631
+		} else {
628 632
 			$result = $whole_match;
629 633
 		}
630 634
 		return $result;
@@ -638,8 +642,9 @@  discard block
 block discarded – undo
638 642
 		// if the URL was of the form <s p a c e s> it got caught by the HTML
639 643
 		// tag parser and hashed. Need to reverse the process before using the URL.
640 644
 		$unhashed = $this->unhash($url);
641
-		if ($unhashed != $url)
642
-			$url = preg_replace('/^<(.*)>$/', '\1', $unhashed);
645
+		if ($unhashed != $url) {
646
+					$url = preg_replace('/^<(.*)>$/', '\1', $unhashed);
647
+		}
643 648
 
644 649
 		$url = $this->encodeURLAttribute($url);
645 650
 
@@ -731,8 +736,7 @@  discard block
 block discarded – undo
731 736
 			}
732 737
 			$result .= $this->empty_element_suffix;
733 738
 			$result = $this->hashPart($result);
734
-		}
735
-		else {
739
+		} else {
736 740
 			# If there's no such link ID, leave intact:
737 741
 			$result = $whole_match;
738 742
 		}
@@ -791,8 +795,9 @@  discard block
 block discarded – undo
791 795
 
792 796
 	protected function _doHeaders_callback_setext($matches) {
793 797
 		# Terrible hack to check we haven't found an empty list item.
794
-		if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1]))
795
-			return $matches[0];
798
+		if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1])) {
799
+					return $matches[0];
800
+		}
796 801
 		
797 802
 		$level = $matches[2]{0} == '=' ? 1 : 2;
798 803
 
@@ -823,7 +828,9 @@  discard block
 block discarded – undo
823 828
 			return "";
824 829
 		}
825 830
 		$idValue = call_user_func($this->header_id_func, $headerValue);
826
-		if (!$idValue) return "";
831
+		if (!$idValue) {
832
+		    return "";
833
+		}
827 834
 
828 835
 		return ' id="' . $this->encodeAttribute($idValue) . '"';
829 836
 
@@ -882,8 +889,7 @@  discard block
 block discarded – undo
882 889
 						'.$whole_list_re.'
883 890
 					}mx',
884 891
 					array($this, '_doLists_callback'), $text);
885
-			}
886
-			else {
892
+			} else {
887 893
 				$text = preg_replace_callback('{
888 894
 						(?:(?<=\n)\n|\A\n?) # Must eat the newline
889 895
 						'.$whole_list_re.'
@@ -990,8 +996,7 @@  discard block
 block discarded – undo
990 996
 			# Replace marker with the appropriate whitespace indentation
991 997
 			$item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
992 998
 			$item = $this->runBlockGamut($this->outdent($item)."\n");
993
-		}
994
-		else {
999
+		} else {
995 1000
 			# Recursion for sub-lists:
996 1001
 			$item = $this->doLists($this->outdent($item));
997 1002
 			$item = preg_replace('/\n+$/', '', $item);
@@ -1261,8 +1266,7 @@  discard block
 block discarded – undo
1261 1266
 				$value = preg_replace('/^([ ]*)/', "<p>", $value);
1262 1267
 				$value .= "</p>";
1263 1268
 				$grafs[$key] = $this->unhash($value);
1264
-			}
1265
-			else {
1269
+			} else {
1266 1270
 				# Is a block.
1267 1271
 				# Modify elements of @grafs in-place...
1268 1272
 				$graf = $value;
@@ -1329,17 +1333,17 @@  discard block
 block discarded – undo
1329 1333
 	# representation for the URL (removing mailto: or tel:) storing it in $text.
1330 1334
 	# This function is *not* suitable for attributes enclosed in single quotes.
1331 1335
 	#
1332
-		if ($this->url_filter_func)
1333
-			$url = call_user_func($this->url_filter_func, $url);
1336
+		if ($this->url_filter_func) {
1337
+					$url = call_user_func($this->url_filter_func, $url);
1338
+		}
1334 1339
 
1335
-		if (preg_match('{^mailto:}i', $url))
1336
-			$url = $this->encodeEntityObfuscatedAttribute($url, $text, 7);
1337
-		else if (preg_match('{^tel:}i', $url))
1340
+		if (preg_match('{^mailto:}i', $url)) {
1341
+					$url = $this->encodeEntityObfuscatedAttribute($url, $text, 7);
1342
+		} else if (preg_match('{^tel:}i', $url))
1338 1343
 		{
1339 1344
 			$url = $this->encodeAttribute($url);
1340 1345
 			$text = substr($url, 4);
1341
-		}
1342
-		else
1346
+		} else
1343 1347
 		{
1344 1348
 			$url = $this->encodeAttribute($url);
1345 1349
 			$text = $url;
@@ -1429,7 +1433,9 @@  discard block
 block discarded – undo
1429 1433
 	#   With some optimizations by Milian Wolff. Forced encoding of HTML
1430 1434
 	#	attribute special characters by Allan Odgaard.
1431 1435
 	#
1432
-		if ($text == "") return $tail = "";
1436
+		if ($text == "") {
1437
+		    return $tail = "";
1438
+		}
1433 1439
 
1434 1440
 		$chars = preg_split('/(?<!^)(?!$)/', $text);
1435 1441
 		$seed = (int)abs(crc32($text) / strlen($text)); # Deterministic seed.
@@ -1443,8 +1449,11 @@  discard block
 block discarded – undo
1443 1449
 				# '@' *must* be encoded. I insist.
1444 1450
 				# '"' and '>' have to be encoded inside the attribute
1445 1451
 				if ($r > 90 && strpos('@"&>', $char) === false) /* do nothing */;
1446
-				else if ($r < 45) $chars[$key] = '&#x'.dechex($ord).';';
1447
-				else              $chars[$key] = '&#'.$ord.';';
1452
+				else if ($r < 45) {
1453
+				    $chars[$key] = '&#x'.dechex($ord).';';
1454
+				} else {
1455
+				    $chars[$key] = '&#'.$ord.';';
1456
+				}
1448 1457
 			}
1449 1458
 		}
1450 1459
 
@@ -1505,8 +1514,7 @@  discard block
 block discarded – undo
1505 1514
 			if (isset($parts[1])) {
1506 1515
 				$output .= $this->handleSpanToken($parts[1], $parts[2]);
1507 1516
 				$str = $parts[2];
1508
-			}
1509
-			else {
1517
+			} else {
1510 1518
 				break;
1511 1519
 			}
1512 1520
 		}
@@ -1588,7 +1596,9 @@  discard block
 block discarded – undo
1588 1596
 	# function that will loosely count the number of UTF-8 characters with a
1589 1597
 	# regular expression.
1590 1598
 	#
1591
-		if (function_exists($this->utf8_strlen)) return;
1599
+		if (function_exists($this->utf8_strlen)) {
1600
+		    return;
1601
+		}
1592 1602
 		$this->utf8_strlen = create_function('$text', 'return preg_match_all(
1593 1603
 			"/[\\\\x00-\\\\xBF]|[\\\\xC0-\\\\xFF][\\\\x80-\\\\xBF]*/", 
1594 1604
 			$text, $m);');
Please login to merge, or discard this patch.
vendor/michelf/php-markdown/Michelf/MarkdownExtra.php 4 patches
Doc Comments   +13 added lines patch added patch discarded remove patch
@@ -516,6 +516,12 @@  discard block
 block discarded – undo
516 516
 		
517 517
 		return array($parsed, $text);
518 518
 	}
519
+
520
+	/**
521
+	 * @param string $text
522
+	 * @param string $hash_method
523
+	 * @param boolean $md_attr
524
+	 */
519 525
 	protected function _hashHTMLBlocks_inHTML($text, $hash_method, $md_attr) {
520 526
 	#
521 527
 	# Parse HTML, calling _HashHTMLBlocks_InMarkdown for block tags.
@@ -1077,6 +1083,10 @@  discard block
 block discarded – undo
1077 1083
 		
1078 1084
 		return $this->_doTable_callback(array($matches[0], $head, $underline, $content));
1079 1085
 	}
1086
+
1087
+	/**
1088
+	 * @param string $alignname
1089
+	 */
1080 1090
 	protected function _doTable_makeAlignAttr($alignname)
1081 1091
 	{
1082 1092
 		if (empty($this->table_align_class_tmpl))
@@ -1203,6 +1213,9 @@  discard block
 block discarded – undo
1203 1213
 	}
1204 1214
 
1205 1215
 
1216
+	/**
1217
+	 * @return string
1218
+	 */
1206 1219
 	protected function processDefListItems($list_str) {
1207 1220
 	#
1208 1221
 	#	Process the contents of a single definition list, splitting it
Please login to merge, or discard this patch.
Indentation   +1150 added lines, -1150 removed lines patch added patch discarded remove patch
@@ -19,179 +19,179 @@  discard block
 block discarded – undo
19 19
 
20 20
 class MarkdownExtra extends \Michelf\Markdown {
21 21
 
22
-	### Configuration Variables ###
22
+    ### Configuration Variables ###
23 23
 
24
-	# Prefix for footnote ids.
25
-	public $fn_id_prefix = "";
24
+    # Prefix for footnote ids.
25
+    public $fn_id_prefix = "";
26 26
 	
27
-	# Optional title attribute for footnote links and backlinks.
28
-	public $fn_link_title = "";
29
-	public $fn_backlink_title = "";
27
+    # Optional title attribute for footnote links and backlinks.
28
+    public $fn_link_title = "";
29
+    public $fn_backlink_title = "";
30 30
 	
31
-	# Optional class attribute for footnote links and backlinks.
32
-	public $fn_link_class = "footnote-ref";
33
-	public $fn_backlink_class = "footnote-backref";
34
-
35
-	# Class name for table cell alignment (%% replaced left/center/right)
36
-	# For instance: 'go-%%' becomes 'go-left' or 'go-right' or 'go-center'
37
-	# If empty, the align attribute is used instead of a class name.
38
-	public $table_align_class_tmpl = '';
39
-
40
-	# Optional class prefix for fenced code block.
41
-	public $code_class_prefix = "";
42
-	# Class attribute for code blocks goes on the `code` tag;
43
-	# setting this to true will put attributes on the `pre` tag instead.
44
-	public $code_attr_on_pre = false;
31
+    # Optional class attribute for footnote links and backlinks.
32
+    public $fn_link_class = "footnote-ref";
33
+    public $fn_backlink_class = "footnote-backref";
34
+
35
+    # Class name for table cell alignment (%% replaced left/center/right)
36
+    # For instance: 'go-%%' becomes 'go-left' or 'go-right' or 'go-center'
37
+    # If empty, the align attribute is used instead of a class name.
38
+    public $table_align_class_tmpl = '';
39
+
40
+    # Optional class prefix for fenced code block.
41
+    public $code_class_prefix = "";
42
+    # Class attribute for code blocks goes on the `code` tag;
43
+    # setting this to true will put attributes on the `pre` tag instead.
44
+    public $code_attr_on_pre = false;
45 45
 	
46
-	# Predefined abbreviations.
47
-	public $predef_abbr = array();
48
-
49
-	### Parser Implementation ###
50
-
51
-	public function __construct() {
52
-	#
53
-	# Constructor function. Initialize the parser object.
54
-	#
55
-		# Add extra escapable characters before parent constructor 
56
-		# initialize the table.
57
-		$this->escape_chars .= ':|';
46
+    # Predefined abbreviations.
47
+    public $predef_abbr = array();
48
+
49
+    ### Parser Implementation ###
50
+
51
+    public function __construct() {
52
+    #
53
+    # Constructor function. Initialize the parser object.
54
+    #
55
+        # Add extra escapable characters before parent constructor 
56
+        # initialize the table.
57
+        $this->escape_chars .= ':|';
58 58
 		
59
-		# Insert extra document, block, and span transformations. 
60
-		# Parent constructor will do the sorting.
61
-		$this->document_gamut += array(
62
-			"doFencedCodeBlocks" => 5,
63
-			"stripFootnotes"     => 15,
64
-			"stripAbbreviations" => 25,
65
-			"appendFootnotes"    => 50,
66
-			);
67
-		$this->block_gamut += array(
68
-			"doFencedCodeBlocks" => 5,
69
-			"doTables"           => 15,
70
-			"doDefLists"         => 45,
71
-			);
72
-		$this->span_gamut += array(
73
-			"doFootnotes"        => 5,
74
-			"doAbbreviations"    => 70,
75
-			);
59
+        # Insert extra document, block, and span transformations. 
60
+        # Parent constructor will do the sorting.
61
+        $this->document_gamut += array(
62
+            "doFencedCodeBlocks" => 5,
63
+            "stripFootnotes"     => 15,
64
+            "stripAbbreviations" => 25,
65
+            "appendFootnotes"    => 50,
66
+            );
67
+        $this->block_gamut += array(
68
+            "doFencedCodeBlocks" => 5,
69
+            "doTables"           => 15,
70
+            "doDefLists"         => 45,
71
+            );
72
+        $this->span_gamut += array(
73
+            "doFootnotes"        => 5,
74
+            "doAbbreviations"    => 70,
75
+            );
76 76
 		
77
-		$this->enhanced_ordered_list = true;
78
-		parent::__construct();
79
-	}
77
+        $this->enhanced_ordered_list = true;
78
+        parent::__construct();
79
+    }
80 80
 	
81 81
 	
82
-	# Extra variables used during extra transformations.
83
-	protected $footnotes = array();
84
-	protected $footnotes_ordered = array();
85
-	protected $footnotes_ref_count = array();
86
-	protected $footnotes_numbers = array();
87
-	protected $abbr_desciptions = array();
88
-	protected $abbr_word_re = '';
82
+    # Extra variables used during extra transformations.
83
+    protected $footnotes = array();
84
+    protected $footnotes_ordered = array();
85
+    protected $footnotes_ref_count = array();
86
+    protected $footnotes_numbers = array();
87
+    protected $abbr_desciptions = array();
88
+    protected $abbr_word_re = '';
89 89
 	
90
-	# Give the current footnote number.
91
-	protected $footnote_counter = 1;
90
+    # Give the current footnote number.
91
+    protected $footnote_counter = 1;
92 92
 	
93 93
 	
94
-	protected function setup() {
95
-	#
96
-	# Setting up Extra-specific variables.
97
-	#
98
-		parent::setup();
94
+    protected function setup() {
95
+    #
96
+    # Setting up Extra-specific variables.
97
+    #
98
+        parent::setup();
99 99
 		
100
-		$this->footnotes = array();
101
-		$this->footnotes_ordered = array();
102
-		$this->footnotes_ref_count = array();
103
-		$this->footnotes_numbers = array();
104
-		$this->abbr_desciptions = array();
105
-		$this->abbr_word_re = '';
106
-		$this->footnote_counter = 1;
100
+        $this->footnotes = array();
101
+        $this->footnotes_ordered = array();
102
+        $this->footnotes_ref_count = array();
103
+        $this->footnotes_numbers = array();
104
+        $this->abbr_desciptions = array();
105
+        $this->abbr_word_re = '';
106
+        $this->footnote_counter = 1;
107 107
 		
108
-		foreach ($this->predef_abbr as $abbr_word => $abbr_desc) {
109
-			if ($this->abbr_word_re)
110
-				$this->abbr_word_re .= '|';
111
-			$this->abbr_word_re .= preg_quote($abbr_word);
112
-			$this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
113
-		}
114
-	}
108
+        foreach ($this->predef_abbr as $abbr_word => $abbr_desc) {
109
+            if ($this->abbr_word_re)
110
+                $this->abbr_word_re .= '|';
111
+            $this->abbr_word_re .= preg_quote($abbr_word);
112
+            $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
113
+        }
114
+    }
115 115
 	
116
-	protected function teardown() {
117
-	#
118
-	# Clearing Extra-specific variables.
119
-	#
120
-		$this->footnotes = array();
121
-		$this->footnotes_ordered = array();
122
-		$this->footnotes_ref_count = array();
123
-		$this->footnotes_numbers = array();
124
-		$this->abbr_desciptions = array();
125
-		$this->abbr_word_re = '';
116
+    protected function teardown() {
117
+    #
118
+    # Clearing Extra-specific variables.
119
+    #
120
+        $this->footnotes = array();
121
+        $this->footnotes_ordered = array();
122
+        $this->footnotes_ref_count = array();
123
+        $this->footnotes_numbers = array();
124
+        $this->abbr_desciptions = array();
125
+        $this->abbr_word_re = '';
126 126
 		
127
-		parent::teardown();
128
-	}
127
+        parent::teardown();
128
+    }
129 129
 	
130 130
 	
131
-	### Extra Attribute Parser ###
132
-
133
-	# Expression to use to catch attributes (includes the braces)
134
-	protected $id_class_attr_catch_re = '\{((?:[ ]*[#.a-z][-_:a-zA-Z0-9=]+){1,})[ ]*\}';
135
-	# Expression to use when parsing in a context when no capture is desired
136
-	protected $id_class_attr_nocatch_re = '\{(?:[ ]*[#.a-z][-_:a-zA-Z0-9=]+){1,}[ ]*\}';
137
-
138
-	protected function doExtraAttributes($tag_name, $attr, $defaultIdValue = null) {
139
-	#
140
-	# Parse attributes caught by the $this->id_class_attr_catch_re expression
141
-	# and return the HTML-formatted list of attributes.
142
-	#
143
-	# Currently supported attributes are .class and #id.
144
-	#
145
-	# In addition, this method also supports supplying a default Id value,
146
-	# which will be used to populate the id attribute in case it was not
147
-	# overridden.
148
-		if (empty($attr) && !$defaultIdValue) return "";
131
+    ### Extra Attribute Parser ###
132
+
133
+    # Expression to use to catch attributes (includes the braces)
134
+    protected $id_class_attr_catch_re = '\{((?:[ ]*[#.a-z][-_:a-zA-Z0-9=]+){1,})[ ]*\}';
135
+    # Expression to use when parsing in a context when no capture is desired
136
+    protected $id_class_attr_nocatch_re = '\{(?:[ ]*[#.a-z][-_:a-zA-Z0-9=]+){1,}[ ]*\}';
137
+
138
+    protected function doExtraAttributes($tag_name, $attr, $defaultIdValue = null) {
139
+    #
140
+    # Parse attributes caught by the $this->id_class_attr_catch_re expression
141
+    # and return the HTML-formatted list of attributes.
142
+    #
143
+    # Currently supported attributes are .class and #id.
144
+    #
145
+    # In addition, this method also supports supplying a default Id value,
146
+    # which will be used to populate the id attribute in case it was not
147
+    # overridden.
148
+        if (empty($attr) && !$defaultIdValue) return "";
149 149
 		
150
-		# Split on components
151
-		preg_match_all('/[#.a-z][-_:a-zA-Z0-9=]+/', $attr, $matches);
152
-		$elements = $matches[0];
153
-
154
-		# handle classes and ids (only first id taken into account)
155
-		$classes = array();
156
-		$attributes = array();
157
-		$id = false;
158
-		foreach ($elements as $element) {
159
-			if ($element{0} == '.') {
160
-				$classes[] = substr($element, 1);
161
-			} else if ($element{0} == '#') {
162
-				if ($id === false) $id = substr($element, 1);
163
-			} else if (strpos($element, '=') > 0) {
164
-				$parts = explode('=', $element, 2);
165
-				$attributes[] = $parts[0] . '="' . $parts[1] . '"';
166
-			}
167
-		}
168
-
169
-		if (!$id) $id = $defaultIdValue;
170
-
171
-		# compose attributes as string
172
-		$attr_str = "";
173
-		if (!empty($id)) {
174
-			$attr_str .= ' id="'.$this->encodeAttribute($id) .'"';
175
-		}
176
-		if (!empty($classes)) {
177
-			$attr_str .= ' class="'. implode(" ", $classes) . '"';
178
-		}
179
-		if (!$this->no_markup && !empty($attributes)) {
180
-			$attr_str .= ' '.implode(" ", $attributes);
181
-		}
182
-		return $attr_str;
183
-	}
184
-
185
-
186
-	protected function stripLinkDefinitions($text) {
187
-	#
188
-	# Strips link definitions from text, stores the URLs and titles in
189
-	# hash references.
190
-	#
191
-		$less_than_tab = $this->tab_width - 1;
192
-
193
-		# Link defs are in the form: ^[id]: url "optional title"
194
-		$text = preg_replace_callback('{
150
+        # Split on components
151
+        preg_match_all('/[#.a-z][-_:a-zA-Z0-9=]+/', $attr, $matches);
152
+        $elements = $matches[0];
153
+
154
+        # handle classes and ids (only first id taken into account)
155
+        $classes = array();
156
+        $attributes = array();
157
+        $id = false;
158
+        foreach ($elements as $element) {
159
+            if ($element{0} == '.') {
160
+                $classes[] = substr($element, 1);
161
+            } else if ($element{0} == '#') {
162
+                if ($id === false) $id = substr($element, 1);
163
+            } else if (strpos($element, '=') > 0) {
164
+                $parts = explode('=', $element, 2);
165
+                $attributes[] = $parts[0] . '="' . $parts[1] . '"';
166
+            }
167
+        }
168
+
169
+        if (!$id) $id = $defaultIdValue;
170
+
171
+        # compose attributes as string
172
+        $attr_str = "";
173
+        if (!empty($id)) {
174
+            $attr_str .= ' id="'.$this->encodeAttribute($id) .'"';
175
+        }
176
+        if (!empty($classes)) {
177
+            $attr_str .= ' class="'. implode(" ", $classes) . '"';
178
+        }
179
+        if (!$this->no_markup && !empty($attributes)) {
180
+            $attr_str .= ' '.implode(" ", $attributes);
181
+        }
182
+        return $attr_str;
183
+    }
184
+
185
+
186
+    protected function stripLinkDefinitions($text) {
187
+    #
188
+    # Strips link definitions from text, stores the URLs and titles in
189
+    # hash references.
190
+    #
191
+        $less_than_tab = $this->tab_width - 1;
192
+
193
+        # Link defs are in the form: ^[id]: url "optional title"
194
+        $text = preg_replace_callback('{
195 195
 							^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?:	# id = $1
196 196
 							  [ ]*
197 197
 							  \n?				# maybe *one* newline
@@ -214,106 +214,106 @@  discard block
 block discarded – undo
214 214
 					(?:[ ]* '.$this->id_class_attr_catch_re.' )?  # $5 = extra id & class attr
215 215
 							(?:\n+|\Z)
216 216
 			}xm',
217
-			array($this, '_stripLinkDefinitions_callback'),
218
-			$text);
219
-		return $text;
220
-	}
221
-	protected function _stripLinkDefinitions_callback($matches) {
222
-		$link_id = strtolower($matches[1]);
223
-		$url = $matches[2] == '' ? $matches[3] : $matches[2];
224
-		$this->urls[$link_id] = $url;
225
-		$this->titles[$link_id] =& $matches[4];
226
-		$this->ref_attr[$link_id] = $this->doExtraAttributes("", $dummy =& $matches[5]);
227
-		return ''; # String that will replace the block
228
-	}
229
-
230
-
231
-	### HTML Block Parser ###
217
+            array($this, '_stripLinkDefinitions_callback'),
218
+            $text);
219
+        return $text;
220
+    }
221
+    protected function _stripLinkDefinitions_callback($matches) {
222
+        $link_id = strtolower($matches[1]);
223
+        $url = $matches[2] == '' ? $matches[3] : $matches[2];
224
+        $this->urls[$link_id] = $url;
225
+        $this->titles[$link_id] =& $matches[4];
226
+        $this->ref_attr[$link_id] = $this->doExtraAttributes("", $dummy =& $matches[5]);
227
+        return ''; # String that will replace the block
228
+    }
229
+
230
+
231
+    ### HTML Block Parser ###
232 232
 	
233
-	# Tags that are always treated as block tags:
234
-	protected $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend|article|section|nav|aside|hgroup|header|footer|figcaption|figure';
233
+    # Tags that are always treated as block tags:
234
+    protected $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend|article|section|nav|aside|hgroup|header|footer|figcaption|figure';
235 235
 						   
236
-	# Tags treated as block tags only if the opening tag is alone on its line:
237
-	protected $context_block_tags_re = 'script|noscript|style|ins|del|iframe|object|source|track|param|math|svg|canvas|audio|video';
236
+    # Tags treated as block tags only if the opening tag is alone on its line:
237
+    protected $context_block_tags_re = 'script|noscript|style|ins|del|iframe|object|source|track|param|math|svg|canvas|audio|video';
238 238
 	
239
-	# Tags where markdown="1" default to span mode:
240
-	protected $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
239
+    # Tags where markdown="1" default to span mode:
240
+    protected $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
241 241
 	
242
-	# Tags which must not have their contents modified, no matter where 
243
-	# they appear:
244
-	protected $clean_tags_re = 'script|style|math|svg';
242
+    # Tags which must not have their contents modified, no matter where 
243
+    # they appear:
244
+    protected $clean_tags_re = 'script|style|math|svg';
245 245
 	
246
-	# Tags that do not need to be closed.
247
-	protected $auto_close_tags_re = 'hr|img|param|source|track';
246
+    # Tags that do not need to be closed.
247
+    protected $auto_close_tags_re = 'hr|img|param|source|track';
248 248
 	
249 249
 
250
-	protected function hashHTMLBlocks($text) {
251
-	#
252
-	# Hashify HTML Blocks and "clean tags".
253
-	#
254
-	# We only want to do this for block-level HTML tags, such as headers,
255
-	# lists, and tables. That's because we still want to wrap <p>s around
256
-	# "paragraphs" that are wrapped in non-block-level tags, such as anchors,
257
-	# phrase emphasis, and spans. The list of tags we're looking for is
258
-	# hard-coded.
259
-	#
260
-	# This works by calling _HashHTMLBlocks_InMarkdown, which then calls
261
-	# _HashHTMLBlocks_InHTML when it encounter block tags. When the markdown="1" 
262
-	# attribute is found within a tag, _HashHTMLBlocks_InHTML calls back
263
-	#  _HashHTMLBlocks_InMarkdown to handle the Markdown syntax within the tag.
264
-	# These two functions are calling each other. It's recursive!
265
-	#
266
-		if ($this->no_markup)  return $text;
267
-
268
-		#
269
-		# Call the HTML-in-Markdown hasher.
270
-		#
271
-		list($text, ) = $this->_hashHTMLBlocks_inMarkdown($text);
250
+    protected function hashHTMLBlocks($text) {
251
+    #
252
+    # Hashify HTML Blocks and "clean tags".
253
+    #
254
+    # We only want to do this for block-level HTML tags, such as headers,
255
+    # lists, and tables. That's because we still want to wrap <p>s around
256
+    # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
257
+    # phrase emphasis, and spans. The list of tags we're looking for is
258
+    # hard-coded.
259
+    #
260
+    # This works by calling _HashHTMLBlocks_InMarkdown, which then calls
261
+    # _HashHTMLBlocks_InHTML when it encounter block tags. When the markdown="1" 
262
+    # attribute is found within a tag, _HashHTMLBlocks_InHTML calls back
263
+    #  _HashHTMLBlocks_InMarkdown to handle the Markdown syntax within the tag.
264
+    # These two functions are calling each other. It's recursive!
265
+    #
266
+        if ($this->no_markup)  return $text;
267
+
268
+        #
269
+        # Call the HTML-in-Markdown hasher.
270
+        #
271
+        list($text, ) = $this->_hashHTMLBlocks_inMarkdown($text);
272 272
 		
273
-		return $text;
274
-	}
275
-	protected function _hashHTMLBlocks_inMarkdown($text, $indent = 0,
276
-										$enclosing_tag_re = '', $span = false)
277
-	{
278
-	#
279
-	# Parse markdown text, calling _HashHTMLBlocks_InHTML for block tags.
280
-	#
281
-	# *   $indent is the number of space to be ignored when checking for code 
282
-	#     blocks. This is important because if we don't take the indent into 
283
-	#     account, something like this (which looks right) won't work as expected:
284
-	#
285
-	#     <div>
286
-	#         <div markdown="1">
287
-	#         Hello World.  <-- Is this a Markdown code block or text?
288
-	#         </div>  <-- Is this a Markdown code block or a real tag?
289
-	#     <div>
290
-	#
291
-	#     If you don't like this, just don't indent the tag on which
292
-	#     you apply the markdown="1" attribute.
293
-	#
294
-	# *   If $enclosing_tag_re is not empty, stops at the first unmatched closing 
295
-	#     tag with that name. Nested tags supported.
296
-	#
297
-	# *   If $span is true, text inside must treated as span. So any double 
298
-	#     newline will be replaced by a single newline so that it does not create 
299
-	#     paragraphs.
300
-	#
301
-	# Returns an array of that form: ( processed text , remaining text )
302
-	#
303
-		if ($text === '') return array('', '');
304
-
305
-		# Regex to check for the presense of newlines around a block tag.
306
-		$newline_before_re = '/(?:^\n?|\n\n)*$/';
307
-		$newline_after_re = 
308
-			'{
273
+        return $text;
274
+    }
275
+    protected function _hashHTMLBlocks_inMarkdown($text, $indent = 0,
276
+                                        $enclosing_tag_re = '', $span = false)
277
+    {
278
+    #
279
+    # Parse markdown text, calling _HashHTMLBlocks_InHTML for block tags.
280
+    #
281
+    # *   $indent is the number of space to be ignored when checking for code 
282
+    #     blocks. This is important because if we don't take the indent into 
283
+    #     account, something like this (which looks right) won't work as expected:
284
+    #
285
+    #     <div>
286
+    #         <div markdown="1">
287
+    #         Hello World.  <-- Is this a Markdown code block or text?
288
+    #         </div>  <-- Is this a Markdown code block or a real tag?
289
+    #     <div>
290
+    #
291
+    #     If you don't like this, just don't indent the tag on which
292
+    #     you apply the markdown="1" attribute.
293
+    #
294
+    # *   If $enclosing_tag_re is not empty, stops at the first unmatched closing 
295
+    #     tag with that name. Nested tags supported.
296
+    #
297
+    # *   If $span is true, text inside must treated as span. So any double 
298
+    #     newline will be replaced by a single newline so that it does not create 
299
+    #     paragraphs.
300
+    #
301
+    # Returns an array of that form: ( processed text , remaining text )
302
+    #
303
+        if ($text === '') return array('', '');
304
+
305
+        # Regex to check for the presense of newlines around a block tag.
306
+        $newline_before_re = '/(?:^\n?|\n\n)*$/';
307
+        $newline_after_re = 
308
+            '{
309 309
 				^						# Start of text following the tag.
310 310
 				(?>[ ]*<!--.*?-->)?		# Optional comment.
311 311
 				[ ]*\n					# Must be followed by newline.
312 312
 			}xs';
313 313
 		
314
-		# Regex to match any tag.
315
-		$block_tag_re =
316
-			'{
314
+        # Regex to match any tag.
315
+        $block_tag_re =
316
+            '{
317 317
 				(					# $2: Capture whole tag.
318 318
 					</?					# Any opening or closing tag.
319 319
 						(?>				# Tag name.
@@ -368,169 +368,169 @@  discard block
 block discarded – undo
368 368
 			}xs';
369 369
 
370 370
 		
371
-		$depth = 0;		# Current depth inside the tag tree.
372
-		$parsed = "";	# Parsed text that will be returned.
373
-
374
-		#
375
-		# Loop through every tag until we find the closing tag of the parent
376
-		# or loop until reaching the end of text if no parent tag specified.
377
-		#
378
-		do {
379
-			#
380
-			# Split the text using the first $tag_match pattern found.
381
-			# Text before  pattern will be first in the array, text after
382
-			# pattern will be at the end, and between will be any catches made 
383
-			# by the pattern.
384
-			#
385
-			$parts = preg_split($block_tag_re, $text, 2, 
386
-								PREG_SPLIT_DELIM_CAPTURE);
371
+        $depth = 0;		# Current depth inside the tag tree.
372
+        $parsed = "";	# Parsed text that will be returned.
373
+
374
+        #
375
+        # Loop through every tag until we find the closing tag of the parent
376
+        # or loop until reaching the end of text if no parent tag specified.
377
+        #
378
+        do {
379
+            #
380
+            # Split the text using the first $tag_match pattern found.
381
+            # Text before  pattern will be first in the array, text after
382
+            # pattern will be at the end, and between will be any catches made 
383
+            # by the pattern.
384
+            #
385
+            $parts = preg_split($block_tag_re, $text, 2, 
386
+                                PREG_SPLIT_DELIM_CAPTURE);
387 387
 			
388
-			# If in Markdown span mode, add a empty-string span-level hash 
389
-			# after each newline to prevent triggering any block element.
390
-			if ($span) {
391
-				$void = $this->hashPart("", ':');
392
-				$newline = "$void\n";
393
-				$parts[0] = $void . str_replace("\n", $newline, $parts[0]) . $void;
394
-			}
388
+            # If in Markdown span mode, add a empty-string span-level hash 
389
+            # after each newline to prevent triggering any block element.
390
+            if ($span) {
391
+                $void = $this->hashPart("", ':');
392
+                $newline = "$void\n";
393
+                $parts[0] = $void . str_replace("\n", $newline, $parts[0]) . $void;
394
+            }
395 395
 			
396
-			$parsed .= $parts[0]; # Text before current tag.
396
+            $parsed .= $parts[0]; # Text before current tag.
397 397
 			
398
-			# If end of $text has been reached. Stop loop.
399
-			if (count($parts) < 3) {
400
-				$text = "";
401
-				break;
402
-			}
398
+            # If end of $text has been reached. Stop loop.
399
+            if (count($parts) < 3) {
400
+                $text = "";
401
+                break;
402
+            }
403 403
 			
404
-			$tag  = $parts[1]; # Tag to handle.
405
-			$text = $parts[2]; # Remaining text after current tag.
406
-			$tag_re = preg_quote($tag); # For use in a regular expression.
404
+            $tag  = $parts[1]; # Tag to handle.
405
+            $text = $parts[2]; # Remaining text after current tag.
406
+            $tag_re = preg_quote($tag); # For use in a regular expression.
407 407
 			
408
-			#
409
-			# Check for: Fenced code block marker.
410
-			# Note: need to recheck the whole tag to disambiguate backtick
411
-			# fences from code spans
412
-			#
413
-			if (preg_match('{^\n?([ ]{0,'.($indent+3).'})(~{3,}|`{3,})[ ]*(?:\.?[-_:a-zA-Z0-9]+|'.$this->id_class_attr_nocatch_re.')?[ ]*\n?$}', $tag, $capture)) {
414
-				# Fenced code block marker: find matching end marker.
415
-				$fence_indent = strlen($capture[1]); # use captured indent in re
416
-				$fence_re = $capture[2]; # use captured fence in re
417
-				if (preg_match('{^(?>.*\n)*?[ ]{'.($fence_indent).'}'.$fence_re.'[ ]*(?:\n|$)}', $text,
418
-					$matches)) 
419
-				{
420
-					# End marker found: pass text unchanged until marker.
421
-					$parsed .= $tag . $matches[0];
422
-					$text = substr($text, strlen($matches[0]));
423
-				}
424
-				else {
425
-					# No end marker: just skip it.
426
-					$parsed .= $tag;
427
-				}
428
-			}
429
-			#
430
-			# Check for: Indented code block.
431
-			#
432
-			else if ($tag{0} == "\n" || $tag{0} == " ") {
433
-				# Indented code block: pass it unchanged, will be handled 
434
-				# later.
435
-				$parsed .= $tag;
436
-			}
437
-			#
438
-			# Check for: Code span marker
439
-			# Note: need to check this after backtick fenced code blocks
440
-			#
441
-			else if ($tag{0} == "`") {
442
-				# Find corresponding end marker.
443
-				$tag_re = preg_quote($tag);
444
-				if (preg_match('{^(?>.+?|\n(?!\n))*?(?<!`)'.$tag_re.'(?!`)}',
445
-					$text, $matches))
446
-				{
447
-					# End marker found: pass text unchanged until marker.
448
-					$parsed .= $tag . $matches[0];
449
-					$text = substr($text, strlen($matches[0]));
450
-				}
451
-				else {
452
-					# Unmatched marker: just skip it.
453
-					$parsed .= $tag;
454
-				}
455
-			}
456
-			#
457
-			# Check for: Opening Block level tag or
458
-			#            Opening Context Block tag (like ins and del) 
459
-			#               used as a block tag (tag is alone on it's line).
460
-			#
461
-			else if (preg_match('{^<(?:'.$this->block_tags_re.')\b}', $tag) ||
462
-				(	preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) &&
463
-					preg_match($newline_before_re, $parsed) &&
464
-					preg_match($newline_after_re, $text)	)
465
-				)
466
-			{
467
-				# Need to parse tag and following text using the HTML parser.
468
-				list($block_text, $text) = 
469
-					$this->_hashHTMLBlocks_inHTML($tag . $text, "hashBlock", true);
408
+            #
409
+            # Check for: Fenced code block marker.
410
+            # Note: need to recheck the whole tag to disambiguate backtick
411
+            # fences from code spans
412
+            #
413
+            if (preg_match('{^\n?([ ]{0,'.($indent+3).'})(~{3,}|`{3,})[ ]*(?:\.?[-_:a-zA-Z0-9]+|'.$this->id_class_attr_nocatch_re.')?[ ]*\n?$}', $tag, $capture)) {
414
+                # Fenced code block marker: find matching end marker.
415
+                $fence_indent = strlen($capture[1]); # use captured indent in re
416
+                $fence_re = $capture[2]; # use captured fence in re
417
+                if (preg_match('{^(?>.*\n)*?[ ]{'.($fence_indent).'}'.$fence_re.'[ ]*(?:\n|$)}', $text,
418
+                    $matches)) 
419
+                {
420
+                    # End marker found: pass text unchanged until marker.
421
+                    $parsed .= $tag . $matches[0];
422
+                    $text = substr($text, strlen($matches[0]));
423
+                }
424
+                else {
425
+                    # No end marker: just skip it.
426
+                    $parsed .= $tag;
427
+                }
428
+            }
429
+            #
430
+            # Check for: Indented code block.
431
+            #
432
+            else if ($tag{0} == "\n" || $tag{0} == " ") {
433
+                # Indented code block: pass it unchanged, will be handled 
434
+                # later.
435
+                $parsed .= $tag;
436
+            }
437
+            #
438
+            # Check for: Code span marker
439
+            # Note: need to check this after backtick fenced code blocks
440
+            #
441
+            else if ($tag{0} == "`") {
442
+                # Find corresponding end marker.
443
+                $tag_re = preg_quote($tag);
444
+                if (preg_match('{^(?>.+?|\n(?!\n))*?(?<!`)'.$tag_re.'(?!`)}',
445
+                    $text, $matches))
446
+                {
447
+                    # End marker found: pass text unchanged until marker.
448
+                    $parsed .= $tag . $matches[0];
449
+                    $text = substr($text, strlen($matches[0]));
450
+                }
451
+                else {
452
+                    # Unmatched marker: just skip it.
453
+                    $parsed .= $tag;
454
+                }
455
+            }
456
+            #
457
+            # Check for: Opening Block level tag or
458
+            #            Opening Context Block tag (like ins and del) 
459
+            #               used as a block tag (tag is alone on it's line).
460
+            #
461
+            else if (preg_match('{^<(?:'.$this->block_tags_re.')\b}', $tag) ||
462
+                (	preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) &&
463
+                    preg_match($newline_before_re, $parsed) &&
464
+                    preg_match($newline_after_re, $text)	)
465
+                )
466
+            {
467
+                # Need to parse tag and following text using the HTML parser.
468
+                list($block_text, $text) = 
469
+                    $this->_hashHTMLBlocks_inHTML($tag . $text, "hashBlock", true);
470 470
 				
471
-				# Make sure it stays outside of any paragraph by adding newlines.
472
-				$parsed .= "\n\n$block_text\n\n";
473
-			}
474
-			#
475
-			# Check for: Clean tag (like script, math)
476
-			#            HTML Comments, processing instructions.
477
-			#
478
-			else if (preg_match('{^<(?:'.$this->clean_tags_re.')\b}', $tag) ||
479
-				$tag{1} == '!' || $tag{1} == '?')
480
-			{
481
-				# Need to parse tag and following text using the HTML parser.
482
-				# (don't check for markdown attribute)
483
-				list($block_text, $text) = 
484
-					$this->_hashHTMLBlocks_inHTML($tag . $text, "hashClean", false);
471
+                # Make sure it stays outside of any paragraph by adding newlines.
472
+                $parsed .= "\n\n$block_text\n\n";
473
+            }
474
+            #
475
+            # Check for: Clean tag (like script, math)
476
+            #            HTML Comments, processing instructions.
477
+            #
478
+            else if (preg_match('{^<(?:'.$this->clean_tags_re.')\b}', $tag) ||
479
+                $tag{1} == '!' || $tag{1} == '?')
480
+            {
481
+                # Need to parse tag and following text using the HTML parser.
482
+                # (don't check for markdown attribute)
483
+                list($block_text, $text) = 
484
+                    $this->_hashHTMLBlocks_inHTML($tag . $text, "hashClean", false);
485 485
 				
486
-				$parsed .= $block_text;
487
-			}
488
-			#
489
-			# Check for: Tag with same name as enclosing tag.
490
-			#
491
-			else if ($enclosing_tag_re !== '' &&
492
-				# Same name as enclosing tag.
493
-				preg_match('{^</?(?:'.$enclosing_tag_re.')\b}', $tag))
494
-			{
495
-				#
496
-				# Increase/decrease nested tag count.
497
-				#
498
-				if ($tag{1} == '/')						$depth--;
499
-				else if ($tag{strlen($tag)-2} != '/')	$depth++;
500
-
501
-				if ($depth < 0) {
502
-					#
503
-					# Going out of parent element. Clean up and break so we
504
-					# return to the calling function.
505
-					#
506
-					$text = $tag . $text;
507
-					break;
508
-				}
486
+                $parsed .= $block_text;
487
+            }
488
+            #
489
+            # Check for: Tag with same name as enclosing tag.
490
+            #
491
+            else if ($enclosing_tag_re !== '' &&
492
+                # Same name as enclosing tag.
493
+                preg_match('{^</?(?:'.$enclosing_tag_re.')\b}', $tag))
494
+            {
495
+                #
496
+                # Increase/decrease nested tag count.
497
+                #
498
+                if ($tag{1} == '/')						$depth--;
499
+                else if ($tag{strlen($tag)-2} != '/')	$depth++;
500
+
501
+                if ($depth < 0) {
502
+                    #
503
+                    # Going out of parent element. Clean up and break so we
504
+                    # return to the calling function.
505
+                    #
506
+                    $text = $tag . $text;
507
+                    break;
508
+                }
509 509
 				
510
-				$parsed .= $tag;
511
-			}
512
-			else {
513
-				$parsed .= $tag;
514
-			}
515
-		} while ($depth >= 0);
510
+                $parsed .= $tag;
511
+            }
512
+            else {
513
+                $parsed .= $tag;
514
+            }
515
+        } while ($depth >= 0);
516 516
 		
517
-		return array($parsed, $text);
518
-	}
519
-	protected function _hashHTMLBlocks_inHTML($text, $hash_method, $md_attr) {
520
-	#
521
-	# Parse HTML, calling _HashHTMLBlocks_InMarkdown for block tags.
522
-	#
523
-	# *   Calls $hash_method to convert any blocks.
524
-	# *   Stops when the first opening tag closes.
525
-	# *   $md_attr indicate if the use of the `markdown="1"` attribute is allowed.
526
-	#     (it is not inside clean tags)
527
-	#
528
-	# Returns an array of that form: ( processed text , remaining text )
529
-	#
530
-		if ($text === '') return array('', '');
517
+        return array($parsed, $text);
518
+    }
519
+    protected function _hashHTMLBlocks_inHTML($text, $hash_method, $md_attr) {
520
+    #
521
+    # Parse HTML, calling _HashHTMLBlocks_InMarkdown for block tags.
522
+    #
523
+    # *   Calls $hash_method to convert any blocks.
524
+    # *   Stops when the first opening tag closes.
525
+    # *   $md_attr indicate if the use of the `markdown="1"` attribute is allowed.
526
+    #     (it is not inside clean tags)
527
+    #
528
+    # Returns an array of that form: ( processed text , remaining text )
529
+    #
530
+        if ($text === '') return array('', '');
531 531
 		
532
-		# Regex to match `markdown` attribute inside of a tag.
533
-		$markdown_attr_re = '
532
+        # Regex to match `markdown` attribute inside of a tag.
533
+        $markdown_attr_re = '
534 534
 			{
535 535
 				\s*			# Eat whitespace before the `markdown` attribute
536 536
 				markdown
@@ -545,8 +545,8 @@  discard block
 block discarded – undo
545 545
 				()				# $4: make $3 always defined (avoid warnings)
546 546
 			}xs';
547 547
 		
548
-		# Regex to match any tag.
549
-		$tag_re = '{
548
+        # Regex to match any tag.
549
+        $tag_re = '{
550 550
 				(					# $2: Capture whole tag.
551 551
 					</?					# Any opening or closing tag.
552 552
 						[\w:$]+			# Tag name.
@@ -568,150 +568,150 @@  discard block
 block discarded – undo
568 568
 				)
569 569
 			}xs';
570 570
 		
571
-		$original_text = $text;		# Save original text in case of faliure.
571
+        $original_text = $text;		# Save original text in case of faliure.
572 572
 		
573
-		$depth		= 0;	# Current depth inside the tag tree.
574
-		$block_text	= "";	# Temporary text holder for current text.
575
-		$parsed		= "";	# Parsed text that will be returned.
576
-
577
-		#
578
-		# Get the name of the starting tag.
579
-		# (This pattern makes $base_tag_name_re safe without quoting.)
580
-		#
581
-		if (preg_match('/^<([\w:$]*)\b/', $text, $matches))
582
-			$base_tag_name_re = $matches[1];
583
-
584
-		#
585
-		# Loop through every tag until we find the corresponding closing tag.
586
-		#
587
-		do {
588
-			#
589
-			# Split the text using the first $tag_match pattern found.
590
-			# Text before  pattern will be first in the array, text after
591
-			# pattern will be at the end, and between will be any catches made 
592
-			# by the pattern.
593
-			#
594
-			$parts = preg_split($tag_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
573
+        $depth		= 0;	# Current depth inside the tag tree.
574
+        $block_text	= "";	# Temporary text holder for current text.
575
+        $parsed		= "";	# Parsed text that will be returned.
576
+
577
+        #
578
+        # Get the name of the starting tag.
579
+        # (This pattern makes $base_tag_name_re safe without quoting.)
580
+        #
581
+        if (preg_match('/^<([\w:$]*)\b/', $text, $matches))
582
+            $base_tag_name_re = $matches[1];
583
+
584
+        #
585
+        # Loop through every tag until we find the corresponding closing tag.
586
+        #
587
+        do {
588
+            #
589
+            # Split the text using the first $tag_match pattern found.
590
+            # Text before  pattern will be first in the array, text after
591
+            # pattern will be at the end, and between will be any catches made 
592
+            # by the pattern.
593
+            #
594
+            $parts = preg_split($tag_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
595 595
 			
596
-			if (count($parts) < 3) {
597
-				#
598
-				# End of $text reached with unbalenced tag(s).
599
-				# In that case, we return original text unchanged and pass the
600
-				# first character as filtered to prevent an infinite loop in the 
601
-				# parent function.
602
-				#
603
-				return array($original_text{0}, substr($original_text, 1));
604
-			}
596
+            if (count($parts) < 3) {
597
+                #
598
+                # End of $text reached with unbalenced tag(s).
599
+                # In that case, we return original text unchanged and pass the
600
+                # first character as filtered to prevent an infinite loop in the 
601
+                # parent function.
602
+                #
603
+                return array($original_text{0}, substr($original_text, 1));
604
+            }
605 605
 			
606
-			$block_text .= $parts[0]; # Text before current tag.
607
-			$tag         = $parts[1]; # Tag to handle.
608
-			$text        = $parts[2]; # Remaining text after current tag.
606
+            $block_text .= $parts[0]; # Text before current tag.
607
+            $tag         = $parts[1]; # Tag to handle.
608
+            $text        = $parts[2]; # Remaining text after current tag.
609 609
 			
610
-			#
611
-			# Check for: Auto-close tag (like <hr/>)
612
-			#			 Comments and Processing Instructions.
613
-			#
614
-			if (preg_match('{^</?(?:'.$this->auto_close_tags_re.')\b}', $tag) ||
615
-				$tag{1} == '!' || $tag{1} == '?')
616
-			{
617
-				# Just add the tag to the block as if it was text.
618
-				$block_text .= $tag;
619
-			}
620
-			else {
621
-				#
622
-				# Increase/decrease nested tag count. Only do so if
623
-				# the tag's name match base tag's.
624
-				#
625
-				if (preg_match('{^</?'.$base_tag_name_re.'\b}', $tag)) {
626
-					if ($tag{1} == '/')						$depth--;
627
-					else if ($tag{strlen($tag)-2} != '/')	$depth++;
628
-				}
610
+            #
611
+            # Check for: Auto-close tag (like <hr/>)
612
+            #			 Comments and Processing Instructions.
613
+            #
614
+            if (preg_match('{^</?(?:'.$this->auto_close_tags_re.')\b}', $tag) ||
615
+                $tag{1} == '!' || $tag{1} == '?')
616
+            {
617
+                # Just add the tag to the block as if it was text.
618
+                $block_text .= $tag;
619
+            }
620
+            else {
621
+                #
622
+                # Increase/decrease nested tag count. Only do so if
623
+                # the tag's name match base tag's.
624
+                #
625
+                if (preg_match('{^</?'.$base_tag_name_re.'\b}', $tag)) {
626
+                    if ($tag{1} == '/')						$depth--;
627
+                    else if ($tag{strlen($tag)-2} != '/')	$depth++;
628
+                }
629 629
 				
630
-				#
631
-				# Check for `markdown="1"` attribute and handle it.
632
-				#
633
-				if ($md_attr && 
634
-					preg_match($markdown_attr_re, $tag, $attr_m) &&
635
-					preg_match('/^1|block|span$/', $attr_m[2] . $attr_m[3]))
636
-				{
637
-					# Remove `markdown` attribute from opening tag.
638
-					$tag = preg_replace($markdown_attr_re, '', $tag);
630
+                #
631
+                # Check for `markdown="1"` attribute and handle it.
632
+                #
633
+                if ($md_attr && 
634
+                    preg_match($markdown_attr_re, $tag, $attr_m) &&
635
+                    preg_match('/^1|block|span$/', $attr_m[2] . $attr_m[3]))
636
+                {
637
+                    # Remove `markdown` attribute from opening tag.
638
+                    $tag = preg_replace($markdown_attr_re, '', $tag);
639 639
 					
640
-					# Check if text inside this tag must be parsed in span mode.
641
-					$this->mode = $attr_m[2] . $attr_m[3];
642
-					$span_mode = $this->mode == 'span' || $this->mode != 'block' &&
643
-						preg_match('{^<(?:'.$this->contain_span_tags_re.')\b}', $tag);
640
+                    # Check if text inside this tag must be parsed in span mode.
641
+                    $this->mode = $attr_m[2] . $attr_m[3];
642
+                    $span_mode = $this->mode == 'span' || $this->mode != 'block' &&
643
+                        preg_match('{^<(?:'.$this->contain_span_tags_re.')\b}', $tag);
644 644
 					
645
-					# Calculate indent before tag.
646
-					if (preg_match('/(?:^|\n)( *?)(?! ).*?$/', $block_text, $matches)) {
647
-						$strlen = $this->utf8_strlen;
648
-						$indent = $strlen($matches[1], 'UTF-8');
649
-					} else {
650
-						$indent = 0;
651
-					}
645
+                    # Calculate indent before tag.
646
+                    if (preg_match('/(?:^|\n)( *?)(?! ).*?$/', $block_text, $matches)) {
647
+                        $strlen = $this->utf8_strlen;
648
+                        $indent = $strlen($matches[1], 'UTF-8');
649
+                    } else {
650
+                        $indent = 0;
651
+                    }
652 652
 					
653
-					# End preceding block with this tag.
654
-					$block_text .= $tag;
655
-					$parsed .= $this->$hash_method($block_text);
653
+                    # End preceding block with this tag.
654
+                    $block_text .= $tag;
655
+                    $parsed .= $this->$hash_method($block_text);
656 656
 					
657
-					# Get enclosing tag name for the ParseMarkdown function.
658
-					# (This pattern makes $tag_name_re safe without quoting.)
659
-					preg_match('/^<([\w:$]*)\b/', $tag, $matches);
660
-					$tag_name_re = $matches[1];
657
+                    # Get enclosing tag name for the ParseMarkdown function.
658
+                    # (This pattern makes $tag_name_re safe without quoting.)
659
+                    preg_match('/^<([\w:$]*)\b/', $tag, $matches);
660
+                    $tag_name_re = $matches[1];
661 661
 					
662
-					# Parse the content using the HTML-in-Markdown parser.
663
-					list ($block_text, $text)
664
-						= $this->_hashHTMLBlocks_inMarkdown($text, $indent, 
665
-							$tag_name_re, $span_mode);
662
+                    # Parse the content using the HTML-in-Markdown parser.
663
+                    list ($block_text, $text)
664
+                        = $this->_hashHTMLBlocks_inMarkdown($text, $indent, 
665
+                            $tag_name_re, $span_mode);
666 666
 					
667
-					# Outdent markdown text.
668
-					if ($indent > 0) {
669
-						$block_text = preg_replace("/^[ ]{1,$indent}/m", "", 
670
-													$block_text);
671
-					}
667
+                    # Outdent markdown text.
668
+                    if ($indent > 0) {
669
+                        $block_text = preg_replace("/^[ ]{1,$indent}/m", "", 
670
+                                                    $block_text);
671
+                    }
672 672
 					
673
-					# Append tag content to parsed text.
674
-					if (!$span_mode)	$parsed .= "\n\n$block_text\n\n";
675
-					else				$parsed .= "$block_text";
673
+                    # Append tag content to parsed text.
674
+                    if (!$span_mode)	$parsed .= "\n\n$block_text\n\n";
675
+                    else				$parsed .= "$block_text";
676 676
 					
677
-					# Start over with a new block.
678
-					$block_text = "";
679
-				}
680
-				else $block_text .= $tag;
681
-			}
677
+                    # Start over with a new block.
678
+                    $block_text = "";
679
+                }
680
+                else $block_text .= $tag;
681
+            }
682 682
 			
683
-		} while ($depth > 0);
683
+        } while ($depth > 0);
684 684
 		
685
-		#
686
-		# Hash last block text that wasn't processed inside the loop.
687
-		#
688
-		$parsed .= $this->$hash_method($block_text);
685
+        #
686
+        # Hash last block text that wasn't processed inside the loop.
687
+        #
688
+        $parsed .= $this->$hash_method($block_text);
689 689
 		
690
-		return array($parsed, $text);
691
-	}
692
-
693
-
694
-	protected function hashClean($text) {
695
-	#
696
-	# Called whenever a tag must be hashed when a function inserts a "clean" tag
697
-	# in $text, it passes through this function and is automaticaly escaped, 
698
-	# blocking invalid nested overlap.
699
-	#
700
-		return $this->hashPart($text, 'C');
701
-	}
702
-
703
-
704
-	protected function doAnchors($text) {
705
-	#
706
-	# Turn Markdown link shortcuts into XHTML <a> tags.
707
-	#
708
-		if ($this->in_anchor) return $text;
709
-		$this->in_anchor = true;
690
+        return array($parsed, $text);
691
+    }
692
+
693
+
694
+    protected function hashClean($text) {
695
+    #
696
+    # Called whenever a tag must be hashed when a function inserts a "clean" tag
697
+    # in $text, it passes through this function and is automaticaly escaped, 
698
+    # blocking invalid nested overlap.
699
+    #
700
+        return $this->hashPart($text, 'C');
701
+    }
702
+
703
+
704
+    protected function doAnchors($text) {
705
+    #
706
+    # Turn Markdown link shortcuts into XHTML <a> tags.
707
+    #
708
+        if ($this->in_anchor) return $text;
709
+        $this->in_anchor = true;
710 710
 		
711
-		#
712
-		# First, handle reference-style links: [link text] [id]
713
-		#
714
-		$text = preg_replace_callback('{
711
+        #
712
+        # First, handle reference-style links: [link text] [id]
713
+        #
714
+        $text = preg_replace_callback('{
715 715
 			(					# wrap whole match in $1
716 716
 			  \[
717 717
 				('.$this->nested_brackets_re.')	# link text = $2
@@ -725,12 +725,12 @@  discard block
 block discarded – undo
725 725
 			  \]
726 726
 			)
727 727
 			}xs',
728
-			array($this, '_doAnchors_reference_callback'), $text);
728
+            array($this, '_doAnchors_reference_callback'), $text);
729 729
 
730
-		#
731
-		# Next, inline-style links: [link text](url "optional title")
732
-		#
733
-		$text = preg_replace_callback('{
730
+        #
731
+        # Next, inline-style links: [link text](url "optional title")
732
+        #
733
+        $text = preg_replace_callback('{
734 734
 			(				# wrap whole match in $1
735 735
 			  \[
736 736
 				('.$this->nested_brackets_re.')	# link text = $2
@@ -753,98 +753,98 @@  discard block
 block discarded – undo
753 753
 			  (?:[ ]? '.$this->id_class_attr_catch_re.' )?	 # $8 = id/class attributes
754 754
 			)
755 755
 			}xs',
756
-			array($this, '_doAnchors_inline_callback'), $text);
757
-
758
-		#
759
-		# Last, handle reference-style shortcuts: [link text]
760
-		# These must come last in case you've also got [link text][1]
761
-		# or [link text](/foo)
762
-		#
763
-		$text = preg_replace_callback('{
756
+            array($this, '_doAnchors_inline_callback'), $text);
757
+
758
+        #
759
+        # Last, handle reference-style shortcuts: [link text]
760
+        # These must come last in case you've also got [link text][1]
761
+        # or [link text](/foo)
762
+        #
763
+        $text = preg_replace_callback('{
764 764
 			(					# wrap whole match in $1
765 765
 			  \[
766 766
 				([^\[\]]+)		# link text = $2; can\'t contain [ or ]
767 767
 			  \]
768 768
 			)
769 769
 			}xs',
770
-			array($this, '_doAnchors_reference_callback'), $text);
771
-
772
-		$this->in_anchor = false;
773
-		return $text;
774
-	}
775
-	protected function _doAnchors_reference_callback($matches) {
776
-		$whole_match =  $matches[1];
777
-		$link_text   =  $matches[2];
778
-		$link_id     =& $matches[3];
779
-
780
-		if ($link_id == "") {
781
-			# for shortcut links like [this][] or [this].
782
-			$link_id = $link_text;
783
-		}
770
+            array($this, '_doAnchors_reference_callback'), $text);
771
+
772
+        $this->in_anchor = false;
773
+        return $text;
774
+    }
775
+    protected function _doAnchors_reference_callback($matches) {
776
+        $whole_match =  $matches[1];
777
+        $link_text   =  $matches[2];
778
+        $link_id     =& $matches[3];
779
+
780
+        if ($link_id == "") {
781
+            # for shortcut links like [this][] or [this].
782
+            $link_id = $link_text;
783
+        }
784 784
 		
785
-		# lower-case and turn embedded newlines into spaces
786
-		$link_id = strtolower($link_id);
787
-		$link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
785
+        # lower-case and turn embedded newlines into spaces
786
+        $link_id = strtolower($link_id);
787
+        $link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
788 788
 
789
-		if (isset($this->urls[$link_id])) {
790
-			$url = $this->urls[$link_id];
791
-			$url = $this->encodeURLAttribute($url);
789
+        if (isset($this->urls[$link_id])) {
790
+            $url = $this->urls[$link_id];
791
+            $url = $this->encodeURLAttribute($url);
792 792
 			
793
-			$result = "<a href=\"$url\"";
794
-			if ( isset( $this->titles[$link_id] ) ) {
795
-				$title = $this->titles[$link_id];
796
-				$title = $this->encodeAttribute($title);
797
-				$result .=  " title=\"$title\"";
798
-			}
799
-			if (isset($this->ref_attr[$link_id]))
800
-				$result .= $this->ref_attr[$link_id];
793
+            $result = "<a href=\"$url\"";
794
+            if ( isset( $this->titles[$link_id] ) ) {
795
+                $title = $this->titles[$link_id];
796
+                $title = $this->encodeAttribute($title);
797
+                $result .=  " title=\"$title\"";
798
+            }
799
+            if (isset($this->ref_attr[$link_id]))
800
+                $result .= $this->ref_attr[$link_id];
801 801
 		
802
-			$link_text = $this->runSpanGamut($link_text);
803
-			$result .= ">$link_text</a>";
804
-			$result = $this->hashPart($result);
805
-		}
806
-		else {
807
-			$result = $whole_match;
808
-		}
809
-		return $result;
810
-	}
811
-	protected function _doAnchors_inline_callback($matches) {
812
-		$whole_match	=  $matches[1];
813
-		$link_text		=  $this->runSpanGamut($matches[2]);
814
-		$url			=  $matches[3] == '' ? $matches[4] : $matches[3];
815
-		$title			=& $matches[7];
816
-		$attr  = $this->doExtraAttributes("a", $dummy =& $matches[8]);
817
-
818
-		// if the URL was of the form <s p a c e s> it got caught by the HTML
819
-		// tag parser and hashed. Need to reverse the process before using the URL.
820
-		$unhashed = $this->unhash($url);
821
-		if ($unhashed != $url)
822
-			$url = preg_replace('/^<(.*)>$/', '\1', $unhashed);
823
-
824
-		$url = $this->encodeURLAttribute($url);
825
-
826
-		$result = "<a href=\"$url\"";
827
-		if (isset($title)) {
828
-			$title = $this->encodeAttribute($title);
829
-			$result .=  " title=\"$title\"";
830
-		}
831
-		$result .= $attr;
802
+            $link_text = $this->runSpanGamut($link_text);
803
+            $result .= ">$link_text</a>";
804
+            $result = $this->hashPart($result);
805
+        }
806
+        else {
807
+            $result = $whole_match;
808
+        }
809
+        return $result;
810
+    }
811
+    protected function _doAnchors_inline_callback($matches) {
812
+        $whole_match	=  $matches[1];
813
+        $link_text		=  $this->runSpanGamut($matches[2]);
814
+        $url			=  $matches[3] == '' ? $matches[4] : $matches[3];
815
+        $title			=& $matches[7];
816
+        $attr  = $this->doExtraAttributes("a", $dummy =& $matches[8]);
817
+
818
+        // if the URL was of the form <s p a c e s> it got caught by the HTML
819
+        // tag parser and hashed. Need to reverse the process before using the URL.
820
+        $unhashed = $this->unhash($url);
821
+        if ($unhashed != $url)
822
+            $url = preg_replace('/^<(.*)>$/', '\1', $unhashed);
823
+
824
+        $url = $this->encodeURLAttribute($url);
825
+
826
+        $result = "<a href=\"$url\"";
827
+        if (isset($title)) {
828
+            $title = $this->encodeAttribute($title);
829
+            $result .=  " title=\"$title\"";
830
+        }
831
+        $result .= $attr;
832 832
 		
833
-		$link_text = $this->runSpanGamut($link_text);
834
-		$result .= ">$link_text</a>";
833
+        $link_text = $this->runSpanGamut($link_text);
834
+        $result .= ">$link_text</a>";
835 835
 
836
-		return $this->hashPart($result);
837
-	}
836
+        return $this->hashPart($result);
837
+    }
838 838
 
839 839
 
840
-	protected function doImages($text) {
841
-	#
842
-	# Turn Markdown image shortcuts into <img> tags.
843
-	#
844
-		#
845
-		# First, handle reference-style labeled images: ![alt text][id]
846
-		#
847
-		$text = preg_replace_callback('{
840
+    protected function doImages($text) {
841
+    #
842
+    # Turn Markdown image shortcuts into <img> tags.
843
+    #
844
+        #
845
+        # First, handle reference-style labeled images: ![alt text][id]
846
+        #
847
+        $text = preg_replace_callback('{
848 848
 			(				# wrap whole match in $1
849 849
 			  !\[
850 850
 				('.$this->nested_brackets_re.')		# alt text = $2
@@ -859,13 +859,13 @@  discard block
 block discarded – undo
859 859
 
860 860
 			)
861 861
 			}xs', 
862
-			array($this, '_doImages_reference_callback'), $text);
862
+            array($this, '_doImages_reference_callback'), $text);
863 863
 
864
-		#
865
-		# Next, handle inline images:  ![alt text](url "optional title")
866
-		# Don't forget: encode * and _
867
-		#
868
-		$text = preg_replace_callback('{
864
+        #
865
+        # Next, handle inline images:  ![alt text](url "optional title")
866
+        # Don't forget: encode * and _
867
+        #
868
+        $text = preg_replace_callback('{
869 869
 			(				# wrap whole match in $1
870 870
 			  !\[
871 871
 				('.$this->nested_brackets_re.')		# alt text = $2
@@ -889,88 +889,88 @@  discard block
 block discarded – undo
889 889
 			  (?:[ ]? '.$this->id_class_attr_catch_re.' )?	 # $8 = id/class attributes
890 890
 			)
891 891
 			}xs',
892
-			array($this, '_doImages_inline_callback'), $text);
893
-
894
-		return $text;
895
-	}
896
-	protected function _doImages_reference_callback($matches) {
897
-		$whole_match = $matches[1];
898
-		$alt_text    = $matches[2];
899
-		$link_id     = strtolower($matches[3]);
900
-
901
-		if ($link_id == "") {
902
-			$link_id = strtolower($alt_text); # for shortcut links like ![this][].
903
-		}
904
-
905
-		$alt_text = $this->encodeAttribute($alt_text);
906
-		if (isset($this->urls[$link_id])) {
907
-			$url = $this->encodeURLAttribute($this->urls[$link_id]);
908
-			$result = "<img src=\"$url\" alt=\"$alt_text\"";
909
-			if (isset($this->titles[$link_id])) {
910
-				$title = $this->titles[$link_id];
911
-				$title = $this->encodeAttribute($title);
912
-				$result .=  " title=\"$title\"";
913
-			}
914
-			if (isset($this->ref_attr[$link_id]))
915
-				$result .= $this->ref_attr[$link_id];
916
-			$result .= $this->empty_element_suffix;
917
-			$result = $this->hashPart($result);
918
-		}
919
-		else {
920
-			# If there's no such link ID, leave intact:
921
-			$result = $whole_match;
922
-		}
923
-
924
-		return $result;
925
-	}
926
-	protected function _doImages_inline_callback($matches) {
927
-		$whole_match	= $matches[1];
928
-		$alt_text		= $matches[2];
929
-		$url			= $matches[3] == '' ? $matches[4] : $matches[3];
930
-		$title			=& $matches[7];
931
-		$attr  = $this->doExtraAttributes("img", $dummy =& $matches[8]);
932
-
933
-		$alt_text = $this->encodeAttribute($alt_text);
934
-		$url = $this->encodeURLAttribute($url);
935
-		$result = "<img src=\"$url\" alt=\"$alt_text\"";
936
-		if (isset($title)) {
937
-			$title = $this->encodeAttribute($title);
938
-			$result .=  " title=\"$title\""; # $title already quoted
939
-		}
940
-		$result .= $attr;
941
-		$result .= $this->empty_element_suffix;
942
-
943
-		return $this->hashPart($result);
944
-	}
945
-
946
-
947
-	protected function doHeaders($text) {
948
-	#
949
-	# Redefined to add id and class attribute support.
950
-	#
951
-		# Setext-style headers:
952
-		#	  Header 1  {#header1}
953
-		#	  ========
954
-		#  
955
-		#	  Header 2  {#header2 .class1 .class2}
956
-		#	  --------
957
-		#
958
-		$text = preg_replace_callback(
959
-			'{
892
+            array($this, '_doImages_inline_callback'), $text);
893
+
894
+        return $text;
895
+    }
896
+    protected function _doImages_reference_callback($matches) {
897
+        $whole_match = $matches[1];
898
+        $alt_text    = $matches[2];
899
+        $link_id     = strtolower($matches[3]);
900
+
901
+        if ($link_id == "") {
902
+            $link_id = strtolower($alt_text); # for shortcut links like ![this][].
903
+        }
904
+
905
+        $alt_text = $this->encodeAttribute($alt_text);
906
+        if (isset($this->urls[$link_id])) {
907
+            $url = $this->encodeURLAttribute($this->urls[$link_id]);
908
+            $result = "<img src=\"$url\" alt=\"$alt_text\"";
909
+            if (isset($this->titles[$link_id])) {
910
+                $title = $this->titles[$link_id];
911
+                $title = $this->encodeAttribute($title);
912
+                $result .=  " title=\"$title\"";
913
+            }
914
+            if (isset($this->ref_attr[$link_id]))
915
+                $result .= $this->ref_attr[$link_id];
916
+            $result .= $this->empty_element_suffix;
917
+            $result = $this->hashPart($result);
918
+        }
919
+        else {
920
+            # If there's no such link ID, leave intact:
921
+            $result = $whole_match;
922
+        }
923
+
924
+        return $result;
925
+    }
926
+    protected function _doImages_inline_callback($matches) {
927
+        $whole_match	= $matches[1];
928
+        $alt_text		= $matches[2];
929
+        $url			= $matches[3] == '' ? $matches[4] : $matches[3];
930
+        $title			=& $matches[7];
931
+        $attr  = $this->doExtraAttributes("img", $dummy =& $matches[8]);
932
+
933
+        $alt_text = $this->encodeAttribute($alt_text);
934
+        $url = $this->encodeURLAttribute($url);
935
+        $result = "<img src=\"$url\" alt=\"$alt_text\"";
936
+        if (isset($title)) {
937
+            $title = $this->encodeAttribute($title);
938
+            $result .=  " title=\"$title\""; # $title already quoted
939
+        }
940
+        $result .= $attr;
941
+        $result .= $this->empty_element_suffix;
942
+
943
+        return $this->hashPart($result);
944
+    }
945
+
946
+
947
+    protected function doHeaders($text) {
948
+    #
949
+    # Redefined to add id and class attribute support.
950
+    #
951
+        # Setext-style headers:
952
+        #	  Header 1  {#header1}
953
+        #	  ========
954
+        #  
955
+        #	  Header 2  {#header2 .class1 .class2}
956
+        #	  --------
957
+        #
958
+        $text = preg_replace_callback(
959
+            '{
960 960
 				(^.+?)								# $1: Header text
961 961
 				(?:[ ]+ '.$this->id_class_attr_catch_re.' )?	 # $3 = id/class attributes
962 962
 				[ ]*\n(=+|-+)[ ]*\n+				# $3: Header footer
963 963
 			}mx',
964
-			array($this, '_doHeaders_callback_setext'), $text);
965
-
966
-		# atx-style headers:
967
-		#	# Header 1        {#header1}
968
-		#	## Header 2       {#header2}
969
-		#	## Header 2 with closing hashes ##  {#header3.class1.class2}
970
-		#	...
971
-		#	###### Header 6   {.class2}
972
-		#
973
-		$text = preg_replace_callback('{
964
+            array($this, '_doHeaders_callback_setext'), $text);
965
+
966
+        # atx-style headers:
967
+        #	# Header 1        {#header1}
968
+        #	## Header 2       {#header2}
969
+        #	## Header 2 with closing hashes ##  {#header3.class1.class2}
970
+        #	...
971
+        #	###### Header 6   {.class2}
972
+        #
973
+        $text = preg_replace_callback('{
974 974
 				^(\#{1,6})	# $1 = string of #\'s
975 975
 				[ ]*
976 976
 				(.+?)		# $2 = Header text
@@ -980,46 +980,46 @@  discard block
 block discarded – undo
980 980
 				[ ]*
981 981
 				\n+
982 982
 			}xm',
983
-			array($this, '_doHeaders_callback_atx'), $text);
984
-
985
-		return $text;
986
-	}
987
-	protected function _doHeaders_callback_setext($matches) {
988
-		if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
989
-			return $matches[0];
990
-
991
-		$level = $matches[3]{0} == '=' ? 1 : 2;
992
-
993
-		$defaultId = is_callable($this->header_id_func) ? call_user_func($this->header_id_func, $matches[1]) : null;
994
-
995
-		$attr  = $this->doExtraAttributes("h$level", $dummy =& $matches[2], $defaultId);
996
-		$block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
997
-		return "\n" . $this->hashBlock($block) . "\n\n";
998
-	}
999
-	protected function _doHeaders_callback_atx($matches) {
1000
-		$level = strlen($matches[1]);
1001
-
1002
-		$defaultId = is_callable($this->header_id_func) ? call_user_func($this->header_id_func, $matches[2]) : null;
1003
-		$attr  = $this->doExtraAttributes("h$level", $dummy =& $matches[3], $defaultId);
1004
-		$block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
1005
-		return "\n" . $this->hashBlock($block) . "\n\n";
1006
-	}
1007
-
1008
-
1009
-	protected function doTables($text) {
1010
-	#
1011
-	# Form HTML tables.
1012
-	#
1013
-		$less_than_tab = $this->tab_width - 1;
1014
-		#
1015
-		# Find tables with leading pipe.
1016
-		#
1017
-		#	| Header 1 | Header 2
1018
-		#	| -------- | --------
1019
-		#	| Cell 1   | Cell 2
1020
-		#	| Cell 3   | Cell 4
1021
-		#
1022
-		$text = preg_replace_callback('
983
+            array($this, '_doHeaders_callback_atx'), $text);
984
+
985
+        return $text;
986
+    }
987
+    protected function _doHeaders_callback_setext($matches) {
988
+        if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
989
+            return $matches[0];
990
+
991
+        $level = $matches[3]{0} == '=' ? 1 : 2;
992
+
993
+        $defaultId = is_callable($this->header_id_func) ? call_user_func($this->header_id_func, $matches[1]) : null;
994
+
995
+        $attr  = $this->doExtraAttributes("h$level", $dummy =& $matches[2], $defaultId);
996
+        $block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
997
+        return "\n" . $this->hashBlock($block) . "\n\n";
998
+    }
999
+    protected function _doHeaders_callback_atx($matches) {
1000
+        $level = strlen($matches[1]);
1001
+
1002
+        $defaultId = is_callable($this->header_id_func) ? call_user_func($this->header_id_func, $matches[2]) : null;
1003
+        $attr  = $this->doExtraAttributes("h$level", $dummy =& $matches[3], $defaultId);
1004
+        $block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
1005
+        return "\n" . $this->hashBlock($block) . "\n\n";
1006
+    }
1007
+
1008
+
1009
+    protected function doTables($text) {
1010
+    #
1011
+    # Form HTML tables.
1012
+    #
1013
+        $less_than_tab = $this->tab_width - 1;
1014
+        #
1015
+        # Find tables with leading pipe.
1016
+        #
1017
+        #	| Header 1 | Header 2
1018
+        #	| -------- | --------
1019
+        #	| Cell 1   | Cell 2
1020
+        #	| Cell 3   | Cell 4
1021
+        #
1022
+        $text = preg_replace_callback('
1023 1023
 			{
1024 1024
 				^							# Start of a line
1025 1025
 				[ ]{0,'.$less_than_tab.'}	# Allowed whitespace.
@@ -1037,17 +1037,17 @@  discard block
 block discarded – undo
1037 1037
 				)
1038 1038
 				(?=\n|\Z)					# Stop at final double newline.
1039 1039
 			}xm',
1040
-			array($this, '_doTable_leadingPipe_callback'), $text);
1040
+            array($this, '_doTable_leadingPipe_callback'), $text);
1041 1041
 		
1042
-		#
1043
-		# Find tables without leading pipe.
1044
-		#
1045
-		#	Header 1 | Header 2
1046
-		#	-------- | --------
1047
-		#	Cell 1   | Cell 2
1048
-		#	Cell 3   | Cell 4
1049
-		#
1050
-		$text = preg_replace_callback('
1042
+        #
1043
+        # Find tables without leading pipe.
1044
+        #
1045
+        #	Header 1 | Header 2
1046
+        #	-------- | --------
1047
+        #	Cell 1   | Cell 2
1048
+        #	Cell 3   | Cell 4
1049
+        #
1050
+        $text = preg_replace_callback('
1051 1051
 			{
1052 1052
 				^							# Start of a line
1053 1053
 				[ ]{0,'.$less_than_tab.'}	# Allowed whitespace.
@@ -1063,100 +1063,100 @@  discard block
 block discarded – undo
1063 1063
 				)
1064 1064
 				(?=\n|\Z)					# Stop at final double newline.
1065 1065
 			}xm',
1066
-			array($this, '_DoTable_callback'), $text);
1067
-
1068
-		return $text;
1069
-	}
1070
-	protected function _doTable_leadingPipe_callback($matches) {
1071
-		$head		= $matches[1];
1072
-		$underline	= $matches[2];
1073
-		$content	= $matches[3];
1066
+            array($this, '_DoTable_callback'), $text);
1067
+
1068
+        return $text;
1069
+    }
1070
+    protected function _doTable_leadingPipe_callback($matches) {
1071
+        $head		= $matches[1];
1072
+        $underline	= $matches[2];
1073
+        $content	= $matches[3];
1074 1074
 		
1075
-		# Remove leading pipe for each row.
1076
-		$content	= preg_replace('/^ *[|]/m', '', $content);
1075
+        # Remove leading pipe for each row.
1076
+        $content	= preg_replace('/^ *[|]/m', '', $content);
1077 1077
 		
1078
-		return $this->_doTable_callback(array($matches[0], $head, $underline, $content));
1079
-	}
1080
-	protected function _doTable_makeAlignAttr($alignname)
1081
-	{
1082
-		if (empty($this->table_align_class_tmpl))
1083
-			return " align=\"$alignname\"";
1084
-
1085
-		$classname = str_replace('%%', $alignname, $this->table_align_class_tmpl);
1086
-		return " class=\"$classname\"";
1087
-	}
1088
-	protected function _doTable_callback($matches) {
1089
-		$head		= $matches[1];
1090
-		$underline	= $matches[2];
1091
-		$content	= $matches[3];
1092
-
1093
-		# Remove any tailing pipes for each line.
1094
-		$head		= preg_replace('/[|] *$/m', '', $head);
1095
-		$underline	= preg_replace('/[|] *$/m', '', $underline);
1096
-		$content	= preg_replace('/[|] *$/m', '', $content);
1078
+        return $this->_doTable_callback(array($matches[0], $head, $underline, $content));
1079
+    }
1080
+    protected function _doTable_makeAlignAttr($alignname)
1081
+    {
1082
+        if (empty($this->table_align_class_tmpl))
1083
+            return " align=\"$alignname\"";
1084
+
1085
+        $classname = str_replace('%%', $alignname, $this->table_align_class_tmpl);
1086
+        return " class=\"$classname\"";
1087
+    }
1088
+    protected function _doTable_callback($matches) {
1089
+        $head		= $matches[1];
1090
+        $underline	= $matches[2];
1091
+        $content	= $matches[3];
1092
+
1093
+        # Remove any tailing pipes for each line.
1094
+        $head		= preg_replace('/[|] *$/m', '', $head);
1095
+        $underline	= preg_replace('/[|] *$/m', '', $underline);
1096
+        $content	= preg_replace('/[|] *$/m', '', $content);
1097 1097
 		
1098
-		# Reading alignement from header underline.
1099
-		$separators	= preg_split('/ *[|] */', $underline);
1100
-		foreach ($separators as $n => $s) {
1101
-			if (preg_match('/^ *-+: *$/', $s))
1102
-				$attr[$n] = $this->_doTable_makeAlignAttr('right');
1103
-			else if (preg_match('/^ *:-+: *$/', $s))
1104
-				$attr[$n] = $this->_doTable_makeAlignAttr('center');
1105
-			else if (preg_match('/^ *:-+ *$/', $s))
1106
-				$attr[$n] = $this->_doTable_makeAlignAttr('left');
1107
-			else
1108
-				$attr[$n] = '';
1109
-		}
1098
+        # Reading alignement from header underline.
1099
+        $separators	= preg_split('/ *[|] */', $underline);
1100
+        foreach ($separators as $n => $s) {
1101
+            if (preg_match('/^ *-+: *$/', $s))
1102
+                $attr[$n] = $this->_doTable_makeAlignAttr('right');
1103
+            else if (preg_match('/^ *:-+: *$/', $s))
1104
+                $attr[$n] = $this->_doTable_makeAlignAttr('center');
1105
+            else if (preg_match('/^ *:-+ *$/', $s))
1106
+                $attr[$n] = $this->_doTable_makeAlignAttr('left');
1107
+            else
1108
+                $attr[$n] = '';
1109
+        }
1110 1110
 		
1111
-		# Parsing span elements, including code spans, character escapes, 
1112
-		# and inline HTML tags, so that pipes inside those gets ignored.
1113
-		$head		= $this->parseSpan($head);
1114
-		$headers	= preg_split('/ *[|] */', $head);
1115
-		$col_count	= count($headers);
1116
-		$attr       = array_pad($attr, $col_count, '');
1111
+        # Parsing span elements, including code spans, character escapes, 
1112
+        # and inline HTML tags, so that pipes inside those gets ignored.
1113
+        $head		= $this->parseSpan($head);
1114
+        $headers	= preg_split('/ *[|] */', $head);
1115
+        $col_count	= count($headers);
1116
+        $attr       = array_pad($attr, $col_count, '');
1117 1117
 		
1118
-		# Write column headers.
1119
-		$text = "<table>\n";
1120
-		$text .= "<thead>\n";
1121
-		$text .= "<tr>\n";
1122
-		foreach ($headers as $n => $header)
1123
-			$text .= "  <th$attr[$n]>".$this->runSpanGamut(trim($header))."</th>\n";
1124
-		$text .= "</tr>\n";
1125
-		$text .= "</thead>\n";
1118
+        # Write column headers.
1119
+        $text = "<table>\n";
1120
+        $text .= "<thead>\n";
1121
+        $text .= "<tr>\n";
1122
+        foreach ($headers as $n => $header)
1123
+            $text .= "  <th$attr[$n]>".$this->runSpanGamut(trim($header))."</th>\n";
1124
+        $text .= "</tr>\n";
1125
+        $text .= "</thead>\n";
1126 1126
 		
1127
-		# Split content by row.
1128
-		$rows = explode("\n", trim($content, "\n"));
1127
+        # Split content by row.
1128
+        $rows = explode("\n", trim($content, "\n"));
1129 1129
 		
1130
-		$text .= "<tbody>\n";
1131
-		foreach ($rows as $row) {
1132
-			# Parsing span elements, including code spans, character escapes, 
1133
-			# and inline HTML tags, so that pipes inside those gets ignored.
1134
-			$row = $this->parseSpan($row);
1130
+        $text .= "<tbody>\n";
1131
+        foreach ($rows as $row) {
1132
+            # Parsing span elements, including code spans, character escapes, 
1133
+            # and inline HTML tags, so that pipes inside those gets ignored.
1134
+            $row = $this->parseSpan($row);
1135 1135
 			
1136
-			# Split row by cell.
1137
-			$row_cells = preg_split('/ *[|] */', $row, $col_count);
1138
-			$row_cells = array_pad($row_cells, $col_count, '');
1136
+            # Split row by cell.
1137
+            $row_cells = preg_split('/ *[|] */', $row, $col_count);
1138
+            $row_cells = array_pad($row_cells, $col_count, '');
1139 1139
 			
1140
-			$text .= "<tr>\n";
1141
-			foreach ($row_cells as $n => $cell)
1142
-				$text .= "  <td$attr[$n]>".$this->runSpanGamut(trim($cell))."</td>\n";
1143
-			$text .= "</tr>\n";
1144
-		}
1145
-		$text .= "</tbody>\n";
1146
-		$text .= "</table>";
1140
+            $text .= "<tr>\n";
1141
+            foreach ($row_cells as $n => $cell)
1142
+                $text .= "  <td$attr[$n]>".$this->runSpanGamut(trim($cell))."</td>\n";
1143
+            $text .= "</tr>\n";
1144
+        }
1145
+        $text .= "</tbody>\n";
1146
+        $text .= "</table>";
1147 1147
 		
1148
-		return $this->hashBlock($text) . "\n";
1149
-	}
1148
+        return $this->hashBlock($text) . "\n";
1149
+    }
1150 1150
 
1151 1151
 	
1152
-	protected function doDefLists($text) {
1153
-	#
1154
-	# Form HTML definition lists.
1155
-	#
1156
-		$less_than_tab = $this->tab_width - 1;
1157
-
1158
-		# Re-usable pattern to match any entire dl list:
1159
-		$whole_list_re = '(?>
1152
+    protected function doDefLists($text) {
1153
+    #
1154
+    # Form HTML definition lists.
1155
+    #
1156
+        $less_than_tab = $this->tab_width - 1;
1157
+
1158
+        # Re-usable pattern to match any entire dl list:
1159
+        $whole_list_re = '(?>
1160 1160
 			(								# $1 = whole list
1161 1161
 			  (								# $2
1162 1162
 				[ ]{0,'.$less_than_tab.'}
@@ -1183,38 +1183,38 @@  discard block
 block discarded – undo
1183 1183
 			)
1184 1184
 		)'; // mx
1185 1185
 
1186
-		$text = preg_replace_callback('{
1186
+        $text = preg_replace_callback('{
1187 1187
 				(?>\A\n?|(?<=\n\n))
1188 1188
 				'.$whole_list_re.'
1189 1189
 			}mx',
1190
-			array($this, '_doDefLists_callback'), $text);
1190
+            array($this, '_doDefLists_callback'), $text);
1191 1191
 
1192
-		return $text;
1193
-	}
1194
-	protected function _doDefLists_callback($matches) {
1195
-		# Re-usable patterns to match list item bullets and number markers:
1196
-		$list = $matches[1];
1192
+        return $text;
1193
+    }
1194
+    protected function _doDefLists_callback($matches) {
1195
+        # Re-usable patterns to match list item bullets and number markers:
1196
+        $list = $matches[1];
1197 1197
 		
1198
-		# Turn double returns into triple returns, so that we can make a
1199
-		# paragraph for the last item in a list, if necessary:
1200
-		$result = trim($this->processDefListItems($list));
1201
-		$result = "<dl>\n" . $result . "\n</dl>";
1202
-		return $this->hashBlock($result) . "\n\n";
1203
-	}
1204
-
1205
-
1206
-	protected function processDefListItems($list_str) {
1207
-	#
1208
-	#	Process the contents of a single definition list, splitting it
1209
-	#	into individual term and definition list items.
1210
-	#
1211
-		$less_than_tab = $this->tab_width - 1;
1198
+        # Turn double returns into triple returns, so that we can make a
1199
+        # paragraph for the last item in a list, if necessary:
1200
+        $result = trim($this->processDefListItems($list));
1201
+        $result = "<dl>\n" . $result . "\n</dl>";
1202
+        return $this->hashBlock($result) . "\n\n";
1203
+    }
1204
+
1205
+
1206
+    protected function processDefListItems($list_str) {
1207
+    #
1208
+    #	Process the contents of a single definition list, splitting it
1209
+    #	into individual term and definition list items.
1210
+    #
1211
+        $less_than_tab = $this->tab_width - 1;
1212 1212
 		
1213
-		# trim trailing blank lines:
1214
-		$list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
1213
+        # trim trailing blank lines:
1214
+        $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
1215 1215
 
1216
-		# Process definition terms.
1217
-		$list_str = preg_replace_callback('{
1216
+        # Process definition terms.
1217
+        $list_str = preg_replace_callback('{
1218 1218
 			(?>\A\n?|\n\n+)					# leading line
1219 1219
 			(								# definition terms = $1
1220 1220
 				[ ]{0,'.$less_than_tab.'}	# leading whitespace
@@ -1225,10 +1225,10 @@  discard block
 block discarded – undo
1225 1225
 			(?=\n?[ ]{0,3}:[ ])				# lookahead for following line feed 
1226 1226
 											#   with a definition mark.
1227 1227
 			}xm',
1228
-			array($this, '_processDefListItems_callback_dt'), $list_str);
1228
+            array($this, '_processDefListItems_callback_dt'), $list_str);
1229 1229
 
1230
-		# Process actual definitions.
1231
-		$list_str = preg_replace_callback('{
1230
+        # Process actual definitions.
1231
+        $list_str = preg_replace_callback('{
1232 1232
 			\n(\n+)?						# leading line = $1
1233 1233
 			(								# marker space = $2
1234 1234
 				[ ]{0,'.$less_than_tab.'}	# whitespace before colon
@@ -1242,50 +1242,50 @@  discard block
 block discarded – undo
1242 1242
 				)						
1243 1243
 			)					
1244 1244
 			}xm',
1245
-			array($this, '_processDefListItems_callback_dd'), $list_str);
1246
-
1247
-		return $list_str;
1248
-	}
1249
-	protected function _processDefListItems_callback_dt($matches) {
1250
-		$terms = explode("\n", trim($matches[1]));
1251
-		$text = '';
1252
-		foreach ($terms as $term) {
1253
-			$term = $this->runSpanGamut(trim($term));
1254
-			$text .= "\n<dt>" . $term . "</dt>";
1255
-		}
1256
-		return $text . "\n";
1257
-	}
1258
-	protected function _processDefListItems_callback_dd($matches) {
1259
-		$leading_line	= $matches[1];
1260
-		$marker_space	= $matches[2];
1261
-		$def			= $matches[3];
1262
-
1263
-		if ($leading_line || preg_match('/\n{2,}/', $def)) {
1264
-			# Replace marker with the appropriate whitespace indentation
1265
-			$def = str_repeat(' ', strlen($marker_space)) . $def;
1266
-			$def = $this->runBlockGamut($this->outdent($def . "\n\n"));
1267
-			$def = "\n". $def ."\n";
1268
-		}
1269
-		else {
1270
-			$def = rtrim($def);
1271
-			$def = $this->runSpanGamut($this->outdent($def));
1272
-		}
1273
-
1274
-		return "\n<dd>" . $def . "</dd>\n";
1275
-	}
1276
-
1277
-
1278
-	protected function doFencedCodeBlocks($text) {
1279
-	#
1280
-	# Adding the fenced code block syntax to regular Markdown:
1281
-	#
1282
-	# ~~~
1283
-	# Code block
1284
-	# ~~~
1285
-	#
1286
-		$less_than_tab = $this->tab_width;
1245
+            array($this, '_processDefListItems_callback_dd'), $list_str);
1246
+
1247
+        return $list_str;
1248
+    }
1249
+    protected function _processDefListItems_callback_dt($matches) {
1250
+        $terms = explode("\n", trim($matches[1]));
1251
+        $text = '';
1252
+        foreach ($terms as $term) {
1253
+            $term = $this->runSpanGamut(trim($term));
1254
+            $text .= "\n<dt>" . $term . "</dt>";
1255
+        }
1256
+        return $text . "\n";
1257
+    }
1258
+    protected function _processDefListItems_callback_dd($matches) {
1259
+        $leading_line	= $matches[1];
1260
+        $marker_space	= $matches[2];
1261
+        $def			= $matches[3];
1262
+
1263
+        if ($leading_line || preg_match('/\n{2,}/', $def)) {
1264
+            # Replace marker with the appropriate whitespace indentation
1265
+            $def = str_repeat(' ', strlen($marker_space)) . $def;
1266
+            $def = $this->runBlockGamut($this->outdent($def . "\n\n"));
1267
+            $def = "\n". $def ."\n";
1268
+        }
1269
+        else {
1270
+            $def = rtrim($def);
1271
+            $def = $this->runSpanGamut($this->outdent($def));
1272
+        }
1273
+
1274
+        return "\n<dd>" . $def . "</dd>\n";
1275
+    }
1276
+
1277
+
1278
+    protected function doFencedCodeBlocks($text) {
1279
+    #
1280
+    # Adding the fenced code block syntax to regular Markdown:
1281
+    #
1282
+    # ~~~
1283
+    # Code block
1284
+    # ~~~
1285
+    #
1286
+        $less_than_tab = $this->tab_width;
1287 1287
 		
1288
-		$text = preg_replace_callback('{
1288
+        $text = preg_replace_callback('{
1289 1289
 				(?:\n|\A)
1290 1290
 				# 1: Opening marker
1291 1291
 				(
@@ -1310,105 +1310,105 @@  discard block
 block discarded – undo
1310 1310
 				# Closing marker.
1311 1311
 				\1 [ ]* (?= \n )
1312 1312
 			}xm',
1313
-			array($this, '_doFencedCodeBlocks_callback'), $text);
1314
-
1315
-		return $text;
1316
-	}
1317
-	protected function _doFencedCodeBlocks_callback($matches) {
1318
-		$classname =& $matches[2];
1319
-		$attrs     =& $matches[3];
1320
-		$codeblock = $matches[4];
1321
-		$codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
1322
-		$codeblock = preg_replace_callback('/^\n+/',
1323
-			array($this, '_doFencedCodeBlocks_newlines'), $codeblock);
1324
-
1325
-		if ($classname != "") {
1326
-			if ($classname{0} == '.')
1327
-				$classname = substr($classname, 1);
1328
-			$attr_str = ' class="'.$this->code_class_prefix.$classname.'"';
1329
-		} else {
1330
-			$attr_str = $this->doExtraAttributes($this->code_attr_on_pre ? "pre" : "code", $attrs);
1331
-		}
1332
-		$pre_attr_str  = $this->code_attr_on_pre ? $attr_str : '';
1333
-		$code_attr_str = $this->code_attr_on_pre ? '' : $attr_str;
1334
-		$codeblock  = "<pre$pre_attr_str><code$code_attr_str>$codeblock</code></pre>";
1313
+            array($this, '_doFencedCodeBlocks_callback'), $text);
1314
+
1315
+        return $text;
1316
+    }
1317
+    protected function _doFencedCodeBlocks_callback($matches) {
1318
+        $classname =& $matches[2];
1319
+        $attrs     =& $matches[3];
1320
+        $codeblock = $matches[4];
1321
+        $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
1322
+        $codeblock = preg_replace_callback('/^\n+/',
1323
+            array($this, '_doFencedCodeBlocks_newlines'), $codeblock);
1324
+
1325
+        if ($classname != "") {
1326
+            if ($classname{0} == '.')
1327
+                $classname = substr($classname, 1);
1328
+            $attr_str = ' class="'.$this->code_class_prefix.$classname.'"';
1329
+        } else {
1330
+            $attr_str = $this->doExtraAttributes($this->code_attr_on_pre ? "pre" : "code", $attrs);
1331
+        }
1332
+        $pre_attr_str  = $this->code_attr_on_pre ? $attr_str : '';
1333
+        $code_attr_str = $this->code_attr_on_pre ? '' : $attr_str;
1334
+        $codeblock  = "<pre$pre_attr_str><code$code_attr_str>$codeblock</code></pre>";
1335 1335
 		
1336
-		return "\n\n".$this->hashBlock($codeblock)."\n\n";
1337
-	}
1338
-	protected function _doFencedCodeBlocks_newlines($matches) {
1339
-		return str_repeat("<br$this->empty_element_suffix", 
1340
-			strlen($matches[0]));
1341
-	}
1342
-
1343
-
1344
-	#
1345
-	# Redefining emphasis markers so that emphasis by underscore does not
1346
-	# work in the middle of a word.
1347
-	#
1348
-	protected $em_relist = array(
1349
-		''  => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?![\.,:;]?\s)',
1350
-		'*' => '(?<![\s*])\*(?!\*)',
1351
-		'_' => '(?<![\s_])_(?![a-zA-Z0-9_])',
1352
-		);
1353
-	protected $strong_relist = array(
1354
-		''   => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?![\.,:;]?\s)',
1355
-		'**' => '(?<![\s*])\*\*(?!\*)',
1356
-		'__' => '(?<![\s_])__(?![a-zA-Z0-9_])',
1357
-		);
1358
-	protected $em_strong_relist = array(
1359
-		''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?![\.,:;]?\s)',
1360
-		'***' => '(?<![\s*])\*\*\*(?!\*)',
1361
-		'___' => '(?<![\s_])___(?![a-zA-Z0-9_])',
1362
-		);
1363
-
1364
-
1365
-	protected function formParagraphs($text) {
1366
-	#
1367
-	#	Params:
1368
-	#		$text - string to process with html <p> tags
1369
-	#
1370
-		# Strip leading and trailing lines:
1371
-		$text = preg_replace('/\A\n+|\n+\z/', '', $text);
1336
+        return "\n\n".$this->hashBlock($codeblock)."\n\n";
1337
+    }
1338
+    protected function _doFencedCodeBlocks_newlines($matches) {
1339
+        return str_repeat("<br$this->empty_element_suffix", 
1340
+            strlen($matches[0]));
1341
+    }
1342
+
1343
+
1344
+    #
1345
+    # Redefining emphasis markers so that emphasis by underscore does not
1346
+    # work in the middle of a word.
1347
+    #
1348
+    protected $em_relist = array(
1349
+        ''  => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?![\.,:;]?\s)',
1350
+        '*' => '(?<![\s*])\*(?!\*)',
1351
+        '_' => '(?<![\s_])_(?![a-zA-Z0-9_])',
1352
+        );
1353
+    protected $strong_relist = array(
1354
+        ''   => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?![\.,:;]?\s)',
1355
+        '**' => '(?<![\s*])\*\*(?!\*)',
1356
+        '__' => '(?<![\s_])__(?![a-zA-Z0-9_])',
1357
+        );
1358
+    protected $em_strong_relist = array(
1359
+        ''    => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?![\.,:;]?\s)',
1360
+        '***' => '(?<![\s*])\*\*\*(?!\*)',
1361
+        '___' => '(?<![\s_])___(?![a-zA-Z0-9_])',
1362
+        );
1363
+
1364
+
1365
+    protected function formParagraphs($text) {
1366
+    #
1367
+    #	Params:
1368
+    #		$text - string to process with html <p> tags
1369
+    #
1370
+        # Strip leading and trailing lines:
1371
+        $text = preg_replace('/\A\n+|\n+\z/', '', $text);
1372 1372
 		
1373
-		$grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
1373
+        $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
1374 1374
 
1375
-		#
1376
-		# Wrap <p> tags and unhashify HTML blocks
1377
-		#
1378
-		foreach ($grafs as $key => $value) {
1379
-			$value = trim($this->runSpanGamut($value));
1375
+        #
1376
+        # Wrap <p> tags and unhashify HTML blocks
1377
+        #
1378
+        foreach ($grafs as $key => $value) {
1379
+            $value = trim($this->runSpanGamut($value));
1380 1380
 			
1381
-			# Check if this should be enclosed in a paragraph.
1382
-			# Clean tag hashes & block tag hashes are left alone.
1383
-			$is_p = !preg_match('/^B\x1A[0-9]+B|^C\x1A[0-9]+C$/', $value);
1381
+            # Check if this should be enclosed in a paragraph.
1382
+            # Clean tag hashes & block tag hashes are left alone.
1383
+            $is_p = !preg_match('/^B\x1A[0-9]+B|^C\x1A[0-9]+C$/', $value);
1384 1384
 			
1385
-			if ($is_p) {
1386
-				$value = "<p>$value</p>";
1387
-			}
1388
-			$grafs[$key] = $value;
1389
-		}
1385
+            if ($is_p) {
1386
+                $value = "<p>$value</p>";
1387
+            }
1388
+            $grafs[$key] = $value;
1389
+        }
1390 1390
 		
1391
-		# Join grafs in one text, then unhash HTML tags. 
1392
-		$text = implode("\n\n", $grafs);
1391
+        # Join grafs in one text, then unhash HTML tags. 
1392
+        $text = implode("\n\n", $grafs);
1393 1393
 		
1394
-		# Finish by removing any tag hashes still present in $text.
1395
-		$text = $this->unhash($text);
1394
+        # Finish by removing any tag hashes still present in $text.
1395
+        $text = $this->unhash($text);
1396 1396
 		
1397
-		return $text;
1398
-	}
1397
+        return $text;
1398
+    }
1399 1399
 	
1400 1400
 	
1401
-	### Footnotes
1401
+    ### Footnotes
1402 1402
 	
1403
-	protected function stripFootnotes($text) {
1404
-	#
1405
-	# Strips link definitions from text, stores the URLs and titles in
1406
-	# hash references.
1407
-	#
1408
-		$less_than_tab = $this->tab_width - 1;
1409
-
1410
-		# Link defs are in the form: [^id]: url "optional title"
1411
-		$text = preg_replace_callback('{
1403
+    protected function stripFootnotes($text) {
1404
+    #
1405
+    # Strips link definitions from text, stores the URLs and titles in
1406
+    # hash references.
1407
+    #
1408
+        $less_than_tab = $this->tab_width - 1;
1409
+
1410
+        # Link defs are in the form: [^id]: url "optional title"
1411
+        $text = preg_replace_callback('{
1412 1412
 			^[ ]{0,'.$less_than_tab.'}\[\^(.+?)\][ ]?:	# note_id = $1
1413 1413
 			  [ ]*
1414 1414
 			  \n?					# maybe *one* newline
@@ -1423,192 +1423,192 @@  discard block
 block discarded – undo
1423 1423
 				)*
1424 1424
 			)		
1425 1425
 			}xm',
1426
-			array($this, '_stripFootnotes_callback'),
1427
-			$text);
1428
-		return $text;
1429
-	}
1430
-	protected function _stripFootnotes_callback($matches) {
1431
-		$note_id = $this->fn_id_prefix . $matches[1];
1432
-		$this->footnotes[$note_id] = $this->outdent($matches[2]);
1433
-		return ''; # String that will replace the block
1434
-	}
1435
-
1436
-
1437
-	protected function doFootnotes($text) {
1438
-	#
1439
-	# Replace footnote references in $text [^id] with a special text-token 
1440
-	# which will be replaced by the actual footnote marker in appendFootnotes.
1441
-	#
1442
-		if (!$this->in_anchor) {
1443
-			$text = preg_replace('{\[\^(.+?)\]}', "F\x1Afn:\\1\x1A:", $text);
1444
-		}
1445
-		return $text;
1446
-	}
1426
+            array($this, '_stripFootnotes_callback'),
1427
+            $text);
1428
+        return $text;
1429
+    }
1430
+    protected function _stripFootnotes_callback($matches) {
1431
+        $note_id = $this->fn_id_prefix . $matches[1];
1432
+        $this->footnotes[$note_id] = $this->outdent($matches[2]);
1433
+        return ''; # String that will replace the block
1434
+    }
1435
+
1436
+
1437
+    protected function doFootnotes($text) {
1438
+    #
1439
+    # Replace footnote references in $text [^id] with a special text-token 
1440
+    # which will be replaced by the actual footnote marker in appendFootnotes.
1441
+    #
1442
+        if (!$this->in_anchor) {
1443
+            $text = preg_replace('{\[\^(.+?)\]}', "F\x1Afn:\\1\x1A:", $text);
1444
+        }
1445
+        return $text;
1446
+    }
1447 1447
 
1448 1448
 	
1449
-	protected function appendFootnotes($text) {
1450
-	#
1451
-	# Append footnote list to text.
1452
-	#
1453
-		$text = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}', 
1454
-			array($this, '_appendFootnotes_callback'), $text);
1449
+    protected function appendFootnotes($text) {
1450
+    #
1451
+    # Append footnote list to text.
1452
+    #
1453
+        $text = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}', 
1454
+            array($this, '_appendFootnotes_callback'), $text);
1455 1455
 	
1456
-		if (!empty($this->footnotes_ordered)) {
1457
-			$text .= "\n\n";
1458
-			$text .= "<div class=\"footnotes\">\n";
1459
-			$text .= "<hr". $this->empty_element_suffix ."\n";
1460
-			$text .= "<ol>\n\n";
1461
-
1462
-			$attr = "";
1463
-			if ($this->fn_backlink_class != "") {
1464
-				$class = $this->fn_backlink_class;
1465
-				$class = $this->encodeAttribute($class);
1466
-				$attr .= " class=\"$class\"";
1467
-			}
1468
-			if ($this->fn_backlink_title != "") {
1469
-				$title = $this->fn_backlink_title;
1470
-				$title = $this->encodeAttribute($title);
1471
-				$attr .= " title=\"$title\"";
1472
-			}
1473
-			$num = 0;
1456
+        if (!empty($this->footnotes_ordered)) {
1457
+            $text .= "\n\n";
1458
+            $text .= "<div class=\"footnotes\">\n";
1459
+            $text .= "<hr". $this->empty_element_suffix ."\n";
1460
+            $text .= "<ol>\n\n";
1461
+
1462
+            $attr = "";
1463
+            if ($this->fn_backlink_class != "") {
1464
+                $class = $this->fn_backlink_class;
1465
+                $class = $this->encodeAttribute($class);
1466
+                $attr .= " class=\"$class\"";
1467
+            }
1468
+            if ($this->fn_backlink_title != "") {
1469
+                $title = $this->fn_backlink_title;
1470
+                $title = $this->encodeAttribute($title);
1471
+                $attr .= " title=\"$title\"";
1472
+            }
1473
+            $num = 0;
1474 1474
 			
1475
-			while (!empty($this->footnotes_ordered)) {
1476
-				$footnote = reset($this->footnotes_ordered);
1477
-				$note_id = key($this->footnotes_ordered);
1478
-				unset($this->footnotes_ordered[$note_id]);
1479
-				$ref_count = $this->footnotes_ref_count[$note_id];
1480
-				unset($this->footnotes_ref_count[$note_id]);
1481
-				unset($this->footnotes[$note_id]);
1475
+            while (!empty($this->footnotes_ordered)) {
1476
+                $footnote = reset($this->footnotes_ordered);
1477
+                $note_id = key($this->footnotes_ordered);
1478
+                unset($this->footnotes_ordered[$note_id]);
1479
+                $ref_count = $this->footnotes_ref_count[$note_id];
1480
+                unset($this->footnotes_ref_count[$note_id]);
1481
+                unset($this->footnotes[$note_id]);
1482 1482
 				
1483
-				$footnote .= "\n"; # Need to append newline before parsing.
1484
-				$footnote = $this->runBlockGamut("$footnote\n");				
1485
-				$footnote = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}', 
1486
-					array($this, '_appendFootnotes_callback'), $footnote);
1483
+                $footnote .= "\n"; # Need to append newline before parsing.
1484
+                $footnote = $this->runBlockGamut("$footnote\n");				
1485
+                $footnote = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}', 
1486
+                    array($this, '_appendFootnotes_callback'), $footnote);
1487 1487
 				
1488
-				$attr = str_replace("%%", ++$num, $attr);
1489
-				$note_id = $this->encodeAttribute($note_id);
1490
-
1491
-				# Prepare backlink, multiple backlinks if multiple references
1492
-				$backlink = "<a href=\"#fnref:$note_id\"$attr>&#8617;</a>";
1493
-				for ($ref_num = 2; $ref_num <= $ref_count; ++$ref_num) {
1494
-					$backlink .= " <a href=\"#fnref$ref_num:$note_id\"$attr>&#8617;</a>";
1495
-				}
1496
-				# Add backlink to last paragraph; create new paragraph if needed.
1497
-				if (preg_match('{</p>$}', $footnote)) {
1498
-					$footnote = substr($footnote, 0, -4) . "&#160;$backlink</p>";
1499
-				} else {
1500
-					$footnote .= "\n\n<p>$backlink</p>";
1501
-				}
1488
+                $attr = str_replace("%%", ++$num, $attr);
1489
+                $note_id = $this->encodeAttribute($note_id);
1490
+
1491
+                # Prepare backlink, multiple backlinks if multiple references
1492
+                $backlink = "<a href=\"#fnref:$note_id\"$attr>&#8617;</a>";
1493
+                for ($ref_num = 2; $ref_num <= $ref_count; ++$ref_num) {
1494
+                    $backlink .= " <a href=\"#fnref$ref_num:$note_id\"$attr>&#8617;</a>";
1495
+                }
1496
+                # Add backlink to last paragraph; create new paragraph if needed.
1497
+                if (preg_match('{</p>$}', $footnote)) {
1498
+                    $footnote = substr($footnote, 0, -4) . "&#160;$backlink</p>";
1499
+                } else {
1500
+                    $footnote .= "\n\n<p>$backlink</p>";
1501
+                }
1502 1502
 				
1503
-				$text .= "<li id=\"fn:$note_id\">\n";
1504
-				$text .= $footnote . "\n";
1505
-				$text .= "</li>\n\n";
1506
-			}
1503
+                $text .= "<li id=\"fn:$note_id\">\n";
1504
+                $text .= $footnote . "\n";
1505
+                $text .= "</li>\n\n";
1506
+            }
1507 1507
 			
1508
-			$text .= "</ol>\n";
1509
-			$text .= "</div>";
1510
-		}
1511
-		return $text;
1512
-	}
1513
-	protected function _appendFootnotes_callback($matches) {
1514
-		$node_id = $this->fn_id_prefix . $matches[1];
1508
+            $text .= "</ol>\n";
1509
+            $text .= "</div>";
1510
+        }
1511
+        return $text;
1512
+    }
1513
+    protected function _appendFootnotes_callback($matches) {
1514
+        $node_id = $this->fn_id_prefix . $matches[1];
1515 1515
 		
1516
-		# Create footnote marker only if it has a corresponding footnote *and*
1517
-		# the footnote hasn't been used by another marker.
1518
-		if (isset($this->footnotes[$node_id])) {
1519
-			$num =& $this->footnotes_numbers[$node_id];
1520
-			if (!isset($num)) {
1521
-				# Transfer footnote content to the ordered list and give it its
1522
-				# number
1523
-				$this->footnotes_ordered[$node_id] = $this->footnotes[$node_id];
1524
-				$this->footnotes_ref_count[$node_id] = 1;
1525
-				$num = $this->footnote_counter++;
1526
-				$ref_count_mark = '';
1527
-			} else {
1528
-				$ref_count_mark = $this->footnotes_ref_count[$node_id] += 1;
1529
-			}
1530
-
1531
-			$attr = "";
1532
-			if ($this->fn_link_class != "") {
1533
-				$class = $this->fn_link_class;
1534
-				$class = $this->encodeAttribute($class);
1535
-				$attr .= " class=\"$class\"";
1536
-			}
1537
-			if ($this->fn_link_title != "") {
1538
-				$title = $this->fn_link_title;
1539
-				$title = $this->encodeAttribute($title);
1540
-				$attr .= " title=\"$title\"";
1541
-			}
1516
+        # Create footnote marker only if it has a corresponding footnote *and*
1517
+        # the footnote hasn't been used by another marker.
1518
+        if (isset($this->footnotes[$node_id])) {
1519
+            $num =& $this->footnotes_numbers[$node_id];
1520
+            if (!isset($num)) {
1521
+                # Transfer footnote content to the ordered list and give it its
1522
+                # number
1523
+                $this->footnotes_ordered[$node_id] = $this->footnotes[$node_id];
1524
+                $this->footnotes_ref_count[$node_id] = 1;
1525
+                $num = $this->footnote_counter++;
1526
+                $ref_count_mark = '';
1527
+            } else {
1528
+                $ref_count_mark = $this->footnotes_ref_count[$node_id] += 1;
1529
+            }
1530
+
1531
+            $attr = "";
1532
+            if ($this->fn_link_class != "") {
1533
+                $class = $this->fn_link_class;
1534
+                $class = $this->encodeAttribute($class);
1535
+                $attr .= " class=\"$class\"";
1536
+            }
1537
+            if ($this->fn_link_title != "") {
1538
+                $title = $this->fn_link_title;
1539
+                $title = $this->encodeAttribute($title);
1540
+                $attr .= " title=\"$title\"";
1541
+            }
1542 1542
 			
1543
-			$attr = str_replace("%%", $num, $attr);
1544
-			$node_id = $this->encodeAttribute($node_id);
1543
+            $attr = str_replace("%%", $num, $attr);
1544
+            $node_id = $this->encodeAttribute($node_id);
1545 1545
 			
1546
-			return
1547
-				"<sup id=\"fnref$ref_count_mark:$node_id\">".
1548
-				"<a href=\"#fn:$node_id\"$attr>$num</a>".
1549
-				"</sup>";
1550
-		}
1546
+            return
1547
+                "<sup id=\"fnref$ref_count_mark:$node_id\">".
1548
+                "<a href=\"#fn:$node_id\"$attr>$num</a>".
1549
+                "</sup>";
1550
+        }
1551 1551
 		
1552
-		return "[^".$matches[1]."]";
1553
-	}
1552
+        return "[^".$matches[1]."]";
1553
+    }
1554 1554
 		
1555 1555
 	
1556
-	### Abbreviations ###
1556
+    ### Abbreviations ###
1557 1557
 	
1558
-	protected function stripAbbreviations($text) {
1559
-	#
1560
-	# Strips abbreviations from text, stores titles in hash references.
1561
-	#
1562
-		$less_than_tab = $this->tab_width - 1;
1563
-
1564
-		# Link defs are in the form: [id]*: url "optional title"
1565
-		$text = preg_replace_callback('{
1558
+    protected function stripAbbreviations($text) {
1559
+    #
1560
+    # Strips abbreviations from text, stores titles in hash references.
1561
+    #
1562
+        $less_than_tab = $this->tab_width - 1;
1563
+
1564
+        # Link defs are in the form: [id]*: url "optional title"
1565
+        $text = preg_replace_callback('{
1566 1566
 			^[ ]{0,'.$less_than_tab.'}\*\[(.+?)\][ ]?:	# abbr_id = $1
1567 1567
 			(.*)					# text = $2 (no blank lines allowed)	
1568 1568
 			}xm',
1569
-			array($this, '_stripAbbreviations_callback'),
1570
-			$text);
1571
-		return $text;
1572
-	}
1573
-	protected function _stripAbbreviations_callback($matches) {
1574
-		$abbr_word = $matches[1];
1575
-		$abbr_desc = $matches[2];
1576
-		if ($this->abbr_word_re)
1577
-			$this->abbr_word_re .= '|';
1578
-		$this->abbr_word_re .= preg_quote($abbr_word);
1579
-		$this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
1580
-		return ''; # String that will replace the block
1581
-	}
1569
+            array($this, '_stripAbbreviations_callback'),
1570
+            $text);
1571
+        return $text;
1572
+    }
1573
+    protected function _stripAbbreviations_callback($matches) {
1574
+        $abbr_word = $matches[1];
1575
+        $abbr_desc = $matches[2];
1576
+        if ($this->abbr_word_re)
1577
+            $this->abbr_word_re .= '|';
1578
+        $this->abbr_word_re .= preg_quote($abbr_word);
1579
+        $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
1580
+        return ''; # String that will replace the block
1581
+    }
1582 1582
 	
1583 1583
 	
1584
-	protected function doAbbreviations($text) {
1585
-	#
1586
-	# Find defined abbreviations in text and wrap them in <abbr> elements.
1587
-	#
1588
-		if ($this->abbr_word_re) {
1589
-			// cannot use the /x modifier because abbr_word_re may 
1590
-			// contain significant spaces:
1591
-			$text = preg_replace_callback('{'.
1592
-				'(?<![\w\x1A])'.
1593
-				'(?:'.$this->abbr_word_re.')'.
1594
-				'(?![\w\x1A])'.
1595
-				'}', 
1596
-				array($this, '_doAbbreviations_callback'), $text);
1597
-		}
1598
-		return $text;
1599
-	}
1600
-	protected function _doAbbreviations_callback($matches) {
1601
-		$abbr = $matches[0];
1602
-		if (isset($this->abbr_desciptions[$abbr])) {
1603
-			$desc = $this->abbr_desciptions[$abbr];
1604
-			if (empty($desc)) {
1605
-				return $this->hashPart("<abbr>$abbr</abbr>");
1606
-			} else {
1607
-				$desc = $this->encodeAttribute($desc);
1608
-				return $this->hashPart("<abbr title=\"$desc\">$abbr</abbr>");
1609
-			}
1610
-		} else {
1611
-			return $matches[0];
1612
-		}
1613
-	}
1584
+    protected function doAbbreviations($text) {
1585
+    #
1586
+    # Find defined abbreviations in text and wrap them in <abbr> elements.
1587
+    #
1588
+        if ($this->abbr_word_re) {
1589
+            // cannot use the /x modifier because abbr_word_re may 
1590
+            // contain significant spaces:
1591
+            $text = preg_replace_callback('{'.
1592
+                '(?<![\w\x1A])'.
1593
+                '(?:'.$this->abbr_word_re.')'.
1594
+                '(?![\w\x1A])'.
1595
+                '}', 
1596
+                array($this, '_doAbbreviations_callback'), $text);
1597
+        }
1598
+        return $text;
1599
+    }
1600
+    protected function _doAbbreviations_callback($matches) {
1601
+        $abbr = $matches[0];
1602
+        if (isset($this->abbr_desciptions[$abbr])) {
1603
+            $desc = $this->abbr_desciptions[$abbr];
1604
+            if (empty($desc)) {
1605
+                return $this->hashPart("<abbr>$abbr</abbr>");
1606
+            } else {
1607
+                $desc = $this->encodeAttribute($desc);
1608
+                return $this->hashPart("<abbr title=\"$desc\">$abbr</abbr>");
1609
+            }
1610
+        } else {
1611
+            return $matches[0];
1612
+        }
1613
+    }
1614 1614
 }
Please login to merge, or discard this patch.
Spacing   +82 added lines, -82 removed lines patch added patch discarded remove patch
@@ -162,7 +162,7 @@  discard block
 block discarded – undo
162 162
 				if ($id === false) $id = substr($element, 1);
163 163
 			} else if (strpos($element, '=') > 0) {
164 164
 				$parts = explode('=', $element, 2);
165
-				$attributes[] = $parts[0] . '="' . $parts[1] . '"';
165
+				$attributes[] = $parts[0].'="'.$parts[1].'"';
166 166
 			}
167 167
 		}
168 168
 
@@ -171,10 +171,10 @@  discard block
 block discarded – undo
171 171
 		# compose attributes as string
172 172
 		$attr_str = "";
173 173
 		if (!empty($id)) {
174
-			$attr_str .= ' id="'.$this->encodeAttribute($id) .'"';
174
+			$attr_str .= ' id="'.$this->encodeAttribute($id).'"';
175 175
 		}
176 176
 		if (!empty($classes)) {
177
-			$attr_str .= ' class="'. implode(" ", $classes) . '"';
177
+			$attr_str .= ' class="'.implode(" ", $classes).'"';
178 178
 		}
179 179
 		if (!$this->no_markup && !empty($attributes)) {
180 180
 			$attr_str .= ' '.implode(" ", $attributes);
@@ -222,8 +222,8 @@  discard block
 block discarded – undo
222 222
 		$link_id = strtolower($matches[1]);
223 223
 		$url = $matches[2] == '' ? $matches[3] : $matches[2];
224 224
 		$this->urls[$link_id] = $url;
225
-		$this->titles[$link_id] =& $matches[4];
226
-		$this->ref_attr[$link_id] = $this->doExtraAttributes("", $dummy =& $matches[5]);
225
+		$this->titles[$link_id] = & $matches[4];
226
+		$this->ref_attr[$link_id] = $this->doExtraAttributes("", $dummy = & $matches[5]);
227 227
 		return ''; # String that will replace the block
228 228
 	}
229 229
 
@@ -268,7 +268,7 @@  discard block
 block discarded – undo
268 268
 		#
269 269
 		# Call the HTML-in-Markdown hasher.
270 270
 		#
271
-		list($text, ) = $this->_hashHTMLBlocks_inMarkdown($text);
271
+		list($text,) = $this->_hashHTMLBlocks_inMarkdown($text);
272 272
 		
273 273
 		return $text;
274 274
 	}
@@ -337,18 +337,18 @@  discard block
 block discarded – undo
337 337
 					<\?.*?\?> | <%.*?%>	# Processing instruction
338 338
 				|
339 339
 					<!\[CDATA\[.*?\]\]>	# CData Block
340
-				'. ( !$span ? ' # If not in span.
340
+				'. (!$span ? ' # If not in span.
341 341
 				|
342 342
 					# Indented code block
343 343
 					(?: ^[ ]*\n | ^ | \n[ ]*\n )
344
-					[ ]{'.($indent+4).'}[^\n]* \n
344
+					[ ]{'.($indent + 4).'}[^\n]* \n
345 345
 					(?>
346
-						(?: [ ]{'.($indent+4).'}[^\n]* | [ ]* ) \n
346
+						(?: [ ]{'.($indent + 4).'}[^\n]* | [ ]* ) \n
347 347
 					)*
348 348
 				|
349 349
 					# Fenced code block marker
350 350
 					(?<= ^ | \n )
351
-					[ ]{0,'.($indent+3).'}(?:~{3,}|`{3,})
351
+					[ ]{0,'.($indent + 3).'}(?:~{3,}|`{3,})
352 352
 									[ ]*
353 353
 					(?:
354 354
 					\.?[-_:a-zA-Z0-9]+ # standalone class name
@@ -357,7 +357,7 @@  discard block
 block discarded – undo
357 357
 					)?
358 358
 					[ ]*
359 359
 					(?= \n )
360
-				' : '' ). ' # End (if not is span).
360
+				' : '').' # End (if not is span).
361 361
 				|
362 362
 					# Code span marker
363 363
 					# Note, this regex needs to go after backtick fenced
@@ -368,8 +368,8 @@  discard block
 block discarded – undo
368 368
 			}xs';
369 369
 
370 370
 		
371
-		$depth = 0;		# Current depth inside the tag tree.
372
-		$parsed = "";	# Parsed text that will be returned.
371
+		$depth = 0; # Current depth inside the tag tree.
372
+		$parsed = ""; # Parsed text that will be returned.
373 373
 
374 374
 		#
375 375
 		# Loop through every tag until we find the closing tag of the parent
@@ -390,7 +390,7 @@  discard block
 block discarded – undo
390 390
 			if ($span) {
391 391
 				$void = $this->hashPart("", ':');
392 392
 				$newline = "$void\n";
393
-				$parts[0] = $void . str_replace("\n", $newline, $parts[0]) . $void;
393
+				$parts[0] = $void.str_replace("\n", $newline, $parts[0]).$void;
394 394
 			}
395 395
 			
396 396
 			$parsed .= $parts[0]; # Text before current tag.
@@ -410,7 +410,7 @@  discard block
 block discarded – undo
410 410
 			# Note: need to recheck the whole tag to disambiguate backtick
411 411
 			# fences from code spans
412 412
 			#
413
-			if (preg_match('{^\n?([ ]{0,'.($indent+3).'})(~{3,}|`{3,})[ ]*(?:\.?[-_:a-zA-Z0-9]+|'.$this->id_class_attr_nocatch_re.')?[ ]*\n?$}', $tag, $capture)) {
413
+			if (preg_match('{^\n?([ ]{0,'.($indent + 3).'})(~{3,}|`{3,})[ ]*(?:\.?[-_:a-zA-Z0-9]+|'.$this->id_class_attr_nocatch_re.')?[ ]*\n?$}', $tag, $capture)) {
414 414
 				# Fenced code block marker: find matching end marker.
415 415
 				$fence_indent = strlen($capture[1]); # use captured indent in re
416 416
 				$fence_re = $capture[2]; # use captured fence in re
@@ -418,7 +418,7 @@  discard block
 block discarded – undo
418 418
 					$matches)) 
419 419
 				{
420 420
 					# End marker found: pass text unchanged until marker.
421
-					$parsed .= $tag . $matches[0];
421
+					$parsed .= $tag.$matches[0];
422 422
 					$text = substr($text, strlen($matches[0]));
423 423
 				}
424 424
 				else {
@@ -445,7 +445,7 @@  discard block
 block discarded – undo
445 445
 					$text, $matches))
446 446
 				{
447 447
 					# End marker found: pass text unchanged until marker.
448
-					$parsed .= $tag . $matches[0];
448
+					$parsed .= $tag.$matches[0];
449 449
 					$text = substr($text, strlen($matches[0]));
450 450
 				}
451 451
 				else {
@@ -459,14 +459,14 @@  discard block
 block discarded – undo
459 459
 			#               used as a block tag (tag is alone on it's line).
460 460
 			#
461 461
 			else if (preg_match('{^<(?:'.$this->block_tags_re.')\b}', $tag) ||
462
-				(	preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) &&
462
+				(preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) &&
463 463
 					preg_match($newline_before_re, $parsed) &&
464
-					preg_match($newline_after_re, $text)	)
464
+					preg_match($newline_after_re, $text))
465 465
 				)
466 466
 			{
467 467
 				# Need to parse tag and following text using the HTML parser.
468 468
 				list($block_text, $text) = 
469
-					$this->_hashHTMLBlocks_inHTML($tag . $text, "hashBlock", true);
469
+					$this->_hashHTMLBlocks_inHTML($tag.$text, "hashBlock", true);
470 470
 				
471 471
 				# Make sure it stays outside of any paragraph by adding newlines.
472 472
 				$parsed .= "\n\n$block_text\n\n";
@@ -481,7 +481,7 @@  discard block
 block discarded – undo
481 481
 				# Need to parse tag and following text using the HTML parser.
482 482
 				# (don't check for markdown attribute)
483 483
 				list($block_text, $text) = 
484
-					$this->_hashHTMLBlocks_inHTML($tag . $text, "hashClean", false);
484
+					$this->_hashHTMLBlocks_inHTML($tag.$text, "hashClean", false);
485 485
 				
486 486
 				$parsed .= $block_text;
487 487
 			}
@@ -496,14 +496,14 @@  discard block
 block discarded – undo
496 496
 				# Increase/decrease nested tag count.
497 497
 				#
498 498
 				if ($tag{1} == '/')						$depth--;
499
-				else if ($tag{strlen($tag)-2} != '/')	$depth++;
499
+				else if ($tag{strlen($tag) - 2} != '/')	$depth++;
500 500
 
501 501
 				if ($depth < 0) {
502 502
 					#
503 503
 					# Going out of parent element. Clean up and break so we
504 504
 					# return to the calling function.
505 505
 					#
506
-					$text = $tag . $text;
506
+					$text = $tag.$text;
507 507
 					break;
508 508
 				}
509 509
 				
@@ -568,11 +568,11 @@  discard block
 block discarded – undo
568 568
 				)
569 569
 			}xs';
570 570
 		
571
-		$original_text = $text;		# Save original text in case of faliure.
571
+		$original_text = $text; # Save original text in case of faliure.
572 572
 		
573
-		$depth		= 0;	# Current depth inside the tag tree.
574
-		$block_text	= "";	# Temporary text holder for current text.
575
-		$parsed		= "";	# Parsed text that will be returned.
573
+		$depth = 0; # Current depth inside the tag tree.
574
+		$block_text = ""; # Temporary text holder for current text.
575
+		$parsed = ""; # Parsed text that will be returned.
576 576
 
577 577
 		#
578 578
 		# Get the name of the starting tag.
@@ -624,7 +624,7 @@  discard block
 block discarded – undo
624 624
 				#
625 625
 				if (preg_match('{^</?'.$base_tag_name_re.'\b}', $tag)) {
626 626
 					if ($tag{1} == '/')						$depth--;
627
-					else if ($tag{strlen($tag)-2} != '/')	$depth++;
627
+					else if ($tag{strlen($tag) - 2} != '/')	$depth++;
628 628
 				}
629 629
 				
630 630
 				#
@@ -632,13 +632,13 @@  discard block
 block discarded – undo
632 632
 				#
633 633
 				if ($md_attr && 
634 634
 					preg_match($markdown_attr_re, $tag, $attr_m) &&
635
-					preg_match('/^1|block|span$/', $attr_m[2] . $attr_m[3]))
635
+					preg_match('/^1|block|span$/', $attr_m[2].$attr_m[3]))
636 636
 				{
637 637
 					# Remove `markdown` attribute from opening tag.
638 638
 					$tag = preg_replace($markdown_attr_re, '', $tag);
639 639
 					
640 640
 					# Check if text inside this tag must be parsed in span mode.
641
-					$this->mode = $attr_m[2] . $attr_m[3];
641
+					$this->mode = $attr_m[2].$attr_m[3];
642 642
 					$span_mode = $this->mode == 'span' || $this->mode != 'block' &&
643 643
 						preg_match('{^<(?:'.$this->contain_span_tags_re.')\b}', $tag);
644 644
 					
@@ -773,9 +773,9 @@  discard block
 block discarded – undo
773 773
 		return $text;
774 774
 	}
775 775
 	protected function _doAnchors_reference_callback($matches) {
776
-		$whole_match =  $matches[1];
777
-		$link_text   =  $matches[2];
778
-		$link_id     =& $matches[3];
776
+		$whole_match = $matches[1];
777
+		$link_text   = $matches[2];
778
+		$link_id     = & $matches[3];
779 779
 
780 780
 		if ($link_id == "") {
781 781
 			# for shortcut links like [this][] or [this].
@@ -791,10 +791,10 @@  discard block
 block discarded – undo
791 791
 			$url = $this->encodeURLAttribute($url);
792 792
 			
793 793
 			$result = "<a href=\"$url\"";
794
-			if ( isset( $this->titles[$link_id] ) ) {
794
+			if (isset($this->titles[$link_id])) {
795 795
 				$title = $this->titles[$link_id];
796 796
 				$title = $this->encodeAttribute($title);
797
-				$result .=  " title=\"$title\"";
797
+				$result .= " title=\"$title\"";
798 798
 			}
799 799
 			if (isset($this->ref_attr[$link_id]))
800 800
 				$result .= $this->ref_attr[$link_id];
@@ -809,11 +809,11 @@  discard block
 block discarded – undo
809 809
 		return $result;
810 810
 	}
811 811
 	protected function _doAnchors_inline_callback($matches) {
812
-		$whole_match	=  $matches[1];
813
-		$link_text		=  $this->runSpanGamut($matches[2]);
814
-		$url			=  $matches[3] == '' ? $matches[4] : $matches[3];
815
-		$title			=& $matches[7];
816
-		$attr  = $this->doExtraAttributes("a", $dummy =& $matches[8]);
812
+		$whole_match = $matches[1];
813
+		$link_text = $this->runSpanGamut($matches[2]);
814
+		$url			= $matches[3] == '' ? $matches[4] : $matches[3];
815
+		$title = & $matches[7];
816
+		$attr  = $this->doExtraAttributes("a", $dummy = & $matches[8]);
817 817
 
818 818
 		// if the URL was of the form <s p a c e s> it got caught by the HTML
819 819
 		// tag parser and hashed. Need to reverse the process before using the URL.
@@ -826,7 +826,7 @@  discard block
 block discarded – undo
826 826
 		$result = "<a href=\"$url\"";
827 827
 		if (isset($title)) {
828 828
 			$title = $this->encodeAttribute($title);
829
-			$result .=  " title=\"$title\"";
829
+			$result .= " title=\"$title\"";
830 830
 		}
831 831
 		$result .= $attr;
832 832
 		
@@ -909,7 +909,7 @@  discard block
 block discarded – undo
909 909
 			if (isset($this->titles[$link_id])) {
910 910
 				$title = $this->titles[$link_id];
911 911
 				$title = $this->encodeAttribute($title);
912
-				$result .=  " title=\"$title\"";
912
+				$result .= " title=\"$title\"";
913 913
 			}
914 914
 			if (isset($this->ref_attr[$link_id]))
915 915
 				$result .= $this->ref_attr[$link_id];
@@ -924,18 +924,18 @@  discard block
 block discarded – undo
924 924
 		return $result;
925 925
 	}
926 926
 	protected function _doImages_inline_callback($matches) {
927
-		$whole_match	= $matches[1];
928
-		$alt_text		= $matches[2];
927
+		$whole_match = $matches[1];
928
+		$alt_text = $matches[2];
929 929
 		$url			= $matches[3] == '' ? $matches[4] : $matches[3];
930
-		$title			=& $matches[7];
931
-		$attr  = $this->doExtraAttributes("img", $dummy =& $matches[8]);
930
+		$title = & $matches[7];
931
+		$attr  = $this->doExtraAttributes("img", $dummy = & $matches[8]);
932 932
 
933 933
 		$alt_text = $this->encodeAttribute($alt_text);
934 934
 		$url = $this->encodeURLAttribute($url);
935 935
 		$result = "<img src=\"$url\" alt=\"$alt_text\"";
936 936
 		if (isset($title)) {
937 937
 			$title = $this->encodeAttribute($title);
938
-			$result .=  " title=\"$title\""; # $title already quoted
938
+			$result .= " title=\"$title\""; # $title already quoted
939 939
 		}
940 940
 		$result .= $attr;
941 941
 		$result .= $this->empty_element_suffix;
@@ -992,17 +992,17 @@  discard block
 block discarded – undo
992 992
 
993 993
 		$defaultId = is_callable($this->header_id_func) ? call_user_func($this->header_id_func, $matches[1]) : null;
994 994
 
995
-		$attr  = $this->doExtraAttributes("h$level", $dummy =& $matches[2], $defaultId);
995
+		$attr  = $this->doExtraAttributes("h$level", $dummy = & $matches[2], $defaultId);
996 996
 		$block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
997
-		return "\n" . $this->hashBlock($block) . "\n\n";
997
+		return "\n".$this->hashBlock($block)."\n\n";
998 998
 	}
999 999
 	protected function _doHeaders_callback_atx($matches) {
1000 1000
 		$level = strlen($matches[1]);
1001 1001
 
1002 1002
 		$defaultId = is_callable($this->header_id_func) ? call_user_func($this->header_id_func, $matches[2]) : null;
1003
-		$attr  = $this->doExtraAttributes("h$level", $dummy =& $matches[3], $defaultId);
1003
+		$attr  = $this->doExtraAttributes("h$level", $dummy = & $matches[3], $defaultId);
1004 1004
 		$block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
1005
-		return "\n" . $this->hashBlock($block) . "\n\n";
1005
+		return "\n".$this->hashBlock($block)."\n\n";
1006 1006
 	}
1007 1007
 
1008 1008
 
@@ -1068,8 +1068,8 @@  discard block
 block discarded – undo
1068 1068
 		return $text;
1069 1069
 	}
1070 1070
 	protected function _doTable_leadingPipe_callback($matches) {
1071
-		$head		= $matches[1];
1072
-		$underline	= $matches[2];
1071
+		$head = $matches[1];
1072
+		$underline = $matches[2];
1073 1073
 		$content	= $matches[3];
1074 1074
 		
1075 1075
 		# Remove leading pipe for each row.
@@ -1086,14 +1086,14 @@  discard block
 block discarded – undo
1086 1086
 		return " class=\"$classname\"";
1087 1087
 	}
1088 1088
 	protected function _doTable_callback($matches) {
1089
-		$head		= $matches[1];
1090
-		$underline	= $matches[2];
1091
-		$content	= $matches[3];
1089
+		$head = $matches[1];
1090
+		$underline = $matches[2];
1091
+		$content = $matches[3];
1092 1092
 
1093 1093
 		# Remove any tailing pipes for each line.
1094
-		$head		= preg_replace('/[|] *$/m', '', $head);
1095
-		$underline	= preg_replace('/[|] *$/m', '', $underline);
1096
-		$content	= preg_replace('/[|] *$/m', '', $content);
1094
+		$head = preg_replace('/[|] *$/m', '', $head);
1095
+		$underline = preg_replace('/[|] *$/m', '', $underline);
1096
+		$content = preg_replace('/[|] *$/m', '', $content);
1097 1097
 		
1098 1098
 		# Reading alignement from header underline.
1099 1099
 		$separators	= preg_split('/ *[|] */', $underline);
@@ -1110,10 +1110,10 @@  discard block
 block discarded – undo
1110 1110
 		
1111 1111
 		# Parsing span elements, including code spans, character escapes, 
1112 1112
 		# and inline HTML tags, so that pipes inside those gets ignored.
1113
-		$head		= $this->parseSpan($head);
1114
-		$headers	= preg_split('/ *[|] */', $head);
1115
-		$col_count	= count($headers);
1116
-		$attr       = array_pad($attr, $col_count, '');
1113
+		$head = $this->parseSpan($head);
1114
+		$headers = preg_split('/ *[|] */', $head);
1115
+		$col_count = count($headers);
1116
+		$attr = array_pad($attr, $col_count, '');
1117 1117
 		
1118 1118
 		# Write column headers.
1119 1119
 		$text = "<table>\n";
@@ -1145,7 +1145,7 @@  discard block
 block discarded – undo
1145 1145
 		$text .= "</tbody>\n";
1146 1146
 		$text .= "</table>";
1147 1147
 		
1148
-		return $this->hashBlock($text) . "\n";
1148
+		return $this->hashBlock($text)."\n";
1149 1149
 	}
1150 1150
 
1151 1151
 	
@@ -1198,8 +1198,8 @@  discard block
 block discarded – undo
1198 1198
 		# Turn double returns into triple returns, so that we can make a
1199 1199
 		# paragraph for the last item in a list, if necessary:
1200 1200
 		$result = trim($this->processDefListItems($list));
1201
-		$result = "<dl>\n" . $result . "\n</dl>";
1202
-		return $this->hashBlock($result) . "\n\n";
1201
+		$result = "<dl>\n".$result."\n</dl>";
1202
+		return $this->hashBlock($result)."\n\n";
1203 1203
 	}
1204 1204
 
1205 1205
 
@@ -1251,27 +1251,27 @@  discard block
 block discarded – undo
1251 1251
 		$text = '';
1252 1252
 		foreach ($terms as $term) {
1253 1253
 			$term = $this->runSpanGamut(trim($term));
1254
-			$text .= "\n<dt>" . $term . "</dt>";
1254
+			$text .= "\n<dt>".$term."</dt>";
1255 1255
 		}
1256
-		return $text . "\n";
1256
+		return $text."\n";
1257 1257
 	}
1258 1258
 	protected function _processDefListItems_callback_dd($matches) {
1259 1259
 		$leading_line	= $matches[1];
1260 1260
 		$marker_space	= $matches[2];
1261
-		$def			= $matches[3];
1261
+		$def = $matches[3];
1262 1262
 
1263 1263
 		if ($leading_line || preg_match('/\n{2,}/', $def)) {
1264 1264
 			# Replace marker with the appropriate whitespace indentation
1265
-			$def = str_repeat(' ', strlen($marker_space)) . $def;
1266
-			$def = $this->runBlockGamut($this->outdent($def . "\n\n"));
1267
-			$def = "\n". $def ."\n";
1265
+			$def = str_repeat(' ', strlen($marker_space)).$def;
1266
+			$def = $this->runBlockGamut($this->outdent($def."\n\n"));
1267
+			$def = "\n".$def."\n";
1268 1268
 		}
1269 1269
 		else {
1270 1270
 			$def = rtrim($def);
1271 1271
 			$def = $this->runSpanGamut($this->outdent($def));
1272 1272
 		}
1273 1273
 
1274
-		return "\n<dd>" . $def . "</dd>\n";
1274
+		return "\n<dd>".$def."</dd>\n";
1275 1275
 	}
1276 1276
 
1277 1277
 
@@ -1315,8 +1315,8 @@  discard block
 block discarded – undo
1315 1315
 		return $text;
1316 1316
 	}
1317 1317
 	protected function _doFencedCodeBlocks_callback($matches) {
1318
-		$classname =& $matches[2];
1319
-		$attrs     =& $matches[3];
1318
+		$classname = & $matches[2];
1319
+		$attrs     = & $matches[3];
1320 1320
 		$codeblock = $matches[4];
1321 1321
 		$codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
1322 1322
 		$codeblock = preg_replace_callback('/^\n+/',
@@ -1331,7 +1331,7 @@  discard block
 block discarded – undo
1331 1331
 		}
1332 1332
 		$pre_attr_str  = $this->code_attr_on_pre ? $attr_str : '';
1333 1333
 		$code_attr_str = $this->code_attr_on_pre ? '' : $attr_str;
1334
-		$codeblock  = "<pre$pre_attr_str><code$code_attr_str>$codeblock</code></pre>";
1334
+		$codeblock = "<pre$pre_attr_str><code$code_attr_str>$codeblock</code></pre>";
1335 1335
 		
1336 1336
 		return "\n\n".$this->hashBlock($codeblock)."\n\n";
1337 1337
 	}
@@ -1428,7 +1428,7 @@  discard block
 block discarded – undo
1428 1428
 		return $text;
1429 1429
 	}
1430 1430
 	protected function _stripFootnotes_callback($matches) {
1431
-		$note_id = $this->fn_id_prefix . $matches[1];
1431
+		$note_id = $this->fn_id_prefix.$matches[1];
1432 1432
 		$this->footnotes[$note_id] = $this->outdent($matches[2]);
1433 1433
 		return ''; # String that will replace the block
1434 1434
 	}
@@ -1456,7 +1456,7 @@  discard block
 block discarded – undo
1456 1456
 		if (!empty($this->footnotes_ordered)) {
1457 1457
 			$text .= "\n\n";
1458 1458
 			$text .= "<div class=\"footnotes\">\n";
1459
-			$text .= "<hr". $this->empty_element_suffix ."\n";
1459
+			$text .= "<hr".$this->empty_element_suffix."\n";
1460 1460
 			$text .= "<ol>\n\n";
1461 1461
 
1462 1462
 			$attr = "";
@@ -1495,13 +1495,13 @@  discard block
 block discarded – undo
1495 1495
 				}
1496 1496
 				# Add backlink to last paragraph; create new paragraph if needed.
1497 1497
 				if (preg_match('{</p>$}', $footnote)) {
1498
-					$footnote = substr($footnote, 0, -4) . "&#160;$backlink</p>";
1498
+					$footnote = substr($footnote, 0, -4)."&#160;$backlink</p>";
1499 1499
 				} else {
1500 1500
 					$footnote .= "\n\n<p>$backlink</p>";
1501 1501
 				}
1502 1502
 				
1503 1503
 				$text .= "<li id=\"fn:$note_id\">\n";
1504
-				$text .= $footnote . "\n";
1504
+				$text .= $footnote."\n";
1505 1505
 				$text .= "</li>\n\n";
1506 1506
 			}
1507 1507
 			
@@ -1511,12 +1511,12 @@  discard block
 block discarded – undo
1511 1511
 		return $text;
1512 1512
 	}
1513 1513
 	protected function _appendFootnotes_callback($matches) {
1514
-		$node_id = $this->fn_id_prefix . $matches[1];
1514
+		$node_id = $this->fn_id_prefix.$matches[1];
1515 1515
 		
1516 1516
 		# Create footnote marker only if it has a corresponding footnote *and*
1517 1517
 		# the footnote hasn't been used by another marker.
1518 1518
 		if (isset($this->footnotes[$node_id])) {
1519
-			$num =& $this->footnotes_numbers[$node_id];
1519
+			$num = & $this->footnotes_numbers[$node_id];
1520 1520
 			if (!isset($num)) {
1521 1521
 				# Transfer footnote content to the ordered list and give it its
1522 1522
 				# number
Please login to merge, or discard this patch.
Braces   +88 added lines, -59 removed lines patch added patch discarded remove patch
@@ -106,8 +106,9 @@  discard block
 block discarded – undo
106 106
 		$this->footnote_counter = 1;
107 107
 		
108 108
 		foreach ($this->predef_abbr as $abbr_word => $abbr_desc) {
109
-			if ($this->abbr_word_re)
110
-				$this->abbr_word_re .= '|';
109
+			if ($this->abbr_word_re) {
110
+							$this->abbr_word_re .= '|';
111
+			}
111 112
 			$this->abbr_word_re .= preg_quote($abbr_word);
112 113
 			$this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
113 114
 		}
@@ -145,7 +146,9 @@  discard block
 block discarded – undo
145 146
 	# In addition, this method also supports supplying a default Id value,
146 147
 	# which will be used to populate the id attribute in case it was not
147 148
 	# overridden.
148
-		if (empty($attr) && !$defaultIdValue) return "";
149
+		if (empty($attr) && !$defaultIdValue) {
150
+		    return "";
151
+		}
149 152
 		
150 153
 		# Split on components
151 154
 		preg_match_all('/[#.a-z][-_:a-zA-Z0-9=]+/', $attr, $matches);
@@ -159,14 +162,18 @@  discard block
 block discarded – undo
159 162
 			if ($element{0} == '.') {
160 163
 				$classes[] = substr($element, 1);
161 164
 			} else if ($element{0} == '#') {
162
-				if ($id === false) $id = substr($element, 1);
165
+				if ($id === false) {
166
+				    $id = substr($element, 1);
167
+				}
163 168
 			} else if (strpos($element, '=') > 0) {
164 169
 				$parts = explode('=', $element, 2);
165 170
 				$attributes[] = $parts[0] . '="' . $parts[1] . '"';
166 171
 			}
167 172
 		}
168 173
 
169
-		if (!$id) $id = $defaultIdValue;
174
+		if (!$id) {
175
+		    $id = $defaultIdValue;
176
+		}
170 177
 
171 178
 		# compose attributes as string
172 179
 		$attr_str = "";
@@ -263,7 +270,9 @@  discard block
 block discarded – undo
263 270
 	#  _HashHTMLBlocks_InMarkdown to handle the Markdown syntax within the tag.
264 271
 	# These two functions are calling each other. It's recursive!
265 272
 	#
266
-		if ($this->no_markup)  return $text;
273
+		if ($this->no_markup) {
274
+		    return $text;
275
+		}
267 276
 
268 277
 		#
269 278
 		# Call the HTML-in-Markdown hasher.
@@ -300,7 +309,9 @@  discard block
 block discarded – undo
300 309
 	#
301 310
 	# Returns an array of that form: ( processed text , remaining text )
302 311
 	#
303
-		if ($text === '') return array('', '');
312
+		if ($text === '') {
313
+		    return array('', '');
314
+		}
304 315
 
305 316
 		# Regex to check for the presense of newlines around a block tag.
306 317
 		$newline_before_re = '/(?:^\n?|\n\n)*$/';
@@ -420,8 +431,7 @@  discard block
 block discarded – undo
420 431
 					# End marker found: pass text unchanged until marker.
421 432
 					$parsed .= $tag . $matches[0];
422 433
 					$text = substr($text, strlen($matches[0]));
423
-				}
424
-				else {
434
+				} else {
425 435
 					# No end marker: just skip it.
426 436
 					$parsed .= $tag;
427 437
 				}
@@ -447,8 +457,7 @@  discard block
 block discarded – undo
447 457
 					# End marker found: pass text unchanged until marker.
448 458
 					$parsed .= $tag . $matches[0];
449 459
 					$text = substr($text, strlen($matches[0]));
450
-				}
451
-				else {
460
+				} else {
452 461
 					# Unmatched marker: just skip it.
453 462
 					$parsed .= $tag;
454 463
 				}
@@ -495,8 +504,11 @@  discard block
 block discarded – undo
495 504
 				#
496 505
 				# Increase/decrease nested tag count.
497 506
 				#
498
-				if ($tag{1} == '/')						$depth--;
499
-				else if ($tag{strlen($tag)-2} != '/')	$depth++;
507
+				if ($tag{1} == '/') {
508
+				    $depth--;
509
+				} else if ($tag{strlen($tag)-2} != '/') {
510
+				    $depth++;
511
+				}
500 512
 
501 513
 				if ($depth < 0) {
502 514
 					#
@@ -508,8 +520,7 @@  discard block
 block discarded – undo
508 520
 				}
509 521
 				
510 522
 				$parsed .= $tag;
511
-			}
512
-			else {
523
+			} else {
513 524
 				$parsed .= $tag;
514 525
 			}
515 526
 		} while ($depth >= 0);
@@ -527,7 +538,9 @@  discard block
 block discarded – undo
527 538
 	#
528 539
 	# Returns an array of that form: ( processed text , remaining text )
529 540
 	#
530
-		if ($text === '') return array('', '');
541
+		if ($text === '') {
542
+		    return array('', '');
543
+		}
531 544
 		
532 545
 		# Regex to match `markdown` attribute inside of a tag.
533 546
 		$markdown_attr_re = '
@@ -578,8 +591,9 @@  discard block
 block discarded – undo
578 591
 		# Get the name of the starting tag.
579 592
 		# (This pattern makes $base_tag_name_re safe without quoting.)
580 593
 		#
581
-		if (preg_match('/^<([\w:$]*)\b/', $text, $matches))
582
-			$base_tag_name_re = $matches[1];
594
+		if (preg_match('/^<([\w:$]*)\b/', $text, $matches)) {
595
+					$base_tag_name_re = $matches[1];
596
+		}
583 597
 
584 598
 		#
585 599
 		# Loop through every tag until we find the corresponding closing tag.
@@ -616,15 +630,17 @@  discard block
 block discarded – undo
616 630
 			{
617 631
 				# Just add the tag to the block as if it was text.
618 632
 				$block_text .= $tag;
619
-			}
620
-			else {
633
+			} else {
621 634
 				#
622 635
 				# Increase/decrease nested tag count. Only do so if
623 636
 				# the tag's name match base tag's.
624 637
 				#
625 638
 				if (preg_match('{^</?'.$base_tag_name_re.'\b}', $tag)) {
626
-					if ($tag{1} == '/')						$depth--;
627
-					else if ($tag{strlen($tag)-2} != '/')	$depth++;
639
+					if ($tag{1} == '/') {
640
+					    $depth--;
641
+					} else if ($tag{strlen($tag)-2} != '/') {
642
+					    $depth++;
643
+					}
628 644
 				}
629 645
 				
630 646
 				#
@@ -671,13 +687,17 @@  discard block
 block discarded – undo
671 687
 					}
672 688
 					
673 689
 					# Append tag content to parsed text.
674
-					if (!$span_mode)	$parsed .= "\n\n$block_text\n\n";
675
-					else				$parsed .= "$block_text";
690
+					if (!$span_mode) {
691
+					    $parsed .= "\n\n$block_text\n\n";
692
+					} else {
693
+					    $parsed .= "$block_text";
694
+					}
676 695
 					
677 696
 					# Start over with a new block.
678 697
 					$block_text = "";
679
-				}
680
-				else $block_text .= $tag;
698
+				} else {
699
+				    $block_text .= $tag;
700
+				}
681 701
 			}
682 702
 			
683 703
 		} while ($depth > 0);
@@ -705,7 +725,9 @@  discard block
 block discarded – undo
705 725
 	#
706 726
 	# Turn Markdown link shortcuts into XHTML <a> tags.
707 727
 	#
708
-		if ($this->in_anchor) return $text;
728
+		if ($this->in_anchor) {
729
+		    return $text;
730
+		}
709 731
 		$this->in_anchor = true;
710 732
 		
711 733
 		#
@@ -796,14 +818,14 @@  discard block
 block discarded – undo
796 818
 				$title = $this->encodeAttribute($title);
797 819
 				$result .=  " title=\"$title\"";
798 820
 			}
799
-			if (isset($this->ref_attr[$link_id]))
800
-				$result .= $this->ref_attr[$link_id];
821
+			if (isset($this->ref_attr[$link_id])) {
822
+							$result .= $this->ref_attr[$link_id];
823
+			}
801 824
 		
802 825
 			$link_text = $this->runSpanGamut($link_text);
803 826
 			$result .= ">$link_text</a>";
804 827
 			$result = $this->hashPart($result);
805
-		}
806
-		else {
828
+		} else {
807 829
 			$result = $whole_match;
808 830
 		}
809 831
 		return $result;
@@ -818,8 +840,9 @@  discard block
 block discarded – undo
818 840
 		// if the URL was of the form <s p a c e s> it got caught by the HTML
819 841
 		// tag parser and hashed. Need to reverse the process before using the URL.
820 842
 		$unhashed = $this->unhash($url);
821
-		if ($unhashed != $url)
822
-			$url = preg_replace('/^<(.*)>$/', '\1', $unhashed);
843
+		if ($unhashed != $url) {
844
+					$url = preg_replace('/^<(.*)>$/', '\1', $unhashed);
845
+		}
823 846
 
824 847
 		$url = $this->encodeURLAttribute($url);
825 848
 
@@ -911,12 +934,12 @@  discard block
 block discarded – undo
911 934
 				$title = $this->encodeAttribute($title);
912 935
 				$result .=  " title=\"$title\"";
913 936
 			}
914
-			if (isset($this->ref_attr[$link_id]))
915
-				$result .= $this->ref_attr[$link_id];
937
+			if (isset($this->ref_attr[$link_id])) {
938
+							$result .= $this->ref_attr[$link_id];
939
+			}
916 940
 			$result .= $this->empty_element_suffix;
917 941
 			$result = $this->hashPart($result);
918
-		}
919
-		else {
942
+		} else {
920 943
 			# If there's no such link ID, leave intact:
921 944
 			$result = $whole_match;
922 945
 		}
@@ -985,8 +1008,9 @@  discard block
 block discarded – undo
985 1008
 		return $text;
986 1009
 	}
987 1010
 	protected function _doHeaders_callback_setext($matches) {
988
-		if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
989
-			return $matches[0];
1011
+		if ($matches[3] == '-' && preg_match('{^- }', $matches[1])) {
1012
+					return $matches[0];
1013
+		}
990 1014
 
991 1015
 		$level = $matches[3]{0} == '=' ? 1 : 2;
992 1016
 
@@ -1079,8 +1103,9 @@  discard block
 block discarded – undo
1079 1103
 	}
1080 1104
 	protected function _doTable_makeAlignAttr($alignname)
1081 1105
 	{
1082
-		if (empty($this->table_align_class_tmpl))
1083
-			return " align=\"$alignname\"";
1106
+		if (empty($this->table_align_class_tmpl)) {
1107
+					return " align=\"$alignname\"";
1108
+		}
1084 1109
 
1085 1110
 		$classname = str_replace('%%', $alignname, $this->table_align_class_tmpl);
1086 1111
 		return " class=\"$classname\"";
@@ -1098,14 +1123,15 @@  discard block
 block discarded – undo
1098 1123
 		# Reading alignement from header underline.
1099 1124
 		$separators	= preg_split('/ *[|] */', $underline);
1100 1125
 		foreach ($separators as $n => $s) {
1101
-			if (preg_match('/^ *-+: *$/', $s))
1102
-				$attr[$n] = $this->_doTable_makeAlignAttr('right');
1103
-			else if (preg_match('/^ *:-+: *$/', $s))
1104
-				$attr[$n] = $this->_doTable_makeAlignAttr('center');
1105
-			else if (preg_match('/^ *:-+ *$/', $s))
1106
-				$attr[$n] = $this->_doTable_makeAlignAttr('left');
1107
-			else
1108
-				$attr[$n] = '';
1126
+			if (preg_match('/^ *-+: *$/', $s)) {
1127
+							$attr[$n] = $this->_doTable_makeAlignAttr('right');
1128
+			} else if (preg_match('/^ *:-+: *$/', $s)) {
1129
+							$attr[$n] = $this->_doTable_makeAlignAttr('center');
1130
+			} else if (preg_match('/^ *:-+ *$/', $s)) {
1131
+							$attr[$n] = $this->_doTable_makeAlignAttr('left');
1132
+			} else {
1133
+							$attr[$n] = '';
1134
+			}
1109 1135
 		}
1110 1136
 		
1111 1137
 		# Parsing span elements, including code spans, character escapes, 
@@ -1119,8 +1145,9 @@  discard block
 block discarded – undo
1119 1145
 		$text = "<table>\n";
1120 1146
 		$text .= "<thead>\n";
1121 1147
 		$text .= "<tr>\n";
1122
-		foreach ($headers as $n => $header)
1123
-			$text .= "  <th$attr[$n]>".$this->runSpanGamut(trim($header))."</th>\n";
1148
+		foreach ($headers as $n => $header) {
1149
+					$text .= "  <th$attr[$n]>".$this->runSpanGamut(trim($header))."</th>\n";
1150
+		}
1124 1151
 		$text .= "</tr>\n";
1125 1152
 		$text .= "</thead>\n";
1126 1153
 		
@@ -1138,8 +1165,9 @@  discard block
 block discarded – undo
1138 1165
 			$row_cells = array_pad($row_cells, $col_count, '');
1139 1166
 			
1140 1167
 			$text .= "<tr>\n";
1141
-			foreach ($row_cells as $n => $cell)
1142
-				$text .= "  <td$attr[$n]>".$this->runSpanGamut(trim($cell))."</td>\n";
1168
+			foreach ($row_cells as $n => $cell) {
1169
+							$text .= "  <td$attr[$n]>".$this->runSpanGamut(trim($cell))."</td>\n";
1170
+			}
1143 1171
 			$text .= "</tr>\n";
1144 1172
 		}
1145 1173
 		$text .= "</tbody>\n";
@@ -1265,8 +1293,7 @@  discard block
 block discarded – undo
1265 1293
 			$def = str_repeat(' ', strlen($marker_space)) . $def;
1266 1294
 			$def = $this->runBlockGamut($this->outdent($def . "\n\n"));
1267 1295
 			$def = "\n". $def ."\n";
1268
-		}
1269
-		else {
1296
+		} else {
1270 1297
 			$def = rtrim($def);
1271 1298
 			$def = $this->runSpanGamut($this->outdent($def));
1272 1299
 		}
@@ -1323,8 +1350,9 @@  discard block
 block discarded – undo
1323 1350
 			array($this, '_doFencedCodeBlocks_newlines'), $codeblock);
1324 1351
 
1325 1352
 		if ($classname != "") {
1326
-			if ($classname{0} == '.')
1327
-				$classname = substr($classname, 1);
1353
+			if ($classname{0} == '.') {
1354
+							$classname = substr($classname, 1);
1355
+			}
1328 1356
 			$attr_str = ' class="'.$this->code_class_prefix.$classname.'"';
1329 1357
 		} else {
1330 1358
 			$attr_str = $this->doExtraAttributes($this->code_attr_on_pre ? "pre" : "code", $attrs);
@@ -1573,8 +1601,9 @@  discard block
 block discarded – undo
1573 1601
 	protected function _stripAbbreviations_callback($matches) {
1574 1602
 		$abbr_word = $matches[1];
1575 1603
 		$abbr_desc = $matches[2];
1576
-		if ($this->abbr_word_re)
1577
-			$this->abbr_word_re .= '|';
1604
+		if ($this->abbr_word_re) {
1605
+					$this->abbr_word_re .= '|';
1606
+		}
1578 1607
 		$this->abbr_word_re .= preg_quote($abbr_word);
1579 1608
 		$this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
1580 1609
 		return ''; # String that will replace the block
Please login to merge, or discard this patch.
vendor/mos/ctextfilter/src/TextFilter/CTextFilter.php 3 patches
Doc Comments   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -194,11 +194,11 @@
 block discarded – undo
194 194
      * Call each filter and return array with details of the formatted content.
195 195
      *
196 196
      * @param string $text   the text to filter.
197
-     * @param array  $filter array of filters to use.
197
+     * @param string[]  $filter array of filters to use.
198 198
      *
199 199
      * @throws mos/TextFilter/Exception  when filterd does not exists.
200 200
      *
201
-     * @return array with the formatted text and additional details.
201
+     * @return \stdClass with the formatted text and additional details.
202 202
      */
203 203
     public function parse($text, $filter)
204 204
     {
Please login to merge, or discard this patch.
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -21,13 +21,13 @@
 block discarded – undo
21 21
         "nl2br",
22 22
         "purify",
23 23
         "titlefromh1",
24
-     ];
24
+        ];
25 25
 
26 26
 
27 27
 
28
-     /**
29
-      * Current document parsed.
30
-      */
28
+        /**
29
+         * Current document parsed.
30
+         */
31 31
     private $current;
32 32
 
33 33
 
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -239,7 +239,7 @@  discard block
 block discarded – undo
239 239
 
240 240
                 $frontmatter = substr($text, $start + $tokenLength, $length);
241 241
                 $textStart = substr($text, 0, $start);
242
-                $text = $textStart . substr($text, $stop + $tokenLength);
242
+                $text = $textStart.substr($text, $stop + $tokenLength);
243 243
             }
244 244
         }
245 245
 
@@ -288,7 +288,7 @@  discard block
 block discarded – undo
288 288
         list($text, $frontmatter) = $this->extractFrontMatter($text, $needle, $needle);
289 289
 
290 290
         if (function_exists("yaml_parse") && !empty($frontmatter)) {
291
-            $frontmatter = yaml_parse($needle . $frontmatter);
291
+            $frontmatter = yaml_parse($needle.$frontmatter);
292 292
 
293 293
             if ($frontmatter === false) {
294 294
                 throw new Exception("Failed parsing YAML frontmatter.");
@@ -371,7 +371,7 @@  discard block
 block discarded – undo
371 371
     {
372 372
         return preg_replace_callback(
373 373
             '#\b(?<![href|src]=[\'"])https?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#',
374
-            function ($matches) {
374
+            function($matches) {
375 375
                 return "<a href='{$matches[0]}'>{$matches[0]}</a>";
376 376
             },
377 377
             $text
@@ -389,7 +389,7 @@  discard block
 block discarded – undo
389 389
      */
390 390
     public function purify($text)
391 391
     {
392
-        $config   = \HTMLPurifier_Config::createDefault();
392
+        $config = \HTMLPurifier_Config::createDefault();
393 393
         $config->set("Cache.DefinitionImpl", null);
394 394
         //$config->set('Cache.SerializerPath', '/home/user/absolute/path');
395 395
 
@@ -443,7 +443,7 @@  discard block
 block discarded – undo
443 443
 
444 444
         return preg_replace_callback(
445 445
             $patterns,
446
-            function ($matches) {
446
+            function($matches) {
447 447
                 switch ($matches[1]) {
448 448
 
449 449
                     case 'FIGURE':
@@ -478,7 +478,7 @@  discard block
 block discarded – undo
478 478
                 $res[$match] = true;
479 479
             } else {
480 480
                 $key = substr($match, 0, $pos);
481
-                $val = trim(substr($match, $pos+1), '"');
481
+                $val = trim(substr($match, $pos + 1), '"');
482 482
                 $res[$key] = $val;
483 483
             }
484 484
         }
@@ -500,7 +500,7 @@  discard block
 block discarded – undo
500 500
     public static function shortCodeFigure($options)
501 501
     {
502 502
         // Merge incoming options with default and expose as variables
503
-        $options= array_merge(
503
+        $options = array_merge(
504 504
             [
505 505
                 'id' => null,
506 506
                 'class' => null,
Please login to merge, or discard this patch.
view/view.tpl.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@
 block discarded – undo
1 1
 <div>
2 2
     <div class="btn-group">
3
-        <a href='<?=$this->url->create('event/delete/' . $event->id)?>' class="btn btn-default">Delete event</a>
3
+        <a href='<?=$this->url->create('event/delete/'.$event->id)?>' class="btn btn-default">Delete event</a>
4 4
         <a href='<?=$this->url->create('calendar')?>' class="btn btn-info">Back</a>
5 5
     </div>
6 6
     <div class="jumbotron">
Please login to merge, or discard this patch.
view/calendar.tpl.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -6,7 +6,7 @@  discard block
 block discarded – undo
6 6
             <div class="col-md-4">
7 7
 
8 8
                         <div class="clearfix"></div>
9
-                <?php if(isset($events)) : ?>
9
+                <?php if (isset($events)) : ?>
10 10
                         <ul class="list-group">
11 11
                                 <?php foreach ($events as $event) : ?>
12 12
                                     <li class="list-group-item">
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
                                                 <h4 class="card-title"><?=$event->title?></h4>
16 16
                                                 <p class="card-text"><?=$event->content?></p>
17 17
                                                 <p class="card-text"><?=$event->id?></p>
18
-                                            <a href='<?=$this->di->get('url')->create('event/id/' . $event->id) ?>' class="btn btn-primary btn-xs">Show event</a>
18
+                                            <a href='<?=$this->di->get('url')->create('event/id/'.$event->id) ?>' class="btn btn-primary btn-xs">Show event</a>
19 19
                                             </div>
20 20
                                         </div>
21 21
                                 <?php endforeach; ?>
Please login to merge, or discard this patch.
vendor/composer/autoload_real.php 1 patch
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@  discard block
 block discarded – undo
9 9
     public static function loadClassLoader($class)
10 10
     {
11 11
         if ('Composer\Autoload\ClassLoader' === $class) {
12
-            require __DIR__ . '/ClassLoader.php';
12
+            require __DIR__.'/ClassLoader.php';
13 13
         }
14 14
     }
15 15
 
@@ -25,21 +25,21 @@  discard block
 block discarded – undo
25 25
 
26 26
         $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
27 27
         if ($useStaticLoader) {
28
-            require_once __DIR__ . '/autoload_static.php';
28
+            require_once __DIR__.'/autoload_static.php';
29 29
 
30 30
             call_user_func(\Composer\Autoload\ComposerStaticInit7b593c329d00694ef3fa74c9b77a3c76::getInitializer($loader));
31 31
         } else {
32
-            $map = require __DIR__ . '/autoload_namespaces.php';
32
+            $map = require __DIR__.'/autoload_namespaces.php';
33 33
             foreach ($map as $namespace => $path) {
34 34
                 $loader->set($namespace, $path);
35 35
             }
36 36
 
37
-            $map = require __DIR__ . '/autoload_psr4.php';
37
+            $map = require __DIR__.'/autoload_psr4.php';
38 38
             foreach ($map as $namespace => $path) {
39 39
                 $loader->setPsr4($namespace, $path);
40 40
             }
41 41
 
42
-            $classMap = require __DIR__ . '/autoload_classmap.php';
42
+            $classMap = require __DIR__.'/autoload_classmap.php';
43 43
             if ($classMap) {
44 44
                 $loader->addClassMap($classMap);
45 45
             }
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
         if ($useStaticLoader) {
51 51
             $includeFiles = Composer\Autoload\ComposerStaticInit7b593c329d00694ef3fa74c9b77a3c76::$files;
52 52
         } else {
53
-            $includeFiles = require __DIR__ . '/autoload_files.php';
53
+            $includeFiles = require __DIR__.'/autoload_files.php';
54 54
         }
55 55
         foreach ($includeFiles as $fileIdentifier => $file) {
56 56
             composerRequire7b593c329d00694ef3fa74c9b77a3c76($fileIdentifier, $file);
Please login to merge, or discard this patch.
vendor/composer/autoload_psr4.php 1 patch
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -6,7 +6,7 @@
 block discarded – undo
6 6
 $baseDir = dirname($vendorDir);
7 7
 
8 8
 return array(
9
-    'Mos\\TextFilter\\' => array($vendorDir . '/mos/ctextfilter/src/TextFilter'),
10
-    'Mos\\' => array($vendorDir . '/mos/cdatabase/src', $vendorDir . '/mos/cform/src'),
11
-    'Anax\\' => array($vendorDir . '/anax/mvc/src'),
9
+    'Mos\\TextFilter\\' => array($vendorDir.'/mos/ctextfilter/src/TextFilter'),
10
+    'Mos\\' => array($vendorDir.'/mos/cdatabase/src', $vendorDir.'/mos/cform/src'),
11
+    'Anax\\' => array($vendorDir.'/anax/mvc/src'),
12 12
 );
Please login to merge, or discard this patch.