private void ReadEnvironmentOverrides() { var env = System.Environment.GetEnvironmentVariable("OSCRIPT_CONFIG"); if (env == null) { return; } var paramList = new FormatParametersList(env); _currentConfig.Merge(paramList.ToDictionary()); }
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)); }
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); }
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()); }
/// <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); }
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)); }
private static string DefaultFormat(IValue value, FormatParametersList formatParameters) { return(value.AsString()); }
private static string DefaultFormat(IValue value, FormatParametersList formatParameters) { throw new NotImplementedException(); }
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)); }
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); }
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); }
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(); }