private static XshdRule ParseRule(XmlReader reader) { var rule = new XshdRule(); SetPosition(rule, reader); rule.ColorReference = ParseColorReference(reader); var pattern = reader.GetAttribute("pattern"); if (!reader.IsEmptyElement) { reader.Read(); if (reader.NodeType == XmlNodeType.Text) { rule.Regex = reader.ReadContentAsString(); rule.RegexType = XshdRegexType.IgnorePatternWhitespace; } } else if (pattern != null) { rule.Regex = pattern; } return(rule); }
public object VisitRule(XshdRule rule) { return(new HighlightingRule { Color = GetColor(rule, rule.ColorReference), Regex = CreateRegex(rule, rule.Regex, rule.RegexType) }); }
static XshdRule ParseRule(XmlReader reader) { XshdRule rule = new XshdRule(); SetPosition(rule, reader); rule.ColorReference = ParseColorReference(reader); if (!reader.IsEmptyElement) { reader.Read(); if (reader.NodeType == XmlNodeType.Text) { rule.Regex = reader.ReadContentAsString(); rule.RegexType = XshdRegexType.IgnorePatternWhitespace; } } return(rule); }
public object VisitRule(XshdRule rule) { return(rule.ColorReference.AcceptVisitor(this)); }
/// <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)); }