예제 #1
0
        private void ReadEnvironmentOverrides()
        {
            var env = System.Environment.GetEnvironmentVariable("OSCRIPT_CONFIG");

            if (env == null)
            {
                return;
            }

            var paramList = new FormatParametersList(env);

            _currentConfig.Merge(paramList.ToDictionary());
        }
예제 #2
0
        private static string FormatDate(DateTime dateTime, FormatParametersList formatParameters)
        {
            var locale = formatParameters.GetParamValue(LOCALE);
            DateTimeFormatInfo df;

            if (locale != null)
            {
                // culture codes in 1C-style
                var culture = CreateCulture(locale);
                df = (DateTimeFormatInfo)culture.DateTimeFormat.Clone();
            }
            else
            {
                var currentDF = DateTimeFormatInfo.CurrentInfo;
                if (currentDF == null)
                {
                    df = new DateTimeFormatInfo();
                }
                else
                {
                    df = (DateTimeFormatInfo)currentDF.Clone();
                }
            }

            string param;

            if (dateTime == DateTime.MinValue)
            {
                if (formatParameters.HasParam(DATE_EMPTY, out param))
                {
                    return(param);
                }

                return(String.Empty);
            }

            string formatString = "G";

            if (formatParameters.HasParam(DATE_FORMAT, out param))
            {
                formatString = ProcessDateFormat(param);
            }

            if (formatParameters.HasParam(DATE_LOCAL_FORMAT, out param))
            {
                formatString = ProcessLocalDateFormat(param);
            }

            return(dateTime.ToString(formatString, df));
        }
예제 #3
0
        public string NStr(string src, string lang = null)
        {
            var    parser = new FormatParametersList(src);
            string str;

            if (lang == null)
            {
                str = parser.EnumerateValues().FirstOrDefault();
            }
            else
            {
                str = parser.GetParamValue(lang);
            }

            return(str == null ? String.Empty : str);
        }
예제 #4
0
        private static string FormatBoolean(bool p, FormatParametersList formatParameters)
        {
            if (p)
            {
                var truePresentation = formatParameters.GetParamValue(BOOLEAN_TRUE);
                if (truePresentation != null)
                {
                    return(truePresentation);
                }
            }
            else
            {
                var falsePresentation = formatParameters.GetParamValue(BOOLEAN_FALSE);
                if (falsePresentation != null)
                {
                    return(falsePresentation);
                }
            }

            return(ValueFactory.Create(p).AsString());
        }
예제 #5
0
        /// <summary>
        ///
        /// По умолчанию, системный язык определяется настройкой локали в операционной системе.
        /// Также, системный языкможет быть задан в файле oscript.cfg параметром systemlanguage.
        /// Сама функция НСтр работает следующим образом:
        ///     Если подстрока для системного языка присутствует, то она и возвращается,
        ///     иначе, возвращается подстрока для английского языка (en),
        ///     если подстрока для английского языка не задана, то возвращается первая по порядку подстрока.
        ///     Если подстрока для системного языка присутствует, то она и возвращается,
        ///     иначе, возвращается подстрока для английского языка(en),
        ///     если подстрока для английского языка не задана, то возвращается первая по порядку подстрока.
        /// </summary>
        ///
        public static string NStr(string src, string lang = null)
        {
            var    parser = new FormatParametersList(src);
            string str;

            if (lang != null)
            {
                str = parser.GetParamValue(lang);
            }
            else
            {
                str = parser.GetParamValue(SystemLanguageISOName);
                if (str == null)
                {
                    str = parser.GetParamValue("en");
                }
                if (str == null)
                {
                    str = parser.EnumerateValues().FirstOrDefault();
                }
            }

            return(str == null ? String.Empty : str);
        }
