blob: 257bba0026432fc6b598d9053a4039458b84f4fc [file] [log] [blame]
caryclark@google.comd3128042012-09-26 13:00:03 +00001#include "SkStream.h"
2#include "SkString.h"
3#include "SkTDArray.h"
4#include <stdio.h>
5
6static bool replace(const char* fun, const char* dir, const char* filename, const char* marker,
7 const char* marker2, const char* replace, size_t replaceLen) {
8 SkString outFileStr(dir);
9 outFileStr.append(filename);
10 SkFILEStream opStreamIn(outFileStr.c_str());
11 if (!opStreamIn.isValid()) {
12 SkDebugf("%s couldn't find %s\n", fun, outFileStr.c_str());
13 return false;
14 }
15 SkTDArray<char> opData;
16 opData.setCount(opStreamIn.getLength());
17 size_t opLen = opData.count();
18 opStreamIn.read(opData.begin(), opLen);
19 opStreamIn.setPath(NULL);
20 SkFILEWStream opStreamOut(outFileStr.c_str());
21 if (!opStreamOut.isValid()) {
22 SkDebugf("%s couldn't open for writing %s\n", fun, outFileStr.c_str());
23 return false;
24 }
25
26 char* opInsert = strstr(opData.begin(), marker);
27 if (!opInsert) {
28 SkDebugf("%s missing marker in %s\n", fun, outFileStr.c_str());
29 return false;
30 }
31 const char* opInsertEnd = opInsert + strlen(marker);
32 if (marker2) {
33 char* opInsert2 = strstr(opInsert, marker2);
34 if (!opInsert2) {
35 SkDebugf("%s missing marker second half in %s\n", fun, outFileStr.c_str());
36 return false;
37 }
38 opInsertEnd = opInsert2 + strlen(marker2);
39 }
40 opStreamOut.write(opData.begin(), opInsert - opData.begin());
41 opStreamOut.write(replace, replaceLen);
42 opStreamOut.write(opInsertEnd, opLen - (opInsertEnd - opData.begin()));
43 opStreamOut.flush();
44 return true;
45}
46
47int main (int argc, char * const argv[]) {
48 if (argc != 2) {
49 SkDebugf("%s expected filename\n", argv[0]);
50 return 0;
51 }
52 const char* dir = "../../experimental/Intersection/";
53 SkString inFileStr;
54 if (argv[1][0] != '/') {
55 inFileStr.append(dir);
56 }
57 inFileStr.append(argv[1]);
58 SkFILEStream inFile(inFileStr.c_str());
59 if (!inFile.isValid()) {
60 SkDebugf("%s couldn't find %s\n", argv[0], argv[1]);
61 return 0;
62 }
63 SkTDArray<char> inData;
64 inData.setCount(inFile.getLength());
65 size_t inLen = inData.count();
66 inFile.read(inData.begin(), inLen);
67 inFile.setPath(NULL);
68 char* insert = strstr(inData.begin(), "\n\n\n");
69 if (!insert) {
70 SkDebugf("%s missing two blank line delimiter in %s\n", argv[0], argv[1]);
71 return 0;
72 }
73 insert += 1; // include first blank line
74 const char opMarker[] =
75 "</div>" "\n"
76 "\n"
77 "<script type=\"text/javascript\">" "\n"
78 "\n"
79 "var testDivs = [" "\n"
80 ;
81 if (!replace(argv[0], dir, "op.htm", opMarker, NULL, inData.begin(),
82 insert - inData.begin())) {
83 return 0;
84 }
85 const char newMarker[] =
86 "static void (*firstTest)() = "
87 ;
88 const char newMarker2[] =
89 ";" "\n"
90 "\n"
91 "static struct {" "\n"
92 " void (*fun)();" "\n"
93 " const char* str;" "\n"
94 "} tests[] = {" "\n"
95 ;
96 if (!replace(argv[0], dir, "SimplifyNew_Test.cpp", newMarker, newMarker2, insert + 2,
97 inLen - (insert - inData.begin()) - 2)) {
98 return 0;
99 }
100 const char simplifyMarker[] =
101 "#if 1 // set to 1 for multiple thread -- no debugging"
102 ;
103 const char simplifyReplace[] =
104 "#if 0 // set to 1 for multiple thread -- no debugging"
105 ;
106 if (!replace(argv[0], dir, "Simplify.cpp", simplifyMarker, NULL, simplifyReplace,
107 sizeof(simplifyReplace) - 1)) {
108 return 0;
109 }
110 return 0;
111}