<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[34761] trunk: Shortcodes/Formatting: Add PCRE Performance Testing</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/34761">34761</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/34761","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>wonderboymusic</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2015-10-02 04:25:40 +0000 (Fri, 02 Oct 2015)</dd>
</dl>
<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Shortcodes/Formatting: Add PCRE Performance Testing
* Move pattern from `wptexturize()` into a separate function.
* Move pattern from `wp_html_split()` into a separate function.
* Beautify code for `wp_html_split()`.
* Remove unnecessary instances of `/s` modifier in patterns that don't use dots.
* Add `tests/phpunit/data/formatting/whole-posts.php` for testing larger strings.
* Add function `benchmark_pcre_backtracking()`.
* Add tests for `wp_html_split()`.
* Add tests for `wptexturize()`.
* Add tests for `get_shortcode_regex()`.
Props miqrogroove.
Fixes <a href="https://core.trac.wordpress.org/ticket/34121">#34121</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesformattingphp">trunk/src/wp-includes/formatting.php</a></li>
<li><a href="#trunksrcwpincludesshortcodesphp">trunk/src/wp-includes/shortcodes.php</a></li>
<li><a href="#trunktestsphpunitincludesutilsphp">trunk/tests/phpunit/includes/utils.php</a></li>
<li><a href="#trunktestsphpunittestsformattingWPTexturizephp">trunk/tests/phpunit/tests/formatting/WPTexturize.php</a></li>
<li><a href="#trunktestsphpunittestsshortcodephp">trunk/tests/phpunit/tests/shortcode.php</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunktestsphpunitdataformattingwholepostsphp">trunk/tests/phpunit/data/formatting/whole-posts.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesformattingphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/formatting.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/formatting.php 2015-10-02 04:15:12 UTC (rev 34760)
+++ trunk/src/wp-includes/formatting.php 2015-10-02 04:25:40 UTC (rev 34761)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -219,44 +219,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> preg_match_all( '@\[/?([^<>&/\[\]\x00-\x20]++)@', $text, $matches );
</span><span class="cx" style="display: block; padding: 0 10px"> $tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );
</span><span class="cx" style="display: block; padding: 0 10px"> $found_shortcodes = ! empty( $tagnames );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( $found_shortcodes ) {
- $tagregexp = join( '|', array_map( 'preg_quote', $tagnames ) );
- $tagregexp = "(?:$tagregexp)(?![\\w-])"; // Excerpt of get_shortcode_regex().
- $shortcode_regex =
- '\[' // Find start of shortcode.
- . '[\/\[]?' // Shortcodes may begin with [/ or [[
- . $tagregexp // Only match registered shortcodes, because performance.
- . '(?:'
- . '[^\[\]<>]+' // Shortcodes do not contain other shortcodes. Quantifier critical.
- . '|'
- . '<[^\[\]>]*>' // HTML elements permitted. Prevents matching ] before >.
- . ')*+' // Possessive critical.
- . '\]' // Find end of shortcode.
- . '\]?'; // Shortcodes may end with ]]
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $shortcode_regex = $found_shortcodes ? _get_wptexturize_shortcode_regex( $tagnames ) : '';
+ $regex = _get_wptexturize_split_regex( $shortcode_regex );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $comment_regex =
- '!' // Start of comment, after the <.
- . '(?:' // Unroll the loop: Consume everything until --> is found.
- . '-(?!->)' // Dash not followed by end of comment.
- . '[^\-]*+' // Consume non-dashes.
- . ')*+' // Loop possessively.
- . '(?:-->)?'; // End of comment. If not found, match all input.
-
- $html_regex = // Needs replaced with wp_html_split() per Shortcode API Roadmap.
- '<' // Find start of element.
- . '(?(?=!--)' // Is this a comment?
- . $comment_regex // Find end of comment.
- . '|'
- . '[^>]*>?' // Find end of element. If not found, match all input.
- . ')';
-
- if ( $found_shortcodes ) {
- $regex = '/(' . $html_regex . '|' . $shortcode_regex . ')/s';
- } else {
- $regex = '/(' . $html_regex . ')/s';
- }
-
</del><span class="cx" style="display: block; padding: 0 10px"> $textarr = preg_split( $regex, $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> foreach ( $textarr as &$curl ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -264,7 +229,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $first = $curl[0];
</span><span class="cx" style="display: block; padding: 0 10px"> if ( '<' === $first ) {
</span><span class="cx" style="display: block; padding: 0 10px"> if ( '<!--' === substr( $curl, 0, 4 ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- // This is an HTML comment delimeter.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // This is an HTML comment delimiter.
</ins><span class="cx" style="display: block; padding: 0 10px"> continue;
</span><span class="cx" style="display: block; padding: 0 10px"> } else {
</span><span class="cx" style="display: block; padding: 0 10px"> // This is an HTML element delimiter.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -615,6 +580,17 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * @return array The formatted text.
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> function wp_html_split( $input ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return preg_split( get_html_split_regex(), $input, -1, PREG_SPLIT_DELIM_CAPTURE );
+}
+
+/**
+ * Retrieve the regular expression for an HTML element.
+ *
+ * @since 4.4.0
+ *
+ * @return string The regular expression
+ */
+function get_html_split_regex() {
</ins><span class="cx" style="display: block; padding: 0 10px"> static $regex;
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( ! isset( $regex ) ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -635,25 +611,103 @@
</span><span class="cx" style="display: block; padding: 0 10px"> . ')*+' // Loop possessively.
</span><span class="cx" style="display: block; padding: 0 10px"> . '(?:]]>)?'; // End of comment. If not found, match all input.
</span><span class="cx" style="display: block; padding: 0 10px">
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $escaped =
+ '(?=' // Is the element escaped?
+ . '!--'
+ . '|'
+ . '!\[CDATA\['
+ . ')'
+ . '(?(?=!-)' // If yes, which type?
+ . $comments
+ . '|'
+ . $cdata
+ . ')';
+
</ins><span class="cx" style="display: block; padding: 0 10px"> $regex =
</span><span class="cx" style="display: block; padding: 0 10px"> '/(' // Capture the entire match.
</span><span class="cx" style="display: block; padding: 0 10px"> . '<' // Find start of element.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- . '(?(?=!--)' // Is this a comment?
- . $comments // Find end of comment.
- . '|'
- . '(?(?=!\[CDATA\[)' // Is this a comment?
- . $cdata // Find end of comment.
- . '|'
- . '[^>]*>?' // Find end of element. If not found, match all input.
- . ')'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ . '(?' // Conditional expression follows.
+ . $escaped // Find end of escaped element.
+ . '|' // ... else ...
+ . '[^>]*>?' // Find end of normal element.
</ins><span class="cx" style="display: block; padding: 0 10px"> . ')'
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- . ')/s';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ . ')/';
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- return preg_split( $regex, $input, -1, PREG_SPLIT_DELIM_CAPTURE );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ return $regex;
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Retrieve the combined regular expression for HTML and shortcodes.
+ *
+ * @access private
+ * @ignore
+ * @internal This function will be removed in 4.5.0 per Shortcode API Roadmap.
+ * @since 4.4.0
+ *
+ * @param string $shortcode_regex The result from _get_wptexturize_shortcode_regex(). Optional.
+ * @return string The regular expression
+ */
+function _get_wptexturize_split_regex( $shortcode_regex = '' ) {
+ static $html_regex;
+
+ if ( ! isset( $html_regex ) ) {
+ $comment_regex =
+ '!' // Start of comment, after the <.
+ . '(?:' // Unroll the loop: Consume everything until --> is found.
+ . '-(?!->)' // Dash not followed by end of comment.
+ . '[^\-]*+' // Consume non-dashes.
+ . ')*+' // Loop possessively.
+ . '(?:-->)?'; // End of comment. If not found, match all input.
+
+ $html_regex = // Needs replaced with wp_html_split() per Shortcode API Roadmap.
+ '<' // Find start of element.
+ . '(?(?=!--)' // Is this a comment?
+ . $comment_regex // Find end of comment.
+ . '|'
+ . '[^>]*>?' // Find end of element. If not found, match all input.
+ . ')';
+ }
+
+ if ( empty( $shortcode_regex ) ) {
+ $regex = '/(' . $html_regex . ')/';
+ } else {
+ $regex = '/(' . $html_regex . '|' . $shortcode_regex . ')/';
+ }
+
+ return $regex;
+}
+
+/**
+ * Retrieve the regular expression for shortcodes.
+ *
+ * @access private
+ * @ignore
+ * @internal This function will be removed in 4.5.0 per Shortcode API Roadmap.
+ * @since 4.4.0
+ *
+ * @param array $tagnames List of shortcodes to find.
+ * @return string The regular expression
+ */
+function _get_wptexturize_shortcode_regex( $tagnames ) {
+ $tagregexp = join( '|', array_map( 'preg_quote', $tagnames ) );
+ $tagregexp = "(?:$tagregexp)(?=[\\s\\]\\/])"; // Excerpt of get_shortcode_regex().
+ $regex =
+ '\[' // Find start of shortcode.
+ . '[\/\[]?' // Shortcodes may begin with [/ or [[
+ . $tagregexp // Only match registered shortcodes, because performance.
+ . '(?:'
+ . '[^\[\]<>]+' // Shortcodes do not contain other shortcodes. Quantifier critical.
+ . '|'
+ . '<[^\[\]>]*>' // HTML elements permitted. Prevents matching ] before >.
+ . ')*+' // Possessive critical.
+ . '\]' // Find end of shortcode.
+ . '\]?'; // Shortcodes may end with ]]
+
+ return $regex;
+}
+
+/**
</ins><span class="cx" style="display: block; padding: 0 10px"> * Replace characters or phrases within HTML elements only.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 4.2.3
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -768,7 +822,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> . ')'
</span><span class="cx" style="display: block; padding: 0 10px"> . '(?:' . $spaces . ')*+' // optional trailing whitespace
</span><span class="cx" style="display: block; padding: 0 10px"> . '<\\/p>' // closing paragraph
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- . '/s';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ . '/';
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> return preg_replace( $pattern, '$1', $pee );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunksrcwpincludesshortcodesphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/shortcodes.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/shortcodes.php 2015-10-02 04:15:12 UTC (rev 34760)
+++ trunk/src/wp-includes/shortcodes.php 2015-10-02 04:25:40 UTC (rev 34761)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -168,7 +168,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( shortcode_exists( $tag ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ preg_match_all( '/' . get_shortcode_regex() . '/', $content, $matches, PREG_SET_ORDER );
</ins><span class="cx" style="display: block; padding: 0 10px"> if ( empty( $matches ) )
</span><span class="cx" style="display: block; padding: 0 10px"> return false;
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -219,7 +219,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $content = do_shortcodes_in_html_tags( $content, $ignore_html, $tagnames );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $pattern = get_shortcode_regex( $tagnames );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $content = preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $content );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $content = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $content );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Always restore square braces so we don't break things like <!--[if IE ]>
</span><span class="cx" style="display: block; padding: 0 10px"> $content = unescape_invalid_shortcodes( $content );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -378,7 +378,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> if ( false === $attributes ) {
</span><span class="cx" style="display: block; padding: 0 10px"> // Some plugins are doing things like [name] <[email]>.
</span><span class="cx" style="display: block; padding: 0 10px"> if ( 1 === preg_match( '%^<\s*\[\[?[^\[\]]+\]%', $element ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $element = preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $element );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $element = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $element );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Looks like we found some crazy unfiltered HTML. Skipping it for sanity.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -407,12 +407,12 @@
</span><span class="cx" style="display: block; padding: 0 10px"> // In this specific situation we assume KSES did not run because the input
</span><span class="cx" style="display: block; padding: 0 10px"> // was written by an administrator, so we should avoid changing the output
</span><span class="cx" style="display: block; padding: 0 10px"> // and we do not need to run KSES here.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $attr = preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $attr );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $attr = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $attr );
</ins><span class="cx" style="display: block; padding: 0 10px"> } else {
</span><span class="cx" style="display: block; padding: 0 10px"> // $attr like 'name = "[shortcode]"' or "name = '[shortcode]'"
</span><span class="cx" style="display: block; padding: 0 10px"> // We do not know if $content was unfiltered. Assume KSES ran before shortcodes.
</span><span class="cx" style="display: block; padding: 0 10px"> $count = 0;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $new_attr = preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $attr, -1, $count );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $new_attr = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $attr, -1, $count );
</ins><span class="cx" style="display: block; padding: 0 10px"> if ( $count > 0 ) {
</span><span class="cx" style="display: block; padding: 0 10px"> // Sanitize the shortcode output using KSES.
</span><span class="cx" style="display: block; padding: 0 10px"> $new_attr = wp_kses_one_attr( $new_attr, $elname );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -572,7 +572,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $content = do_shortcodes_in_html_tags( $content, true, $tagnames );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $pattern = get_shortcode_regex( $tagnames );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $content = preg_replace_callback( "/$pattern/s", 'strip_shortcode_tag', $content );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $content = preg_replace_callback( "/$pattern/", 'strip_shortcode_tag', $content );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> // Always restore square braces so we don't break things like <!--[if IE ]>
</span><span class="cx" style="display: block; padding: 0 10px"> $content = unescape_invalid_shortcodes( $content );
</span></span></pre></div>
<a id="trunktestsphpunitdataformattingwholepostsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/data/formatting/whole-posts.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/data/formatting/whole-posts.php (rev 0)
+++ trunk/tests/phpunit/data/formatting/whole-posts.php 2015-10-02 04:25:40 UTC (rev 34761)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,1282 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+function data_whole_posts() {
+ return array(
+
+/* DIVIDER */
+
+array('[Lorem ipsum dolor sit amet, quo id ignota repudiare, ius iracundia rationibus an, ea natum causae epicuri has. His porro deleniti cu. Eam ut quem alia reprimique. Quas tollit tincidunt his eu, nam ex cibo illud cetero. In perpetua dignissim mel, te utinam vituperata per.
+
+ Erat tibique hendrerit et duo, qui iriure tacimates ne, per eu solum admodum ocurreret. Cu ius utinam equidem saperet, mei tation nostrud scripserit ne. Sea et vide natum. Homero constituto eu est, quo eu veniam omnium feugait. Vel enim commune no.
+
+ Option verterem eum te, quot discere neglegentur nam at. No rebum convenire disputationi pro, libris possim eruditi id est. Unum ubique scaevola sed ad. Quas decore periculis ius eu, quod nibh quando ea ius. Ea essent omnesque mei, possit verear aperiri ea mel, mea fabellas urbanitas pertinacia ei. Maiorum sensibus at duo, eum ea veritus splendide.
+
+ Ex quo noster alterum sanctus. Vel ei blandit adversarium, ad iriure scripta eruditi nam. Quo semper noluisse consectetuer te. Probatus mediocritatem necessitatibus ne pro. Vix ne consul soluta dissentiet.
+
+ Vix augue vivendum sadipscing ei, diam elaboraret scribentur no mea. Te pri nullam reprehendunt, ornatus maiorum ne qui. Et mei accusam singulis. Et est intellegat posidonium, no usu purto bonorum facilisi. Saperet cotidieque eu mel.
+
+ Nonumy pericula vis id, illum nobis aliquando cum ei, altera aeterno mediocritatem pro ea. At duo quaeque dolorem. Vidit tantas ea vim, quis feugiat delenit vix ad, te per choro omnesque. Eum id duis facilisis. Purto intellegat duo no, ne ipsum praesent moderatius vis, et meliore scriptorem vim.
+
+ Bonorum admodum intellegam <!--te sed, eum erant placerat gubergren at, summo iudico aeterno mel an. Eu malis apeirian interpretaris eum, possim sanctus eu quo. Quo utinam persius ut, quo exerci dolores iudicabit ex. Ferri audire expetenda ex vis, persius signiferumque sit id.
+
+ Nobis scaevola qualisque vim ne, amet habemus no nec. Ex sea veri posse inani. Pro id quando persecuti, te nec utroque urbanitas adipiscing, an odio munere legere his. Veritus lucilius nam no, usu option appetere detraxit cu. Eos in hinc inciderint, nec in recteque corrumpit, dicat assentior honestatis at duo.
+
+ Atqui nemore propriae ea vel, duo an possim democritum, qui ad omnium tritani partiendo. Propriae appellantur ea per, est cu rebum justo utamur. Eruditi abhorreant ullamcorper an cum. Tota diceret ei mea, modus invidunt ad sea. Quo et prima debet eirmod, nisl inciderint qui ut. Te cum natum verterem vulputate, omittam rationibus reformidans vix ex.
+
+ Virtute posidonium at has, te epicuri eleifend adversarium eum. Esse putant iracundia ad sea, ei sed integre postulant expetenda, ad vix aperiri electram. Cu vel meis omnes expetendis, ei debet oblique molestie mea, ad vix nibh falli zril. Id vel quod erat eirmod, modus reformidans ei sea, an has agam aperiri.
+
+ Pro an wisi inimicus, suas interpretaris pri ex. Id sea erat aliquip. No pri falli sanctus, et adipisci vituperata pri, cu salutatus necessitatibus ius. Sed veri viderer ad. Liber veritus mediocrem ad eos, indoctum quaerendum instructior eam ex, te his graeci latine intellegebat. Duo prima erant feugiat ut.
+
+ In vis saepe vivendum nominati. Ad eam quis legere adversarium, hinc summo ea mei. Usu brute neglegentur et. Per no alienum contentiones definitionem, epicurei sententiae no eum. Omnium copiosae id cum, iisque denique inimicus ad sed, pri in essent iisque. Et essent intellegat incorrupte nam, ex nusquam conceptam ius.
+
+ Pro consulatu dissentiet no,] amet reque delicatissimi duo ex, cu mei nulla zril quodsi. Novum rationibus reprimique cu his. Mutat aperiam te vel. Habemus hendrerit sea ad, eum etiam dignissim id. Usu definiebas dissentiet cu, at iriure regione duo.
+
+ Eu sea simul noluisse deserunt, insolens intellegat ut sea. Ex eam vitae deseruisse. Et mea congue noster admodum, ad qui urbanitas definitiones. Nihil graece vivendum nam ut, mea ut vitae ancillae repudiandae, eos an oratio scriptorem. Eu mutat legimus inimicus vel, id sententiae inciderint sit. Dico appareat vim id, no vim possit volumus, movet audiam discere ut nec.
+
+ Viris inimicus persequeris vis ad, nulla deterruisset ex est. Vim ocurreret maluisset scribentur ut, lorem liberavisse cum at, at causae ceteros tractatos eos. Ex ius recteque eloquentiam, sed cetero tritani ex. Aperiam molestie ex sed, melius vocent salutandi vel ne. Sed ut iuvaret officiis tractatos. Luptatum quaestio vel ut, posse dissentias cu sed, mei cu habeo invidunt vituperata.
+
+ Sit alia persecuti cu, an ferri petentium vim. Ut ius adhuc paulo consulatu. Duis adversarium in his, at mel nostro perpetua moderatius. Id has maiorum adipisci, ferri affert vel cu, est tempor docendi ei. Autem ipsum vim at, cu luptatum apeirian quo, est aliquip eruditi eu. Eum epicurei sensibus et, et vis veri tractatos, quas etiam vel ut. Vide corrumpit imperdiet at mei.
+
+ Quaestio vulputate cu his, usu at facete eirmod percipitur. Usu vivendum electram reprimique eu. Vis no consequat expetendis, eos id velit aperiam detracto. Eu summo consequuntur eum, minimum praesent partiendo id est.
+
+ Tota offendit sea et, ne vim dicam admodum blandit. No vix quas nusquam. Putant scripta fierent mei ea. Eum ei putant persius probatus, quo ea wisi electram.
+
+ Eu illud definiebas honestatis sit. Eam exerci deseruisse ei, ex cum erant tacimates. Enim eros id vel, vidisse abhorreant cu eum. Et saperet appellantur est, eum esse soluta recusabo ad. Eam malis sensibus ea.
+
+ Exerci scripta at est. His ei nostrum perfecto, accumsan eligendi tincidunt an eum. Ius tempor aperiam ea, mei autem lorem eu. Vis duis modus ornatus no, alia malis ornatus mea et, ea eros probatus qui.
+
+ Mazim assentior mel te, rebum periculis constituam nec ut. In ferri admodum deleniti eum, nam te quas nominati appellantur. Est at erat pertinax, no sit nulla placerat. Munere euripidis ad has.
+
+ Magna graeco oblique vel ea, no movet aliquando mea. Eum no sadipscing delicatissimi, doctus consequuntur eu sed. Sed in persius eleifend, regione euismod no per. Ei pri vivendum gubergren, vix at eligendi invenire aliquando, brute malorum id usu. Cum tantas prodesset consequuntur ei, eum liberavisse delicatissimi vituperatoribus at.
+
+ Cu bonorum graecis ius. Duo id ancillae probatus. Tota latine pri an. Cum ei iudico semper. Eum in blandit voluptaria.
+
+ Illud debet vitae ex vis numquam.'),
+
+/* DIVIDER */
+
+// based on https://core.trac.wordpress.org/attachment/ticket/29557/ChatTranscript.txt
+
+array('hello!-- world. [caption arg1="Aenean consectetur ipsum ante, vel egestas enim tincidunt quis. Pellentesque vitae congue neque, vel mattis ante. In vitae tempus nunc. Etiam adipiscing enim sed condimentum ultrices. Aenean consectetur ipsum ante, vel egestas enim tincidunt qu. In vitae tempus nunc. In vitaentbnbsdgsdsdgsdhsdhdsdhdsh Aenean consectetur ipsum ante, vel egestas enim tincidunt quis. Pellentesque vitae congue neque, vel mattis ante. In vitae tempus nunc. Etiam adipiscing enim sed condimentum ultrices. Aenean consectetur ipsum ante, vel egestas enim tincidunt qu. In vitae tempus nunc. In vitaentbnbsdgsdsdgsdhsdhdsdhdsh" /] hello world.
+
+Chat Transcript for Apple event on October 22, 2013. Edited slightly for grammar, capitalization, and punctuation. It\'s a little hard to follow along at times, but I\'m mostly posting for posterity\'s sake. Or whatever.
+
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">ARE YOU READY PHIL!?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Music is streaming
+Tom Merritt on twitter: Apple has made their first announcement "Please turn electronic devices to silent." Does this meet expectations?
+I AM READY!
+"It\'s all better now" does that mean something?more</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I WISH I HAD MONEY TO GIVE APPLE!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">IT STARTED</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Apple has patented the period!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Hi Aaron!
+You can complain now!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Finally!
+Two of you!</p>-
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">I\'ve seen this video before. It\'s good but I really wanted a new one.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">OH MY GO.... oh it\'s just Tim Cook</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">They probably paid more for that video than Phil\x92s yearly salary.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Flower petals!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Thanks Bob.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">BRING BACK THE FLOWER POWER IMACS!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">PRODUCTS HE SAID PRODUCTS PLURAL!
+But first, I have a lot of large numbers to show you!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Take a drink!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Amazing 5C. Which no one is buying.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">STUNNING</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Should be \x93formerly of the Wall Street Journal\x94.
+I also hope they bring up Pogue.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Hey made a new video for you Aaron!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">They should just play an old video.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Slide called video before the video.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I want a glass dodecahedron.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Look at all these happy people who are touching our products? Don\'t you want to be happy?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">This better all be shot on an iPhone</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">\x93Shot on Film\x94</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">The Chinese are a happy people, when you give them iPhones</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I\x92d be happy too if I had the money to blow on an unsubsidized iPhone 5s.
+Or eight.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Look, this guy bought 5 of them!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">That guy bought up cases ... I hope the employees laughed at him.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">He CAN speak for everyone at apple.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">The cut at the end to the logo tag was awkward.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Hundreds of millions of customers.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">\x93Formerly of the New York Times\x94</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">MORE BIG NUMBERS!!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I wish they put all of the zeroes on the screen.
+Then we could add up all of the zeroes.
+That is pretty stunning. We still have Windows XP running here.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Apple should be running the gov healthcare website.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">No one wants to run that piece of junk.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">He seems a little under prepared... is he excited or did he only practice this 12 times?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Apple is hopefully smart enough to stay out of government.
+\x93Thar be dragons!\x94</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">"After we paid him a hundred thousand dollars to say that..."</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I\x92d do it for half that.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">ANOTHER BIG NUMBER!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Not enough zeroes.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">A SINGLE DIGIT BIG NUMBER!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">There we go ... nine zeroes!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">6 Zeros!
+10 Zeroes!
+STAGGERING!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Personally, I love the fact that Apple is thumbing their nose at all of the graphic designers out there by continuing to use those icons.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">9 more zeroes!
+Phenomenal!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Take a drink for each zero?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Can I get checks with the Apple logo on them? For all my apple purchases...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">How soon until you die of alcohol poisoning?
+LOL</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Dead</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I bet Tim has it.
+And we\x92re giving Mavericks away for free today! Sorry Siracusa!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Was Tim around at the beginning? How does he know that that has always been the single purpose?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Heh.
+I think Steve probably left him a note in his desk.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">What\'s wrong with the slides?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Ooooo.... competition! Take a drink.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">\x93Dear Tim, this is what Apple is about.\x94</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I\'d hit that.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Lots if weird shapes dimming over the slides</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Its a feature.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">A feabug!
+YES!
+CRAIG!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">YAY CRAIG!!! Who\'s Craig?
+HAIR FORCE ONE!!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">10 10</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I like the fact that he owns up to the fact that his hair is greying.
+He\x92s like \x93I have grey hair ... so I\x92m going to have a ton of it.\x94</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Smooth the Mac experience.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">It looks more bronze today... did he go gold?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Hhmm.
+Maybe.
+Hanging out with Jony.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Wait... what?
+LOL
+My door is open Craig! My door is open!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Oh Craig, I was on the Apple Campus when he did his first event and he was NERVOUS.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">He likes to talk with hand motions.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Run ALL the apps!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">GRADIENTS ON EVERYTHING!
+Whoa! That\'s a small number!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I love it.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">AND NOW ITS A BIG NUMBER AGAIN!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Wait, where are we. Someone brought me a cable that looks like S-Video to USB ... which is basically impossible.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">LOL
+Seems legit.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">They love their \x93x\x94s.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Yay! updates to a browser I don\'t use!
+You can play tag in the finder!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Display-handling is much better.
+Ah, I love flubs. They aren\x92t robots.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">...is with a new computer!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Lip sync.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">And here we have a new Mac Pro driving two 4K monitors.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">The mac has no equal when it comes to running Pages.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">You can have it for only 75,000 euros.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Which is like 34 cents American.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Apple rocket!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Jony has some in the lab.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">"We bought NASA"</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">iLaunch</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Got a good deal from the government.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Launch pad</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Oooh, those are new icons.... is this a new Pages?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I have a feeling Amazon would buy NASA before Apple.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Did I miss him saying that this is a new Pages?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Probably just Bezos.
+No.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Free shipping to Mars.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">He hasn\x92t said it yet ...</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">That would make sense, because it would be silly for them to give old features... but those are new icons!
+PAGES 2014!!!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Maybe the rover needs a new iPhone.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">LOL</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Oh Craig.
+Nice work bringing the wife into the event.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Dang, he\'s taken ;-p
+He\'s canceling that account the minute he gets off stage.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">And now my social security number...</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">There\'s probably an intern doing that for him right now.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">But you\'ll never get my thumbprint.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">THIS DEMO IS FANTASTIC
+It\'s more of a comic routine than anything new.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">New calendar app! *rimshot*</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Alright, now for the good stuff!
+... date ... price ...</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">so we actually released it yesterday!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Free.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">... Wait... wait
+wait...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">It\x92s free.
+Has to be free.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">New era.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Or they\x92re going to pay you!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">has to be fre:OIHSEg;kuahrg ouhWTPOIUGGSR:IGH SK>JGu;SFghe
+a;ofg ;SFUY[OISDUg;aefgn.kajefhg ;oadufghd
+;oaeirgp ;Skadgipy9q347t;gkufbvzkdjb;adigue
+a;eorpugy ap97fdgy bpiduzlfbkv.zkjxcvh;a owithg2;iuhlzbdfjk</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">And it was shipped last week!
+Come on Craig ...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">With the purchase of an overpriced machine.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">FREE FOR EVERYONE
+LIKE LINUX</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">That\x92s awesome. Great work.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Wow
+Wow
+Woooooow!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Entitled to Mavericks.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">TODAY!!
+A:OIY POGUSRH:IGUHSFPIUG&SF*I</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">BOOM!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I"M CALLING IN SICK.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Siracusa just cried.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Ok. Presentations over. Go get Mavericks.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I\'M NOT BACKED UP!!!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">UNTUCKED SHIRT!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I WASN\'T PREPARED FOR THIS</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">This is great news. I like that they\x92re going free for everyone. That\x92s awesome.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Cue Video of People screaming and running out of Apple stores with free OS</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">LOOT ALL THE THINGS</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">That is the problem.
+I still remember paying $129 for Tiger.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Oooh, Macbook Pro update?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">FOR A BOX!
+That poor tree.
+Haswell.
+I\x92m guessing non-Retina is dead.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">WHAT? HOW CAN THEY DO THIS BLACK MAGIC!?!?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">So thin you can cut yourself on the edges.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">... and it is purple.
+That\x92s good news.
+Prices Phil.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">The Black Knight.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I only buy purple computer chips.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Only on iTunes.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Same here.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">WIFI has air conditioning now!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I\x92m guessing hardware decoding helps with that.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">!!!!
+That\'s not much more than my air...
+TODAY!!??!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">MacBook Air is free!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">We\'re going FREE in a BIG WAY.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">No more non-Retina.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">5C is free cause we can\'t sell them all.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">We\'re printing money, you can have anything for free at this point.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">And a toaster!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">We\'ll just make more money to cover the cost.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">$1799.
+BLAH!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Free posters for your wall with petals.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Duh.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I didn\'t realize that computers were so expensive.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">MORE CHECKBOXES!!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Free Mercury!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">That $1299 13\x94 is tempting.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Mac Pro.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">A very significant, if unsurprising update.
+\x93blown away\x94</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Blown away by the trash can.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">That is one powerful fan.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I think this is all cinema 4D... I don\'t think they actually built one.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">They\x92re just going to bring out an old case.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">"Simply remarkable."</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">The Mac Pro is virtual. You don\'t get a box.
+Cloud based.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">THE FASTEST MEMORY!* (*that we have ever put in a mac)</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">We finally put graphics cards that aren\'t old in a Mac.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">That is some speedy storage.
+Yup, spinning rust taps out at about 120 MB/sec.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">We\'ll even sell you this case that matches to put your drives into!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">For a single drive.
+Who is going to be the first to mod a real trash can with a RAID array to Thunderbolt?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I can\'t wait to see the enclosures people make to go with this device.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Row of trash cans daisy chained together.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Packed and built for expansion.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">It\'s only one Mac Pro. I know it looks like ten.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">That is one dense machine.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">"We can\'t imagine what people can do with this."</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">So we\x92ve decided to not sell it to people ... only robots!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">FREE</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Final Cut Pro X. It\'s all Downhill from here.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I do not know these people.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">And... that\'s why...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I think Phil probably sleeps with these things.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">This Mac Pro is killer.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">This Mac Pro is (a) killer.
+Whew.
+This is going to get expensive fast.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">3K. hmmm</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Not terrible. However, now I need to price out the TOP OF THE LINE model and find out if it can cost more than my house.
+Should be able to do it.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">SO RECYCLABLE that you can throw it into the trash... or use it as a trash can.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">30k</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">"THIS CHART PROVES IT"</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">That cannot be understated, less power is a big deal when you get some space heaters together.
+Whew. That\x92s nuts.
+I have a Mac mini under my desk right now.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">You\'re nuts.
+You\'re going to buy like 6 of these.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I wish.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">We made another video for you!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">NEW VIDEO</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I wonder how hard of a sell a lab of Mac Pros would be.
+There you go Aaron.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Better be edited on FCPX.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I want to hear the disembodied voice of Jony Ive!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">JEFF WILLIAM THE COMPOSER!... oh wait... not the same guy.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Not this Williams fellow!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Shiny, captain.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Robots!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Oh, he has a Jarvis too!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">This is what having 100+ billion in the bank can do for your product line.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Who assembles the assembly line?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">I want a tour .</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">It is like a freaking laboratory for a single computer line from a single company.
+Alright, I want one.
+Crap.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">If I buy a Mac Pro do I get an assembly line tour too?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">How to convince my boss to get me two ...
+Maybe when you get the top-of-the-line model?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">There\'s more!?!?!?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">EDDIE!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Eddie!
+Who is Eddie?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Appses</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">He seems like a mobster.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">BIGGEST UPDATES EVER</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL
+Another drink?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">He is a mobster.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">He does do the negotiating.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">WE REDESIGNED THE ICONS!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Designed to look different!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">We are going to kill the competition.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Crap. I am going to spend money.
+64-bit!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">It\'s all free Bob!
+IT\'S ALL FREE!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I wish I could get a free Mac Pro.
+I spent $2000 on my original 15\x94 PowerBook G4 ... $3K on a Mac Pro ...</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I you have iOS, because, let\'s be honest, we know you do, and if you don\'t security will escort you out.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">You have to show your iPhone to get in.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Photo Books are extremely popular. Bringing them to the iPad is an excellent move.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">iPhoto! The same, but we changed the icon!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">\x93amazing\x94</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">iMovie is new from the ground up! Because we like to do that every so often...
+You don\'t need to edit!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">iMovie has ONE button now!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">New design! Because we can\'t quite figure this out for reals...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">WHAT WIZARDS DO THEY HIRE!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">We simplified the interface, so that you can\'t actually do anything with the things... because that\'s complicated and we want it to be simple.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I think we call this \x93value add.\x94</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">iMovie theater. More file management users won\'t understand.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Geez Apple ...</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">The most popular musical creation app... in the world... that is part of ilife...
+It\'s asterisks all the way down.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Remember when we couldn\x92t even make phone calls from our phones because we didn\x92t have one ... now you can record whole albums from one.
+LOL</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Everything is killer .</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I don\'t remember that.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Serials.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Click the drummer button, and we\'ll send one to your house.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">WE NO LONGER NEED DRUMMERS!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Siri. I need a beat.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">OR HUMANS!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">What is this I don\'t even...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">The drummers have names.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">"We have so much money we\'re trying to spend it as fast as we can, but it\'s just not working... we really don\'t understand it..."</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">In. App. Purchase.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">@aaron - Unlike real drummers... who don\'t have names.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Is that a bio next to the photo?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I have a feeling that he drew the short straw because this is his baby.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">DRUMMER</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Mobster.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">"That was AWESOME... I love garageband..."</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">He just gets stuff done.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Is he drunk?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">NO!
+I WANT FREE FOR EVERYONE!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">FREE drummers.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">AUUGH... free for everyone plz!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">...I guess I need to purchase a new Mac.
+NEW ICONS!
+64-bit please?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Free pizza tray where the optical drive used to be.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Collaboration?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Of course it\'s 64 bit. It\'s free for new users.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Could it be a pizza oven?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Because SCREW PEOPLE WHO NEED TO UPGRADE.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Drummers don\'t work on an empty stomach</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">We can\'t afford to give EVERYONE iWork.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">You could probably cook a pizza on top of a Mac Pro.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Will drum for food.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Microsoft Office sucks.
+That is what he meant.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">What hasn\'t apple reinvented?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">The Mac Pro had an integrated stovetop.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">LOL</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I like that.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">MacPro Grill.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">It now presents for us?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">WHAT!?!?!?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I\x92m sure no one noticed.
+Plus, if it crashes, no one will care.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">PLOT TWIST</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Video of famous director eating grilled Sandwich while swiping with greasy fingers.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">WHOA</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">DEMO!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I still feel like Eddie Cue should be knocking the heads of the movie studios right now.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">No one lets you do what we do with our app because no one loves you like apple loves you.
+That\'s easy to imagine</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Plus, he has a great mobster name.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">HE\'s a rapper!
+BLING BLING</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">He wears a Mac Pro on a chain around his neck.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">LOL
+Steve is rolling in his grave.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Oh a semi-serious note, I like that they take pots at themselves and each other.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">POT. That\'s probably the problem.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">All their meetings are nonsense and jokes now that Steve isn\'t there to tell them to get back to work.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Bob, did you see John Siracusa\'s tweet?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Yes I did.
+I have a feeling \x93scrambling\x94 doesn\x92t get to the heart of that.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Oh geez.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">WAIT WAIT WAIT ... IS THIS COLLABORATION!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Not by my definition...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Stuck on a PC.
+Free.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">FREE FOR EVERYONE
+... NOPE, Chuck Testa!
+With new purchase.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">.
+Today</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I\'m just going to sell my Macbook air and buy a new one.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Always.
+CRUDDY CRUD CRUD!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">The biggest day ever for apps.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Geez ... 20 apps!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Apple doesn\'t care about previous customers</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">... COME ON PODCAST.APP!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">20 apps?
+I only saw 3
+or 4</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">They\x92re pushing updates for 20 apps today.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">iPad announcement?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">On it\'s ear!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I\x92m guessing that is next. We\x92re only one hour in.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">ON IT\'S EAR
+$1.99 upgrades!
+FREE MACS FOR EVERYONE!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">TIM COOK FOR PRESIDENT!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I remember paying $10 for the iPod touch update.
+The sad part, they could give away almost everything and they\x92d still make money.
+Netbooks are old Chromebooks ...</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">LOOK AT ALL THESE LARGE NUMBERS!
+this chart proves that bigger numbers are near the top of the chart!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">That curve is going up and to the right!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Maybe they flipped the chart?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I can\'t think of another product that has sold this many numbers of product!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Doubters...</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">NO ONE has ever sold 170 million of anything!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Blueberry Pie chart.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Too bad I don\x92t like blueberries.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Look at this pie chart! We\'re larger than the thing that isn\'t us!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">iPad now blue flavored.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Since we started tracking this, we have been the best at tracking this.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">iOS 7.1 today?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">No one else can match this. NO ONE.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">More zeroes.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">If we say this enough, everyone will believe it.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Productive.
+Look a racing game!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Too much exposition.
+\x93No new iPads!\x94
+\x93We designed iPad ...\x94
+Like a family pet.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Video!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">\x93We fed Molly...\x94</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Video!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">LOOK AT ALL THESE BIG NUMBERS!!! But let\'s be honest, it\'s not about the numbers... though, our numbers are bigger than other people\'s numbers, but we really want to focus on our Quality... OF THIS NEW VIDEO!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">They should do an audio-only video.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Look Bob! A farming app!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I WAS COMBINING THIS WEEKEND!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">It\'s like they understand you!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Sadly, that particular one is tied to a particular system on very expensive new machines.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">This is the best video.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Look, here\'s a firefighter playing angry birds.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Surgeons playing ERT2</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I\x92ve personally used my iPad for business meetings.
+How are these people getting cell reception in these areas!?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">It\'s much more interesting to look at the world through your iPad if you\'re at the great wall of China.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">I want to know how many of the shots are real. Some seem too good to be true</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">That\'s an amazing video...
+And amazing stories...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Lots of helicopter shots.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">...so we hire pixar to make movies about every scene in that video.
+HEY! IT\'S OTHER ME!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Phil\x92s back!
+BRING US CRAIG!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Hello!
+13 INCH IPAD</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Craig is doing his hair.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">And tucking in his shirt.
+"Relentless path"</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Remarkable.
+DRINK!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Biggest step.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">"Incredible vision," "Quite remarkable"
+In VIDEO FORM!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Video.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Why do we hate articles?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">It\'s anti gravity!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">No TouchID.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Wait, what?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I didn\x92t see it.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">NEW NEW IPAD</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">iPad Air?
+WHAT THE FREAK!?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">iPad air? Really?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Wait... 9.7 is air?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Has to be pricing pressure.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">So... what happened to the mini?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Drop the price on Fat iPad.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">The NEW NEW IPAD AIR MINI!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Drop the price on iPad mini.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">That\'s an amazingly thin iPad!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Little numbers!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Nicely stated Aaron.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">LOOK AT HOW SMALL THESE NUMBERS ARE! No one has numbers this small!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">More tiny numbers.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">No way lighter?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">It would be awesome if it were heavier.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">It\'s so light it might blow away outdoors.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Lightest Full size tablet in the world*</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">\x93We\x92ve made it out of lead!\x94
+A7 ...</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">The AIR... BLOWS everything away... get it? get it? get it?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Which is good, but ... TouchID?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Blue curves!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Too thin for touch id.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">That\x92s important because IT IS PUSHING DESKTOP RESOLUTION!
+That\x92s my thought as well.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">What\'s MIMO?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Using multiple antenna for wifi.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">hmmm</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Faster, better range, etc.
+\x93It is better, you\x92re going to buy it, so just go now.\x94</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Dual microphones! Stereo recordings!
+No gold?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Same battery life that much thinner and lighter, what are they doing?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Magic.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">$4.99! WERE GOING FREE BABY!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">WHAT!?
+IPAD 2 IS STILL AROUND!?</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">We\'re keeping this iPad around for people who still like things that weigh a ton.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Has to do with graphics only, the A6X and A5X were SERIOUSLY underpowered graphics wise.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Video!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Please bring Jony ...
+YES!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">JOHNNY IVES!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Jony Ives.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Aluminium ... come on ... say it ...
+I was afraid that Jony has left ...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Robot that drops iPads.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Is the mini gone?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Airplanes!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Don\x92t know yet. We\x92ll see.
+AND AIRPLANES!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">More planes.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">LOL</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">THE IPAD AIR ... GET IT ... AIRPLANES!
+PEOPLE JUMPING IN THE AIR!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">I don\'t understand.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">STANDING IN AIR!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">That\'s looked like an expensive apartment.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Can you explain it?</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Craig!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">YES!
+BRING OUT CRAIG!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Tom Merritt: "We have machined the tears of unicorns into the edge and compressed babies wishes into it\'s case. It weighs 1 butterfly kiss."
+"The newest thing we built is the most advanced thing we have ever built"</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">And now we\x92ve decided to discontinue it and release the iPad nano!</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">He\'s struggling for a list of things that people do with their iPad... CRASH AND BURN!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">It is hard when they do so many things.
+Missed it, what was announced?
+Ah, Retina ...</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">It\'s only $399!</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">You can hear a pin drop in the audience.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">LOL
+A significant price point, but ... eh.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Oh, $299... and then they clap...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">I cannot believe that the iPad 2 is hanging around.
+Truly a zombie.
+Did I miss the fact that the Air has an A6X?
+Sorry, mini.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Reach under your seat. Free iPads for everyone</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">Another video
+It\'s hiding behind this pencil.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Ipencil.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">iPad. iPad 2. New iPad. iPad Air. Because we can\'t figure out a naming scheme that works...</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Just play the Mac Pro assembly line video again.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">No musical guest? SELL YOUR STOCK</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Eddy.
+He\'s gonna play.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">4 grand for the 6-core Mac Pro.
+6 GB of video RAM.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Hmmm</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Thank you gentleman.</p>
+<img class="alignright" src="http://www.example.com/postimages/2013/philipmetroid.jpg" alt="" width="50" height="50" />
+<p class="triangle-right right">No, thank you.</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/aarone.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right lefttwo">Thanks for a magical event</p>
+<img class="alignleft" src="http://www.example.com/postimages/2013/bobm.jpeg" alt="" width="50" height="50" />
+<p class="triangle-right left">Darn right!</p>'),
+
+/* DIVIDER */
+
+array('<em>Lorem ipsum dolor sit amet, quo id ignota repudiare, ius iracundia rationibus an, ea natum causae epicuri has.</em>
+
+His porro deleniti cu. "Eam ut quem alia reprimique." Quas tollit tincidunt his eu, nam ex cibo illud cetero. In perpetua dignissim mel, te utinam vituperata per.
+
+ Erat tibique hendrerit et duo, qui iriure tacimates ne, per eu solum admodum ocurreret. Cu ius utinam equidem saperet, mei tation nostrud scripserit ne. Sea et vide natum. Homero constituto eu est, quo eu veniam omnium feugait. Vel enim commune no.
+
+ Option verterem eum te, quot discere neglegentur nam at. No rebum convenire disputationi pro, libris possim eruditi (id) est. Unum ubique scaevola sed ad. Quas decore periculis ius eu, quod nibh quando ea ius. Ea essent omnesque mei, possit verear aperiri ea mel, mea fabellas urbanitas pertinacia ei. Maiorum sensibus at duo, eum ea veritus splendide.
+
+ Ex quo noster alterum sanctus. Vel ei blandit adversarium, ad iriure scripta eruditi nam. Quo semper noluisse consectetuer te. Probatus mediocritatem necessitatibus ne pro. Vix ne consul soluta dissentiet.
+
+ Vix augue vivendum sadipscing ei, diam elaboraret scribentur no mea. Te pri nullam reprehendunt, ornatus maiorum ne qui. Et mei accusam singulis. Et est intellegat posidonium, no usu purto bonorum facilisi. Saperet cotidieque eu mel.
+
+ Nonumy pericula vis id, illum nobis aliquando cum ei, altera aeterno mediocritatem pro ea. At duo quaeque dolorem. Vidit tantas ea vim, quis feugiat delenit vix ad, te per choro omnesque. Eum id duis facilisis. Purto intellegat duo no, ne ipsum praesent moderatius vis, et meliore scriptorem vim.
+
+<!--more-->
+<table style="clear: both; margin: 14px; float: left;"><colgroup span="5"></colgroup>
+<tbody>
+<tr style="height: 20px;">
+<th></th>
+<th style="text-align: center;" colspan="2">Lorem ipsum</th>
+<th style="text-align: center;" colspan="2">Lorem ipsum</th>
+</tr>
+<tr>
+<th>Requirements</th>
+<th>Minimums</th>
+<th style="text-align: center; margin-right: 15px;">Status</th>
+<th style="padding: 0 8px;">Minimums</th>
+<th style="text-align: center;">Status</th>
+</tr>
+<tr>
+<td>Age</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td style="padding: 0 8px;">Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+</tr>
+<tr>
+<td>Total</td>
+<td>Lorem ipsum</td>
+<td style="color: #9c0006; text-align: center; background: #FFC7CE;">100%</td>
+<td style="padding: 0 8px;">Lorem ipsum</td>
+<td style="color: #9c0006; text-align: center; background: #FFC7CE;">100%</td>
+</tr>
+<tr>
+<td>Education</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td></td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">n/a</td>
+</tr>
+<tr>
+<td>Concentration</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td></td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">n/a</td>
+</tr>
+<tr>
+<td>Certification</td>
+<td>Lorem ipsum</td>
+<td style="color: #9c0006; text-align: center; background: #FFC7CE;">No</td>
+<td></td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">n/a</td>
+</tr>
+<tr>
+<td>Recognized Coursework</td>
+<td>Lorem ipsum</td>
+<td style="color: #9c6500; text-align: center; background: #FFEB9C;">TBD</td>
+<td></td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">n/a</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td></td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">n/a</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td></td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">n/a</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td></td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">n/a</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td></td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">n/a</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #9c0006; text-align: center; background: #FFC7CE;">80%</td>
+<td style="padding: 0 8px;">200 hours</td>
+<td style="color: #9c0006; text-align: center; background: #FFC7CE;">80%</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">by credit</td>
+<td style="padding: 0 8px;">100 hours</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">by credit</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #9c0006; text-align: center; background: #FFC7CE;">60%</td>
+<td style="padding: 0 8px;">50 hours</td>
+<td style="color: #9c0006; text-align: center; background: #FFC7CE;">60%</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">by credit</td>
+<td style="padding: 0 8px;">75 hours</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">by credit</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td style="padding: 0 8px;">250 hours</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+</tr>
+<tr>
+<td style="padding-right: 8px;">Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td style="padding: 0 8px;">100 hours</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td style="padding: 0 8px;">25 hours</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td style="padding-right: 8px;">Effective Aug 2014</td>
+<td style="color: #9c6500; text-align: center; background: #FFEB9C;">n/a</td>
+<td></td>
+<td style="color: #9c6500; text-align: center; background: #FFEB9C;">n/a</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #9c6500; text-align: center; background: #FFEB9C;">Dec \'14</td>
+<td></td>
+<td style="color: #9c6500; text-align: center; background: #FFEB9C;">Dec \'14</td>
+</tr>
+<tr>
+<td>Lorem ipsum</td>
+<td>Lorem ipsum</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+<td style="padding: 0 8px;">2nd Class</td>
+<td style="color: #006100; text-align: center; background: #C6EFCE;">Yes</td>
+</tr>
+</tbody>
+</table>
+Tota offendit sea et, ne vim dicam admodum blandit. No vix <abbr>quas</abbr> nusquam. Putant scripta fierent mei ea. Eum ei putant persius probatus, quo ea wisi electram.
+
+ Eu illud definiebas honestatis sit. Eam exerci deseruisse ei, ex cum erant tacimates. Enim eros id vel, vidisse abhorreant cu eum. Et saperet appellantur est, eum esse soluta recusabo ad. Eam malis sensibus ea.
+
+ Exerci scripta at est. His ei nostrum perfecto, accumsan eligendi tincidunt an eum. Ius tempor aperiam ea, mei autem lorem eu. Vis duis modus ornatus no, alia malis ornatus mea et, ea eros probatus qui.
+
+ Mazim assentior mel te, rebum periculis constituam nec ut. In ferri admodum deleniti eum, nam te quas nominati appellantur. Est at erat pertinax, no sit nulla placerat. Munere euripidis ad has.
+
+ Magna graeco oblique vel ea, no movet aliquando mea. Eum no sadipscing delicatissimi, doctus consequuntur eu sed. Sed in persius eleifend, regione euismod no per. Ei pri vivendum gubergren, vix at eligendi invenire aliquando, brute malorum id usu. Cum tantas prodesset consequuntur ei, eum liberavisse delicatissimi vituperatoribus at.
+
+ Cu bonorum graecis ius. Duo id ancillae probatus. Tota latine pri an. Cum ei iudico semper. Eum in blandit voluptaria.
+
+ Illud debet vitae ex vis numquam.'),
+
+/* DIVIDER */
+
+);}?>
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunktestsphpunitincludesutilsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/includes/utils.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/includes/utils.php 2015-10-02 04:15:12 UTC (rev 34760)
+++ trunk/tests/phpunit/includes/utils.php 2015-10-02 04:25:40 UTC (rev 34761)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -390,3 +390,59 @@
</span><span class="cx" style="display: block; padding: 0 10px"> return call_user_func_array( array( $this, $name ), $arguments );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+/**
+ * Determine approximate backtrack count when running PCRE.
+ *
+ * @return int The backtrack count.
+ */
+function benchmark_pcre_backtracking( $pattern, $subject, $strategy ) {
+ $saved_config = ini_get( 'pcre.backtrack_limit' );
+
+ // Attempt to prevent PHP crashes. Adjust these lower when needed.
+ if ( version_compare( phpversion(), '5.4.8', '>' ) ) {
+ $limit = 1000000;
+ } else {
+ $limit = 20000; // 20,000 is a reasonable upper limit, but see also https://core.trac.wordpress.org/ticket/29557#comment:10
+ }
+
+ // Start with small numbers, so if a crash is encountered at higher numbers we can still debug the problem.
+ for( $i = 4; $i <= $limit; $i *= 2 ) {
+
+ ini_set( 'pcre.backtrack_limit', $i );
+
+ switch( $strategy ) {
+ case 'split':
+ preg_split( $pattern, $subject );
+ break;
+ case 'match':
+ preg_match( $pattern, $subject );
+ break;
+ case 'match_all':
+ preg_match_all( $pattern, $subject );
+ break;
+ }
+
+ ini_set( 'pcre.backtrack_limit', $saved_config );
+
+ switch( preg_last_error() ) {
+ case PREG_NO_ERROR:
+ return $i;
+ case PREG_BACKTRACK_LIMIT_ERROR:
+ continue;
+ case PREG_RECURSION_LIMIT_ERROR:
+ trigger_error('PCRE recursion limit encountered before backtrack limit.');
+ break;
+ case PREG_BAD_UTF8_ERROR:
+ trigger_error('UTF-8 error during PCRE benchmark.');
+ break;
+ case PREG_INTERNAL_ERROR:
+ trigger_error('Internal error during PCRE benchmark.');
+ break;
+ default:
+ trigger_error('Unexpected error during PCRE benchmark.');
+ }
+ }
+
+ return $i;
+}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunktestsphpunittestsformattingWPTexturizephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/formatting/WPTexturize.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/formatting/WPTexturize.php 2015-10-02 04:15:12 UTC (rev 34760)
+++ trunk/tests/phpunit/tests/formatting/WPTexturize.php 2015-10-02 04:25:40 UTC (rev 34761)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2048,4 +2048,29 @@
</span><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+ /**
+ * Automated performance testing of the main regex.
+ *
+ * @dataProvider data_whole_posts
+ */
+ function test_pcre_performance( $input ) {
+ global $shortcode_tags;
+
+ // With Shortcodes Disabled
+ $regex = _get_wptexturize_split_regex( );
+ $result = benchmark_pcre_backtracking( $regex, $input, 'split' );
+ $this->assertLessThan( 200, $result );
+
+ // With Shortcodes Enabled
+ $shortcode_regex = _get_wptexturize_shortcode_regex( array_keys( $shortcode_tags ) );
+ $regex = _get_wptexturize_split_regex( $shortcode_regex );
+ $result = benchmark_pcre_backtracking( $regex, $input, 'split' );
+ return $this->assertLessThan( 200, $result );
+ }
+
+ function data_whole_posts() {
+ require_once( DIR_TESTDATA . '/formatting/whole-posts.php' );
+ return data_whole_posts();
+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunktestsphpunittestsshortcodephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/shortcode.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/shortcode.php 2015-10-02 04:15:12 UTC (rev 34760)
+++ trunk/tests/phpunit/tests/shortcode.php 2015-10-02 04:25:40 UTC (rev 34761)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -616,4 +616,20 @@
</span><span class="cx" style="display: block; padding: 0 10px"> ),
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+ /**
+ * Automated performance testing of the main regex.
+ *
+ * @dataProvider data_whole_posts
+ */
+ function test_pcre_performance( $input ) {
+ $regex = '/' . get_shortcode_regex() . '/';
+ $result = benchmark_pcre_backtracking( $regex, $input, 'match_all' );
+ return $this->assertLessThan( 200, $result );
+ }
+
+ function data_whole_posts() {
+ require_once( DIR_TESTDATA . '/formatting/whole-posts.php' );
+ return data_whole_posts();
+ }
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre>
</div>
</div>
</body>
</html>