[geany/geany] 6edb38: Rewrite shebang interpreter matching a little

Colomban Wendling git-noreply at xxxxx
Tue Apr 24 19:57:08 UTC 2012


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Tue, 24 Apr 2012 19:57:08
Commit:      6edb38b54a6d6d3583bc41dfda17a1fe6489e9c0
             https://github.com/geany/geany/commit/6edb38b54a6d6d3583bc41dfda17a1fe6489e9c0

Log Message:
-----------
Rewrite shebang interpreter matching a little

Use a generic match code and an array of the mappings for easier code
maintenance.


Modified Paths:
--------------
    src/filetypes.c

Modified: src/filetypes.c
56 files changed, 26 insertions(+), 30 deletions(-)
===================================================================
@@ -890,44 +890,40 @@ static GeanyFiletype *find_shebang(const gchar *utf8_filename, const gchar *line
 
 	if (strlen(line) > 2 && line[0] == '#' && line[1] == '!')
 	{
+		static const struct {
+			const gchar *name;
+			filetype_id filetype;
+		} intepreter_map[] = {
+			{ "sh",		GEANY_FILETYPES_SH },
+			{ "bash",	GEANY_FILETYPES_SH },
+			{ "dash",	GEANY_FILETYPES_SH },
+			{ "perl",	GEANY_FILETYPES_PERL },
+			{ "python",	GEANY_FILETYPES_PYTHON },
+			{ "php",	GEANY_FILETYPES_PHP },
+			{ "ruby",	GEANY_FILETYPES_RUBY },
+			{ "tcl",	GEANY_FILETYPES_TCL },
+			{ "make",	GEANY_FILETYPES_MAKE },
+			{ "zsh",	GEANY_FILETYPES_SH },
+			{ "ksh",	GEANY_FILETYPES_SH },
+			{ "csh",	GEANY_FILETYPES_SH },
+			{ "ash",	GEANY_FILETYPES_SH },
+			{ "dmd",	GEANY_FILETYPES_D },
+			{ "wish",	GEANY_FILETYPES_TCL }
+		};
 		gchar *tmp = g_path_get_basename(line + 2);
 		gchar *basename_interpreter = tmp;
+		guint i;
 
 		if (strncmp(tmp, "env ", 4) == 0 && strlen(tmp) > 4)
 		{	/* skip "env" and read the following interpreter */
 			basename_interpreter += 4;
 		}
 
-		if (strncmp(basename_interpreter, "sh", 2) == 0)
-			ft = filetypes[GEANY_FILETYPES_SH];
-		else if (strncmp(basename_interpreter, "bash", 4) == 0)
-			ft = filetypes[GEANY_FILETYPES_SH];
-		else if (strncmp(basename_interpreter, "dash", 4) == 0)
-			ft = filetypes[GEANY_FILETYPES_SH];
-		else if (strncmp(basename_interpreter, "perl", 4) == 0)
-			ft = filetypes[GEANY_FILETYPES_PERL];
-		else if (strncmp(basename_interpreter, "python", 6) == 0)
-			ft = filetypes[GEANY_FILETYPES_PYTHON];
-		else if (strncmp(basename_interpreter, "php", 3) == 0)
-			ft = filetypes[GEANY_FILETYPES_PHP];
-		else if (strncmp(basename_interpreter, "ruby", 4) == 0)
-			ft = filetypes[GEANY_FILETYPES_RUBY];
-		else if (strncmp(basename_interpreter, "tcl", 3) == 0)
-			ft = filetypes[GEANY_FILETYPES_TCL];
-		else if (strncmp(basename_interpreter, "make", 4) == 0)
-			ft = filetypes[GEANY_FILETYPES_MAKE];
-		else if (strncmp(basename_interpreter, "zsh", 3) == 0)
-			ft = filetypes[GEANY_FILETYPES_SH];
-		else if (strncmp(basename_interpreter, "ksh", 3) == 0)
-			ft = filetypes[GEANY_FILETYPES_SH];
-		else if (strncmp(basename_interpreter, "csh", 3) == 0)
-			ft = filetypes[GEANY_FILETYPES_SH];
-		else if (strncmp(basename_interpreter, "ash", 3) == 0)
-			ft = filetypes[GEANY_FILETYPES_SH];
-		else if (strncmp(basename_interpreter, "dmd", 3) == 0)
-			ft = filetypes[GEANY_FILETYPES_D];
-		else if (strncmp(basename_interpreter, "wish", 4) == 0)
-			ft = filetypes[GEANY_FILETYPES_TCL];
+		for (i = 0; ! ft && i < G_N_ELEMENTS(intepreter_map); i++)
+		{
+			if (g_str_has_prefix(basename_interpreter, intepreter_map[i].name))
+				ft = filetypes[intepreter_map[i].filetype];
+		}
 
 		g_free(tmp);
 	}


@@ Diff output truncated at 100000 characters. @@


--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).



More information about the Commits mailing list