Index > MIF ファイル中から特定のマーカーだけを取り出す(FrameMaker,RoboHelp)
Wed, April 21, 2010

MIF ファイル中から特定のマーカーだけを取り出す(FrameMaker,RoboHelp)

特定の種類のヘルプマーカを標準出力する方法のメモ

経緯というかこちらの事情

RoboHelpを使えば、FrameMakerのドキュメントからヘルプを作り出すことできる。 ただし、通常印刷用に作成されたドキュメントをヘルプかする場合は、 トピックの区切りの指定が問題になる。

というのは、もし FMファイル一つが一つのヘルプトピックに 対応していれば問題はないのだが、 通常はFMファイル一つに複数のヘルプトピックが含まれる形をとる。

そのときのヘルプトピックの区切りの指定方法として いくつか方法があるのだが、ひとつは、 FM上でヘルプトピック区切り専用のマーカーの種類を作成する方法。 この方法では、ヘルプにしたときのファイル名とトピック名を 同時に指定することができ便利。 (ただし、こちらの環境では、RoboHelpの説明どおり機能していないけど)

さて、やっと本題だが、そうやって一つのファイルに複数のヘルプトピックが 存在するために、マーカーを入れた場合に、 RoboHelp側で変換すると、トピックはファイルないの出現順にはならんでくれない。

そこで手作業でヘルプトピックを入れ替える必要があるのだが、 このとき使うツールのメモす。

procHelpTopicLine.groovy

このコードはヘルプトピック用のマーカーの種類名が help_topic に決めうちしてあります。 (適宜かきかえて使用する必要があります。)

def BR=System.getProperty('line.separator')

if( args.length<2 ){
    System.exit(0)
}

def inf  = new File(args[0])
def outf = new File(args[1])

def r = inf.newReader('UTF-8')
def w = outf.newWriter('UTF-8')

r.eachLine{ line->
    w.print( line )

    def m = (line =~ /<MTypeName `help_topic'>/)
    if( m.find()==false ){
        w.print( BR )
    }
}

r.close()
w.close()

使い方

$ groovy procHelpTopicLine foo1.mif tmp.txt | cat tmp.txt | grep help_topic | grep MText

補足

このコードは該当部分が以下のようになっていることを前提にしています。

<Marker
 <MType 11>
 <MTypeName `help_topic'>
 <MText `topic1 | Usage'>
 <MCurrPage `2'>
 <Unique 1075396>
# end of Marker

MTypeName `help_topic' が出現する次の行に必要な情報があると仮定した実装です。

listHelpTopic.sh

複数の fm ファイルがあった場合に便利なシェルスクリプト。

topiclist=topiclist.txt

echo "" > $topiclist

list="foo1.mif foo2.mif foo3.mif"

for i in $list
do
    echo $i
    echo "----------------------------------------------------" >> $topiclist
    echo $i  >> $topiclist
    echo "----------------------------------------------------" >> $topiclist
    groovy procHelpTopicLine $i 1.mif
    cat 1.mif | grep help_topic | grep MText >> $topiclist
done

cat $topiclist
 Twitter
follow me on Twitter
 Categories