• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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