Deployment Architecture

how can I upload code to Answers without MarkDown mangling it?

V_at_Splunk
Splunk Employee
Splunk Employee

Not technically a question, but pretty sure will be helpful to many. If not helpful to you, please don't upvote.


MarkDown (the Wiki engine used on this site) respects internal (between tokens on a line) spaces within a block delimited by pre tags; but blithely interprets underscores, asterisks and less-than signs as markup. Thus rendering your shell script or Python snippet into a dire soup. The script below takes your original code, and outputs a text file with all the troublesome chars substituted to evade MarkDown's bumbling "assistance"; just cat the result, copy, and paste here within pre tags.

Here's how you use the script (say we named it ready-code-for-SplunkAnswers.sh😞


$ ready-code-for-SplunkAnswers.sh your-script.py
Result in: readied--your-script.py.txt


And here's the script:


#!/bin/bash
# Vainstein K 14nov2013
­
die () {
echo "(exit=$?) $@" >&2 && exit 42
}
failed () {
die 'Failed to:' $@
}
­
[ $# -ne 1 ] && die 'USAGE: <fileToReady>'
readonly original=$1
[ -e $original ] || die "File '$original' not found."
readonly readied=readied--$original.txt
cp -p $original $readied || failed "overwrite $readied"
chmod u+w $readied || failed "make writable $readied"
­
# We have to distinguish #s originally there, from the #s that we'll insert as part of escape codes.
readonly fauxOctothorpe='@XXXoctothorpeXXX@'
sed -i 's/#/'$fauxOctothorpe'/g' $readied || failed 'replace: # (phase 1 of 2)'
# Same for &.
readonly fauxAmpersand='@XXXampersandXXX@'
sed -i 's/&/'$fauxAmpersand'/g' $readied || failed 'replace: & (phase 1 of 2)'
­
sed -i 's/`/\&#96;/g' $readied || failed 'replace: `'
sed -i 's/_/\&#95;/g' $readied || failed 'replace: _'
sed -i 's/\*/\&#42;/g' $readied || failed 'replace: *'
sed -i 's/</\&lt;/g' $readied || failed 'replace: <'
sed -i 's/\\/\&#92;/g' $readied || failed 'replace: \\'
­
sed -i 's/'$fauxOctothorpe'/\&#35;/g' $readied || failed 'replace: # (phase 2 of 2)'
sed -i 's/'$fauxAmpersand'/\&#38;/g' $readied || failed 'replace: & (phase 2 of 2)'
­
# MarkDown is too stupid to leave whitespace-only lines alone; so we insert a barely-visible symbol on such.
sed -i 's/^[ \t]*$/\&shy;/' $readied || failed 'replace: whitespace-only line'
­
echo "Result in: $readied"


Naturally enough, I prepared this script for upload using... itself.


;-)

Updated: be sure to read discussion with Ayn, in comments below.

1 Solution

V_at_Splunk
Splunk Employee
Splunk Employee

hi Ayn,

OK. Let's try this silly, yet valid, shell script, each line offset by 4 leading spaces:

#!/bin/bash
two=2 three=3 four=4 # and 5 is right out
printf "Should print 24: %d\n" $((two*three*four))
echo "The hour is`date | sed -r 's/^.*( [0-9]{2}):.*/\1/'`, and all is well."
echo 'To look for "pre" preceded immediately by a less-than, try this RE: <pre\>'

And now transformed with ready-code-for-SplunkAnswers.sh, and enclosed in pre tags:


#!/bin/bash
two=2 three=3 four=4 # and 5 is right out
printf "Should print 24: %d\n" $((two*three*four))
echo "The hour is`date | sed -r 's/^.*( [0-9]{2}):.*/\1/'`, and all is well."
echo 'To look for "pre" preceded immediately by a less-than, try this RE: <pre\>'

You're right.

View solution in original post

V_at_Splunk
Splunk Employee
Splunk Employee

hi Ayn,

OK. Let's try this silly, yet valid, shell script, each line offset by 4 leading spaces:

#!/bin/bash
two=2 three=3 four=4 # and 5 is right out
printf "Should print 24: %d\n" $((two*three*four))
echo "The hour is`date | sed -r 's/^.*( [0-9]{2}):.*/\1/'`, and all is well."
echo 'To look for "pre" preceded immediately by a less-than, try this RE: <pre\>'

And now transformed with ready-code-for-SplunkAnswers.sh, and enclosed in pre tags:


#!/bin/bash
two=2 three=3 four=4 # and 5 is right out
printf "Should print 24: %d\n" $((two*three*four))
echo "The hour is`date | sed -r 's/^.*( [0-9]{2}):.*/\1/'`, and all is well."
echo 'To look for "pre" preceded immediately by a less-than, try this RE: <pre\>'

You're right.

Ayn
Legend

Correct. 🙂

0 Karma

V_at_Splunk
Splunk Employee
Splunk Employee

hi Ayn,

My solution is still the only one for code snippets which are not "block-quoted": if you want a single-line code snippet to not break up your paragraph, the four-spaces approach obviously won't do.

0 Karma

Ayn
Legend

Almost want to say 'sorry' because that's a nice script after all 🙂

0 Karma

Ayn
Legend

What about simply prepending each line in a code block with 4 spaces? That's how code is entered and it hasn't failed me so far...

0 Karma

jrodman
Splunk Employee
Splunk Employee

You'd sure think the code buttton in the editor here would work. Sad that it doesn't.

0 Karma
Get Updates on the Splunk Community!

Index This | I am a number, but when you add ‘G’ to me, I go away. What number am I?

March 2024 Edition Hayyy Splunk Education Enthusiasts and the Eternally Curious!  We’re back with another ...

What’s New in Splunk App for PCI Compliance 5.3.1?

The Splunk App for PCI Compliance allows customers to extend the power of their existing Splunk solution with ...

Extending Observability Content to Splunk Cloud

Register to join us !   In this Extending Observability Content to Splunk Cloud Tech Talk, you'll see how to ...