PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.3.2
Jetpack – WP Security, Backup, Speed, & Growth v12.3.2
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
calypsoify 3 years ago carousel 3 years ago cloudflare-analytics 4 years ago comment-likes 5 years ago comments 3 years ago contact-form 1 year ago custom-css 3 years ago custom-post-types 3 years ago geo-location 4 years ago google-analytics 3 years ago gravatar 6 years ago infinite-scroll 3 years ago likes 3 years ago markdown 3 years ago masterbar 3 years ago memberships 3 years ago photon-cdn 3 years ago plugin-search 4 years ago post-by-email 3 years ago related-posts 3 years ago scan 3 years ago seo-tools 3 years ago sharedaddy 3 years ago shortcodes 3 years ago simple-payments 3 years ago site-icon 4 years ago sitemaps 3 years ago sso 3 years ago stats 3 years ago subscriptions 3 years ago theme-tools 3 years ago tiled-gallery 3 years ago verification-tools 4 years ago videopress 3 years ago widget-visibility 3 years ago widgets 3 years ago woocommerce-analytics 3 years ago wordads 3 years ago wpcom-block-editor 3 years ago wpcom-tos 5 years ago action-bar.php 3 years ago blaze.php 3 years ago carousel.php 4 years ago comment-likes.php 3 years ago comments.php 4 years ago contact-form.php 3 years ago copy-post.php 3 years ago custom-content-types.php 4 years ago custom-css.php 3 years ago enhanced-distribution.php 4 years ago geo-location.php 4 years ago google-analytics.php 4 years ago google-fonts.php 3 years ago gravatar-hovercards.php 3 years ago infinite-scroll.php 3 years ago json-api.php 5 years ago latex.php 4 years ago lazy-images.php 4 years ago likes.php 3 years ago markdown.php 4 years ago masterbar.php 4 years ago module-extras.php 4 years ago module-headings.php 3 years ago module-info.php 3 years ago monitor.php 4 years ago notes.php 3 years ago photon-cdn.php 3 years ago photon.php 3 years ago plugin-search.php 3 years ago post-by-email.php 5 years ago post-list.php 4 years ago protect.php 3 years ago publicize.php 3 years ago related-posts.php 4 years ago search.php 4 years ago seo-tools.php 4 years ago sharedaddy.php 4 years ago shortcodes.php 3 years ago shortlinks.php 4 years ago sitemaps.php 4 years ago sso.php 3 years ago stats.php 3 years ago subscriptions.php 3 years ago theme-tools.php 3 years ago tiled-gallery.php 4 years ago vaultpress.php 4 years ago verification-tools.php 5 years ago videopress.php 4 years ago waf.php 3 years ago widget-visibility.php 4 years ago widgets.php 3 years ago woocommerce-analytics.php 5 years ago wordads.php 5 years ago wpgroho.js 6 years 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