[GRASS-SVN] r63177 - in grass/branches/releasebranch_7_0: . general/g.parser

svn_grass at osgeo.org svn_grass at osgeo.org
Thu Nov 27 01:01:03 PST 2014


Author: martinl
Date: 2014-11-27 01:01:03 -0800 (Thu, 27 Nov 2014)
New Revision: 63177

Added:
   grass/branches/releasebranch_7_0/general/g.parser/rules.c
Modified:
   grass/branches/releasebranch_7_0/
   grass/branches/releasebranch_7_0/general/g.parser/global.h
   grass/branches/releasebranch_7_0/general/g.parser/main.c
   grass/branches/releasebranch_7_0/general/g.parser/parse.c
   grass/branches/releasebranch_7_0/general/g.parser/proto.h
Log:
Extend g.parser to support dependency rules
       (merge r61994 from trunk)



Property changes on: grass/branches/releasebranch_7_0
___________________________________________________________________
Modified: svn:mergeinfo
   - /grass/trunk:60817,61096,61141,62105,62179-62180,62182,62403,62422,62424,62437,62466,62469,62487,62491,62494,62501,62506,62508-62509,62515,62518-62519,62521,62526,62533,62539,62541,62555,62562,62566,62570,62573,62575,62585,62588,62597,62603,62606,62608-62609,62614,62618,62628,62632,62638,62642,62648-62649,62652,62654-62657,62666,62691,62705,62709,62723,62730,62739,62741,62743,62746,62750,62752,62757,62762,62785,62798,62800-62801,62803,62805,62812,62822,62824,62831,62838,62847,62856,62879,62881,62907-62908,62910,62912,62914,62916,62918,62920,62925,62933,62935,62940,62942,62944-62946,62949,62958,62960,62962,62964,62966-62968,62970,62973,62975,62977,62981,62983,62985,62987,62989,62991,62993,62995,62997,62999-63000,63003,63005,63007,63009,63011,63013,63015,63017,63020,63022,63024,63026,63028-63031,63033,63035,63037,63040,63043-63044,63047,63049,63051,63053,63055,63057,63060,63062-63064,63066,63068,63070-63071,63074,63076,63079,63081,63083,63085,63087,63089,63091,63093,63095,
 63098,63100,63102,63105,63107,63109,63111,63113-63114,63116,63119,63121,63123,63125,63130,63132-63133,63135,63137,63140,63143,63145,63147,63149,63151,63153-63154,63157,63165,63170,63175
   + /grass/trunk:60817,61096,61141,61994,62105,62179-62180,62182,62403,62422,62424,62437,62466,62469,62487,62491,62494,62501,62506,62508-62509,62515,62518-62519,62521,62526,62533,62539,62541,62555,62562,62566,62570,62573,62575,62585,62588,62597,62603,62606,62608-62609,62614,62618,62628,62632,62638,62642,62648-62649,62652,62654-62657,62666,62691,62705,62709,62723,62730,62739,62741,62743,62746,62750,62752,62757,62762,62785,62798,62800-62801,62803,62805,62812,62822,62824,62831,62838,62847,62856,62879,62881,62907-62908,62910,62912,62914,62916,62918,62920,62925,62933,62935,62940,62942,62944-62946,62949,62958,62960,62962,62964,62966-62968,62970,62973,62975,62977,62981,62983,62985,62987,62989,62991,62993,62995,62997,62999-63000,63003,63005,63007,63009,63011,63013,63015,63017,63020,63022,63024,63026,63028-63031,63033,63035,63037,63040,63043-63044,63047,63049,63051,63053,63055,63057,63060,63062-63064,63066,63068,63070-63071,63074,63076,63079,63081,63083,63085,63087,63089,63091,63093,
 63095,63098,63100,63102,63105,63107,63109,63111,63113-63114,63116,63119,63121,63123,63125,63130,63132-63133,63135,63137,63140,63143,63145,63147,63149,63151,63153-63154,63157,63165,63170,63175

Modified: grass/branches/releasebranch_7_0/general/g.parser/global.h
===================================================================
--- grass/branches/releasebranch_7_0/general/g.parser/global.h	2014-11-27 08:42:56 UTC (rev 63176)
+++ grass/branches/releasebranch_7_0/general/g.parser/global.h	2014-11-27 09:01:03 UTC (rev 63177)
@@ -6,7 +6,8 @@
     S_TOPLEVEL,
     S_MODULE,
     S_FLAG,
-    S_OPTION
+    S_OPTION,
+    S_RULES
 };
 
 struct context

Modified: grass/branches/releasebranch_7_0/general/g.parser/main.c
===================================================================
--- grass/branches/releasebranch_7_0/general/g.parser/main.c	2014-11-27 08:42:56 UTC (rev 63176)
+++ grass/branches/releasebranch_7_0/general/g.parser/main.c	2014-11-27 09:01:03 UTC (rev 63177)
@@ -126,6 +126,9 @@
 	case S_OPTION:
 	    parse_option(&ctx, cmd, arg);
 	    break;
