On 04/09/2015 05:08 AM, Pierre Lindenbaum wrote: > cross-posted on SO: http://stackoverflow.com/questions/29522699 > > > A simple/naive m4 question, but I cannot find the correct answer. > I'd like to print a markdown header starting/ending a code section: > > ``` > echo Hello > ``` > > How do I create a GNU M4 macro containing the 3 backticks ? something like > > define(`md_code',````') > md_code > echo Hello > md_code
changequote is your friend. This will do it: define(`md_code', changequote([, ])[changequote([,])```changequote(`,')]changequote(`,')) I have to change quotes twice: once around the macro definition, since the definition itself intends to use ` in an unbalanced manner; and again in the macro expansion, since the expansion will output ` in an unbalanced manner; for each changed quote, the original quotes must be restored. This assumes that the default quoting stays at ` ' throughout the m4 run. Although in your case, I'd recommend using changequote up front to something else, and globally write your input under those quoting rules instead of the default ` ' quoting rules. Remember that autoconf intentionally went with [ ] as the quoting characters, because they were much likely to be balanced in output, as opposed to ` and ' not occurring in balanced pairs in shell scripts. In fact, choosing 2- or 3-byte quoting strings is even less ambiguous, although it then requires more typing. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
