diff options
Diffstat (limited to 'biblio/bibtex/utils/mkbib/src/mkbib.c')
-rw-r--r-- | biblio/bibtex/utils/mkbib/src/mkbib.c | 457 |
1 files changed, 457 insertions, 0 deletions
diff --git a/biblio/bibtex/utils/mkbib/src/mkbib.c b/biblio/bibtex/utils/mkbib/src/mkbib.c new file mode 100644 index 0000000000..7eeefc037b --- /dev/null +++ b/biblio/bibtex/utils/mkbib/src/mkbib.c @@ -0,0 +1,457 @@ +/* Copyright (C) 2012 Rudra Banerjee*/ + +/* + This file is part of mkbib. + + mkbib is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + mkbib is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with mkbib. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <gtk/gtk.h> +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <glib/gi18n.h> +#include <gdk/gdk.h> +#include <gdk/gdkkeysyms.h> +#include <glib/gstdio.h> +#include <fcntl.h> +#include <gtk/gtk.h> +#include "main.h" +#include "config.h" + +FILE *tauth,*tyear,*ttitle; +GtkWidget *window, + *menubar, + *flabel, + *tree, + *dialog, + *image, + *bibcombo, + *entrypdf; +char *filename,*key, *val; +GtkAccelGroup *menuGroup; +GtkListStore *store; +GtkTreeIter siter; +gchar *buffer = NULL; + +void help_about(GtkMenuItem *helpabout, GtkWidget *parentWindow); +void activate_func(GtkWidget *widget, gpointer data); +void search_gs(GtkWidget *widget, gpointer data); +void output_entry (GHashTable *table); +guint parse_entry (GScanner *scanner,GHashTable *table); +GtkWidget *create_view_and_model(void); +void new_file(GtkWidget *widget, gpointer data); +void open_file(GtkWidget *widget, gpointer data); +void save_file(GtkWidget *widget, gpointer data); +void save_file_as(GtkWidget *widget, gpointer data); +void mk_bib(GtkWidget *widget, gpointer data); +void caution(); +void help_content(GtkWidget *widget); +void gen_gs(GtkWidget *widget, gpointer data); + +GdkPixbuf *create_pixbuf(const gchar * iconname) { + GdkPixbuf *pixbuf; + GError *error = NULL; + pixbuf = gdk_pixbuf_new_from_file(iconname, &error); + if (!pixbuf) { + fprintf(stderr, "%s\n", error->message); + g_error_free(error); + } + + return pixbuf; +} + +gint sort_by_author(GtkTreeModel *model, + GtkTreeIter *a, + GtkTreeIter *b, + gpointer userdata) +{ + gchar *first,*second ; + gtk_tree_model_get( model , a, COL_BIB_AUTHOR , &first,-1); + gtk_tree_model_get( model , b, COL_BIB_AUTHOR , &second, -1); + + gint return_value = g_utf8_collate ( first , second ) ; + g_free ( first) ; + g_free ( second ) ; + return return_value ; +} + +void main_window_quit(GtkWidget *widget, gpointer data){ + if(!buf_mod){ + gtk_main_quit(); + } + else{ + gboolean ret = FALSE; + GtkWidget *dialog = gtk_message_dialog_new (NULL, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_YES_NO, + "Do you want to save the changes before quit?"); + + gtk_window_set_title (GTK_WINDOW (dialog), "Save?"); + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_NO) + { + gtk_main_quit(); + } + else { + save_file_as(widget,data); + gtk_main_quit(); + } + gtk_widget_destroy (dialog); + } +} + +int main(int argc, + char *argv[]) { + GtkWidget *grid, + *button, + *frame, + *notebook, + *label, + *scrolledwindow, + *filemenu, + *editmenu, + *helpmenu, + *file, + *new, + *open, + *save, + *save_as, + *quit, + *edit, + *edit_entry, + *help, + *about, + *sep; + GtkAccelGroup *accel_group = NULL; + gtk_init(&argc, &argv); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), "mkBIB"); + gtk_container_set_border_width(GTK_CONTAINER(window), 5); + gchar *sicon=g_strdup_printf("%s/mkbib.svg",PIXMAP); + gtk_window_set_icon(GTK_WINDOW(window), + create_pixbuf(sicon)); + g_free(sicon); + g_signal_connect(window, "delete-event", + G_CALLBACK(main_window_quit), NULL); + + grid = gtk_grid_new(); + gtk_container_add(GTK_CONTAINER(window), grid); + + menubar = gtk_menu_bar_new(); + filemenu = gtk_menu_new(); + editmenu = gtk_menu_new(); + helpmenu = gtk_menu_new(); + + accel_group = gtk_accel_group_new(); + gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); + + file = gtk_menu_item_new_with_mnemonic("_File"); + new = gtk_image_menu_item_new_from_stock(GTK_STOCK_NEW, accel_group); + open = gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, accel_group); + save = gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE, accel_group); + save_as = gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE_AS, accel_group); + sep = gtk_separator_menu_item_new(); + quit = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group); + + gtk_widget_add_accelerator (save, "activate", accel_group, + GDK_KEY_s, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); + gtk_widget_add_accelerator (save_as, "activate", accel_group, + GDK_KEY_S, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), filemenu); + gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), new); + gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), open); + gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), save); + gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), save_as); + gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), sep); + gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), quit); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file); + + + edit = gtk_menu_item_new_with_mnemonic("_Edit"); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), edit); + edit_entry = gtk_image_menu_item_new_from_stock(GTK_STOCK_EDIT, accel_group); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(edit), editmenu); + gtk_menu_shell_append(GTK_MENU_SHELL(editmenu), edit_entry); + + + help = gtk_menu_item_new_with_mnemonic("_Help"); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), help); + about = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, accel_group); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(help), helpmenu); + gtk_menu_shell_append(GTK_MENU_SHELL(helpmenu), about); + + GtkWidget *contents = gtk_image_menu_item_new_from_stock(GTK_STOCK_HELP, accel_group); + gtk_widget_add_accelerator(contents, "activate", accel_group, GDK_KEY_F1, 0, GTK_ACCEL_VISIBLE); + gtk_menu_shell_append(GTK_MENU_SHELL(helpmenu), contents); + + g_signal_connect(G_OBJECT(new), "activate", G_CALLBACK(new_file), NULL); + g_signal_connect(G_OBJECT(open), "activate", G_CALLBACK(open_file), NULL); + g_signal_connect(G_OBJECT(save), "activate", G_CALLBACK(save_file), NULL); + g_signal_connect(G_OBJECT(save_as), "activate", G_CALLBACK(save_file_as), NULL); + g_signal_connect(G_OBJECT(quit), "activate", G_CALLBACK(main_window_quit), NULL); + // g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); + + g_signal_connect(G_OBJECT(edit_entry), "activate", G_CALLBACK(gen_gs), NULL); + + g_signal_connect(G_OBJECT(contents), "activate", G_CALLBACK(help_content), NULL); + g_signal_connect(G_OBJECT(about), "activate", G_CALLBACK(help_about), (gpointer) window); + + + Entries *e = g_slice_new(Entries); + + + e->combo = gtk_combo_box_text_new(); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "==Entry Type=="); + gtk_combo_box_set_active(GTK_COMBO_BOX(e->combo), 0); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Book"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Article"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Booklet"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Conference"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "inBook"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "inCollection"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "inProceedings"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Manual"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "MastersThesis"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Misc"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "PhdThesis"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Proceedings"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Techreport"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(e->combo), "Unpublished"); + + e->entry1 = gtk_entry_new(); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entry1), "bibKey"); + + scrolledwindow = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow), + GTK_SHADOW_IN); + gtk_widget_set_size_request(scrolledwindow, 1000, 175); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + +// tree = create_view_and_model(); + gtk_container_add(GTK_CONTAINER(scrolledwindow), create_view_and_model()); + + notebook = gtk_notebook_new(); + gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP); + + + /* + * Tab 1 + */ + frame = gtk_frame_new(""); + + GtkWidget *page1 = gtk_grid_new(); + gtk_container_add(GTK_CONTAINER(frame), page1); + + e->entryAuth = gtk_entry_new(); + GtkWidget *Authlabel = gtk_label_new("Author"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryAuth), "Author"); + + e->entryEditor = gtk_entry_new(); + GtkWidget *Editorlabel = gtk_label_new("Editor"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryEditor), "Editor"); + + e->entryTitle = gtk_entry_new(); + GtkWidget *Titlelabel = gtk_label_new("Title"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryTitle), "Title"); + + e->entrySeries = gtk_entry_new(); + GtkWidget *Serieslabel = gtk_label_new("Series"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entrySeries), "Series"); + + e->entryBooktitle = gtk_entry_new(); + GtkWidget *Booktitlelabel = gtk_label_new("Booktitle"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryBooktitle), "Booktitle"); + + e->entryYear = gtk_entry_new(); + GtkWidget *Yearlabel = gtk_label_new("Year"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryYear), "Year"); + + label = gtk_label_new("Authors/Title"); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, label); + + gtk_grid_attach(GTK_GRID(page1), e->entryAuth, 2, 0, 1, 1); + gtk_grid_attach(GTK_GRID(page1), Authlabel, 0, 0, 1, 1); + + gtk_grid_attach(GTK_GRID(page1), e->entryTitle, 2, 4, 1, 1); + gtk_grid_attach(GTK_GRID(page1), Titlelabel, 0, 4, 1, 1); + + gtk_grid_attach(GTK_GRID(page1), e->entryYear, 2, 8, 1, 1); + gtk_grid_attach(GTK_GRID(page1), Yearlabel, 0, 8, 1, 1); + + gtk_grid_attach(GTK_GRID(page1),gtk_separator_new(GTK_ORIENTATION_HORIZONTAL),0,10,4,2); + gtk_grid_attach(GTK_GRID(page1), e->entrySeries, 2, 12, 1, 1); + gtk_grid_attach(GTK_GRID(page1), Serieslabel, 0, 12, 1, 1); + + gtk_grid_attach(GTK_GRID(page1), e->entryBooktitle, 2, 16, 1, 1); + gtk_grid_attach(GTK_GRID(page1), Booktitlelabel, 0, 16, 1, 1); + + gtk_grid_attach(GTK_GRID(page1), e->entryEditor, 2, 20, 1, 1); + gtk_grid_attach(GTK_GRID(page1), Editorlabel, 0, 20, 1, 1); + + + /* + * Tab 2 + */ + GtkWidget *frame2 = gtk_frame_new(""); + + GtkWidget *page2 = gtk_grid_new(); + gtk_container_add(GTK_CONTAINER(frame2), page2); + + e->entryJournal = gtk_entry_new(); + GtkWidget *Journallabel = gtk_label_new("Journal"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryJournal), "Journal"); + + e->entryPublisher = gtk_entry_new(); + GtkWidget *Publabel = gtk_label_new("Publishers"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryPublisher), "Publisher"); + + e->entryVol = gtk_entry_new(); + GtkWidget *Vollabel = gtk_label_new("Volume"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryVol), "Volume"); + + e->entryNumber = gtk_entry_new(); + GtkWidget *Isslabel = gtk_label_new("Number"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryNumber), "Number"); + + e->entryPage = gtk_entry_new(); + GtkWidget *Pagelabel = gtk_label_new("Page"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryPage), "Page"); + + + e->entryChap = gtk_entry_new(); + GtkWidget *Chaplabel = gtk_label_new("Chap"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryChap), "Chapter"); + + label = gtk_label_new("Publishers"); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame2, label); + + gtk_grid_attach(GTK_GRID(page2), e->entryJournal, 2, 0, 1, 1); + gtk_grid_attach(GTK_GRID(page2), Journallabel, 0, 0, 1, 1); + + gtk_grid_attach(GTK_GRID(page2), e->entryPublisher, 2, 4, 1, 1); + gtk_grid_attach(GTK_GRID(page2), Publabel, 0, 4, 1, 1); + + gtk_grid_attach(GTK_GRID(page2), e->entryVol, 2, 8, 1, 1); + gtk_grid_attach(GTK_GRID(page2), Vollabel, 0, 8, 1, 1); + + gtk_grid_attach(GTK_GRID(page2), e->entryNumber, 2, 12, 1, 1); + gtk_grid_attach(GTK_GRID(page2), Isslabel, 0, 12, 1, 1); + + gtk_grid_attach(GTK_GRID(page2), e->entryPage, 2, 16, 1, 1); + gtk_grid_attach(GTK_GRID(page2), Pagelabel, 0, 16, 1, 1); + + gtk_grid_attach(GTK_GRID(page2), e->entryChap, 2, 20, 1, 1); + gtk_grid_attach(GTK_GRID(page2), Chaplabel, 0, 20, 1, 1); + + /* + * Tab 3 + */ + GtkWidget *frame3 = gtk_frame_new(""); + + GtkWidget *page3 = gtk_grid_new(); + gtk_container_add(GTK_CONTAINER(frame3), page3); + + e->entryMon = gtk_entry_new(); + GtkWidget *Monlabel = gtk_label_new("Month"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryMon), "Month"); + + e->entryNote = gtk_entry_new(); + GtkWidget *Notelabel = gtk_label_new("Note"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryNote), "Note"); + + e->entryKey = gtk_entry_new(); + GtkWidget *Keylabel = gtk_label_new("Key"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryKey), "Key"); + + e->entryAddress = gtk_entry_new(); + GtkWidget *Addlabel = gtk_label_new("Address"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryAddress), "Address"); + + e->entryEdition = gtk_entry_new(); + GtkWidget *Editionlabel = gtk_label_new("Edition"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryEdition), "Edition"); + + e->entryOrg = gtk_entry_new(); + GtkWidget *Orglabel = gtk_label_new("Organisation"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entryOrg), "Organisation"); + + e->entrySchool = gtk_entry_new(); + GtkWidget *Schoollabel = gtk_label_new("School"); + gtk_entry_set_placeholder_text(GTK_ENTRY(e->entrySchool), "School"); + + label = gtk_label_new("Optional"); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame3, label); + + + gtk_grid_attach(GTK_GRID(page3), e->entryMon, 2, 0, 1, 1); + gtk_grid_attach(GTK_GRID(page3), Monlabel, 0, 0, 1, 1); + + gtk_grid_attach(GTK_GRID(page3), e->entryNote, 2, 4, 1, 1); + gtk_grid_attach(GTK_GRID(page3), Notelabel, 0, 4, 1, 1); + + gtk_grid_attach(GTK_GRID(page3), e->entryKey, 2, 8, 1, 1); + gtk_grid_attach(GTK_GRID(page3), Keylabel, 0, 8, 1, 1); + + gtk_grid_attach(GTK_GRID(page3), e->entryAddress, 2, 12, 1, 1); + gtk_grid_attach(GTK_GRID(page3), Addlabel, 0, 12, 1, 1); + + gtk_grid_attach(GTK_GRID(page3), e->entryEdition, 2, 16, 1, 1); + gtk_grid_attach(GTK_GRID(page3), Editionlabel, 0, 16, 1, 1); + + gtk_grid_attach(GTK_GRID(page3), e->entryOrg, 2, 20, 1, 1); + gtk_grid_attach(GTK_GRID(page3), Orglabel, 0, 20, 1, 1); + + gtk_grid_attach(GTK_GRID(page3), e->entrySchool, 2, 24, 1, 1); + gtk_grid_attach(GTK_GRID(page3), Schoollabel, 0, 24, 1, 1); + + /* + * Notebook Done + */ + /* bibcombo = gtk_combo_box_text_new(); +#include "biblst" + +gtk_combo_box_set_active(GTK_COMBO_BOX(bibcombo), 0); +g_signal_connect(G_OBJECT(bibcombo), "changed", G_CALLBACK(mk_bib), NULL); +gtk_grid_attach(GTK_GRID(grid), bibcombo, 31, 6, 2, 1); +*/ + button = gtk_button_new_with_label("CREATE"); + g_signal_connect(button, "clicked", G_CALLBACK(activate_func), e); + + GtkWidget *gen_q = gtk_button_new_with_label("Search Google Scholar"); + g_signal_connect(gen_q, "clicked", G_CALLBACK(search_gs), e); + + gtk_grid_set_column_spacing(GTK_GRID(grid), 10); + flabel = gtk_label_new("No file Selected"); + + gtk_grid_attach(GTK_GRID(grid), flabel, 3, 0, 6, 1); + gtk_grid_attach(GTK_GRID(grid), e->combo, 0, 1, 1, 1); + gtk_grid_attach(GTK_GRID(grid), e->entry1, 1, 1, 2, 1); + gtk_grid_attach(GTK_GRID(grid), notebook, 0, 3, 3, 1); + gtk_grid_attach(GTK_GRID(grid), scrolledwindow, 3, 1, 10, 7); + gtk_grid_attach(GTK_GRID(grid), menubar, 0, 0, 1, 1); + gtk_grid_attach(GTK_GRID(grid), button, 0, 6, 1, 1); + gtk_grid_attach(GTK_GRID(grid), gen_q, 1, 6, 2, 1); + + gtk_widget_show_all(window); + gtk_main(); + + return 0; +} |