続 xinclude-scanner

id:y-hamigaki:20060706 の続きです。
XIncludeの依存関係はboostbook.jamのxinclude-scannerで行われています。

class xinclude-scanner : scanner 
{
  // 略

  rule pattern ( )
  {
    return "xi:include[ ]*href=\"([^\"]*)\"" ;
  }

  // 略
}

単純なパターンマッチを行っているだけです。
これを利用して、

<library name="Audio" dirname="audio" xmlns:xi="http://www.w3.org/2001/XInclude" id="audio">
  <xi:include href="introduction.xml"/>
</library>

<library name="Audio" dirname="audio" xmlns:XI="http://www.w3.org/2001/XInclude" id="audio">
  <!-- xi:include href="../libs/audio/doc/introduction.xml" -->
  <XI:include href="introduction.xml"/>
</library>

に変えて、XIncludeとbjamに別のパスを与えてみたところ、うまくいきました。
一旦この細工を施すと、それ以降のXIncludeは正しく解釈されるようです。

ディレクトリ構造は、

  • hamigaki
    • doc/
      • src/
      • Jamfile.v2
    • libs/
      • audio/
        • doc/
          • src/

なので、introduction.xmlを参照する起点のディレクトリがhamigaki/docになっているようです。
Jamfileのあるディレクトリより上に行くのがマズいんですかねぇ。