+2003-08-01 Ben Maurer <bmaurer@users.sourceforge.net>
+
+ * Compiler.cs, XslAttributeSet.cs: Handle attribute set merging
+
2003-08-01 Ben Maurer <bmaurer@users.sourceforge.net>
* XslTransformProcessor.cs: Add EvaluateNumber method.
public void AddAttributeSet (XslAttributeSet set)
{
+ XslAttributeSet existing = attrSets [set.Name] as XslAttributeSet;
+ // The latter set will have higher priority
+ if (existing != null)
+ set.Merge (existing);
+
attrSets [set.Name] = set;
}
public class XslAttributeSet : XslCompiledElement {
QName name;
// [QName]=>XslAttributeSet
- QName [] usedAttributeSets;
+ ArrayList usedAttributeSets = new ArrayList ();
// [QName]=>XslAttribute
ArrayList attributes = new ArrayList ();
{
this.name = c.ParseQNameAttribute ("name");
- usedAttributeSets = c.ParseQNameListAttribute ("use-attribute-sets");
+ foreach (QName q in c.ParseQNameListAttribute ("use-attribute-sets"))
+ usedAttributeSets.Add (q);
if (!c.Input.MoveToFirstChild ()) return;
}
+ public void Merge (XslAttributeSet s)
+ {
+ attributes.AddRange (s.attributes);
+
+ foreach (QName q in s.usedAttributeSets)
+ if (!usedAttributeSets.Contains (q))
+ usedAttributeSets.Add (q);
+ }
+
// busy flag to detect circular dependencies
+ // TODO: Move this logic into the compiler, for MT safty
bool busy = false;
public override void Evaluate (XslTransformProcessor p) {
busy = true;