PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.9-a.1
Jetpack – WP Security, Backup, Speed, & Growth v15.9-a.1
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 2 months ago carousel 4 weeks ago comment-likes 6 months ago comments 4 weeks ago custom-post-types 3 months ago external-media 6 months ago google-fonts 4 months ago gravatar 5 years ago infinite-scroll 4 weeks ago likes 5 months ago markdown 6 months ago memberships 1 month ago photon-cdn 1 month ago plugin-search 4 weeks ago post-by-email 6 months ago related-posts 3 months ago scan 2 months ago seo-tools 2 months ago sharedaddy 4 weeks ago shortcodes 3 weeks ago simple-payments 6 months ago site-icon 6 months ago sitemaps 6 months ago stats 5 months ago subscriptions 4 weeks ago theme-tools 3 months ago tiled-gallery 6 months ago verification-tools 6 months ago videopress 2 months ago widget-visibility 6 months ago widgets 4 weeks ago woocommerce-analytics 1 month ago wordads 1 month ago wpcom-tos 5 months ago account-protection.php 1 month ago blaze.php 6 months ago blocks.php 6 months ago canonical-urls.php 3 months ago carousel.php 6 months ago comment-likes.php 6 months ago comments.php 2 months ago contact-form.php 6 months ago copy-post.php 4 months ago custom-content-types.php 1 month ago google-fonts.php 1 month ago gravatar-hovercards.php 1 month ago infinite-scroll.php 6 months ago json-api.php 6 months ago latex.php 6 months ago likes.php 4 weeks ago markdown.php 6 months ago module-extras.php 6 months ago module-headings.php 1 month ago module-info.php 3 months ago monitor.php 6 months ago notes.php 5 months ago photon-cdn.php 6 months ago photon.php 6 months ago plugin-search.php 4 weeks ago post-by-email.php 1 month ago post-list.php 6 months ago protect.php 1 month ago publicize.php 6 months ago related-posts.php 1 month ago search.php 6 months ago seo-tools.php 6 months ago sharedaddy.php 3 months ago shortcodes.php 6 months ago shortlinks.php 6 months ago simple-payments.php 6 months ago sitemaps.php 6 months ago sso.php 6 months ago stats.php 5 months ago subscriptions.php 4 weeks ago theme-tools.php 6 months ago tiled-gallery.php 6 months ago vaultpress.php 6 months ago verification-tools.php 1 month ago videopress.php 6 months ago waf.php 6 months ago widget-visibility.php 6 months ago widgets.php 6 months ago woocommerce-analytics.php 6 months ago wordads.php 6 months ago wpcom-reader.php 3 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 isset( $themecolors[ $color ] ) ? $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