static void gui_button_cb_home (I, GuiButtonEvent event) { (void) event; iam (Manual); ManPages pages = (ManPages) my data; long iHome = ManPages_lookUp (pages, L"Intro"); HyperPage_goToPage_i (me, iHome ? iHome : 1); }
static void menu_cb_searchForPageList (Manual me, EDITOR_ARGS_FORM) { EDITOR_FORM (U"Search for page", nullptr) ManPages manPages = (ManPages) my data; long numberOfPages; const char32 **pages = ManPages_getTitles (manPages, & numberOfPages); LIST (U"Page", manPages -> pages.size, pages, 1) EDITOR_OK EDITOR_DO HyperPage_goToPage_i (me, GET_INTEGER (U"Page")); EDITOR_END }
static void menu_cb_searchForPageList (EDITOR_ARGS) { EDITOR_IAM (Manual); EDITOR_FORM (L"Search for page", 0) ManPages manPages = (ManPages) my data; long numberOfPages; const wchar_t **pages = ManPages_getTitles (manPages, & numberOfPages); LIST (L"Page", manPages -> pages -> size, pages, 1) EDITOR_OK EDITOR_DO HyperPage_goToPage_i (me, GET_INTEGER (L"Page")); EDITOR_END }
static void search (Manual me, const char32 *query) { ManPages manPages = (ManPages) my data; long numberOfPages = manPages -> pages.size; static MelderString searchText { 0 }; MelderString_copy (& searchText, query); for (char32 *p = & searchText.string [0]; *p != U'\0'; p ++) { if (*p == U'\n') *p = U' '; *p = towlower ((int) *p); } if (! goodnessOfMatch) goodnessOfMatch = NUMvector <double> (1, numberOfPages); for (long ipage = 1; ipage <= numberOfPages; ipage ++) { char32 *token = searchText.string; goodnessOfMatch [ipage] = 1.0; for (;;) { char32 *space = str32chr (token, U' '); if (space) *space = U'\0'; goodnessOfMatch [ipage] *= searchToken (manPages, ipage, token); if (! space) break; *space = U' '; // restore token = space + 1; } } /* * Find the 20 best matches. */ my numberOfMatches = 0; for (long imatch = 1; imatch <= 20; imatch ++) { long imax = 0; double max = 0.0; for (long ipage = 1; ipage <= numberOfPages; ipage ++) { if (goodnessOfMatch [ipage] > max) { max = goodnessOfMatch [ipage]; imax = ipage; } } if (! imax) break; my matches [++ my numberOfMatches] = imax; goodnessOfMatch [imax] = 0.0; // skip next time } HyperPage_goToPage_i (me, SEARCH_PAGE); }
static void gui_button_cb_home (Manual me, GuiButtonEvent /* event */) { ManPages pages = (ManPages) my data; long iHome = ManPages_lookUp (pages, U"Intro"); HyperPage_goToPage_i (me, iHome ? iHome : 1); }
static void gui_button_cb_nextPage (I, GuiButtonEvent event) { (void) event; iam (HyperPage); long currentPageNumber = my v_getCurrentPageNumber (); HyperPage_goToPage_i (me, currentPageNumber < my v_getNumberOfPages () ? currentPageNumber + 1 : 1); }
static void gui_button_cb_previousPage (I, GuiButtonEvent event) { (void) event; iam (HyperPage); HyperPage_goToPage_i (me, my v_getCurrentPageNumber () > 1 ? my v_getCurrentPageNumber () - 1 : my v_getNumberOfPages ()); }