1 #include "SkStream.h"
2 #include "SkString.h"
3 #include "SkTDArray.h"
4 #include <stdio.h>
5
replace(const char * fun,const char * dir,const char * filename,const char * marker,const char * marker2,const char * replace,size_t replaceLen)6 static 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 opStreamOut.write(opData.begin(), opLen);
30 opStreamOut.flush();
31 return false;
32 }
33 const char* opInsertEnd = opInsert + strlen(marker);
34 if (marker2) {
35 char* opInsert2 = strstr(opInsert, marker2);
36 if (!opInsert2) {
37 SkDebugf("%s missing marker second half in %s\n", fun, outFileStr.c_str());
38 opStreamOut.write(opData.begin(), opLen);
39 opStreamOut.flush();
40 return false;
41 }
42 opInsertEnd = opInsert2 + strlen(marker2);
43 }
44 opStreamOut.write(opData.begin(), opInsert - opData.begin());
45 opStreamOut.write(replace, replaceLen);
46 opStreamOut.write(opInsertEnd, opLen - (opInsertEnd - opData.begin()));
47 opStreamOut.flush();
48 return true;
49 }
50
main(int argc,char * const argv[])51 int main (int argc, char * const argv[]) {
52 if (argc != 2) {
53 SkDebugf("%s expected filename\n", argv[0]);
54 return 0;
55 }
56 const char* dir = "../../experimental/Intersection/";
57 SkString inFileStr;
58 if (argv[1][0] != '/') {
59 inFileStr.append(dir);
60 }
61 inFileStr.append(argv[1]);
62 SkFILEStream inFile(inFileStr.c_str());
63 if (!inFile.isValid()) {
64 SkDebugf("%s couldn't find %s\n", argv[0], argv[1]);
65 return 0;
66 }
67 SkTDArray<char> inData;
68 inData.setCount(inFile.getLength());
69 size_t inLen = inData.count();
70 inFile.read(inData.begin(), inLen);
71 inFile.setPath(NULL);
72 char* insert = strstr(inData.begin(), "\n\n\n");
73 if (!insert) {
74 SkDebugf("%s missing two blank line delimiter in %s\n", argv[0], argv[1]);
75 return 0;
76 }
77 insert += 1; // include first blank line
78 const char opMarker[] =
79 "</div>" "\n"
80 "\n"
81 "<script type=\"text/javascript\">" "\n"
82 "\n"
83 "var testDivs = [" "\n"
84 ;
85 if (!replace(argv[0], dir, "op.htm", opMarker, NULL, inData.begin(),
86 insert - inData.begin())) {
87 return 0;
88 }
89 const char newMarker[] =
90 "static void (*firstTest)() = "
91 ;
92 const char newMarker2[] =
93 ";" "\n"
94 "\n"
95 "static struct {" "\n"
96 " void (*fun)();" "\n"
97 " const char* str;" "\n"
98 "} tests[] = {" "\n"
99 ;
100 if (!replace(argv[0], dir, "SimplifyNew_Test.cpp", newMarker, newMarker2, insert + 2,
101 inLen - (insert - inData.begin()) - 2)) {
102 return 0;
103 }
104 const char forceReleaseMarker[] =
105 "#define FORCE_RELEASE 1 // set force release to 1 for multiple thread -- no debugging"
106 ;
107 const char forceReleaseReplace[] =
108 "#define FORCE_RELEASE 0 // set force release to 1 for multiple thread -- no debugging"
109 ;
110 if (!replace(argv[0], dir, "DataTypes.h", forceReleaseMarker, NULL, forceReleaseReplace,
111 sizeof(forceReleaseReplace) - 1)) {
112 return 0;
113 }
114 return 0;
115 }
116