public SimpleRule(NvdlRule rule, bool matchAttributes, NvdlCompileContext ctx) { FillLocation(rule); this.matchAttributes = matchAttributes; NvdlNamespace nss = rule as NvdlNamespace; if (nss == null) { this.isAny = true; } else { this.ns = nss.NS; if (nss.Wildcard == null) { wildcard = "*"; } else if (nss.Wildcard.Length > 1) { throw new NvdlCompileException("'wildCard' attribute can specify at most one character string.", rule); } else { wildcard = nss.Wildcard; } } SimplifyPhase1(rule, ctx); }
public SimpleMode(NvdlIncludedMode mode, NvdlCompileContext ctx) { FillLocation(mode); // name doesn't matter here. SimplifyPhase1(mode, ctx); }
public SimpleRules(NvdlCompileContext context) { FillLocation(context.Rules); SimplifyPhase1(context); // 6.4.1 - 10. SimplifyPhase2(context); // 6.4.11 - 14. ResolveModes(context); // 6.4.15. }
private void SimplifyPhase2(NvdlCompileContext ctx) { foreach (SimpleMode mode in modes) { mode.SimplifyPhase2(ctx); } }
internal void ResolveModes(NvdlCompileContext ctx, SimpleMode current) { foreach (SimpleAction a in actions) { a.ResolveModes(ctx, current); } }
internal void ResolveModes(NvdlCompileContext ctx, SimpleMode current) { if (source.UseMode != null) { mode = ctx.GetCompiledMode(source.UseMode); } else if (source.NestedMode != null) { mode = ctx.GetCompiledMode(source); } else { mode = current; } for (int i = 0; i < contexts.Length; i++) { contexts [i].ResolveModes(ctx, mode); } // FIXME: get location by some way if (mode == null) { throw new NvdlCompileException( "mode does not contain either referenced modeUsage or nested mode.", null); } }
public SimpleRules (NvdlCompileContext context) { FillLocation (context.Rules); SimplifyPhase1 (context); // 6.4.1 - 10. SimplifyPhase2 (context); // 6.4.11 - 14. ResolveModes (context); // 6.4.15. }
private void ResolveModes(NvdlCompileContext ctx) { foreach (SimpleMode mode in modes) { mode.ResolveModes(ctx); } }
public SimpleMode(string name, NvdlNestedMode mode, NvdlCompileContext ctx) { FillLocation(mode); this.name = name; SimplifyPhase1(mode, ctx); }
public SimpleValidate( NvdlValidate validate, NvdlCompileContext ctx) : base(validate) { // 6.4.7 generator = ctx.Config.GetGenerator(validate, ctx.Rules.SchemaType); }
private void ConsumeIncludes(ArrayList al, NvdlCompileContext ctx) { // The reason why we limit the check to current count // is to add invalid siblings (according to 6.4.12). int checkMax = al.Count; NvdlModeCompileContext mctx = ctx.GetModeContext(this); foreach (SimpleRule rule in rules) { // Don't skip cancelled rules here. They are // needed to filter overriden rules out // (according to 6.4.10) //if (ctx.CancelledRules [rule] != null) // continue; bool exclude = false; for (int i = 0; i < checkMax; i++) { SimpleRule r = (SimpleRule)al [i]; if (rule.IsAny == r.IsAny && rule.MatchAttributes == r.MatchAttributes && rule.NS == r.NS && rule.Wildcard == r.Wildcard) { exclude = true; break; } } if (exclude) { break; } al.Add(rule); } foreach (SimpleMode mode in mctx.Included) { mode.ConsumeIncludes(al, ctx); } // remove cancelled rules at this stage. for (int i = 0; i < al.Count;) { if (ctx.CancelledRules [(SimpleRule)al [i]] != null) { al.RemoveAt(i); } else { i++; } } }
public SimpleMode(NvdlMode mode, NvdlCompileContext ctx) { FillLocation(mode); if (mode.Name == null) { throw new NvdlCompileException( "'mode' element must have a name.", mode); } this.name = mode.Name; SimplifyPhase1(mode, ctx); }
internal void ResolveModes(NvdlCompileContext ctx, SimpleMode current) { if (modeUsage != null) { modeUsage.ResolveModes(ctx, current); mode = modeUsage.UseMode; } if (mode == null) { mode = current; } }
internal void SimplifyPhase2(NvdlCompileContext ctx) { ArrayList al = new ArrayList(); ConsumeIncludes(al, ctx); SimpleRule anyElement = null; SimpleRule anyAttribute = null; // 6.4.12 + part of 6.4.13 CheckCollision(al, ref anyElement, ref anyAttribute); // 6.4.13 if (anyElement == null) { NvdlAnyNamespace ann = new NvdlAnyNamespace(); ann.SourceUri = this.SourceUri; ann.LineNumber = this.LineNumber; ann.LinePosition = this.LinePosition; NvdlReject reject = new NvdlReject(); reject.SourceUri = this.SourceUri; reject.LineNumber = this.LineNumber; reject.LinePosition = this.LinePosition; ann.Actions.Add(reject); ann.Match = NvdlRuleTarget.Elements; al.Add(new SimpleRule(ann, false, ctx)); } if (anyAttribute == null) { NvdlAnyNamespace ann = new NvdlAnyNamespace(); ann.SourceUri = this.SourceUri; ann.LineNumber = this.LineNumber; ann.LinePosition = this.LinePosition; NvdlAttach attach = new NvdlAttach(); attach.SourceUri = this.SourceUri; attach.LineNumber = this.LineNumber; attach.LinePosition = this.LinePosition; ann.Match = NvdlRuleTarget.Attributes; ann.Actions.Add(attach); al.Add(new SimpleRule(ann, true, ctx)); } rules = (SimpleRule [])al.ToArray(typeof(SimpleRule)); }
private void SimplifyPhase1(NvdlRule r, NvdlCompileContext ctx) { ctx.AddRuleContext(this, r); // 6.4.9 ArrayList al = new ArrayList(); foreach (NvdlAction a in r.Actions) { NvdlNoCancelAction nca = a as NvdlNoCancelAction; if (nca != null) { if (nca.ModeUsage != null) { SimplifyModeUsage(nca, ctx); } NvdlResultAction ra = nca as NvdlResultAction; if (ra != null) { al.Add(new SimpleResultAction(ra, ctx)); } else if (nca is NvdlValidate) { al.Add(new SimpleValidate( (NvdlValidate)nca, ctx)); } else if (nca is NvdlAllow) { al.Add(new SimpleValidate( (NvdlAllow)nca, ctx)); } else { al.Add(new SimpleValidate( (NvdlReject)nca, ctx)); } } else if (nca == null) { ctx.CancelledRules.Add(this, this); } } actions = (SimpleAction [])al.ToArray( typeof(SimpleAction)); }
internal void ResolveModes(NvdlCompileContext ctx, SimpleMode current) { if (useModeName != null) { useMode = ctx.GetCompiledMode(useModeName); } else if (source.NestedMode != null) { useMode = ctx.GetCompiledMode(source); } else { useMode = current; } if (useMode == null) { throw new NvdlCompileException(String.Format("Specified mode '{0}' was not found.", useModeName), this); } }
private void SimplifyModeUsage( NvdlNoCancelAction nca, NvdlCompileContext ctx) { NvdlModeUsage usage = nca.ModeUsage; if (usage.NestedMode != null && ctx.GetCompiledMode(usage) == null) { SimpleMode sm = new SimpleMode(String.Empty, usage.NestedMode, ctx); ctx.AddCompiledMode(usage, sm); } foreach (NvdlContext c in usage.Contexts) { if (c.NestedMode != null) { SimpleMode sm = new SimpleMode( String.Empty, c.NestedMode, ctx); ctx.AddCompiledMode(c, sm); } } }
internal void ResolveModes(NvdlCompileContext ctx) { // Resolve moces and fill element/attributeRules. var e = new List <SimpleRule> (); var a = new List <SimpleRule> (); foreach (SimpleRule rule in rules) { rule.ResolveModes(ctx, this); if (rule.MatchAttributes) { a.Add(rule); } else { e.Add(rule); } } elementRules = e.ToArray(); attributeRules = a.ToArray(); }
internal void ResolveModes(NvdlCompileContext ctx) { // Resolve moces and fill element/attributeRules. ArrayList e = new ArrayList(); ArrayList a = new ArrayList(); foreach (SimpleRule rule in rules) { rule.ResolveModes(ctx, this); if (rule.MatchAttributes) { a.Add(rule); } else { e.Add(rule); } } elementRules = (SimpleRule [])e.ToArray(typeof(SimpleRule)); attributeRules = (SimpleRule [])a.ToArray(typeof(SimpleRule)); }
private void SimplifyPhase1(NvdlModeBase mode, NvdlCompileContext ctx) { NvdlModeCompileContext mctx = new NvdlModeCompileContext(mode); ctx.AddModeContext(this, mctx); ArrayList al = new ArrayList(); foreach (NvdlRule r in mode.Rules) { switch (r.Match) { case NvdlRuleTarget.Both: al.Add(new SimpleRule(r, true, ctx)); al.Add(new SimpleRule(r, false, ctx)); break; case NvdlRuleTarget.None: case NvdlRuleTarget.Elements: al.Add(new SimpleRule(r, false, ctx)); break; case NvdlRuleTarget.Attributes: al.Add(new SimpleRule(r, true, ctx)); break; } } foreach (NvdlIncludedMode inc in mode.IncludedModes) { mctx.Included.Add(new SimpleMode(inc, ctx)); } // The rule table is just a dummy store that might // erase because of removal of inclusion. rules = (SimpleRule [])al.ToArray(typeof(SimpleRule)); }
internal void ResolveModes (NvdlCompileContext ctx) { // Resolve moces and fill element/attributeRules. ArrayList e = new ArrayList (); ArrayList a = new ArrayList (); foreach (SimpleRule rule in rules) { rule.ResolveModes (ctx, this); if (rule.MatchAttributes) a.Add (rule); else e.Add (rule); } elementRules = (SimpleRule []) e.ToArray (typeof (SimpleRule)); attributeRules = (SimpleRule []) a.ToArray (typeof (SimpleRule)); }
private void ConsumeIncludes (ArrayList al, NvdlCompileContext ctx) { // The reason why we limit the check to current count // is to add invalid siblings (according to 6.4.12). int checkMax = al.Count; NvdlModeCompileContext mctx = ctx.GetModeContext (this); foreach (SimpleRule rule in rules) { // Don't skip cancelled rules here. They are // needed to filter overriden rules out // (according to 6.4.10) //if (ctx.CancelledRules [rule] != null) // continue; bool exclude = false; for (int i = 0; i < checkMax; i++) { SimpleRule r = (SimpleRule) al [i]; if (rule.IsAny == r.IsAny && rule.MatchAttributes == r.MatchAttributes && rule.NS == r.NS && rule.Wildcard == r.Wildcard) { exclude = true; break; } } if (exclude) break; al.Add (rule); } foreach (SimpleMode mode in mctx.Included) mode.ConsumeIncludes (al, ctx); // remove cancelled rules at this stage. for (int i = 0; i < al.Count; ) { if (ctx.CancelledRules [(SimpleRule) al [i]] != null) al.RemoveAt (i); else i++; } }
internal void ResolveModes (NvdlCompileContext ctx, SimpleMode current) { if (source.UseMode != null) { mode = ctx.GetCompiledMode (source.UseMode); } else if (source.NestedMode != null) mode = ctx.GetCompiledMode (source); else mode = current; for (int i = 0; i < contexts.Length; i++) contexts [i].ResolveModes (ctx, mode); // FIXME: get location by some way if (mode == null) throw new NvdlCompileException ( "mode does not contain either referenced modeUsage or nested mode.", null); }
public SimpleRule (NvdlRule rule, bool matchAttributes, NvdlCompileContext ctx) { FillLocation (rule); this.matchAttributes = matchAttributes; NvdlNamespace nss = rule as NvdlNamespace; if (nss == null) this.isAny = true; else { this.ns = nss.NS; if (nss.Wildcard == null) wildcard = "*"; else if (nss.Wildcard.Length > 1) throw new NvdlCompileException ("'wildCard' attribute can specify at most one character string.", rule); else wildcard = nss.Wildcard; } SimplifyPhase1 (rule, ctx); }
internal void ResolveModes (NvdlCompileContext ctx, SimpleMode current) { if (useModeName != null) useMode = ctx.GetCompiledMode (useModeName); else if (source.NestedMode != null) useMode = ctx.GetCompiledMode (source); else useMode = current; if (useMode == null) throw new NvdlCompileException (String.Format ("Specified mode '{0}' was not found.", useModeName), this); }
public SimpleMode (NvdlMode mode, NvdlCompileContext ctx) { FillLocation (mode); if (mode.Name == null) throw new NvdlCompileException ( "'mode' element must have a name.", mode); this.name = mode.Name; SimplifyPhase1 (mode, ctx); }
internal void ResolveModes (NvdlCompileContext ctx, SimpleMode current) { foreach (SimpleAction a in actions) a.ResolveModes (ctx, current); }
public SimpleMode (NvdlIncludedMode mode, NvdlCompileContext ctx) { FillLocation (mode); // name doesn't matter here. SimplifyPhase1 (mode, ctx); }
// 6.4.14 public SimpleValidate (NvdlAllow allow, NvdlCompileContext ctx) : this (CreateBuiltInValidate (allow), ctx) { }
internal void ResolveModes (NvdlCompileContext ctx, SimpleMode current) { if (modeUsage != null) { modeUsage.ResolveModes (ctx, current); mode = modeUsage.UseMode; } if (mode == null) mode = current; }
// 6.4.14 public SimpleValidate (NvdlReject reject, NvdlCompileContext ctx) : this (CreateBuiltInValidate (reject), ctx) { }
public SimpleValidate ( NvdlValidate validate, NvdlCompileContext ctx) : base (validate) { // 6.4.7 generator = ctx.Config.GetGenerator (validate, ctx.Rules.SchemaType); }
private void ResolveModes (NvdlCompileContext ctx) { foreach (SimpleMode mode in modes) mode.ResolveModes (ctx); }
internal void SimplifyPhase2 (NvdlCompileContext ctx) { ArrayList al = new ArrayList (); ConsumeIncludes (al, ctx); SimpleRule anyElement = null; SimpleRule anyAttribute = null; // 6.4.12 + part of 6.4.13 CheckCollision (al, ref anyElement, ref anyAttribute); // 6.4.13 if (anyElement == null) { NvdlAnyNamespace ann = new NvdlAnyNamespace (); ann.SourceUri = this.SourceUri; ann.LineNumber = this.LineNumber; ann.LinePosition = this.LinePosition; NvdlReject reject = new NvdlReject (); reject.SourceUri = this.SourceUri; reject.LineNumber = this.LineNumber; reject.LinePosition = this.LinePosition; ann.Actions.Add (reject); ann.Match = NvdlRuleTarget.Elements; al.Add (new SimpleRule (ann, false, ctx)); } if (anyAttribute == null) { NvdlAnyNamespace ann = new NvdlAnyNamespace (); ann.SourceUri = this.SourceUri; ann.LineNumber = this.LineNumber; ann.LinePosition = this.LinePosition; NvdlAttach attach = new NvdlAttach (); attach.SourceUri = this.SourceUri; attach.LineNumber = this.LineNumber; attach.LinePosition = this.LinePosition; ann.Match = NvdlRuleTarget.Attributes; ann.Actions.Add (attach); al.Add (new SimpleRule (ann, true, ctx)); } rules = (SimpleRule []) al.ToArray (typeof (SimpleRule)); }
// 6.4.14 public SimpleValidate(NvdlReject reject, NvdlCompileContext ctx) : this(CreateBuiltInValidate(reject), ctx) { }
private void SimplifyPhase1 (NvdlModeBase mode, NvdlCompileContext ctx) { NvdlModeCompileContext mctx = new NvdlModeCompileContext (mode); ctx.AddModeContext (this, mctx); ArrayList al = new ArrayList (); foreach (NvdlRule r in mode.Rules) { switch (r.Match) { case NvdlRuleTarget.Both: al.Add (new SimpleRule (r, true, ctx)); al.Add (new SimpleRule (r, false, ctx)); break; case NvdlRuleTarget.None: case NvdlRuleTarget.Elements: al.Add (new SimpleRule (r, false, ctx)); break; case NvdlRuleTarget.Attributes: al.Add (new SimpleRule (r, true, ctx)); break; } } foreach (NvdlIncludedMode inc in mode.IncludedModes) mctx.Included.Add (new SimpleMode (inc, ctx)); // The rule table is just a dummy store that might // erase because of removal of inclusion. rules = (SimpleRule []) al.ToArray (typeof (SimpleRule)); }
private void SimplifyPhase1(NvdlCompileContext ctx) { NvdlRules rules = ctx.Rules; // 6.4.1 : just ignore "Foreign" property. // 6.4.2 : already ignored on reading nvdl. // 6.4.3 : done in SOM // 6.4.4 : FIXME: must be done. // 6.4.5 : FIXME: considered in compiler. // 6.4.6 : FIXME: considered in compiler. // 6.4.7 : FIXME: considered in compiler. // 6.4.8 : here NvdlModeList list = rules.Modes; NvdlMode startMode = null; if (rules.Modes.Count > 0) { if (rules.Rules.Count > 0) { throw new NvdlCompileException("Modes and rules cannot coexist in 'rules' element.", rules); } else if (rules.StartMode == null) { throw new NvdlCompileException("startMode is missing in 'rules' element when modes are specified.", rules); } foreach (NvdlMode m in rules.Modes) { if (m.Name == rules.StartMode) { startMode = m; break; } } if (startMode == null) { throw new NvdlCompileException("Matching 'mode' element specified by 'startMode' does not exist.", rules); } } else { if (rules.Rules.Count == 0) { throw new NvdlCompileException("Neither modes nor rules exists in 'rules' element.", rules); } list = new NvdlModeList(); startMode = new NvdlMode(); startMode.SourceUri = rules.SourceUri; startMode.LineNumber = rules.LineNumber; startMode.LinePosition = rules.LinePosition; startMode.Name = "(startMode)"; list.Add(startMode); foreach (NvdlRule rule in rules.Rules) { startMode.Rules.Add(rule); } } // 6.4.9 : done in SimpleMode.ctor() and // SimpleRule.ctor(), using ctx.CompiledModes. foreach (NvdlMode m in list) { SimpleMode sm = new SimpleMode(m, ctx); ctx.AddCompiledMode(sm.Name, sm); if (m == startMode) { this.startMode = sm; } } // 6.4.10 : done in SimpleRule.Simplify ArrayList tl = new ArrayList(); for (int i = 0; i < rules.Triggers.Count; i++) { tl.Add(new SimpleTrigger(rules.Triggers [i])); } triggers = (SimpleTrigger [])tl.ToArray( typeof(SimpleTrigger)); modes = (SimpleMode []) new ArrayList(ctx.GetCompiledModes()) .ToArray(typeof(SimpleMode)); }
// 6.4.14 public SimpleValidate(NvdlAllow allow, NvdlCompileContext ctx) : this(CreateBuiltInValidate(allow), ctx) { }
private void SimplifyPhase1 (NvdlCompileContext ctx) { NvdlRules rules = ctx.Rules; // 6.4.1 : just ignore "Foreign" property. // 6.4.2 : already ignored on reading nvdl. // 6.4.3 : done in SOM // 6.4.4 : FIXME: must be done. // 6.4.5 : FIXME: considered in compiler. // 6.4.6 : FIXME: considered in compiler. // 6.4.7 : FIXME: considered in compiler. // 6.4.8 : here NvdlModeList list = rules.Modes; NvdlMode startMode = null; if (rules.Modes.Count > 0) { if (rules.Rules.Count > 0) throw new NvdlCompileException ("Modes and rules cannot coexist in 'rules' element.", rules); else if (rules.StartMode == null) throw new NvdlCompileException ("startMode is missing in 'rules' element when modes are specified.", rules); foreach (NvdlMode m in rules.Modes) { if (m.Name == rules.StartMode) { startMode = m; break; } } if (startMode == null) throw new NvdlCompileException ("Matching 'mode' element specified by 'startMode' does not exist.", rules); } else { if (rules.Rules.Count == 0) throw new NvdlCompileException ("Neither modes nor rules exists in 'rules' element.", rules); list = new NvdlModeList (); startMode = new NvdlMode (); startMode.SourceUri = rules.SourceUri; startMode.LineNumber = rules.LineNumber; startMode.LinePosition = rules.LinePosition; startMode.Name = "(startMode)"; list.Add (startMode); foreach (NvdlRule rule in rules.Rules) startMode.Rules.Add (rule); } // 6.4.9 : done in SimpleMode.ctor() and // SimpleRule.ctor(), using ctx.CompiledModes. foreach (NvdlMode m in list) { SimpleMode sm = new SimpleMode (m, ctx); ctx.AddCompiledMode (sm.Name, sm); if (m == startMode) this.startMode = sm; } // 6.4.10 : done in SimpleRule.Simplify ArrayList tl = new ArrayList (); for (int i = 0; i < rules.Triggers.Count; i++) tl.Add (new SimpleTrigger (rules.Triggers [i])); triggers = (SimpleTrigger []) tl.ToArray ( typeof (SimpleTrigger)); modes = (SimpleMode []) new ArrayList (ctx.GetCompiledModes ()) .ToArray (typeof (SimpleMode)); }
public SimpleMode (string name, NvdlNestedMode mode, NvdlCompileContext ctx) { FillLocation (mode); this.name = name; SimplifyPhase1 (mode, ctx); }
private void SimplifyModeUsage ( NvdlNoCancelAction nca, NvdlCompileContext ctx) { NvdlModeUsage usage = nca.ModeUsage; if (usage.NestedMode != null && ctx.GetCompiledMode (usage) == null) { SimpleMode sm = new SimpleMode (String.Empty, usage.NestedMode, ctx); ctx.AddCompiledMode (usage, sm); } foreach (NvdlContext c in usage.Contexts) { if (c.NestedMode != null) { SimpleMode sm = new SimpleMode ( String.Empty, c.NestedMode, ctx); ctx.AddCompiledMode (c, sm); } } }
public SimpleResultAction(NvdlResultAction ra, NvdlCompileContext ctx) : base(ra) { this.resultType = ra.ResultType; }
private void SimplifyPhase1 (NvdlRule r, NvdlCompileContext ctx) { ctx.AddRuleContext (this, r); // 6.4.9 ArrayList al = new ArrayList (); foreach (NvdlAction a in r.Actions) { NvdlNoCancelAction nca = a as NvdlNoCancelAction; if (nca != null) { if (nca.ModeUsage != null) SimplifyModeUsage (nca, ctx); NvdlResultAction ra = nca as NvdlResultAction; if (ra != null) al.Add (new SimpleResultAction (ra, ctx)); else if (nca is NvdlValidate) al.Add (new SimpleValidate ( (NvdlValidate) nca, ctx)); else if (nca is NvdlAllow) al.Add (new SimpleValidate ( (NvdlAllow) nca, ctx)); else al.Add (new SimpleValidate ( (NvdlReject) nca, ctx)); } else if (nca == null) ctx.CancelledRules.Add (this, this); } actions = (SimpleAction []) al.ToArray ( typeof (SimpleAction)); }
private void SimplifyPhase2 (NvdlCompileContext ctx) { foreach (SimpleMode mode in modes) mode.SimplifyPhase2 (ctx); }
public SimpleResultAction (NvdlResultAction ra, NvdlCompileContext ctx) : base (ra) { this.resultType = ra.ResultType; }