summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormstsirkin <mstsirkin@0c8fb4dd-22a2-4bb5-bc14-6c75a5f43652>2015-05-21 10:13:22 +0000
committermstsirkin <mstsirkin@0c8fb4dd-22a2-4bb5-bc14-6c75a5f43652>2015-05-21 10:13:22 +0000
commite06b2ff405259b3d4a8f49ec83e4ae69f84f75f6 (patch)
tree8d5e096663d2d91c62543cf6a34e80e12c44d6e5
parent077b7f28068b171123060d4542e685fd901f00b1 (diff)
fixupdiff.pl: more work-arounds for latexdiff
work around more latexdiff issues: - force FL style within headers - fix beginFL ending with end and vice versa across begin/end of enum or itemize Signed-off-by: Michael S. Tsirkin <mst@redhat.com> git-svn-id: https://tools.oasis-open.org/version-control/svn/virtio/branches/v1.0@534 0c8fb4dd-22a2-4bb5-bc14-6c75a5f43652
-rw-r--r--fixupdiff.pl58
1 files changed, 58 insertions, 0 deletions
diff --git a/fixupdiff.pl b/fixupdiff.pl
index 70d4e30..94c5112 100644
--- a/fixupdiff.pl
+++ b/fixupdiff.pl
@@ -1,3 +1,6 @@
+my $bufferdiff="";
+my $diff="";
+my $buffer="";
my $lstlisting=0;
while (<>) {
my $line = $_;
@@ -6,6 +9,61 @@ while (<>) {
}
if ($lstlisting) {
$line =~ s/%DIFDELCMD\s+<\s+//;
+ #print "%FIXED BY RULE 1\n";
+ }
+ #In section headings, replace begin/end with begin/endFL,
+ #but be careful in case some tag spills over to the next
+ #line
+ if (m/\\(section|subsection|subsubsection|paragraph)/ and m/DIF/) {
+ my @list = split(/(\\DIF(?:add|del)(?:begin|end)(?:FL)?)/, $line, -1);
+ #if there's only one tag, don't touch it:
+ #matching one is on the other line
+ if ($#list >= 5) {
+ #if first tag is end, don't touch it - matching
+ #begin is on the previous line
+ if ($list[1] =~ m/begin$/) {
+ $list[1] .= "FL";
+ }
+ #if last tag is begin, don't touch it - matching
+ #end is on the next line
+ if ($list[$#list - 1] =~ m/end$/) {
+ $list[$#list - 1] .= "FL";
+ }
+ }
+ for (my $i = 3; $i <= $#list - 3; $i += 2) {
+ if (not $list[$i] =~ m/FL$/) {
+ $list[$i] .= "FL";
+ }
+ }
+ $line = join("", @list);
+ #print "%FIXED BY RULE 2\n";
+ }
+ #detect where we have DIFbegin/end cross
+ #enumerate/itemize environments and fix up
+ if (m/\\DIF(?:add|del)(?:begin|end)/) {
+ my @list = split(/(\\DIF(?:add|del)(?:begin|end)(?:FL)?)/, $line, -1);
+ $diff = $list[$#list - 1];
+ if ($diff =~ m/begin/) {
+ $diff =~ s/begin/end/;
+ } else {
+ $diff = "";
+ }
+ }
+ if ($diff ne "" and m/\\(?:begin|end){(?:enumerate|itemize)}$/ and not m/\\DIF/) {
+ $buffer = $line;
+ $bufferdiff = $diff;
+ $line = "";
+ #print "%BUFFERED BY RULE 3: $bufferdiff\n";
+ }
+ if ($buffer ne "" and $line ne "") {
+ if (m/^(\\DIF(?:add|del)end(?:FL)?)/ and $bufferdiff ne $1) {
+ $line =~ s/^(\\DIF(?:add|del)end(?:FL)?)//;
+ $buffer =~ s/(\\(?:begin|end){(?:enumerate|itemize)})$/$bufferdiff$1/;
+ #print "%FIXED BY RULE 3: $bufferdiff\n";
+ }
+ print $buffer;
+ $buffer = "";
+ $bufferdiff = "";
}
print $line;
if (m/%DIFDELCMD\s+<\s+\\end{lstlisting}/) {