1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
/* -*- c-file-style: "xxdiff" -*- */
/******************************************************************************\
* $RCSfile$
*
* Copyright (C) 1999-2003 Martin Blais <blais@furius.ca>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
******************************************************************************/
#ifndef INCL_XXDIFF_BUILDERFILES2
#define INCL_XXDIFF_BUILDERFILES2
/*==============================================================================
* EXTERNAL DECLARATIONS
*============================================================================*/
#ifndef INCL_XXDIFF_DEFS
#include <defs.h>
#endif
#ifndef INCL_XXDIFF_BUILDER
#include <builder.h>
#endif
#ifndef INCL_XXDIFF_DIFFS
#include <diffs.h>
#endif
#ifndef INCL_STD_MEMORY
#include <memory>
#define INCL_STD_MEMORY
#endif
#ifndef INCL_STD_STDIO
#include <stdio.h>
#define INCL_STD_STDIO
#endif
XX_NAMESPACE_BEGIN
/*==============================================================================
* FORWARD DECLARATIONS
*============================================================================*/
class XxBuffer;
/*==============================================================================
* CLASS XxBuilderFiles2
*============================================================================*/
// <summary> a class to build the diffs data structure </summary>
// This class will spawn the diff program on the files and parse the output to
// produce a XxDiffs data structure that defines the difference type of each
// line of the files. The files themselves are not parsed here. They are
// referenced to by using line numbers only.
class XxBuilderFiles2 : public XxBuilder {
public:
/*----- member functions -----*/
// Constructor. The filenames must be valid.
XxBuilderFiles2( bool useInternalDiff );
// Destructor.
virtual ~XxBuilderFiles2();
// Process the files and return a displayable diffs data structure. If an
// error occurs, this will throw. Otherwise you are guaranteed a valid newly
// allocated XxDiffs object. However, there might be warnings, so you may
// want to check hasErrors() if you want to display those.
std::auto_ptr<XxDiffs> process(
const QString& command,
const XxBuffer& buffer1,
const XxBuffer& buffer2
);
private:
/*----- member functions -----*/
// Create the individual lines for different types of blocks.
// <group>
void createIgnoreBlock(
XxFln fline1,
XxFln fline2,
uint fsize
);
void createIgnoreBlock(
XxFln fline1,
uint fsize1,
XxFln fline2,
uint fsize2,
const XxBuffer& buffer1,
const XxBuffer& buffer2
);
void createChangeBlock(
XxFln fline1,
XxFln fline2,
uint fsize1,
uint fsize2
);
void createInsertLeftBlock(
XxFln fline1,
uint fsize
);
void createInsertRightBlock(
XxFln fline2,
uint fsize
);
// </group>
/*----- data members -----*/
bool _useInternalDiff;
int _curHunk;
};
XX_NAMESPACE_END
#endif
|