Example #1
0
        /// <summary>
        /// The do read config value.
        /// </summary>
        /// <param name="name">
        /// The name.
        /// </param>
        /// <param name="value">
        /// The value.
        /// </param>
        /// <param name="rawRead">
        /// The raw read.
        /// </param>
        /// <typeparam name="T">
        /// </typeparam>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        private static bool DoReadConfigValue <T>(string name, ref T value, bool rawRead)
        {
            Func <Match, int> func = null;

            try
            {
                var bTrimFirst = true;
                var input      = TStringHelper.StringToNull(AppSettings[name], bTrimFirst);
                if (input != null)
                {
                    if (!rawRead)
                    {
                        var matchCollection = regexEnvironmentVariable.Matches(input);
                        if ((matchCollection != null) && (matchCollection.Count > 0))
                        {
                            var builder = new StringBuilder(input);
                            if (func == null)
                            {
                                func = row => row.Index;
                            }

                            foreach (var match in matchCollection.EnumerateMatches().OrderByDescending(func))
                            {
                                var str2 = match.Groups[1].Value;
                                var str3 = !string.IsNullOrEmpty(str2)
                             ? TStringHelper.StringToEmpty(Environment.GetEnvironmentVariable(str2))
                             : string.Empty;
                                builder.Remove(match.Index, match.Length);
                                builder.Insert(match.Index, str3);
                            }

                            input = builder.ToString();
                        }
                    }

                    value = ConversionHelper.StringToValue <T>(input);
                    return(true);
                }
            }
            catch
            {
            }

            return(false);
        }
Example #2
0
        /// <summary>
        /// The retrieve attribute.
        /// </summary>
        /// <param name="xmlNode">
        /// The xml node.
        /// </param>
        /// <param name="attributeName">
        /// The attribute name.
        /// </param>
        /// <param name="trimToNull">
        /// The trim to null.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        public static string RetrieveAttribute(this XElement xmlNode, string attributeName, bool trimToNull = false)
        {
            var attribute = xmlNode.Attribute(attributeName);

            if (attribute == null)
            {
                return(null);
            }

            if (!trimToNull)
            {
                return(attribute.Value);
            }

            var bTrimFirst = true;

            return(TStringHelper.StringToNull(attribute.Value, bTrimFirst));
        }
Example #3
0
        // разрешить все ссылки на имена обрабатываемых полей
        // public void ResolveAllowedFields(PolicySearchFieldNameResolver resolver)
        // {
        // if (converters != null)
        // {
        // foreach (var converter in converters)
        // converter.AllowedFields.ResolveFields(resolver);
        // }
        // }

        // разрешить все ссылки на имена обрабатываемых полей
        // public void ResolveAllowedFields()
        // {
        // ResolveAllowedFields(FieldNameResolver);
        // }

        // провести подготовку строки, задав тонкие настройки
        /// <summary>
        /// The prepare string.
        /// </summary>
        /// <param name="s">
        /// The s.
        /// </param>
        /// <param name="field">
        /// The field.
        /// </param>
        /// <param name="flagged">
        /// The flagged.
        /// </param>
        /// <param name="emptyToNull">
        /// The empty to null.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        /// <exception cref="InvalidCastException">
        /// </exception>
        public string PrepareString(
            string s,
            FieldTypes field = FieldTypes.Undefined,
            bool flagged     = false,
            bool emptyToNull = false)
        {
            if (s != null)
            {
                /*
                 * следует учитывать, что после преобразований какие-то буквы могут исчезнуть, а какие-то добавиться
                 * в результате может сложиться новая последовательность символов, которая сама по себе подлежит преобразованию
                 * наша цель: получить некий "конечный" результат, то есть такой, который уже не будет меняться, если к нему снова и снова применить все те же преобразования
                 *
                 * для этого будем повторять преобразования в цикле до тех пор, пока хоть что-то в строке меняется (разумеется, с защитой от зацикливания)
                 * поначалу предполагалось сделать кеш готовых значений, но тесты показали, что в этом нет особого смысла, потому что наличие цикла добавило всего 2-3% времени на обработку файла
                 */
                ushort cycles     = 0;
                var    original_s = s;
                do
                {
                    // текущее значение строки
                    var saved_s = s;

                    // преобразование к верхнему регистру
                    if (GlobalUpper)
                    {
                        s = s.ToUpper();
                    }

                    // применить настраиваемые преобразования
                    if (converters != null)
                    {
                        foreach (var converter in converters)
                        {
                            s = converter.Convert(s, field, flagged);
                        }
                    }

                    // убрать боковые пробелы
                    if (GlobalTrim)
                    {
                        s = s.Trim();
                    }

                    // убрать лишние пробелы
                    if (GlobalCompact)
                    {
                        s = TStringHelper.CompactString(s);
                    }

                    // прерываем цикл, когда никаких изменений в строке больше нет
                    if (string.Compare(s, saved_s, StringComparison.Ordinal) == 0)
                    {
                        break;
                    }

                    // защита от зацикливания
                    if (++cycles > 10000)
                    {
                        throw new InvalidCastException(
                                  string.Format(
                                      "TextRules.PrepareString: зацикливание! field: {0}, flagged: {1}, string: {2}",
                                      field,
                                      flagged,
                                      original_s));
                    }
                }while (true);

                // привести пустую строку к null
                if (emptyToNull)
                {
                    s = TStringHelper.StringToNull(s);
                }
            }

            return(s);
        }
