Beispiel #1
0
        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
            };
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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;
        }
Beispiel #5
0
		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;
		}