/// <summary> /// Writes the specified syntax definition. /// </summary> public void WriteDefinition(XshdSyntaxDefinition definition) { if (definition == null) throw new ArgumentNullException("definition"); writer.WriteStartElement("SyntaxDefinition", Namespace); if (definition.Name != null) writer.WriteAttributeString("name", definition.Name); if (definition.Extensions != null) writer.WriteAttributeString("extensions", string.Join(";", definition.Extensions.ToArray())); definition.AcceptElements(this); writer.WriteEndElement(); }
static XshdSyntaxDefinition ParseDefinition(XmlReader reader) { Debug.Assert(reader.LocalName == "SyntaxDefinition"); XshdSyntaxDefinition def = new XshdSyntaxDefinition(); def.Name = reader.GetAttribute("name"); string extensions = reader.GetAttribute("extensions"); if (extensions != null) def.Extensions.AddRange(extensions.Split(';')); ParseElements(def.Elements, reader); Debug.Assert(reader.NodeType == XmlNodeType.EndElement); Debug.Assert(reader.LocalName == "SyntaxDefinition"); return def; }
/// <summary> /// Creates a highlighting definition from the XSHD file. /// </summary> public static IHighlightingDefinition Load(XshdSyntaxDefinition syntaxDefinition, IHighlightingDefinitionReferenceResolver resolver) { if (syntaxDefinition == null) throw new ArgumentNullException("syntaxDefinition"); return new XmlHighlightingDefinition(syntaxDefinition, resolver); }
XshdSyntaxDefinition ParseDefinition(XmlElement syntaxDefinition) { XshdSyntaxDefinition def = new XshdSyntaxDefinition(); def.Name = syntaxDefinition.GetAttributeOrNull("name"); if (syntaxDefinition.HasAttribute("extensions")) { def.Extensions.AddRange(syntaxDefinition.GetAttribute("extensions").Split(';', '|')); } XshdRuleSet mainRuleSetElement = null; foreach (XmlElement element in syntaxDefinition.GetElementsByTagName("RuleSet")) { XshdRuleSet ruleSet = ImportRuleSet(element); def.Elements.Add(ruleSet); if (ruleSet.Name == null) mainRuleSetElement = ruleSet; if (syntaxDefinition["Digits"] != null) { // create digit highlighting rule const string optionalExponent = @"([eE][+-]?[0-9]+)?"; const string floatingPoint = @"\.[0-9]+"; ruleSet.Elements.Add( new XshdRule { ColorReference = GetColorReference(syntaxDefinition["Digits"]), RegexType = XshdRegexType.IgnorePatternWhitespace, Regex = @"\b0[xX][0-9a-fA-F]+" + @"|" + @"(\b\d+(" + floatingPoint + ")?" + @"|" + floatingPoint + ")" + optionalExponent }); } } if (syntaxDefinition.HasAttribute("extends") && mainRuleSetElement != null) { // convert 'extends="HTML"' to '<Import ruleSet="HTML/" />' in main rule set. mainRuleSetElement.Elements.Add( new XshdImport { RuleSetReference = new XshdReference<XshdRuleSet>( syntaxDefinition.GetAttribute("extends"), string.Empty ) }); } return def; }