/* This file is a part of XBibFile - a system for handling BibTeX references * * Author: Ross Maloney * Date: January 2002 * */ #include #include #include GtkWidget *searchlabel, *searchword; GtkWidget *text, *textblock, *scrollblock; GtkWidget *summary; GtkTextBuffer *textpad; GtkTextIter iter; char holder[200], temp[200], report[30], seek[100]; char type[20], tag[30], title[100]; void find_year(GtkWidget *widget) { GtkTooltips *tooltips; GtkWidget *window, *panel, *description, *selector, *controls; GtkWidget *key0, *key1, *key3; extern void close_window(GtkWidget *); /* defined in file cleanup.c */ void put_text_pubyear(); tooltips = gtk_tooltips_new(); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "XBibFile inspect"); gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_MOUSE); gtk_window_set_default_size(GTK_WINDOW(window), 500, 510); panel = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), panel); description = gtk_label_new("References found in the database containing specified publication year"); gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10); selector = gtk_hbox_new(FALSE, 0); searchlabel = gtk_label_new("Year to find:"); gtk_box_pack_start(GTK_BOX(selector), searchlabel, FALSE, TRUE, 10); searchword = gtk_entry_new_with_max_length(100); gtk_box_pack_start(GTK_BOX(selector), searchword, FALSE, TRUE, 10); g_signal_connect(GTK_OBJECT(searchword), "activate", G_CALLBACK(put_text_pubyear), NULL); key3 = gtk_button_new_with_label("Execute"); gtk_widget_set_usize(GTK_WIDGET(key3), 90, -1); g_signal_connect(GTK_OBJECT(key3), "clicked", G_CALLBACK(put_text_pubyear), NULL); gtk_tooltips_set_tip(tooltips, key3, "Execute search with this new word", NULL); gtk_box_pack_end(GTK_BOX(selector), key3, FALSE, FALSE, 10); gtk_box_pack_start(GTK_BOX(panel), selector, FALSE, TRUE, 10); /* create the text display part of the window */ textblock = gtk_scrolled_window_new(NULL, NULL); textpad = gtk_text_buffer_new(NULL); text = gtk_text_view_new_with_buffer(textpad); gtk_container_add(GTK_CONTAINER(textblock), text); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(textblock), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start_defaults(GTK_BOX(panel), textblock); /* put the window control buttons in place */ controls = gtk_hbox_new(FALSE, 0); key0 = gtk_button_new_with_label("CANCEL"); gtk_widget_set_usize(GTK_WIDGET(key0), 90, -1); g_signal_connect(GTK_OBJECT(key0), "clicked", G_CALLBACK(close_window), NULL); gtk_tooltips_set_tip(tooltips, key0, "Finish this reference probe", NULL); gtk_box_pack_end(GTK_BOX(controls), key0, FALSE, FALSE, 10); /* and put the summary line in place */ summary = gtk_entry_new(); gtk_editable_set_editable(GTK_EDITABLE(summary), FALSE); gtk_widget_set_usize(GTK_WIDGET(summary), 150, 20); gtk_box_pack_start(GTK_BOX(controls), summary, FALSE, FALSE, 10); gtk_box_pack_end(GTK_BOX(panel), controls, FALSE, TRUE, 10); /* now put the 'style' for the text output */ gtk_text_buffer_create_tag(textpad, "blackface", "foreground", "black", NULL); gtk_text_buffer_create_tag(textpad, "emphasis", "foreground", "red", NULL); gtk_text_buffer_create_tag(textpad, "target", "foreground", "green", NULL); gtk_text_buffer_create_tag(textpad, "point", "size", 11 * PANGO_SCALE, NULL); gtk_text_buffer_create_tag(textpad, "font", "style", PANGO_STYLE_NORMAL, NULL); /* put the composite window on the screen */ gtk_widget_show_all(window); } /* This procedure performs the searching of the BibTeX database and returns * its results to the text window created in the procedure find_year() above */ void put_text_pubyear(GtkWidget *widget) { int i, count, start_flag, print_flag, length; char *start, *end; extern void error(); /* defined in file error.c */ extern FILE *refFile; /* defined in xbibfile.c */ strcpy(seek, gtk_editable_get_chars(GTK_EDITABLE(searchword), 0, -1)); i = 0; count = 0; rewind(refFile); gtk_text_buffer_get_iter_at_offset(textpad, &iter, 0); while ( ( holder[i] = getc(refFile) ) != EOF ) { if ( holder[i] == '\n' ) { holder[i+1] = '\0'; i = 0; if ( holder[0] == '@' ) { print_flag = 0; if ( strstr( holder, "ARTICLE") ) strcpy(temp, "Article "); if ( strstr( holder, "BOOK") ) strcpy(temp, "Book "); if ( strstr( holder, "BOOKLET") ) strcpy(temp, "Booklet "); if ( strstr( holder, "CONFERENCE") ) strcpy(temp, "Conference "); if ( strstr( holder, "INBOOK") ) strcpy(temp, "inBook "); if ( strstr( holder, "INCOLLECTION") ) strcpy(temp, "Incollection "); if ( strstr( holder, "INPROCEEDINGS") ) strcpy(temp, "inProceedings "); if ( strstr( holder, "MANUAL") ) strcpy(temp, "Manual "); if ( strstr( holder, "MASTERSTHESIS") ) strcpy(temp, "Masters "); if ( strstr( holder, "MISC") ) strcpy(temp, "Misc "); if ( strstr( holder, "PHDTHESIS") ) strcpy(temp, "PhD Thesis "); if ( strstr( holder, "PROCEEDINGS") ) strcpy(temp, "Proceedings "); if ( strstr( holder, "TECHREPORT") ) strcpy(temp, "Tech Rerort "); if ( strstr( holder, "UNPUBLISHED") ) strcpy(temp, "Unpublished "); strcpy(type, temp); if ( start = strstr( holder, "{" ) ) if ( end = strstr( holder, "," ) ) { *end = ' '; end++; *end = ' '; end++; *end = '\0'; strcpy(tag, start+1); } else { error(widget, GINT_TO_POINTER(9)); g_print("Format error in this BibTeX file - no ending ,"); } else { error(widget, GINT_TO_POINTER(9)); g_print("Format error in this BibTeX file - no {"); } } /* if the line starts with 'year = {' */ if ( start = strstr(holder, " year = {") ) { end = strstr(holder, "}"); *end = '\n'; end++; *end = '\0'; strcpy(temp, start+10); if ( strstr(holder, seek) ) { gtk_text_buffer_insert_with_tags_by_name(textpad, &iter, type, -1, "blackface", "point", "font", NULL); gtk_text_buffer_insert_with_tags_by_name(textpad, &iter, tag, -1, "emphasis", "point", "font", NULL); gtk_text_buffer_insert_with_tags_by_name(textpad, &iter, title, -1, "blackface", "point", "font", NULL); count++; } } /* if the line starts with 'title = {' */ if ( start = strstr( holder, " title = {" ) ) { if ( end = strstr( holder, "}," ) ) { if ( (end - start) > 60 ) end = start + 60; *end = '\n'; end++; *end = '\0'; start += 11; strcpy(title, start); } else { error(widget, GINT_TO_POINTER(9)); g_print("Format error in this BibTeX file - no ending ,}"); } } } else i++; } sprintf(report, "%d references displayed", count); gtk_entry_set_text(GTK_ENTRY(summary), report); }