tohokuaikiのチラシの裏

技術的ネタとか。

Confluence4のユーザーマクロの中でユーザーマクロを使う方法を知るために、参考にするといいこと

Confluence3だと、

{section}
  {column}
    $body
  {column}
  {column:width=300px}
    {panel}
      *Contents:*
      {toc:maxLevel=3}
    {panel}
  {column}
{section}

とかできたけど、Confluence4だとそもそもWikiタグが効かないからこれだとダメ。

ということで、Confluence4の持ってるXMLでそのまま書く

XMLというか、XHTMLというか。色々と情報を見つけていった。Atlassianのドキュメント
Writing User Macros - Confluence 4.3 - Atlassian Documentation
によると、

みたいに書けばいいらしい。でも、詳細がよく分からない。

で、色々と調べて
Possible to Call User Macro inside another User Macro? - Atlassian Answers
Wiki markup in user macro with Confluence 4.0 - Stack Overflow
あたりを経由して

How do I write a user macro with "sections" and "panels" using the 4.0 HTML template? - Atlassian Answers
というのを見つけた。これによると、任意のWikiタグをConfluence4で入力してその結果のXMLが取得できるらしい。

Wikiタグから最終取得XMLを得る方法

組み込みのマクロとか、他のプラグインのマクロを参考にすると良い。

1. ページの編集画面から「挿入」→「Wikiのマークアップ」

2. コンテンツ内に普通にConfluence3時代のWikiマークアップを放り込む

3. ページを保存して、「ツール」→「保存形式を表示」をクリックする

こうすると、

{section}
  {column}
    $body
  {column}
  {column:width=300px}
    {panel}
      *Contents:*
      {toc:maxLevel=3}
    {panel}
  {column}
{section}

のWikiマクロは

<ac:macro ac:name="section">
    <ac:rich-text-body>
        <ac:macro ac:name="column">
            <ac:rich-text-body>
                <p>$body</p>
            </ac:rich-text-body>
        </ac:macro>
        <ac:macro ac:name="column">
            <ac:parameter ac:name="width">300px</ac:parameter>
            <ac:rich-text-body>
                <ac:macro ac:name="panel">
                    <ac:rich-text-body>
                        <p><strong>Contents:</strong></p>
                        <ac:macro ac:name="toc">
                            <ac:parameter ac:name="maxLevel">3</ac:parameter>
                        </ac:macro>
                    </ac:rich-text-body>
                </ac:macro>
            </ac:rich-text-body>
        </ac:macro>
    </ac:rich-text-body>
</ac:macro>

に変換されているのが確認できる。