17
18
* along with this program; if not, write to the Free Software
18
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
* $Id: filetypes.c 848 2006-09-29 07:22:46Z eht16 $
21
* $Id: filetypes.c 2472 2008-04-11 15:39:44Z eht16 $
25
* Filetype detection, file extensions and filetype menu items.
24
28
#include <string.h>
29
#include <glib/gstdio.h>
27
32
#include "filetypes.h"
28
33
#include "highlighting.h"
29
34
#include "support.h"
30
#include "callbacks.h"
31
35
#include "templates.h"
32
36
#include "msgwindow.h"
39
#include "sciwrappers.h"
42
filetype *filetypes[GEANY_MAX_FILE_TYPES];
35
45
/* This is the order of unique ids used in the config file.
36
46
* The order must not be changed but can be appended to. */
39
FILETYPE_UID_C = 0, // 0
40
FILETYPE_UID_CPP, // 1
41
FILETYPE_UID_JAVA, // 2
42
FILETYPE_UID_PERL, // 3
43
FILETYPE_UID_PHP, // 4
44
FILETYPE_UID_XML, // 5
45
FILETYPE_UID_DOCBOOK, // 6
46
FILETYPE_UID_PYTHON, // 7
47
FILETYPE_UID_LATEX, // 8
48
FILETYPE_UID_PASCAL, // 9
49
FILETYPE_UID_SH, // 10
50
FILETYPE_UID_MAKE, // 11
51
FILETYPE_UID_CSS, // 12
52
FILETYPE_UID_CONF, // 13
53
FILETYPE_UID_ASM, // 14
54
FILETYPE_UID_SQL, // 15
55
FILETYPE_UID_CAML, // 16
56
FILETYPE_UID_OMS, // 17
57
FILETYPE_UID_RUBY, // 18
58
FILETYPE_UID_TCL, // 19
59
FILETYPE_UID_ALL, // 20
61
FILETYPE_UID_FORTRAN, // 22
62
FILETYPE_UID_DIFF, // 23
63
FILETYPE_UID_FERITE, // 24
64
FILETYPE_UID_HTML // 25
49
FILETYPE_UID_C = 0, /* 0 */
50
FILETYPE_UID_CPP, /* 1 */
51
FILETYPE_UID_JAVA, /* 2 */
52
FILETYPE_UID_PERL, /* 3 */
53
FILETYPE_UID_PHP, /* 4 */
54
FILETYPE_UID_XML, /* 5 */
55
FILETYPE_UID_DOCBOOK, /* 6 */
56
FILETYPE_UID_PYTHON, /* 7 */
57
FILETYPE_UID_LATEX, /* 8 */
58
FILETYPE_UID_PASCAL, /* 9 */
59
FILETYPE_UID_SH, /* 10 */
60
FILETYPE_UID_MAKE, /* 11 */
61
FILETYPE_UID_CSS, /* 12 */
62
FILETYPE_UID_CONF, /* 13 */
63
FILETYPE_UID_ASM, /* 14 */
64
FILETYPE_UID_SQL, /* 15 */
65
FILETYPE_UID_CAML, /* 16 */
66
FILETYPE_UID_OMS, /* 17 */
67
FILETYPE_UID_RUBY, /* 18 */
68
FILETYPE_UID_TCL, /* 19 */
69
FILETYPE_UID_ALL, /* 20 */
70
FILETYPE_UID_D, /* 21 */
71
FILETYPE_UID_FORTRAN, /* 22 */
72
FILETYPE_UID_DIFF, /* 23 */
73
FILETYPE_UID_FERITE, /* 24 */
74
FILETYPE_UID_HTML, /* 25 */
75
FILETYPE_UID_VHDL, /* 26 */
76
FILETYPE_UID_JS, /* 27 */
77
FILETYPE_UID_LUA, /* 28 */
78
FILETYPE_UID_HASKELL, /* 29 */
79
FILETYPE_UID_CS, /* 30 */
80
FILETYPE_UID_BASIC, /* 31 */
81
FILETYPE_UID_HAXE, /* 32 */
82
FILETYPE_UID_REST /* 33 */
68
static void filetypes_create_menu_item(GtkWidget *menu, gchar *label, filetype *ftype);
69
static void filetypes_create_newmenu_item(GtkWidget *menu, gchar *label, filetype *ftype);
70
static void filetypes_init_build_programs(filetype *ftype);
72
86
static GtkWidget *radio_items[GEANY_MAX_FILE_TYPES];
75
// If uid is valid, return corresponding filetype, otherwise NULL.
76
filetype *filetypes_get_from_uid(gint uid)
88
static void filetypes_create_menu_item(GtkWidget *menu, const gchar *label, filetype *ftype);
91
/* Create the filetype array and fill it with the known filetypes. */
92
void filetypes_init_types()
96
for (ft_id = 0; ft_id < GEANY_MAX_FILE_TYPES; ft_id++)
80
case FILETYPE_UID_C: return filetypes[GEANY_FILETYPES_C];
81
case FILETYPE_UID_CPP: return filetypes[GEANY_FILETYPES_CPP];
82
case FILETYPE_UID_JAVA: return filetypes[GEANY_FILETYPES_JAVA];
83
case FILETYPE_UID_PERL: return filetypes[GEANY_FILETYPES_PERL];
84
case FILETYPE_UID_PHP: return filetypes[GEANY_FILETYPES_PHP];
85
case FILETYPE_UID_XML: return filetypes[GEANY_FILETYPES_XML];
86
case FILETYPE_UID_DOCBOOK: return filetypes[GEANY_FILETYPES_DOCBOOK];
87
case FILETYPE_UID_PYTHON: return filetypes[GEANY_FILETYPES_PYTHON];
88
case FILETYPE_UID_LATEX: return filetypes[GEANY_FILETYPES_LATEX];
89
case FILETYPE_UID_PASCAL: return filetypes[GEANY_FILETYPES_PASCAL];
90
case FILETYPE_UID_SH: return filetypes[GEANY_FILETYPES_SH];
91
case FILETYPE_UID_MAKE: return filetypes[GEANY_FILETYPES_MAKE];
92
case FILETYPE_UID_CSS: return filetypes[GEANY_FILETYPES_CSS];
93
case FILETYPE_UID_CONF: return filetypes[GEANY_FILETYPES_CONF];
94
case FILETYPE_UID_ASM: return filetypes[GEANY_FILETYPES_ASM];
95
case FILETYPE_UID_SQL: return filetypes[GEANY_FILETYPES_SQL];
96
case FILETYPE_UID_CAML: return filetypes[GEANY_FILETYPES_CAML];
97
case FILETYPE_UID_OMS: return filetypes[GEANY_FILETYPES_OMS];
98
case FILETYPE_UID_RUBY: return filetypes[GEANY_FILETYPES_RUBY];
99
case FILETYPE_UID_TCL: return filetypes[GEANY_FILETYPES_TCL];
100
case FILETYPE_UID_ALL: return filetypes[GEANY_FILETYPES_ALL];
101
case FILETYPE_UID_D: return filetypes[GEANY_FILETYPES_D];
102
case FILETYPE_UID_FORTRAN: return filetypes[GEANY_FILETYPES_FORTRAN];
103
case FILETYPE_UID_DIFF: return filetypes[GEANY_FILETYPES_DIFF];
104
case FILETYPE_UID_FERITE: return filetypes[GEANY_FILETYPES_FERITE];
105
case FILETYPE_UID_HTML: return filetypes[GEANY_FILETYPES_HTML];
106
default: return NULL;
98
filetypes[ft_id] = g_new0(filetype, 1);
99
filetypes[ft_id]->programs = g_new0(struct build_programs, 1);
100
filetypes[ft_id]->actions = g_new0(struct build_actions, 1);
111
/* inits the filetype array and fill it with the known filetypes
112
* and create the filetype menu*/
113
void filetypes_init_types(void)
115
GtkWidget *filetype_menu = lookup_widget(app->window, "set_filetype1_menu");
116
GtkWidget *template_menu = lookup_widget(app->window, "menu_new_with_template1_menu");
118
#define C // these macros are only to ease navigation
119
filetypes[GEANY_FILETYPES_C] = g_new0(filetype, 1);
103
#define C /* these macros are only to ease navigation */
120
104
filetypes[GEANY_FILETYPES_C]->id = GEANY_FILETYPES_C;
121
105
filetypes[GEANY_FILETYPES_C]->uid = FILETYPE_UID_C;
122
filetypes[GEANY_FILETYPES_C]->item = NULL;
123
106
filetypes[GEANY_FILETYPES_C]->lang = 0;
124
107
filetypes[GEANY_FILETYPES_C]->name = g_strdup("C");
125
filetypes[GEANY_FILETYPES_C]->has_tags = TRUE;
126
filetypes[GEANY_FILETYPES_C]->title = g_strdup(_("C source file"));
108
filetypes[GEANY_FILETYPES_C]->title = g_strdup_printf(_("%s source file"), "C");
127
109
filetypes[GEANY_FILETYPES_C]->extension = g_strdup("c");
128
filetypes[GEANY_FILETYPES_C]->pattern = g_new0(gchar*, 3);
129
filetypes[GEANY_FILETYPES_C]->pattern[0] = g_strdup("*.c");
130
filetypes[GEANY_FILETYPES_C]->pattern[1] = g_strdup("*.h");
131
filetypes[GEANY_FILETYPES_C]->pattern[2] = NULL;
110
filetypes[GEANY_FILETYPES_C]->pattern = utils_strv_new("*.c", "*.h", NULL);
132
111
filetypes[GEANY_FILETYPES_C]->comment_open = g_strdup("/*");
133
112
filetypes[GEANY_FILETYPES_C]->comment_close = g_strdup("*/");
134
filetypes[GEANY_FILETYPES_C]->style_func_ptr = styleset_c;
135
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_C]);
136
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_C]->title, filetypes[GEANY_FILETYPES_C]);
139
filetypes[GEANY_FILETYPES_CPP] = g_new0(filetype, 1);
140
115
filetypes[GEANY_FILETYPES_CPP]->id = GEANY_FILETYPES_CPP;
141
116
filetypes[GEANY_FILETYPES_CPP]->uid = FILETYPE_UID_CPP;
142
filetypes[GEANY_FILETYPES_CPP]->item = NULL;
143
117
filetypes[GEANY_FILETYPES_CPP]->lang = 1;
144
118
filetypes[GEANY_FILETYPES_CPP]->name = g_strdup("C++");
145
filetypes[GEANY_FILETYPES_CPP]->has_tags = TRUE;
146
filetypes[GEANY_FILETYPES_CPP]->title = g_strdup(_("C++ source file"));
119
filetypes[GEANY_FILETYPES_CPP]->title = g_strdup_printf(_("%s source file"), "C++");
147
120
filetypes[GEANY_FILETYPES_CPP]->extension = g_strdup("cpp");
148
filetypes[GEANY_FILETYPES_CPP]->pattern = g_new0(gchar*, 11);
149
filetypes[GEANY_FILETYPES_CPP]->pattern[0] = g_strdup("*.cpp");
150
filetypes[GEANY_FILETYPES_CPP]->pattern[1] = g_strdup("*.cxx");
151
filetypes[GEANY_FILETYPES_CPP]->pattern[2] = g_strdup("*.c++");
152
filetypes[GEANY_FILETYPES_CPP]->pattern[3] = g_strdup("*.cc");
153
filetypes[GEANY_FILETYPES_CPP]->pattern[4] = g_strdup("*.h");
154
filetypes[GEANY_FILETYPES_CPP]->pattern[5] = g_strdup("*.hpp");
155
filetypes[GEANY_FILETYPES_CPP]->pattern[6] = g_strdup("*.hxx");
156
filetypes[GEANY_FILETYPES_CPP]->pattern[7] = g_strdup("*.h++");
157
filetypes[GEANY_FILETYPES_CPP]->pattern[8] = g_strdup("*.hh");
158
filetypes[GEANY_FILETYPES_CPP]->pattern[9] = g_strdup("*.C");
159
filetypes[GEANY_FILETYPES_CPP]->pattern[10] = NULL;
160
filetypes[GEANY_FILETYPES_CPP]->style_func_ptr = styleset_cpp;
121
filetypes[GEANY_FILETYPES_CPP]->pattern = utils_strv_new("*.cpp", "*.cxx", "*.c++", "*.cc",
122
"*.h", "*.hpp", "*.hxx", "*.h++", "*.hh", "*.C", NULL);
161
123
filetypes[GEANY_FILETYPES_CPP]->comment_open = g_strdup("//");
162
124
filetypes[GEANY_FILETYPES_CPP]->comment_close = NULL;
163
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_CPP]);
164
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_CPP]->title, filetypes[GEANY_FILETYPES_CPP]);
127
filetypes[GEANY_FILETYPES_CS]->id = GEANY_FILETYPES_CS;
128
filetypes[GEANY_FILETYPES_CS]->uid = FILETYPE_UID_CS;
129
filetypes[GEANY_FILETYPES_CS]->lang = 25;
130
filetypes[GEANY_FILETYPES_CS]->name = g_strdup("C#");
131
filetypes[GEANY_FILETYPES_CS]->title = g_strdup_printf(_("%s source file"), "C#");
132
filetypes[GEANY_FILETYPES_CS]->extension = g_strdup("cs");
133
filetypes[GEANY_FILETYPES_CS]->pattern = utils_strv_new("*.cs", "*.vala", NULL);
134
filetypes[GEANY_FILETYPES_CS]->comment_open = g_strdup("//");
135
filetypes[GEANY_FILETYPES_CS]->comment_close = NULL;
167
filetypes[GEANY_FILETYPES_D] = g_new0(filetype, 1);
168
138
filetypes[GEANY_FILETYPES_D]->id = GEANY_FILETYPES_D;
169
139
filetypes[GEANY_FILETYPES_D]->uid = FILETYPE_UID_D;
170
filetypes[GEANY_FILETYPES_D]->item = NULL;
171
140
filetypes[GEANY_FILETYPES_D]->lang = 17;
172
141
filetypes[GEANY_FILETYPES_D]->name = g_strdup("D");
173
filetypes[GEANY_FILETYPES_D]->has_tags = TRUE;
174
filetypes[GEANY_FILETYPES_D]->title = g_strdup(_("D source file"));
142
filetypes[GEANY_FILETYPES_D]->title = g_strdup_printf(_("%s source file"), "D");
175
143
filetypes[GEANY_FILETYPES_D]->extension = g_strdup("d");
176
filetypes[GEANY_FILETYPES_D]->pattern = g_new0(gchar*, 3);
177
filetypes[GEANY_FILETYPES_D]->pattern[0] = g_strdup("*.d");
178
filetypes[GEANY_FILETYPES_D]->pattern[1] = g_strdup("*.di");
179
filetypes[GEANY_FILETYPES_D]->pattern[2] = NULL;
144
filetypes[GEANY_FILETYPES_D]->pattern = utils_strv_new("*.d", "*.di", NULL);
180
145
filetypes[GEANY_FILETYPES_D]->comment_open = g_strdup("//");
181
146
filetypes[GEANY_FILETYPES_D]->comment_close = NULL;
182
filetypes[GEANY_FILETYPES_D]->style_func_ptr = styleset_d;
183
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_D]);
184
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_D]->title, filetypes[GEANY_FILETYPES_D]);
187
filetypes[GEANY_FILETYPES_JAVA] = g_new0(filetype, 1);
188
149
filetypes[GEANY_FILETYPES_JAVA]->id = GEANY_FILETYPES_JAVA;
189
150
filetypes[GEANY_FILETYPES_JAVA]->name = g_strdup("Java");
190
151
filetypes[GEANY_FILETYPES_JAVA]->uid = FILETYPE_UID_JAVA;
191
filetypes[GEANY_FILETYPES_JAVA]->item = NULL;
192
152
filetypes[GEANY_FILETYPES_JAVA]->lang = 2;
193
filetypes[GEANY_FILETYPES_JAVA]->has_tags = TRUE;
194
filetypes[GEANY_FILETYPES_JAVA]->title = g_strdup(_("Java source file"));
153
filetypes[GEANY_FILETYPES_JAVA]->title = g_strdup_printf(_("%s source file"), "Java");
195
154
filetypes[GEANY_FILETYPES_JAVA]->extension = g_strdup("java");
196
filetypes[GEANY_FILETYPES_JAVA]->pattern = g_new0(gchar*, 2);
197
filetypes[GEANY_FILETYPES_JAVA]->pattern[0] = g_strdup("*.java");
198
filetypes[GEANY_FILETYPES_JAVA]->pattern[1] = NULL;
155
filetypes[GEANY_FILETYPES_JAVA]->pattern = utils_strv_new("*.java", "*.jsp", NULL);
199
156
filetypes[GEANY_FILETYPES_JAVA]->comment_open = g_strdup("/*");
200
157
filetypes[GEANY_FILETYPES_JAVA]->comment_close = g_strdup("*/");
201
filetypes[GEANY_FILETYPES_JAVA]->style_func_ptr = styleset_java;
202
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_JAVA]);
203
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_JAVA]->title, filetypes[GEANY_FILETYPES_JAVA]);
205
#define PAS // to avoid warnings when building under Windows, the symbol PASCAL is there defined
206
filetypes[GEANY_FILETYPES_PASCAL] = g_new0(filetype, 1);
159
#define PAS /* to avoid warnings when building under Windows, the symbol PASCAL is there defined */
207
160
filetypes[GEANY_FILETYPES_PASCAL]->id = GEANY_FILETYPES_PASCAL;
208
161
filetypes[GEANY_FILETYPES_PASCAL]->uid = FILETYPE_UID_PASCAL;
209
filetypes[GEANY_FILETYPES_PASCAL]->item = NULL;
210
162
filetypes[GEANY_FILETYPES_PASCAL]->lang = 4;
211
163
filetypes[GEANY_FILETYPES_PASCAL]->name = g_strdup("Pascal");
212
filetypes[GEANY_FILETYPES_PASCAL]->has_tags = TRUE;
213
filetypes[GEANY_FILETYPES_PASCAL]->title = g_strdup(_("Pascal source file"));
164
filetypes[GEANY_FILETYPES_PASCAL]->title = g_strdup_printf(_("%s source file"), "Pascal");
214
165
filetypes[GEANY_FILETYPES_PASCAL]->extension = g_strdup("pas");
215
filetypes[GEANY_FILETYPES_PASCAL]->pattern = g_new0(gchar*, 6);
216
filetypes[GEANY_FILETYPES_PASCAL]->pattern[0] = g_strdup("*.pas");
217
filetypes[GEANY_FILETYPES_PASCAL]->pattern[1] = g_strdup("*.pp");
218
filetypes[GEANY_FILETYPES_PASCAL]->pattern[2] = g_strdup("*.inc");
219
filetypes[GEANY_FILETYPES_PASCAL]->pattern[3] = g_strdup("*.dpr");
220
filetypes[GEANY_FILETYPES_PASCAL]->pattern[4] = g_strdup("*.dpk");
221
filetypes[GEANY_FILETYPES_PASCAL]->pattern[5] = NULL;
222
filetypes[GEANY_FILETYPES_PASCAL]->style_func_ptr = styleset_pascal;
166
filetypes[GEANY_FILETYPES_PASCAL]->pattern = utils_strv_new("*.pas", "*.pp", "*.inc", "*.dpr",
223
168
filetypes[GEANY_FILETYPES_PASCAL]->comment_open = g_strdup("{");
224
169
filetypes[GEANY_FILETYPES_PASCAL]->comment_close = g_strdup("}");
225
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_PASCAL]);
226
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_PASCAL]->title, filetypes[GEANY_FILETYPES_PASCAL]);
229
filetypes[GEANY_FILETYPES_ASM] = g_new0(filetype, 1);
230
172
filetypes[GEANY_FILETYPES_ASM]->id = GEANY_FILETYPES_ASM;
231
173
filetypes[GEANY_FILETYPES_ASM]->uid = FILETYPE_UID_ASM;
232
filetypes[GEANY_FILETYPES_ASM]->item = NULL;
233
174
filetypes[GEANY_FILETYPES_ASM]->lang = 9;
234
175
filetypes[GEANY_FILETYPES_ASM]->name = g_strdup("ASM");
235
filetypes[GEANY_FILETYPES_ASM]->has_tags = TRUE;
236
filetypes[GEANY_FILETYPES_ASM]->title = g_strdup(_("Assembler source file"));
176
filetypes[GEANY_FILETYPES_ASM]->title = g_strdup_printf(_("%s source file"), "Assembler");
237
177
filetypes[GEANY_FILETYPES_ASM]->extension = g_strdup("asm");
238
filetypes[GEANY_FILETYPES_ASM]->pattern = g_new0(gchar*, 2);
239
filetypes[GEANY_FILETYPES_ASM]->pattern[0] = g_strdup("*.asm");
240
filetypes[GEANY_FILETYPES_ASM]->pattern[1] = NULL;
241
filetypes[GEANY_FILETYPES_ASM]->style_func_ptr = styleset_asm;
178
filetypes[GEANY_FILETYPES_ASM]->pattern = utils_strv_new("*.asm", NULL);
242
179
filetypes[GEANY_FILETYPES_ASM]->comment_open = g_strdup(";");
243
180
filetypes[GEANY_FILETYPES_ASM]->comment_close = NULL;
244
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_ASM]);
245
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_ASM]->title, filetypes[GEANY_FILETYPES_ASM]);
183
filetypes[GEANY_FILETYPES_BASIC]->id = GEANY_FILETYPES_BASIC;
184
filetypes[GEANY_FILETYPES_BASIC]->uid = FILETYPE_UID_BASIC;
185
filetypes[GEANY_FILETYPES_BASIC]->lang = 26;
186
filetypes[GEANY_FILETYPES_BASIC]->name = g_strdup("FreeBasic");
187
filetypes[GEANY_FILETYPES_BASIC]->title = g_strdup_printf(_("%s source file"), "FreeBasic");
188
filetypes[GEANY_FILETYPES_BASIC]->extension = g_strdup("bas");
189
filetypes[GEANY_FILETYPES_BASIC]->pattern = utils_strv_new("*.bas", "*.bi", NULL);
190
filetypes[GEANY_FILETYPES_BASIC]->comment_open = g_strdup("'");
191
filetypes[GEANY_FILETYPES_BASIC]->comment_close = NULL;
248
filetypes[GEANY_FILETYPES_FORTRAN] = g_new0(filetype, 1);
249
194
filetypes[GEANY_FILETYPES_FORTRAN]->id = GEANY_FILETYPES_FORTRAN;
250
195
filetypes[GEANY_FILETYPES_FORTRAN]->uid = FILETYPE_UID_FORTRAN;
251
filetypes[GEANY_FILETYPES_FORTRAN]->item = NULL;
252
196
filetypes[GEANY_FILETYPES_FORTRAN]->lang = 18;
253
197
filetypes[GEANY_FILETYPES_FORTRAN]->name = g_strdup("Fortran");
254
filetypes[GEANY_FILETYPES_FORTRAN]->has_tags = TRUE;
255
filetypes[GEANY_FILETYPES_FORTRAN]->title = g_strdup(_("Fortran source file (F77)"));
198
filetypes[GEANY_FILETYPES_FORTRAN]->title = g_strdup_printf(_("%s source file"), "Fortran (F77)");
256
199
filetypes[GEANY_FILETYPES_FORTRAN]->extension = g_strdup("f");
257
filetypes[GEANY_FILETYPES_FORTRAN]->pattern = g_new0(gchar*, 7);
258
filetypes[GEANY_FILETYPES_FORTRAN]->pattern[0] = g_strdup("*.f");
259
filetypes[GEANY_FILETYPES_FORTRAN]->pattern[1] = g_strdup("*.for");
260
filetypes[GEANY_FILETYPES_FORTRAN]->pattern[2] = g_strdup("*.ftn");
261
filetypes[GEANY_FILETYPES_FORTRAN]->pattern[3] = g_strdup("*.f77");
262
filetypes[GEANY_FILETYPES_FORTRAN]->pattern[4] = g_strdup("*.f90");
263
filetypes[GEANY_FILETYPES_FORTRAN]->pattern[5] = g_strdup("*.f95");
264
filetypes[GEANY_FILETYPES_FORTRAN]->pattern[6] = NULL;
265
filetypes[GEANY_FILETYPES_FORTRAN]->style_func_ptr = styleset_fortran;
200
filetypes[GEANY_FILETYPES_FORTRAN]->pattern = utils_strv_new("*.f", "*.for", "*.ftn", "*.f77",
201
"*.f90", "*.f95", NULL);
266
202
filetypes[GEANY_FILETYPES_FORTRAN]->comment_open = g_strdup("c");
267
203
filetypes[GEANY_FILETYPES_FORTRAN]->comment_close = NULL;
268
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_FORTRAN]);
269
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_FORTRAN]->title, filetypes[GEANY_FILETYPES_FORTRAN]);
272
filetypes[GEANY_FILETYPES_CAML] = g_new0(filetype, 1);
273
206
filetypes[GEANY_FILETYPES_CAML]->id = GEANY_FILETYPES_CAML;
274
207
filetypes[GEANY_FILETYPES_CAML]->uid = FILETYPE_UID_CAML;
275
filetypes[GEANY_FILETYPES_CAML]->item = NULL;
276
208
filetypes[GEANY_FILETYPES_CAML]->lang = -2;
277
209
filetypes[GEANY_FILETYPES_CAML]->name = g_strdup("CAML");
278
filetypes[GEANY_FILETYPES_CAML]->has_tags = FALSE;
279
filetypes[GEANY_FILETYPES_CAML]->title = g_strdup(_("(O)Caml source file"));
210
filetypes[GEANY_FILETYPES_CAML]->title = g_strdup_printf(_("%s source file"), "(O)Caml");
280
211
filetypes[GEANY_FILETYPES_CAML]->extension = g_strdup("ml");
281
filetypes[GEANY_FILETYPES_CAML]->pattern = g_new0(gchar*, 3);
282
filetypes[GEANY_FILETYPES_CAML]->pattern[0] = g_strdup("*.ml");
283
filetypes[GEANY_FILETYPES_CAML]->pattern[1] = g_strdup("*.mli");
284
filetypes[GEANY_FILETYPES_CAML]->pattern[2] = NULL;
285
filetypes[GEANY_FILETYPES_CAML]->style_func_ptr = styleset_caml;
212
filetypes[GEANY_FILETYPES_CAML]->pattern = utils_strv_new("*.ml", "*.mli", NULL);
286
213
filetypes[GEANY_FILETYPES_CAML]->comment_open = g_strdup("(*");
287
214
filetypes[GEANY_FILETYPES_CAML]->comment_close = g_strdup("*)");
288
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_CAML]);
289
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_CAML]->title, filetypes[GEANY_FILETYPES_CAML]);
292
filetypes[GEANY_FILETYPES_PERL] = g_new0(filetype, 1);
293
217
filetypes[GEANY_FILETYPES_PERL]->id = GEANY_FILETYPES_PERL;
294
218
filetypes[GEANY_FILETYPES_PERL]->uid = FILETYPE_UID_PERL;
295
filetypes[GEANY_FILETYPES_PERL]->item = NULL;
296
219
filetypes[GEANY_FILETYPES_PERL]->lang = 5;
297
220
filetypes[GEANY_FILETYPES_PERL]->name = g_strdup("Perl");
298
filetypes[GEANY_FILETYPES_PERL]->has_tags = TRUE;
299
filetypes[GEANY_FILETYPES_PERL]->title = g_strdup(_("Perl source file"));
300
filetypes[GEANY_FILETYPES_PERL]->extension = g_strdup("perl");
301
filetypes[GEANY_FILETYPES_PERL]->pattern = g_new0(gchar*, 5);
302
filetypes[GEANY_FILETYPES_PERL]->pattern[0] = g_strdup("*.pl");
303
filetypes[GEANY_FILETYPES_PERL]->pattern[1] = g_strdup("*.perl");
304
filetypes[GEANY_FILETYPES_PERL]->pattern[2] = g_strdup("*.pm");
305
filetypes[GEANY_FILETYPES_PERL]->pattern[3] = g_strdup("*.agi");
306
filetypes[GEANY_FILETYPES_PERL]->pattern[4] = NULL;
221
filetypes[GEANY_FILETYPES_PERL]->title = g_strdup_printf(_("%s source file"), "Perl");
222
filetypes[GEANY_FILETYPES_PERL]->extension = g_strdup("pl");
223
filetypes[GEANY_FILETYPES_PERL]->pattern = utils_strv_new("*.pl", "*.perl", "*.pm", "*.agi",
307
225
filetypes[GEANY_FILETYPES_PERL]->comment_open = g_strdup("#");
308
226
filetypes[GEANY_FILETYPES_PERL]->comment_close = NULL;
309
filetypes[GEANY_FILETYPES_PERL]->style_func_ptr = styleset_perl;
310
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_PERL]);
311
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_PERL]->title, filetypes[GEANY_FILETYPES_PERL]);
314
filetypes[GEANY_FILETYPES_PHP] = g_new0(filetype, 1);
315
229
filetypes[GEANY_FILETYPES_PHP]->id = GEANY_FILETYPES_PHP;
316
230
filetypes[GEANY_FILETYPES_PHP]->uid = FILETYPE_UID_PHP;
317
filetypes[GEANY_FILETYPES_PHP]->item = NULL;
318
231
filetypes[GEANY_FILETYPES_PHP]->lang = 6;
319
232
filetypes[GEANY_FILETYPES_PHP]->name = g_strdup("PHP");
320
filetypes[GEANY_FILETYPES_PHP]->has_tags = TRUE;
321
filetypes[GEANY_FILETYPES_PHP]->title = g_strdup(_("PHP source file"));
233
filetypes[GEANY_FILETYPES_PHP]->title = g_strdup_printf(_("%s source file"), "PHP");
322
234
filetypes[GEANY_FILETYPES_PHP]->extension = g_strdup("php");
323
filetypes[GEANY_FILETYPES_PHP]->pattern = g_new0(gchar*, 6);
324
filetypes[GEANY_FILETYPES_PHP]->pattern[0] = g_strdup("*.php");
325
filetypes[GEANY_FILETYPES_PHP]->pattern[1] = g_strdup("*.php3");
326
filetypes[GEANY_FILETYPES_PHP]->pattern[2] = g_strdup("*.php4");
327
filetypes[GEANY_FILETYPES_PHP]->pattern[3] = g_strdup("*.php5");
328
filetypes[GEANY_FILETYPES_PHP]->pattern[4] = g_strdup("*.phtml");
329
filetypes[GEANY_FILETYPES_PHP]->pattern[5] = NULL;
330
filetypes[GEANY_FILETYPES_PHP]->style_func_ptr = styleset_php;
235
filetypes[GEANY_FILETYPES_PHP]->pattern = utils_strv_new("*.php", "*.php3", "*.php4", "*.php5",
331
237
filetypes[GEANY_FILETYPES_PHP]->comment_open = g_strdup("//");
332
238
filetypes[GEANY_FILETYPES_PHP]->comment_close = NULL;
333
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_PHP]);
334
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_PHP]->title, filetypes[GEANY_FILETYPES_PHP]);
241
filetypes[GEANY_FILETYPES_JS]->id = GEANY_FILETYPES_JS;
242
filetypes[GEANY_FILETYPES_JS]->uid = FILETYPE_UID_JS;
243
filetypes[GEANY_FILETYPES_JS]->lang = 23;
244
filetypes[GEANY_FILETYPES_JS]->name = g_strdup("Javascript");
245
filetypes[GEANY_FILETYPES_JS]->title = g_strdup_printf(_("%s source file"), "Javascript");
246
filetypes[GEANY_FILETYPES_JS]->extension = g_strdup("js");
247
filetypes[GEANY_FILETYPES_JS]->pattern = utils_strv_new("*.js", NULL);
248
filetypes[GEANY_FILETYPES_JS]->comment_open = g_strdup("//");
249
filetypes[GEANY_FILETYPES_JS]->comment_close = NULL;
337
filetypes[GEANY_FILETYPES_PYTHON] = g_new0(filetype, 1);
338
252
filetypes[GEANY_FILETYPES_PYTHON]->id = GEANY_FILETYPES_PYTHON;
339
253
filetypes[GEANY_FILETYPES_PYTHON]->uid = FILETYPE_UID_PYTHON;
340
filetypes[GEANY_FILETYPES_PYTHON]->item = NULL;
341
254
filetypes[GEANY_FILETYPES_PYTHON]->lang = 7;
342
255
filetypes[GEANY_FILETYPES_PYTHON]->name = g_strdup("Python");
343
filetypes[GEANY_FILETYPES_PYTHON]->has_tags = TRUE;
344
filetypes[GEANY_FILETYPES_PYTHON]->title = g_strdup(_("Python source file"));
256
filetypes[GEANY_FILETYPES_PYTHON]->title = g_strdup_printf(_("%s source file"), "Python");
345
257
filetypes[GEANY_FILETYPES_PYTHON]->extension = g_strdup("py");
346
filetypes[GEANY_FILETYPES_PYTHON]->pattern = g_new0(gchar*, 3);
347
filetypes[GEANY_FILETYPES_PYTHON]->pattern[0] = g_strdup("*.py");
348
filetypes[GEANY_FILETYPES_PYTHON]->pattern[1] = g_strdup("*.pyw");
349
filetypes[GEANY_FILETYPES_PYTHON]->pattern[2] = NULL;
350
filetypes[GEANY_FILETYPES_PYTHON]->style_func_ptr = styleset_python;
258
filetypes[GEANY_FILETYPES_PYTHON]->pattern = utils_strv_new("*.py", "*.pyw", NULL);
351
259
filetypes[GEANY_FILETYPES_PYTHON]->comment_open = g_strdup("#");
352
260
filetypes[GEANY_FILETYPES_PYTHON]->comment_close = NULL;
353
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_PYTHON]);
354
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_PYTHON]->title, filetypes[GEANY_FILETYPES_PYTHON]);
357
filetypes[GEANY_FILETYPES_RUBY] = g_new0(filetype, 1);
358
263
filetypes[GEANY_FILETYPES_RUBY]->id = GEANY_FILETYPES_RUBY;
359
264
filetypes[GEANY_FILETYPES_RUBY]->uid = FILETYPE_UID_RUBY;
360
filetypes[GEANY_FILETYPES_RUBY]->item = NULL;
361
265
filetypes[GEANY_FILETYPES_RUBY]->lang = 14;
362
266
filetypes[GEANY_FILETYPES_RUBY]->name = g_strdup("Ruby");
363
filetypes[GEANY_FILETYPES_RUBY]->has_tags = TRUE;
364
filetypes[GEANY_FILETYPES_RUBY]->title = g_strdup(_("Ruby source file"));
267
filetypes[GEANY_FILETYPES_RUBY]->title = g_strdup_printf(_("%s source file"), "Ruby");
365
268
filetypes[GEANY_FILETYPES_RUBY]->extension = g_strdup("rb");
366
filetypes[GEANY_FILETYPES_RUBY]->pattern = g_new0(gchar*, 3);
367
filetypes[GEANY_FILETYPES_RUBY]->pattern[0] = g_strdup("*.rb");
368
filetypes[GEANY_FILETYPES_RUBY]->pattern[1] = g_strdup("*.rhtml");
369
filetypes[GEANY_FILETYPES_RUBY]->pattern[2] = NULL;
370
filetypes[GEANY_FILETYPES_RUBY]->style_func_ptr = styleset_ruby;
269
filetypes[GEANY_FILETYPES_RUBY]->pattern = utils_strv_new("*.rb", "*.rhtml", "*.ruby", NULL);
371
270
filetypes[GEANY_FILETYPES_RUBY]->comment_open = g_strdup("#");
372
271
filetypes[GEANY_FILETYPES_RUBY]->comment_close = NULL;
373
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_RUBY]);
374
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_RUBY]->title, filetypes[GEANY_FILETYPES_RUBY]);
377
filetypes[GEANY_FILETYPES_TCL] = g_new0(filetype, 1);
378
274
filetypes[GEANY_FILETYPES_TCL]->id = GEANY_FILETYPES_TCL;
379
275
filetypes[GEANY_FILETYPES_TCL]->uid = FILETYPE_UID_TCL;
380
filetypes[GEANY_FILETYPES_TCL]->item = NULL;
381
276
filetypes[GEANY_FILETYPES_TCL]->lang = 15;
382
277
filetypes[GEANY_FILETYPES_TCL]->name = g_strdup("Tcl");
383
filetypes[GEANY_FILETYPES_TCL]->has_tags = TRUE;
384
filetypes[GEANY_FILETYPES_TCL]->title = g_strdup(_("Tcl source file"));
278
filetypes[GEANY_FILETYPES_TCL]->title = g_strdup_printf(_("%s source file"), "Tcl");
385
279
filetypes[GEANY_FILETYPES_TCL]->extension = g_strdup("tcl");
386
filetypes[GEANY_FILETYPES_TCL]->pattern = g_new0(gchar*, 4);
387
filetypes[GEANY_FILETYPES_TCL]->pattern[0] = g_strdup("*.tcl");
388
filetypes[GEANY_FILETYPES_TCL]->pattern[1] = g_strdup("*.tk");
389
filetypes[GEANY_FILETYPES_TCL]->pattern[2] = g_strdup("*.wish");
390
filetypes[GEANY_FILETYPES_TCL]->pattern[3] = NULL;
391
filetypes[GEANY_FILETYPES_TCL]->style_func_ptr = styleset_tcl;
280
filetypes[GEANY_FILETYPES_TCL]->pattern = utils_strv_new("*.tcl", "*.tk", "*.wish", NULL);
392
281
filetypes[GEANY_FILETYPES_TCL]->comment_open = g_strdup("#");
393
282
filetypes[GEANY_FILETYPES_TCL]->comment_close = NULL;
394
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_TCL]);
395
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_TCL]->title, filetypes[GEANY_FILETYPES_TCL]);
285
filetypes[GEANY_FILETYPES_LUA]->id = GEANY_FILETYPES_LUA;
286
filetypes[GEANY_FILETYPES_LUA]->uid = FILETYPE_UID_LUA;
287
filetypes[GEANY_FILETYPES_LUA]->lang = 22;
288
filetypes[GEANY_FILETYPES_LUA]->name = g_strdup("Lua");
289
filetypes[GEANY_FILETYPES_LUA]->title = g_strdup_printf(_("%s source file"), "Lua");
290
filetypes[GEANY_FILETYPES_LUA]->extension = g_strdup("lua");
291
filetypes[GEANY_FILETYPES_LUA]->pattern = utils_strv_new("*.lua", NULL);
292
filetypes[GEANY_FILETYPES_LUA]->comment_open = g_strdup("--");
293
filetypes[GEANY_FILETYPES_LUA]->comment_close = NULL;
398
filetypes[GEANY_FILETYPES_FERITE] = g_new0(filetype, 1);
399
296
filetypes[GEANY_FILETYPES_FERITE]->id = GEANY_FILETYPES_FERITE;
400
297
filetypes[GEANY_FILETYPES_FERITE]->uid = FILETYPE_UID_FERITE;
401
filetypes[GEANY_FILETYPES_FERITE]->item = NULL;
402
298
filetypes[GEANY_FILETYPES_FERITE]->lang = 19;
403
299
filetypes[GEANY_FILETYPES_FERITE]->name = g_strdup("Ferite");
404
filetypes[GEANY_FILETYPES_FERITE]->has_tags = TRUE;
405
filetypes[GEANY_FILETYPES_FERITE]->title = g_strdup(_("Ferite source file"));
300
filetypes[GEANY_FILETYPES_FERITE]->title = g_strdup_printf(_("%s source file"), "Ferite");
406
301
filetypes[GEANY_FILETYPES_FERITE]->extension = g_strdup("fe");
407
filetypes[GEANY_FILETYPES_FERITE]->pattern = g_new0(gchar*, 2);
408
filetypes[GEANY_FILETYPES_FERITE]->pattern[0] = g_strdup("*.fe");
409
filetypes[GEANY_FILETYPES_FERITE]->pattern[1] = NULL;
410
filetypes[GEANY_FILETYPES_FERITE]->style_func_ptr = styleset_ferite;
302
filetypes[GEANY_FILETYPES_FERITE]->pattern = utils_strv_new("*.fe", NULL);
411
303
filetypes[GEANY_FILETYPES_FERITE]->comment_open = g_strdup("/*");
412
304
filetypes[GEANY_FILETYPES_FERITE]->comment_close = g_strdup("*/");
413
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_FERITE]);
414
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_FERITE]->title, filetypes[GEANY_FILETYPES_FERITE]);
307
filetypes[GEANY_FILETYPES_HASKELL]->id = GEANY_FILETYPES_HASKELL;
308
filetypes[GEANY_FILETYPES_HASKELL]->uid = FILETYPE_UID_HASKELL;
309
filetypes[GEANY_FILETYPES_HASKELL]->lang = 24;
310
filetypes[GEANY_FILETYPES_HASKELL]->name = g_strdup("Haskell");
311
filetypes[GEANY_FILETYPES_HASKELL]->title = g_strdup_printf(_("%s source file"), "Haskell");
312
filetypes[GEANY_FILETYPES_HASKELL]->extension = g_strdup("hs");
313
filetypes[GEANY_FILETYPES_HASKELL]->pattern = utils_strv_new("*.hs", "*.lhs", NULL);
314
filetypes[GEANY_FILETYPES_HASKELL]->comment_open = g_strdup("--");
315
filetypes[GEANY_FILETYPES_HASKELL]->comment_close = NULL;
417
filetypes[GEANY_FILETYPES_SH] = g_new0(filetype, 1);
418
318
filetypes[GEANY_FILETYPES_SH]->id = GEANY_FILETYPES_SH;
419
319
filetypes[GEANY_FILETYPES_SH]->uid = FILETYPE_UID_SH;
420
filetypes[GEANY_FILETYPES_SH]->item = NULL;
421
320
filetypes[GEANY_FILETYPES_SH]->lang = 16;
422
321
filetypes[GEANY_FILETYPES_SH]->name = g_strdup("Sh");
423
filetypes[GEANY_FILETYPES_SH]->has_tags = TRUE;
424
322
filetypes[GEANY_FILETYPES_SH]->title = g_strdup(_("Shell script file"));
425
323
filetypes[GEANY_FILETYPES_SH]->extension = g_strdup("sh");
426
filetypes[GEANY_FILETYPES_SH]->pattern = g_new0(gchar*, 8);
427
filetypes[GEANY_FILETYPES_SH]->pattern[0] = g_strdup("*.sh");
428
filetypes[GEANY_FILETYPES_SH]->pattern[1] = g_strdup("configure");
429
filetypes[GEANY_FILETYPES_SH]->pattern[2] = g_strdup("configure.in");
430
filetypes[GEANY_FILETYPES_SH]->pattern[3] = g_strdup("configure.in.in");
431
filetypes[GEANY_FILETYPES_SH]->pattern[4] = g_strdup("configure.ac");
432
filetypes[GEANY_FILETYPES_SH]->pattern[5] = g_strdup("*.ksh");
433
filetypes[GEANY_FILETYPES_SH]->pattern[6] = g_strdup("*.zsh");
434
filetypes[GEANY_FILETYPES_SH]->pattern[7] = NULL;
435
filetypes[GEANY_FILETYPES_SH]->style_func_ptr = styleset_sh;
324
filetypes[GEANY_FILETYPES_SH]->pattern = utils_strv_new("*.sh", "configure", "configure.in",
325
"configure.in.in", "configure.ac", "*.ksh", "*.zsh", "*.ash", "*.bash", NULL);
436
326
filetypes[GEANY_FILETYPES_SH]->comment_open = g_strdup("#");
437
327
filetypes[GEANY_FILETYPES_SH]->comment_close = NULL;
438
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_SH]);
439
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_SH]->title, filetypes[GEANY_FILETYPES_SH]);
442
filetypes[GEANY_FILETYPES_MAKE] = g_new0(filetype, 1);
443
330
filetypes[GEANY_FILETYPES_MAKE]->id = GEANY_FILETYPES_MAKE;
444
331
filetypes[GEANY_FILETYPES_MAKE]->uid = FILETYPE_UID_MAKE;
445
filetypes[GEANY_FILETYPES_MAKE]->item = NULL;
446
332
filetypes[GEANY_FILETYPES_MAKE]->lang = 3;
447
333
filetypes[GEANY_FILETYPES_MAKE]->name = g_strdup("Make");
448
filetypes[GEANY_FILETYPES_MAKE]->has_tags = TRUE;
449
334
filetypes[GEANY_FILETYPES_MAKE]->title = g_strdup(_("Makefile"));
450
335
filetypes[GEANY_FILETYPES_MAKE]->extension = g_strdup("mak");
452
gchar *pattern_make[] = {"*.mak", "*.mk", "Makefile*", "makefile*", NULL};
453
filetypes[GEANY_FILETYPES_MAKE]->pattern = g_strdupv(pattern_make);
455
filetypes[GEANY_FILETYPES_MAKE]->style_func_ptr = styleset_makefile;
336
filetypes[GEANY_FILETYPES_MAKE]->pattern = utils_strv_new(
337
"*.mak", "*.mk", "GNUmakefile", "makefile", "Makefile", "makefile.*", "Makefile.*", NULL);
456
338
filetypes[GEANY_FILETYPES_MAKE]->comment_open = g_strdup("#");
457
339
filetypes[GEANY_FILETYPES_MAKE]->comment_close = NULL;
458
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_MAKE]);
459
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_MAKE]->title, filetypes[GEANY_FILETYPES_MAKE]);
462
filetypes[GEANY_FILETYPES_XML] = g_new0(filetype, 1);
463
342
filetypes[GEANY_FILETYPES_XML]->id = GEANY_FILETYPES_XML;
464
343
filetypes[GEANY_FILETYPES_XML]->uid = FILETYPE_UID_XML;
465
filetypes[GEANY_FILETYPES_XML]->item = NULL;
466
344
filetypes[GEANY_FILETYPES_XML]->lang = -2;
467
345
filetypes[GEANY_FILETYPES_XML]->name = g_strdup("XML");
468
filetypes[GEANY_FILETYPES_XML]->has_tags = FALSE;
469
filetypes[GEANY_FILETYPES_XML]->title = g_strdup(_("XML source file"));
346
filetypes[GEANY_FILETYPES_XML]->title = g_strdup(_("XML document"));
470
347
filetypes[GEANY_FILETYPES_XML]->extension = g_strdup("xml");
471
filetypes[GEANY_FILETYPES_XML]->pattern = g_new0(gchar*, 3);
472
filetypes[GEANY_FILETYPES_XML]->pattern[0] = g_strdup("*.xml");
473
filetypes[GEANY_FILETYPES_XML]->pattern[1] = g_strdup("*.sgml");
474
filetypes[GEANY_FILETYPES_XML]->pattern[2] = NULL;
475
filetypes[GEANY_FILETYPES_XML]->style_func_ptr = styleset_xml;
348
filetypes[GEANY_FILETYPES_XML]->pattern = utils_strv_new(
349
"*.xml", "*.sgml", "*.xsl", "*.xslt", "*.xsd", "*.xhtml", NULL);
476
350
filetypes[GEANY_FILETYPES_XML]->comment_open = g_strdup("<!--");
477
351
filetypes[GEANY_FILETYPES_XML]->comment_close = g_strdup("-->");
478
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_XML]);
479
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_XML]->title, filetypes[GEANY_FILETYPES_XML]);
482
filetypes[GEANY_FILETYPES_DOCBOOK] = g_new0(filetype, 1);
483
354
filetypes[GEANY_FILETYPES_DOCBOOK]->id = GEANY_FILETYPES_DOCBOOK;
484
355
filetypes[GEANY_FILETYPES_DOCBOOK]->uid = FILETYPE_UID_DOCBOOK;
485
filetypes[GEANY_FILETYPES_DOCBOOK]->item = NULL;
486
356
filetypes[GEANY_FILETYPES_DOCBOOK]->lang = 12;
487
357
filetypes[GEANY_FILETYPES_DOCBOOK]->name = g_strdup("Docbook");
488
filetypes[GEANY_FILETYPES_DOCBOOK]->has_tags = TRUE;
489
filetypes[GEANY_FILETYPES_DOCBOOK]->title = g_strdup(_("Docbook source file"));
358
filetypes[GEANY_FILETYPES_DOCBOOK]->title = g_strdup_printf(_("%s source file"), "Docbook");
490
359
filetypes[GEANY_FILETYPES_DOCBOOK]->extension = g_strdup("docbook");
491
filetypes[GEANY_FILETYPES_DOCBOOK]->pattern = g_new0(gchar*, 2);
492
filetypes[GEANY_FILETYPES_DOCBOOK]->pattern[0] = g_strdup("*.docbook");
493
filetypes[GEANY_FILETYPES_DOCBOOK]->pattern[1] = NULL;
494
filetypes[GEANY_FILETYPES_DOCBOOK]->style_func_ptr = styleset_docbook;
360
filetypes[GEANY_FILETYPES_DOCBOOK]->pattern = utils_strv_new("*.docbook", NULL);
495
361
filetypes[GEANY_FILETYPES_DOCBOOK]->comment_open = g_strdup("<!--");
496
362
filetypes[GEANY_FILETYPES_DOCBOOK]->comment_close = g_strdup("-->");
497
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_DOCBOOK]);
498
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_DOCBOOK]->title, filetypes[GEANY_FILETYPES_DOCBOOK]);
501
filetypes[GEANY_FILETYPES_HTML] = g_new0(filetype, 1);
502
365
filetypes[GEANY_FILETYPES_HTML]->id = GEANY_FILETYPES_HTML;
503
366
filetypes[GEANY_FILETYPES_HTML]->uid = FILETYPE_UID_HTML;
504
filetypes[GEANY_FILETYPES_HTML]->item = NULL;
505
filetypes[GEANY_FILETYPES_HTML]->lang = -2;
367
filetypes[GEANY_FILETYPES_HTML]->lang = 29;
506
368
filetypes[GEANY_FILETYPES_HTML]->name = g_strdup("HTML");
507
filetypes[GEANY_FILETYPES_HTML]->has_tags = FALSE;
508
filetypes[GEANY_FILETYPES_HTML]->title = g_strdup(_("HTML source file"));
369
filetypes[GEANY_FILETYPES_HTML]->title = g_strdup_printf(_("%s source file"), "HTML");
509
370
filetypes[GEANY_FILETYPES_HTML]->extension = g_strdup("html");
510
filetypes[GEANY_FILETYPES_HTML]->pattern = g_new0(gchar*, 8);
511
filetypes[GEANY_FILETYPES_HTML]->pattern[0] = g_strdup("*.htm");
512
filetypes[GEANY_FILETYPES_HTML]->pattern[1] = g_strdup("*.html");
513
filetypes[GEANY_FILETYPES_HTML]->pattern[2] = g_strdup("*.shtml");
514
filetypes[GEANY_FILETYPES_HTML]->pattern[3] = g_strdup("*.hta");
515
filetypes[GEANY_FILETYPES_HTML]->pattern[4] = g_strdup("*.htd");
516
filetypes[GEANY_FILETYPES_HTML]->pattern[5] = g_strdup("*.htt");
517
filetypes[GEANY_FILETYPES_HTML]->pattern[6] = g_strdup("*.cfm");
518
filetypes[GEANY_FILETYPES_HTML]->pattern[7] = NULL;
519
filetypes[GEANY_FILETYPES_HTML]->style_func_ptr = styleset_html;
371
filetypes[GEANY_FILETYPES_HTML]->pattern = utils_strv_new(
372
"*.htm", "*.html", "*.shtml", "*.hta", "*.htd", "*.htt", "*.cfm", NULL);
520
373
filetypes[GEANY_FILETYPES_HTML]->comment_open = g_strdup("<!--");
521
374
filetypes[GEANY_FILETYPES_HTML]->comment_close = g_strdup("-->");
522
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_HTML]);
523
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_HTML]->title, filetypes[GEANY_FILETYPES_HTML]);
526
filetypes[GEANY_FILETYPES_CSS] = g_new0(filetype, 1);
527
377
filetypes[GEANY_FILETYPES_CSS]->id = GEANY_FILETYPES_CSS;
528
378
filetypes[GEANY_FILETYPES_CSS]->uid = FILETYPE_UID_CSS;
529
filetypes[GEANY_FILETYPES_CSS]->item = NULL;
530
379
filetypes[GEANY_FILETYPES_CSS]->lang = 13;
531
380
filetypes[GEANY_FILETYPES_CSS]->name = g_strdup("CSS");
532
filetypes[GEANY_FILETYPES_CSS]->has_tags = TRUE;
533
381
filetypes[GEANY_FILETYPES_CSS]->title = g_strdup(_("Cascading StyleSheet"));
534
382
filetypes[GEANY_FILETYPES_CSS]->extension = g_strdup("css");
535
filetypes[GEANY_FILETYPES_CSS]->pattern = g_new0(gchar*, 2);
536
filetypes[GEANY_FILETYPES_CSS]->pattern[0] = g_strdup("*.css");
537
filetypes[GEANY_FILETYPES_CSS]->pattern[1] = NULL;
538
filetypes[GEANY_FILETYPES_CSS]->style_func_ptr = styleset_css;
383
filetypes[GEANY_FILETYPES_CSS]->pattern = utils_strv_new("*.css", NULL);
539
384
filetypes[GEANY_FILETYPES_CSS]->comment_open = g_strdup("/*");
540
385
filetypes[GEANY_FILETYPES_CSS]->comment_close = g_strdup("*/");
541
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_CSS]);
542
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_CSS]->title, filetypes[GEANY_FILETYPES_CSS]);
545
filetypes[GEANY_FILETYPES_SQL] = g_new0(filetype, 1);
546
388
filetypes[GEANY_FILETYPES_SQL]->id = GEANY_FILETYPES_SQL;
547
389
filetypes[GEANY_FILETYPES_SQL]->uid = FILETYPE_UID_SQL;
548
filetypes[GEANY_FILETYPES_SQL]->item = NULL;
549
390
filetypes[GEANY_FILETYPES_SQL]->lang = 11;
550
391
filetypes[GEANY_FILETYPES_SQL]->name = g_strdup("SQL");
551
filetypes[GEANY_FILETYPES_SQL]->has_tags = TRUE;
552
392
filetypes[GEANY_FILETYPES_SQL]->title = g_strdup(_("SQL Dump file"));
553
393
filetypes[GEANY_FILETYPES_SQL]->extension = g_strdup("sql");
554
filetypes[GEANY_FILETYPES_SQL]->pattern = g_new0(gchar*, 2);
555
filetypes[GEANY_FILETYPES_SQL]->pattern[0] = g_strdup("*.sql");
556
filetypes[GEANY_FILETYPES_SQL]->pattern[1] = NULL;
557
filetypes[GEANY_FILETYPES_SQL]->style_func_ptr = styleset_sql;
394
filetypes[GEANY_FILETYPES_SQL]->pattern = utils_strv_new("*.sql", NULL);
558
395
filetypes[GEANY_FILETYPES_SQL]->comment_open = g_strdup("/*");
559
396
filetypes[GEANY_FILETYPES_SQL]->comment_close = g_strdup("*/");
560
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_SQL]);
561
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_SQL]->title, filetypes[GEANY_FILETYPES_SQL]);
564
filetypes[GEANY_FILETYPES_LATEX] = g_new0(filetype, 1);
565
399
filetypes[GEANY_FILETYPES_LATEX]->id = GEANY_FILETYPES_LATEX;
566
400
filetypes[GEANY_FILETYPES_LATEX]->uid = FILETYPE_UID_LATEX;
567
filetypes[GEANY_FILETYPES_LATEX]->item = NULL;
568
401
filetypes[GEANY_FILETYPES_LATEX]->lang = 8;
569
402
filetypes[GEANY_FILETYPES_LATEX]->name = g_strdup("LaTeX");
570
filetypes[GEANY_FILETYPES_LATEX]->has_tags = TRUE;
571
filetypes[GEANY_FILETYPES_LATEX]->title = g_strdup(_("LaTeX source file"));
403
filetypes[GEANY_FILETYPES_LATEX]->title = g_strdup_printf(_("%s source file"), "LaTeX");
572
404
filetypes[GEANY_FILETYPES_LATEX]->extension = g_strdup("tex");
573
filetypes[GEANY_FILETYPES_LATEX]->pattern = g_new0(gchar*, 4);
574
filetypes[GEANY_FILETYPES_LATEX]->pattern[0] = g_strdup("*.tex");
575
filetypes[GEANY_FILETYPES_LATEX]->pattern[1] = g_strdup("*.sty");
576
filetypes[GEANY_FILETYPES_LATEX]->pattern[2] = g_strdup("*.idx");
577
filetypes[GEANY_FILETYPES_LATEX]->pattern[3] = NULL;
578
filetypes[GEANY_FILETYPES_LATEX]->style_func_ptr = styleset_latex;
405
filetypes[GEANY_FILETYPES_LATEX]->pattern = utils_strv_new("*.tex", "*.sty", "*.idx", "*.ltx", NULL);
579
406
filetypes[GEANY_FILETYPES_LATEX]->comment_open = g_strdup("%");
580
407
filetypes[GEANY_FILETYPES_LATEX]->comment_close = NULL;
581
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_LATEX]);
582
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_LATEX]->title, filetypes[GEANY_FILETYPES_LATEX]);
585
filetypes[GEANY_FILETYPES_OMS] = g_new0(filetype, 1);
586
410
filetypes[GEANY_FILETYPES_OMS]->id = GEANY_FILETYPES_OMS;
587
411
filetypes[GEANY_FILETYPES_OMS]->uid = FILETYPE_UID_OMS;
588
filetypes[GEANY_FILETYPES_OMS]->item = NULL;
589
412
filetypes[GEANY_FILETYPES_OMS]->lang = -2;
590
413
filetypes[GEANY_FILETYPES_OMS]->name = g_strdup("O-Matrix");
591
filetypes[GEANY_FILETYPES_OMS]->has_tags = FALSE;
592
filetypes[GEANY_FILETYPES_OMS]->title = g_strdup(_("O-Matrix source file"));
414
filetypes[GEANY_FILETYPES_OMS]->title = g_strdup_printf(_("%s source file"), "O-Matrix");
593
415
filetypes[GEANY_FILETYPES_OMS]->extension = g_strdup("oms");
594
filetypes[GEANY_FILETYPES_OMS]->pattern = g_new0(gchar*, 2);
595
filetypes[GEANY_FILETYPES_OMS]->pattern[0] = g_strdup("*.oms");
596
filetypes[GEANY_FILETYPES_OMS]->pattern[1] = NULL;
597
filetypes[GEANY_FILETYPES_OMS]->style_func_ptr = styleset_oms;
416
filetypes[GEANY_FILETYPES_OMS]->pattern = utils_strv_new("*.oms", NULL);
598
417
filetypes[GEANY_FILETYPES_OMS]->comment_open = g_strdup("#");
599
418
filetypes[GEANY_FILETYPES_OMS]->comment_close = NULL;
600
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_OMS]);
601
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_OMS]->title, filetypes[GEANY_FILETYPES_OMS]);
421
filetypes[GEANY_FILETYPES_VHDL]->id = GEANY_FILETYPES_VHDL;
422
filetypes[GEANY_FILETYPES_VHDL]->uid = FILETYPE_UID_VHDL;
423
filetypes[GEANY_FILETYPES_VHDL]->lang = 21;
424
filetypes[GEANY_FILETYPES_VHDL]->name = g_strdup("VHDL");
425
filetypes[GEANY_FILETYPES_VHDL]->title = g_strdup_printf(_("%s source file"), "VHDL");
426
filetypes[GEANY_FILETYPES_VHDL]->extension = g_strdup("vhd");
427
filetypes[GEANY_FILETYPES_VHDL]->pattern = utils_strv_new("*.vhd", "*.vhdl", NULL);
428
filetypes[GEANY_FILETYPES_VHDL]->comment_open = g_strdup("--");
429
filetypes[GEANY_FILETYPES_VHDL]->comment_close = NULL;
604
filetypes[GEANY_FILETYPES_DIFF] = g_new0(filetype, 1);
605
432
filetypes[GEANY_FILETYPES_DIFF]->id = GEANY_FILETYPES_DIFF;
606
433
filetypes[GEANY_FILETYPES_DIFF]->uid = FILETYPE_UID_DIFF;
607
filetypes[GEANY_FILETYPES_DIFF]->item = NULL;
608
filetypes[GEANY_FILETYPES_DIFF]->lang = -2;
434
filetypes[GEANY_FILETYPES_DIFF]->lang = 20;
609
435
filetypes[GEANY_FILETYPES_DIFF]->name = g_strdup("Diff");
610
filetypes[GEANY_FILETYPES_DIFF]->has_tags = FALSE;
611
436
filetypes[GEANY_FILETYPES_DIFF]->title = g_strdup(_("Diff file"));
612
437
filetypes[GEANY_FILETYPES_DIFF]->extension = g_strdup("diff");
613
filetypes[GEANY_FILETYPES_DIFF]->pattern = g_new0(gchar*, 3);
614
filetypes[GEANY_FILETYPES_DIFF]->pattern[0] = g_strdup("*.diff");
615
filetypes[GEANY_FILETYPES_DIFF]->pattern[1] = g_strdup("*.patch");
616
filetypes[GEANY_FILETYPES_DIFF]->pattern[2] = NULL;
617
filetypes[GEANY_FILETYPES_DIFF]->style_func_ptr = styleset_diff;
438
filetypes[GEANY_FILETYPES_DIFF]->pattern = utils_strv_new("*.diff", "*.patch", "*.rej", NULL);
618
439
filetypes[GEANY_FILETYPES_DIFF]->comment_open = g_strdup("#");
619
440
filetypes[GEANY_FILETYPES_DIFF]->comment_close = NULL;
620
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_DIFF]);
621
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_DIFF]->title, filetypes[GEANY_FILETYPES_DIFF]);
624
filetypes[GEANY_FILETYPES_CONF] = g_new0(filetype, 1);
625
443
filetypes[GEANY_FILETYPES_CONF]->id = GEANY_FILETYPES_CONF;
626
444
filetypes[GEANY_FILETYPES_CONF]->uid = FILETYPE_UID_CONF;
627
filetypes[GEANY_FILETYPES_CONF]->item = NULL;
628
445
filetypes[GEANY_FILETYPES_CONF]->lang = 10;
629
446
filetypes[GEANY_FILETYPES_CONF]->name = g_strdup("Conf");
630
filetypes[GEANY_FILETYPES_CONF]->has_tags = TRUE;
631
447
filetypes[GEANY_FILETYPES_CONF]->title = g_strdup(_("Config file"));
632
448
filetypes[GEANY_FILETYPES_CONF]->extension = g_strdup("conf");
633
filetypes[GEANY_FILETYPES_CONF]->pattern = g_new0(gchar*, 6);
634
filetypes[GEANY_FILETYPES_CONF]->pattern[0] = g_strdup("*.conf");
635
filetypes[GEANY_FILETYPES_CONF]->pattern[1] = g_strdup("*.ini");
636
filetypes[GEANY_FILETYPES_CONF]->pattern[2] = g_strdup("config");
637
filetypes[GEANY_FILETYPES_CONF]->pattern[3] = g_strdup("*rc");
638
filetypes[GEANY_FILETYPES_CONF]->pattern[4] = g_strdup("*.cfg");
639
filetypes[GEANY_FILETYPES_CONF]->pattern[5] = NULL;
640
filetypes[GEANY_FILETYPES_CONF]->style_func_ptr = styleset_conf;
449
filetypes[GEANY_FILETYPES_CONF]->pattern = utils_strv_new("*.conf", "*.ini", "config", "*rc",
641
451
filetypes[GEANY_FILETYPES_CONF]->comment_open = g_strdup("#");
642
452
filetypes[GEANY_FILETYPES_CONF]->comment_close = NULL;
643
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_CONF]);
644
filetypes_create_menu_item(filetype_menu, filetypes[GEANY_FILETYPES_CONF]->title, filetypes[GEANY_FILETYPES_CONF]);
455
filetypes[GEANY_FILETYPES_HAXE]->id = GEANY_FILETYPES_HAXE;
456
filetypes[GEANY_FILETYPES_HAXE]->uid = FILETYPE_UID_HAXE;
457
filetypes[GEANY_FILETYPES_HAXE]->lang = 27;
458
filetypes[GEANY_FILETYPES_HAXE]->name = g_strdup("Haxe");
459
filetypes[GEANY_FILETYPES_HAXE]->title = g_strdup_printf(_("%s source file"), "Haxe");
460
filetypes[GEANY_FILETYPES_HAXE]->extension = g_strdup("hx");
461
filetypes[GEANY_FILETYPES_HAXE]->pattern = utils_strv_new("*.hx", NULL);
462
filetypes[GEANY_FILETYPES_HAXE]->comment_open = g_strdup("//");
463
filetypes[GEANY_FILETYPES_HAXE]->comment_close = NULL;
466
filetypes[GEANY_FILETYPES_REST]->id = GEANY_FILETYPES_REST;
467
filetypes[GEANY_FILETYPES_REST]->uid = FILETYPE_UID_REST;
468
filetypes[GEANY_FILETYPES_REST]->lang = 28;
469
filetypes[GEANY_FILETYPES_REST]->name = g_strdup("reStructuredText");
470
filetypes[GEANY_FILETYPES_REST]->title = g_strdup(_("reStructuredText file"));
471
filetypes[GEANY_FILETYPES_REST]->extension = g_strdup("rst");
472
filetypes[GEANY_FILETYPES_REST]->pattern = utils_strv_new(
473
"*.rest", "*.reST", "*.rst", NULL);
474
filetypes[GEANY_FILETYPES_REST]->comment_open = NULL;
475
filetypes[GEANY_FILETYPES_REST]->comment_close = NULL;
647
filetypes[GEANY_FILETYPES_ALL] = g_new0(filetype, 1);
648
478
filetypes[GEANY_FILETYPES_ALL]->id = GEANY_FILETYPES_ALL;
649
479
filetypes[GEANY_FILETYPES_ALL]->name = g_strdup("None");
650
480
filetypes[GEANY_FILETYPES_ALL]->uid = FILETYPE_UID_ALL;
651
filetypes[GEANY_FILETYPES_ALL]->item = NULL;
652
481
filetypes[GEANY_FILETYPES_ALL]->lang = -2;
653
filetypes[GEANY_FILETYPES_ALL]->has_tags = FALSE;
654
482
filetypes[GEANY_FILETYPES_ALL]->title = g_strdup(_("All files"));
655
483
filetypes[GEANY_FILETYPES_ALL]->extension = g_strdup("*");
656
filetypes[GEANY_FILETYPES_ALL]->pattern = g_new0(gchar*, 2);
657
filetypes[GEANY_FILETYPES_ALL]->pattern[0] = g_strdup("*");
658
filetypes[GEANY_FILETYPES_ALL]->pattern[1] = NULL;
659
filetypes[GEANY_FILETYPES_ALL]->style_func_ptr = styleset_none;
484
filetypes[GEANY_FILETYPES_ALL]->pattern = utils_strv_new("*", NULL);
660
485
filetypes[GEANY_FILETYPES_ALL]->comment_open = NULL;
661
486
filetypes[GEANY_FILETYPES_ALL]->comment_close = NULL;
662
filetypes_init_build_programs(filetypes[GEANY_FILETYPES_ALL]);
663
filetypes_create_menu_item(filetype_menu, _("None"), filetypes[GEANY_FILETYPES_ALL]);
665
// now add the items for the new file menu
666
filetypes_create_newmenu_item(template_menu, filetypes[GEANY_FILETYPES_C]->title,
667
filetypes[GEANY_FILETYPES_C]);
668
filetypes_create_newmenu_item(template_menu, filetypes[GEANY_FILETYPES_CPP]->title,
669
filetypes[GEANY_FILETYPES_CPP]);
670
filetypes_create_newmenu_item(template_menu, filetypes[GEANY_FILETYPES_D]->title,
671
filetypes[GEANY_FILETYPES_D]);
672
filetypes_create_newmenu_item(template_menu, filetypes[GEANY_FILETYPES_JAVA]->title,
673
filetypes[GEANY_FILETYPES_JAVA]);
674
filetypes_create_newmenu_item(template_menu, filetypes[GEANY_FILETYPES_PASCAL]->title,
675
filetypes[GEANY_FILETYPES_PASCAL]);
676
filetypes_create_newmenu_item(template_menu, filetypes[GEANY_FILETYPES_RUBY]->title,
677
filetypes[GEANY_FILETYPES_RUBY]);
678
filetypes_create_newmenu_item(template_menu, filetypes[GEANY_FILETYPES_PHP]->title,
679
filetypes[GEANY_FILETYPES_PHP]);
680
filetypes_create_newmenu_item(template_menu, filetypes[GEANY_FILETYPES_HTML]->title,
681
filetypes[GEANY_FILETYPES_HTML]);
686
/* convenient function to save code size */
687
static void filetypes_init_build_programs(filetype *ftype)
689
ftype->programs = g_new0(struct build_programs, 1);
691
ftype->menu_items = g_new0(struct build_menu_items, 1);
695
/* simple filetype selection based on the filename extension */
696
filetype *filetypes_get_from_filename(const gchar *filename)
490
#define create_sub_menu(menu, item, title) \
491
(menu) = gtk_menu_new(); \
492
(item) = gtk_menu_item_new_with_mnemonic((title)); \
493
gtk_menu_item_set_submenu(GTK_MENU_ITEM((item)), (menu)); \
494
gtk_container_add(GTK_CONTAINER(filetype_menu), (item)); \
495
gtk_widget_show((item));
498
/* Calls filetypes_init_types() and creates the filetype menu. */
499
void filetypes_init()
502
GtkWidget *filetype_menu = lookup_widget(app->window, "set_filetype1_menu");
503
GtkWidget *sub_menu = filetype_menu;
504
GtkWidget *sub_menu_programming, *sub_menu_scripts, *sub_menu_markup, *sub_menu_misc;
505
GtkWidget *sub_item_programming, *sub_item_scripts, *sub_item_markup, *sub_item_misc;
507
filetypes_init_types();
509
create_sub_menu(sub_menu_programming, sub_item_programming, _("_Programming Languages"));
510
create_sub_menu(sub_menu_scripts, sub_item_scripts, _("_Scripting Languages"));
511
create_sub_menu(sub_menu_markup, sub_item_markup, _("_Markup Languages"));
512
create_sub_menu(sub_menu_misc, sub_item_misc, _("M_iscellaneous Languages"));
514
/* Append all filetypes to the filetype menu */
515
for (ft_id = 0; ft_id < GEANY_MAX_FILE_TYPES; ft_id++)
517
filetype *ft = filetypes[ft_id];
518
const gchar *title = ft->title;
520
/* insert separators for different filetype groups */
523
case GEANY_FILETYPES_GROUP_COMPILED: /* programming */
525
sub_menu = sub_menu_programming;
528
case GEANY_FILETYPES_GROUP_SCRIPT: /* scripts */
530
sub_menu = sub_menu_scripts;
533
case GEANY_FILETYPES_GROUP_MARKUP: /* markup */
534
{ /* (include also CSS, not really markup but fit quite well to HTML) */
535
sub_menu = sub_menu_markup;
538
case GEANY_FILETYPES_GROUP_MISC: /* misc */
540
sub_menu = sub_menu_misc;
543
case GEANY_FILETYPES_ALL: /* none */
545
sub_menu = filetype_menu;
552
filetypes_create_menu_item(sub_menu, title, ft);
557
/* If uid is valid, return corresponding filetype, otherwise NULL. */
558
filetype *filetypes_get_from_uid(gint uid)
562
for (i = 0; i < GEANY_MAX_FILE_TYPES; i++)
564
filetype *ft = filetypes[i];
566
if (ft->uid == (guint) uid)
573
/* Detect filetype only based on the filename extension.
574
* utf8_filename can include the full path. */
575
filetype *filetypes_detect_from_extension(const gchar *utf8_filename)
698
577
GPatternSpec *pattern;
699
gchar *base_filename, *utf8_filename;
578
gchar *base_filename;
702
if (filename == NULL)
704
return filetypes[GEANY_FILETYPES_ALL];
707
// try to get the UTF-8 equivalent for the filename
708
utf8_filename = g_locale_to_utf8(filename, -1, NULL, NULL, NULL);
709
if (utf8_filename == NULL)
711
return filetypes[GEANY_FILETYPES_ALL];
714
// to match against the basename of the file(because of Makefile*)
581
/* to match against the basename of the file(because of Makefile*) */
715
582
base_filename = g_path_get_basename(utf8_filename);
716
g_free(utf8_filename);
584
/* use lower case basename */
585
setptr(base_filename, g_utf8_strdown(base_filename, -1));
718
588
for(i = 0; i < GEANY_MAX_FILE_TYPES; i++)