X-Git-Url: http://git.projectaon.org/?p=project-aon.git;a=blobdiff_plain;f=common%2Fscripts%2Fgbtoxhtml-simple.pl;fp=common%2Fscripts%2Fgbtoxhtml-simple.pl;h=fc1df5334efcc7962458a5f669e63ba3d8ea1e0e;hp=0000000000000000000000000000000000000000;hb=f4bdee5083ca9a72713637e1e979aa183e06faea;hpb=97545603aea8298f1eceb604ff65085cc7adfced diff --git a/common/scripts/gbtoxhtml-simple.pl b/common/scripts/gbtoxhtml-simple.pl new file mode 100755 index 0000000..fc1df53 --- /dev/null +++ b/common/scripts/gbtoxhtml-simple.pl @@ -0,0 +1,128 @@ +#!/usr/bin/perl -w +# +# gbtoxhtml-simple.xsl +# +###################################################################### + +use strict; + +delete @ENV{qw(PATH IFS CDPATH ENV BASH_ENV)}; # clean house for taint mode + +my $PROGRAM_NAME = 'gbtoxhtml-simple.pl'; +my $USAGE = "$PROGRAM_NAME [options] book-code\n\t--xml=[book XML]\n\t--meta=[metadata file]\n\t--xsl=[XSL transformation]\n\t--language=[language area of input data (output determined by meta file)]\n\t--verbose\n"; + +my $FILENAME_SEPARATOR = '/'; + +my $RXP = '/usr/bin/rxp'; +unless( -e $RXP && -x $RXP ) { + # try somewhere else + $RXP = '/usr/local/bin/rxp'; +} +my $ZIP = '/usr/bin/zip -q'; +my $JAVA = '/usr/bin/java'; +# latest binary download names the relevant jar "xalan.jar" +# older installations may have "xalan2.jar" +my $XALAN_JAR = '/usr/share/java/xalan.jar'; +unless( -e $XALAN_JAR ) { + # try somewhere else + $XALAN_JAR = '/usr/share/java/xalan2.jar'; +} + +### + +my $bookCode = ''; +my $bookXML = ''; +my $metaFile = ''; +my $xhtmlXSL = 'common/xsl/xhtml-simple.xsl'; +my $language = 'en'; + +my $verbose = 0; + +while( $#ARGV > -1 ) { + my $cmdLineItem = shift @ARGV; + if( $cmdLineItem =~ /^--xml=(.+)$/ ) { + $bookXML = $1; + } + elsif( $cmdLineItem =~ /^--meta=(.+)$/ ) { + $metaFile = $1; + } + elsif( $cmdLineItem =~ /^--xsl=(.+)$/ ) { + $xhtmlXSL = $1; + } + elsif( $cmdLineItem =~ /^--language=(.+)$/ ) { + $language = $1; + } + elsif( $cmdLineItem =~ /^--verbose/ ) { + $verbose = 1; + } + else { + $bookCode = $cmdLineItem; + } +} + +if( $bookCode eq '' ) { die "Unspecified book code\n$USAGE"; } +if( $metaFile eq '' ) { $metaFile = "$language/.publisher/rules/standard"; } +if( $bookXML eq '' ) { $bookXML = "$language/xml/$bookCode.xml"; } +if( $xhtmlXSL eq '' ) { die "Unspecified XSL transformation file\n$USAGE"; } + +if( -e $metaFile && -f $metaFile && -r $metaFile ) { + open( META, '<', $metaFile ) or die qq{Unable to open metadata file ($metaFile): $!\n}; +} +else { die qq{Improper metadata file ($metaFile)\n}; } + +my $meta = ''; +while( my $line = ) { + $meta .= $line if $line !~ /^[[:space:]]*#/; +} +close META; + +my $rulesString = ''; +if( $meta =~ /^[[:space:]]*$bookCode[[:space:]]*{([^}]*)}/sm ) { + $rulesString = $1; +} +else { + die "Book code ($bookCode) not found in metadata file or invalid file syntax\n"; +} + +my @rules = split( /[[:space:]\n]*;[[:space:]\n]*/, $rulesString ); +my %rulesHash; +foreach my $rule (@rules) { + if( $rule =~ /[[:space:]]*([^:]+)[[:space:]]*:[[:space:]]*(.+)$/s ) { + $rulesHash{ $1 } = $2; + } + else { + die "Unrecognized rule syntax:\n$rule\n"; + } +} + +if( $bookXML =~ m{^([-\w\@./]+)$} ) { + $bookXML = $1; + if( -e $bookXML && -f $bookXML && -r $bookXML ) { + system( $RXP, '-Vs', $bookXML ) == 0 or die( "XML validation failed\n" ); + } + unless( defined $rulesHash{'language'} ) { die "Metadata file leaves language unspecified\n"; } + unless( defined $rulesHash{'book-series'} ) { die "Metadata file leaves book series unspecified\n"; } + + my $outPath = $rulesHash{'language'} . $FILENAME_SEPARATOR . 'xhtml-simple' . $FILENAME_SEPARATOR . $rulesHash{'book-series'}; + unless( -e $outPath && -d $outPath ) { + my @dirs = split ( /$FILENAME_SEPARATOR/, $outPath ); + my $dirPath = ''; + for( my $i = 0; $i <= $#dirs; ++$i ) { + $dirPath .= $dirs[$i] . $FILENAME_SEPARATOR; + if( -e $dirPath && ! -d $dirPath ) { die "Output directory name exists and is not a directory\n"; } + unless( -e $dirPath ) { + mkdir $dirPath or die( "Unable to create output directory ($outPath): $!\n" ); + } + } + } + unless( -e $outPath && -d $outPath ) { + die "Unknown error creating output directory\n"; + } + + my $bookPath = "$outPath${FILENAME_SEPARATOR}${bookCode}"; + + print qx{$JAVA -classpath "$XALAN_JAR" org.apache.xalan.xslt.Process -IN "${bookXML}" -XSL "${xhtmlXSL}" -OUT "${bookPath}.htm" -PARAM use-illustrators "$rulesHash{'use-illustrators'}"}; + print qx{$ZIP $bookPath.zip $bookPath.htm}; +} + +print "Success\n" if $verbose;