PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 7.1
Jetpack – WP Security, Backup, Speed, & Growth v7.1
16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 All 501 releases
jetpack / modules / latex.php

latex.php in Jetpack – WP Security, Backup, Speed, & Growth 7.1, at modules/latex.php

123 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Module Name: Beautiful Math
4 * Module Description: Use LaTeX markup for complex equations and other geekery.
5 * Sort Order: 12
6 * First Introduced: 1.1
7 * Requires Connection: No
8 * Auto Activate: Yes
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 function latex_markup( $content ) {
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 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 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 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(
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