Как добавить префикс к каждой строке с m4

Обрабатываю программный файл (по сути ассемблер) с m4. Я могу подавить строки, используя

changequote({,})dnl
define({_SUPPRESSED}, )dnl
_SUPPRESSED({
jan
piet
})

Теперь я хочу изменить строки на комментарий ассемблера, а не просто подавить их:

; jan
; piet

Возможно ли это с m4, например. с помощью патсубста? Как это сделать?

Примечание. Несмотря на многочисленные эксперименты, мне это не удалось. Например. следующее не удается.

define({pie}, {patsubst($1,{\n},{\n;})})

person Albert van der Horst    schedule 07.11.2017    source источник


Ответы (1)


define(`pie',`patsubst(`$1',`^.*$',`; &')')
pie(`jan
piet')

Обратите внимание на разделители строк вокруг patsubst (в определении pie)! Без него m4 расширяет patsubst при чтении (не при использовании) определения pie. С разделителями это будет строка и расширяться только при вызове макроса pie.

Конечно, вы можете использовать { и } в качестве разделителей строк.

person uzsolt    schedule 07.11.2017
comment
Это сработало, но заменяет все строки на ; &. Если в моем оригинале я заменю \n на ^, все строки превратятся в комментарии, как и предполагалось. Кавычки вокруг $1 также важны, иначе строки комментариев не могут содержать запятые,. - person Albert van der Horst; 07.11.2017
comment
Да, замена ^ проще :) - person uzsolt; 07.11.2017