예제 #6
0
        private static string FormatNumber(decimal num, FormatParametersList formatParameters)
        {
            int[] numberGroupSizes = null;

            var locale = formatParameters.GetParamValue(LOCALE);
            NumberFormatInfo nf;

            if (locale != null)
            {
                // culture codes in 1C-style
                var culture = CreateCulture(locale);
                nf = (NumberFormatInfo)culture.NumberFormat.Clone();
            }
            else
            {
                nf = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
            }

            string param;
            string zeroAppearance;

            if (formatParameters.HasParam(NUM_ZERO_APPEARANCE, out param))
            {
                zeroAppearance = (param == "") ? "0" : param;
            }
            else
            {
                zeroAppearance = "";
            }

            if (num == 0)
            {
                return(zeroAppearance);
            }

            bool hasDigitLimits = false;
            int  totalDigits    = 0;
            int  fractionDigits = 0;
            bool largeGroupSize = false;

            if (formatParameters.HasParam(NUM_MAX_SIZE, out param))
            {
                hasDigitLimits = true;
                totalDigits    = ParseUnsignedParam(param);
            }

            if (formatParameters.HasParam(NUM_DECIMAL_SIZE, out param))
            {
                hasDigitLimits = true;
                fractionDigits = ParseUnsignedParam(param);
            }

            if (formatParameters.HasParam(NUM_FRACTION_DELIMITER, out param))
            {
                if (param.Length > 0)
                {
                    nf.NumberDecimalSeparator = (param.Length < 2 ? param : param.Substring(0, 1));
                }
            }

            if (formatParameters.HasParam(NUM_GROUPS_DELIMITER, out param))
            {
                if (param.Length > 0)
                {
                    nf.NumberGroupSeparator = (param.Length < 2 ? param : param.Substring(0, 1));
                }
            }

            if (formatParameters.HasParam(NUM_GROUPING, out param))
            {
                numberGroupSizes = ParseGroupSizes(param);
                if (numberGroupSizes.Any(x => x > 9))
                {
                    nf.NumberGroupSizes = new int[] { 0 };
                    largeGroupSize      = true;
                }
                else
                {
                    nf.NumberGroupSizes = numberGroupSizes;
                }
            }

            if (formatParameters.HasParam(NUM_NEGATIVE_APPEARANCE, out param))
            {
                int pattern;
                if (int.TryParse(param, out pattern))
                {
                    nf.NumberNegativePattern = (pattern >= 0 && pattern <= 4 ? pattern : 1);
                }
            }

            bool hasLeadingZeroes = formatParameters.HasParam(NUM_LEADING_ZERO, out param);

            StringBuilder formatBuilder = new StringBuilder();

            if (hasDigitLimits)
            {
                bool overflov = !ApplyNumericSizeRestrictions(ref num, totalDigits, fractionDigits);;

                if (num == 0)
                {
                    return(zeroAppearance);
                }

                if (totalDigits == 0)
                {
                    formatBuilder.Append("#,0.");
                    formatBuilder.Append('0', fractionDigits);
                }
                else
                {
                    int intDigits = totalDigits - fractionDigits;

                    if (intDigits > 1)
                    {
                        if (hasLeadingZeroes)
                        {
                            formatBuilder.Append('0', intDigits - 1);
                        }
                        else
                        {
                            formatBuilder.Append('#', 1);
                        }
                        formatBuilder.Append(',');
                    }

                    if (intDigits > 0)
                    {
                        formatBuilder.Append("0.");
                        if (overflov && totalDigits > MAX_DECIMAL_ROUND)
                        {
                            if (intDigits < MAX_DECIMAL_ROUND)
                            {
                                formatBuilder.Append('0', MAX_DECIMAL_ROUND - intDigits);
                            }
                            formatBuilder.Append('9', totalDigits - MAX_DECIMAL_ROUND);
                        }
                        else
                        {
                            formatBuilder.Append('0', fractionDigits);
                        }
                    }
                    else
                    {
                        largeGroupSize = false;
                        formatBuilder.Append("#.");
                        if (overflov && totalDigits > MAX_DECIMAL_ROUND)
                        {
                            formatBuilder.Append('0', MAX_DECIMAL_ROUND);
                            formatBuilder.Append('9', totalDigits - MAX_DECIMAL_ROUND);
                        }
                        else
                        {
                            formatBuilder.Append('0', totalDigits);
                        }
                    }
                }

                if (num < 0)
                {
                    ApplyNegativePattern(formatBuilder, nf);
                }
            }
            else
            {
                int precision = GetDecimalPrecision(Decimal.GetBits(num));
                nf.NumberDecimalDigits = precision;
                formatBuilder.Append('N');
            }

            if (largeGroupSize)
            {
                string decSeparator = nf.NumberDecimalSeparator;
                nf.NumberDecimalSeparator = ".";
                string preformatted = num.ToString(formatBuilder.ToString(), nf);
                nf.NumberDecimalSeparator = decSeparator;

                return(ApplyDigitsGrouping(preformatted, nf, numberGroupSizes));
            }

            return(num.ToString(formatBuilder.ToString(), nf));
        }