+	case S_RULES:
+	    parse_rule(&ctx, cmd, arg);
+	    break;
 	}
     }
 

Modified: grass/branches/releasebranch_7_0/general/g.parser/parse.c
===================================================================
--- grass/branches/releasebranch_7_0/general/g.parser/parse.c	2014-11-27 08:42:56 UTC (rev 63176)
+++ grass/branches/releasebranch_7_0/general/g.parser/parse.c	2014-11-27 09:01:03 UTC (rev 63177)
@@ -62,6 +62,11 @@
 	return;
     }
 
+    if (G_strcasecmp(cmd, "rules") == 0) {
+	ctx->state = S_RULES;
+	return;
+    }
+
     fprintf(stderr, _("Unknown command \"%s\" at line %d\n"), cmd, ctx->line);
 }
 

Modified: grass/branches/releasebranch_7_0/general/g.parser/proto.h
===================================================================
--- grass/branches/releasebranch_7_0/general/g.parser/proto.h	2014-11-27 08:42:56 UTC (rev 63176)
+++ grass/branches/releasebranch_7_0/general/g.parser/proto.h	2014-11-27 09:01:03 UTC (rev 63177)
@@ -17,3 +17,6 @@
 
 /* translate.c */
 char *translate(const char *);
+
+/* rules.c */
+void parse_rule(struct context *, const char *, const char *);

Copied: grass/branches/releasebranch_7_0/general/g.parser/rules.c (from rev 61994, grass/trunk/general/g.parser/rules.c)
===================================================================
--- grass/branches/releasebranch_7_0/general/g.parser/rules.c	                        (rev 0)
+++ grass/branches/releasebranch_7_0/general/g.parser/rules.c	2014-11-27 09:01:03 UTC (rev 63177)
@@ -0,0 +1,92 @@
+#include <string.h>
+#include "proto.h"
+
+#include <grass/glocale.h>
+
+static void *find_flag(const struct context *ctx, int key)
+{
+    struct Flag *flag;
+
+    for (flag = ctx->first_flag; flag; flag = flag->next_flag)
+	if (flag->key == key)
+	    return flag;
+
+    fprintf(stderr, _("Unknown flag \"-%c\" in rule\n"), key);
+    return NULL;
+}
+
+static void *find_option(const struct context *ctx, const char *key)
+{
+    struct Option *option;
+
+    for (option = ctx->first_option; option; option = option->next_opt)
+	if (G_strcasecmp(option->key, key) == 0)
+	    return option;
+
+    fprintf(stderr, _("Unknown option \"%s\" in rule\n"), key);
+    return NULL;
+}
+
+static void add_rule(struct context *ctx, int type, const char *data)
+{
+    char **tokens;
+    int ntokens;
+    void **opts;
+    int i;
+
+    tokens = G_tokenize(data, ",");
+    ntokens = G_number_of_tokens(tokens);
+    opts = G_malloc(ntokens * sizeof(void *));
+
+    for (i = 0; i < ntokens; i++) {
+	char buf[256];
+	char *name;
+
+	strcpy(buf, tokens[i]);
+	name = G_chop(buf);
+	opts[i] = (name[0] == '-')
+	    ? find_flag(ctx, name[1])
+	    : find_option(ctx, name);
+    }
+
+    G_free_tokens(tokens);
+
+    G__option_rule(type, ntokens, opts);
+}
+
+void parse_rule(struct context *ctx, const char *cmd, const char *arg)
+{
+    if (G_strcasecmp(cmd, "exclusive") == 0) {
+	add_rule(ctx, RULE_EXCLUSIVE, arg);
+	return;
+    }
+
+    if (G_strcasecmp(cmd, "requires") == 0) {
+	add_rule(ctx, RULE_REQUIRES, arg);
+	return;
+    }
+
+    if (G_strcasecmp(cmd, "requires_all") == 0) {
+	add_rule(ctx, RULE_REQUIRES_ALL, arg);
+	return;
+    }
+
+    if (G_strcasecmp(cmd, "excludes") == 0) {
+	add_rule(ctx, RULE_EXCLUDES, arg);
+	return;
+    }
+
+    if (G_strcasecmp(cmd, "collective") == 0) {
+	add_rule(ctx, RULE_COLLECTIVE, arg);
+	return;
+    }
+
+    if (G_strcasecmp(cmd, "end") == 0) {
+	ctx->state = S_TOPLEVEL;
+	return;
+    }
+
+    fprintf(stderr, _("Unknown rule type \"%s\" at line %d\n"),
+	    cmd, ctx->line);
+}
+



More information about the grass-commit mailing list