~ubuntu-branches/ubuntu/wily/geany/wily

« back to all changes in this revision

Viewing changes to src/highlighting.c

  • Committer: Package Import Robot
  • Author(s): Chow Loong Jin
  • Date: 2011-12-10 07:43:26 UTC
  • mfrom: (3.3.7 sid)
  • Revision ID: package-import@ubuntu.com-20111210074326-s8yqbew5i20h33tf
Tags: 0.21-1ubuntu1
* Merge from Debian Unstable, remaining changes:
  - debian/patches/20_use_evince_viewer.patch:
     + use evince as viewer for pdf and dvi files
  - debian/patches/20_use_x_terminal_emulator.patch:
     + use x-terminal-emulator as terminal
  - debian/control
     + Add breaks on geany-plugins-common << 0.20
* Also fixes bugs:
  - Filter for MATLAB/Octave files filters everythign (LP: 885505)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 *      highlighting.c - this file is part of Geany, a fast and lightweight IDE
3
3
 *
4
 
 *      Copyright 2005-2010 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
5
 
 *      Copyright 2006-2010 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
 
4
 *      Copyright 2005-2011 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
 
5
 *      Copyright 2006-2011 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
6
6
 *
7
7
 *      This program is free software; you can redistribute it and/or modify
8
8
 *      it under the terms of the GNU General Public License as published by
18
18
 *      along with this program; if not, write to the Free Software
19
19
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
20
 *
21
 
 * $Id: highlighting.c 5409 2010-11-16 15:07:40Z ntrel $
 
21
 * $Id: highlighting.c 5863 2011-06-26 21:47:28Z colombanw $
22
22
 */
23
23
 
24
24
/**
249
249
        gint c;
250
250
 
251
251
        /* ignore empty strings */
252
 
        if (!NZV(str))
 
252
        if (G_UNLIKELY(! NZV(str)))
253
253
                return;
254
254
 
255
255
        c = utils_strtod(str, NULL, FALSE);
897
897
                "identifier",
898
898
                "stringeol",
899
899
                "verbatim",
 
900
                "verbatim", /* triple verbatims use the same style */
900
901
                "regex",
901
902
                "commentlinedoc",
902
903
                "commentdockeyword",
909
910
}
910
911
 
911
912
 
912
 
static void styleset_c_like(ScintillaObject *sci, gint ft_id)
 
