Line data Source code
1 : #include "Formatter.h"
2 :
3 : namespace wikidiff2 {
4 :
5 36 : void Formatter::printFileHeader() {
6 36 : }
7 :
8 36 : void Formatter::printFileFooter() {
9 36 : }
10 :
11 0 : void Formatter::debugPrintWordDiff(const WordDiff & worddiff)
12 : {
13 0 : for (unsigned i = 0; i < worddiff.size(); ++i) {
14 0 : const DiffOp<Word> & op = worddiff[i];
15 0 : switch (op.op) {
16 0 : case DiffOp<Word>::copy:
17 0 : result << "Copy\n";
18 0 : break;
19 0 : case DiffOp<Word>::del:
20 0 : result << "Delete\n";
21 0 : break;
22 0 : case DiffOp<Word>::add:
23 0 : result << "Add\n";
24 0 : break;
25 0 : case DiffOp<Word>::change:
26 0 : result << "Change\n";
27 0 : break;
28 : }
29 0 : result << "From: ";
30 0 : bool first = true;
31 0 : for (int j=0; j<op.from.size(); j++) {
32 0 : if (first) {
33 0 : first = false;
34 : } else {
35 0 : result << ", ";
36 : }
37 0 : result << "(";
38 0 : result << *op.from[j] << ")";
39 : }
40 0 : result << "\n";
41 0 : result << "To: ";
42 0 : first = true;
43 0 : for (int j=0; j<op.to.size(); j++) {
44 0 : if (first) {
45 0 : first = false;
46 : } else {
47 0 : result << ", ";
48 : }
49 0 : result << "(";
50 0 : result << *op.to[j] << ")";
51 : }
52 0 : result << "\n\n";
53 : }
54 0 : }
55 :
56 44512 : void Formatter::printHtmlEncodedText(StringIterator inputStart, StringIterator inputEnd)
57 : {
58 44512 : StringIterator p = inputStart;
59 44512 : char *needleStart = "<>&", *needleEnd = needleStart + 3;
60 :
61 : while (true) {
62 44607 : StringIterator next = std::find_first_of(p, inputEnd, needleStart, needleEnd);
63 44607 : if (next > p) {
64 44448 : result.write(&*p, next - p);
65 : }
66 44607 : if (next == inputEnd) {
67 44512 : break;
68 : }
69 95 : switch (*next) {
70 45 : case '<':
71 45 : result << "<";
72 45 : break;
73 45 : case '>':
74 45 : result << ">";
75 45 : break;
76 5 : default /*case '&'*/:
77 5 : result << "&";
78 : }
79 95 : p = next + 1;
80 95 : }
81 44512 : }
82 :
83 215 : Formatter::String Formatter::toString(long input) const
84 : {
85 430 : StringStream stream;
86 215 : stream << input;
87 430 : return String(stream.str());
88 : }
89 :
90 0 : void Formatter::printConcatDiff(
91 : const WordDiff & wordDiff,
92 : int leftLine, int rightLine,
93 : int offsetFrom, int offsetTo)
94 : {
95 0 : throw std::runtime_error("this formatter does not implement line splitting");
96 : }
97 :
98 243 : bool Formatter::isNewlineMarker(const DiffOp<Word> & op)
99 : {
100 243 : return op.op == DiffOp<Word>::add
101 32 : && op.to.size() == 1
102 275 : && op.to[0]->isNewline();
103 : }
104 :
105 : } // namespace wikidiff2
|