private static Ds AddStyle(string name) { Ds type = new Ds(name, lastIndex++); _all.Add(type); byName.Add(name, type); return(type); }
public Highlighter(Raw raw) { styleDataOf = new Dictionary <string, StyleData>(); textListOf = new Dictionary <string, string[]>(); keywordDataOf = new Dictionary <string, Rules.KeywordData>(); customStyleDatas = new List <StyleData>(); foreach (Raw.RawList listI in raw.lists) { textListOf[listI.name.ToLowerInvariant()] = listI.items.ToArray(); } { bool first = true; foreach (Raw.ItemData itemDataI in raw.itemDatas) { StyleData data = new StyleData(); data.ds = Ds.GetByName(itemDataI.defStyleNum); data.name = itemDataI.name; data.color = HighlighterUtil.ParseColor(itemDataI.color); data.italic = GetVariantBool(itemDataI.italic); data.bold = GetVariantBool(itemDataI.bold); data.underline = GetVariantBool(itemDataI.underline); data.strikeout = GetVariantBool(itemDataI.strikeout); if (data.color == null && data.italic == null && data.bold == null && data.underline == null && data.strikeout == null) { data.index = data.ds.index; } else { data.index = (short)(Ds.all.Count + customStyleDatas.Count); customStyleDatas.Add(data); } styleDataOf[data.name.ToLowerInvariant()] = data; if (first) { first = false; defaultStyleData = data; } } } List <Rules.Context> contextList = new List <Rules.Context>(); contextOf = new Dictionary <string, Rules.Context>(); foreach (Raw.Context contextI in raw.contexts) { string name = contextI.name; Rules.Context context = new Rules.Context(); context.name = name; contextOf[name.ToLowerInvariant()] = context; contextList.Add(context); } List <Rules.RegExpr> regExprRules = new List <Rules.RegExpr>(); foreach (Raw.Context contextI in raw.contexts) { Rules.Context context = contextOf[contextI.name.ToLowerInvariant()]; { StyleData styleData = null; string attribute = contextI.attribute; if (attribute != null) { styleDataOf.TryGetValue(attribute.ToLowerInvariant(), out styleData); } if (styleData == null) { styleData = defaultStyleData; } context.attribute = styleData; } StyleData currentAttribute = context.attribute; context.lineEndContext = GetSwitchInfo(contextI.lineEndContext); context.fallthrough = GetBool(contextI.fallthrough); context.fallthroughContext = GetSwitchInfo(contextI.fallthroughContext); List <Rules.Rule> contextRules = new List <Rules.Rule>(); foreach (Raw.Rule ruleI in contextI.rules) { Rules.Rule rule = ParseRule(ruleI, regExprRules, context.attribute); if (rule != null) { contextRules.Add(rule); } } context.childs = contextRules.ToArray(); } awakePositions = new int[regExprRules.Count]; for (int i = 0; i < regExprRules.Count; i++) { Rules.RegExpr rule = regExprRules[i]; rule.awakePositions = awakePositions; rule.awakeIndex = i; } contexts = contextList.ToArray(); styleDataOf = null; contextOf = null; textListOf = null; }