Как сопоставить символы новой строки в GNU M4 _properly_ - PullRequest
1 голос
/ 20 июня 2010

Я пытаюсь создать макрос, заменяющий символы новой строки.

Моя первая попытка была:

    define(`m4_pascal_str',`
     patsubst(`$1',`^\(.*\)$',`\1++')
')

m4_pascal_str(`

11

22 33 44
')

define(zz,`

11

22 33 44
')
m4_pascal_str(`zz')

Это дает правильный ответ, когда не используется промежуточный макрос, а в противном случае соответствует только последнему символу новой строки. Смотрите результаты ниже:

 ++

++
11++
++
22 33 44++

++

11

22 33 44
++

Тогда я нашел похожий вопрос: в patsubst m4, как заменить символы новой строки пробелами?

Итак, я только что сделал:

define(`m4_pascal_str',`
     patsubst(`$1',`
',`++')
')

m4_pascal_str(`

11

22 33 44
')

define(zz,`

11

22 33 44
')
m4_pascal_str(`zz')

Даёт:

 ++++11++++22 33 44++

11

22 33 44

Последняя альтернатива страдает той же проблемой. Есть предложения?

1 Ответ

2 голосов
/ 03 августа 2010

Для последней строки попробуйте удалить кавычки вокруг zz . Когда я сделал это, я получил одинаковый результат для обоих вызовов m4_pascal_str:

     ++
++
11++
++
22 33 44++
++




     ++
++
11++
++
22 33 44++
++
...