[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