static XshdRule ImportMarkPrevNext(XmlElement el, bool markFollowing) { bool markMarker = el.GetBoolAttribute("markmarker") ?? false; string what = Regex.Escape(el.InnerText); const string identifier = @"[\d\w_]+"; const string whitespace = @"\s*"; string regex; if (markFollowing) { if (markMarker) { regex = what + whitespace + identifier; } else { regex = "(?<=(" + what + whitespace + "))" + identifier; } } else { if (markMarker) { regex = identifier + whitespace + what; } else { regex = identifier + "(?=(" + whitespace + what + "))"; } } return new XshdRule { ColorReference = GetColorReference(el), Regex = regex, RegexType = XshdRegexType.IgnorePatternWhitespace }; }
public void ReadXml(XmlElement element) { var bounds = element.ReadChildRectangleXml("bounds"); if (bounds != null) this.Bounds = bounds.Value; else { var clientSize = element.ReadChildSizeXml("clientSize"); if (clientSize != null) this.ClientSize = clientSize.Value; } bool maximized = element.GetBoolAttribute("maximized") ?? false; if (maximized) { this.Maximize(); } element.ReadChildXml("top", top); }
XshdSpan ImportSpan(XmlElement element) { XshdSpan span = new XshdSpan(); if (element.HasAttribute("rule")) { span.RuleSetReference = new XshdReference<XshdRuleSet>(null, element.GetAttribute("rule")); } char escapeCharacter = ruleSetEscapeCharacter; if (element.HasAttribute("escapecharacter")) { escapeCharacter = element.GetAttribute("escapecharacter")[0]; } span.Multiline = !(element.GetBoolAttribute("stopateol") ?? false); span.SpanColorReference = GetColorReference(element); span.BeginRegexType = XshdRegexType.IgnorePatternWhitespace; span.BeginRegex = ImportRegex(element["Begin"].InnerText, element["Begin"].GetBoolAttribute("singleword") ?? false, element["Begin"].GetBoolAttribute("startofline")); span.BeginColorReference = GetColorReference(element["Begin"]); string endElementText = string.Empty; if (element["End"] != null) { span.EndRegexType = XshdRegexType.IgnorePatternWhitespace; endElementText = element["End"].InnerText; span.EndRegex = ImportRegex(endElementText, element["End"].GetBoolAttribute("singleword") ?? false, null); span.EndColorReference = GetColorReference(element["End"]); } if (escapeCharacter != '\0') { XshdRuleSet ruleSet = new XshdRuleSet(); if (endElementText.Length == 1 && endElementText[0] == escapeCharacter) { // ""-style escape ruleSet.Elements.Add(new XshdSpan { BeginRegex = Regex.Escape(endElementText + endElementText), EndRegex = "" }); } else { // \"-style escape ruleSet.Elements.Add(new XshdSpan { BeginRegex = Regex.Escape(escapeCharacter.ToString()), EndRegex = "." }); } if (span.RuleSetReference.ReferencedElement != null) { ruleSet.Elements.Add(new XshdImport { RuleSetReference = span.RuleSetReference }); } span.RuleSetReference = new XshdReference<XshdRuleSet>(ruleSet); } return span; }
XshdRuleSet ImportRuleSet(XmlElement element) { XshdRuleSet ruleSet = new XshdRuleSet(); ruleSet.Name = element.GetAttributeOrNull("name"); if (element.HasAttribute("escapecharacter")) { ruleSetEscapeCharacter = element.GetAttribute("escapecharacter")[0]; } else { ruleSetEscapeCharacter = '\0'; } if (element.HasAttribute("reference")) { ruleSet.Elements.Add( new XshdImport { RuleSetReference = new XshdReference<XshdRuleSet>( element.GetAttribute("reference"), string.Empty ) }); } ruleSet.IgnoreCase = element.GetBoolAttribute("ignorecase"); foreach (XmlElement el in element.GetElementsByTagName("KeyWords")) { XshdKeywords keywords = new XshdKeywords(); keywords.ColorReference = GetColorReference(el); // we have to handle old syntax highlighting definitions that contain // empty keywords or empty keyword groups foreach (XmlElement node in el.GetElementsByTagName("Key")) { string word = node.GetAttribute("word"); if (!string.IsNullOrEmpty(word)) keywords.Words.Add(word); } if (keywords.Words.Count > 0) { ruleSet.Elements.Add(keywords); } } foreach (XmlElement el in element.GetElementsByTagName("Span")) { ruleSet.Elements.Add(ImportSpan(el)); } foreach (XmlElement el in element.GetElementsByTagName("MarkPrevious")) { ruleSet.Elements.Add(ImportMarkPrevNext(el, false)); } foreach (XmlElement el in element.GetElementsByTagName("MarkFollowing")) { ruleSet.Elements.Add(ImportMarkPrevNext(el, true)); } return ruleSet; }
public virtual void ReadXml (XmlElement element) { this.Id = element.GetStringAttribute ("id") ?? Guid.NewGuid ().ToString (); this.Name = element.GetAttribute ("name"); this.ConnectOnStartup = element.GetBoolAttribute ("connectOnStartup") ?? true; }