private static ILocValue FormatToString(CultureInfo culture, LocArgs args) { var arg = args.Args[0]; var fmt = ((LocValueString)args.Args[1]).Value; var obj = arg.Value; if (obj is IFormattable formattable) { return(new LocValueString(formattable.ToString(fmt, culture))); } return(new LocValueString(obj?.ToString() ?? "")); }
private static ILocValue FormatUnitsGeneric(LocArgs args, string mode) { const int maxPlaces = 5; // Matches amount in _lib.ftl var pressure = ((LocValueNumber)args.Args[0]).Value; var places = 0; while (pressure > 1000 && places < maxPlaces) { pressure /= 1000; places += 1; } return(new LocValueString(Loc.GetString(mode, ("divided", pressure), ("places", places)))); }
private static ILocValue FormatUnits(LocArgs args) { if (!Units.Types.TryGetValue(((LocValueString)args.Args[0]).Value, out var ut)) { throw new ArgumentException($"Unknown unit type {((LocValueString) args.Args[0]).Value}"); } var fmtstr = ((LocValueString)args.Args[1]).Value; double max = Double.NegativeInfinity; var iargs = new double[args.Args.Count - 1]; for (var i = 2; i < args.Args.Count; i++) { var n = ((LocValueNumber)args.Args[i]).Value; if (n > max) { max = n; } iargs[i - 2] = n; } if (!ut !.TryGetUnit(max, out var mu)) { throw new ArgumentException("Unit out of range for type"); } var fargs = new object[iargs.Length]; for (var i = 0; i < iargs.Length; i++) { fargs[i] = iargs[i] * mu.Factor; } fargs[^ 1] = Loc.GetString($"units-{mu.Unit.ToLower()}");
private static ILocValue FormatPowerJoules(LocArgs args) { return(FormatUnitsGeneric(args, "zzzz-fmt-power-joules")); }
private static ILocValue FormatPressure(LocArgs args) { return(FormatUnitsGeneric(args, "zzzz-fmt-pressure")); }
private static ILocValue FormatLoc(LocArgs args) { var id = ((LocValueString)args.Args[0]).Value; return(new LocValueString(Loc.GetString(id))); }