summaryrefslogtreecommitdiff
path: root/biblio/bibtex/utils/xbibfile/listwriter.c
diff options
context:
space:
mode:
Diffstat (limited to 'biblio/bibtex/utils/xbibfile/listwriter.c')
-rw-r--r--biblio/bibtex/utils/xbibfile/listwriter.c234
1 files changed, 234 insertions, 0 deletions
diff --git a/biblio/bibtex/utils/xbibfile/listwriter.c b/biblio/bibtex/utils/xbibfile/listwriter.c
new file mode 100644
index 0000000000..bab5d793ac
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listwriter.c
@@ -0,0 +1,234 @@
+/* This file is a part of XBibFile - a system for handling BibTeX references
+ *
+ * Author: Ross Maloney
+ * Date: January 2002
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+
+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_author(GtkWidget *widget)
+{
+ GtkTooltips *tooltips;
+ GtkWidget *window, *panel, *description, *selector, *controls;
+ GtkWidget *key0, *key1, *key3;
+ GtkEditable *summarypad;
+
+ extern void close_window(GtkWidget *); /* defined in file cleanup.c */
+ void put_text_author();
+
+ 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 author");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+ selector = gtk_hbox_new(FALSE, 0);
+ searchlabel = gtk_label_new("Author 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_author), 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_author), 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_author() above
+ */
+
+void put_text_author(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 'author = {' */
+ if ( start = strstr(holder, " author = {") ) {
+ end = strstr(holder, "}");
+ *end = '\n';
+ end++;
+ *end = '\0';
+ strcpy(temp, start+12);
+ if ( strstr(temp, seek) )
+ print_flag = 1;
+ }
+ /* 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 ,}");
+ }
+ if ( print_flag ) {
+ 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);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ " ", -1,
+ "blackface", "point", "font", NULL);
+ start = strstr(temp, seek);
+ *start = '\0';
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ temp, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ seek, -1,
+ "target", "point", "font", NULL);
+ length = strlen(seek);
+ start += length;
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ start, -1,
+ "blackface", "point", "font", NULL);
+ count++;
+ print_flag = 0;
+ }
+ }
+ }
+ else
+ i++;
+ }
+ sprintf(report, "%d references displayed", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}