blueloveTH 2 年之前
父節點
當前提交
ed690b4376
共有 4 個文件被更改,包括 38 次插入20 次删除
  1. 二進制
      prebuild
  2. 33 14
      prebuild.cpp
  3. 0 3
      prebuild.sh
  4. 5 3
      preprocess.py

二進制
prebuild


+ 33 - 14
prebuild.cpp

@@ -2,8 +2,8 @@
 #include <string>
 #include <map>
 #include <algorithm>
-#include <filesystem>
-#include <fstream>
+#include <cstdio>
+#include <dirent.h>
 #include <ctime>
 
 std::string to_hex_string(const std::string& input) {
@@ -20,16 +20,34 @@ std::string to_hex_string(const std::string& input) {
 
 std::map<std::string, std::string> generate_python_sources() {
     std::map<std::string, std::string> sources;
-
-    for (const auto& file : std::filesystem::directory_iterator("python")) {
-        if (file.path().extension() == ".py") {
-            std::string key = file.path().stem().string();
-            std::ifstream f(file.path());
-            std::string content((std::istreambuf_iterator<char>(f)), std::istreambuf_iterator<char>());
-            sources[key] = to_hex_string(content);
+    DIR *dir;
+    struct dirent *ent;
+    if ((dir = opendir ("python")) != NULL) 
+    {
+        while ((ent = readdir (dir)) != NULL) 
+        {
+            std::string filename = ent->d_name;
+            size_t pos = filename.rfind(".py");
+            if (pos != std::string::npos)
+            {
+                std::string key = filename.substr(0, filename.length() - 3);
+                std::string filepath = "python/" + filename;
+                FILE* file = fopen(filepath.c_str(), "r");
+                if(file == NULL) exit(2);
+                std::string content;
+                char buffer[1024];
+                while (fgets(buffer, sizeof(buffer), file) != NULL)
+                {
+                    content += buffer;
+                }
+                fclose(file);
+                sources[key] = to_hex_string(content);
+            }
         }
+        closedir (dir);
+    }else{
+        exit(1);
     }
-
     return sources;
 }
 
@@ -46,8 +64,8 @@ std::string generate_header(const std::map<std::string, std::string>& sources) {
     header += "\n#include <map>\n#include <string>\n\nnamespace pkpy{\n";
     header += "    inline static std::map<std::string, std::string> kPythonLibs = {\n";
 
-    for (const auto& [key, value] : sources) {
-        header += "        {\"" + key + "\", \"" + value + "\"},\n";
+    for (auto it=sources.begin(); it!=sources.end(); ++it) {
+        header += "        {\"" + it->first + "\", \"" + it->second + "\"},\n";
     }
 
     header += "    };\n";
@@ -59,7 +77,8 @@ std::string generate_header(const std::map<std::string, std::string>& sources) {
 int main() {
     auto sources = generate_python_sources();
     std::string header = generate_header(sources);
-    std::ofstream header_file("src/_generated.h");
-    header_file << header;
+    FILE* f = fopen("src/_generated.h", "w");
+    fprintf(f, "%s", header.c_str());
+    fclose(f);
     return 0;
 }

+ 0 - 3
prebuild.sh

@@ -1,3 +0,0 @@
-g++ -o prebuild --std=c++17 prebuild.cpp
-./prebuild
-rm prebuild

+ 5 - 3
preprocess.py

@@ -8,9 +8,11 @@ def generate_python_sources():
         key = file.split(".")[0]
         with open("python/" + file) as f:
             value = f.read()
-            value = value.encode('utf-8').hex(':')
-            value = '\\x' + value.replace(':', '\\x')
-        sources[key] = value
+            value = value.encode('utf-8').hex()
+            new_value = []
+            for i in range(0, len(value), 2):
+                new_value.append("\\x" + value[i:i+2])
+        sources[key] = "".join(new_value)
 
     timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")