Global flag -Y, --syntax to specify the type on the command line, if there's no good filename regex to use.  Global variable syntaxstr.  Made some errors in the rc file less fatal


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1199 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
diff --git a/ChangeLog b/ChangeLog
index 18c307c..6e461c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -21,7 +21,9 @@
 	- Added "syntax" command to .nanorc file, to allow multiple 
 	  syntaxes.  New function color.c:update_color(), calls in various
 	  files.c places, syntaxtype struct, global variables syntaxes,
-	  syntaxfile_regexp and synfilematches.
+	  syntaxfile_regexp and synfilematches.  Global flag 'Y', "--syntax"
+	  to specify the type on the command line, if there's no good 
+	  filename regex to use.  Global variable syntaxstr.
 - configure.ac:
 	- Define NDEBUG to silence asserts (David Benbennick).
 - files.c:
diff --git a/color.c b/color.c
index 7135a39..4835827 100644
--- a/color.c
+++ b/color.c
@@ -193,6 +193,15 @@
 		colorstrings = tmpsyntax->color; 
 	}
     }
+
+    /* if we haven't found a match, use the override string */
+    if (colorstrings == NULL && syntaxstr != NULL) {
+	for (tmpsyntax = syntaxes; tmpsyntax != NULL; 
+	     tmpsyntax = tmpsyntax->next) {
+	    if (!strcasecmp(tmpsyntax->desc, syntaxstr))
+		colorstrings = tmpsyntax->color;
+	}
+    }
     do_colorinit();
     edit_refresh();
 }
diff --git a/global.c b/global.c
index 501af2e..b64f67a 100644
--- a/global.c
+++ b/global.c
@@ -111,6 +111,7 @@
     colorstruct colors[NUM_NCOLORS];
     colortype *colorstrings = NULL;
     syntaxtype *syntaxes = NULL;
+    char *syntaxstr = NULL;
 #endif
 
 #if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined (DISABLE_HELP)
diff --git a/nano.1 b/nano.1
index 2ca15bf..b9f361d 100644
--- a/nano.1
+++ b/nano.1
@@ -65,6 +65,9 @@
 .B \-V (\-\-version)
 Show the current version number and author.
 .TP
+.B \-Y (\-\-syntax=[str])
+Specify a specific syntax hilighting from the .nanorc to use (if available).
+.TP
 .B \-c (\-\-const)
 Constantly show the cursor position.
 .TP
diff --git a/nano.c b/nano.c
index 400e867..de74b84 100644
--- a/nano.c
+++ b/nano.c
@@ -510,11 +510,15 @@
 #ifndef DISABLE_JUSTIFY
     print1opt(_("-Q [str]"), _("--quotestr [str]"), _("Quoting string, default \"> \""));
 #endif
+
 #ifndef NANO_SMALL
     print1opt("-S", "--smooth", _("Smooth scrolling"));
 #endif
     print1opt(_("-T [num]"), _("--tabsize=[num]"), _("Set width of a tab to num"));
     print1opt("-V", "--version", _("Print version information and exit"));
+#ifdef ENABLE_COLOR
+    print1opt(_("-Y [str]"), _("--syntax [str]"), _("Syntax definition to use"));
+#endif
     print1opt("-c", "--const", _("Constantly show cursor position"));
     print1opt("-h", "--help", _("Show this message"));
 #ifndef NANO_SMALL
@@ -2837,6 +2841,9 @@
 #ifndef NANO_SMALL
 	{"smooth", 0, 0, 'S'},
 #endif
+#ifdef ENABLE_COLOR
+	{"syntax", 1, 0, 'Y'},
+#endif
 	{"keypad", 0, 0, 'K'},
 	{0, 0, 0, 0}
     };
@@ -2858,11 +2865,11 @@
 #endif /* ENABLE_NANORC */
 
 #ifdef HAVE_GETOPT_LONG
-    while ((optchr = getopt_long(argc, argv, "h?DFKMNQ:RST:Vabcefgijklmo:pr:s:tvwxz",
+    while ((optchr = getopt_long(argc, argv, "h?DFKMNQ:RST:VY:abcefgijklmo:pr:s:tvwxz",
 				 long_options, &option_index)) != EOF) {
 #else
     while ((optchr =
-	    getopt(argc, argv, "h?DFKMNQ:RST:Vabcefgijklmo:pr:s:tvwxz")) != EOF) {
+	    getopt(argc, argv, "h?DFKMNQ:RST:VY:abcefgijklmo:pr:s:tvwxz")) != EOF) {
 #endif
 
 	switch (optchr) {
@@ -2916,6 +2923,11 @@
 	case 'V':
 	    version();
 	    exit(0);
+#ifdef ENABLE_COLOR
+	case 'Y':
+	    syntaxstr = mallocstrcpy(syntaxstr, optarg);
+	    break;
+#endif
 	case 'a':
 	case 'b':
 	case 'e':
diff --git a/proto.h b/proto.h
index ffdbec3..56a8f34 100644
--- a/proto.h
+++ b/proto.h
@@ -67,6 +67,7 @@
 #ifdef ENABLE_COLOR
 extern colortype *colorstrings;
 extern syntaxtype *syntaxes;
+extern char *syntaxstr;
 #endif
 
 extern shortcut *shortcut_list;
diff --git a/rcfile.c b/rcfile.c
index c96a8f0..243cad2 100644
--- a/rcfile.c
+++ b/rcfile.c
@@ -197,7 +197,7 @@
 
     if (*ptr != '"') {
 	rcfile_error(_("regex strings must begin and end with a \" character\n"));
-	exit(1);
+	return;
     }
     ptr++;
 
@@ -206,7 +206,7 @@
 
     if (ptr == NULL) {
 	rcfile_error(_("Missing syntax name"));
-	exit(1);
+	return;
     }
 
 	if (syntaxes == NULL) {
@@ -284,7 +284,7 @@
 
     if (ptr == NULL) {
 	rcfile_error(_("Missing color name"));
-	exit(1);
+	return;
     }
 
     if (strstr(fgstr, ",")) {
@@ -298,7 +298,7 @@
 
     if (syntaxes == NULL) {
 	rcfile_error(_("Cannot add a color directive without a syntax line"));
-	exit(1);
+	return;
     }
 
     for (tmpsyntax = syntaxes; tmpsyntax->next != NULL;