/* * Copyright (c) 2022 joshua stein * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef __WIKIPEDIA_H__ #define __WIKIPEDIA_H__ #include "browser.h" #include "http.h" #define PROGRAM_NAME "Wikipedia" #define MBAR_ID 128 #define SETTINGS_DLOG_ID 129 #define SETTINGS_HOSTNAME_ID 3 #define STR_HOSTNAME_ID 1000 #define DEFAULT_HOSTNAME "http-wikipedia.jcsdotorg.workers.dev" #define APPLE_MENU_ID 128 #define APPLE_MENU_ABOUT_ID 1 #define FILE_MENU_ID 129 #define FILE_MENU_NEW_ID 1 #define FILE_MENU_SETTINGS_ID 3 #define FILE_MENU_QUIT_ID 5 #define EDIT_MENU_ID 130 #define EDIT_MENU_CUT_ID 1 #define EDIT_MENU_COPY_ID 2 #define EDIT_MENU_PASTE_ID 3 #define EDIT_MENU_SELECT_ALL_ID 4 #define VIEW_MENU_ID 131 #define VIEW_MENU_DEBUG_ID 1 extern MenuHandle file_menu, edit_menu, view_menu; void menu_defaults(void); enum { WP_STATE_XML_INIT, WP_STATE_XML_PARSE, WP_STATE_WIKITEXT_INIT, WP_STATE_WIKITEXT_PARSE, WP_STATE_HAVE_REDIRECT, WP_STATE_DONE }; struct wikipedia_request { short state; struct browser *browser; struct http_request *http_request; char *normalized_title; size_t read_len; size_t article_len; char *buf; size_t buf_size; size_t buf_idx; short refs, curlys, brackets; unsigned long style, last_style; bool trim_whitespace, redirect; }; struct wikipedia_request * wikipedia_fetch_article(struct browser *, char *); size_t wikipedia_fetch_search_results(struct browser *browser, char *query, char ***results); struct wikipedia_request * wikipedia_read_cached_article(struct browser *browser, char *name); void wikipedia_request_present(struct wikipedia_request *wpr); void wikipedia_request_process(struct wikipedia_request *wpr); void wikipedia_request_free(struct wikipedia_request **wprptr); #endif