private void readLanguage(XmlReader reader) { _commands_KeyBindingList = new CommandBindingConfigList(); _lexing_Properties = new LexerPropertiesConfig(); _lexing_Keywords = new KeyWordConfigList(); _margin_List = new MarginConfigList(); _markers_List = new MarkersConfigList(); _snippetsConfigList = new SnippetsConfigList(); _styles = new StyleConfigList(); reader.Read(); while (reader.NodeType == XmlNodeType.Element) { string elName = reader.Name.ToLower(); switch (elName) { case "autocomplete": readAutoComplete(reader); break; case "calltip": readCallTip(reader); break; case "caret": readCaret(reader); break; case "clipboard": readClipboard(reader); break; case "commands": readCommands(reader); break; case "endofline": readEndOfLine(reader); break; case "folding": readFolding(reader); break; case "hotspot": readHotSpot(reader); break; case "indentation": readIndentation(reader); break; case "indicators": readIndicators(reader); break; case "lexer": readLexer(reader); break; case "linewrap": readLineWrap(reader); break; case "longlines": readLongLines(reader); break; case "margins": readMargins(reader); break; case "markers": readMarkers(reader); break; case "scrolling": readScrolling(reader); break; case "selection": readSelection(reader); break; case "snippets": readSnippets(reader); break; case "styles": readStyles(reader); break; case "undoredo": readUndoRedo(reader); break; case "whitespace": readWhitespace(reader); break; default: reader.Skip(); break; } } }
public void Load(XmlDocument configDocument) { XmlNode langNode = configDocument.DocumentElement.SelectSingleNode("./Language[@Name='" + _language + "']"); if (langNode == null) return; XmlElement callTipNode = langNode.SelectSingleNode("CallTip") as XmlElement; if (callTipNode != null) { _callTip_BackColor = getColor(callTipNode.GetAttribute("BackColor")); _callTip_ForeColor = getColor(callTipNode.GetAttribute("ForeColor")); _callTip_HighlightTextColor = getColor(callTipNode.GetAttribute("HighlightTextColor")); } callTipNode = null; XmlElement caretNode = langNode.SelectSingleNode("Caret") as XmlElement; if (caretNode != null) { // This guy is a bit of an oddball becuase null means "I don't Care" // and we need some way of using the OS value. string blinkRate = caretNode.GetAttribute("BlinkRate"); if (blinkRate.ToLower() == "system") _caret_BlinkRate = SystemInformation.CaretBlinkTime; else _caret_BlinkRate = getInt(blinkRate); _caret_Color = getColor(caretNode.GetAttribute("Color")); _caret_CurrentLineBackgroundAlpha = getInt(caretNode.GetAttribute("CurrentLineBackgroundAlpha")); _caret_CurrentLineBackgroundColor = getColor(caretNode.GetAttribute("CurrentLineBackgroundColor")); _caret_HighlightCurrentLine = getBool(caretNode.GetAttribute("HighlightCurrentLine")); _caret_IsSticky = getBool(caretNode.GetAttribute("IsSticky")); try { _caret_Style = (CaretStyle)Enum.Parse(typeof(CaretStyle), caretNode.GetAttribute("Style"), true); } catch (ArgumentException) { } _caret_Width = getInt(caretNode.GetAttribute("Width")); } caretNode = null; XmlElement clipboardNode = langNode.SelectSingleNode("Clipboard") as XmlElement; if (clipboardNode != null) { _clipboard_ConvertEndOfLineOnPaste = getBool(clipboardNode.GetAttribute("ConvertEndOfLineOnPaste")); } clipboardNode = null; _commands_KeyBindingList = new CommandBindingConfigList(); XmlElement commandsNode = langNode.SelectSingleNode("Commands") as XmlElement; if (commandsNode != null) { _commands_KeyBindingList.Inherit = getBool(commandsNode.GetAttribute("Inherit")); _commands_KeyBindingList.AllowDuplicateBindings = getBool(commandsNode.GetAttribute("AllowDuplicateBindings")); foreach (XmlElement el in commandsNode.SelectNodes("./Binding")) { KeyBinding kb = new KeyBinding(); kb.KeyCode = Utilities.GetKeys(el.GetAttribute("Key")); string modifiers = el.GetAttribute("Modifier"); if (modifiers != string.Empty) { foreach (string modifier in modifiers.Split(' ')) kb.Modifiers |= (Keys)Enum.Parse(typeof(Keys), modifier.Trim(), true); } BindableCommand cmd = (BindableCommand)Enum.Parse(typeof(BindableCommand), el.GetAttribute("Command"), true); CommandBindingConfig cfg = new CommandBindingConfig(kb, getBool(el.GetAttribute("ReplaceCurrent")), cmd); _commands_KeyBindingList.Add(cfg); } } commandsNode = null; XmlElement endOfLineNode = langNode.SelectSingleNode("EndOfLine") as XmlElement; if (endOfLineNode != null) { _endOfLine_ConvertOnPaste = getBool(endOfLineNode.GetAttribute("ConvertOnPaste")); _endOfLine_IsVisisble = getBool(endOfLineNode.GetAttribute("IsVisible")); try { _endOfLine_Mode = (EndOfLineMode)Enum.Parse(typeof(EndOfLineMode), endOfLineNode.GetAttribute("Mode"), true); } catch (ArgumentException) { } } endOfLineNode = null; XmlElement hotSpotNode = langNode.SelectSingleNode("HotSpot") as XmlElement; if (hotSpotNode != null) { _hotspot_ActiveBackColor = getColor(hotSpotNode.GetAttribute("ActiveBackColor")); _hotspot_ActiveForeColor = getColor(hotSpotNode.GetAttribute("ActiveForeColor")); _hotspot_ActiveUnderline = getBool(hotSpotNode.GetAttribute("ActiveUnderline")); _hotspot_SingleLine = getBool(hotSpotNode.GetAttribute("SingleLine")); _hotspot_UseActiveBackColor = getBool(hotSpotNode.GetAttribute("UseActiveBackColor")); _hotspot_UseActiveForeColor = getBool(hotSpotNode.GetAttribute("UseActiveForeColor")); } hotSpotNode = null; XmlElement indentationNode = langNode.SelectSingleNode("Indentation") as XmlElement; if (indentationNode != null) { _indentation_BackspaceUnindents = getBool(indentationNode.GetAttribute("BackspaceUnindents")); _indentation_IndentWidth = getInt(indentationNode.GetAttribute("IndentWidth")); _indentation_ShowGuides = getBool(indentationNode.GetAttribute("ShowGuides")); _indentation_TabIndents = getBool(indentationNode.GetAttribute("TabIndents")); _indentation_TabWidth = getInt(indentationNode.GetAttribute("TabWidth")); _indentation_UseTabs = getBool(indentationNode.GetAttribute("UseTabs")); try { _indentation_SmartIndentType = (SmartIndent)Enum.Parse(typeof(SmartIndent), indentationNode.GetAttribute("SmartIndentType"), true); } catch (ArgumentException) { } } indentationNode = null; XmlElement indicatorNode = langNode.SelectSingleNode("Indicators") as XmlElement; if (indicatorNode != null) { _indicator_List.Inherit = getBool(indicatorNode.GetAttribute("Inherit")); foreach (XmlElement el in indicatorNode.SelectNodes("Indicator")) { IndicatorConfig ic = new IndicatorConfig(); ic.Number = int.Parse(el.GetAttribute("Number")); ic.Color = getColor(el.GetAttribute("Color")); ic.Inherit = getBool(el.GetAttribute("Inherit")); ic.IsDrawnUnder = getBool(el.GetAttribute("IsDrawnUnder")); try { ic.Style = (IndicatorStyle)Enum.Parse(typeof(IndicatorStyle), el.GetAttribute("Style"), true); } catch (ArgumentException) { } _indicator_List.Add(ic); } } _lexing_Properties = new LexerPropertiesConfig(); _lexing_Keywords = new KeyWordConfigList(); XmlElement lexerNode = langNode.SelectSingleNode("Lexer") as XmlElement; if (lexerNode != null) { _lexing_WhiteSpaceChars = getString(lexerNode.GetAttributeNode("WhiteSpaceChars")); _lexing_WordChars = getString(lexerNode.GetAttributeNode("WordChars")); _lexing_Language = getString(lexerNode.GetAttributeNode("LexerName")); _lexing_LineCommentPrefix = getString(lexerNode.GetAttributeNode("LineCommentPrefix")); _lexing_StreamCommentPrefix = getString(lexerNode.GetAttributeNode("StreamCommentPrefix")); _lexing_StreamCommentSuffix = getString(lexerNode.GetAttributeNode("StreamCommentSuffix")); XmlElement propNode = lexerNode.SelectSingleNode("Properties") as XmlElement; if (propNode != null) { _lexing_Properties.Inherit = getBool(propNode.GetAttribute("Inherit")); foreach (XmlElement el in propNode.SelectNodes("Property")) _lexing_Properties.Add(el.GetAttribute("Name"), el.GetAttribute("Value")); } foreach (XmlElement el in lexerNode.SelectNodes("Keywords")) _lexing_Keywords.Add(new KeyWordConfig(getInt(el.GetAttribute("List")).Value, el.InnerText.Trim(), getBool(el.GetAttribute("Inherit")))); } lexerNode = null; XmlElement lineWrapNode = langNode.SelectSingleNode("LineWrap") as XmlElement; if (lineWrapNode != null) { try { _lineWrap_LayoutCache = (LineCache)Enum.Parse(typeof(LineCache), lineWrapNode.GetAttribute("LayoutCache"), true); } catch (ArgumentException) { } try { _lineWrap_Mode = (WrapMode)Enum.Parse(typeof(WrapMode), lineWrapNode.GetAttribute("Mode"), true); } catch (ArgumentException) { } _lineWrap_PositionCacheSize = getInt(lineWrapNode.GetAttribute("PositionCacheSize")); _lineWrap_StartIndent = getInt(lineWrapNode.GetAttribute("StartIndent")); string flags = lineWrapNode.GetAttribute("VisualFlags").Trim(); if (flags != string.Empty) { WrapVisualFlag? wvf = null; foreach (string flag in flags.Split(' ')) wvf |= (WrapVisualFlag)Enum.Parse(typeof(WrapVisualFlag), flag.Trim(), true); if (wvf.HasValue) _lineWrap_VisualFlags = wvf; } try { _lineWrap_VisualFlagsLocation = (WrapVisualLocation)Enum.Parse(typeof(WrapVisualLocation), lineWrapNode.GetAttribute("VisualFlagsLocation"), true); } catch (ArgumentException) { } } lineWrapNode = null; XmlElement longLinesNode = langNode.SelectSingleNode("LongLines") as XmlElement; if (longLinesNode != null) { _longLines_EdgeColor = getColor(longLinesNode.GetAttribute("EdgeColor")); _longLines_EdgeColumn = getInt(longLinesNode.GetAttribute("EdgeColumn")); try { _longLines_EdgeMode = (EdgeMode)Enum.Parse(typeof(EdgeMode), longLinesNode.GetAttribute("EdgeMode"), true); } catch (ArgumentException) { } } longLinesNode = null; _margin_List = new MarginConfigList(); XmlElement marginNode = langNode.SelectSingleNode("Margins") as XmlElement; if (marginNode != null) { _margin_List.FoldMarginColor = getColor(marginNode.GetAttribute("FoldMarginColor")); _margin_List.FoldMarginHighlightColor = getColor(marginNode.GetAttribute("FoldMarginHighlightColor")); _margin_List.Left = getInt(marginNode.GetAttribute("Left")); _margin_List.Right = getInt(marginNode.GetAttribute("Right")); _margin_List.Inherit = getBool(marginNode.GetAttribute("Inherit")); foreach (XmlElement el in marginNode.SelectNodes("./Margin")) { MarginConfig mc = new MarginConfig(); mc.Number = int.Parse(el.GetAttribute("Number")); mc.Inherit = getBool(el.GetAttribute("Inherit")); mc.AutoToggleMarkerNumber = getInt(el.GetAttribute("AutoToggleMarkerNumber")); mc.IsClickable = getBool(el.GetAttribute("IsClickable")); mc.IsFoldMargin = getBool(el.GetAttribute("IsFoldMargin")); mc.IsMarkerMargin = getBool(el.GetAttribute("IsMarkerMargin")); try { mc.Type = (MarginType)Enum.Parse(typeof(MarginType), el.GetAttribute("Type"), true); } catch (ArgumentException) { } mc.Width = getInt(el.GetAttribute("Width")); _margin_List.Add(mc); } } marginNode = null; XmlElement markersNode = langNode.SelectSingleNode("Markers") as XmlElement; _markers_List = new MarkersConfigList(); if (markersNode != null) { _markers_List.Inherit = getBool(markersNode.GetAttribute("Inherit")); foreach (XmlElement el in markersNode.SelectNodes("Marker")) { MarkersConfig mc = new MarkersConfig(); mc.Alpha = getInt(el.GetAttribute("Alpha")); mc.BackColor = getColor(el.GetAttribute("BackColor")); mc.ForeColor = getColor(el.GetAttribute("ForeColor")); mc.Name = getString(el.GetAttributeNode("Name")); mc.Number = getInt(el.GetAttribute("Number")); mc.Inherit = getBool(el.GetAttribute("Inherit")); try { mc.Symbol = (MarkerSymbol)Enum.Parse(typeof(MarkerSymbol), el.GetAttribute("Symbol"), true); } catch (ArgumentException) { } _markers_List.Add(mc); } } XmlElement scrollingNode = langNode.SelectSingleNode("Scrolling") as XmlElement; if (scrollingNode != null) { _scrolling_EndAtLastLine = getBool(scrollingNode.GetAttribute("EndAtLastLine")); _scrolling_HorizontalWidth = getInt(scrollingNode.GetAttribute("HorizontalWidth")); string flags = scrollingNode.GetAttribute("ScrollBars").Trim(); if (flags != string.Empty) { ScrollBars? sb = null; foreach (string flag in flags.Split(' ')) sb |= (ScrollBars)Enum.Parse(typeof(ScrollBars), flag.Trim(), true); if (sb.HasValue) _scrolling_ScrollBars = sb; } _scrolling_XOffset = getInt(scrollingNode.GetAttribute("XOffset")); } scrollingNode = null; XmlElement selectionNode = langNode.SelectSingleNode("Selection") as XmlElement; if (selectionNode != null) { _selection_BackColor = getColor(selectionNode.GetAttribute("BackColor")); _selection_BackColorUnfocused = getColor(selectionNode.GetAttribute("BackColorUnfocused")); _selection_ForeColor = getColor(selectionNode.GetAttribute("ForeColor")); _selection_ForeColorUnfocused = getColor(selectionNode.GetAttribute("ForeColorUnfocused")); _selection_Hidden = getBool(selectionNode.GetAttribute("Hidden")); _selection_HideSelection = getBool(selectionNode.GetAttribute("HideSelection")); try { _selection_Mode = (SelectionMode)Enum.Parse(typeof(SelectionMode), selectionNode.GetAttribute("Mode"), true); } catch (ArgumentException) { } } selectionNode = null; _styles = new StyleConfigList(); XmlElement stylesNode = langNode.SelectSingleNode("Styles") as XmlElement; if (stylesNode != null) { _styles.Bits = getInt(stylesNode.GetAttribute("Bits")); foreach (XmlElement el in stylesNode.SelectNodes("Style")) { StyleConfig sc = new StyleConfig(); sc.Name = el.GetAttribute("Name"); sc.Number = getInt(el.GetAttribute("Number")); sc.BackColor = getColor(el.GetAttribute("BackColor")); sc.Bold = getBool(el.GetAttribute("Bold")); try { sc.Case = (StyleCase)Enum.Parse(typeof(StyleCase), el.GetAttribute("Case"), true); } catch (ArgumentException) { } try { sc.CharacterSet = (CharacterSet)Enum.Parse(typeof(CharacterSet), el.GetAttribute("CharacterSet"), true); } catch (ArgumentException) { } sc.FontName = getString(el.GetAttributeNode("FontName")); sc.ForeColor = getColor(el.GetAttribute("ForeColor")); sc.IsChangeable = getBool(el.GetAttribute("IsChangeable")); sc.IsHotspot = getBool(el.GetAttribute("IsHotspot")); sc.IsSelectionEolFilled = getBool(el.GetAttribute("IsSelectionEolFilled")); sc.IsVisible = getBool(el.GetAttribute("IsVisible")); sc.Italic = getBool(el.GetAttribute("Italic")); sc.Size = getInt(el.GetAttribute("Size")); sc.Underline = getBool(el.GetAttribute("Underline")); sc.Inherit = getBool(el.GetAttribute("Inherit")); _styles.Add(sc); } // This is a nifty added on hack made specifically for HTML. // Normally the style config elements are quite managable as there // are typically less than 10 when you don't count common styles. // // However HTML uses 9 different Sub languages that combined make // use of all 128 styles (well there are some small gaps). In order // to make this more managable I did added a SubLanguage element that // basically just prepends the Language's name and "." to the Style // Name definition. // // So for example if you had the following // <Styles> // <SubLanguage Name="ASP JavaScript"> // <Style Name="Keyword" Bold="True" /> // </SubLanguage> // </Styles> // That style's name will get interpreted as "ASP JavaScript.Keyword". // which if you look at the html.txt in LexerStyleNames you'll see it // maps to Style # 62 // Yeah I copied and pasted from above. I know. Feel free to refactor // this and check it in since you're so high and mighty. foreach (XmlElement subLanguage in stylesNode.SelectNodes("SubLanguage")) { string subLanguageName = subLanguage.GetAttribute("Name"); foreach (XmlElement el in subLanguage.SelectNodes("Style")) { StyleConfig sc = new StyleConfig(); sc.Name = subLanguageName + "." + el.GetAttribute("Name"); sc.Number = getInt(el.GetAttribute("Number")); sc.BackColor = getColor(el.GetAttribute("BackColor")); sc.Bold = getBool(el.GetAttribute("Bold")); try { sc.Case = (StyleCase)Enum.Parse(typeof(StyleCase), el.GetAttribute("Case"), true); } catch (ArgumentException) { } try { sc.CharacterSet = (CharacterSet)Enum.Parse(typeof(CharacterSet), el.GetAttribute("CharacterSet"), true); } catch (ArgumentException) { } sc.FontName = getString(el.GetAttributeNode("FontName")); sc.ForeColor = getColor(el.GetAttribute("ForeColor")); sc.IsChangeable = getBool(el.GetAttribute("IsChangeable")); sc.IsHotspot = getBool(el.GetAttribute("IsHotspot")); sc.IsSelectionEolFilled = getBool(el.GetAttribute("IsSelectionEolFilled")); sc.IsVisible = getBool(el.GetAttribute("IsVisible")); sc.Italic = getBool(el.GetAttribute("Italic")); sc.Size = getInt(el.GetAttribute("Size")); sc.Underline = getBool(el.GetAttribute("Underline")); sc.Inherit = getBool(el.GetAttribute("Inherit")); _styles.Add(sc); } } } stylesNode = null; XmlElement undoRedoNode = langNode.SelectSingleNode("UndoRedo") as XmlElement; if (undoRedoNode != null) { _undoRedoIsUndoEnabled = getBool(undoRedoNode.GetAttribute("IsUndoEnabled")); } undoRedoNode = null; XmlElement whiteSpaceNode = langNode.SelectSingleNode("WhiteSpace") as XmlElement; if (whiteSpaceNode != null) { _whiteSpace_BackColor = getColor(whiteSpaceNode.GetAttribute("BackColor")); _whiteSpace_ForeColor = getColor(whiteSpaceNode.GetAttribute("ForeColor")); _whiteSpace_Mode = (WhiteSpaceMode)Enum.Parse(typeof(WhiteSpaceMode), whiteSpaceNode.GetAttribute("Mode"), true); _whiteSpace_UseWhiteSpaceBackColor = getBool(whiteSpaceNode.GetAttribute("UseWhiteSpaceBackColor")); _whiteSpace_UseWhiteSpaceForeColor = getBool(whiteSpaceNode.GetAttribute("UseWhiteSpaceForeColor")); } whiteSpaceNode = null; configDocument = null; }
public void Load(XmlDocument configDocument) { var langNode = configDocument.DocumentElement.SelectSingleNode("./Language[@Name='" + this._language + "']") as XmlElement; if (langNode == null) return; var autoCNode = langNode.SelectSingleNode("AutoComplete") as XmlElement; if (autoCNode != null) { this._autoComplete_AutoHide = this.getBool(autoCNode.GetAttribute("AutoHide")); this._autoComplete_AutomaticLengthEntered = this.getBool(autoCNode.GetAttribute("AutomaticLengthEntered")); this._autoComplete_cancelAtStart = this.getBool(autoCNode.GetAttribute("CancelAtStart")); this._autoComplete_DropRestOfWord = this.getBool(autoCNode.GetAttribute("DropRestOfWord")); this._autoComplete_fillUpCharacters = this.getString(autoCNode.GetAttributeNode("FillUpCharacters")); this._autoComplete_ImageSeperator = this.getChar(autoCNode.GetAttribute("AutomaticLengthEntered")); this._autoComplete_IsCaseSensitive = this.getBool(autoCNode.GetAttribute("IsCaseSensitive")); this._autoComplete_ListSeperator = this.getChar(autoCNode.GetAttribute("ListSeperator")); this._autoComplete_MaxHeight = this.getInt(autoCNode.GetAttribute("MaxHeight")); this._autoComplete_MaxWidth = this.getInt(autoCNode.GetAttribute("MaxWidth")); this._autoComplete_singleLineAccept = this.getBool(autoCNode.GetAttribute("SingleLineAccept")); this._autoComplete_StopCharacters = this.getString(autoCNode.GetAttributeNode("StopCharacters")); var listNode = autoCNode.SelectSingleNode("./List") as XmlElement; if (listNode != null) { this._autoComplete_ListInherit = this.getBool(listNode.GetAttribute("Inherit")); this._autoComplete_List = new Regex("\\s+").Replace(listNode.InnerText, " ").Trim(); } } autoCNode = null; var callTipNode = langNode.SelectSingleNode("CallTip") as XmlElement; if (callTipNode != null) { this._callTip_BackColor = this.getColor(callTipNode.GetAttribute("BackColor")); this._callTip_ForeColor = this.getColor(callTipNode.GetAttribute("ForeColor")); this._callTip_HighlightTextColor = this.getColor(callTipNode.GetAttribute("HighlightTextColor")); } callTipNode = null; var caretNode = langNode.SelectSingleNode("Caret") as XmlElement; if (caretNode != null) { // This guy is a bit of an oddball becuase null means "I don't Care" // and we need some way of using the OS value. string blinkRate = caretNode.GetAttribute("BlinkRate"); if (blinkRate.ToLower() == "system") this._caret_BlinkRate = SystemInformation.CaretBlinkTime; else this._caret_BlinkRate = this.getInt(blinkRate); this._caret_Color = this.getColor(caretNode.GetAttribute("Color")); this._caret_CurrentLineBackgroundAlpha = this.getInt(caretNode.GetAttribute("CurrentLineBackgroundAlpha")); this._caret_CurrentLineBackgroundColor = this.getColor(caretNode.GetAttribute("CurrentLineBackgroundColor")); this._caret_HighlightCurrentLine = this.getBool(caretNode.GetAttribute("HighlightCurrentLine")); this._caret_IsSticky = this.getBool(caretNode.GetAttribute("IsSticky")); try { this._caret_Style = (CaretStyle)Enum.Parse(typeof(CaretStyle), caretNode.GetAttribute("Style"), true); } catch (ArgumentException) { } this._caret_Width = this.getInt(caretNode.GetAttribute("Width")); } caretNode = null; var clipboardNode = langNode.SelectSingleNode("Clipboard") as XmlElement; if (clipboardNode != null) { this._clipboard_ConvertLineBreaksOnPaste = this.getBool(clipboardNode.GetAttribute("ConvertLineBreaksOnPaste")); } clipboardNode = null; this._commands_KeyBindingList = new CommandBindingConfigList(); var commandsNode = langNode.SelectSingleNode("Commands") as XmlElement; if (commandsNode != null) { this._commands_KeyBindingList.Inherit = this.getBool(commandsNode.GetAttribute("Inherit")); this._commands_KeyBindingList.AllowDuplicateBindings = this.getBool(commandsNode.GetAttribute("AllowDuplicateBindings")); foreach (XmlElement el in commandsNode.SelectNodes("./Binding")) { var kb = new KeyBinding { KeyCode = Utilities.GetKeys(el.GetAttribute("Key")) }; string modifiers = el.GetAttribute("Modifier"); if (modifiers != string.Empty) { foreach (string modifier in modifiers.Split(' ')) kb.Modifiers |= (Keys)Enum.Parse(typeof(Keys), modifier.Trim(), true); } var cmd = (BindableCommand)Enum.Parse(typeof(BindableCommand), el.GetAttribute("Command"), true); var cfg = new CommandBindingConfig(kb, this.getBool(el.GetAttribute("ReplaceCurrent")), cmd); this._commands_KeyBindingList.Add(cfg); } } commandsNode = null; var endOfLineNode = langNode.SelectSingleNode("EndOfLine") as XmlElement; if (endOfLineNode != null) { this._endOfLine_IsVisisble = this.getBool(endOfLineNode.GetAttribute("IsVisible")); try { this._endOfLine_Mode = (EndOfLineMode)Enum.Parse(typeof(EndOfLineMode), endOfLineNode.GetAttribute("Mode"), true); } catch (ArgumentException) { } } endOfLineNode = null; var foldingNode = langNode.SelectSingleNode("Folding") as XmlElement; if (foldingNode != null) { string flags = foldingNode.GetAttribute("Flags").Trim(); if (flags != string.Empty) { FoldFlag? ff = flags.Split(' ').Aggregate<string, FoldFlag?>(null, (current, flag) => current | (FoldFlag)Enum.Parse(typeof(FoldFlag), flag.Trim(), true)); if (ff.HasValue) this._folding_Flags = ff; } this._folding_IsEnabled = this.getBool(foldingNode.GetAttribute("IsEnabled")); try { this._folding_MarkerScheme = (FoldMarkerScheme)Enum.Parse(typeof(FoldMarkerScheme), foldingNode.GetAttribute("MarkerScheme"), true); } catch (ArgumentException) { } this._folding_UseCompactFolding = this.getBool(foldingNode.GetAttribute("UseCompactFolding")); } foldingNode = null; var hotSpotNode = langNode.SelectSingleNode("Hotspot") as XmlElement; if (hotSpotNode != null) { this._hotspot_ActiveBackColor = this.getColor(hotSpotNode.GetAttribute("ActiveBackColor")); this._hotspot_ActiveForeColor = this.getColor(hotSpotNode.GetAttribute("ActiveForeColor")); this._hotspot_ActiveUnderline = this.getBool(hotSpotNode.GetAttribute("ActiveUnderline")); this._hotspot_SingleLine = this.getBool(hotSpotNode.GetAttribute("SingleLine")); this._hotspot_UseActiveBackColor = this.getBool(hotSpotNode.GetAttribute("UseActiveBackColor")); this._hotspot_UseActiveForeColor = this.getBool(hotSpotNode.GetAttribute("UseActiveForeColor")); } hotSpotNode = null; var indentationNode = langNode.SelectSingleNode("Indentation") as XmlElement; if (indentationNode != null) { this._indentation_BackspaceUnindents = this.getBool(indentationNode.GetAttribute("BackspaceUnindents")); this._indentation_IndentWidth = this.getInt(indentationNode.GetAttribute("IndentWidth")); this._indentation_ShowGuides = this.getBool(indentationNode.GetAttribute("ShowGuides")); this._indentation_TabIndents = this.getBool(indentationNode.GetAttribute("TabIndents")); this._indentation_TabWidth = this.getInt(indentationNode.GetAttribute("TabWidth")); this._indentation_UseTabs = this.getBool(indentationNode.GetAttribute("UseTabs")); try { this._indentation_SmartIndentType = (SmartIndent)Enum.Parse(typeof(SmartIndent), indentationNode.GetAttribute("SmartIndentType"), true); } catch (ArgumentException) { } } indentationNode = null; var indicatorNode = langNode.SelectSingleNode("Indicators") as XmlElement; if (indicatorNode != null) { this._indicator_List.Inherit = this.getBool(indicatorNode.GetAttribute("Inherit")); foreach (XmlElement el in indicatorNode.SelectNodes("Indicator")) { var ic = new IndicatorConfig { Number = int.Parse(el.GetAttribute("Number")), Color = this.getColor(el.GetAttribute("Color")), Inherit = this.getBool(el.GetAttribute("Inherit")), IsDrawnUnder = this.getBool(el.GetAttribute("IsDrawnUnder")) }; try { ic.Style = (IndicatorStyle)Enum.Parse(typeof(IndicatorStyle), el.GetAttribute("Style"), true); } catch (ArgumentException) { } this._indicator_List.Add(ic); } } this._lexing_Properties = new LexerPropertiesConfig(); this._lexing_Keywords = new KeyWordConfigList(); var lexerNode = langNode.SelectSingleNode("Lexer") as XmlElement; if (lexerNode != null) { this._lexing_WhitespaceChars = this.getString(lexerNode.GetAttributeNode("WhitespaceChars")); this._lexing_WordChars = this.getString(lexerNode.GetAttributeNode("WordChars")); this._lexing_Language = this.getString(lexerNode.GetAttributeNode("LexerName")); this._lexing_LineCommentPrefix = this.getString(lexerNode.GetAttributeNode("LineCommentPrefix")); this._lexing_StreamCommentPrefix = this.getString(lexerNode.GetAttributeNode("StreamCommentPrefix")); this._lexing_StreamCommentSuffix = this.getString(lexerNode.GetAttributeNode("StreamCommentSuffix")); var propNode = lexerNode.SelectSingleNode("Properties") as XmlElement; if (propNode != null) { this._lexing_Properties.Inherit = this.getBool(propNode.GetAttribute("Inherit")); foreach (XmlElement el in propNode.SelectNodes("Property")) this._lexing_Properties.Add(el.GetAttribute("Name"), el.GetAttribute("Value")); } foreach (XmlElement el in lexerNode.SelectNodes("Keywords")) this._lexing_Keywords.Add(new KeyWordConfig(this.getInt(el.GetAttribute("List")).Value, el.InnerText.Trim(), this.getBool(el.GetAttribute("Inherit")))); } lexerNode = null; var lineWrapNode = langNode.SelectSingleNode("LineWrapping") as XmlElement; if (lineWrapNode != null) { try { this._lineWrapping_Mode = (LineWrappingMode)Enum.Parse(typeof(LineWrappingMode), lineWrapNode.GetAttribute("Mode"), true); } catch (ArgumentException) { } this._lineWrapping_IndentSize = this.getInt(lineWrapNode.GetAttribute("IndentSize")); try { this._lineWrapping_IndentMode = (LineWrappingIndentMode)Enum.Parse(typeof(LineWrappingIndentMode), lineWrapNode.GetAttribute("IndentMode"), true); } catch (ArgumentException) { } string flags = lineWrapNode.GetAttribute("VisualFlags").Trim(); if (flags != string.Empty) { LineWrappingVisualFlags? wvf = null; foreach (string flag in flags.Split(' ')) wvf |= (LineWrappingVisualFlags)Enum.Parse(typeof(LineWrappingVisualFlags), flag.Trim(), true); if (wvf.HasValue) this._lineWrapping_VisualFlags = wvf; } try { this._lineWrapping_VisualFlagsLocations = (LineWrappingVisualFlagsLocations)Enum.Parse(typeof(LineWrappingVisualFlagsLocations), lineWrapNode.GetAttribute("VisualFlagsLocations"), true); } catch (ArgumentException) { } } lineWrapNode = null; var longLinesNode = langNode.SelectSingleNode("LongLines") as XmlElement; if (longLinesNode != null) { this._longLines_EdgeColor = this.getColor(longLinesNode.GetAttribute("EdgeColor")); this._longLines_EdgeColumn = this.getInt(longLinesNode.GetAttribute("EdgeColumn")); try { this._longLines_EdgeMode = (EdgeMode)Enum.Parse(typeof(EdgeMode), longLinesNode.GetAttribute("EdgeMode"), true); } catch (ArgumentException) { } } longLinesNode = null; this._margin_List = new MarginConfigList(); var marginNode = langNode.SelectSingleNode("Margins") as XmlElement; if (marginNode != null) { this._margin_List.FoldMarginColor = this.getColor(marginNode.GetAttribute("FoldMarginColor")); this._margin_List.FoldMarginHighlightColor = this.getColor(marginNode.GetAttribute("FoldMarginHighlightColor")); this._margin_List.Left = this.getInt(marginNode.GetAttribute("Left")); this._margin_List.Right = this.getInt(marginNode.GetAttribute("Right")); this._margin_List.Inherit = this.getBool(marginNode.GetAttribute("Inherit")); foreach (XmlElement el in marginNode.SelectNodes("./Margin")) { var mc = new MarginConfig { Number = int.Parse(el.GetAttribute("Number")), Inherit = this.getBool(el.GetAttribute("Inherit")), AutoToggleMarkerNumber = this.getInt(el.GetAttribute("AutoToggleMarkerNumber")), IsClickable = this.getBool(el.GetAttribute("IsClickable")), IsFoldMargin = this.getBool(el.GetAttribute("IsFoldMargin")), IsMarkerMargin = this.getBool(el.GetAttribute("IsMarkerMargin")) }; try { mc.Type = (MarginType)Enum.Parse(typeof(MarginType), el.GetAttribute("Type"), true); } catch (ArgumentException) { } mc.Width = this.getInt(el.GetAttribute("Width")); this._margin_List.Add(mc); } } marginNode = null; var markersNode = langNode.SelectSingleNode("Markers") as XmlElement; this._markers_List = new MarkersConfigList(); if (markersNode != null) { this._markers_List.Inherit = this.getBool(markersNode.GetAttribute("Inherit")); foreach (XmlElement el in markersNode.SelectNodes("Marker")) { var mc = new MarkersConfig { Alpha = this.getInt(el.GetAttribute("Alpha")), BackColor = this.getColor(el.GetAttribute("BackColor")), ForeColor = this.getColor(el.GetAttribute("ForeColor")), Name = this.getString(el.GetAttributeNode("Name")), Number = this.getInt(el.GetAttribute("Number")), Inherit = this.getBool(el.GetAttribute("Inherit")) }; try { mc.Symbol = (MarkerSymbol)Enum.Parse(typeof(MarkerSymbol), el.GetAttribute("Symbol"), true); } catch (ArgumentException) { } this._markers_List.Add(mc); } } var scrollingNode = langNode.SelectSingleNode("Scrolling") as XmlElement; if (scrollingNode != null) { this._scrolling_EndAtLastLine = this.getBool(scrollingNode.GetAttribute("EndAtLastLine")); this._scrolling_HorizontalWidth = this.getInt(scrollingNode.GetAttribute("HorizontalWidth")); string flags = scrollingNode.GetAttribute("ScrollBars").Trim(); if (flags != string.Empty) { ScrollBars? sb = null; foreach (string flag in flags.Split(' ')) sb |= (ScrollBars)Enum.Parse(typeof(ScrollBars), flag.Trim(), true); if (sb.HasValue) this._scrolling_ScrollBars = sb; } this._scrolling_XOffset = this.getInt(scrollingNode.GetAttribute("XOffset")); } scrollingNode = null; var selectionNode = langNode.SelectSingleNode("Selection") as XmlElement; if (selectionNode != null) { this._selection_BackColor = this.getColor(selectionNode.GetAttribute("BackColor")); this._selection_BackColorUnfocused = this.getColor(selectionNode.GetAttribute("BackColorUnfocused")); this._selection_ForeColor = this.getColor(selectionNode.GetAttribute("ForeColor")); this._selection_ForeColorUnfocused = this.getColor(selectionNode.GetAttribute("ForeColorUnfocused")); this._selection_Hidden = this.getBool(selectionNode.GetAttribute("Hidden")); this._selection_HideSelection = this.getBool(selectionNode.GetAttribute("HideSelection")); try { this._selection_Mode = (SelectionMode)Enum.Parse(typeof(SelectionMode), selectionNode.GetAttribute("Mode"), true); } catch (ArgumentException) { } } selectionNode = null; this._snippetsConfigList = new SnippetsConfigList(); var snippetsNode = langNode.SelectSingleNode("Snippets") as XmlElement; if (snippetsNode != null) { this._snippetsConfigList.ActiveSnippetColor = this.getColor(snippetsNode.GetAttribute("ActiveSnippetColor")); this._snippetsConfigList.ActiveSnippetIndicator = this.getInt(snippetsNode.GetAttribute("ActiveSnippetIndicator")); this._snippetsConfigList.InactiveSnippetColor = this.getColor(snippetsNode.GetAttribute("InactiveSnippetColor")); this._snippetsConfigList.InactiveSnippetIndicator = this.getInt(snippetsNode.GetAttribute("InactiveSnippetIndicator")); try { this._snippetsConfigList.ActiveSnippetIndicatorStyle = (IndicatorStyle)Enum.Parse(typeof(IndicatorStyle), snippetsNode.GetAttribute("ActiveSnippetIndicatorStyle"), true); } catch (ArgumentException) { } try { this._snippetsConfigList.InactiveSnippetIndicatorStyle = (IndicatorStyle)Enum.Parse(typeof(IndicatorStyle), snippetsNode.GetAttribute("InactiveSnippetIndicatorStyle"), true); } catch (ArgumentException) { } this._snippetsConfigList.DefaultDelimeter = this.getChar(snippetsNode.GetAttribute("DefaultDelimeter")); this._snippetsConfigList.IsEnabled = this.getBool(snippetsNode.GetAttribute("IsEnabled")); this._snippetsConfigList.IsOneKeySelectionEmbedEnabled = this.getBool(snippetsNode.GetAttribute("IsOneKeySelectionEmbedEnabled")); foreach (XmlElement el in snippetsNode.SelectNodes("Snippet")) { var sc = new SnippetsConfig { Shortcut = el.GetAttribute("Shortcut"), Code = el.InnerText, Delimeter = this.getChar(el.GetAttribute("Delimeter")), IsSurroundsWith = this.getBool(el.GetAttribute("IsSurroundsWith")) }; this._snippetsConfigList.Add(sc); } } snippetsNode = null; this._styles = new StyleConfigList(); var stylesNode = langNode.SelectSingleNode("Styles") as XmlElement; if (stylesNode != null) { this._styles.Bits = this.getInt(stylesNode.GetAttribute("Bits")); foreach (XmlElement el in stylesNode.SelectNodes("Style")) { var sc = new StyleConfig { Name = el.GetAttribute("Name"), Number = this.getInt(el.GetAttribute("Number")), BackColor = this.getColor(el.GetAttribute("BackColor")), Bold = this.getBool(el.GetAttribute("Bold")) }; try { sc.Case = (StyleCase)Enum.Parse(typeof(StyleCase), el.GetAttribute("Case"), true); } catch (ArgumentException) { } try { sc.CharacterSet = (CharacterSet)Enum.Parse(typeof(CharacterSet), el.GetAttribute("CharacterSet"), true); } catch (ArgumentException) { } sc.FontName = this.getString(el.GetAttributeNode("FontName")); sc.ForeColor = this.getColor(el.GetAttribute("ForeColor")); sc.IsChangeable = this.getBool(el.GetAttribute("IsChangeable")); sc.IsHotspot = this.getBool(el.GetAttribute("IsHotspot")); sc.IsSelectionEolFilled = this.getBool(el.GetAttribute("IsSelectionEolFilled")); sc.IsVisible = this.getBool(el.GetAttribute("IsVisible")); sc.Italic = this.getBool(el.GetAttribute("Italic")); sc.Size = this.getInt(el.GetAttribute("Size")); sc.Underline = this.getBool(el.GetAttribute("Underline")); sc.Inherit = this.getBool(el.GetAttribute("Inherit")); this._styles.Add(sc); } // This is a nifty added on hack made specifically for HTML. // Normally the style config elements are quite managable as there // are typically less than 10 when you don't count common styles. // // However HTML uses 9 different Sub languages that combined make // use of all 128 styles (well there are some small gaps). In order // to make this more managable I did added a SubLanguage element that // basically just prepends the Language's name and "." to the Style // Name definition. // // So for example if you had the following // <Styles> // <SubLanguage Name="ASP JavaScript"> // <Style Name="Keyword" Bold="True" /> // </SubLanguage> // </Styles> // That style's name will get interpreted as "ASP JavaScript.Keyword". // which if you look at the html.txt in LexerStyleNames you'll see it // maps to Style # 62 // Yeah I copied and pasted from above. I know. Feel free to refactor // this and check it in since you're so high and mighty. foreach (XmlElement subLanguage in stylesNode.SelectNodes("SubLanguage")) { string subLanguageName = subLanguage.GetAttribute("Name"); foreach (XmlElement el in subLanguage.SelectNodes("Style")) { var sc = new StyleConfig { Name = subLanguageName + "." + el.GetAttribute("Name"), Number = this.getInt(el.GetAttribute("Number")), BackColor = this.getColor(el.GetAttribute("BackColor")), Bold = this.getBool(el.GetAttribute("Bold")) }; try { sc.Case = (StyleCase)Enum.Parse(typeof(StyleCase), el.GetAttribute("Case"), true); } catch (ArgumentException) { } try { sc.CharacterSet = (CharacterSet)Enum.Parse(typeof(CharacterSet), el.GetAttribute("CharacterSet"), true); } catch (ArgumentException) { } sc.FontName = this.getString(el.GetAttributeNode("FontName")); sc.ForeColor = this.getColor(el.GetAttribute("ForeColor")); sc.IsChangeable = this.getBool(el.GetAttribute("IsChangeable")); sc.IsHotspot = this.getBool(el.GetAttribute("IsHotspot")); sc.IsSelectionEolFilled = this.getBool(el.GetAttribute("IsSelectionEolFilled")); sc.IsVisible = this.getBool(el.GetAttribute("IsVisible")); sc.Italic = this.getBool(el.GetAttribute("Italic")); sc.Size = this.getInt(el.GetAttribute("Size")); sc.Underline = this.getBool(el.GetAttribute("Underline")); sc.Inherit = this.getBool(el.GetAttribute("Inherit")); this._styles.Add(sc); } } } stylesNode = null; var undoRedoNode = langNode.SelectSingleNode("UndoRedo") as XmlElement; if (undoRedoNode != null) { this._undoRedoIsUndoEnabled = this.getBool(undoRedoNode.GetAttribute("IsUndoEnabled")); } undoRedoNode = null; var whitespaceNode = langNode.SelectSingleNode("Whitespace") as XmlElement; if (whitespaceNode != null) { this._whitespace_BackColor = this.getColor(whitespaceNode.GetAttribute("BackColor")); this._whitespace_ForeColor = this.getColor(whitespaceNode.GetAttribute("ForeColor")); this._whitespace_Mode = (WhitespaceMode)Enum.Parse(typeof(WhitespaceMode), whitespaceNode.GetAttribute("Mode"), true); } whitespaceNode = null; configDocument = null; }