Code Duplication    Length = 15-39 lines in 5 locations

_inc/lib/markdown/extra.php 5 locations

@@ 206-239 (lines=34) @@
203
		);
204
205
206
	function stripLinkDefinitions($text) {
207
	#
208
	# Strips link definitions from text, stores the URLs and titles in
209
	# hash references.
210
	#
211
		$less_than_tab = $this->tab_width - 1;
212
213
		# Link defs are in the form: ^[id]: url "optional title"
214
		$text = preg_replace_callback('{
215
							^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?:	# id = $1
216
							  [ ]*
217
							  \n?				# maybe *one* newline
218
							  [ ]*
219
							(?:
220
							  <(.+?)>			# url = $2
221
							|
222
							  (\S+?)			# url = $3
223
							)
224
							  [ ]*
225
							  \n?				# maybe one newline
226
							  [ ]*
227
							(?:
228
								(?<=\s)			# lookbehind for whitespace
229
								["(]
230
								(.*?)			# title = $4
231
								[")]
232
								[ ]*
233
							)?	# title is optional
234
							(?:\n+|\Z)
235
			}xm',
236
			array(&$this, '_stripLinkDefinitions_callback'),
237
			$text);
238
		return $text;
239
	}
240
	function _stripLinkDefinitions_callback($matches) {
241
		$link_id = strtolower($matches[1]);
242
		$url = $matches[2] == '' ? $matches[3] : $matches[2];
@@ 1699-1733 (lines=35) @@
1696
	}
1697
1698
1699
	function stripLinkDefinitions($text) {
1700
	#
1701
	# Strips link definitions from text, stores the URLs and titles in
1702
	# hash references.
1703
	#
1704
		$less_than_tab = $this->tab_width - 1;
1705
1706
		# Link defs are in the form: ^[id]: url "optional title"
1707
		$text = preg_replace_callback('{
1708
							^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?:	# id = $1
1709
							  [ ]*
1710
							  \n?				# maybe *one* newline
1711
							  [ ]*
1712
							(?:
1713
							  <(.+?)>			# url = $2
1714
							|
1715
							  (\S+?)			# url = $3
1716
							)
1717
							  [ ]*
1718
							  \n?				# maybe one newline
1719
							  [ ]*
1720
							(?:
1721
								(?<=\s)			# lookbehind for whitespace
1722
								["(]
1723
								(.*?)			# title = $4
1724
								[")]
1725
								[ ]*
1726
							)?	# title is optional
1727
					(?:[ ]* '.$this->id_class_attr_catch_re.' )?  # $5 = extra id & class attr
1728
							(?:\n+|\Z)
1729
			}xm',
1730
			array(&$this, '_stripLinkDefinitions_callback'),
1731
			$text);
1732
		return $text;
1733
	}
1734
	function _stripLinkDefinitions_callback($matches) {
1735
		$link_id = strtolower($matches[1]);
1736
		$url = $matches[2] == '' ? $matches[3] : $matches[2];
@@ 2768-2806 (lines=39) @@
2765
	}
2766
2767
2768
	function doFencedCodeBlocks($text) {
2769
	#
2770
	# Adding the fenced code block syntax to regular Markdown:
2771
	#
2772
	# ~~~
2773
	# Code block
2774
	# ~~~
2775
	#
2776
		$less_than_tab = $this->tab_width;
2777
2778
		$text = preg_replace_callback('{
2779
				(?:\n|\A)
2780
				# 1: Opening marker
2781
				(
2782
					(?:~{3,}|`{3,}) # 3 or more tildes/backticks.
2783
				)
2784
				[ ]*
2785
				(?:
2786
					\.?([-_:a-zA-Z0-9]+) # 2: standalone class name
2787
				|
2788
					'.$this->id_class_attr_catch_re.' # 3: Extra attributes
2789
				)?
2790
				[ ]* \n # Whitespace and newline following marker.
2791
2792
				# 4: Content
2793
				(
2794
					(?>
2795
						(?!\1 [ ]* \n)	# Not a closing marker.
2796
						.*\n+
2797
					)+
2798
				)
2799
2800
				# Closing marker.
2801
				\1 [ ]* (?= \n )
2802
			}xm',
2803
			array(&$this, '_doFencedCodeBlocks_callback'), $text);
2804
2805
		return $text;
2806
	}
2807
	function _doFencedCodeBlocks_callback($matches) {
2808
		$classname =& $matches[2];
2809
		$attrs     =& $matches[3];
@@ 2893-2919 (lines=27) @@
2890
2891
	### Footnotes
2892
2893
	function stripFootnotes($text) {
2894
	#
2895
	# Strips link definitions from text, stores the URLs and titles in
2896
	# hash references.
2897
	#
2898
		$less_than_tab = $this->tab_width - 1;
2899
2900
		# Link defs are in the form: [^id]: url "optional title"
2901
		$text = preg_replace_callback('{
2902
			^[ ]{0,'.$less_than_tab.'}\[\^(.+?)\][ ]?:	# note_id = $1
2903
			  [ ]*
2904
			  \n?					# maybe *one* newline
2905
			(						# text = $2 (no blank lines allowed)
2906
				(?:
2907
					.+				# actual text
2908
				|
2909
					\n				# newlines but
2910
					(?!\[\^.+?\]:\s)# negative lookahead for footnote marker.
2911
					(?!\n+[ ]{0,3}\S)# ensure line is not blank and followed
2912
									# by non-indented content
2913
				)*
2914
			)
2915
			}xm',
2916
			array(&$this, '_stripFootnotes_callback'),
2917
			$text);
2918
		return $text;
2919
	}
2920
	function _stripFootnotes_callback($matches) {
2921
		$note_id = $this->fn_id_prefix . $matches[1];
2922
		$this->footnotes[$note_id] = $this->outdent($matches[2]);
@@ 3048-3062 (lines=15) @@
3045
3046
	### Abbreviations ###
3047
3048
	function stripAbbreviations($text) {
3049
	#
3050
	# Strips abbreviations from text, stores titles in hash references.
3051
	#
3052
		$less_than_tab = $this->tab_width - 1;
3053
3054
		# Link defs are in the form: [id]*: url "optional title"
3055
		$text = preg_replace_callback('{
3056
			^[ ]{0,'.$less_than_tab.'}\*\[(.+?)\][ ]?:	# abbr_id = $1
3057
			(.*)					# text = $2 (no blank lines allowed)
3058
			}xm',
3059
			array(&$this, '_stripAbbreviations_callback'),
3060
			$text);
3061
		return $text;
3062
	}
3063
	function _stripAbbreviations_callback($matches) {
3064
		$abbr_word = $matches[1];
3065
		$abbr_desc = $matches[2];