Copy Button


#include <filesystem>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <cstdint>

using std::filesystem::path,
    std::filesystem::directory_iterator,
    std::filesystem::directory_entry,
    std::basic_string,
    std::for_each,
    std::strcmp,
    std::FILE,
    std::fopen,
    std::fclose,
    std::fwrite,
    std::fread,
    std::rewind,
    std::string,
    std::strcpy,
    std::size_t,
    std::cerr;

int main(){
    basic_string str(".");
    path p(str);

    auto di_stuff = [](directory_entry de){
        path p = de.path();
        if(strcmp(p.extension().string().data(), ".html")==0 && strcmp(p.stem().string().data(), "template")!=0){
 
            int size = file_size(p)/sizeof(char);
            cerr << "filename: " << p.filename().string() << " filesize: " << size << "\n";

            FILE* f = fopen(p.filename().string().data(), "r+");
            char* buffer = new char[size + 1];
            fread(buffer, sizeof(char), size, f);
            string str(buffer);

            string::size_type st = str.find("</head>");
            str.insert(st, "<script type=\"text/javascript\" src=\"myscript.js\"></script>\n");

            char format[200]{"\0"};
            strcpy(format, "<button type=\"button\" onclick=\"copyText(%i)\">copy</button>\n<pre><code id=\"%i\" class=\"language-c++\">\n");
            string source("<pre><code class=\"language-c++\">");
            st = str.find(source);
            int id = 0;
            while(st != string::npos){
                cerr << "found at pos: " << st << "\n";
                char temp[100]{"\0"};
                sprintf(temp, format, id, id);
                str.replace(st, source.length(), temp);
                st = str.find(source);//, st + 1
                ++id;
            }
            rewind(f);
            fwrite(str.data(), sizeof(char), str.length(), f);
            delete[] buffer;
            buffer = nullptr;
            fclose(f);
            f = nullptr;
        }

    };

    directory_iterator di(p);
    for_each(begin(di), end(di), di_stuff);

    return 0;
}
home
C++ Examples© 2024 TBD