예제 #7
0
 private static string DefaultFormat(IValue value, FormatParametersList formatParameters)
 {
     return(value.AsString());
 }
예제 #8
0
 private static string DefaultFormat(IValue value, FormatParametersList formatParameters)
 {
     throw new NotImplementedException();
 }
예제 #9
0
        private static string FormatNumber(decimal p, FormatParametersList formatParameters)
        {
            var locale = formatParameters.GetParamValue(LOCALE);
            NumberFormatInfo nf;

            if (locale != null)
            {
                // culture codes in 1C-style
                var culture = CreateCulture(locale);
                nf = (NumberFormatInfo)culture.NumberFormat.Clone();
            }
            else
            {
                nf = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
            }

            string param;

            if (p == 0)
            {
                if (formatParameters.HasParam(NUM_ZERO_APPEARANCE, out param))
                {
                    if (param == "")
                    {
                        return("0");
                    }
                    else
                    {
                        return(param);
                    }
                }
                else
                {
                    return("");
                }
            }

            bool hasDigitLimits = false;
            int  totalDigits    = 0;
            int  fractionDigits = 0;

            if (formatParameters.HasParam(NUM_MAX_SIZE, out param))
            {
                int paramToInt;
                if (Int32.TryParse(param, out paramToInt))
                {
                    if (paramToInt < 0)
                    {
                        paramToInt = 0;
                    }

                    hasDigitLimits = true;
                    totalDigits    = paramToInt;
                }
            }

            if (formatParameters.HasParam(NUM_DECIMAL_SIZE, out param))
            {
                int paramToInt;
                if (Int32.TryParse(param, out paramToInt))
                {
                    if (paramToInt < 0)
                    {
                        paramToInt = 0;
                    }

                    hasDigitLimits = true;
                    fractionDigits = paramToInt;
                }
            }

            if (formatParameters.HasParam(NUM_FRACTION_DELIMITER, out param))
            {
                nf.NumberDecimalSeparator = param;
            }

            if (formatParameters.HasParam(NUM_GROUPS_DELIMITER, out param))
            {
                nf.NumberGroupSeparator = param;
            }
            else
            {
                nf.NumberGroupSeparator = " ";
            }

            if (formatParameters.HasParam(NUM_GROUPING, out param))
            {
                nf.NumberGroupSizes = ParseGroupSizes(param);
            }

            if (formatParameters.HasParam(NUM_NEGATIVE_APPEARANCE, out param))
            {
                int pattern;
                if (int.TryParse(param, out pattern))
                {
                    nf.NumberNegativePattern = pattern;
                }
            }

            char leadingFormatSpecifier = '#';

            if (formatParameters.HasParam(NUM_LEADING_ZERO, out param))
            {
                leadingFormatSpecifier = '0';
            }

            StringBuilder formatBuilder = new StringBuilder();

            if (hasDigitLimits)
            {
                ApplyNumericSizeRestrictions(ref p, totalDigits, fractionDigits);

                int repeatCount = totalDigits - fractionDigits;
                if (repeatCount < 0)
                {
                    repeatCount = 1;
                }

                formatBuilder.Append(leadingFormatSpecifier, repeatCount);

                ApplyDigitsGrouping(formatBuilder, nf);

                formatBuilder.Append('.');
                formatBuilder.Append('#', fractionDigits);
            }
            else
            {
                int precision = GetDecimalPrecision(Decimal.GetBits(p));
                nf.NumberDecimalDigits = precision;
                formatBuilder.Append("N");
            }

            return(p.ToString(formatBuilder.ToString(), nf));
        }
예제 #10
0
 private static string DefaultFormat(IValue value, FormatParametersList formatParameters)
 {
     throw new NotImplementedException();
 }
