3 added 1928 characters in body
source | link

Retina, 51 47 bytes

Happy birthday from a fellow string-processing language!

Byte count assumes ISO 8859-1 encoding.

$
$.`$* 
$
¶$`
O$^r`.\G

;{*`.¶

(\S.*).¶.
 $1¶

Try it online!

Explanation

$
$.`$* 

This appends n spaces (where n is the string length), by matching the end of the string, retrieving the length of the string with $.`, and repeating a space that many times with $*.

$
¶$`

We duplicate the entire string (separated by a linefeed), by matching the end of the string again and inserting the string itself with $`.

O$^r`.\G

This reverses the second line by matching from right-to-left (r), then matching one character at a time (.) but making sure that they're all adjacent (\G). This way, the matches can't get past the linefeed. This is then used in a sort-stage. By using the sort-by mode ($) but replacing each match with an empty string, no actual sorting is done. But due to the ^ option, the matches are reversed at the end, reversing the entire second line.

;{*`.¶

This stage is for output and also affects the rest of the program. { wraps the remaining stages in a loop which is repeated until those stages fail to change the string (which will happen because the last stage won't match any more). The ; disables output at the end of the program. The * turns this stage into a dry-run which means that the stage is processed and the result is printed, but afterwards the previous string is restored.

The stage itself simply removes a linefeed and the preceding character. Which gives us one line of the desired output (starting with the first line).

(\S.*).¶.
 $1¶

Finally, this stage turns each line into the next. This is done by inserting a space in front of the first non-space character, removing the last character on the first line, as well as the first character on the second line. This process stops once there is only one non-space character left on the first line, which corresponds to the last line of the output.

Retina, 51 47 bytes

Happy birthday from a fellow string-processing language!

Byte count assumes ISO 8859-1 encoding.

$
$.`$* 
$
¶$`
O$^r`.\G

;{*`.¶

(\S.*).¶.
 $1¶

Try it online!

Retina, 51 47 bytes

Happy birthday from a fellow string-processing language!

Byte count assumes ISO 8859-1 encoding.

$
$.`$* 
$
¶$`
O$^r`.\G

;{*`.¶

(\S.*).¶.
 $1¶

Try it online!

Explanation

$
$.`$* 

This appends n spaces (where n is the string length), by matching the end of the string, retrieving the length of the string with $.`, and repeating a space that many times with $*.

$
¶$`

We duplicate the entire string (separated by a linefeed), by matching the end of the string again and inserting the string itself with $`.

O$^r`.\G

This reverses the second line by matching from right-to-left (r), then matching one character at a time (.) but making sure that they're all adjacent (\G). This way, the matches can't get past the linefeed. This is then used in a sort-stage. By using the sort-by mode ($) but replacing each match with an empty string, no actual sorting is done. But due to the ^ option, the matches are reversed at the end, reversing the entire second line.

;{*`.¶

This stage is for output and also affects the rest of the program. { wraps the remaining stages in a loop which is repeated until those stages fail to change the string (which will happen because the last stage won't match any more). The ; disables output at the end of the program. The * turns this stage into a dry-run which means that the stage is processed and the result is printed, but afterwards the previous string is restored.

The stage itself simply removes a linefeed and the preceding character. Which gives us one line of the desired output (starting with the first line).

(\S.*).¶.
 $1¶

Finally, this stage turns each line into the next. This is done by inserting a space in front of the first non-space character, removing the last character on the first line, as well as the first character on the second line. This process stops once there is only one non-space character left on the first line, which corresponds to the last line of the output.

2 added 36 characters in body
source | link

Retina, 5151 47 bytes

Happy birthday from a fellow string-processing language!

Byte count assumes ISO 8859-1 encoding.

$
$.`$* 
+`(.*\S.*).$
$&¶ $1
%(`$
¶$`
O$^r`.\G

;{*`.¶

(\S.*).¶.
 $1¶

Try it online!Try it online!

Retina, 51 bytes

Happy birthday from a fellow string-processing language!

Byte count assumes ISO 8859-1 encoding.

$
$.`$* 
+`(.*\S.*).$
$&¶ $1
%(`$
¶$`
O$^r`.\G

¶.

Try it online!

Retina, 51 47 bytes

Happy birthday from a fellow string-processing language!

Byte count assumes ISO 8859-1 encoding.

$
$.`$* 
$
¶$`
O$^r`.\G

;{*`.¶

(\S.*).¶.
 $1¶

Try it online!

1
source | link

Retina, 51 bytes

Happy birthday from a fellow string-processing language!

Byte count assumes ISO 8859-1 encoding.

$
$.`$* 
+`(.*\S.*).$
$&¶ $1
%(`$
¶$`
O$^r`.\G

¶.

Try it online!