override protected Raw NewRaw(string type) { string file = scanner.GetSyntaxFileByName(type); if (string.IsNullOrEmpty(file)) { if (mainForm.Dialogs != null) { mainForm.Dialogs.ShowInfo("Syntax highlighting", "Missing syntax: " + type); } return(null); } XmlDocument xml = xmlLoader.Load(file, false); Raw raw = Raw.Parse(xml); Raw.PrefixContexts(raw, type); Raw.InlineIncludeRules(raw, this); return(raw); }
public void Parse_IncludeRulesInOtherFiles() { XmlDocument xml = new XmlDocument(); xml.LoadXml(@"<?xml version='1.0' encoding='UTF-8'?> <language name='test' extensions='*.test'> <highlighting> <list name='keywords0'> <item>word0</item> <item>word1</item> </list> <contexts> <context attribute='a0' lineEndContext='#stay' name='Normal'> <keyword attribute='a1' context='#stay' String='keywords0'/> <IncludeRules context='IncludeContext'/> <IncludeRules context='##Outer'/> </context> <context attribute='a2' lineEndContext='#stay' name='IncludeContext'> <StringDetect attribute='a3' context='#stay' String='include'/> </context> </contexts> <itemDatas> <itemData name='a0' defStyleNum='dsNormal'/> <itemData name='a1' defStyleNum='dsKeyword'/> <itemData name='a2' defStyleNum='dsDataType'/> <itemData name='a3' defStyleNum='dsChar'/> </itemDatas> </highlighting> </language>" ); XmlDocument outerXml = new XmlDocument(); outerXml.LoadXml(@"<?xml version='1.0' encoding='UTF-8'?> <language name='test' extensions='*.test'> <highlighting> <list name='keywords2'> <item>word0</item> </list> <contexts> <context attribute='a0' lineEndContext='#stay' name='OuterNormal'> <IncludeRules context='OuterIncludeContext'/> </context> <context attribute='a4' lineEndContext='#stay' name='OuterIncludeContext'> <StringDetect attribute='a0' context='#stay' String='include'/> </context> </contexts> <itemDatas> <itemData name='a0' defStyleNum='dsNormal'/> <itemData name='a4' defStyleNum='dsKeyword'/> </itemDatas> </highlighting> </language>" ); TestHighlighterSet highlighterSet = new TestHighlighterSet(); Raw outerRaw = Raw.Parse(outerXml); Raw.InlineIncludeRules(outerRaw, highlighterSet); highlighterSet.SetData("Outer", outerRaw); Raw raw = Raw.Parse(xml); Raw.InlineIncludeRules(raw, highlighterSet); Assert.AreEqual("<language>" + "<highlighting>" + "<list name='keywords0'>" + "<item>word0</item>" + "<item>word1</item>" + "</list>" + "<list name='keywords2'>" + "<item>word0</item>" + "</list>" + "<contexts>" + "<context name='Normal' attribute='a0' lineEndContext='#stay'>" + "<keyword attribute='a1' context='#stay' String='keywords0'/>" + "<StringDetect attribute='a3' context='#stay' String='include'/>" + "<StringDetect attribute='a0' context='#stay' String='include'/>" + "</context>" + "<context name='IncludeContext' attribute='a2' lineEndContext='#stay'>" + "<StringDetect attribute='a3' context='#stay' String='include'/>" + "</context>" + "<context name='OuterNormal' attribute='a0' lineEndContext='#stay'>" + "<StringDetect attribute='a0' context='#stay' String='include'/>" + "</context>" + "<context name='OuterIncludeContext' attribute='a4' lineEndContext='#stay'>" + "<StringDetect attribute='a0' context='#stay' String='include'/>" + "</context>" + "</contexts>" + "<itemDatas>" + "<itemData name='a0' defStyleNum='dsNormal'/>" + "<itemData name='a1' defStyleNum='dsKeyword'/>" + "<itemData name='a2' defStyleNum='dsDataType'/>" + "<itemData name='a3' defStyleNum='dsChar'/>" + "<itemData name='a4' defStyleNum='dsKeyword'/>" + "</itemDatas>" + "</highlighting>" + "<general>" + "<keywords/>" + "</general>" + "</language>", raw.ToString()); }