From b9196789134bea91c0620b52456bfc1d4e7fb82b Mon Sep 17 00:00:00 2001 From: Krzosa Karol Date: Thu, 20 Jun 2024 08:17:54 +0200 Subject: [PATCH] Add text editor, misc changes --- build_file.cpp | 162 +++++++++++++++++++++----------- src/pdf_browser/basic.h | 36 +++---- src/pdf_browser/read_pdf.py | 43 ++++++--- src/text_editor/main.cpp | 17 ++++ src/transcript_browser/main.cpp | 16 ++-- 5 files changed, 184 insertions(+), 90 deletions(-) create mode 100644 src/text_editor/main.cpp diff --git a/build_file.cpp b/build_file.cpp index ad38a83..7acf594 100644 --- a/build_file.cpp +++ b/build_file.cpp @@ -1,75 +1,131 @@ #include "src/build_tool/library.cpp" +struct Library { + Array sources; + Array objects; + S8_String include_path; +}; + +Library BuildZLib() { + Library l = {}; + + l.sources.add("../src/external/zlib-1.3.1/adler32.c"); + l.sources.add("../src/external/zlib-1.3.1/compress.c"); + l.sources.add("../src/external/zlib-1.3.1/crc32.c"); + l.sources.add("../src/external/zlib-1.3.1/deflate.c"); + l.sources.add("../src/external/zlib-1.3.1/gzclose.c"); + l.sources.add("../src/external/zlib-1.3.1/gzlib.c"); + l.sources.add("../src/external/zlib-1.3.1/gzread.c"); + l.sources.add("../src/external/zlib-1.3.1/gzwrite.c"); + l.sources.add("../src/external/zlib-1.3.1/inflate.c"); + l.sources.add("../src/external/zlib-1.3.1/infback.c"); + l.sources.add("../src/external/zlib-1.3.1/inftrees.c"); + l.sources.add("../src/external/zlib-1.3.1/inffast.c"); + l.sources.add("../src/external/zlib-1.3.1/trees.c"); + l.sources.add("../src/external/zlib-1.3.1/uncompr.c"); + l.sources.add("../src/external/zlib-1.3.1/zutil.c"); + + l.include_path = "../src/external/zlib-1.3.1/"; + l.objects.add("adler32.obj"); + l.objects.add("compress.obj"); + l.objects.add("crc32.obj"); + l.objects.add("deflate.obj"); + l.objects.add("gzclose.obj"); + l.objects.add("gzlib.obj"); + l.objects.add("gzread.obj"); + l.objects.add("gzwrite.obj"); + l.objects.add("inflate.obj"); + l.objects.add("infback.obj"); + l.objects.add("inftrees.obj"); + l.objects.add("inffast.obj"); + l.objects.add("trees.obj"); + l.objects.add("uncompr.obj"); + l.objects.add("zutil.obj"); + + if (!OS_FileExists(l.objects[0])) { + Array cmd = {}; + cmd.add("cl.exe -c -nologo -Zi -MP -FC "); + cmd.add(S8_Format(Perm, "-I %.*s ", S8_Expand(l.include_path))); + cmd += l.sources; + Run(cmd); + } + + return l; +} + int main() { MA_InitScratch(); SRC_InitCache(Perm, "pdf_browser.cache"); - Array zlib_source = {}; - zlib_source.add("../src/external/zlib-1.3.1/adler32.c"); - zlib_source.add("../src/external/zlib-1.3.1/compress.c"); - zlib_source.add("../src/external/zlib-1.3.1/crc32.c"); - zlib_source.add("../src/external/zlib-1.3.1/deflate.c"); - zlib_source.add("../src/external/zlib-1.3.1/gzclose.c"); - zlib_source.add("../src/external/zlib-1.3.1/gzlib.c"); - zlib_source.add("../src/external/zlib-1.3.1/gzread.c"); - zlib_source.add("../src/external/zlib-1.3.1/gzwrite.c"); - zlib_source.add("../src/external/zlib-1.3.1/inflate.c"); - zlib_source.add("../src/external/zlib-1.3.1/infback.c"); - zlib_source.add("../src/external/zlib-1.3.1/inftrees.c"); - zlib_source.add("../src/external/zlib-1.3.1/inffast.c"); - zlib_source.add("../src/external/zlib-1.3.1/trees.c"); - zlib_source.add("../src/external/zlib-1.3.1/uncompr.c"); - zlib_source.add("../src/external/zlib-1.3.1/zutil.c"); - - S8_String zlib_include = "../src/external/zlib-1.3.1/"; - Array zlib_objects = {}; - zlib_objects.add("adler32.obj"); - zlib_objects.add("compress.obj"); - zlib_objects.add("crc32.obj"); - zlib_objects.add("deflate.obj"); - zlib_objects.add("gzclose.obj"); - zlib_objects.add("gzlib.obj"); - zlib_objects.add("gzread.obj"); - zlib_objects.add("gzwrite.obj"); - zlib_objects.add("inflate.obj"); - zlib_objects.add("infback.obj"); - zlib_objects.add("inftrees.obj"); - zlib_objects.add("inffast.obj"); - zlib_objects.add("trees.obj"); - zlib_objects.add("uncompr.obj"); - zlib_objects.add("zutil.obj"); - - if (!OS_FileExists(zlib_objects[0])) { - Array cmd = {}; - cmd.add("cl.exe -c -nologo -Zi -MP -FC "); - cmd.add(S8_Format(Perm, "-I %.*s ", S8_Expand(zlib_include))); - cmd += zlib_source; - Run(cmd); - } - int result = 0; if (0) { Array cmd = {}; - cmd.add("cl.exe -nologo -Zi -MP -FC -Fe:pdf_browser.exe"); - cmd.add(S8_Format(Perm, "-I %.*s ", S8_Expand(zlib_include))); - cmd += zlib_objects; - cmd += "Advapi32.lib"; - cmd.add("../src/pdf_browser/main.cpp"); - cmd.add("../src/pdf_browser/win32.cpp"); + cmd.add("cl.exe"); + cmd.add("-Fe:transcript_browser.exe"); + cmd.add("-Fd:transcript_browser.pdb"); + cmd.add("/MP /Zi /FC /nologo"); + cmd.add("/WX /W3 /wd4200 /diagnostics:column"); + cmd.add("/Oi"); + cmd.add("-std:c++20"); // semaphore + + cmd.add("-D_CRT_SECURE_NO_WARNINGS"); + if (1) { + cmd.add("-DDEBUG_BUILD=1"); + cmd.add("-DRELEASE_BUILD=0"); + // cmd.add("-D_DEBUG /MDd"); + } else { + cmd.add("-DDEBUG_BUILD=0"); + cmd.add("-DRELEASE_BUILD=1"); + cmd.add("/O2 /MT /DNDEBUG /GL"); + } + + cmd.add("-I ../src/external/raylib/include"); + cmd.add("../src/transcript_browser/main.cpp"); + cmd.add("../src/transcript_browser/win32.cpp"); + + cmd.add("/link"); + cmd.add("../src/external/raylib/lib/raylib.lib"); + cmd.add("opengl32.lib kernel32.lib user32.lib gdi32.lib winmm.lib msvcrt.lib shell32.lib"); + cmd.add("/NODEFAULTLIB:LIBCMT"); + cmd.add("/incremental:no"); + + OS_DeleteFile("transcript_browser.pdb"); result += Run(cmd); } if (1) { Array cmd = {}; - cmd.add("cl.exe -nologo -Zi -MP -FC -Fe:transcript_browser.exe"); + cmd.add("cl.exe"); + cmd.add("-Fe:text_editor.exe"); + cmd.add("-Fd:text_editor.pdb"); + cmd.add("/MP /Zi /FC /nologo"); + cmd.add("/WX /W3 /wd4200 /diagnostics:column"); + cmd.add("/Oi"); + cmd.add("-std:c++20"); // semaphore + + cmd.add("-D_CRT_SECURE_NO_WARNINGS"); + if (1) { + cmd.add("-DDEBUG_BUILD=1"); + cmd.add("-DRELEASE_BUILD=0"); + // cmd.add("-D_DEBUG /MDd"); + } else { + cmd.add("-DDEBUG_BUILD=0"); + cmd.add("-DRELEASE_BUILD=1"); + cmd.add("/O2 /MT /DNDEBUG /GL"); + } + cmd.add("-I ../src/external/raylib/include"); - cmd.add("-std:c++20"); - cmd.add("../src/transcript_browser/main.cpp"); + cmd.add("../src/text_editor/main.cpp"); cmd.add("../src/transcript_browser/win32.cpp"); + + cmd.add("/link"); cmd.add("../src/external/raylib/lib/raylib.lib"); cmd.add("opengl32.lib kernel32.lib user32.lib gdi32.lib winmm.lib msvcrt.lib shell32.lib"); - cmd.add("/link /NODEFAULTLIB:LIBCMT"); + cmd.add("/NODEFAULTLIB:LIBCMT"); + cmd.add("/incremental:no"); + + OS_DeleteFile("text_editor.pdb"); result += Run(cmd); } diff --git a/src/pdf_browser/basic.h b/src/pdf_browser/basic.h index 9b91600..036ced2 100644 --- a/src/pdf_browser/basic.h +++ b/src/pdf_browser/basic.h @@ -633,27 +633,27 @@ struct Array { struct UTF32Result { uint32_t out_str; - int advance; - int error; + int64_t advance; + int64_t error; }; struct UTF8Result { uint8_t out_str[4]; - int len; - int error; + int64_t len; + int64_t error; }; struct UTF16Result { uint16_t out_str[2]; - int len; - int error; + int64_t len; + int64_t error; }; struct UTF8Iter { char *data; - int len; - int utf8_codepoint_byte_size; - int i; + int64_t len; + int64_t utf8_codepoint_byte_size; + int64_t i; uint32_t item; UTF8Iter &operator++() { @@ -664,7 +664,7 @@ struct UTF8Iter { friend bool operator!=(const UTF8Iter &a, const UTF8Iter &b) { return a.item != b.item; } UTF8Iter &operator*() { return *this; } UTF8Iter begin() { - UTF8Iter IterateUTF8Ex(char *data, int len); + UTF8Iter IterateUTF8Ex(char *data, int64_t len); return {IterateUTF8Ex(data, len)}; } UTF8Iter end() { return {}; } @@ -674,7 +674,7 @@ using String = Slice; using String16 = Slice; bool IsValid(UTF8Iter &iter); void Advance(UTF8Iter *iter); -UTF8Iter IterateUTF8Ex(char *data, int len); +UTF8Iter IterateUTF8Ex(char *data, int64_t len); UTF8Iter IterateUTF8(char *data); UTF8Iter IterateUTF8(String string); @@ -758,7 +758,7 @@ struct Table { size_t old_cap = cap; values = (Entry *)AllocSize(allocator, sizeof(Entry) * size); - for (int i = 0; i < size; i += 1) values[i] = {}; + for (int64_t i = 0; i < size; i += 1) values[i] = {}; cap = size; Assert(!(old_values == 0 && len != 0)); @@ -983,7 +983,7 @@ struct Scratch { // #ifdef BASIC_IMPL -UTF32Result UTF16ToUTF32(uint16_t *c, int max_advance) { +UTF32Result UTF16ToUTF32(uint16_t *c, int64_t max_advance) { UTF32Result result; MemoryZero(&result, sizeof(result)); if (max_advance >= 1) { @@ -1032,7 +1032,7 @@ UTF8Result UTF32ToUTF8(uint32_t codepoint) { return result; } -UTF32Result UTF8ToUTF32(char *c, int max_advance) { +UTF32Result UTF8ToUTF32(char *c, int64_t max_advance) { UTF32Result result; MemoryZero(&result, sizeof(result)); @@ -1101,7 +1101,7 @@ UTF16Result UTF32ToUTF16(uint32_t codepoint) { int64_t CreateCharFromWidechar(char *buffer, int64_t buffer_size, wchar_t *in, int64_t inlen) { int64_t outlen = 0; for (int64_t i = 0; i < inlen && in[i];) { - UTF32Result decode = UTF16ToUTF32((uint16_t *)(in + i), (int)(inlen - i)); + UTF32Result decode = UTF16ToUTF32((uint16_t *)(in + i), (int64_t)(inlen - i)); if (!decode.error) { i += decode.advance; UTF8Result encode = UTF32ToUTF8(decode.out_str); @@ -1122,7 +1122,7 @@ int64_t CreateCharFromWidechar(char *buffer, int64_t buffer_size, wchar_t *in, i int64_t CreateWidecharFromChar(wchar_t *buffer, int64_t buffer_size, char *in, int64_t inlen) { int64_t outlen = 0; for (int64_t i = 0; i < inlen;) { - UTF32Result decode = UTF8ToUTF32(in + i, (int)(inlen - i)); + UTF32Result decode = UTF8ToUTF32(in + i, (int64_t)(inlen - i)); if (!decode.error) { i += decode.advance; UTF16Result encode = UTF32ToUTF16(decode.out_str); @@ -1156,7 +1156,7 @@ void Advance(UTF8Iter *iter) { iter->item = r.out_str; } -UTF8Iter IterateUTF8Ex(char *data, int len) { +UTF8Iter IterateUTF8Ex(char *data, int64_t len) { UTF8Iter result; MemoryZero(&result, sizeof(result)); result.data = data; @@ -1166,7 +1166,7 @@ UTF8Iter IterateUTF8Ex(char *data, int len) { } UTF8Iter IterateUTF8(char *data) { - int length = 0; + int64_t length = 0; while (data[length]) length += 1; return IterateUTF8Ex(data, length); } diff --git a/src/pdf_browser/read_pdf.py b/src/pdf_browser/read_pdf.py index ce2f795..288e871 100644 --- a/src/pdf_browser/read_pdf.py +++ b/src/pdf_browser/read_pdf.py @@ -1,16 +1,37 @@ +import os, sys import pypdf -reader = pypdf.PdfReader("C:/Users/Karol/Desktop/Hegels-Logic.pdf") +if len(sys.argv) != 2: + print("expected single argument with filename or folder to extract text from") + exit(0) -f = open("asd.txt", "w", encoding="utf-8") -for i in range(len(reader.pages)): - page = reader.pages[i] - text = page.extract_text() - text = text.replace("\n", "") - text = text.replace("-", "") - f.write(f">>>>>>>>{i + 1}<<<<<<<<<\n") - f.write(text) - f.write("\n") +def write_pdf_for(filename): + reader = pypdf.PdfReader(filename) + extract_filename = filename + ".txt" + if os.path.exists(extract_filename): + print(f"skipping {extract_filename}, file exists") + return -f.close() \ No newline at end of file + f = open(extract_filename, "w", encoding="utf-8") + for i in range(len(reader.pages)): + page = reader.pages[i] + text = page.extract_text() + text = text.replace("\n", "") + text = text.replace("-", "") + + f.write(f">>>>>>>>{i + 1}<<<<<<<<<\n") + f.write(text) + f.write("\n") + + f.close() + print(f"generated: {extract_filename}") + +if os.path.isdir(sys.argv[1]): + for file in os.listdir(sys.argv[1]): + if file.endswith(".pdf"): + write_pdf_for(file) +elif os.path.isfile(sys.argv[1]): + write_pdf_for(sys.argv[1]) +else: + print(f"argument you passed in: {sys.argv[1]} is not a filename or folder") \ No newline at end of file diff --git a/src/text_editor/main.cpp b/src/text_editor/main.cpp new file mode 100644 index 0000000..73fc405 --- /dev/null +++ b/src/text_editor/main.cpp @@ -0,0 +1,17 @@ +#define BASIC_IMPL +#include "../pdf_browser/basic.h" + +#include "raylib.h" + +int main() { + InitWindow(1280, 720, "Text editor"); + SetWindowState(FLAG_WINDOW_RESIZABLE); + SetTargetFPS(60); + + while (!WindowShouldClose()) { + BeginDrawing(); + ClearBackground(RAYWHITE); + EndDrawing(); + } + CloseWindow(); +} \ No newline at end of file diff --git a/src/transcript_browser/main.cpp b/src/transcript_browser/main.cpp index c79db04..cfa8e72 100644 --- a/src/transcript_browser/main.cpp +++ b/src/transcript_browser/main.cpp @@ -103,11 +103,11 @@ void AddFolder(String folder, Array *filenames, Array *x_ } } - int thread_count = 16; + int64_t thread_count = 16; Array threads = {scratch}; - int files_per_thread = srt_files.len / thread_count; - int remainder = srt_files.len % thread_count; - int fi = 0; + int64_t files_per_thread = srt_files.len / thread_count; + int64_t remainder = srt_files.len % thread_count; + int64_t fi = 0; Array io = {scratch}; io.reserve(thread_count); @@ -298,7 +298,7 @@ int main() { float font_size = 20; float y = 0; - int xwidth = MeasureTextEx(font, "_", font_size, 1).x; + int xwidth = (int)MeasureTextEx(font, "_", font_size, 1).x; if (ItemFound) { uintptr_t begin_region = (uintptr_t)XArena.data; @@ -321,7 +321,7 @@ int main() { String line = it.get_prefix(per_line); if (ItemFound->string.data >= line.data && ItemFound->string.data < line.data + line.len) { - DrawRectangleLines(0, y + font_size, GetRenderWidth(), 2, SKYBLUE); + DrawRectangleLines(0, (int)(y + font_size), GetRenderWidth(), 2, SKYBLUE); } String line_terminated = Copy(*frame_arena, line); @@ -354,8 +354,8 @@ int main() { String string_first = Copy(*frame_arena, {(char *)begin, (int64_t)(it.data - begin)}); String string_middle = Copy(*frame_arena, it); - int width = MeasureTextEx(font, string_first.data, font_size, 1).x; - if (chosen_text == i) DrawRectangleLines(0, y + font_size, GetRenderWidth(), 2, SKYBLUE); + int width = (int)MeasureTextEx(font, string_first.data, font_size, 1).x; + if (chosen_text == i) DrawRectangleLines(0, (int)(y + font_size), GetRenderWidth(), 2, SKYBLUE); String num = Format(*frame_arena, "%d", i); DrawTextEx(font, num.data, {0, y}, font_size, 1, DARKGRAY);