private AttributeSelector(ISelectorContext context, AttributeElements element, Specificity specificity) { this.context = context; this.element = element; this.specificity = specificity; isValid = new Regex("^\\[([a-zA-Z]+[0-9]*)+([~|^$*]?=+[\"']?([a-zA-Z]+[0-9]*)+[\"']?)*\\]"); spliter = new Regex(@"\w+|[~|^$*]|="); }
/// <summary> /// Create a new command instance /// </summary> /// <param name="elementId">The command Id</param> /// <param name="elementClass">The command class</param> /// <param name="container">The parent container</param> /// <returns></returns> public Command CreateCommand(int elementId, int elementClass, CgmFile container) { var classCode = (ClassCode)elementClass; switch (classCode) { case ClassCode.DelimiterElement: return(DelimiterElements.CreateCommand(elementId, elementClass, container)); case ClassCode.MetafileDescriptorElements: return(MetaFileDescriptorElements.CreateCommand(elementId, elementClass, container)); case ClassCode.PictureDescriptorElements: return(PictureDescriptorElements.CreateCommand(elementId, elementClass, container)); case ClassCode.ControlElements: return(ControlElements.CreateCommand(elementId, elementClass, container)); case ClassCode.GraphicalPrimitiveElements: return(GraphicalPrimitiveElements.CreateCommand(elementId, elementClass, container)); case ClassCode.AttributeElements: return(AttributeElements.CreateCommand(elementId, elementClass, container)); case ClassCode.EscapeElement: return(new Escape(container)); case ClassCode.ExternalElements: return(ExternalElements.CreateCommand(elementId, elementClass, container)); case ClassCode.SegmentControlandSegmentAttributeElements: return(SegmentControlElements.CreateCommand(elementId, elementClass, container)); case ClassCode.ApplicationStructureDescriptorElements: return(ApplicationStructureDescriptorElements.CreateCommand(elementId, elementClass, container)); default: Command.Assert(10 <= elementClass && elementClass <= 15, "unsupported element class " + elementClass); return(new UnknownCommand(elementId, elementClass, container)); } }
private AttributeElements PrepareElement(string selector, Match match) { AttributeElements elm = new AttributeElements(); elm.SelectorText = selector.Substring(match.Value.Length); FillAttributeElements(SplitSelector(match.Value), elm); return elm; }
internal override bool Prepare(string selector) { Match match = isValid.Match(selector); element = null; this.specificity = new Specificity(); if (match.Success) { element = PrepareElement(selector, match); } return match.Success; }
private void FillAttributeElements(List<string> elements, AttributeElements element) { if (elements.Count > 0) { element.AttributeName = elements[0]; } if (elements.Count > 1) { element.HasValue = true; element.Filter = ChooseFilter(elements[1]); } if (elements.Count > 2) { element.Value = elements[elements.Count - 1]; } }