Add text editor, misc changes

This commit is contained in:
Krzosa Karol
2024-06-20 08:17:54 +02:00
parent 7fe6aa2a97
commit b919678913
5 changed files with 184 additions and 90 deletions

View File

@@ -1,75 +1,131 @@
#include "src/build_tool/library.cpp"
struct Library {
Array<S8_String> sources;
Array<S8_String> 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<S8_String> 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<S8_String> 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<S8_String> 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<S8_String> 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<S8_String> 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<S8_String> 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);
}

View File

@@ -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<char>;
using String16 = Slice<wchar_t>;
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);
}

View File

@@ -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()
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")

17
src/text_editor/main.cpp Normal file
View File

@@ -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();
}

View File

@@ -103,11 +103,11 @@ void AddFolder(String folder, Array<String> *filenames, Array<XToTimeString> *x_
}
}
int thread_count = 16;
int64_t thread_count = 16;
Array<std::thread *> 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<ParseThreadIO> 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);