PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0.1
Jetpack – WP Security, Backup, Speed, & Growth v16.0.1
16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / latex.php
jetpack / modules Last commit date
canonical-urls 4 months ago carousel 1 day ago comment-likes 7 months ago comments 1 month ago custom-post-types 3 weeks ago external-media 7 months ago google-fonts 3 weeks ago gravatar 6 years ago infinite-scroll 3 weeks ago likes 3 weeks ago markdown 1 month ago memberships 1 week ago photon-cdn 1 day ago plugin-search 2 months ago post-by-email 7 months ago related-posts 2 weeks ago scan 4 months ago seo-tools 3 weeks ago sharedaddy 1 month ago shortcodes 2 weeks ago shortlinks 2 weeks ago simple-payments 7 months ago site-icon 7 months ago sitemaps 1 month ago stats 7 months ago subscriptions 1 day ago theme-tools 3 weeks ago tiled-gallery 1 month ago verification-tools 1 month ago videopress 1 week ago widget-visibility 1 month ago widgets 3 weeks ago woocommerce-analytics 2 months ago wordads 3 weeks ago wpcom-tos 7 months ago account-protection.php 3 months ago blaze.php 7 months ago blocks.php 7 months ago canonical-urls.php 4 months ago carousel.php 7 months ago comment-likes.php 7 months ago comments.php 3 months ago contact-form.php 7 months ago copy-post.php 1 month ago custom-content-types.php 3 months ago google-fonts.php 2 months ago gravatar-hovercards.php 1 month ago infinite-scroll.php 7 months ago json-api.php 7 months ago latex.php 1 month ago likes.php 2 months ago markdown.php 7 months ago module-extras.php 7 months ago module-headings.php 1 day ago module-info.php 5 months ago monitor.php 1 month ago notes.php 3 weeks ago photon-cdn.php 7 months ago photon.php 7 months ago plugin-search.php 3 weeks ago podcast.php 1 day ago post-by-email.php 3 months ago post-list.php 7 months ago protect.php 3 months ago publicize.php 7 months ago related-posts.php 1 month ago search.php 7 months ago seo-tools.php 3 weeks ago sharedaddy.php 4 months ago shortcodes.php 7 months ago shortlinks.php 1 month ago simple-payments.php 7 months ago sitemaps.php 7 months ago sso.php 3 weeks ago stats.php 1 day ago subscriptions.php 1 day ago theme-tools.php 7 months ago tiled-gallery.php 7 months ago vaultpress.php 7 months ago verification-tools.php 3 months ago videopress.php 7 months ago waf.php 7 months ago widget-visibility.php 7 months ago widgets.php 7 months ago woocommerce-analytics.php 7 months ago wordads.php 7 months ago wpcom-reader.php 4 months ago wpgroho.js 1 year ago
latex.php
182 lines
1 <?php
2 /**
3 * Module Name: Beautiful Math
4 * Module Description: Add beautifully formatted math equations to your posts and pages using LaTeX.
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 * @package automattic/jetpack
14 */
15
16 if ( ! defined( 'ABSPATH' ) ) {
17 exit( 0 );
18 }
19
20 /**
21 * LaTeX support.
22 *
23 * Backward compatibility requires support for both "[latex][/latex]", and
24 * "$latex $" shortcodes.
25 *
26 * $latex e^{\i \pi} + 1 = 0$ -> [latex]e^{\i \pi} + 1 = 0[/latex]
27 * $latex [a, b]$ -> [latex][a, b][/latex]
28 */
29
30 /**
31 * Markup LaTeX content.
32 *
33 * @param string $content Post or comment contents to markup.
34 */
35 function latex_markup( $content ) {
36 $textarr = wp_html_split( $content );
37
38 $regex = '%
39 \$latex(?:=\s*|\s+)
40 ((?:
41 [^$]+ # Not a dollar
42 |
43 (?<=(?<!\\\\)\\\\)\$ # Dollar preceded by exactly one slash
44 )+)
45 (?<!\\\\)\$ # Dollar preceded by zero slashes
46 %ix';
47
48 foreach ( $textarr as &$element ) {
49 if ( '' === $element || '<' === $element[0] ) {
50 continue;
51 }
52
53 if ( false === stripos( $element, '$latex' ) ) {
54 continue;
55 }
56
57 $element = preg_replace_callback( $regex, 'latex_src', $element );
58 }
59
60 return implode( '', $textarr );
61 }
62
63 /**
64 * Process LaTeX string to rendered image.
65 *
66 * @param array $matches Matched regex results.
67 */
68 function latex_src( $matches ) {
69 $latex = $matches[1];
70
71 $bg = latex_get_default_color( 'bg' );
72 $fg = latex_get_default_color( 'text', '000' );
73 $s = 0;
74
75 $latex = latex_entity_decode( $latex );
76 if ( preg_match( '/.+(&fg=[0-9a-f]{6}).*/i', $latex, $fg_matches ) ) {
77 $fg = substr( $fg_matches[1], 4 );
78 $latex = str_replace( $fg_matches[1], '', $latex );
79 }
80 if ( preg_match( '/.+(&bg=[0-9a-f]{6}).*/i', $latex, $bg_matches ) ) {
81 $bg = substr( $bg_matches[1], 4 );
82 $latex = str_replace( $bg_matches[1], '', $latex );
83 }
84 if ( preg_match( '/.+(&s=[0-9-]{1,2}).*/i', $latex, $s_matches ) ) {
85 $s = (int) substr( $s_matches[1], 3 );
86 $latex = str_replace( $s_matches[1], '', $latex );
87 }
88
89 return latex_render( $latex, $fg, $bg, $s );
90 }
91
92 /**
93 * Get the default color for an attribute.
94 *
95 * @param string $color Attribute to color (e.g. bg).
96 * @param string $default_color Default fallback color to use.
97 */
98 function latex_get_default_color( $color, $default_color = 'ffffff' ) {
99 global $themecolors;
100 return $themecolors[ $color ] ?? $default_color;
101 }
102
103 /**
104 * Decode special characters in a LaTeX string.
105 *
106 * @param string $latex Character encoded content.
107 */
108 function latex_entity_decode( $latex ) {
109 return str_replace( array( '&lt;', '&gt;', '&quot;', '&#039;', '&#038;', '&amp;', "\n", "\r" ), array( '<', '>', '"', "'", '&', '&', ' ', ' ' ), $latex );
110 }
111
112 /**
113 * Returns the URL for the server-side rendered image of LaTeX.
114 *
115 * @param string $latex LaTeX string.
116 * @param string $fg Foreground color.
117 * @param string $bg Background color.
118 * @param int $s Matches.
119 *
120 * @return string Image URL for the rendered LaTeX.
121 */
122 function latex_render( $latex, $fg, $bg, $s = 0 ) {
123 $url = add_query_arg(
124 urlencode_deep(
125 array(
126 'latex' => $latex,
127 'bg' => $bg,
128 'fg' => $fg,
129 's' => $s,
130 'c' => '20201002', // cache buster. Added 2020-10-02 after server migration caused faulty rendering.
131 )
132 ),
133 ( is_ssl() ? 'https://' : 'http://' ) . 's0.wp.com/latex.php'
134 );
135
136 $alt = str_replace( '\\', '&#92;', esc_attr( $latex ) );
137
138 return sprintf(
139 '<img src="%1$s" alt="%2$s" class="latex" />',
140 esc_url( $url ),
141 $alt
142 );
143 }
144
145 /**
146 * The shortcode way. The attributes are the same as the old ones - 'fg' and 'bg', instead of foreground
147 * and background, and 's' is for the font size.
148 *
149 * Example: [latex s=4 bg=00f fg=ff0]\LaTeX[/latex]
150 *
151 * @param array $atts Shortcode attributes.
152 * @param string $content Content to format.
153 */
154 function latex_shortcode( $atts, $content = '' ) {
155 $attr = shortcode_atts(
156 array(
157 's' => 0,
158 'bg' => latex_get_default_color( 'bg' ),
159 'fg' => latex_get_default_color( 'text', '000' ),
160 ),
161 $atts,
162 'latex'
163 );
164
165 return latex_render( latex_entity_decode( $content ), $attr['fg'], $attr['bg'], $attr['s'] );
166 }
167
168 /**
169 * LaTeX needs to be untexturized.
170 *
171 * @param array $shortcodes Array of shortcodes not to texturize.
172 */
173 function latex_no_texturize( $shortcodes ) {
174 $shortcodes[] = 'latex';
175 return $shortcodes;
176 }
177 add_filter( 'no_texturize_shortcodes', 'latex_no_texturize' );
178
179 add_filter( 'the_content', 'latex_markup', 9 ); // Before wptexturize.
180 add_filter( 'comment_text', 'latex_markup', 9 ); // Before wptexturize.
181 add_shortcode( 'latex', 'latex_shortcode' );
182