Completed
Push — update/editor-blocks-icon-colo... ( 093ab2...3cfb5e )
by
unknown
08:47
created

latex.php ➔ latex_render()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 4
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Module Name: Beautiful Math
4
 * Module Description: Use the LaTeX markup language to write mathematical equations and formulas
5
 * Sort Order: 12
6
 * First Introduced: 1.1
7
 * Requires Connection: No
8
 * Auto Activate: No
9
 * Module Tags: Writing
10
 * Feature: Writing
11
 * Additional Search Queries: latex, math, equation, equations, formula, code
12
 */
13
14
/**
15
 * LaTeX support.
16
 *
17
 * Backward compatibility requires support for both "[latex][/latex]", and
18
 * "$latex $" shortcodes.
19
 *
20
 * $latex e^{\i \pi} + 1 = 0$  ->  [latex]e^{\i \pi} + 1 = 0[/latex]
21
 * $latex [a, b]$              ->  [latex][a, b][/latex]
22
 */
23
24 View Code Duplication
function latex_markup( $content ) {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
25
	$textarr = wp_html_split( $content );
26
	
27
	$regex = '%
28
		\$latex(?:=\s*|\s+)
29
		((?:
30
			[^$]+ # Not a dollar
31
		|
32
			(?<=(?<!\\\\)\\\\)\$ # Dollar preceded by exactly one slash
33
		)+)
34
		(?<!\\\\)\$ # Dollar preceded by zero slashes
35
	%ix';
36
	
37
	foreach ( $textarr as &$element ) {
38
		if ( '' == $element || '<' === $element[0] ) {
39
			continue;
40
		}
41
42
		if ( false === stripos( $element, '$latex' ) ) {
43
			continue;
44
		}
45
46
		$element = preg_replace_callback( $regex, 'latex_src', $element );
47
	}
48
49
	return implode( '', $textarr );
50
}
51
52
function latex_src( $matches ) {
53
	$latex = $matches[1];
54
55
	$bg = latex_get_default_color( 'bg' );
56
	$fg = latex_get_default_color( 'text', '000' );
57
	$s = 0;
58
59
60
	$latex = latex_entity_decode( $latex );
61 View Code Duplication
	if ( preg_match( '/.+(&fg=[0-9a-f]{6}).*/i', $latex, $fg_matches ) ) {
62
		$fg = substr( $fg_matches[1], 4 );
63
		$latex = str_replace( $fg_matches[1], '', $latex );
64
	}
65 View Code Duplication
	if ( preg_match( '/.+(&bg=[0-9a-f]{6}).*/i', $latex, $bg_matches ) ) {
66
		$bg = substr( $bg_matches[1], 4 );
67
		$latex = str_replace( $bg_matches[1], '', $latex );
68
	}
69 View Code Duplication
	if ( preg_match( '/.+(&s=[0-9-]{1,2}).*/i', $latex, $s_matches ) ) {
70
		$s = (int) substr( $s_matches[1], 3 );
71
		$latex = str_replace( $s_matches[1], '', $latex );
72
	}
73
74
	return latex_render( $latex, $fg, $bg, $s );
75
}
76
77
function latex_get_default_color( $color, $default_color = 'ffffff' ) {
78
	global $themecolors;
79
	return isset($themecolors[$color]) ? $themecolors[$color] : $default_color;
80
}
81
82
function latex_entity_decode( $latex ) {
83
	return str_replace( array( '&lt;', '&gt;', '&quot;', '&#039;', '&#038;', '&amp;', "\n", "\r" ), array( '<', '>', '"', "'", '&', '&', ' ', ' ' ), $latex );
84
}
85
86
function latex_render( $latex, $fg, $bg, $s = 0 ) {
87
	$url = "//s0.wp.com/latex.php?latex=" . urlencode( $latex ) . "&bg=" . $bg . "&fg=" . $fg . "&s=" . $s;
88
	$url = esc_url( $url );
89
	$alt = str_replace( '\\', '&#92;', esc_attr( $latex ) );
90
91
	return '<img src="' . $url . '" alt="' . $alt . '" title="' . $alt . '" class="latex" />';
92
}
93
94
/**
95
 * The shortcode way. The attributes are the same as the old ones - 'fg' and 'bg', instead of foreground
96
 * and background, and 's' is for the font size.
97
 *
98
 * Example: [latex s=4 bg=00f fg=ff0]\LaTeX[/latex]
99
 */
100
function latex_shortcode( $atts, $content = '' ) {
101
	extract( shortcode_atts( array(
0 ignored issues
show
Bug introduced by
shortcode_atts(array('s'...000')), $atts, 'latex') cannot be passed to extract() as the parameter $var_array expects a reference.
Loading history...
102
		's' => 0,
103
		'bg' => latex_get_default_color( 'bg' ),
104
		'fg' => latex_get_default_color( 'text', '000' )
105
	), $atts, 'latex' ) );
106
107
	return latex_render( latex_entity_decode( $content ), $fg, $bg, $s );
108
}
109
110
/**
111
 * LaTeX needs to be untexturized
112
 */
113
function latex_no_texturize( $shortcodes ) {
114
	$shortcodes[] = 'latex';
115
	return $shortcodes;
116
}
117
118
add_filter( 'no_texturize_shortcodes', 'latex_no_texturize' );
119
120
add_filter( 'the_content', 'latex_markup', 9 ); // before wptexturize
121
add_filter( 'comment_text', 'latex_markup', 9 ); // before wptexturize
122
add_shortcode( 'latex', 'latex_shortcode' );
123