Example #4
0
        // public static void SerializeObject(Stream stream, object obj, IXmlNamespaceResolver resolver = new IXmlNamespaceResolver())
        // {
        // XmlSerializer serializer = new XmlSerializer(obj.GetType());
        // XmlSerializerNamespaces namespaces = ResolveNamespacesForSerializer(resolver, false);
        // if (namespaces != null)
        // {
        // serializer.Serialize(stream, obj, namespaces);
        // }
        // else
        // {
        // serializer.Serialize(stream, obj);
        // }
        // }

        // public static void SerializeObject(XmlWriter xmlWriter, object obj, IXmlNamespaceResolver resolver = new IXmlNamespaceResolver())
        // {
        // XmlSerializer serializer = new XmlSerializer(obj.GetType());
        // XmlSerializerNamespaces namespaces = ResolveNamespacesForSerializer(resolver, false);
        // if (namespaces != null)
        // {
        // serializer.Serialize(xmlWriter, obj, namespaces);
        // }
        // else
        // {
        // serializer.Serialize(xmlWriter, obj);
        // }
        // }

        /// <summary>
        /// The split x path.
        /// </summary>
        /// <param name="xpath">
        /// The xpath.
        /// </param>
        /// <returns>
        /// The <see cref="IEnumerable"/>.
        /// </returns>
        /// <exception cref="ArgumentException">
        /// </exception>
        public static IEnumerable <string> SplitXPath(this string xpath)
        {
            List <string> list = null;
            char          ch;
            var           bTrimFirst = true;

            xpath = TStringHelper.StringToNull(xpath, bTrimFirst);
            if (xpath == null)
            {
                return(list);
            }

            var length     = xpath.Length;
            var startIndex = 0;
            var num3       = 0;
            var none       = QuotationMark.None;

Label_0023:
            ch = xpath[num3];
            var ch2 = ch;

            if (ch2 <= '\'')
            {
                switch (ch2)
                {
                case '"':
                    switch (none)
                    {
                    case QuotationMark.None:
                        none = QuotationMark.DoubleQuotes;
                        goto Label_00D1;

                    case QuotationMark.Apostrophe:
                        goto Label_00D1;

                    case QuotationMark.DoubleQuotes:
                        none = QuotationMark.None;
                        goto Label_00D1;
                    }

                    goto Label_00D1;

                case '\'':
                    switch (none)
                    {
                    case QuotationMark.None:
                        none = QuotationMark.Apostrophe;
                        goto Label_00D1;

                    case QuotationMark.Apostrophe:
                        none = QuotationMark.None;
                        goto Label_00D1;
                    }

                    goto Label_00D1;
                }
            }
            else if (((ch2 == '/') || (ch2 == '\\')) && (none == QuotationMark.None))
            {
                var str = xpath.Substring(startIndex, num3 - startIndex);
                if (string.IsNullOrEmpty(str) && (list != null))
                {
                    throw new ArgumentException("пустой узел в x-path выражении");
                }

                if (list == null)
                {
                    list = new List <string>();
                }

                list.Add(str);
                startIndex = num3 + 1;
            }

Label_00D1:
            if (++num3 < length)
            {
                goto Label_0023;
            }

            if (none != QuotationMark.None)
            {
                throw new ArgumentException("незакрытая кавычка в x-path выражении");
            }

            if (list == null)
            {
                list = new List <string>();
            }

            list.Add(xpath.Substring(startIndex, num3 - startIndex));
            return(list);
        }
Example #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StringMatchingBase"/> class.
 /// </summary>
 /// <param name="matcher">
 /// The matcher.
 /// </param>
 protected StringMatchingBase(string matcher)
 {
     this.matcher = TStringHelper.StringToNull(matcher);
 }