Встроенный пользовательский макрос слияния

Как создать макрос слияния с телом, который производит встроенный вывод? Следующий макрос:

## @noparams
<font color="red">$body</font>

применяется к этому тексту

Before macro [macro starts here]macro body[macro ends here] after macro.

Создаст этот HTML-код:

<p>Before macro </p>
<font color="red">macro body</font>
<p>after macro.</p>

Как удалить теги <p></p>?


person MrTJ    schedule 24.04.2012    source источник


Ответы (1)


Это проблема с Confluence. Чтобы избежать этого, вы должны использовать вывод html. Если тело или ваш макрос содержат вики-разметку, вам придется визуализировать ее вручную. Мой обходной путь выглядит следующим образом:

## Use this macro to avoid new lines:
#macro(doNothing)#end
##
## (Do stuff with body in wiki format, if appropriate)
##
## Convert to html and remove paragraph tags:
#set($renderedhtml = "")
#if ($body && ($body.length()>0))
  #set($globalHelper = $action.getHelper())
  #set($renderedhtml = $globalHelper.renderConfluenceMacro("$body").replaceAll("</?[pP]>",""))
#end
##
## (Do stuff with body in html format, if appropriate)
##
## Output text:
$renderedhtml#doNothing()

РЕДАКТИРОВАТЬ: вам нужно будет изменить регулярное выражение, если в вашем макросе есть теги p, которые вы хотите сохранить. Регулярное выражение в приведенном выше коде удалит ВСЕ теги p.

person boileau    schedule 25.04.2012
comment
Спасибо за ваш ответ. К сожалению, моя проблема, по-видимому, заключается не в новых абзацах в коде, сгенерированном моим макросом, а в том, что слияние вставляет </p> до и <p> после моего макроса, встраивая предыдущий и последующий текст в новые абзацы. Могу ли я отменить также эти теги? - person MrTJ; 26.04.2012
comment
Это именно то, что делает шаблон выше. Попробуй. - person boileau; 26.04.2012
comment
Не могли бы вы объяснить, как render by hand? - person mrtsherman; 01.08.2012
comment
Я закончил тем, что основывал что-то на вашем коде. #set($body = "[link|doc:mypage]"). Очевидно, что это перезаписывает тело, но в первую очередь макрос не должен иметь тела. - person mrtsherman; 01.08.2012
comment
Под ручным рендерингом я просто подразумеваю то, что я делаю в сценарии. На самом деле идея состоит в том, что вы устанавливаете для тела любое форматирование вики, которое вы хотите отобразить, где оно говорит (Делайте что-то с телом в формате вики, если это уместно), поэтому ваше использование идеально соответствует моему намерению. - person boileau; 08.08.2012
comment
Это одна из нескольких проблем с новым редактором Confluence после того, как в Confluence V4 была удалена вики-разметка , которая с тех пор было решено в Confluence 5.4. - person Underverse; 12.05.2015