summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config.cpp6
-rw-r--r--src/config.h1
-rw-r--r--src/main.cpp14
-rw-r--r--src/search.cpp17
-rw-r--r--src/search.h5
-rw-r--r--src/widgets/imgui_toggle.cpp31
-rw-r--r--src/widgets/imgui_toggle.h5
7 files changed, 64 insertions, 15 deletions
diff --git a/src/config.cpp b/src/config.cpp
index 61e4127..5a2e0e0 100644
--- a/src/config.cpp
+++ b/src/config.cpp
@@ -11,6 +11,7 @@ utf8_int8_t filter_buffer[MAX_INPUT_LENGTH];
utf8_int8_t query_buffer[MAX_INPUT_LENGTH];
int ts_thread_count = 4;
int max_file_size = 100; // in MBs
+bool respect_capitalization = false;
static void _ts_config_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line)
{
@@ -18,7 +19,7 @@ static void _ts_config_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entr
uint8_t filter[MAX_INPUT_LENGTH];
uint8_t query[MAX_INPUT_LENGTH];
- int threads = 1, maxSize = 100;
+ int threads = 1, maxSize = 100, matchCase = 0;
#if defined(_WIN32)
if (sscanf_s(line, "Path=%s", (char*)&path, MAX_INPUT_LENGTH) == 1) { strncpy_s(path_buffer, MAX_INPUT_LENGTH, (char*)path, MAX_INPUT_LENGTH); }
@@ -26,12 +27,14 @@ static void _ts_config_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entr
else if (sscanf_s(line, "Query=%s", (char*)&query, MAX_INPUT_LENGTH) == 1) { strncpy_s(query_buffer, MAX_INPUT_LENGTH, (char*)query, MAX_INPUT_LENGTH); }
else if (sscanf_s(line, "Threads=%d", &threads) == 1) { ts_thread_count = threads; }
else if (sscanf_s(line, "MaxSize=%d", &maxSize) == 1) { max_file_size = maxSize; }
+ else if (sscanf_s(line, "MatchCase=%d", &matchCase) == 1) { respect_capitalization = matchCase; }
#elif defined(__linux__)
if (sscanf(line, "Path=%s", (char*)&path) == 1) { strncpy(path_buffer, (char*)path, MAX_INPUT_LENGTH); }
else if (sscanf(line, "Filter=%s", (char*)&filter) == 1) { strncpy(filter_buffer, (char*)filter, MAX_INPUT_LENGTH); }
else if (sscanf(line, "Query=%s", (char*)&query) == 1) { strncpy(query_buffer, (char*)query, MAX_INPUT_LENGTH); }
else if (sscanf(line, "Threads=%d", &threads) == 1) { ts_thread_count = threads; }
else if (sscanf(line, "MaxSize=%d", &maxSize) == 1) { max_file_size = maxSize; }
+ else if (sscanf(line, "MatchCase=%d", &matchCase) == 1) { respect_capitalization = matchCase; }
#endif
}
@@ -45,6 +48,7 @@ static void _ts_config_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler
buf->appendf("Query=%s\n", query_buffer);
buf->appendf("Threads=%d\n", ts_thread_count);
buf->appendf("MaxSize=%d\n", max_file_size);
+ buf->appendf("MatchCase=%d\n", respect_capitalization);
buf->append("\n");
}
diff --git a/src/config.h b/src/config.h
index f6cff36..efc64cb 100644
--- a/src/config.h
+++ b/src/config.h
@@ -17,5 +17,6 @@ extern utf8_int8_t filter_buffer[MAX_INPUT_LENGTH];
extern utf8_int8_t query_buffer[MAX_INPUT_LENGTH];
extern int ts_thread_count;
extern int max_file_size; // in MBs
+extern bool respect_capitalization;
void ts_load_config(); \ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index ed51402..abdc170 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -3,6 +3,7 @@
#include "../imgui/imgui_impl_opengl3_loader.h"
#include "../imfiledialog/imFileDialog.h"
#include "../utf8.h"
+#include "widgets/imgui_toggle.h"
#include "definitions.h"
#include "search.h"
#include "platform.h"
@@ -167,7 +168,7 @@ void ts_init() {
int _tb_query_input_cb(ImGuiInputTextCallbackData* data) {
if (data->EventFlag == ImGuiInputTextFlags_CallbackEdit) {
utf8ncpy(query_buffer, data->Buf, MAX_INPUT_LENGTH);
- ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size);
+ ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size, respect_capitalization);
}
return 0;
@@ -313,7 +314,7 @@ void ts_create_gui(int window_w, int window_h) {
ImGui::PushItemWidth(-1);
if (ImGui::InputTextWithHint("query", "Query", query_buffer, MAX_INPUT_LENGTH, ImGuiInputTextFlags_CallbackEdit|ImGuiInputTextFlags_EnterReturnsTrue, _tb_query_input_cb)) {
- ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size);
+ ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size, respect_capitalization);
}
ImGui::PopItemWidth();
ImGui::SetItemTooltip("Text to search within files, supports '*' & '?' wildcards");
@@ -339,7 +340,7 @@ void ts_create_gui(int window_w, int window_h) {
ImGui::SameLine();
ImGui::PushItemWidth(-1);
if (ImGui::InputTextWithHint("filter-ti", "Filter", filter_buffer, MAX_INPUT_LENGTH, ImGuiInputTextFlags_EnterReturnsTrue)) {
- ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size);
+ ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size, respect_capitalization);
}
ImGui::PopItemWidth();
ImGui::SetItemTooltip("Files to filter, supports '*' & '?' wildcards");
@@ -351,10 +352,15 @@ void ts_create_gui(int window_w, int window_h) {
else {
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
if (ImGui::ImageButton("Search", (void*)(intptr_t)img_search.id, ImVec2(18.0f, 18.0f))) {
- ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size);
+ ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size, respect_capitalization);
}
ImGui::PopStyleVar();
}
+
+ ImGui::SameLine();
+ ImGui::SetCursorPosX(36);
+ ImGui::ToggleButton("Aa", &respect_capitalization);
+ ImGui::SetItemTooltip("Match Case");
}
ImGui::EndChild();
diff --git a/src/search.cpp b/src/search.cpp
index 61f8d54..3897cc7 100644
--- a/src/search.cpp
+++ b/src/search.cpp
@@ -118,7 +118,7 @@ bool string_is_asteriks(char *text)
return true;
}
-bool ts_string_contains(char *text_to_search, utf8_int8_t *text_to_find, ts_array *text_matches)
+bool ts_string_contains(char *text_to_search, utf8_int8_t *text_to_find, ts_array *text_matches, bool respect_capitalization)
{
bool final_result = false;
bool is_asteriks_only = false;
@@ -151,7 +151,7 @@ bool ts_string_contains(char *text_to_search, utf8_int8_t *text_to_find, ts_arra
int index = 0;
while ((text_to_search = utf8codepoint(text_to_search, &text_to_search_ch)) && text_to_search_ch)
{
- text_to_search_ch = utf8lwrcodepoint(text_to_search_ch);
+ if (!respect_capitalization) text_to_search_ch = utf8lwrcodepoint(text_to_search_ch);
word_offset_val += utf8codepointsize(text_to_search_ch);
if (text_to_search_ch == '\n')
{
@@ -166,7 +166,7 @@ bool ts_string_contains(char *text_to_search, utf8_int8_t *text_to_find, ts_arra
bool in_wildcard = false;
text_to_find = utf8codepoint(text_to_find, &text_to_find_ch);
- text_to_find_ch = utf8lwrcodepoint(text_to_find_ch);
+ if (!respect_capitalization) text_to_find_ch = utf8lwrcodepoint(text_to_find_ch);
// text_to_search_current_attempt = utf8codepoint(text_to_search_current_attempt,
//&text_to_search_current_attempt_ch);
@@ -185,7 +185,7 @@ bool ts_string_contains(char *text_to_search, utf8_int8_t *text_to_find, ts_arra
if (text_to_find_ch == '*')
{
text_to_find = utf8codepoint(text_to_find, &text_to_find_ch);
- text_to_find_ch = utf8lwrcodepoint(text_to_find_ch);
+ if (!respect_capitalization) text_to_find_ch = utf8lwrcodepoint(text_to_find_ch);
in_wildcard = true;
}
@@ -196,14 +196,14 @@ bool ts_string_contains(char *text_to_search, utf8_int8_t *text_to_find, ts_arra
continue_search:
if (!in_wildcard) {
text_to_find = utf8codepoint(text_to_find, &text_to_find_ch);
- text_to_find_ch = utf8lwrcodepoint(text_to_find_ch);
+ if (!respect_capitalization) text_to_find_ch = utf8lwrcodepoint(text_to_find_ch);
}
word_match_len_val += utf8codepointsize(text_to_search_current_attempt_ch);
text_to_search_current_attempt = utf8codepoint(
text_to_search_current_attempt,
&text_to_search_current_attempt_ch);
- text_to_search_current_attempt_ch = utf8lwrcodepoint(text_to_search_current_attempt_ch);
+ if (!respect_capitalization) text_to_search_current_attempt_ch = utf8lwrcodepoint(text_to_search_current_attempt_ch);
if (!text_to_search_current_attempt_ch && !text_to_find_ch)
goto done;
@@ -248,7 +248,7 @@ static void _ts_search_file(ts_found_file *ref, ts_file_content content, ts_sear
{
ts_array text_matches = ts_array_create(sizeof(ts_text_match));
size_t search_len = strlen(result->search_text);
- if (ts_string_contains((char *)content.content, result->search_text, &text_matches))
+ if (ts_string_contains((char *)content.content, result->search_text, &text_matches, result->respect_capitalization))
{
ts_mutex_lock(&result->matches.mutex);
for (int i = 0; i < text_matches.length; i++)
@@ -393,7 +393,7 @@ static void _ts_list_files(ts_search_result* result)
ts_thread_detach(&thr);
}
-void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query, int thread_count, int max_file_size)
+void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query, int thread_count, int max_file_size, bool respect_capitalization)
{
if (utf8len(query) > 0 && utf8len(query) <= 2) { // need a string of atleast 3 characters
return;
@@ -410,6 +410,7 @@ void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query,
new_result->filters = ts_get_filters(filter);
new_result->max_ts_thread_count = thread_count;
new_result->max_file_size = max_file_size;
+ new_result->respect_capitalization = respect_capitalization;
if (utf8len(query) == 0) {
new_result->search_text = nullptr;
diff --git a/src/search.h b/src/search.h
index b56e007..8bc6260 100644
--- a/src/search.h
+++ b/src/search.h
@@ -38,6 +38,7 @@ typedef struct t_ts_search_result
utf8_int8_t *search_text;
int max_ts_thread_count;
uint64_t max_file_size;
+ bool respect_capitalization;
} ts_search_result;
typedef struct t_ts_file_match
@@ -64,8 +65,8 @@ ts_array ts_get_filters(utf8_int8_t *pattern);
size_t ts_filter_matches(ts_array *filters, utf8_int8_t *string, utf8_int8_t **matched_filter);
int ts_string_match(utf8_int8_t *first, utf8_int8_t *second);
ts_search_result* ts_create_empty_search_result();
-bool ts_string_contains(utf8_int8_t *text_to_search, utf8_int8_t *text_to_find, ts_array *text_matches);
-void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query, int thread_count, int max_file_size);
+bool ts_string_contains(utf8_int8_t *text_to_search, utf8_int8_t *text_to_find, ts_array *text_matches, bool respect_capitalization);
+void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query, int thread_count, int max_file_size, bool respect_capitalization);
void ts_destroy_result(ts_search_result* result);
#endif \ No newline at end of file
diff --git a/src/widgets/imgui_toggle.cpp b/src/widgets/imgui_toggle.cpp
new file mode 100644
index 0000000..f1c50da
--- /dev/null
+++ b/src/widgets/imgui_toggle.cpp
@@ -0,0 +1,31 @@
+#include "imgui.h"
+#include "imgui_toggle.h"
+
+namespace ImGui {
+ void ToggleButton(const char* label, bool* v) {
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
+ if (*v) {
+ ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor(204, 233, 252));
+ ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor(204, 233, 252));
+ ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor(204, 233, 252));
+ ImGui::PushStyleColor(ImGuiCol_Border, (ImVec4)ImColor(0, 122, 204));
+ ImGui::PushStyleColor(ImGuiCol_Text, (ImVec4)ImColor(64, 73, 79));
+
+ if (ImGui::Button(label)) {
+ *v = !(*v);
+ }
+
+ ImGui::PopStyleColor();
+ ImGui::PopStyleColor();
+ ImGui::PopStyleColor();
+ ImGui::PopStyleColor();
+ ImGui::PopStyleColor();
+ }
+ else {
+ if (ImGui::Button(label)) {
+ *v = !(*v);
+ }
+ }
+ ImGui::PopStyleVar();
+ }
+} \ No newline at end of file
diff --git a/src/widgets/imgui_toggle.h b/src/widgets/imgui_toggle.h
new file mode 100644
index 0000000..3a514a9
--- /dev/null
+++ b/src/widgets/imgui_toggle.h
@@ -0,0 +1,5 @@
+#pragma once
+
+namespace ImGui {
+ void ToggleButton(const char* label, bool* v);
+} \ No newline at end of file