Page MenuHomePhorge

D25436.1734630188.diff
No OneTemporary

D25436.1734630188.diff

diff --git a/src/utils/PhutilCowsay.php b/src/utils/PhutilCowsay.php
--- a/src/utils/PhutilCowsay.php
+++ b/src/utils/PhutilCowsay.php
@@ -41,34 +41,29 @@
$template = $this->template;
// Real ".cow" files are Perl scripts which define a variable called
- // "$the_cow". We aren't going to interpret Perl, so strip all this stuff
- // (and any comments in the file) away.
- $template = phutil_split_lines($template, true);
- $keep = array();
- $is_perl_cowfile = false;
- foreach ($template as $key => $line) {
- if (preg_match('/^#/', $line)) {
- continue;
- }
- if (preg_match('/^\s*\\$the_cow/', $line)) {
- $is_perl_cowfile = true;
- continue;
- }
- if (preg_match('/^\s*EOC\s*$/', $line)) {
- continue;
- }
- $keep[] = $line;
- }
- $template = implode('', $keep);
-
- // Original .cow files are perl scripts which contain escaped sequences.
- // We attempt to unescape here by replacing any character preceded by a
- // backslash/escape with just that character.
- if ($is_perl_cowfile) {
+ // "$the_cow". We aren't going to interpret Perl, so just get everything
+ // between the EOC (End Of Cow) tokens. The initial EOC might be in
+ // quotes, and might have a semicolon.
+ // We apply regexp modifiers
+ // * 's' to make . match newlines within the EOC ... EOC block
+ // * 'm' so we can use ^ to match start of line within the multiline string
+ $matches = null;
+ if (
+ preg_match('/\$the_cow/', $template) &&
+ preg_match('/EOC[\'"]?;?.*?^(.*?)^EOC/sm', $template, $matches)
+ ) {
+ $template = $matches[1];
+
+ // Original .cow files are perl scripts which contain escaped sequences.
+ // We attempt to unescape here by replacing any character preceded by a
+ // backslash/escape with just that character.
$template = preg_replace(
'/\\\\(.)/',
'$1',
$template);
+ } else {
+ // Text template. Just strip away comments.
+ $template = preg_replace('/^#.*$/', '', $template);
}
$token_patterns = array(
diff --git a/src/utils/__tests__/cowsay/cube_perl.test b/src/utils/__tests__/cowsay/cube_perl.test
--- a/src/utils/__tests__/cowsay/cube_perl.test
+++ b/src/utils/__tests__/cowsay/cube_perl.test
@@ -1,5 +1,5 @@
# test case for original perl-script cowfile
-$the_cow =
+$the_cow = <<EOC
$thoughts
$thoughts
/---\\__/---\\\\
@@ -9,6 +9,7 @@
/ ..--.. \\\\
| \\ .... / ||
\\---/--\\---//
+EOC
~~~~~~~~~~
{
"text": "I made a friend!",

File Metadata

Mime Type
text/plain
Expires
Thu, Dec 19, 17:43 (7 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1015216
Default Alt Text
D25436.1734630188.diff (2 KB)

Event Timeline