Example #1
0
        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)
     });
 }
Example #3
0
        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));
        }