913
static void styleset_c_like(ScintillaObject *sci, gint ft_id, gint lexer)
913
914
{
914
915
        gint styles[] = {
915
916
                SCE_C_DEFAULT,
927
928
                SCE_C_IDENTIFIER,
928
929
                SCE_C_STRINGEOL,
929
930
                SCE_C_VERBATIM,
 
931
                SCE_C_TRIPLEVERBATIM,
930
932
                SCE_C_REGEX,
931
933
                SCE_C_COMMENTLINEDOC,
932
934
                SCE_C_COMMENTDOCKEYWORD,
935
937
                SCE_C_GLOBALCLASS
936
938
        };
937
939
 
938
 
        apply_filetype_properties(sci, SCLEX_CPP, ft_id);
 
940
        apply_filetype_properties(sci, lexer, ft_id);
939
941
        apply_style_entries(sci, ft_id, styles, G_N_ELEMENTS(styles));
940
942
 
941
943
        /* Disable explicit //{ folding as it can seem like a bug */
957
959
 
958
960
static void styleset_c(ScintillaObject *sci, gint ft_id)
959
961
{
960
 
        styleset_c_like(sci, ft_id);
 
962
        styleset_c_like(sci, ft_id, SCLEX_CPP);
961
963
 
962
964
        sci_set_keywords(sci, 0, style_sets[ft_id].keywords[0]);
963
965
        /* SCI_SETKEYWORDS = 1 - secondary + global tags file types, see below */
1528
1530
 
1529
1531
static void styleset_java(ScintillaObject *sci, gint ft_id)
1530
1532
{
1531
 
        styleset_c_like(sci, ft_id);
 
1533
        styleset_c_like(sci, ft_id, SCLEX_CPP);
1532
1534
 
1533
1535
        sci_set_keywords(sci, 0, style_sets[ft_id].keywords[0]);
1534
1536
        /* SCI_SETKEYWORDS = 1 - secondary + global tags file types, see below */
1740
1742
}
1741
1743
 
1742
1744
 
 
1745
static void styleset_cobol_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 
1746
{
 
1747
        styleset_c_like_init(config, config_home, ft_id);
 
1748
 
 
1749
        style_sets[ft_id].keywords = g_new(gchar*, 4);
 
1750
        get_keyfile_keywords(config, config_home, "primary", ft_id, 0);
 
1751
        get_keyfile_keywords(config, config_home, "secondary", ft_id, 1);
 
1752
        get_keyfile_keywords(config, config_home, "extended_keywords", ft_id, 2);
 
1753
        style_sets[ft_id].keywords[3] = NULL;
 
1754
}
 
1755
 
 
1756
 
 
1757
static void styleset_cobol(ScintillaObject *sci, gint ft_id)
 
1758
{
 
1759
        styleset_c_like(sci, ft_id, SCLEX_COBOL);
 
1760
 
 
1761
        sci_set_keywords(sci, 0, style_sets[ft_id].keywords[0]);
 
1762
        sci_set_keywords(sci, 1, style_sets[ft_id].keywords[1]);
 
1763
        sci_set_keywords(sci, 2, style_sets[ft_id].keywords[2]);
 
1764
}
 
1765
 
 
1766
 
1743
1767
static void styleset_r_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
1744
1768
{
1745
1769
        new_styleset(ft_id, 12);
2904
2928
 
2905
2929
static void styleset_ferite(ScintillaObject *sci, gint ft_id)
2906
2930
{
2907
 
        styleset_c_like(sci, ft_id);
 
2931
        styleset_c_like(sci, ft_id, SCLEX_CPP);
2908
2932
 
2909
2933
        sci_set_keywords(sci, 0, style_sets[ft_id].keywords[0]);
2910
2934
        sci_set_keywords(sci, 1, style_sets[ft_id].keywords[1]);
3073
3097
{
3074
3098
        styleset_c_like_init(config, config_home, ft_id);
3075
3099
 
3076
 
        style_sets[ft_id].keywords = g_new(gchar*, 2);
 
3100
        style_sets[ft_id].keywords = g_new(gchar*, 3);
3077
3101
        get_keyfile_keywords(config, config_home, "primary", ft_id, 0);
3078
 
        style_sets[ft_id].keywords[1] = NULL;
 
3102
        get_keyfile_keywords(config, config_home, "secondary", ft_id, 1);
 
3103
        style_sets[ft_id].keywords[2] = NULL;
3079
3104
}
3080
3105
 
3081
3106
 
3082
3107
static void styleset_js(ScintillaObject *sci, gint ft_id)
3083
3108
{
3084
 
        styleset_c_like(sci, ft_id);
 
3109
        styleset_c_like(sci, ft_id, SCLEX_CPP);
3085
3110
 
3086
3111
        sci_set_keywords(sci, 0, style_sets[ft_id].keywords[0]);
 
3112
        sci_set_keywords(sci, 1, style_sets[ft_id].keywords[1]);
3087
3113
}
3088
3114
 
3089
3115
 
3241
3267
 
3242
3268
static void styleset_actionscript(ScintillaObject *sci, gint ft_id)
3243
3269
{
3244
 
        styleset_c_like(sci, ft_id);
 
3270
        styleset_c_like(sci, ft_id, SCLEX_CPP);
3245
3271
 
3246
3272
        sci_set_keywords(sci, 0, style_sets[ft_id].keywords[0]);
3247
3273
        sci_set_keywords(sci, 1, style_sets[ft_id].keywords[2]);
3263
3289
 
3264
3290
static void styleset_haxe(ScintillaObject *sci, gint ft_id)
3265
3291
{
3266
 
        styleset_c_like(sci, ft_id);
 
3292
        styleset_c_like(sci, ft_id, SCLEX_CPP);
3267
3293
 
3268
3294
        sci_set_keywords(sci, 0, style_sets[ft_id].keywords[0]);
3269
3295
        sci_set_keywords(sci, 1, style_sets[ft_id].keywords[1]);
3403
3429
                init_styleset_case(GEANY_FILETYPES_C,           styleset_c_init);
3404
3430
                init_styleset_case(GEANY_FILETYPES_CAML,        styleset_caml_init);
3405
3431
                init_styleset_case(GEANY_FILETYPES_CMAKE,       styleset_cmake_init);
 
3432
                init_styleset_case(GEANY_FILETYPES_COBOL,       styleset_cobol_init);
3406
3433
                init_styleset_case(GEANY_FILETYPES_CONF,        styleset_conf_init);
3407
3434
                init_styleset_case(GEANY_FILETYPES_CSS,         styleset_css_init);
3408
3435
                init_styleset_case(GEANY_FILETYPES_D,           styleset_d_init);
3475
3502
                styleset_case(GEANY_FILETYPES_C,                styleset_c);
3476
3503
                styleset_case(GEANY_FILETYPES_CAML,             styleset_caml);
3477
3504
                styleset_case(GEANY_FILETYPES_CMAKE,    styleset_cmake);
 
3505
                styleset_case(GEANY_FILETYPES_COBOL,            styleset_cobol);
3478
3506
                styleset_case(GEANY_FILETYPES_CONF,             styleset_conf);
3479
3507
                styleset_case(GEANY_FILETYPES_CSS,              styleset_css);
3480
3508
                styleset_case(GEANY_FILETYPES_D,                styleset_d);
3572
3600
                filetypes_reload();
3573
3601
                return;
3574
3602
        }
3575
 
        fname = ui_menu_item_get_text(menuitem);
 
3603
        fname = g_strdup(g_object_get_data(G_OBJECT(menuitem), "colorscheme_file"));
3576
3604
        setptr(fname, utils_get_locale_from_utf8(fname));
3577
3605
 
3578
3606
        /* fname is just the basename from the menu item, so prepend the custom files path */
3599
3627
}
3600
3628
 
3601
3629
 
 
3630
static gchar *utils_get_setting_locale_string(GKeyFile *keyfile,
 
3631
                const gchar *group, const gchar *key, const gchar *default_value)
 
3632
{
 
3633
        gchar *result = g_key_file_get_locale_string(keyfile, group, key, NULL, NULL);
 
3634
 
 
3635
        return NVL(result, g_strdup(default_value));
 
3636
}
 
3637
 
 
3638
 
3602
3639
static void add_color_scheme_item(GtkWidget *menu, const gchar *fname)
3603
3640
{
3604
3641
        static GSList *group = NULL;
3605
3642
        GtkWidget *item;
3606
3643
 
3607
 
        if (fname)
 
3644
        if (!fname)
3608
3645
        {
3609
 
                gchar *label = utils_get_utf8_from_locale(fname);
3610
 
 
3611
 
                item = gtk_radio_menu_item_new_with_label(group, label);
3612
 
                g_free(label);
3613
 
        }
3614
 
        else
3615
3646
                item = gtk_radio_menu_item_new_with_mnemonic(group, _("_Default"));
 
3647
        }
 
3648
        else
 
3649
        {
 
3650
                GKeyFile *hkeyfile, *skeyfile;
 
3651
                gchar *path, *theme_name, *tooltip;
 
3652
                gchar *theme_fn = utils_get_utf8_from_locale(fname);
 
3653
 
 
3654
                path = utils_build_path(app->configdir, GEANY_COLORSCHEMES_SUBDIR, fname, NULL);
 
3655
                hkeyfile = utils_key_file_new(path);
 
3656
                setptr(path, utils_build_path(app->datadir, GEANY_COLORSCHEMES_SUBDIR, fname, NULL));
 
3657
                skeyfile = utils_key_file_new(path);
 
3658
 
 
3659
                theme_name = utils_get_setting(locale_string, hkeyfile, skeyfile, "theme_info", "name", theme_fn);
 
3660
                item = gtk_radio_menu_item_new_with_label(group, theme_name);
 
3661
                g_object_set_data_full(G_OBJECT(item), "colorscheme_file", theme_fn, g_free);
 
3662
 
 
3663
                tooltip = utils_get_setting(locale_string, hkeyfile, skeyfile, "theme_info", "description", NULL);
 
3664
                if (tooltip != NULL)
 
3665
                {
 
3666
                        gtk_widget_set_tooltip_text(item, tooltip);
 
3667
                        g_free(tooltip);
 
3668
                }
 
3669
                g_free(path);
 
3670
                g_free(theme_name);
 
3671
                g_key_file_free(hkeyfile);
 
3672
                g_key_file_free(skeyfile);
 
3673
        }
3616
3674
 
3617
3675
        group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(item));
3618
3676
        if (utils_str_equal(editor_prefs.color_scheme, fname))
3687
3745
                case SCLEX_CPP:
3688
3746
                        return (style == SCE_C_CHARACTER ||
3689
3747
                                style == SCE_C_STRING ||
3690
 
                                style == SCE_C_STRINGEOL);
 
3748
                                style == SCE_C_STRINGEOL ||
 
3749
                                style == SCE_C_STRINGRAW ||
 
3750
                                style == SCE_C_VERBATIM ||
 
3751
                                style == SCE_C_TRIPLEVERBATIM);
3691
3752
 
3692
3753
                case SCLEX_PASCAL:
3693
3754
                        return (style == SCE_PAS_CHARACTER ||
3830
3891
{
3831
3892
        switch (lexer)
3832
3893
        {
 
3894
                case SCLEX_COBOL:
3833
3895
                case SCLEX_CPP:
3834
3896
                        return (style == SCE_C_COMMENT ||
3835
3897
                                style == SCE_C_COMMENTLINE ||