PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.5.1
Jetpack – WP Security, Backup, Speed, & Growth v14.5.1
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 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 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
carousel 1 year ago cloudflare-analytics 2 years ago comment-likes 5 years ago comments 1 year ago custom-post-types 1 year ago external-media 1 year ago geo-location 1 year ago google-fonts 1 year ago gravatar 6 years ago infinite-scroll 1 year ago likes 1 year ago markdown 1 year ago memberships 1 year ago photon-cdn 1 year ago plugin-search 1 year ago post-by-email 1 year ago related-posts 1 year ago scan 1 year ago seo-tools 1 year ago sharedaddy 1 year ago shortcodes 1 year ago simple-payments 1 year ago site-icon 2 years ago sitemaps 1 year ago stats 2 years ago subscriptions 1 year ago theme-tools 1 year ago tiled-gallery 1 year ago verification-tools 4 years ago videopress 1 year ago widget-visibility 1 year ago widgets 1 year ago woocommerce-analytics 1 year ago wordads 1 year ago wpcom-tos 5 years ago account-protection.php 1 year ago blaze.php 2 years ago blocks.php 1 year ago carousel.php 2 years ago comment-likes.php 2 years ago comments.php 2 years ago contact-form.php 1 year ago copy-post.php 1 year ago custom-content-types.php 1 year ago geo-location.php 1 year ago google-fonts.php 2 years ago gravatar-hovercards.php 2 years ago infinite-scroll.php 3 years ago json-api.php 5 years ago latex.php 4 years ago likes.php 1 year ago markdown.php 4 years ago masterbar.php 1 year ago module-extras.php 1 year ago module-headings.php 1 year ago module-info.php 1 year ago monitor.php 2 years ago notes.php 1 year ago photon-cdn.php 1 year ago photon.php 3 years ago plugin-search.php 1 year ago post-by-email.php 5 years ago post-list.php 4 years ago protect.php 2 years ago publicize.php 1 year ago related-posts.php 2 years ago search.php 4 years ago seo-tools.php 2 years ago sharedaddy.php 2 years ago shortcodes.php 1 year ago shortlinks.php 1 year ago sitemaps.php 1 year ago sso.php 1 year ago stats.php 1 year ago subscriptions.php 1 year ago theme-tools.php 1 year ago tiled-gallery.php 4 years ago vaultpress.php 2 years ago verification-tools.php 5 years ago videopress.php 4 years ago waf.php 1 year ago widget-visibility.php 4 years ago widgets.php 1 year ago woocommerce-analytics.php 2 years ago wordads.php 2 years ago wpgroho.js 1 year ago
latex.php
178 lines
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 * @package automattic/jetpack
14 */
15
16 /**
17 * LaTeX support.
18 *
19 * Backward compatibility requires support for both "[latex][/latex]", and
20 * "$latex $" shortcodes.
21 *
22 * $latex e^{\i \pi} + 1 = 0$ -> [latex]e^{\i \pi} + 1 = 0[/latex]
23 * $latex [a, b]$ -> [latex][a, b][/latex]
24 */
25
26 /**
27 * Markup LaTeX content.
28 *
29 * @param string $content Post or comment contents to markup.
30 */
31 function latex_markup( $content ) {
32 $textarr = wp_html_split( $content );
33
34 $regex = '%
35 \$latex(?:=\s*|\s+)
36 ((?:
37 [^$]+ # Not a dollar
38 |
39 (?<=(?<!\\\\)\\\\)\$ # Dollar preceded by exactly one slash
40 )+)
41 (?<!\\\\)\$ # Dollar preceded by zero slashes
42 %ix';
43
44 foreach ( $textarr as &$element ) {
45 if ( '' === $element || '<' === $element[0] ) {
46 continue;
47 }
48
49 if ( false === stripos( $element, '$latex' ) ) {
50 continue;
51 }
52
53 $element = preg_replace_callback( $regex, 'latex_src', $element );
54 }
55
56 return implode( '', $textarr );
57 }
58
59 /**
60 * Process LaTeX string to rendered image.
61 *
62 * @param array $matches Matched regex results.
63 */
64 function latex_src( $matches ) {
65 $latex = $matches[1];
66
67 $bg = latex_get_default_color( 'bg' );
68 $fg = latex_get_default_color( 'text', '000' );
69 $s = 0;
70
71 $latex = latex_entity_decode( $latex );
72 if ( preg_match( '/.+(&fg=[0-9a-f]{6}).*/i', $latex, $fg_matches ) ) {
73 $fg = substr( $fg_matches[1], 4 );
74 $latex = str_replace( $fg_matches[1], '', $latex );
75 }
76 if ( preg_match( '/.+(&bg=[0-9a-f]{6}).*/i', $latex, $bg_matches ) ) {
77 $bg = substr( $bg_matches[1], 4 );
78 $latex = str_replace( $bg_matches[1], '', $latex );
79 }
80 if ( preg_match( '/.+(&s=[0-9-]{1,2}).*/i', $latex, $s_matches ) ) {
81 $s = (int) substr( $s_matches[1], 3 );
82 $latex = str_replace( $s_matches[1], '', $latex );
83 }
84
85 return latex_render( $latex, $fg, $bg, $s );
86 }
87
88 /**
89 * Get the default color for an attribute.
90 *
91 * @param string $color Attribute to color (e.g. bg).
92 * @param string $default_color Default fallback color to use.
93 */
94 function latex_get_default_color( $color, $default_color = 'ffffff' ) {
95 global $themecolors;
96 return isset( $themecolors[ $color ] ) ? $themecolors[ $color ] : $default_color;
97 }
98
99 /**
100 * Decode special characters in a LaTeX string.
101 *
102 * @param string $latex Character encoded content.
103 */
104 function latex_entity_decode( $latex ) {
105 return str_replace( array( '&lt;', '&gt;', '&quot;', '&#039;', '&#038;', '&amp;', "\n", "\r" ), array( '<', '>', '"', "'", '&', '&', ' ', ' ' ), $latex );
106 }
107
108 /**
109 * Returns the URL for the server-side rendered image of LaTeX.
110 *
111 * @param string $latex LaTeX string.
112 * @param string $fg Foreground color.
113 * @param string $bg Background color.
114 * @param int $s Matches.
115 *
116 * @return string Image URL for the rendered LaTeX.
117 */
118 function latex_render( $latex, $fg, $bg, $s = 0 ) {
119 $url = add_query_arg(
120 urlencode_deep(
121 array(
122 'latex' => $latex,
123 'bg' => $bg,
124 'fg' => $fg,
125 's' => $s,
126 'c' => '20201002', // cache buster. Added 2020-10-02 after server migration caused faulty rendering.
127 )
128 ),
129 ( is_ssl() ? 'https://' : 'http://' ) . 's0.wp.com/latex.php'
130 );
131
132 $alt = str_replace( '\\', '&#92;', esc_attr( $latex ) );
133
134 return sprintf(
135 '<img src="%1$s" alt="%2$s" class="latex" />',
136 esc_url( $url ),
137 $alt
138 );
139 }
140
141 /**
142 * The shortcode way. The attributes are the same as the old ones - 'fg' and 'bg', instead of foreground
143 * and background, and 's' is for the font size.
144 *
145 * Example: [latex s=4 bg=00f fg=ff0]\LaTeX[/latex]
146 *
147 * @param array $atts Shortcode attributes.
148 * @param string $content Content to format.
149 */
150 function latex_shortcode( $atts, $content = '' ) {
151 $attr = shortcode_atts(
152 array(
153 's' => 0,
154 'bg' => latex_get_default_color( 'bg' ),
155 'fg' => latex_get_default_color( 'text', '000' ),
156 ),
157 $atts,
158 'latex'
159 );
160
161 return latex_render( latex_entity_decode( $content ), $attr['fg'], $attr['bg'], $attr['s'] );
162 }
163
164 /**
165 * LaTeX needs to be untexturized.
166 *
167 * @param array $shortcodes Array of shortcodes not to texturize.
168 */
169 function latex_no_texturize( $shortcodes ) {
170 $shortcodes[] = 'latex';
171 return $shortcodes;
172 }
173 add_filter( 'no_texturize_shortcodes', 'latex_no_texturize' );
174
175 add_filter( 'the_content', 'latex_markup', 9 ); // Before wptexturize.
176 add_filter( 'comment_text', 'latex_markup', 9 ); // Before wptexturize.
177 add_shortcode( 'latex', 'latex_shortcode' );
178