void WriteRuleSetReference(XshdReference<XshdRuleSet> ruleSetReference) { if (ruleSetReference.ReferencedElement != null) { if (ruleSetReference.ReferencedDefinition != null) writer.WriteAttributeString("ruleSet", ruleSetReference.ReferencedDefinition + "/" + ruleSetReference.ReferencedElement); else writer.WriteAttributeString("ruleSet", ruleSetReference.ReferencedElement); } }
void WriteColorReference(XshdReference<XshdColor> color) { if (color.InlineElement != null) { WriteColorAttributes(color.InlineElement); } else if (color.ReferencedElement != null) { if (color.ReferencedDefinition != null) writer.WriteAttributeString("color", color.ReferencedDefinition + "/" + color.ReferencedElement); else writer.WriteAttributeString("color", color.ReferencedElement); } }
private HighlightingColor GetColor(XshdElement position, XshdReference <XshdColor> colorReference) { if (colorReference.InlineElement != null) { return((HighlightingColor)colorReference.InlineElement.AcceptVisitor(this)); } if (colorReference.ReferencedElement != null) { var definition = GetDefinition(position, colorReference.ReferencedDefinition); var color = definition.GetNamedColor(colorReference.ReferencedElement); if (color == null) { throw Error(position, "Could not find color named '" + colorReference.ReferencedElement + "'."); } return(color); } return(null); }
HighlightingRuleSet GetRuleSet(XshdElement position, XshdReference <XshdRuleSet> ruleSetReference) { if (ruleSetReference.InlineElement != null) { return((HighlightingRuleSet)ruleSetReference.InlineElement.AcceptVisitor(this)); } else if (ruleSetReference.ReferencedElement != null) { IHighlightingDefinition definition = GetDefinition(position, ruleSetReference.ReferencedDefinition); HighlightingRuleSet ruleSet = definition.GetNamedRuleSet(ruleSetReference.ReferencedElement); if (ruleSet == null) { throw Error(position, "Could not find rule set named '" + ruleSetReference.ReferencedElement + "'."); } return(ruleSet); } else { return(null); } }
void WriteBeginEndElement(string elementName, string regex, XshdReference<XshdColor> colorReference) { if (regex != null) { writer.WriteStartElement(elementName, Namespace); WriteColorReference(colorReference); writer.WriteString(regex); writer.WriteEndElement(); } }
/// <summary> /// 保持しているInfoに従い、Xshdファイルを生成します /// </summary> /// <returns>true:成功, false:失敗</returns> private bool CreateXshdFile() { Logger.Info(CLASS_NAME, "CreateXshdFile", "start"); XshdSyntaxDefinition def = new XshdSyntaxDefinition(); def.Name = "TXT"; def.Extensions.Add(".txt"); // .txtファイルのみ対象としているので、将来拡張するならここをいじる必要がある // keywordは勝手に正規表現で前後に改行コードが含まれてしまうため、見出し文字列等以外には適さない // ★設定で回避できる? 要調査、現状は動くことを優先して下記設定とする // そのため、日本語文章を対象としていることから、類語・検索語はXshdRuleSetに登録する XshdRuleSet xshdRuleSet = new XshdRuleSet(); int i = 0; foreach (TextHighlightInfo info in _infos) { if (IsInfoCorrect(info) == false) { Logger.Error(CLASS_NAME, "CreateXshdFile", $"info is null or incorrect! index:[{i}]"); continue; } XshdColor color = new XshdColor { // Name = "keywordColor", // 別に名前は何でもいい Foreground = info.ForeGround, Background = info.BackGrouond, // 検索結果表示を太字にする //todo:設定で持たせるべきかもしれない FontWeight = System.Windows.FontWeights.Bold, //FontStyle = System.Windows.FontStyles.Italic これは斜体になる }; string colorName = "keyword"; // 文字毎に異なる背景色を設定したいため、ここでColorおよびColorRefのNameを紐付ける必要がある // 大量にあることを想定し、StringBuilderで結合する StringBuilder sb = new StringBuilder(colorName); sb.Append(i.ToString()); color.Name = sb.ToString(); XshdReference <XshdColor> colorRef = new XshdReference <XshdColor>(null, color.Name); string target = info.TargetWord; if (string.IsNullOrEmpty(target)) { Logger.Error(CLASS_NAME, "CreateXshdFile", $"target is null! target:[{target}]"); continue; } XshdRule rule = new XshdRule { ColorReference = colorRef, Regex = target // 正規表現で持たせる必要があるが、文字単位なのでそのまま渡して問題ない }; xshdRuleSet.Elements.Add(rule); // 追加したいモノは追加した def.Elements.Add(color); System.Threading.Interlocked.Increment(ref i); } def.Elements.Add(xshdRuleSet); return(WriteXshdFile(def)); }
HighlightingRuleSet GetRuleSet(XshdElement position, XshdReference<XshdRuleSet> ruleSetReference) { if (ruleSetReference.InlineElement != null) { return (HighlightingRuleSet)ruleSetReference.InlineElement.AcceptVisitor(this); } else if (ruleSetReference.ReferencedElement != null) { IHighlightingDefinition definition = GetDefinition(position, ruleSetReference.ReferencedDefinition); HighlightingRuleSet ruleSet = definition.GetNamedRuleSet(ruleSetReference.ReferencedElement); if (ruleSet == null) throw Error(position, "Could not find rule set named '" + ruleSetReference.ReferencedElement + "'."); return ruleSet; } else { return null; } }
HighlightingColor GetColor(XshdElement position, XshdReference<XshdColor> colorReference) { if (colorReference.InlineElement != null) { return (HighlightingColor)colorReference.InlineElement.AcceptVisitor(this); } else if (colorReference.ReferencedElement != null) { IHighlightingDefinition definition = GetDefinition(position, colorReference.ReferencedDefinition); HighlightingColor color = definition.GetNamedColor(colorReference.ReferencedElement); if (color == null) throw Error(position, "Could not find color named '" + colorReference.ReferencedElement + "'."); return color; } else { return null; } }