working now

main
Brett 2023-12-23 19:11:45 -05:00
parent 4c79cf6808
commit 42a27d021b
20 changed files with 67012 additions and 37 deletions

View File

@ -160,7 +160,10 @@ def process_errors(div):
def process_seealso(div): def process_seealso(div):
if div is None: if div is None:
return [] return []
div = div.find('p').find_all('a') div = div.find('p')
if div is None:
return []
div = div.find_all('a')
alsos = [] alsos = []
for a in div: for a in div:

Binary file not shown.

View File

@ -1,10 +1,10 @@
# ninja log v5 # ninja log v5
3 1437 1703269248001211383 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/string.cpp.o 7372d87554025941 3 1437 1703269248001211383 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/string.cpp.o 7372d87554025941
1 1319 1703313187097385701 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8 2 3380 1703353050513441920 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
3 3035 1703269249601195503 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/system.cpp.o 6b34ee1aa4557b8 3 3035 1703269249601195503 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/system.cpp.o 6b34ee1aa4557b8
4 6430 1703269252993161839 libraries/BLT/CMakeFiles/BLT.dir/src/blt/profiling/profiler_v2.cpp.o f7d76198a6666d0a 4 6430 1703269252993161839 libraries/BLT/CMakeFiles/BLT.dir/src/blt/profiling/profiler_v2.cpp.o f7d76198a6666d0a
3 4901 1703269251465177003 libraries/BLT/CMakeFiles/BLT.dir/src/blt/profiling/profiler.cpp.o 98c3613a268835f7 3 4901 1703269251465177003 libraries/BLT/CMakeFiles/BLT.dir/src/blt/profiling/profiler.cpp.o 98c3613a268835f7
1 505 1703313186281395730 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25 2 7745 1703353054881368391 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
2 4864 1703269251429177360 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/format.cpp.o 86854dbc10b97205 2 4864 1703269251429177360 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/format.cpp.o 86854dbc10b97205
5 6828 1703269253393157869 libraries/BLT/CMakeFiles/BLT.dir/src/blt/parse/argparse.cpp.o c25a8a66b746b95f 5 6828 1703269253393157869 libraries/BLT/CMakeFiles/BLT.dir/src/blt/parse/argparse.cpp.o c25a8a66b746b95f
6829 6962 1703269253521156599 libraries/BLT/libBLT.a f5b601d9b774b003 6829 6962 1703269253521156599 libraries/BLT/libBLT.a f5b601d9b774b003
@ -12,13 +12,82 @@
2 2026 1703269248589205547 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/loader.cpp.o c1e2cebc92cff5ff 2 2026 1703269248589205547 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/loader.cpp.o c1e2cebc92cff5ff
4 891 1703269247453216823 libraries/BLT/CMakeFiles/BLT.dir/src/blt/nbt/nbt_block.cpp.o c189cbf7574512a 4 891 1703269247453216823 libraries/BLT/CMakeFiles/BLT.dir/src/blt/nbt/nbt_block.cpp.o c189cbf7574512a
4 3961 1703269250525186332 libraries/BLT/CMakeFiles/BLT.dir/src/blt/nbt/nbt.cpp.o 439363bdbfdd4452 4 3961 1703269250525186332 libraries/BLT/CMakeFiles/BLT.dir/src/blt/nbt/nbt.cpp.o 439363bdbfdd4452
1319 1357 1703313187133385258 gl_doc_generator 7126d327cf7747a5 7745 7834 1703353054969366907 gl_doc_generator 7126d327cf7747a5
1 1470 1703269248033211066 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/filesystem.cpp.o 1c0fd59b23c040f5 1 1470 1703269248033211066 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/filesystem.cpp.o 1c0fd59b23c040f5
1 2400 1703269248965201816 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/assert.cpp.o 8c3d34b2a042cd0c 1 2400 1703269248965201816 libraries/BLT/CMakeFiles/BLT.dir/src/blt/std/assert.cpp.o 8c3d34b2a042cd0c
1 634 1703316313529228992 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25 2 7882 1703353456545697234 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
1 1475 1703316327113168829 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8 7882 7969 1703353456633694882 gl_doc_generator 7126d327cf7747a5
1475 1531 1703316327169168575 gl_doc_generator 7126d327cf7747a5 1 7770 1703353812000823453 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
1 1448 1703316339001113988 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8 7770 7859 1703353812088821379 gl_doc_generator 7126d327cf7747a5
1448 1500 1703316339049113762 gl_doc_generator 7126d327cf7747a5 3 7947 1703353852407876544 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
1 603 1703316356065031799 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25 7947 8039 1703353852499874400 gl_doc_generator 7126d327cf7747a5
603 652 1703316356113031561 gl_doc_generator 7126d327cf7747a5 2 7835 1703353899214791309 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
7835 7921 1703353899298789372 gl_doc_generator 7126d327cf7747a5
2 8211 1703353936837927363 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
8211 8299 1703353936925925350 gl_doc_generator 7126d327cf7747a5
2 7721 1703353972317118960 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
7721 7811 1703353972409116872 gl_doc_generator 7126d327cf7747a5
2 7785 1703354088982498934 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
7785 7875 1703354089070496978 gl_doc_generator 7126d327cf7747a5
2 7782 1703354119481822575 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
7782 7871 1703354119573820539 gl_doc_generator 7126d327cf7747a5
1 7652 1703354172588652301 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
7652 7741 1703354172676650369 gl_doc_generator 7126d327cf7747a5
2 8388 1703354219347629093 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
8388 8478 1703354219439627087 gl_doc_generator 7126d327cf7747a5
3 7731 1703354256770814617 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
7732 7819 1703354256858812706 gl_doc_generator 7126d327cf7747a5
2 7960 1703354288242132501 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
7960 8050 1703354288330130597 gl_doc_generator 7126d327cf7747a5
2 7872 1703354314569563740 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
7872 7959 1703354314657561841 gl_doc_generator 7126d327cf7747a5
2 3483 1703355098073116037 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
2 8854 1703355103445005159 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
8854 8943 1703355103533003342 gl_doc_generator 7126d327cf7747a5
2 8857 1703355194647124741 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
8857 8970 1703355194759122434 gl_doc_generator 7126d327cf7747a5
1 10123 1703355231838358972 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
10123 10229 1703355231942356831 gl_doc_generator 7126d327cf7747a5
2 8857 1703355303164891819 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
8857 8948 1703355303256889928 gl_doc_generator 7126d327cf7747a5
2 3776 1703355671948307462 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
3776 3863 1703355672032308032 gl_doc_generator 7126d327cf7747a5
2 3717 1703355699140475710 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
3717 3803 1703355699224476180 gl_doc_generator 7126d327cf7747a5
3 3723 1703355724856605984 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
3724 3809 1703355724940606365 gl_doc_generator 7126d327cf7747a5
2 3705 1703355826332872325 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
3705 3791 1703355826416872394 gl_doc_generator 7126d327cf7747a5
3 11502 1703359121098301556 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
2 4697 1703359332975585666 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
3 10886 1703359339163505482 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
10886 11014 1703359339291503823 gl_doc_generator 7126d327cf7747a5
2 11207 1703359391998819148 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
11207 11335 1703359392126817482 gl_doc_generator 7126d327cf7747a5
2 10801 1703359573617077113 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
10802 10935 1703359573749080040 gl_doc_generator 7126d327cf7747a5
2 10717 1703359675831056203 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
10717 10835 1703359675947058147 gl_doc_generator 7126d327cf7747a5
2 4992 1703359987206357503 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
3 11612 1703359993822393884 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
11612 11738 1703359993950394577 gl_doc_generator 7126d327cf7747a5
2 11005 1703360158590971654 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
11005 11141 1703360158718971884 gl_doc_generator 7126d327cf7747a5
2 11252 1703360243279060305 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
11252 11380 1703360243403060347 gl_doc_generator 7126d327cf7747a5
2 4637 1703360309375049757 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
2 10921 1703360315655045477 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
10921 11063 1703360315799045372 gl_doc_generator 7126d327cf7747a5
2 10267 1703360810045443703 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
1 4116 1703360818853398878 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
4116 4211 1703360818949398388 gl_doc_generator 7126d327cf7747a5
2 9900 1703361190007220755 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
9900 10004 1703361190111220083 gl_doc_generator 7126d327cf7747a5
2 4153 1703361518472988555 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
4153 4275 1703361518592987708 gl_doc_generator 7126d327cf7747a5
2 4112 1703361529852908082 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
2 3913 1703361708772029328 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
2 9197 1703361714055826294 CMakeFiles/gl_doc_generator.dir/src/load_file.cpp.o e3be46751e904b25
9197 9285 1703361714143822928 gl_doc_generator 7126d327cf7747a5
2 2121 1703363408342744474 CMakeFiles/gl_doc_generator.dir/src/main.cpp.o f2846e1dc111dd8
2121 2208 1703363408430743349 gl_doc_generator 7126d327cf7747a5

