Example #1
0
        public bool Parse(string pattern, TemplateStringSettings settings, out string value)
        {
            if (string.IsNullOrEmpty(pattern))
            {
                value = null;
                return(false);
            }
            _pattern           = pattern;
            _patternProperties = new List <ItemPatternProperty>();
            int replaceStart, replaceEnd;

            do
            {
                replaceStart = pattern.IndexOf(settings.QuotesStart);
                replaceEnd   = pattern.IndexOf(settings.QuoteEnd);
                if (replaceStart > -1 && replaceEnd > -1)
                {
                    _value = pattern.Substring(0, replaceStart);
                    var key = pattern.Substring(replaceStart, replaceEnd - replaceStart + 1);
                    while (!FullKey(key, settings))
                    {
                        replaceEnd = pattern.IndexOf(settings.QuoteEnd, replaceEnd + 1);
                    }
                }
            } while (!string.IsNullOrEmpty(pattern));
        }
Example #2
0
        internal string[] FormatString(string[] pattern, TemplateStringSettings settings)
        {
            var  stringFile        = new List <string>();
            int  replaceStartIndex = -1;
            int  replaceEndIndex   = -1;
            bool fullKey           = true;

            for (var i = 0; i < pattern.Length; i++)
            {
                stringFile.Add("");
                do
                {
                    replaceStartIndex = fullKey ? pattern[i].IndexOf('{') : replaceStartIndex;
                    replaceEndIndex   = fullKey ? pattern[i].IndexOf('}') : pattern[i].IndexOf('}', replaceEndIndex + 1);
                    if (replaceStartIndex == -1 || replaceEndIndex == -1)
                    {
                        stringFile[i] += $"{pattern[i]}";
                        pattern[i]     = String.Empty;
                        continue;
                    }
                    stringFile[i] += fullKey ? pattern[i].Substring(0, replaceStartIndex) : String.Empty;
                    var key             = pattern[i].Substring(replaceStartIndex, replaceEndIndex - replaceStartIndex + 1);
                    var tempKey         = key;
                    var leftCountQuote  = key.Count(item => item == '{');
                    var rightCountQuote = key.Count(item => item == '}');
                    if (leftCountQuote == rightCountQuote)
                    {
                        fullKey = true;
                        var firstSymbol = pattern[i].TrimStart()[0];
                        var leftIndent  = pattern[i].Substring(0, pattern[i].IndexOf(firstSymbol));
                        pattern[i] = pattern[i].Remove(0, replaceEndIndex + 1);
                        key        = key.Substring(1, key.Length - 2);
                        if (key.ToLower().Contains("list:"))
                        {
                            var nameListStart = key.IndexOf('"');
                            var nameListEnd   = key.IndexOf('"', nameListStart + 1);
                            var nameList      = key.Substring(nameListStart + 1, nameListEnd - nameListStart - 1).ToLower();
                            var itemPattern   = String.Empty;

                            if (key.ToLower().Contains("item:"))
                            {
                                var itemTemplateStart = key.IndexOf('"', nameListEnd + 1);
                                var itemTemplateEnd   = key.IndexOf('"', itemTemplateStart + 1);
                                itemPattern = key.Substring(itemTemplateStart + 1,
                                                            itemTemplateEnd - itemTemplateStart - 1);
                            }

                            var baseModels = values[nameList] as IDictionary <string, object>;
                            if (baseModels == null)
                            {
                                stringFile += tempKey;
                                continue;
                            }

                            var index = 1;
                            foreach (var baseModel in baseModels)
                            {
                                if (string.IsNullOrEmpty(itemPattern))
                                {
                                    stringFile += baseModel.GetValues(baseModel)
                                                  .Aggregate(index == 1 ? String.Empty : leftIndent,
                                                             (current, item) =>
                                                             (String.IsNullOrEmpty(current) ? String.Empty : current + " ") +
                                                             item.Value);
                                    index++;
                                }
                                else
                                {
                                    stringFile += FormatString((index == 1 ? String.Empty : leftIndent) + itemPattern,
                                                               baseModel.GetValues(baseModel));
                                    index++;
                                }
                            }
                        }
                        else
                        {
                            var formatToString = String.Empty;
                            if (key.Contains(':'))
                            {
                                formatToString = key.Substring(key.IndexOf(':') + 1);
                                key            = key.Substring(0, key.IndexOf(':'));
                            }
                            if (!values.ContainsKey(key.ToLower()))
                            {
                                Logging.Write($"Не правильное название параметра {key}");
                                continue;
                            }
                            var    value = values[key.ToLower()];
                            string stringValue;
                            var    cultureValue = new CultureInfo("EN-us");
                            if (value is DateTime)
                            {
                                stringValue = ((DateTime)value).ToString(formatToString, cultureValue);
                            }
                            else if (value is TimeSpan)
                            {
                                stringValue = ((TimeSpan)value).ToString(formatToString, cultureValue);
                            }
                            else if (value == null)
                            {
                                stringValue = tempKey;
                            }
                            else
                            {
                                stringValue = value.ToString();
                            }
                            stringFile[i] += stringValue;
                        }
                        else
                        {
                            fullKey = false;
                        }
                    }
                    while (!string.IsNullOrEmpty(pattern[i]))
                    {
                        ;
                    }
                }
Example #3
0
 private bool FullKey(string key, TemplateStringSettings settings)
 {
     return(key.Count(t => t.Equals(settings.QuotesStart)) == key.Count(t => t.Equals(settings.QuoteEnd)));
 }