Docbook XML文件前置处理Perl程序,解决回车,空格等等影响FOP排版输出的问题

Docbook的中文问题果然层出不穷,现在都有点后悔采用Docbook格式写论文了,下面一段Perl程序通过删除<book></book>标签下的所有空格,试图解决 FOP中文回车、空格影响排版输出的问题。

不过即使这样,FOP还是会傻傻的把中文标点放在行首,这个问题挺麻烦的,可能是<xsl:param name="hyphenate">false</xsl:param>惹得祸,但是如果启用docbook-xsl又会报Couldn't find hyphenation pattern错……

不管如何,现在起码我不用把<para></para>一段文字写成一行了, Oxygen XML 编辑器只要启用text wrap自动折行就不再同时提供代码折叠功能,而没有代码折叠,又必须采用<!ENTITY preface SYSTEM "preface.xml">来管理长文档,一旦采用,preface.xml就作为实体,做不到实时文件架构验证了,我肯定不愿意放弃Oxygen XML Editor的实时验证文档功能,那就只有采用新的XInclude方法了,但是FOP自带的Xalan 2.7.0 XML XSLT引擎目前 似乎还没开始支持这个XInclude功能……

# !/bin/env perl
use  strict;
use  warnings;
use  utf8;


open (F ,   $ARGV [ 0 ]) or  die   " Can't open file $ARGV[0]: $!\n " ;


my   $in_book   =   0 ;
  

READLINE :
while  ( < F > )
{
  

if  ( $in_book   ==   0 )
  {
      

if ( /< book >/ )
      {
          

$in_book   =   1 ;
      }
      s

# http://www.docbook.org/xml/(.*)/docbookx\.dtd#../docbook-xml-$1/docbookx\.dtd#;
       print   $_ ;
  }
    

else  {
      s
/\ s +// g;
      
print   $_ ;
    }
}






丁丁 2007-02-27 04:56 发表评论






你可能感兴趣的:(xml,F#,perl,XSL)