View File

@ -1,3 +1,3 @@
Start testing: Dec 23 02:25 EST Start testing: Dec 23 18:49 EST
---------------------------------------------------------- ----------------------------------------------------------
End testing: Dec 23 02:25 EST End testing: Dec 23 18:49 EST

Binary file not shown.

View File

@ -160,7 +160,10 @@ def process_errors(div):
def process_seealso(div): def process_seealso(div):
if div is None: if div is None:
return [] return []
div = div.find('p').find_all('a') div = div.find('p')
if div is None:
return []
div = div.find_all('a')
alsos = [] alsos = []
for a in div: for a in div:

View File

@ -160,7 +160,10 @@ def process_errors(div):
def process_seealso(div): def process_seealso(div):
if div is None: if div is None:
return [] return []
div = div.find('p').find_all('a') div = div.find('p')
if div is None:
return []
div = div.find_all('a')
alsos = [] alsos = []
for a in div: for a in div:

27114
gl_doc.h Normal file

File diff suppressed because it is too large Load Diff

39390
gl_doc_full.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -160,7 +160,10 @@ def process_errors(div):
def process_seealso(div): def process_seealso(div):
if div is None: if div is None:
return [] return []
div = div.find('p').find_all('a') div = div.find('p')
if div is None:
return []
div = div.find_all('a')
alsos = [] alsos = []
for a in div: for a in div:

