コード例 #1
0
ファイル: gui-prefs.c プロジェクト: aitjcize/Gummi
static void set_tab_preview_settings(GuPrefsGui* prefs)
{

  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs->compile_status),
                               TO_BOOL(config_get_value("compile_status")));

  if (!config_get_value("compile_status"))
    gtk_widget_set_sensitive(GTK_WIDGET(prefs->compile_timer), FALSE);

  gtk_spin_button_set_value(prefs->compile_timer,
                            atoi(config_get_value("compile_timer")));
  /* compile scheme */
  if (STR_EQU(config_get_value("compile_scheme"), "real_time"))
    gtk_combo_box_set_active(prefs->compile_scheme, 1);

  if (STR_EQU(config_get_value("animated_scroll"), "always")) {
    gtk_combo_box_set_active(prefs->combo_animated_scroll, 0);
  } else if (STR_EQU(config_get_value("animated_scroll"), "never")) {
    gtk_combo_box_set_active(prefs->combo_animated_scroll, 2);
  } else {
    gtk_combo_box_set_active(prefs->combo_animated_scroll, 1);
  }

  gtk_spin_button_set_value(prefs->spin_cache_size,
                            atoi(config_get_value("cache_size")));
}
コード例 #2
0
ファイル: biblio.c プロジェクト: BafDyce/gummi
gboolean biblio_detect_bibliography (GuBiblio* bc, GuEditor* ec) {
    gchar* content = NULL;
    gchar* bibfn = NULL;
    gchar** result = NULL;
    GMatchInfo *match_info;
    GRegex* bib_regex = NULL;
    gboolean state = FALSE;

    content = editor_grab_buffer (ec);
    bib_regex = g_regex_new ("^[^%]*\\\\bibliography{\\s*([^{}\\s]*)\\s*}",
        G_REGEX_MULTILINE, 0, NULL);
    if (g_regex_match (bib_regex, content, 0, &match_info)) {
        result = g_match_info_fetch_all (match_info);
        if (result[1]) {
            if (!STR_EQU (result[1] +strlen (result[1]) -4, ".bib"))
                bibfn = g_strconcat (result[1], ".bib", NULL);
            else
                bibfn = g_strdup (result[1]);
            state = editor_fileinfo_update_biblio (ec, bibfn);
            g_free (bibfn);
        }
        slog (L_INFO, "Detect bibliography file: %s\n", ec->bibfile);
        g_strfreev (result);
    }
    g_free (content);
    g_match_info_free (match_info);
    g_regex_unref (bib_regex);
    return state;
}
コード例 #3
0
ファイル: latex.c プロジェクト: aitjcize/Gummi
gboolean latex_method_active(gchar* method)
{
  if (STR_EQU(config_get_value("compile_steps"), method)) {
    return TRUE;
  }
  return FALSE;
}
コード例 #4
0
ファイル: latex.c プロジェクト: aitjcize/Gummi
void latex_export_pdffile(GuLatex* lc, GuEditor* ec, const gchar* path,
                          gboolean prompt_overrite)
{
  gchar* savepath = NULL;
  GError* err = NULL;
  gint ret = 0;

  if (!STR_EQU(path + strlen(path) - 4, ".pdf"))
    savepath = g_strdup_printf("%s.pdf", path);
  else
    savepath = g_strdup(path);

  if (prompt_overrite && utils_path_exists(savepath)) {
    ret = utils_yes_no_dialog(_("The file already exists. Overwrite?"));
    if (GTK_RESPONSE_YES != ret) {
      g_free(savepath);
      return;
    }
  }
  if (!utils_copy_file(ec->pdffile, savepath, &err)) {
    slog(L_G_ERROR, _("Unable to export PDF file.\n\n%s"),
         err->message);
    g_error_free(err);
  }

  g_free(savepath);
}
コード例 #5
0
ファイル: gui-prefs.c プロジェクト: aitjcize/Gummi
static void set_tab_miscellaneous_settings(GuPrefsGui* prefs)
{
  GtkTreeModel* combo_lang = 0;
  GtkTreeIter iter;
  const gchar* lang = 0;
  gint count = 0;
  gboolean valid = FALSE;

  combo_lang = gtk_combo_box_get_model(GTK_COMBO_BOX(prefs->combo_languages));
  lang = config_get_value("spell_language");
  valid = gtk_tree_model_get_iter_first(combo_lang, &iter);

  while (valid) {
    const gchar* str_value;
    gtk_tree_model_get(combo_lang, &iter, 0, &str_value, -1);
    if (STR_EQU(lang, str_value)) {
      gtk_combo_box_set_active(GTK_COMBO_BOX(prefs->combo_languages), count);
      break;
    }
    ++count;
    valid = gtk_tree_model_iter_next(combo_lang, &iter);
  }

  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs->autoexport),
                               TO_BOOL(config_get_value("autoexport")));

}
コード例 #6
0
ファイル: project.c プロジェクト: aitjcize/Gummi
gboolean project_create_new(const gchar* filename)
{
  const gchar* version = g_strdup("0.6.0");
  const gchar* csetter = config_get_value("typesetter");
  const gchar* csteps = config_get_value("compile_steps");
  const gchar* rootfile = g_active_editor->filename;
  // TODO: do we need to encode this text?
  const gchar* content = g_strdup_printf("version=%s\n"
                                         "typesetter=%s\n"
                                         "steps=%s\n"
                                         "root=%s\n",
                                         version, csetter, csteps, rootfile);

  if (!STR_EQU(filename + strlen(filename) - 6, ".gummi")) {
    filename = g_strdup_printf("%s.gummi", filename);
  }

  statusbar_set_message(g_strdup_printf("Creating project file: %s",
                                        filename));
  utils_set_file_contents(filename, content, -1);

  gummi->project->projfile = g_strdup(filename);

  return TRUE;
}
コード例 #7
0
ファイル: texlive.c プロジェクト: sygi/gummi
gchar* texlive_get_command (const gchar* method, gchar* workfile, gchar* basename) {
    slog(L_INFO, "texlive_get_command. workfile: %s, basename: %s\n", workfile, basename);
    const gchar* outdir = g_strdup_printf("-output-directory=\"%s\"", C_TMPDIR);


    gchar *typesetter = NULL;
    gchar *texcmd = NULL;

    if (pdflatex_active()) typesetter = C_PDFLATEX;
    else typesetter = C_XELATEX;

    gchar *flags = texlive_get_flags("texpdf");

    gchar *dviname = g_strdup_printf("%s.dvi", g_path_get_basename (basename));
    gchar *psname = g_strdup_printf("%s.ps", g_path_get_basename (basename));

    #ifdef WIN32
    gchar *script = g_build_filename (GUMMI_LIBS, "latex_dvi.cmd", NULL);
    #else
    gchar *script = g_build_filename (GUMMI_LIBS, "latex_dvi.sh", NULL);
    #endif

    if (STR_EQU (method, "texpdf")) {
        slog(L_INFO, "texpdf method\n");
        texcmd = g_strdup_printf("%s %s %s \"%s-new\"", typesetter,
                                                flags,
                                                outdir,
                                                workfile);
    } else if (STR_EQU (method, "texdvipdf")) {
        texcmd = g_strdup_printf("%s pdf "
                "\"%s\" \"%s\" \"%s\" \"%s\" \"%s\"", script,
                flags, outdir, workfile, C_TMPDIR, dviname);
    } else {
        texcmd = g_strdup_printf("%s ps "
                "\"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"", script,
                flags, outdir, workfile, C_TMPDIR, dviname, psname);
    }

    g_free(script);
    g_free(dviname);
    g_free(psname);

    slog(L_INFO, "Command: %s\n", texcmd);

    return texcmd;
}
コード例 #8
0
ファイル: project.c プロジェクト: JasonGross/gummi
GList* project_list_files (const gchar* content) {
    gchar** splcontent = g_strsplit(content, "\n", 0);
    GList* filelist = NULL;
    gint i;
    
    for (i = 0; i < g_strv_length(splcontent); i++) {
        gchar** line = g_strsplit(splcontent[i], "=", 0);
        if (STR_EQU ("file", line[0])) {
            filelist = g_list_append (filelist, line[1]);
            gummi->project->nroffiles += 1;
        }
        if (STR_EQU ("root", line[0])) {
            filelist = g_list_prepend (filelist, line[1]);
            gummi->project->rootfile = g_strdup (line[1]);
        }
    }
    return filelist;
}
コード例 #9
0
ファイル: gui-infoscreen.c プロジェクト: BafDyce/gummi
void infoscreengui_set_message (GuInfoscreenGui *is, const gchar *msg) {
    gtk_widget_set_visible (GTK_WIDGET(is->image), TRUE);
    if (STR_EQU (msg, "compile_error")) {
        gtk_label_set_text (is->header, get_infoheader(1));
        gtk_label_set_text (is->details, get_infodetails(1));
    }
    else if (STR_EQU (msg, "document_error")) {
        gtk_label_set_text (is->header, get_infoheader(2));
        gtk_label_set_text (is->details, get_infodetails(2));
    }
    else if (STR_EQU (msg, "program_error")) {
        gtk_label_set_text (is->header, get_infoheader(3));
        gtk_label_set_text (is->details, get_infodetails(3));
    }
    else {
        gtk_label_set_text (is->header, get_infoheader(4));
        gtk_label_set_text (is->details, get_infodetails(4));
        gtk_widget_set_visible (GTK_WIDGET(is->image), FALSE);
    }
}
コード例 #10
0
ファイル: project.c プロジェクト: JasonGross/gummi
gchar* project_get_value (const gchar* content, const gchar* item) {
    gchar** splcontent = g_strsplit(content, "\n", 0);
    gchar* result = g_strdup ("");
    gint i;

    for (i = 0; i < g_strv_length(splcontent) -1; i++) {
        gchar** line = g_strsplit(splcontent[i], "=", 0);
        if (STR_EQU (item, line[0])) {
            return line[1];
        }
    }
    return result;
}
コード例 #11
0
ファイル: gui-menu.c プロジェクト: aitjcize/Gummi
G_MODULE_EXPORT
void on_menu_export_activate(GtkWidget *widget, void *user)
{
  gchar* filename = NULL;

  filename = get_save_filename(TYPE_PDF);
  if (filename){
    if(strlen(filename) > 4 && STR_EQU(filename + strlen(filename) - 4, ".tex")){
      latex_export_pdffile(gummi->latex, g_active_editor, filename, TRUE);
	 }
  }
  g_free(filename);
}
コード例 #12
0
ファイル: latex.c プロジェクト: aitjcize/Gummi
gchar* latex_update_workfile(GuLatex* lc, GuEditor* ec)
{
  gchar *text;

  text = editor_grab_buffer(ec);

  // bit of a dirty hack, but only write the buffer content when
  // there is not a recovery in progress, otherwise the workfile
  // will be overwritten with empty text
  if (!STR_EQU(text, "")) {
    utils_set_file_contents(ec->workfile, text, -1);
  }
  return text;
}
コード例 #13
0
ファイル: snippets.c プロジェクト: bqv/gummi-vim
void snippets_accel_disconnect (GuSnippets* sc, const gchar* key) {
    Tuple2* closure_data = NULL;
    GList* current = NULL;

    g_return_if_fail (key != NULL);

    current = sc->closure_data;
    while (current) {
        closure_data = TUPLE2 (current->data);
        if (STR_EQU (closure_data->first, key))
            break;
        current = g_list_next (current);
    }
    if (current) {
        gtk_accel_group_disconnect (sc->accel_group, closure_data->second);
        sc->closure_data = g_list_remove (sc->closure_data, closure_data);
        g_free (closure_data);
        slog (L_DEBUG, "Accelerator for `%s' disconnected\n",
                closure_data->first);
    }
}
コード例 #14
0
ファイル: gui-prefs.c プロジェクト: aitjcize/Gummi
void prefsgui_apply_style_scheme(GuPrefsGui* prefs)
{
  const gchar* scheme = config_get_value("style_scheme");
  GList* schemes = editor_list_style_scheme_sorted();
  GList* schemes_iter = schemes;
  GList* tab = gummi->tabmanager->tabs;
  gint column = 0;
  GtkTreePath* treepath;

  while (schemes_iter) {
    if (STR_EQU(gtk_source_style_scheme_get_id(schemes_iter->data),
                scheme)) {
      gchar* path = g_strdup_printf("%d", column);
      treepath = gtk_tree_path_new_from_string(path);
      gtk_tree_view_set_cursor(prefs->styleschemes_treeview, treepath,
                               NULL, FALSE);
      gtk_tree_path_free(treepath);
      g_free(path);
      break;
    }
    ++column;
    schemes_iter = g_list_next(schemes_iter);
  }
  g_list_free(schemes);

  if (schemes && !schemes_iter) {
    treepath = gtk_tree_path_new_from_string("0");
    gtk_tree_view_set_cursor(prefs->styleschemes_treeview, treepath, NULL,
                             FALSE);
    gtk_tree_path_free(treepath);
    while (tab) {
      editor_set_style_scheme_by_id(GU_TAB_CONTEXT(tab->data)->editor,
                                    "classic");
      tab = g_list_next(tab);
    }
  }
}
コード例 #15
0
ファイル: texlive.c プロジェクト: sygi/gummi
gboolean xelatex_active (void) {
    if (STR_EQU (config_get_value("typesetter"), "xelatex")) {
        return TRUE;
    }
    return FALSE;
}
コード例 #16
0
ファイル: snippets.c プロジェクト: bqv/gummi-vim
void snippet_info_initial_expand (GuSnippetInfo* info, GuEditor* ec) {
    GuSnippetExpandInfo* value = NULL;
    GtkTextIter start, end;
    GHashTable* map = NULL;
    GList* current = NULL;
    gchar* text = NULL;
    gint key = 0;

    map = g_hash_table_new (NULL, NULL);
    current = g_list_first (info->einfo);

    while (current) {
        GuSnippetExpandInfo* einfo = GU_SNIPPET_EXPAND_INFO (current->data);
        if (!g_hash_table_lookup_extended (map, ((gpointer)einfo->group_number),
                    (gpointer)&key, (gpointer)&value)) {
            g_hash_table_insert (map, (gpointer)einfo->group_number, einfo);
            info->einfo_unique = g_list_append (info->einfo_unique, einfo);
        }
        current = g_list_next (current);
    }
    info->einfo_unique = g_list_sort (info->einfo_unique, snippet_info_num_cmp);

    current = g_list_first (info->einfo);
    info->offset = 0;

    while (current) {
        GuSnippetExpandInfo* einfo = GU_SNIPPET_EXPAND_INFO (current->data);
        g_hash_table_lookup_extended (map, (gpointer)einfo->group_number,
                (gpointer)&key, (gpointer)&value);
        gtk_text_buffer_get_iter_at_mark (ec_buffer, &start, einfo->left_mark);
        gtk_text_buffer_get_iter_at_mark (ec_buffer, &end, einfo->right_mark);

        /* Expand macros */
        text = GU_SNIPPET_EXPAND_INFO(current->data)->text;
        if (STR_EQU (text, "SELECTED_TEXT")) {
            GtkTextIter ms, me;
            gtk_text_buffer_delete (ec_buffer, &start, &end);
            gtk_text_buffer_insert (ec_buffer, &start, info->sel_text, -1);
            gtk_text_buffer_get_iter_at_mark (ec_buffer, &ms, &info->sel_start);
            me = ms;
            gtk_text_iter_forward_chars (&me, strlen (info->sel_text));
            gtk_text_buffer_delete (ec_buffer, &ms, &me);
        } else if (STR_EQU (text, "FILENAME")) {
            gtk_text_buffer_delete (ec_buffer, &start, &end);
            gtk_text_buffer_insert (ec_buffer, &start,
                    ec->filename? ec->filename: "", -1);
        } else if (STR_EQU (text, "BASENAME")) {
            gchar* basename = g_path_get_basename(ec->filename?ec->filename:"");
            gtk_text_buffer_delete (ec_buffer, &start, &end);
            gtk_text_buffer_insert (ec_buffer, &start, basename, -1);
            g_free (basename);
        } else {
            /* Expand text of same group with with text of group leader */
            gtk_text_buffer_delete (ec_buffer, &start, &end);
            gtk_text_buffer_insert (ec_buffer, &start, value->text, -1);
        }

        current = g_list_next (current);
    }
    g_hash_table_destroy (map);
}