diff --git a/Makefile b/Makefile index 63a09b6..6e61fc1 100644 --- a/Makefile +++ b/Makefile @@ -6,4 +6,4 @@ LDFLAGS := $(shell pkg-config --libs ${LIBS}) CC_COMMAND := ${CC} ${INCDIR} ${CFLAGS} all: build build: - ${CC_COMMAND} src/util/string.c src/util/xml.c src/util/soup.c src/view/list_view_manga.c src/view/main_view.c src/manga.c src/backend/readmng.c manga.c main.c -o main ${LDFLAGS} -ggdb + ${CC_COMMAND} src/util/regex.c src/util/string.c src/util/xml.c src/util/soup.c src/view/list_view_manga.c src/view/main_view.c src/manga.c src/backend/readmng.c manga.c main.c -o main ${LDFLAGS} -ggdb diff --git a/include/manga.h b/include/manga.h deleted file mode 100644 index 708b4d0..0000000 --- a/include/manga.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once -#include -#include -#include -#ifndef PCRE2_CODE_UNIT_WIDTH -#define PCRE2_CODE_UNIT_WIDTH 8 -#include -#endif - -struct Manga { - char *title; - char *image_url; -}; - -struct SplittedString { - struct String *substrings; - size_t n_strings; -}; - -struct String { - char *content; - size_t size; -}; - -struct SplittedString * -split(char *re_str, size_t re_str_size, const char *subject, size_t subject_size); -void -splitted_string_free (struct SplittedString *splitted_string); -char * -match_1 (char *re_str, char *subject); diff --git a/include/openmg/util/regex.h b/include/openmg/util/regex.h new file mode 100644 index 0000000..3d1dc7e --- /dev/null +++ b/include/openmg/util/regex.h @@ -0,0 +1,32 @@ +#pragma once +#include + +G_BEGIN_DECLS; + +#define MG_TYPE_UTIL_REGEX mg_util_regex_get_type() +G_DECLARE_FINAL_TYPE (MgUtilRegex, mg_util_regex, MG, UTIL_REGEX, GObject) + +MgUtilRegex *mg_util_regex_new (); + + +struct SplittedString { + struct String *substrings; + size_t n_strings; +}; + +struct String { + char *content; + size_t size; +}; + +struct SplittedString * +mg_util_regex_split (MgUtilRegex *self, + char *re_str, size_t re_str_size, const char *subject, size_t subject_size); +void +mg_util_regex_splitted_string_free (MgUtilRegex *self, + struct SplittedString *splitted_string); +char * +mg_util_regex_match_1 (MgUtilRegex *self, + char *re_str, char *subject); + +G_END_DECLS diff --git a/src/backend/readmng.c b/src/backend/readmng.c index f8c8e8f..60ca01f 100644 --- a/src/backend/readmng.c +++ b/src/backend/readmng.c @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -255,7 +256,8 @@ static char * mg_backend_get_id_manga_link (MgBackendReadmng *self, xmlNodePtr a) { char *re_str = "readmng\\.com/([^/]+)"; MgUtilXML *xml_utils = self->xml_utils; - return match_1 (re_str, mg_util_xml_get_attr (xml_utils, a, "href")); + MgUtilRegex *regex_util = mg_util_regex_new (); + return mg_util_regex_match_1 (regex_util, re_str, mg_util_xml_get_attr (xml_utils, a, "href")); } static void diff --git a/manga.c b/src/util/regex.c similarity index 77% rename from manga.c rename to src/util/regex.c index f272349..d61d43b 100644 --- a/manga.c +++ b/src/util/regex.c @@ -1,21 +1,42 @@ -#include +#include + #ifndef PCRE2_CODE_UNIT_WIDTH #define PCRE2_CODE_UNIT_WIDTH 8 #include #endif +#include #include -#include +struct _MgUtilRegex { + GObject parent_instance; +}; + +G_DEFINE_TYPE (MgUtilRegex, mg_util_regex, G_TYPE_OBJECT) -// TODO: Split this file and delete it. static void -iterate_string_to_split(struct SplittedString *splitted_string, +mg_util_regex_class_init (MgUtilRegexClass *class) { +} +static void +mg_util_regex_init (MgUtilRegex *class) { +} + +static void +mg_util_regex_iterate_string_to_split (MgUtilRegex *self, + struct SplittedString *splitted_string, pcre2_code *re, int *will_break, const char *subject, size_t subject_size, size_t *start_pos, size_t *offset); +MgUtilRegex * +mg_util_regex_new () { + MgUtilRegex *self = NULL; + self = MG_UTIL_REGEX ((g_object_new (MG_TYPE_UTIL_REGEX, NULL))); + return self; +} + struct SplittedString * -split(char *re_str, size_t re_str_size, const char *subject, size_t subject_size) { +mg_util_regex_split (MgUtilRegex *self, + char *re_str, size_t re_str_size, const char *subject, size_t subject_size) { pcre2_code_8 *re; size_t start_pos = 0; size_t offset = 0; @@ -31,7 +52,8 @@ split(char *re_str, size_t re_str_size, const char *subject, size_t subject_size re_str_size, 0, ®ex_compile_error, &error_offset, NULL); while (start_pos < subject_size) { int will_break = 0; - iterate_string_to_split(splitted_string, re, &will_break, + mg_util_regex_iterate_string_to_split (self, + splitted_string, re, &will_break, subject, subject_size, &start_pos, &offset); if (will_break) { break; @@ -43,8 +65,10 @@ split(char *re_str, size_t re_str_size, const char *subject, size_t subject_size return splitted_string; } + void -splitted_string_free (struct SplittedString *splitted_string) { +mg_util_regex_splitted_string_free (MgUtilRegex *self, + struct SplittedString *splitted_string) { for (int i = 0; in_strings; i++) { g_free (splitted_string->substrings[i].content); } @@ -54,8 +78,9 @@ splitted_string_free (struct SplittedString *splitted_string) { } static void -iterate_string_to_split(struct SplittedString *splitted_string, - pcre2_code *re, int *will_break, const char *subject, +mg_util_regex_iterate_string_to_split (MgUtilRegex *self, + struct SplittedString *splitted_string, + pcre2_code *re, int *will_break, const char *subject, size_t subject_size, size_t *start_pos, size_t *offset) { pcre2_match_data_8 *match_data; PCRE2_SIZE *ovector; @@ -104,7 +129,8 @@ cleanup_iterate_string_to_split: } char * -match_1 (char *re_str, char *subject) { +mg_util_regex_match_1 (MgUtilRegex *self, + char *re_str, char *subject) { pcre2_code *re; pcre2_match_data *match_data; diff --git a/src/util/soup.c b/src/util/soup.c index 94965c4..e273a05 100644 --- a/src/util/soup.c +++ b/src/util/soup.c @@ -28,7 +28,6 @@ mg_util_soup_get_request (MgUtilSoup *self, const char *url, gsize *size_respons SoupSession *soup_session; SoupMessage *msg; GValue response = G_VALUE_INIT; - guint status; *size_response_text = 0; @@ -36,7 +35,7 @@ mg_util_soup_get_request (MgUtilSoup *self, const char *url, gsize *size_respons soup_session = soup_session_new (); msg = soup_message_new ("GET", url); - status = soup_session_send_message (soup_session, msg); + soup_session_send_message (soup_session, msg); g_object_get_property( G_OBJECT (msg), "response-body-data", diff --git a/src/util/xml.c b/src/util/xml.c index 716b791..381717e 100644 --- a/src/util/xml.c +++ b/src/util/xml.c @@ -4,6 +4,7 @@ #include #include +#include #include struct _MgUtilXML { @@ -94,8 +95,9 @@ mg_util_xml_has_class (MgUtilXML *self, const char *class_attribute, const char *class_to_check) { char *re = "\\s+"; struct SplittedString *classes; + MgUtilRegex *regex_util = mg_util_regex_new (); int return_value = 0; - classes = split (re, strlen(re), class_attribute, + classes = mg_util_regex_split (regex_util, re, strlen(re), class_attribute, strlen (class_attribute)); for (int i = 0; in_strings; i++) { if (strcmp (classes->substrings[i].content, class_to_check) == 0) { @@ -105,7 +107,7 @@ mg_util_xml_has_class (MgUtilXML *self, } cleanup_has_class: - splitted_string_free (classes); + mg_util_regex_splitted_string_free (regex_util, classes); return return_value; }