View File

@ -18,6 +18,7 @@
#include "load_file.h" #include "load_file.h"
#include <blt/std/loader.h> #include <blt/std/loader.h>
#include <regex> #include <regex>
#include <utility>
namespace blt namespace blt
{ {
@ -139,29 +140,165 @@ namespace blt
break; break;
} }
} }
std::string finished;
for (auto& v : partial_blocks)
{
finished += v.parsed;
auto p = found_docs.find(v.waiting_for);
if (p != found_docs.end())
{
BLT_TRACE0_STREAM << "I was able to find the docs for " << v.waiting_for << "\n";
finished += strip_codes(std::string(p->second), v.waiting_for);
} else
{
BLT_TRACE1_STREAM << "I was unable to find the docs for " << v.waiting_for << "\n";
finished += "// Unable to find the docs for this function!\n";
notfound.insert(v.waiting_for);
BLT_WARN("Unable to find docs for function '%s'", v.waiting_for.c_str());
}
}
finished += parsed;
parsed = std::move(finished);
// BLT_DEBUG("Finished in state %d", (int) state); // BLT_DEBUG("Finished in state %d", (int) state);
// BLT_DEBUG("With data %s", parsed.c_str()); //BLT_DEBUG("With data %s", parsed.c_str());
for (auto& v : notfound)
{
BLT_WARN("Unable to find docs for function '%s'", v.c_str());
}
return *this; return *this;
} }
void parser::process_gl_func(std::string_view func_name) void parser::process_gl_func(std::string_view func_name)
{ {
// std::string reference_link = "https://registry.khronos.org/OpenGL-Refpages/gl4/html/"; auto p = found_docs.find(std::string(func_name));
// reference_link.reserve(func_name.length() + 6); if (p != found_docs.end())
// reference_link += func_name; {
// reference_link += ".xhtml"; BLT_TRACE("Using cached docs!");
// auto pid = popen(pythonPath + " " + generatorPath + " " + reference_link, "r"); parsed += p->second;
// BLT_INFO("Running on function %s", std::string(func_name).c_str()); return;
std::cout << std::string(func_name) << std::endl; }
std::string reference_link = "https://registry.khronos.org/OpenGL-Refpages/gl4/html/";
reference_link.reserve(func_name.length() + 6);
reference_link += strip_func(func_name);
reference_link += ".xhtml";
std::string command = pythonPath + " " + generatorPath + " " + reference_link;
auto pFile = popen(command.c_str(), "r");
std::string doc;
char buf[4096];
size_t readn;
while ((readn = fread(buf, 1, sizeof(buf), pFile)) > 0)
doc += std::string(buf, readn);
pclose(pFile);
blt::string::trim(doc);
// no way for a proper generated doc to be this small
const std::string NULL_STR = "NULL";
if (doc.length() <= NULL_STR.length() * 2)
{
partial_blocks.emplace_back(parsed, std::string(func_name));
parsed.clear();
BLT_DEBUG("Failed to find function '%s'", std::string(func_name).c_str());
return;
}
strip_extras(doc);
BLT_INFO("Running on function %s", std::string(func_name).c_str());
doc_string_storage.push_back(std::move(doc));
auto& doc_ref = doc_string_storage.back();
size_t search = doc_ref.find("@code");
while (search != std::string::npos)
{
// skip through @code
search += 5;
// skip through spaces
while (search < doc_ref.size() && std::isspace(doc_ref[search]))
search++;
// then through the first identifier
while (search < doc_ref.size() && is_ident(doc_ref[search]))
search++;
// then more space
while (search < doc_ref.size() && std::isspace(doc_ref[search]))
search++;
auto s2 = doc_ref.find('(', search);
auto var = doc_ref.substr(search, s2 - search);
BLT_TRACE("Found docs for function '%s'", var.c_str());
found_docs.insert({var, std::string_view(doc_ref.data(), doc_ref.size())});
search = doc_ref.find("@code", search);
}
parsed += strip_codes(doc_ref, std::string(func_name));
//BLT_INFO("Docs: %s", doc_ref.c_str());
} }
std::string parser::strip_func(std::string_view func) std::string parser::strip_func(std::string_view func)
{ {
std::string f (func); std::string f(func);
std::regex matrx(R"(((Matrix)(\d|\w)+)|(\d|I|L)+(i|u|f|d|v|s|N|b|I)+)"); std::regex matrx(R"(((Matrix)(\d|\w)+)|\d+(i|u|f|d|v|s|N|b|I|^(Is))+)");
return f; return std::regex_replace(f, matrx, "");
} }
std::string parser::strip_codes(const std::string& str, const std::string& func_name)
{
static volatile bool b = true;
if (b)
return str;
std::string new_str;
auto lines = blt::string::split(str, '\n');
for (auto& line : lines)
{
blt::string::trim(line);
if (line.empty())
continue;
if (blt::string::contains(line, "@code") && !blt::string::contains(line, func_name + "("))
continue;
new_str += line += '\n';
}
return new_str;
}
void parser::strip_extras(std::string& str) const
{
std::string new_str;
auto lines = blt::string::split(str, '\n');
for (size_t i = 0; i < lines.size(); i++)
{
auto& line = lines[i];
blt::string::trim(line);
if (line.empty())
continue;
if (clear_see_also && blt::string::contains(line, "@see"))
continue;
if (clear_desc && blt::string::contains(line, "@description"))
{
while (i < lines.size())
{
if (lines[i] == " * ")
break;
i++;
}
continue;
}
new_str += line += '\n';
}
str = new_str;
}
partial_container::partial_container(std::string parsed, std::string waitingFor): parsed(std::move(parsed)), waiting_for(std::move(waitingFor))
{}
} }

