summaryrefslogtreecommitdiff
path: root/biblio/bibtex/utils/xbibfile/listref.c
diff options
context:
space:
mode:
Diffstat (limited to 'biblio/bibtex/utils/xbibfile/listref.c')
-rw-r--r--biblio/bibtex/utils/xbibfile/listref.c156
1 files changed, 156 insertions, 0 deletions
diff --git a/biblio/bibtex/utils/xbibfile/listref.c b/biblio/bibtex/utils/xbibfile/listref.c
new file mode 100644
index 0000000000..947c4c254a
--- /dev/null
+++ b/biblio/bibtex/utils/xbibfile/listref.c
@@ -0,0 +1,156 @@
+/* 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, *vscroll;
+GtkWidget *summary;
+GtkTextBuffer *textpad;
+GtkTextIter iter;
+
+char holder[200], temp[200], report[30], seek[100];
+char type[20], tag[30], title[100];
+
+void viewref(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_ref();
+
+ 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), 550, 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 tag");
+ gtk_box_pack_start(GTK_BOX(panel), description, FALSE, TRUE, 10);
+ selector = gtk_hbox_new(FALSE, 0);
+ searchlabel = gtk_label_new("Tag 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_ref), 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_ref), 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 viewref() above
+ */
+
+void put_text_ref(GtkWidget *widget)
+{
+ int i, count, print_flag, length;
+ char *start;
+
+ extern void error(); /* defined in file error.c */
+ extern FILE *refFile; /* defined in xbibfile.c */
+
+ strcpy(seek, gtk_entry_get_text(GTK_ENTRY(searchword)));
+
+ 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 ( start = strstr(holder, seek) ) {
+ *start = '\0';
+ length = strlen(seek);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ holder, -1,
+ "blackface", "point", "font", NULL);
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ seek, -1,
+ "emphasis", "point", "font", NULL);
+ start += length;
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ start, -1,
+ "blackface", "point", "font", NULL);
+ count++;
+ print_flag = 1;
+ }
+ }
+ else
+ if ( print_flag )
+ gtk_text_buffer_insert_with_tags_by_name(textpad, &iter,
+ holder, -1,
+ "blackface", "point", "font", NULL);
+/* gtk_text_insert(GTK_TEXT(text), text->style->font,
+ NULL, NULL,
+ holder, -1); */
+ }
+ else
+ i++;
+ }
+ sprintf(report, "%d references displayed", count);
+ gtk_entry_set_text(GTK_ENTRY(summary), report);
+}