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 MarkerMTypeName `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