예제 #11
0
        private static string FormatDate(DateTime dateTime, FormatParametersList formatParameters)
        {
            var locale = formatParameters.GetParamValue(LOCALE);
            DateTimeFormatInfo df;
            if (locale != null)
            {
                // culture codes in 1C-style
                var culture = CreateCulture(locale);
                df = (DateTimeFormatInfo)culture.DateTimeFormat.Clone();
            }
            else
            {
                var currentDF= DateTimeFormatInfo.CurrentInfo;
                if(currentDF == null)
                    df = new DateTimeFormatInfo();
                else
                    df = (DateTimeFormatInfo)currentDF.Clone();
            }

            string param;

            if (dateTime == DateTime.MinValue)
            {
                if (formatParameters.HasParam(DATE_EMPTY, out param))
                {
                    return param;
                }

                return String.Empty;
            }

            string formatString = "G";

            if (formatParameters.HasParam(DATE_FORMAT, out param))
            {
                formatString = ProcessDateFormat(param);
            }

            if (formatParameters.HasParam(DATE_LOCAL_FORMAT, out param))
            {
                formatString = ProcessLocalDateFormat(param);
            }

            return dateTime.ToString(formatString, df);

        }
예제 #12
0
        private static string FormatNumber(decimal p, FormatParametersList formatParameters)
        {
            var locale = formatParameters.GetParamValue(LOCALE);
            NumberFormatInfo nf;
            if (locale != null)
            {
                // culture codes in 1C-style
                var culture = CreateCulture(locale);
                nf = (NumberFormatInfo)culture.NumberFormat.Clone();
            }
            else
            {
                nf = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
            }

            string param;

            if (p == 0)
            {
                if (formatParameters.HasParam(NUM_ZERO_APPEARANCE, out param))
                    return param;
                else
                    return "";
            }

            bool hasDigitLimits = false;
            int totalDigits = 0;
            int fractionDigits = 0;

            if (formatParameters.HasParam(NUM_MAX_SIZE, out param))
            {
                int paramToInt;
                if (Int32.TryParse(param, out paramToInt))
                {
                    if (paramToInt < 0)
                        paramToInt = 0;

                    hasDigitLimits = true;
                    totalDigits = paramToInt;
                }
            }

            if (formatParameters.HasParam(NUM_DECIMAL_SIZE, out param))
            {
                int paramToInt;
                if (Int32.TryParse(param, out paramToInt))
                {
                    if (paramToInt < 0)
                        paramToInt = 0;

                    hasDigitLimits = true;
                    fractionDigits = paramToInt;
                }
            }

            if (formatParameters.HasParam(NUM_FRACTION_DELIMITER, out param))
            {
                nf.NumberDecimalSeparator = param;
            }

            if (formatParameters.HasParam(NUM_GROUPS_DELIMITER, out param))
            {
                nf.NumberGroupSeparator = param;
            }
            else
            {
                nf.NumberGroupSeparator = " ";
            }

            if (formatParameters.HasParam(NUM_GROUPING, out param))
            {
                nf.NumberGroupSizes = ParseGroupSizes(param);
            }

            if (formatParameters.HasParam(NUM_NEGATIVE_APPEARANCE, out param))
            {
                int pattern;
                if (int.TryParse(param, out pattern))
                    nf.NumberNegativePattern = pattern;
            }

            char leadingFormatSpecifier = '#';
            if (formatParameters.HasParam(NUM_LEADING_ZERO, out param))
            {
                leadingFormatSpecifier = '0';
            }

            StringBuilder formatBuilder = new StringBuilder();

            if (hasDigitLimits)
            {
                ApplyNumericSizeRestrictions(ref p, totalDigits, fractionDigits);

                formatBuilder.Append(leadingFormatSpecifier, totalDigits - fractionDigits);
                ApplyDigitsGrouping(formatBuilder, nf);

                formatBuilder.Append('.');
                formatBuilder.Append('#', fractionDigits);

            }
            else
            {
                int precision = GetDecimalPrecision(Decimal.GetBits(p));
                nf.NumberDecimalDigits = precision;
                formatBuilder.Append("N");
            }

            return p.ToString(formatBuilder.ToString(), nf);

        }
예제 #13
0
        private static string FormatBoolean(bool p, FormatParametersList formatParameters)
        {
            if(p)
            {
                var truePresentation = formatParameters.GetParamValue(BOOLEAN_TRUE);
                if (truePresentation != null)
                    return truePresentation;
            }
            else
            {
                var falsePresentation = formatParameters.GetParamValue(BOOLEAN_FALSE);
                if (falsePresentation != null)
                    return falsePresentation;
            }

            return ValueFactory.Create(p).AsString();
        }