diff options
Diffstat (limited to 'bin/xmldiff.pl')
-rw-r--r-- | bin/xmldiff.pl | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/bin/xmldiff.pl b/bin/xmldiff.pl new file mode 100644 index 0000000..0e59561 --- /dev/null +++ b/bin/xmldiff.pl @@ -0,0 +1,126 @@ +#!/usr/bin/perl +# +# Copyright (c) 2002, DecisionSoft Limited All rights reserved. +# Please see: +# http://software.decisionsoft.com/licence.html +# for more information. +# +# Modified for the Fedora Docs Project by Tommy.Reynolds@MegaCoder.com +# + +# +# xmldiff: xmldiff program - uses xmlpp, which must be on the ${PATH} +# + +#Change this if xmlpp is not in your current path +#for example: $XMLPP = "./xmlpp"; +$XMLPP = "xmlpp"; + +use Getopt::Std; + +getopts('tscupChHSi'); + +if ($opt_h || @ARGV != 2) { + usage(); +} + +my $diffOpts; + +my $outputFmt = $opt_u + $opt_c + $opt_s + $opt_p + $opt_C; +if( $outputFmt == 0 ) { + $outputFmt = $opt_p = 1; +} +if( $outputFmt > 1 ) { + print STDERR "Error: Only one mode may be specified\n"; + usage(); +} + +if( $opt_s ) { + # Standard diff, no playing around +} +if ( $opt_c ) { + # Plain context diff + $diffOpts .= "-c "; +} +if( $opt_u ) { + # Plain unified diff + $diffOpts .= "-u "; +} +if( $opt_p ) { + # Colorized unified diff + # $diffOpts .= "-u "; + $diffOpts .= "--new-line-format='[1m[33m+ %l\n[m' "; + $diffOpts .= "--old-line-format='[1m[31m- %l\n[m' "; + $diffOpts .= "--unchanged-line-format='[1m[30m %l[m\n' "; +} +if( $opt_C ) { + $diffOpts .= "--changed-group-format='\n<<<<<<<<<<<<<<\n%<==============\n%>>>>>>>>>>>>>>>\n\n' "; + $diffOpts .= "--new-line-format='+ %l\n' "; + $diffOpts .= "--old-line-format='- %l\n' "; + $diffOpts .= "--unchanged-line-format=' %l\n' "; +} +if( $opt_H ) { + $diffOpts .= "--changed-group-format='%<%>' "; + $diffOpts .= " --new-group-format='%>' "; + $diffOpts .= "--old-group-format='%<' "; + $diffOpts .= "--new-line-format='<font color=\"green\">+ %l</font>\n' "; + $diffOpts .= "--old-line-format='<font color=\"red\">- %l</font>\n' "; + $diffOpts .= "--unchanged-line-format='<font color=\"gray\"> %l</font>\n' "; +} + +# Set up xmlpp options + +my $prettyOpts = $opt_t ? "-t " : ""; +$prettyOpts .= $opt_S ? "-S " : ""; +$prettyOpts .= $opt_H ? "-H " : ""; +$prettyOpts .= "-s -e "; + +$file1 = "xmlppTEMP1.$$"; +$file2 = "xmlppTEMP2.$$"; + +my $results = 0; +$results += system("$XMLPP $prettyOpts '$ARGV[0]' > $file1"); +$results += system("$XMLPP $prettyOpts '$ARGV[1]' > $file2"); + +if($opt_H) { + print "<HTML>\n"; + print " <HEAD>\n"; + print " <TITLE>XML Diff</TITLE>\n"; + print " </HEAD>\n"; + print " <BODY bgcolor=\"#FEFEFF\">\n"; + print " <PRE>"; + $results += system("/usr/bin/diff -bB $diffOpts $file1 $file2"); + # Do not add extra whitespace before the </PRE> + print "</PRE>\n"; + print " </BODY>\n"; + print "</HTML>\n"; + +} else { + $results += system("/usr/bin/diff -bB $diffOpts $file1 $file2"); +} + + +unlink($file1,$file2); + +exit( $results ); + +sub usage { + print STDERR <<EOF; +usage: $0 [ mode ] [ options ] oldfile.xml newfile.xml + +mode must be one of: + -p coloured unified diff [default] + -c context diff + -u unified diff + -s standard diff output + -C vaguely CVS like unified diff + +options: + -H HTML output + -t split attributes - good for spotting changes in attributes + -S schema hack mode - good for diffing schemas + -i ignore element and attribute contents + +EOF + exit 1; +} |