View File

@ -23,6 +23,7 @@
#include <string_view> #include <string_view>
#include <blt/std/logging.h> #include <blt/std/logging.h>
#include <cctype> #include <cctype>
#include <blt/std/hashmap.h>
namespace blt namespace blt
{ {
@ -36,16 +37,22 @@ namespace blt
FUNCTION // myfunctioname( FUNCTION // myfunctioname(
}; };
struct state_container struct partial_container
{ {
std::string full_data; // the entire parsed string // the complete previous block of data we parsed through
std::string_view data; // a view into full_data containing relevant data (GL function name) std::string parsed;
state_type type; // the type of data stored // the function documentation we are waiting for
std::string waiting_for;
// the next block will contain the actual function definition
partial_container(std::string parsed, std::string waitingFor);
}; };
class parser class parser
{ {
private: private:
bool clear_see_also = false;
bool clear_desc = false;
bool brief = false;
std::string path; std::string path;
std::string file; std::string file;
std::string data; std::string data;
@ -54,7 +61,16 @@ namespace blt
std::string pythonPath; std::string pythonPath;
std::string generatorPath; std::string generatorPath;
state_type state = state_type::OTHER; state_type state = state_type::OTHER;
std::vector<state_container> parsed_tokens;
// holds the owning memory for the comment strings
std::vector<std::string> doc_string_storage;
// holds a mapping between all param names and a corresponding string_view to a string stored in doc_string_storage containing the doc
HASHMAP<std::string, std::string_view> found_docs;
// list of partially compiled blocks we will need to loop through
std::vector<partial_container> partial_blocks;
// list of not found docs. useful for debug.
HASHSET<std::string> notfound;
inline void reset() inline void reset()
{ {
@ -73,12 +89,17 @@ namespace blt
return std::isalnum(c) || c == '_'; return std::isalnum(c) || c == '_';
} }
std::string strip_func(std::string_view func); static std::string strip_func(std::string_view func);
void strip_extras(std::string& str) const;
static std::string strip_codes(const std::string& str, const std::string& func_name);
void process_gl_func(std::string_view func_name); void process_gl_func(std::string_view func_name);
public: public:
explicit parser(std::string_view path, std::string_view pythonPath, std::string_view generatorPath): explicit parser(std::string_view path, std::string_view pythonPath, std::string_view generatorPath, bool seeAlso, bool desc, bool brief):
path(path), pythonPath(pythonPath), generatorPath(generatorPath) clear_see_also(seeAlso), clear_desc(desc), brief(brief), path(path), pythonPath(pythonPath), generatorPath(generatorPath)
{} {}
parser& load_file(); parser& load_file();

View File

@ -1,10 +1,14 @@
#include <iostream> #include <iostream>
#include <blt/parse/argparse.h> #include <blt/parse/argparse.h>
#include <blt/std/logging.h> #include <blt/std/logging.h>
#include <fstream>
#include "load_file.h" #include "load_file.h"
#include "../gl_doc.h"
int main(int argc, const char** argv) int main(int argc, const char** argv)
{ {
glBindBuffer(50, 10);
blt::arg_parse parser; blt::arg_parse parser;
parser.addArgument(blt::arg_builder("--generator").setAction(blt::arg_action_t::STORE).setDefault("./gl_doc_generator.py") parser.addArgument(blt::arg_builder("--generator").setAction(blt::arg_action_t::STORE).setDefault("./gl_doc_generator.py")
@ -14,6 +18,15 @@ int main(int argc, const char** argv)
.setHelp("Path / command to execute python with") .setHelp("Path / command to execute python with")
.setNArgs(1).build()); .setNArgs(1).build());
parser.addArgument(blt::arg_builder("--output", "-o").setAction(blt::arg_action_t::STORE)
.setHelp("set the output file to write to. Defaults to $(gl_file)_doc.$(ext)").setNArgs(1)
.build());
parser.addArgument(blt::arg_builder("--no-see", "-s").setAction(blt::arg_action_t::STORE_TRUE).setHelp("Don't include see also").build());
parser.addArgument(blt::arg_builder("--no-desc", "-d").setAction(blt::arg_action_t::STORE_TRUE).setHelp("Don't include description").build());
parser.addArgument(
blt::arg_builder("--brief", "-b").setAction(blt::arg_action_t::STORE_TRUE).setHelp("Make the comments as short as possible").build());
parser.addArgument(blt::arg_builder("gl_file").setAction(blt::arg_action_t::STORE).setHelp("OpenGL header file to put the docs into").setNArgs(1) parser.addArgument(blt::arg_builder("gl_file").setAction(blt::arg_action_t::STORE).setHelp("OpenGL header file to put the docs into").setNArgs(1)
.setRequired().build()); .setRequired().build());
@ -23,12 +36,41 @@ int main(int argc, const char** argv)
auto pythonPath = args.get<std::string>("python"); auto pythonPath = args.get<std::string>("python");
auto filePath = args.get<std::string>("gl_file"); auto filePath = args.get<std::string>("gl_file");
BLT_INFO("Using %s on file %s", generatorPath.c_str(), filePath.c_str()); std::string outputFilePath;
if (args.contains("output"))
{
outputFilePath = args.get<std::string>("output");
} else
{
auto exts = blt::string::split(filePath, '.');
if (blt::string::contains(filePath, '.'))
{
// cancer
for (size_t i = 0; i < exts.size() - 1; i++)
{
outputFilePath += exts[i];
if (i != exts.size() - 2)
outputFilePath += '.';
}
outputFilePath += "_doc.";
outputFilePath += exts[exts.size() - 1];
} else
{
outputFilePath += filePath += "_doc";
}
}
blt::parser file_parser(filePath, pythonPath, generatorPath); BLT_INFO("Using '%s' on file '%s' output to '%s'", generatorPath.c_str(), filePath.c_str(), outputFilePath.c_str());
blt::parser file_parser(filePath, pythonPath, generatorPath, args.contains("no-see"), args.contains("no-desc"), args.contains("brief"));
file_parser.load_file().parse(); file_parser.load_file().parse();
auto vec = file_parser.get(); auto vec = file_parser.get();
std::ofstream output(outputFilePath);
output << vec;
output.flush();
output.close();
//BLT_DEBUG("Result:\n%s", vec.c_str()); //BLT_DEBUG("Result:\n%s", vec.c_str());
return 0; return 0;

3
test.h
View File

@ -28,6 +28,9 @@ int ident = 0;
// TODO: // TODO:
typedef void (*glCopyTextureSubImage3D)(int n, const int * pipelines); typedef void (*glCopyTextureSubImage3D)(int n, const int * pipelines);
#define glUniform1d glad_glUniform1d
#define glUniform glad_glUniform1d
void glDrawTransformFeedbackStream() void glDrawTransformFeedbackStream()
{ {

187
test_doc.h Normal file
View File

@ -0,0 +1,187 @@
/*
* <Short Description>
* Copyright (C) 2023 Brett Terpstra
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/* comment */
#ifndef GL_DOC_GENERATOR_TEST_H
#define GL_DOC_GENERATOR_TEST_H
/**
* @name glDrawTransformFeedbackStream - render primitives using a count derived from a specifed stream of a transform feedback object
* @usage
* @code void glDrawTransformFeedbackStream(GLenum mode, GLuint id, GLuint stream); @endcode
* @param mode Specifies what kind of primitives to render. Symbolic constants <b>GL_POINTS</b>, <b>GL_LINE_STRIP</b>, <b>GL_LINE_LOOP</b>,
* <b>GL_LINES</b>, <b>GL_LINE_STRIP_ADJACENCY</b>, <b>GL_LINES_ADJACENCY</b>, <b>GL_TRIANGLE_STRIP</b>, <b>GL_TRIANGLE_FAN</b>,
* <b>GL_TRIANGLES</b>, <b>GL_TRIANGLE_STRIP_ADJACENCY</b>, <b>GL_TRIANGLES_ADJACENCY</b>, and <b>GL_PATCHES</b>
* are accepted.
* @param id Specifies the name of a transform feedback object from which to retrieve a primitive count.
* @param stream Specifies the index of the transform feedback stream from which to retrieve a primitive count.
*
* @errors GL_INVALID_ENUM is generated if mode is not an accepted value.
* @errors GL_INVALID_VALUE is generated if id is not the name of a transform feedback object.
* @errors GL_INVALID_VALUE is generated if stream is greater than or equal to the value of GL_MAX_VERTEX_STREAMS.
* @errors GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to an enabled array and the buffer object's
* data store is currently mapped.
* @errors GL_INVALID_OPERATION is generated if a geometry shader is active and mode is incompatible with the input primitive type
* of the geometry shader in the currently installed program object.
* @errors GL_INVALID_OPERATION is generated if mode is GL_PATCHES and no tessellation control shader is active.
* @errors GL_INVALID_OPERATION is generated if glEndTransformFeedback has never been called while the transform feedback object named
* by id was bound.
*
*/
#define glDrawTransformFeedbackStream glad_glDrawTransformFeedbackStream
int ident = 0;
// TODO:
typedef void (*glCopyTextureSubImage3D)(int n, const int * pipelines);
/**
* @name glUniform - Specify the value of a uniform variable for the current program object
* @usage
* @param location Specifies the location of the uniform variable to be modified.
* @param count For the vector (<b>glUniform*v</b>) commands, specifies the number of elements that are to be modified. This should be 1
* if the targeted uniform variable is not an array, and 1 or more if it is an array.
* @param transpose For the matrix commands, specifies whether to transpose the matrix as the values are loaded into the uniform variable.
* @param v0, v1, v2, v3 For the scalar commands, specifies the new values to be used for the specified uniform variable.
* @param value For the vector and matrix commands, specifies a pointer to an array of <em class="parameter"><b>count</b></em> values that
* will be used to update the specified uniform variable.
* @note glUniform1i and glUniform1iv are the only two functions that may be used to load uniform variables defined as sampler types.
* Loading samplers with any other function will result in a GL_INVALID_OPERATION error.
* @note If count is greater than 1 and the indicated uniform variable is not an array, a GL_INVALID_OPERATION error is generated
* and the specified uniform variable will remain unchanged.
* @note Other than the preceding exceptions, if the type and size of the uniform variable as defined in the shader do not match
* the type and size specified in the name of the command used to load its value, a GL_INVALID_OPERATION error will be generated
* and the specified uniform variable will remain unchanged.
* @note If location is a value other than -1 and it does not represent a valid uniform variable location in the current program
* object, an error will be generated, and no changes will be made to the uniform variable storage of the current program object.
* If location is equal to -1, the data passed in will be silently ignored and the specified uniform variable will not
* be changed.
*
* @errors GL_INVALID_OPERATION is generated if there is no current program object.
* @errors GL_INVALID_OPERATION is generated if the size of the uniform variable declared in the shader does not match the size indicated
* by the glUniform command.
* @errors GL_INVALID_OPERATION is generated if one of the signed or unsigned integer variants of this function is used to load a uniform
* variable of type float, vec2, vec3, vec4, or an array of these, or if one of the floating-point variants of this
* function is used to load a uniform variable of type int, ivec2, ivec3, ivec4, unsigned int, uvec2, uvec3, uvec4, or an array
* of these.
* @errors GL_INVALID_OPERATION is generated if one of the signed integer variants of this function is used to load a uniform variable
* of type unsigned int, uvec2, uvec3, uvec4, or an array of these.
* @errors GL_INVALID_OPERATION is generated if one of the unsigned integer variants of this function is used to load a uniform variable
* of type int, ivec2, ivec3, ivec4, or an array of these.
* @errors GL_INVALID_OPERATION is generated if location is an invalid uniform location for the current program object and location
* is not equal to -1.
* @errors GL_INVALID_VALUE is generated if count is less than 0.
* @errors GL_INVALID_OPERATION is generated if count is greater than 1 and the indicated uniform variable is not an array variable.
* @errors GL_INVALID_OPERATION is generated if a sampler is loaded using a command other than glUniform1i and glUniform1iv.
*
*/
#define glUniform1d glad_glUniform1d
/**
* @name glUniform - Specify the value of a uniform variable for the current program object
* @usage
* @param location Specifies the location of the uniform variable to be modified.
* @param count For the vector (<b>glUniform*v</b>) commands, specifies the number of elements that are to be modified. This should be 1
* if the targeted uniform variable is not an array, and 1 or more if it is an array.
* @param transpose For the matrix commands, specifies whether to transpose the matrix as the values are loaded into the uniform variable.
* @param v0, v1, v2, v3 For the scalar commands, specifies the new values to be used for the specified uniform variable.
* @param value For the vector and matrix commands, specifies a pointer to an array of <em class="parameter"><b>count</b></em> values that
* will be used to update the specified uniform variable.
* @note glUniform1i and glUniform1iv are the only two functions that may be used to load uniform variables defined as sampler types.
* Loading samplers with any other function will result in a GL_INVALID_OPERATION error.
* @note If count is greater than 1 and the indicated uniform variable is not an array, a GL_INVALID_OPERATION error is generated
* and the specified uniform variable will remain unchanged.
* @note Other than the preceding exceptions, if the type and size of the uniform variable as defined in the shader do not match
* the type and size specified in the name of the command used to load its value, a GL_INVALID_OPERATION error will be generated
* and the specified uniform variable will remain unchanged.
* @note If location is a value other than -1 and it does not represent a valid uniform variable location in the current program
* object, an error will be generated, and no changes will be made to the uniform variable storage of the current program object.
* If location is equal to -1, the data passed in will be silently ignored and the specified uniform variable will not
* be changed.
*
* @errors GL_INVALID_OPERATION is generated if there is no current program object.
* @errors GL_INVALID_OPERATION is generated if the size of the uniform variable declared in the shader does not match the size indicated
* by the glUniform command.
* @errors GL_INVALID_OPERATION is generated if one of the signed or unsigned integer variants of this function is used to load a uniform
* variable of type float, vec2, vec3, vec4, or an array of these, or if one of the floating-point variants of this
* function is used to load a uniform variable of type int, ivec2, ivec3, ivec4, unsigned int, uvec2, uvec3, uvec4, or an array
* of these.
* @errors GL_INVALID_OPERATION is generated if one of the signed integer variants of this function is used to load a uniform variable
* of type unsigned int, uvec2, uvec3, uvec4, or an array of these.
* @errors GL_INVALID_OPERATION is generated if one of the unsigned integer variants of this function is used to load a uniform variable
* of type int, ivec2, ivec3, ivec4, or an array of these.
* @errors GL_INVALID_OPERATION is generated if location is an invalid uniform location for the current program object and location
* is not equal to -1.
* @errors GL_INVALID_VALUE is generated if count is less than 0.
* @errors GL_INVALID_OPERATION is generated if count is greater than 1 and the indicated uniform variable is not an array variable.
* @errors GL_INVALID_OPERATION is generated if a sampler is loaded using a command other than glUniform1i and glUniform1iv.
*
*/
#define glUniform glad_glUniform1d
/**
* @name glDrawTransformFeedbackStream - render primitives using a count derived from a specifed stream of a transform feedback object
* @usage
* @code void glDrawTransformFeedbackStream(GLenum mode, GLuint id, GLuint stream); @endcode
* @param mode Specifies what kind of primitives to render. Symbolic constants <b>GL_POINTS</b>, <b>GL_LINE_STRIP</b>, <b>GL_LINE_LOOP</b>,
* <b>GL_LINES</b>, <b>GL_LINE_STRIP_ADJACENCY</b>, <b>GL_LINES_ADJACENCY</b>, <b>GL_TRIANGLE_STRIP</b>, <b>GL_TRIANGLE_FAN</b>,
* <b>GL_TRIANGLES</b>, <b>GL_TRIANGLE_STRIP_ADJACENCY</b>, <b>GL_TRIANGLES_ADJACENCY</b>, and <b>GL_PATCHES</b>
* are accepted.
* @param id Specifies the name of a transform feedback object from which to retrieve a primitive count.
* @param stream Specifies the index of the transform feedback stream from which to retrieve a primitive count.
*
* @errors GL_INVALID_ENUM is generated if mode is not an accepted value.
* @errors GL_INVALID_VALUE is generated if id is not the name of a transform feedback object.
* @errors GL_INVALID_VALUE is generated if stream is greater than or equal to the value of GL_MAX_VERTEX_STREAMS.
* @errors GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to an enabled array and the buffer object's
* data store is currently mapped.
* @errors GL_INVALID_OPERATION is generated if a geometry shader is active and mode is incompatible with the input primitive type
* of the geometry shader in the currently installed program object.
* @errors GL_INVALID_OPERATION is generated if mode is GL_PATCHES and no tessellation control shader is active.
* @errors GL_INVALID_OPERATION is generated if glEndTransformFeedback has never been called while the transform feedback object named
* by id was bound.
*
*/
void glDrawTransformFeedbackStream()
{
}
void func1()
{
}
void
func2
()
{
}
void func3
()
{
}
#endif //GL_DOC_GENERATOR_TEST_H